From faffe08074888e4bdc36607d00de451c5c230b52 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Tue, 21 Mar 2023 19:07:52 +0100 Subject: m68000: Bus and address errors do *not* disable the write part of the micro-instruction. Fixes the delta force protections (Syntax Terror, Punish your machine) --- src/devices/cpu/m68000/m68000-sdf.cpp | 35858 +++++++++++++++--------------- src/devices/cpu/m68000/m68000-sdfm.cpp | 35858 +++++++++++++++--------------- src/devices/cpu/m68000/m68000-sdp.cpp | 36706 +++++++++++++++---------------- src/devices/cpu/m68000/m68000-sdpm.cpp | 36706 +++++++++++++++---------------- src/devices/cpu/m68000/m68000-sif.cpp | 35858 +++++++++++++++--------------- src/devices/cpu/m68000/m68000-sifm.cpp | 35858 +++++++++++++++--------------- src/devices/cpu/m68000/m68000-sip.cpp | 36706 +++++++++++++++---------------- src/devices/cpu/m68000/m68000-sipm.cpp | 36706 +++++++++++++++---------------- src/devices/cpu/m68000/m68000gen.py | 28 +- 9 files changed, 145142 insertions(+), 145142 deletions(-) diff --git a/src/devices/cpu/m68000/m68000-sdf.cpp b/src/devices/cpu/m68000/m68000-sdf.cpp index 6165bb3b2da..6f6f2742895 100644 --- a/src/devices/cpu/m68000/m68000-sdf.cpp +++ b/src/devices/cpu/m68000/m68000-sdf.cpp @@ -30,6 +30,8 @@ void m68000_device::state_reset_df() 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46,11 +48,11 @@ void m68000_device::state_reset_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[16], m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -67,14 +69,14 @@ void m68000_device::state_reset_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[16], m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -91,13 +93,13 @@ void m68000_device::state_reset_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[16], m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -114,11 +116,10 @@ void m68000_device::state_reset_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -136,7 +137,6 @@ void m68000_device::state_reset_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -194,6 +194,9 @@ void m68000_device::state_bus_error_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -210,12 +213,13 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -232,13 +236,12 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -255,14 +258,16 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -279,14 +284,12 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -303,12 +306,15 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -325,15 +331,13 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -350,12 +354,10 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -372,11 +374,11 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -393,11 +395,10 @@ void m68000_device::state_bus_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -415,7 +416,6 @@ void m68000_device::state_bus_error_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -473,6 +473,9 @@ void m68000_device::state_address_error_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -489,12 +492,13 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -511,13 +515,12 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -534,14 +537,16 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -558,14 +563,12 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -582,12 +585,15 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -604,15 +610,13 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -629,12 +633,10 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -651,11 +653,11 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -672,11 +674,10 @@ void m68000_device::state_address_error_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -694,7 +695,6 @@ void m68000_device::state_address_error_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -760,6 +760,10 @@ void m68000_device::state_interrupt_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -776,10 +780,6 @@ void m68000_device::state_interrupt_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 236 itlx5 m_aob = m_at; m_base_ssw = SSW_CPU | SSW_R | SSW_N; @@ -814,6 +814,12 @@ void m68000_device::state_interrupt_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -830,15 +836,13 @@ void m68000_device::state_interrupt_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -855,12 +859,10 @@ void m68000_device::state_interrupt_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -877,11 +879,11 @@ void m68000_device::state_interrupt_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -898,11 +900,10 @@ void m68000_device::state_interrupt_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -920,7 +921,6 @@ void m68000_device::state_interrupt_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -976,6 +976,9 @@ void m68000_device::state_trace_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -992,12 +995,15 @@ void m68000_device::state_trace_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1014,15 +1020,13 @@ void m68000_device::state_trace_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1039,12 +1043,10 @@ void m68000_device::state_trace_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1061,11 +1063,11 @@ void m68000_device::state_trace_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1082,11 +1084,10 @@ void m68000_device::state_trace_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1104,7 +1105,6 @@ void m68000_device::state_trace_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -1160,6 +1160,9 @@ void m68000_device::state_illegal_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1176,12 +1179,15 @@ void m68000_device::state_illegal_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1198,15 +1204,13 @@ void m68000_device::state_illegal_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1223,12 +1227,10 @@ void m68000_device::state_illegal_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1245,11 +1247,11 @@ void m68000_device::state_illegal_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1266,11 +1268,10 @@ void m68000_device::state_illegal_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1288,7 +1289,6 @@ void m68000_device::state_illegal_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -1344,6 +1344,9 @@ void m68000_device::state_priviledge_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1360,12 +1363,15 @@ void m68000_device::state_priviledge_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1382,15 +1388,13 @@ void m68000_device::state_priviledge_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1407,12 +1411,10 @@ void m68000_device::state_priviledge_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1429,11 +1431,11 @@ void m68000_device::state_priviledge_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1450,11 +1452,10 @@ void m68000_device::state_priviledge_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1472,7 +1473,6 @@ void m68000_device::state_priviledge_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -1528,6 +1528,9 @@ void m68000_device::state_linea_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1544,12 +1547,15 @@ void m68000_device::state_linea_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1566,15 +1572,13 @@ void m68000_device::state_linea_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1591,12 +1595,10 @@ void m68000_device::state_linea_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1613,11 +1615,11 @@ void m68000_device::state_linea_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1634,11 +1636,10 @@ void m68000_device::state_linea_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1656,7 +1657,6 @@ void m68000_device::state_linea_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -1712,6 +1712,9 @@ void m68000_device::state_linef_df() // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1728,12 +1731,15 @@ void m68000_device::state_linef_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1750,15 +1756,13 @@ void m68000_device::state_linef_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -1775,12 +1779,10 @@ void m68000_device::state_linef_df() m_inst_state = S_ADDRESS_ERROR; return; } - 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); // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1797,11 +1799,11 @@ void m68000_device::state_linef_df() m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_at; - m_au = m_at + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1818,11 +1820,10 @@ void m68000_device::state_linef_df() m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1840,7 +1841,6 @@ void m68000_device::state_linef_df() return; } m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin) + 2; // 11c trap9 m_icount -= 2; // 363 b @@ -1881,6 +1881,10 @@ void m68000_device::ori_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1897,12 +1901,8 @@ void m68000_device::ori_b_imm8_ds_df() // 0000 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -1913,6 +1913,9 @@ void m68000_device::ori_b_imm8_ds_df() // 0000 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1929,11 +1932,8 @@ void m68000_device::ori_b_imm8_ds_df() // 0000 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -1946,6 +1946,10 @@ void m68000_device::ori_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -1962,18 +1966,16 @@ void m68000_device::ori_b_imm8_ais_df() // 0010 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -1987,12 +1989,15 @@ void m68000_device::ori_b_imm8_ais_df() // 0010 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2009,18 +2014,15 @@ void m68000_device::ori_b_imm8_ais_df() // 0010 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2032,8 +2034,6 @@ void m68000_device::ori_b_imm8_ais_df() // 0010 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2046,6 +2046,10 @@ void m68000_device::ori_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2062,12 +2066,8 @@ void m68000_device::ori_b_imm8_aips_df() // 0018 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -2077,6 +2077,10 @@ void m68000_device::ori_b_imm8_aips_df() // 0018 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2090,14 +2094,15 @@ void m68000_device::ori_b_imm8_aips_df() // 0018 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2114,18 +2119,15 @@ void m68000_device::ori_b_imm8_aips_df() // 0018 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2137,8 +2139,6 @@ void m68000_device::ori_b_imm8_aips_df() // 0018 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2151,6 +2151,10 @@ void m68000_device::ori_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2167,12 +2171,8 @@ void m68000_device::ori_b_imm8_pais_df() // 0020 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -2183,6 +2183,11 @@ void m68000_device::ori_b_imm8_pais_df() // 0020 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2196,15 +2201,15 @@ void m68000_device::ori_b_imm8_pais_df() // 0020 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2221,18 +2226,15 @@ void m68000_device::ori_b_imm8_pais_df() // 0020 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2244,8 +2246,6 @@ void m68000_device::ori_b_imm8_pais_df() // 0020 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2258,6 +2258,10 @@ void m68000_device::ori_b_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2274,14 +2278,12 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2299,9 +2301,7 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -2309,6 +2309,8 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2322,12 +2324,15 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2344,18 +2349,15 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2367,8 +2369,6 @@ void m68000_device::ori_b_imm8_das_df() // 0028 fff8 m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2381,6 +2381,10 @@ void m68000_device::ori_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2397,12 +2401,8 @@ void m68000_device::ori_b_imm8_dais_df() // 0030 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -2418,6 +2418,8 @@ void m68000_device::ori_b_imm8_dais_df() // 0030 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2434,14 +2436,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2458,10 +2460,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -2472,6 +2472,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2485,12 +2487,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2507,18 +2512,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2530,8 +2532,6 @@ adsw2: m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2543,6 +2543,10 @@ void m68000_device::ori_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2559,14 +2563,16 @@ void m68000_device::ori_b_imm8_adr16_df() // 0038 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2583,16 +2589,13 @@ void m68000_device::ori_b_imm8_adr16_df() // 0038 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2606,13 +2609,15 @@ void m68000_device::ori_b_imm8_adr16_df() // 0038 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2629,18 +2634,15 @@ void m68000_device::ori_b_imm8_adr16_df() // 0038 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2652,8 +2654,6 @@ void m68000_device::ori_b_imm8_adr16_df() // 0038 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2665,6 +2665,10 @@ void m68000_device::ori_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2681,14 +2685,13 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2705,12 +2708,15 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2727,16 +2733,13 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -2750,13 +2753,15 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2773,18 +2778,15 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -2796,8 +2798,6 @@ void m68000_device::ori_b_imm8_adr32_df() // 0039 ffff m_inst_substate = 12; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2809,6 +2809,10 @@ void m68000_device::ori_imm8_ccr_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2825,12 +2829,8 @@ void m68000_device::ori_imm8_ccr_df() // 003c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -2853,6 +2853,10 @@ void m68000_device::ori_imm8_ccr_df() // 003c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2869,12 +2873,8 @@ void m68000_device::ori_imm8_ccr_df() // 003c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -2884,6 +2884,7 @@ void m68000_device::ori_imm8_ccr_df() // 003c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2902,7 +2903,6 @@ void m68000_device::ori_imm8_ccr_df() // 003c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2915,6 +2915,10 @@ void m68000_device::ori_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2931,12 +2935,8 @@ void m68000_device::ori_w_imm16_ds_df() // 0040 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -2947,6 +2947,9 @@ void m68000_device::ori_w_imm16_ds_df() // 0040 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2963,11 +2966,8 @@ void m68000_device::ori_w_imm16_ds_df() // 0040 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -2980,6 +2980,10 @@ void m68000_device::ori_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -2996,18 +3000,16 @@ void m68000_device::ori_w_imm16_ais_df() // 0050 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3024,12 +3026,15 @@ void m68000_device::ori_w_imm16_ais_df() // 0050 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3046,18 +3051,15 @@ void m68000_device::ori_w_imm16_ais_df() // 0050 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3074,8 +3076,6 @@ void m68000_device::ori_w_imm16_ais_df() // 0050 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3088,6 +3088,10 @@ void m68000_device::ori_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3104,12 +3108,8 @@ void m68000_device::ori_w_imm16_aips_df() // 0058 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -3119,6 +3119,10 @@ void m68000_device::ori_w_imm16_aips_df() // 0058 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3135,14 +3139,15 @@ void m68000_device::ori_w_imm16_aips_df() // 0058 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3159,18 +3164,15 @@ void m68000_device::ori_w_imm16_aips_df() // 0058 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3187,8 +3189,6 @@ void m68000_device::ori_w_imm16_aips_df() // 0058 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3201,6 +3201,10 @@ void m68000_device::ori_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3217,12 +3221,8 @@ void m68000_device::ori_w_imm16_pais_df() // 0060 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -3233,6 +3233,11 @@ void m68000_device::ori_w_imm16_pais_df() // 0060 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3249,15 +3254,15 @@ void m68000_device::ori_w_imm16_pais_df() // 0060 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3274,18 +3279,15 @@ void m68000_device::ori_w_imm16_pais_df() // 0060 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3302,8 +3304,6 @@ void m68000_device::ori_w_imm16_pais_df() // 0060 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3316,6 +3316,10 @@ void m68000_device::ori_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3332,14 +3336,12 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3357,9 +3359,7 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -3367,6 +3367,8 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3383,12 +3385,15 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3405,18 +3410,15 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3433,8 +3435,6 @@ void m68000_device::ori_w_imm16_das_df() // 0068 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3447,6 +3447,10 @@ void m68000_device::ori_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3463,12 +3467,8 @@ void m68000_device::ori_w_imm16_dais_df() // 0070 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=14 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -3484,6 +3484,8 @@ void m68000_device::ori_w_imm16_dais_df() // 0070 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3500,14 +3502,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3524,10 +3526,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -3538,6 +3538,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3554,12 +3556,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3576,18 +3581,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3604,8 +3606,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3617,6 +3617,10 @@ void m68000_device::ori_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3633,14 +3637,16 @@ void m68000_device::ori_w_imm16_adr16_df() // 0078 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3657,16 +3663,13 @@ void m68000_device::ori_w_imm16_adr16_df() // 0078 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3683,13 +3686,15 @@ void m68000_device::ori_w_imm16_adr16_df() // 0078 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3706,18 +3711,15 @@ void m68000_device::ori_w_imm16_adr16_df() // 0078 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3734,8 +3736,6 @@ void m68000_device::ori_w_imm16_adr16_df() // 0078 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3747,6 +3747,10 @@ void m68000_device::ori_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3763,14 +3767,13 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3787,12 +3790,15 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3809,16 +3815,13 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3835,13 +3838,15 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3858,18 +3863,15 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -3886,8 +3888,6 @@ void m68000_device::ori_w_imm16_adr32_df() // 0079 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -3903,6 +3903,10 @@ void m68000_device::ori_i16u_sr_df() // 007c 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3919,12 +3923,8 @@ void m68000_device::ori_i16u_sr_df() // 007c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -3949,6 +3949,10 @@ void m68000_device::ori_i16u_sr_df() // 007c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3965,12 +3969,8 @@ void m68000_device::ori_i16u_sr_df() // 007c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -3980,6 +3980,7 @@ void m68000_device::ori_i16u_sr_df() // 007c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -3998,7 +3999,6 @@ void m68000_device::ori_i16u_sr_df() // 007c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -4011,6 +4011,9 @@ void m68000_device::ori_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4027,12 +4030,13 @@ void m68000_device::ori_l_imm32_ds_df() // 0080 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4049,12 +4053,8 @@ void m68000_device::ori_l_imm32_ds_df() // 0080 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 10c roal1 m_aob = m_au; m_ir = m_irc; @@ -4063,6 +4063,8 @@ void m68000_device::ori_l_imm32_ds_df() // 0080 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4079,10 +4081,8 @@ void m68000_device::ori_l_imm32_ds_df() // 0080 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.aluo:m_aluo d=none // 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])); @@ -4107,6 +4107,9 @@ void m68000_device::ori_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4123,12 +4126,13 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4145,14 +4149,13 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4169,12 +4172,14 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4191,15 +4196,15 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4216,16 +4221,15 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4242,15 +4246,13 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4267,8 +4269,6 @@ void m68000_device::ori_l_imm32_ais_df() // 0090 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -4281,6 +4281,9 @@ void m68000_device::ori_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4297,12 +4300,13 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4319,14 +4323,13 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4343,9 +4346,6 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -4355,6 +4355,9 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4371,13 +4374,15 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4394,16 +4399,15 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4420,15 +4424,13 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4445,8 +4447,6 @@ void m68000_device::ori_l_imm32_aips_df() // 0098 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -4459,6 +4459,9 @@ void m68000_device::ori_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4475,12 +4478,13 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4497,12 +4501,8 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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 @@ -4510,6 +4510,9 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4526,12 +4529,14 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4548,15 +4553,15 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4573,16 +4578,15 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4599,15 +4603,13 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4624,8 +4626,6 @@ void m68000_device::ori_l_imm32_pais_df() // 00a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -4638,6 +4638,9 @@ void m68000_device::ori_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4654,12 +4657,13 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4676,14 +4680,12 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4701,11 +4703,12 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4722,12 +4725,14 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4744,15 +4749,15 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4769,16 +4774,15 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4795,15 +4799,13 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -4820,8 +4822,6 @@ void m68000_device::ori_l_imm32_das_df() // 00a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -4834,6 +4834,9 @@ void m68000_device::ori_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4850,12 +4853,13 @@ void m68000_device::ori_l_imm32_dais_df() // 00b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4872,12 +4876,8 @@ void m68000_device::ori_l_imm32_dais_df() // 00b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 1e7 aixw0 // alu r=14 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -4893,6 +4893,8 @@ void m68000_device::ori_l_imm32_dais_df() // 00b0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4909,14 +4911,14 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4933,15 +4935,16 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4958,12 +4961,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -4980,15 +4985,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5005,16 +5010,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5031,15 +5035,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5056,8 +5058,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5069,6 +5069,9 @@ void m68000_device::ori_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5085,12 +5088,13 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5107,14 +5111,16 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5131,16 +5137,13 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5157,12 +5160,14 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5179,15 +5184,15 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5204,16 +5209,15 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5230,15 +5234,13 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5255,8 +5257,6 @@ void m68000_device::ori_l_imm32_adr16_df() // 00b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5268,6 +5268,9 @@ void m68000_device::ori_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5284,12 +5287,13 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5306,14 +5310,13 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5330,12 +5333,15 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5352,16 +5358,13 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5378,12 +5381,14 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5400,15 +5405,15 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5425,16 +5430,15 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5451,15 +5455,13 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -5476,8 +5478,6 @@ void m68000_device::ori_l_imm32_adr32_df() // 00b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5500,6 +5500,10 @@ void m68000_device::btst_dd_ds_df() // 0100 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5516,12 +5520,8 @@ void m68000_device::btst_dd_ds_df() // 0100 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 - alu_and(m_da[ry], 0xffff); if(m_t) goto btsr3; else @@ -5561,6 +5561,8 @@ void m68000_device::movep_w_das_dd_df() // 0108 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5578,11 +5580,11 @@ void m68000_device::movep_w_das_dd_df() // 0108 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5596,12 +5598,12 @@ void m68000_device::movep_w_das_dd_df() // 0108 f1f8 m_inst_substate = 4; return; } - m_au = m_au + 2; set_8h(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5615,13 +5617,15 @@ void m68000_device::movep_w_das_dd_df() // 0108 f1f8 m_inst_substate = 6; return; } - m_au = m_pc + 4; set_8(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5638,12 +5642,8 @@ void m68000_device::movep_w_das_dd_df() // 0108 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_da[rx], m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5661,6 +5661,8 @@ void m68000_device::btst_dd_ais_df() // 0110 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5674,9 +5676,7 @@ void m68000_device::btst_dd_ais_df() // 0110 f1f8 m_inst_substate = 2; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -5688,6 +5688,7 @@ void m68000_device::btst_dd_ais_df() // 0110 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5706,7 +5707,6 @@ void m68000_device::btst_dd_ais_df() // 0110 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5727,6 +5727,10 @@ void m68000_device::btst_dd_aips_df() // 0118 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5740,11 +5744,7 @@ void m68000_device::btst_dd_aips_df() // 0118 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -5756,6 +5756,7 @@ void m68000_device::btst_dd_aips_df() // 0118 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5774,7 +5775,6 @@ void m68000_device::btst_dd_aips_df() // 0118 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5796,6 +5796,11 @@ void m68000_device::btst_dd_pais_df() // 0120 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5809,12 +5814,7 @@ void m68000_device::btst_dd_pais_df() // 0120 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -5826,6 +5826,7 @@ void m68000_device::btst_dd_pais_df() // 0120 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5844,7 +5845,6 @@ void m68000_device::btst_dd_pais_df() // 0120 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5858,6 +5858,8 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5875,9 +5877,7 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -5885,6 +5885,8 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -5898,9 +5900,7 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -5912,6 +5912,7 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5930,7 +5931,6 @@ void m68000_device::btst_dd_das_df() // 0128 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -5957,6 +5957,8 @@ void m68000_device::btst_dd_dais_df() // 0130 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5973,14 +5975,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -5997,10 +5999,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -6011,6 +6011,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6024,9 +6026,7 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -6038,6 +6038,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6056,7 +6057,6 @@ adsw2: } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6069,6 +6069,12 @@ void m68000_device::btst_dd_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6085,16 +6091,13 @@ void m68000_device::btst_dd_adr16_df() // 0138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6108,9 +6111,6 @@ void m68000_device::btst_dd_adr16_df() // 0138 f1ff m_inst_substate = 4; return; } - 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_dbin = m_edb; // 215 btsm1 m_aob = m_au; @@ -6123,6 +6123,7 @@ void m68000_device::btst_dd_adr16_df() // 0138 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6141,7 +6142,6 @@ void m68000_device::btst_dd_adr16_df() // 0138 f1ff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6154,6 +6154,9 @@ void m68000_device::btst_dd_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6170,12 +6173,15 @@ void m68000_device::btst_dd_adr32_df() // 0139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6192,16 +6198,13 @@ void m68000_device::btst_dd_adr32_df() // 0139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6215,9 +6218,6 @@ void m68000_device::btst_dd_adr32_df() // 0139 f1ff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 215 btsm1 m_aob = m_au; @@ -6230,6 +6230,7 @@ void m68000_device::btst_dd_adr32_df() // 0139 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6248,7 +6249,6 @@ void m68000_device::btst_dd_adr32_df() // 0139 f1ff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6261,6 +6261,8 @@ void m68000_device::btst_dd_dpc_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6278,9 +6280,7 @@ void m68000_device::btst_dd_dpc_df() // 013a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -6288,6 +6288,8 @@ void m68000_device::btst_dd_dpc_df() // 013a f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6301,9 +6303,7 @@ void m68000_device::btst_dd_dpc_df() // 013a f1ff m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -6315,6 +6315,7 @@ void m68000_device::btst_dd_dpc_df() // 013a f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6333,7 +6334,6 @@ void m68000_device::btst_dd_dpc_df() // 013a f1ff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6359,6 +6359,8 @@ void m68000_device::btst_dd_dpci_df() // 013b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6375,14 +6377,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6399,10 +6401,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -6413,6 +6413,8 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6426,9 +6428,7 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -6440,6 +6440,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6458,7 +6459,6 @@ adsw2: } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6471,6 +6471,11 @@ void m68000_device::btst_dd_imm_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6487,13 +6492,8 @@ void m68000_device::btst_dd_imm_df() // 013c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 0ab btsi1 m_aob = m_au; m_ir = m_irc; @@ -6503,6 +6503,10 @@ void m68000_device::btst_dd_imm_df() // 013c f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6519,12 +6523,8 @@ void m68000_device::btst_dd_imm_df() // 013c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dt; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=-1 - alu_and8(m_dt, 0xffff); if(m_t) goto btsr3; else @@ -6573,6 +6573,10 @@ void m68000_device::bchg_dd_ds_df() // 0140 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6589,12 +6593,8 @@ void m68000_device::bchg_dd_ds_df() // 0140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bcsr3; else @@ -6640,6 +6640,8 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6657,11 +6659,11 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6675,11 +6677,11 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 m_inst_substate = 4; return; } - m_au = m_au + 2; set_8h(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6693,11 +6695,12 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 m_inst_substate = 6; return; } - m_au = m_au + 2; set_8(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6711,13 +6714,12 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 m_inst_substate = 8; return; } - set_16h(m_da[rx], m_dbin); - m_au = m_au + 2; set_8h(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6731,13 +6733,15 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 m_inst_substate = 10; return; } - m_au = m_pc + 4; set_8(m_dbin, m_edb); - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6754,12 +6758,8 @@ void m68000_device::movep_l_das_dd_df() // 0148 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_da[rx], m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6777,6 +6777,8 @@ void m68000_device::bchg_dd_ais_df() // 0150 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6790,12 +6792,15 @@ void m68000_device::bchg_dd_ais_df() // 0150 f1f8 m_inst_substate = 2; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6812,18 +6817,16 @@ void m68000_device::bchg_dd_ais_df() // 0150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -6835,9 +6838,6 @@ void m68000_device::bchg_dd_ais_df() // 0150 f1f8 m_inst_substate = 6; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6858,6 +6858,10 @@ void m68000_device::bchg_dd_aips_df() // 0158 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6871,14 +6875,15 @@ void m68000_device::bchg_dd_aips_df() // 0158 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6895,18 +6900,16 @@ void m68000_device::bchg_dd_aips_df() // 0158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -6918,9 +6921,6 @@ void m68000_device::bchg_dd_aips_df() // 0158 f1f8 m_inst_substate = 6; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -6942,6 +6942,11 @@ void m68000_device::bchg_dd_pais_df() // 0160 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -6955,15 +6960,15 @@ void m68000_device::bchg_dd_pais_df() // 0160 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -6980,18 +6985,16 @@ void m68000_device::bchg_dd_pais_df() // 0160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7003,9 +7006,6 @@ void m68000_device::bchg_dd_pais_df() // 0160 f1f8 m_inst_substate = 6; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7019,6 +7019,8 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7036,9 +7038,7 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -7046,6 +7046,8 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7059,12 +7061,15 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7081,18 +7086,16 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7104,9 +7107,6 @@ void m68000_device::bchg_dd_das_df() // 0168 f1f8 m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7133,6 +7133,8 @@ void m68000_device::bchg_dd_dais_df() // 0170 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7149,14 +7151,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7173,10 +7175,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -7187,6 +7187,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7200,12 +7202,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7222,18 +7227,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7245,9 +7248,6 @@ adsw2: m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7260,6 +7260,12 @@ void m68000_device::bchg_dd_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7276,16 +7282,13 @@ void m68000_device::bchg_dd_adr16_df() // 0178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7299,13 +7302,15 @@ void m68000_device::bchg_dd_adr16_df() // 0178 f1ff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7322,18 +7327,16 @@ void m68000_device::bchg_dd_adr16_df() // 0178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7345,9 +7348,6 @@ void m68000_device::bchg_dd_adr16_df() // 0178 f1ff m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7360,6 +7360,9 @@ void m68000_device::bchg_dd_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7376,12 +7379,15 @@ void m68000_device::bchg_dd_adr32_df() // 0179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7398,16 +7404,13 @@ void m68000_device::bchg_dd_adr32_df() // 0179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7421,13 +7424,15 @@ void m68000_device::bchg_dd_adr32_df() // 0179 f1ff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7444,18 +7449,16 @@ void m68000_device::bchg_dd_adr32_df() // 0179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7467,9 +7470,6 @@ void m68000_device::bchg_dd_adr32_df() // 0179 f1ff m_inst_substate = 10; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7492,6 +7492,10 @@ void m68000_device::bclr_dd_ds_df() // 0180 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7508,12 +7512,8 @@ void m68000_device::bclr_dd_ds_df() // 0180 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bclr3; else @@ -7567,6 +7567,8 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7584,13 +7586,13 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dbin:m_dbin // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7602,11 +7604,11 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 m_inst_substate = 4; return; } - m_au = m_au + 2; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=R.dxl:m_da[rx] // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7618,8 +7620,6 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 m_inst_substate = 6; return; } - m_au = m_pc + 4; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dxl:m_da[rx] d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -7629,6 +7629,7 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7647,7 +7648,6 @@ void m68000_device::movep_w_dd_das_df() // 0188 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7665,6 +7665,8 @@ void m68000_device::bclr_dd_ais_df() // 0190 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7678,9 +7680,7 @@ void m68000_device::bclr_dd_ais_df() // 0190 f1f8 m_inst_substate = 2; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -7689,6 +7689,10 @@ void m68000_device::bclr_dd_ais_df() // 0190 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7705,17 +7709,16 @@ void m68000_device::bclr_dd_ais_df() // 0190 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7727,9 +7730,6 @@ void m68000_device::bclr_dd_ais_df() // 0190 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7750,6 +7750,10 @@ void m68000_device::bclr_dd_aips_df() // 0198 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7763,11 +7767,7 @@ void m68000_device::bclr_dd_aips_df() // 0198 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -7776,6 +7776,10 @@ void m68000_device::bclr_dd_aips_df() // 0198 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7792,17 +7796,16 @@ void m68000_device::bclr_dd_aips_df() // 0198 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7814,9 +7817,6 @@ void m68000_device::bclr_dd_aips_df() // 0198 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7838,6 +7838,11 @@ void m68000_device::bclr_dd_pais_df() // 01a0 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7851,12 +7856,7 @@ void m68000_device::bclr_dd_pais_df() // 01a0 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -7865,6 +7865,10 @@ void m68000_device::bclr_dd_pais_df() // 01a0 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7881,17 +7885,16 @@ void m68000_device::bclr_dd_pais_df() // 01a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -7903,9 +7906,6 @@ void m68000_device::bclr_dd_pais_df() // 01a0 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -7919,6 +7919,8 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7936,9 +7938,7 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -7946,6 +7946,8 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -7959,9 +7961,7 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -7970,6 +7970,10 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -7986,17 +7990,16 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8008,9 +8011,6 @@ void m68000_device::bclr_dd_das_df() // 01a8 f1f8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8037,6 +8037,8 @@ void m68000_device::bclr_dd_dais_df() // 01b0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8053,14 +8055,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8077,10 +8079,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -8091,6 +8091,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8104,9 +8106,7 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dxl:m_da[rx] d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -8115,6 +8115,10 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8131,17 +8135,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8153,9 +8156,6 @@ adsw2: m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8168,6 +8168,12 @@ void m68000_device::bclr_dd_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8184,16 +8190,13 @@ void m68000_device::bclr_dd_adr16_df() // 01b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8207,9 +8210,6 @@ void m68000_device::bclr_dd_adr16_df() // 01b8 f1ff m_inst_substate = 4; return; } - 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_dbin = m_edb; // 069 bclm1 m_aob = m_au; @@ -8219,6 +8219,10 @@ void m68000_device::bclr_dd_adr16_df() // 01b8 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8235,17 +8239,16 @@ void m68000_device::bclr_dd_adr16_df() // 01b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8257,9 +8260,6 @@ void m68000_device::bclr_dd_adr16_df() // 01b8 f1ff m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8272,6 +8272,9 @@ void m68000_device::bclr_dd_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8288,12 +8291,15 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8310,16 +8316,13 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8333,9 +8336,6 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 069 bclm1 m_aob = m_au; @@ -8345,6 +8345,10 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8361,17 +8365,16 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8383,9 +8386,6 @@ void m68000_device::bclr_dd_adr32_df() // 01b9 f1ff m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8408,6 +8408,10 @@ void m68000_device::bset_dd_ds_df() // 01c0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8424,12 +8428,8 @@ void m68000_device::bset_dd_ds_df() // 01c0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bcsr3; else @@ -8475,6 +8475,8 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8492,12 +8494,12 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dbin:m_dbin // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8509,11 +8511,11 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 m_inst_substate = 4; return; } - m_au = m_au + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8525,12 +8527,12 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 m_inst_substate = 6; return; } - m_au = m_au + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=16:m_da[rx] d=none // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8542,11 +8544,11 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 m_inst_substate = 8; return; } - m_au = m_au + 2; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=R.dxl:m_da[rx] // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8558,8 +8560,6 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 m_inst_substate = 10; return; } - m_au = m_pc + 4; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dxl:m_da[rx] d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -8569,6 +8569,7 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8587,7 +8588,6 @@ void m68000_device::movep_l_dd_das_df() // 01c8 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8605,6 +8605,8 @@ void m68000_device::bset_dd_ais_df() // 01d0 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8618,12 +8620,15 @@ void m68000_device::bset_dd_ais_df() // 01d0 f1f8 m_inst_substate = 2; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8640,18 +8645,16 @@ void m68000_device::bset_dd_ais_df() // 01d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8663,9 +8666,6 @@ void m68000_device::bset_dd_ais_df() // 01d0 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8686,6 +8686,10 @@ void m68000_device::bset_dd_aips_df() // 01d8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8699,14 +8703,15 @@ void m68000_device::bset_dd_aips_df() // 01d8 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8723,18 +8728,16 @@ void m68000_device::bset_dd_aips_df() // 01d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8746,9 +8749,6 @@ void m68000_device::bset_dd_aips_df() // 01d8 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8770,6 +8770,11 @@ void m68000_device::bset_dd_pais_df() // 01e0 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8783,15 +8788,15 @@ void m68000_device::bset_dd_pais_df() // 01e0 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8808,18 +8813,16 @@ void m68000_device::bset_dd_pais_df() // 01e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8831,9 +8834,6 @@ void m68000_device::bset_dd_pais_df() // 01e0 f1f8 m_inst_substate = 6; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8847,6 +8847,8 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8864,9 +8866,7 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -8874,6 +8874,8 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -8887,12 +8889,15 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8909,18 +8914,16 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -8932,9 +8935,6 @@ void m68000_device::bset_dd_das_df() // 01e8 f1f8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -8961,6 +8961,8 @@ void m68000_device::bset_dd_dais_df() // 01f0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -8977,14 +8979,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9001,10 +9003,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -9015,6 +9015,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9028,12 +9030,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dxl:m_da[rx] d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9050,18 +9055,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9073,9 +9076,6 @@ adsw2: m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9088,6 +9088,12 @@ void m68000_device::bset_dd_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9104,16 +9110,13 @@ void m68000_device::bset_dd_adr16_df() // 01f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9127,13 +9130,15 @@ void m68000_device::bset_dd_adr16_df() // 01f8 f1ff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9150,18 +9155,16 @@ void m68000_device::bset_dd_adr16_df() // 01f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9173,9 +9176,6 @@ void m68000_device::bset_dd_adr16_df() // 01f8 f1ff m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9188,6 +9188,9 @@ void m68000_device::bset_dd_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9204,12 +9207,15 @@ void m68000_device::bset_dd_adr32_df() // 01f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9226,16 +9232,13 @@ void m68000_device::bset_dd_adr32_df() // 01f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9249,13 +9252,15 @@ void m68000_device::bset_dd_adr32_df() // 01f9 f1ff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9272,18 +9277,16 @@ void m68000_device::bset_dd_adr32_df() // 01f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9295,9 +9298,6 @@ void m68000_device::bset_dd_adr32_df() // 01f9 f1ff m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9310,6 +9310,10 @@ void m68000_device::andi_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9326,12 +9330,8 @@ void m68000_device::andi_b_imm8_ds_df() // 0200 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -9342,6 +9342,9 @@ void m68000_device::andi_b_imm8_ds_df() // 0200 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9358,11 +9361,8 @@ void m68000_device::andi_b_imm8_ds_df() // 0200 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9375,6 +9375,10 @@ void m68000_device::andi_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9391,18 +9395,16 @@ void m68000_device::andi_b_imm8_ais_df() // 0210 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9416,12 +9418,15 @@ void m68000_device::andi_b_imm8_ais_df() // 0210 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9438,18 +9443,15 @@ void m68000_device::andi_b_imm8_ais_df() // 0210 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9461,8 +9463,6 @@ void m68000_device::andi_b_imm8_ais_df() // 0210 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9475,6 +9475,10 @@ void m68000_device::andi_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9491,12 +9495,8 @@ void m68000_device::andi_b_imm8_aips_df() // 0218 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -9506,6 +9506,10 @@ void m68000_device::andi_b_imm8_aips_df() // 0218 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9519,14 +9523,15 @@ void m68000_device::andi_b_imm8_aips_df() // 0218 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9543,18 +9548,15 @@ void m68000_device::andi_b_imm8_aips_df() // 0218 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9566,8 +9568,6 @@ void m68000_device::andi_b_imm8_aips_df() // 0218 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9580,6 +9580,10 @@ void m68000_device::andi_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9596,12 +9600,8 @@ void m68000_device::andi_b_imm8_pais_df() // 0220 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -9612,6 +9612,11 @@ void m68000_device::andi_b_imm8_pais_df() // 0220 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9625,15 +9630,15 @@ void m68000_device::andi_b_imm8_pais_df() // 0220 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=4 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9650,18 +9655,15 @@ void m68000_device::andi_b_imm8_pais_df() // 0220 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9673,8 +9675,6 @@ void m68000_device::andi_b_imm8_pais_df() // 0220 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9687,6 +9687,10 @@ void m68000_device::andi_b_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9703,14 +9707,12 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9728,9 +9730,7 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -9738,6 +9738,8 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9751,12 +9753,15 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9773,18 +9778,15 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9796,8 +9798,6 @@ void m68000_device::andi_b_imm8_das_df() // 0228 fff8 m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9810,6 +9810,10 @@ void m68000_device::andi_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9826,12 +9830,8 @@ void m68000_device::andi_b_imm8_dais_df() // 0230 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=4 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -9847,6 +9847,8 @@ void m68000_device::andi_b_imm8_dais_df() // 0230 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9863,14 +9865,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9887,10 +9889,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -9901,6 +9901,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -9914,12 +9916,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9936,18 +9941,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -9959,8 +9961,6 @@ adsw2: m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -9972,6 +9972,10 @@ void m68000_device::andi_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -9988,14 +9992,16 @@ void m68000_device::andi_b_imm8_adr16_df() // 0238 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10012,16 +10018,13 @@ void m68000_device::andi_b_imm8_adr16_df() // 0238 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -10035,13 +10038,15 @@ void m68000_device::andi_b_imm8_adr16_df() // 0238 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10058,18 +10063,15 @@ void m68000_device::andi_b_imm8_adr16_df() // 0238 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -10081,8 +10083,6 @@ void m68000_device::andi_b_imm8_adr16_df() // 0238 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10094,6 +10094,10 @@ void m68000_device::andi_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10110,14 +10114,13 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10134,12 +10137,15 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10156,16 +10162,13 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -10179,13 +10182,15 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10202,18 +10207,15 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -10225,8 +10227,6 @@ void m68000_device::andi_b_imm8_adr32_df() // 0239 ffff m_inst_substate = 12; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10238,6 +10238,10 @@ void m68000_device::andi_imm8_ccr_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10254,12 +10258,8 @@ void m68000_device::andi_imm8_ccr_df() // 023c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -10282,6 +10282,10 @@ void m68000_device::andi_imm8_ccr_df() // 023c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10298,12 +10302,8 @@ void m68000_device::andi_imm8_ccr_df() // 023c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -10313,6 +10313,7 @@ void m68000_device::andi_imm8_ccr_df() // 023c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10331,7 +10332,6 @@ void m68000_device::andi_imm8_ccr_df() // 023c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=b...... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10344,6 +10344,10 @@ void m68000_device::andi_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10360,12 +10364,8 @@ void m68000_device::andi_w_imm16_ds_df() // 0240 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -10376,6 +10376,9 @@ void m68000_device::andi_w_imm16_ds_df() // 0240 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10392,11 +10395,8 @@ void m68000_device::andi_w_imm16_ds_df() // 0240 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10409,6 +10409,10 @@ void m68000_device::andi_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10425,18 +10429,16 @@ void m68000_device::andi_w_imm16_ais_df() // 0250 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10453,12 +10455,15 @@ void m68000_device::andi_w_imm16_ais_df() // 0250 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10475,18 +10480,15 @@ void m68000_device::andi_w_imm16_ais_df() // 0250 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -10503,8 +10505,6 @@ void m68000_device::andi_w_imm16_ais_df() // 0250 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10517,6 +10517,10 @@ void m68000_device::andi_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10533,12 +10537,8 @@ void m68000_device::andi_w_imm16_aips_df() // 0258 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -10548,6 +10548,10 @@ void m68000_device::andi_w_imm16_aips_df() // 0258 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10564,14 +10568,15 @@ void m68000_device::andi_w_imm16_aips_df() // 0258 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10588,18 +10593,15 @@ void m68000_device::andi_w_imm16_aips_df() // 0258 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -10616,8 +10618,6 @@ void m68000_device::andi_w_imm16_aips_df() // 0258 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10630,6 +10630,10 @@ void m68000_device::andi_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10646,12 +10650,8 @@ void m68000_device::andi_w_imm16_pais_df() // 0260 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -10662,6 +10662,11 @@ void m68000_device::andi_w_imm16_pais_df() // 0260 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10678,15 +10683,15 @@ void m68000_device::andi_w_imm16_pais_df() // 0260 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=4 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10703,18 +10708,15 @@ void m68000_device::andi_w_imm16_pais_df() // 0260 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -10731,8 +10733,6 @@ void m68000_device::andi_w_imm16_pais_df() // 0260 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10745,6 +10745,10 @@ void m68000_device::andi_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10761,14 +10765,12 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10786,9 +10788,7 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -10796,6 +10796,8 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10812,12 +10814,15 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10834,18 +10839,15 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -10862,8 +10864,6 @@ void m68000_device::andi_w_imm16_das_df() // 0268 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -10876,6 +10876,10 @@ void m68000_device::andi_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10892,12 +10896,8 @@ void m68000_device::andi_w_imm16_dais_df() // 0270 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=4 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -10913,6 +10913,8 @@ void m68000_device::andi_w_imm16_dais_df() // 0270 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10929,14 +10931,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10953,10 +10955,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -10967,6 +10967,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -10983,12 +10985,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11005,18 +11010,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11033,8 +11035,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11046,6 +11046,10 @@ void m68000_device::andi_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11062,14 +11066,16 @@ void m68000_device::andi_w_imm16_adr16_df() // 0278 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11086,16 +11092,13 @@ void m68000_device::andi_w_imm16_adr16_df() // 0278 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11112,13 +11115,15 @@ void m68000_device::andi_w_imm16_adr16_df() // 0278 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11135,18 +11140,15 @@ void m68000_device::andi_w_imm16_adr16_df() // 0278 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11163,8 +11165,6 @@ void m68000_device::andi_w_imm16_adr16_df() // 0278 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11176,6 +11176,10 @@ void m68000_device::andi_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11192,14 +11196,13 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11216,12 +11219,15 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11238,16 +11244,13 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11264,13 +11267,15 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11287,18 +11292,15 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11315,8 +11317,6 @@ void m68000_device::andi_w_imm16_adr32_df() // 0279 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11332,6 +11332,10 @@ void m68000_device::andi_i16u_sr_df() // 027c 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11348,12 +11352,8 @@ void m68000_device::andi_i16u_sr_df() // 027c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -11378,6 +11378,10 @@ void m68000_device::andi_i16u_sr_df() // 027c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11394,12 +11398,8 @@ void m68000_device::andi_i16u_sr_df() // 027c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -11409,6 +11409,7 @@ void m68000_device::andi_i16u_sr_df() // 027c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11427,7 +11428,6 @@ void m68000_device::andi_i16u_sr_df() // 027c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=....... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11440,6 +11440,9 @@ void m68000_device::andi_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11456,12 +11459,13 @@ void m68000_device::andi_l_imm32_ds_df() // 0280 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11478,12 +11482,8 @@ void m68000_device::andi_l_imm32_ds_df() // 0280 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 10c roal1 m_aob = m_au; m_ir = m_irc; @@ -11492,6 +11492,8 @@ void m68000_device::andi_l_imm32_ds_df() // 0280 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11508,10 +11510,8 @@ void m68000_device::andi_l_imm32_ds_df() // 0280 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.aluo:m_aluo d=none // 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])); @@ -11536,6 +11536,9 @@ void m68000_device::andi_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11552,12 +11555,13 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11574,14 +11578,13 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11598,12 +11601,14 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11620,15 +11625,15 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11645,16 +11650,15 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11671,15 +11675,13 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11696,8 +11698,6 @@ void m68000_device::andi_l_imm32_ais_df() // 0290 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11710,6 +11710,9 @@ void m68000_device::andi_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11726,12 +11729,13 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11748,14 +11752,13 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11772,9 +11775,6 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -11784,6 +11784,9 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11800,13 +11803,15 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11823,16 +11828,15 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11849,15 +11853,13 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -11874,8 +11876,6 @@ void m68000_device::andi_l_imm32_aips_df() // 0298 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -11888,6 +11888,9 @@ void m68000_device::andi_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11904,12 +11907,13 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11926,12 +11930,8 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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 @@ -11939,6 +11939,9 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11955,12 +11958,14 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -11977,15 +11982,15 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12002,16 +12007,15 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12028,15 +12032,13 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12053,8 +12055,6 @@ void m68000_device::andi_l_imm32_pais_df() // 02a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -12067,6 +12067,9 @@ void m68000_device::andi_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12083,12 +12086,13 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12105,14 +12109,12 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12130,11 +12132,12 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12151,12 +12154,14 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12173,15 +12178,15 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12198,16 +12203,15 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12224,15 +12228,13 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12249,8 +12251,6 @@ void m68000_device::andi_l_imm32_das_df() // 02a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -12263,6 +12263,9 @@ void m68000_device::andi_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12279,12 +12282,13 @@ void m68000_device::andi_l_imm32_dais_df() // 02b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12301,12 +12305,8 @@ void m68000_device::andi_l_imm32_dais_df() // 02b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 1e7 aixw0 // alu r=4 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -12322,6 +12322,8 @@ void m68000_device::andi_l_imm32_dais_df() // 02b0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12338,14 +12340,14 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12362,15 +12364,16 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12387,12 +12390,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12409,15 +12414,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12434,16 +12439,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12460,15 +12464,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12485,8 +12487,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -12498,6 +12498,9 @@ void m68000_device::andi_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12514,12 +12517,13 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12536,14 +12540,16 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12560,16 +12566,13 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12586,12 +12589,14 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12608,15 +12613,15 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12633,16 +12638,15 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12659,15 +12663,13 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12684,8 +12686,6 @@ void m68000_device::andi_l_imm32_adr16_df() // 02b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -12697,6 +12697,9 @@ void m68000_device::andi_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12713,12 +12716,13 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12735,14 +12739,13 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12759,12 +12762,15 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12781,16 +12787,13 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12807,12 +12810,14 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12829,15 +12834,15 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12854,16 +12859,15 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12880,15 +12884,13 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -12905,8 +12907,6 @@ void m68000_device::andi_l_imm32_adr32_df() // 02b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=4 c=0 m=..... i=.l..... ALU.and_ a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -12919,6 +12919,9 @@ void m68000_device::subi_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12935,10 +12938,7 @@ void m68000_device::subi_b_imm8_ds_df() // 0400 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 100 roaw1 m_aob = m_au; @@ -12950,6 +12950,8 @@ void m68000_device::subi_b_imm8_ds_df() // 0400 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12966,9 +12968,7 @@ void m68000_device::subi_b_imm8_ds_df() // 0400 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -12982,6 +12982,9 @@ void m68000_device::subi_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -12998,10 +13001,7 @@ void m68000_device::subi_b_imm8_ais_df() // 0410 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -13009,6 +13009,7 @@ void m68000_device::subi_b_imm8_ais_df() // 0410 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13022,11 +13023,15 @@ void m68000_device::subi_b_imm8_ais_df() // 0410 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13043,18 +13048,14 @@ void m68000_device::subi_b_imm8_ais_df() // 0410 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13066,7 +13067,6 @@ void m68000_device::subi_b_imm8_ais_df() // 0410 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13079,6 +13079,9 @@ void m68000_device::subi_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13095,10 +13098,7 @@ void m68000_device::subi_b_imm8_aips_df() // 0418 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -13107,6 +13107,10 @@ void m68000_device::subi_b_imm8_aips_df() // 0418 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13120,14 +13124,15 @@ void m68000_device::subi_b_imm8_aips_df() // 0418 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13144,18 +13149,14 @@ void m68000_device::subi_b_imm8_aips_df() // 0418 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13167,7 +13168,6 @@ void m68000_device::subi_b_imm8_aips_df() // 0418 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13180,6 +13180,9 @@ void m68000_device::subi_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13196,10 +13199,7 @@ void m68000_device::subi_b_imm8_pais_df() // 0420 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 103 pdcw1 m_alub = m_dbin; @@ -13209,6 +13209,11 @@ void m68000_device::subi_b_imm8_pais_df() // 0420 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13222,15 +13227,15 @@ void m68000_device::subi_b_imm8_pais_df() // 0420 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=5 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13247,18 +13252,14 @@ void m68000_device::subi_b_imm8_pais_df() // 0420 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13270,7 +13271,6 @@ void m68000_device::subi_b_imm8_pais_df() // 0420 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13283,6 +13283,9 @@ void m68000_device::subi_b_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13299,13 +13302,11 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13323,7 +13324,6 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -13332,6 +13332,7 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13345,11 +13346,15 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13366,18 +13371,14 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13389,7 +13390,6 @@ void m68000_device::subi_b_imm8_das_df() // 0428 fff8 m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13402,6 +13402,9 @@ void m68000_device::subi_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13418,10 +13421,7 @@ void m68000_device::subi_b_imm8_dais_df() // 0430 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=5 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -13437,6 +13437,7 @@ void m68000_device::subi_b_imm8_dais_df() // 0430 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13453,13 +13454,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13476,7 +13477,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -13489,6 +13489,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13502,11 +13503,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13523,18 +13528,14 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13546,7 +13547,6 @@ adsw2: m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13558,6 +13558,9 @@ void m68000_device::subi_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13574,13 +13577,14 @@ void m68000_device::subi_b_imm8_adr16_df() // 0438 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13597,14 +13601,13 @@ void m68000_device::subi_b_imm8_adr16_df() // 0438 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13618,13 +13621,15 @@ void m68000_device::subi_b_imm8_adr16_df() // 0438 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13641,18 +13646,14 @@ void m68000_device::subi_b_imm8_adr16_df() // 0438 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13664,7 +13665,6 @@ void m68000_device::subi_b_imm8_adr16_df() // 0438 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13676,6 +13676,9 @@ void m68000_device::subi_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13692,13 +13695,12 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13715,11 +13717,13 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13736,14 +13740,13 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -13757,13 +13760,15 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13780,18 +13785,14 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -13803,7 +13804,6 @@ void m68000_device::subi_b_imm8_adr32_df() // 0439 ffff m_inst_substate = 12; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13816,6 +13816,9 @@ void m68000_device::subi_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13832,10 +13835,7 @@ void m68000_device::subi_w_imm16_ds_df() // 0440 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 100 roaw1 m_aob = m_au; @@ -13847,6 +13847,8 @@ void m68000_device::subi_w_imm16_ds_df() // 0440 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13863,9 +13865,7 @@ void m68000_device::subi_w_imm16_ds_df() // 0440 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -13879,6 +13879,9 @@ void m68000_device::subi_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13895,10 +13898,7 @@ void m68000_device::subi_w_imm16_ais_df() // 0450 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -13906,6 +13906,7 @@ void m68000_device::subi_w_imm16_ais_df() // 0450 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13922,11 +13923,15 @@ void m68000_device::subi_w_imm16_ais_df() // 0450 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -13943,18 +13948,14 @@ void m68000_device::subi_w_imm16_ais_df() // 0450 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -13971,7 +13972,6 @@ void m68000_device::subi_w_imm16_ais_df() // 0450 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -13984,6 +13984,9 @@ void m68000_device::subi_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14000,10 +14003,7 @@ void m68000_device::subi_w_imm16_aips_df() // 0458 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -14012,6 +14012,10 @@ void m68000_device::subi_w_imm16_aips_df() // 0458 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14028,14 +14032,15 @@ void m68000_device::subi_w_imm16_aips_df() // 0458 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14052,18 +14057,14 @@ void m68000_device::subi_w_imm16_aips_df() // 0458 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14080,7 +14081,6 @@ void m68000_device::subi_w_imm16_aips_df() // 0458 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14093,6 +14093,9 @@ void m68000_device::subi_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14109,10 +14112,7 @@ void m68000_device::subi_w_imm16_pais_df() // 0460 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 103 pdcw1 m_alub = m_dbin; @@ -14122,6 +14122,11 @@ void m68000_device::subi_w_imm16_pais_df() // 0460 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14138,15 +14143,15 @@ void m68000_device::subi_w_imm16_pais_df() // 0460 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=5 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14163,18 +14168,14 @@ void m68000_device::subi_w_imm16_pais_df() // 0460 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14191,7 +14192,6 @@ void m68000_device::subi_w_imm16_pais_df() // 0460 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14204,6 +14204,9 @@ void m68000_device::subi_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14220,13 +14223,11 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14244,7 +14245,6 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -14253,6 +14253,7 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14269,11 +14270,15 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14290,18 +14295,14 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14318,7 +14319,6 @@ void m68000_device::subi_w_imm16_das_df() // 0468 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14331,6 +14331,9 @@ void m68000_device::subi_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14347,10 +14350,7 @@ void m68000_device::subi_w_imm16_dais_df() // 0470 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=5 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -14366,6 +14366,7 @@ void m68000_device::subi_w_imm16_dais_df() // 0470 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14382,13 +14383,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14405,7 +14406,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -14418,6 +14418,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14434,11 +14435,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14455,18 +14460,14 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14483,7 +14484,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14495,6 +14495,9 @@ void m68000_device::subi_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14511,13 +14514,14 @@ void m68000_device::subi_w_imm16_adr16_df() // 0478 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14534,14 +14538,13 @@ void m68000_device::subi_w_imm16_adr16_df() // 0478 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14558,13 +14561,15 @@ void m68000_device::subi_w_imm16_adr16_df() // 0478 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14581,18 +14586,14 @@ void m68000_device::subi_w_imm16_adr16_df() // 0478 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14609,7 +14610,6 @@ void m68000_device::subi_w_imm16_adr16_df() // 0478 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14621,6 +14621,9 @@ void m68000_device::subi_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14637,13 +14640,12 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14660,11 +14662,13 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14681,14 +14685,13 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14705,13 +14708,15 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14728,18 +14733,14 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14756,7 +14757,6 @@ void m68000_device::subi_w_imm16_adr32_df() // 0479 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -14769,6 +14769,8 @@ void m68000_device::subi_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14785,11 +14787,12 @@ void m68000_device::subi_l_imm32_ds_df() // 0480 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14806,10 +14809,7 @@ void m68000_device::subi_l_imm32_ds_df() // 0480 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 10c roal1 m_aob = m_au; @@ -14819,6 +14819,7 @@ void m68000_device::subi_l_imm32_ds_df() // 0480 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14835,7 +14836,6 @@ void m68000_device::subi_l_imm32_ds_df() // 0480 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; m_dbin = m_edb; // 25a roal3 @@ -14861,6 +14861,8 @@ void m68000_device::subi_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14877,11 +14879,12 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14898,13 +14901,13 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14921,12 +14924,13 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14943,14 +14947,15 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -14967,16 +14972,15 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -14993,15 +14997,12 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15018,7 +15019,6 @@ void m68000_device::subi_l_imm32_ais_df() // 0490 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15031,6 +15031,8 @@ void m68000_device::subi_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15047,11 +15049,12 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15068,13 +15071,13 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15091,9 +15094,6 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -15102,6 +15102,8 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15118,12 +15120,15 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15140,16 +15145,15 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15166,15 +15170,12 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15191,7 +15192,6 @@ void m68000_device::subi_l_imm32_aips_df() // 0498 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15204,6 +15204,8 @@ void m68000_device::subi_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15220,11 +15222,12 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15241,10 +15244,7 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 179 pdcl1 m_au = m_da[ry] - 4; @@ -15253,6 +15253,8 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15269,11 +15271,13 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15290,14 +15294,15 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15314,16 +15319,15 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15340,15 +15344,12 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15365,7 +15366,6 @@ void m68000_device::subi_l_imm32_pais_df() // 04a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15378,6 +15378,8 @@ void m68000_device::subi_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15394,11 +15396,12 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15415,13 +15418,11 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15439,10 +15440,12 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15459,12 +15462,13 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15481,14 +15485,15 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15505,16 +15510,15 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15531,15 +15535,12 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15556,7 +15557,6 @@ void m68000_device::subi_l_imm32_das_df() // 04a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15569,6 +15569,8 @@ void m68000_device::subi_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15585,11 +15587,12 @@ void m68000_device::subi_l_imm32_dais_df() // 04b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15606,10 +15609,7 @@ void m68000_device::subi_l_imm32_dais_df() // 04b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e7 aixw0 // alu r=5 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -15625,6 +15625,7 @@ void m68000_device::subi_l_imm32_dais_df() // 04b0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15641,13 +15642,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15664,7 +15665,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -15672,6 +15672,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15688,12 +15691,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15710,14 +15714,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15734,16 +15739,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15760,15 +15764,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15785,7 +15786,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15797,6 +15797,8 @@ void m68000_device::subi_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15813,11 +15815,12 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15834,13 +15837,14 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15857,14 +15861,13 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15881,12 +15884,13 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15903,14 +15907,15 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -15927,16 +15932,15 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15953,15 +15957,12 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -15978,7 +15979,6 @@ void m68000_device::subi_l_imm32_adr16_df() // 04b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -15990,6 +15990,8 @@ void m68000_device::subi_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16006,11 +16008,12 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16027,13 +16030,12 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16050,11 +16052,13 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16071,14 +16075,13 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16095,12 +16098,13 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16117,14 +16121,15 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16141,16 +16146,15 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -16167,15 +16171,12 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -16192,7 +16193,6 @@ void m68000_device::subi_l_imm32_adr32_df() // 04b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16205,6 +16205,9 @@ void m68000_device::addi_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16221,10 +16224,7 @@ void m68000_device::addi_b_imm8_ds_df() // 0600 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 100 roaw1 m_aob = m_au; @@ -16236,6 +16236,8 @@ void m68000_device::addi_b_imm8_ds_df() // 0600 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16252,9 +16254,7 @@ void m68000_device::addi_b_imm8_ds_df() // 0600 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -16268,6 +16268,9 @@ void m68000_device::addi_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16284,10 +16287,7 @@ void m68000_device::addi_b_imm8_ais_df() // 0610 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -16295,6 +16295,7 @@ void m68000_device::addi_b_imm8_ais_df() // 0610 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16308,11 +16309,15 @@ void m68000_device::addi_b_imm8_ais_df() // 0610 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16329,18 +16334,14 @@ void m68000_device::addi_b_imm8_ais_df() // 0610 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16352,7 +16353,6 @@ void m68000_device::addi_b_imm8_ais_df() // 0610 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16365,6 +16365,9 @@ void m68000_device::addi_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16381,10 +16384,7 @@ void m68000_device::addi_b_imm8_aips_df() // 0618 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -16393,6 +16393,10 @@ void m68000_device::addi_b_imm8_aips_df() // 0618 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16406,14 +16410,15 @@ void m68000_device::addi_b_imm8_aips_df() // 0618 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16430,18 +16435,14 @@ void m68000_device::addi_b_imm8_aips_df() // 0618 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16453,7 +16454,6 @@ void m68000_device::addi_b_imm8_aips_df() // 0618 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16466,6 +16466,9 @@ void m68000_device::addi_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16482,10 +16485,7 @@ void m68000_device::addi_b_imm8_pais_df() // 0620 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 103 pdcw1 m_alub = m_dbin; @@ -16495,6 +16495,11 @@ void m68000_device::addi_b_imm8_pais_df() // 0620 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16508,15 +16513,15 @@ void m68000_device::addi_b_imm8_pais_df() // 0620 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16533,18 +16538,14 @@ void m68000_device::addi_b_imm8_pais_df() // 0620 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16556,7 +16557,6 @@ void m68000_device::addi_b_imm8_pais_df() // 0620 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16569,6 +16569,9 @@ void m68000_device::addi_b_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16585,13 +16588,11 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16609,7 +16610,6 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -16618,6 +16618,7 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16631,11 +16632,15 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16652,18 +16657,14 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16675,7 +16676,6 @@ void m68000_device::addi_b_imm8_das_df() // 0628 fff8 m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16688,6 +16688,9 @@ void m68000_device::addi_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16704,10 +16707,7 @@ void m68000_device::addi_b_imm8_dais_df() // 0630 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=2 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -16723,6 +16723,7 @@ void m68000_device::addi_b_imm8_dais_df() // 0630 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16739,13 +16740,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16762,7 +16763,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -16775,6 +16775,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16788,11 +16789,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16809,18 +16814,14 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16832,7 +16833,6 @@ adsw2: m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16844,6 +16844,9 @@ void m68000_device::addi_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16860,13 +16863,14 @@ void m68000_device::addi_b_imm8_adr16_df() // 0638 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16883,14 +16887,13 @@ void m68000_device::addi_b_imm8_adr16_df() // 0638 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -16904,13 +16907,15 @@ void m68000_device::addi_b_imm8_adr16_df() // 0638 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16927,18 +16932,14 @@ void m68000_device::addi_b_imm8_adr16_df() // 0638 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -16950,7 +16951,6 @@ void m68000_device::addi_b_imm8_adr16_df() // 0638 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -16962,6 +16962,9 @@ void m68000_device::addi_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -16978,13 +16981,12 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17001,11 +17003,13 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17022,14 +17026,13 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -17043,13 +17046,15 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17066,18 +17071,14 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -17089,7 +17090,6 @@ void m68000_device::addi_b_imm8_adr32_df() // 0639 ffff m_inst_substate = 12; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17102,6 +17102,9 @@ void m68000_device::addi_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17118,10 +17121,7 @@ void m68000_device::addi_w_imm16_ds_df() // 0640 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 100 roaw1 m_aob = m_au; @@ -17133,6 +17133,8 @@ void m68000_device::addi_w_imm16_ds_df() // 0640 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17149,9 +17151,7 @@ void m68000_device::addi_w_imm16_ds_df() // 0640 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -17165,6 +17165,9 @@ void m68000_device::addi_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17181,10 +17184,7 @@ void m68000_device::addi_w_imm16_ais_df() // 0650 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -17192,6 +17192,7 @@ void m68000_device::addi_w_imm16_ais_df() // 0650 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17208,11 +17209,15 @@ void m68000_device::addi_w_imm16_ais_df() // 0650 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17229,18 +17234,14 @@ void m68000_device::addi_w_imm16_ais_df() // 0650 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17257,7 +17258,6 @@ void m68000_device::addi_w_imm16_ais_df() // 0650 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17270,6 +17270,9 @@ void m68000_device::addi_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17286,10 +17289,7 @@ void m68000_device::addi_w_imm16_aips_df() // 0658 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -17298,6 +17298,10 @@ void m68000_device::addi_w_imm16_aips_df() // 0658 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17314,14 +17318,15 @@ void m68000_device::addi_w_imm16_aips_df() // 0658 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17338,18 +17343,14 @@ void m68000_device::addi_w_imm16_aips_df() // 0658 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17366,7 +17367,6 @@ void m68000_device::addi_w_imm16_aips_df() // 0658 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17379,6 +17379,9 @@ void m68000_device::addi_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17395,10 +17398,7 @@ void m68000_device::addi_w_imm16_pais_df() // 0660 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 103 pdcw1 m_alub = m_dbin; @@ -17408,6 +17408,11 @@ void m68000_device::addi_w_imm16_pais_df() // 0660 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17424,15 +17429,15 @@ void m68000_device::addi_w_imm16_pais_df() // 0660 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17449,18 +17454,14 @@ void m68000_device::addi_w_imm16_pais_df() // 0660 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17477,7 +17478,6 @@ void m68000_device::addi_w_imm16_pais_df() // 0660 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17490,6 +17490,9 @@ void m68000_device::addi_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17506,13 +17509,11 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17530,7 +17531,6 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -17539,6 +17539,7 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17555,11 +17556,15 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17576,18 +17581,14 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17604,7 +17605,6 @@ void m68000_device::addi_w_imm16_das_df() // 0668 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17617,6 +17617,9 @@ void m68000_device::addi_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17633,10 +17636,7 @@ void m68000_device::addi_w_imm16_dais_df() // 0670 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=2 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -17652,6 +17652,7 @@ void m68000_device::addi_w_imm16_dais_df() // 0670 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17668,13 +17669,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17691,7 +17692,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -17704,6 +17704,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17720,11 +17721,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17741,18 +17746,14 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17769,7 +17770,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17781,6 +17781,9 @@ void m68000_device::addi_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17797,13 +17800,14 @@ void m68000_device::addi_w_imm16_adr16_df() // 0678 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17820,14 +17824,13 @@ void m68000_device::addi_w_imm16_adr16_df() // 0678 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17844,13 +17847,15 @@ void m68000_device::addi_w_imm16_adr16_df() // 0678 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17867,18 +17872,14 @@ void m68000_device::addi_w_imm16_adr16_df() // 0678 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -17895,7 +17896,6 @@ void m68000_device::addi_w_imm16_adr16_df() // 0678 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -17907,6 +17907,9 @@ void m68000_device::addi_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17923,13 +17926,12 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17946,11 +17948,13 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17967,14 +17971,13 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -17991,13 +17994,15 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18014,18 +18019,14 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18042,7 +18043,6 @@ void m68000_device::addi_w_imm16_adr32_df() // 0679 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -18055,6 +18055,8 @@ void m68000_device::addi_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18071,11 +18073,12 @@ void m68000_device::addi_l_imm32_ds_df() // 0680 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18092,10 +18095,7 @@ void m68000_device::addi_l_imm32_ds_df() // 0680 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 10c roal1 m_aob = m_au; @@ -18105,6 +18105,7 @@ void m68000_device::addi_l_imm32_ds_df() // 0680 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18121,7 +18122,6 @@ void m68000_device::addi_l_imm32_ds_df() // 0680 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; m_dbin = m_edb; // 25a roal3 @@ -18147,6 +18147,8 @@ void m68000_device::addi_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18163,11 +18165,12 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18184,13 +18187,13 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18207,12 +18210,13 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18229,14 +18233,15 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18253,16 +18258,15 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18279,15 +18283,12 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18304,7 +18305,6 @@ void m68000_device::addi_l_imm32_ais_df() // 0690 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -18317,6 +18317,8 @@ void m68000_device::addi_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18333,11 +18335,12 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18354,13 +18357,13 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18377,9 +18380,6 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -18388,6 +18388,8 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18404,12 +18406,15 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18426,16 +18431,15 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18452,15 +18456,12 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18477,7 +18478,6 @@ void m68000_device::addi_l_imm32_aips_df() // 0698 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -18490,6 +18490,8 @@ void m68000_device::addi_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18506,11 +18508,12 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18527,10 +18530,7 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 179 pdcl1 m_au = m_da[ry] - 4; @@ -18539,6 +18539,8 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18555,11 +18557,13 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18576,14 +18580,15 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18600,16 +18605,15 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18626,15 +18630,12 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18651,7 +18652,6 @@ void m68000_device::addi_l_imm32_pais_df() // 06a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -18664,6 +18664,8 @@ void m68000_device::addi_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18680,11 +18682,12 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18701,13 +18704,11 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18725,10 +18726,12 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18745,12 +18748,13 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18767,14 +18771,15 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18791,16 +18796,15 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18817,15 +18821,12 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -18842,7 +18843,6 @@ void m68000_device::addi_l_imm32_das_df() // 06a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -18855,6 +18855,8 @@ void m68000_device::addi_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18871,11 +18873,12 @@ void m68000_device::addi_l_imm32_dais_df() // 06b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18892,10 +18895,7 @@ void m68000_device::addi_l_imm32_dais_df() // 06b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e7 aixw0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -18911,6 +18911,7 @@ void m68000_device::addi_l_imm32_dais_df() // 06b0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18927,13 +18928,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18950,7 +18951,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -18958,6 +18958,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18974,12 +18977,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -18996,14 +19000,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19020,16 +19025,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19046,15 +19050,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19071,7 +19072,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19083,6 +19083,8 @@ void m68000_device::addi_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19099,11 +19101,12 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19120,13 +19123,14 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19143,14 +19147,13 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19167,12 +19170,13 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19189,14 +19193,15 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19213,16 +19218,15 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19239,15 +19243,12 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19264,7 +19265,6 @@ void m68000_device::addi_l_imm32_adr16_df() // 06b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19276,6 +19276,8 @@ void m68000_device::addi_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19292,11 +19294,12 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19313,13 +19316,12 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19336,11 +19338,13 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19357,14 +19361,13 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19381,12 +19384,13 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19403,14 +19407,15 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19427,16 +19432,15 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19453,15 +19457,12 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; m_dbout = m_aluo; + m_au = m_pc + 2; m_base_ssw = SSW_DATA; m_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -19478,7 +19479,6 @@ void m68000_device::addi_l_imm32_adr32_df() // 06b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19491,6 +19491,10 @@ void m68000_device::btst_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19507,12 +19511,8 @@ void m68000_device::btst_imm8_ds_df() // 0800 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 3e7 btsr1 m_aob = m_au; m_ir = m_irc; @@ -19524,6 +19524,10 @@ void m68000_device::btst_imm8_ds_df() // 0800 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19540,12 +19544,8 @@ void m68000_device::btst_imm8_ds_df() // 0800 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=....... ALU.and_ a=R.dyl:m_da[ry] d=-1 - alu_and(m_da[ry], 0xffff); if(m_t) goto btsr3; else @@ -19584,6 +19584,10 @@ void m68000_device::btst_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19600,18 +19604,16 @@ void m68000_device::btst_imm8_ais_df() // 0810 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -19625,9 +19627,7 @@ void m68000_device::btst_imm8_ais_df() // 0810 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -19639,6 +19639,7 @@ void m68000_device::btst_imm8_ais_df() // 0810 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19657,7 +19658,6 @@ void m68000_device::btst_imm8_ais_df() // 0810 fff8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19670,6 +19670,10 @@ void m68000_device::btst_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19686,12 +19690,8 @@ void m68000_device::btst_imm8_aips_df() // 0818 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -19701,6 +19701,10 @@ void m68000_device::btst_imm8_aips_df() // 0818 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -19714,11 +19718,7 @@ void m68000_device::btst_imm8_aips_df() // 0818 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -19730,6 +19730,7 @@ void m68000_device::btst_imm8_aips_df() // 0818 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19748,7 +19749,6 @@ void m68000_device::btst_imm8_aips_df() // 0818 fff8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19761,6 +19761,10 @@ void m68000_device::btst_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19777,12 +19781,8 @@ void m68000_device::btst_imm8_pais_df() // 0820 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -19793,6 +19793,11 @@ void m68000_device::btst_imm8_pais_df() // 0820 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -19806,12 +19811,7 @@ void m68000_device::btst_imm8_pais_df() // 0820 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -19823,6 +19823,7 @@ void m68000_device::btst_imm8_pais_df() // 0820 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19841,7 +19842,6 @@ void m68000_device::btst_imm8_pais_df() // 0820 fff8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19854,6 +19854,10 @@ void m68000_device::btst_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19870,14 +19874,12 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19895,9 +19897,7 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -19905,6 +19905,8 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -19918,9 +19920,7 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -19932,6 +19932,7 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19950,7 +19951,6 @@ void m68000_device::btst_imm8_das_df() // 0828 fff8 } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -19963,6 +19963,10 @@ void m68000_device::btst_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -19979,12 +19983,8 @@ void m68000_device::btst_imm8_dais_df() // 0830 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -20000,6 +20000,8 @@ void m68000_device::btst_imm8_dais_df() // 0830 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20016,14 +20018,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20040,10 +20042,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -20054,6 +20054,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20067,9 +20069,7 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -20081,6 +20081,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20099,7 +20100,6 @@ adsw2: } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20111,6 +20111,10 @@ void m68000_device::btst_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20127,14 +20131,16 @@ void m68000_device::btst_imm8_adr16_df() // 0838 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20151,16 +20157,13 @@ void m68000_device::btst_imm8_adr16_df() // 0838 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20174,9 +20177,6 @@ void m68000_device::btst_imm8_adr16_df() // 0838 ffff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 215 btsm1 m_aob = m_au; @@ -20189,6 +20189,7 @@ void m68000_device::btst_imm8_adr16_df() // 0838 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20207,7 +20208,6 @@ void m68000_device::btst_imm8_adr16_df() // 0838 ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20219,6 +20219,10 @@ void m68000_device::btst_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20235,14 +20239,13 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20259,12 +20262,15 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20281,16 +20287,13 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20304,9 +20307,6 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff m_inst_substate = 8; return; } - 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_dbin = m_edb; // 215 btsm1 m_aob = m_au; @@ -20319,6 +20319,7 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20337,7 +20338,6 @@ void m68000_device::btst_imm8_adr32_df() // 0839 ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20349,6 +20349,10 @@ void m68000_device::btst_imm8_dpc_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20365,14 +20369,12 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20390,9 +20392,7 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -20400,6 +20400,8 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20413,9 +20415,7 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -20427,6 +20427,7 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20445,7 +20446,6 @@ void m68000_device::btst_imm8_dpc_df() // 083a ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20457,6 +20457,10 @@ void m68000_device::btst_imm8_dpci_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20473,12 +20477,8 @@ void m68000_device::btst_imm8_dpci_df() // 083b ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -20494,6 +20494,8 @@ void m68000_device::btst_imm8_dpci_df() // 083b ffff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20510,14 +20512,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20534,10 +20536,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -20548,6 +20548,8 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20561,9 +20563,7 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 215 btsm1 m_aob = m_au; m_ir = m_irc; @@ -20575,6 +20575,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20593,7 +20594,6 @@ adsw2: } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20606,6 +20606,10 @@ void m68000_device::bchg_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20622,12 +20626,8 @@ void m68000_device::bchg_imm8_ds_df() // 0840 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 3ef bcsr1 m_aob = m_au; m_ir = m_irc; @@ -20639,6 +20639,10 @@ void m68000_device::bchg_imm8_ds_df() // 0840 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20655,12 +20659,8 @@ void m68000_device::bchg_imm8_ds_df() // 0840 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bcsr3; else @@ -20705,6 +20705,10 @@ void m68000_device::bchg_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20721,18 +20725,16 @@ void m68000_device::bchg_imm8_ais_df() // 0850 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20746,12 +20748,15 @@ void m68000_device::bchg_imm8_ais_df() // 0850 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20768,18 +20773,16 @@ void m68000_device::bchg_imm8_ais_df() // 0850 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -20791,9 +20794,6 @@ void m68000_device::bchg_imm8_ais_df() // 0850 fff8 m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20806,6 +20806,10 @@ void m68000_device::bchg_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20822,12 +20826,8 @@ void m68000_device::bchg_imm8_aips_df() // 0858 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -20837,6 +20837,10 @@ void m68000_device::bchg_imm8_aips_df() // 0858 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20850,14 +20854,15 @@ void m68000_device::bchg_imm8_aips_df() // 0858 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20874,18 +20879,16 @@ void m68000_device::bchg_imm8_aips_df() // 0858 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -20897,9 +20900,6 @@ void m68000_device::bchg_imm8_aips_df() // 0858 fff8 m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -20912,6 +20912,10 @@ void m68000_device::bchg_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20928,12 +20932,8 @@ void m68000_device::bchg_imm8_pais_df() // 0860 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -20944,6 +20944,11 @@ void m68000_device::bchg_imm8_pais_df() // 0860 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -20957,15 +20962,15 @@ void m68000_device::bchg_imm8_pais_df() // 0860 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -20982,18 +20987,16 @@ void m68000_device::bchg_imm8_pais_df() // 0860 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21005,9 +21008,6 @@ void m68000_device::bchg_imm8_pais_df() // 0860 fff8 m_inst_substate = 8; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21020,6 +21020,10 @@ void m68000_device::bchg_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21036,14 +21040,12 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21061,9 +21063,7 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -21071,6 +21071,8 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21084,12 +21086,15 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21106,18 +21111,16 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21129,9 +21132,6 @@ void m68000_device::bchg_imm8_das_df() // 0868 fff8 m_inst_substate = 10; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21144,6 +21144,10 @@ void m68000_device::bchg_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21160,12 +21164,8 @@ void m68000_device::bchg_imm8_dais_df() // 0870 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -21181,6 +21181,8 @@ void m68000_device::bchg_imm8_dais_df() // 0870 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21197,14 +21199,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21221,10 +21223,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -21235,6 +21235,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21248,12 +21250,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21270,18 +21275,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21293,9 +21296,6 @@ adsw2: m_inst_substate = 10; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21307,6 +21307,10 @@ void m68000_device::bchg_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21323,14 +21327,16 @@ void m68000_device::bchg_imm8_adr16_df() // 0878 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21347,16 +21353,13 @@ void m68000_device::bchg_imm8_adr16_df() // 0878 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21370,13 +21373,15 @@ void m68000_device::bchg_imm8_adr16_df() // 0878 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21393,18 +21398,16 @@ void m68000_device::bchg_imm8_adr16_df() // 0878 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21416,9 +21419,6 @@ void m68000_device::bchg_imm8_adr16_df() // 0878 ffff m_inst_substate = 10; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21430,6 +21430,10 @@ void m68000_device::bchg_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21446,14 +21450,13 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21470,12 +21473,15 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21492,16 +21498,13 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21515,13 +21518,15 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21538,18 +21543,16 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21561,9 +21564,6 @@ void m68000_device::bchg_imm8_adr32_df() // 0879 ffff m_inst_substate = 12; return; } - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21576,6 +21576,10 @@ void m68000_device::bclr_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21592,12 +21596,8 @@ void m68000_device::bclr_imm8_ds_df() // 0880 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=.l..... ALU.or_ a=R.dbin:m_dbin d=none // 3eb bclr1 m_aob = m_au; m_ir = m_irc; @@ -21609,6 +21609,10 @@ void m68000_device::bclr_imm8_ds_df() // 0880 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21625,12 +21629,8 @@ void m68000_device::bclr_imm8_ds_df() // 0880 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bclr3; else @@ -21683,6 +21683,10 @@ void m68000_device::bclr_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21699,18 +21703,16 @@ void m68000_device::bclr_imm8_ais_df() // 0890 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21724,9 +21726,7 @@ void m68000_device::bclr_imm8_ais_df() // 0890 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -21735,6 +21735,10 @@ void m68000_device::bclr_imm8_ais_df() // 0890 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21751,17 +21755,16 @@ void m68000_device::bclr_imm8_ais_df() // 0890 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21773,9 +21776,6 @@ void m68000_device::bclr_imm8_ais_df() // 0890 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21788,6 +21788,10 @@ void m68000_device::bclr_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21804,12 +21808,8 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -21819,6 +21819,10 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21832,11 +21836,7 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -21845,6 +21845,10 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21861,17 +21865,16 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21883,9 +21886,6 @@ void m68000_device::bclr_imm8_aips_df() // 0898 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -21898,6 +21898,10 @@ void m68000_device::bclr_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21914,12 +21918,8 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -21930,6 +21930,11 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -21943,12 +21948,7 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -21957,6 +21957,10 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -21973,17 +21977,16 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -21995,9 +21998,6 @@ void m68000_device::bclr_imm8_pais_df() // 08a0 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22010,6 +22010,10 @@ void m68000_device::bclr_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22026,14 +22030,12 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22051,9 +22053,7 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -22061,6 +22061,8 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22074,9 +22076,7 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -22085,6 +22085,10 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22101,17 +22105,16 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22123,9 +22126,6 @@ void m68000_device::bclr_imm8_das_df() // 08a8 fff8 m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22138,6 +22138,10 @@ void m68000_device::bclr_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22154,12 +22158,8 @@ void m68000_device::bclr_imm8_dais_df() // 08b0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=14 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -22175,6 +22175,8 @@ void m68000_device::bclr_imm8_dais_df() // 08b0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22191,14 +22193,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22215,10 +22217,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -22229,6 +22229,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22242,9 +22244,7 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dtl:m_dt d=none // 069 bclm1 m_aob = m_au; m_ir = m_irc; @@ -22253,6 +22253,10 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22269,17 +22273,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22291,9 +22294,6 @@ adsw2: m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22305,6 +22305,10 @@ void m68000_device::bclr_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22321,14 +22325,16 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22345,16 +22351,13 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22368,9 +22371,6 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 069 bclm1 m_aob = m_au; @@ -22380,6 +22380,10 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22396,17 +22400,16 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22418,9 +22421,6 @@ void m68000_device::bclr_imm8_adr16_df() // 08b8 ffff m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22432,6 +22432,10 @@ void m68000_device::bclr_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22448,14 +22452,13 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22472,12 +22475,15 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=bl..... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22494,16 +22500,13 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22517,9 +22520,6 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_substate = 8; return; } - 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_dbin = m_edb; // 069 bclm1 m_aob = m_au; @@ -22529,6 +22529,10 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22545,17 +22549,16 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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)); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22567,9 +22570,6 @@ void m68000_device::bclr_imm8_adr32_df() // 08b9 ffff m_inst_substate = 12; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22582,6 +22582,10 @@ void m68000_device::bset_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22598,12 +22602,8 @@ void m68000_device::bset_imm8_ds_df() // 08c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=....... ALU.or_ a=R.dbin:m_dbin d=none // 3ef bcsr1 m_aob = m_au; m_ir = m_irc; @@ -22615,6 +22615,10 @@ void m68000_device::bset_imm8_ds_df() // 08c0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22631,12 +22635,8 @@ void m68000_device::bset_imm8_ds_df() // 08c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_da[ry]; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // 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)); if(m_t) goto bcsr3; else @@ -22681,6 +22681,10 @@ void m68000_device::bset_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22697,18 +22701,16 @@ void m68000_device::bset_imm8_ais_df() // 08d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22722,12 +22724,15 @@ void m68000_device::bset_imm8_ais_df() // 08d0 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22744,18 +22749,16 @@ void m68000_device::bset_imm8_ais_df() // 08d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22767,9 +22770,6 @@ void m68000_device::bset_imm8_ais_df() // 08d0 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22782,6 +22782,10 @@ void m68000_device::bset_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22798,12 +22802,8 @@ void m68000_device::bset_imm8_aips_df() // 08d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -22813,6 +22813,10 @@ void m68000_device::bset_imm8_aips_df() // 08d8 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22826,14 +22830,15 @@ void m68000_device::bset_imm8_aips_df() // 08d8 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22850,18 +22855,16 @@ void m68000_device::bset_imm8_aips_df() // 08d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22873,9 +22876,6 @@ void m68000_device::bset_imm8_aips_df() // 08d8 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22888,6 +22888,10 @@ void m68000_device::bset_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22904,12 +22908,8 @@ void m68000_device::bset_imm8_pais_df() // 08e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -22920,6 +22920,11 @@ void m68000_device::bset_imm8_pais_df() // 08e0 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -22933,15 +22938,15 @@ void m68000_device::bset_imm8_pais_df() // 08e0 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=14 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -22958,18 +22963,16 @@ void m68000_device::bset_imm8_pais_df() // 08e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -22981,9 +22984,6 @@ void m68000_device::bset_imm8_pais_df() // 08e0 fff8 m_inst_substate = 8; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -22996,6 +22996,10 @@ void m68000_device::bset_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23012,14 +23016,12 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23037,9 +23039,7 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -23047,6 +23047,8 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23060,12 +23062,15 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23082,18 +23087,16 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23105,9 +23108,6 @@ void m68000_device::bset_imm8_das_df() // 08e8 fff8 m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23120,6 +23120,10 @@ void m68000_device::bset_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23136,12 +23140,8 @@ void m68000_device::bset_imm8_dais_df() // 08f0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=14 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -23157,6 +23157,8 @@ void m68000_device::bset_imm8_dais_df() // 08f0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23173,14 +23175,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23197,10 +23199,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -23211,6 +23211,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23224,12 +23226,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23246,18 +23251,16 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23269,9 +23272,6 @@ adsw2: m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23283,6 +23283,10 @@ void m68000_device::bset_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23299,14 +23303,16 @@ void m68000_device::bset_imm8_adr16_df() // 08f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23323,16 +23329,13 @@ void m68000_device::bset_imm8_adr16_df() // 08f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23346,13 +23349,15 @@ void m68000_device::bset_imm8_adr16_df() // 08f8 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23369,18 +23374,16 @@ void m68000_device::bset_imm8_adr16_df() // 08f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23392,9 +23395,6 @@ void m68000_device::bset_imm8_adr16_df() // 08f8 ffff m_inst_substate = 10; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23406,6 +23406,10 @@ void m68000_device::bset_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23422,14 +23426,13 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23446,12 +23449,15 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=14 c=0 m=..... i=b...... ALU.or_ a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23468,16 +23474,13 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23491,13 +23494,15 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23514,18 +23519,16 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23537,9 +23540,6 @@ void m68000_device::bset_imm8_adr32_df() // 08f9 ffff m_inst_substate = 12; return; } - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23552,6 +23552,10 @@ void m68000_device::eori_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23568,12 +23572,8 @@ void m68000_device::eori_b_imm8_ds_df() // 0a00 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -23584,6 +23584,9 @@ void m68000_device::eori_b_imm8_ds_df() // 0a00 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23600,11 +23603,8 @@ void m68000_device::eori_b_imm8_ds_df() // 0a00 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23617,6 +23617,10 @@ void m68000_device::eori_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23633,18 +23637,16 @@ void m68000_device::eori_b_imm8_ais_df() // 0a10 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23658,12 +23660,15 @@ void m68000_device::eori_b_imm8_ais_df() // 0a10 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23680,18 +23685,15 @@ void m68000_device::eori_b_imm8_ais_df() // 0a10 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23703,8 +23705,6 @@ void m68000_device::eori_b_imm8_ais_df() // 0a10 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23717,6 +23717,10 @@ void m68000_device::eori_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23733,12 +23737,8 @@ void m68000_device::eori_b_imm8_aips_df() // 0a18 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -23748,6 +23748,10 @@ void m68000_device::eori_b_imm8_aips_df() // 0a18 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23761,14 +23765,15 @@ void m68000_device::eori_b_imm8_aips_df() // 0a18 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23785,18 +23790,15 @@ void m68000_device::eori_b_imm8_aips_df() // 0a18 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23808,8 +23810,6 @@ void m68000_device::eori_b_imm8_aips_df() // 0a18 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23822,6 +23822,10 @@ void m68000_device::eori_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23838,12 +23842,8 @@ void m68000_device::eori_b_imm8_pais_df() // 0a20 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -23854,6 +23854,11 @@ void m68000_device::eori_b_imm8_pais_df() // 0a20 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23867,15 +23872,15 @@ void m68000_device::eori_b_imm8_pais_df() // 0a20 fff8 m_inst_substate = 4; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23892,18 +23897,15 @@ void m68000_device::eori_b_imm8_pais_df() // 0a20 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -23915,8 +23917,6 @@ void m68000_device::eori_b_imm8_pais_df() // 0a20 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -23929,6 +23929,10 @@ void m68000_device::eori_b_imm8_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23945,14 +23949,12 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -23970,9 +23972,7 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -23980,6 +23980,8 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -23993,12 +23995,15 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24015,18 +24020,15 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -24038,8 +24040,6 @@ void m68000_device::eori_b_imm8_das_df() // 0a28 fff8 m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24052,6 +24052,10 @@ void m68000_device::eori_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24068,12 +24072,8 @@ void m68000_device::eori_b_imm8_dais_df() // 0a30 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=13 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -24089,6 +24089,8 @@ void m68000_device::eori_b_imm8_dais_df() // 0a30 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24105,14 +24107,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24129,10 +24131,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -24143,6 +24143,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -24156,12 +24158,15 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24178,18 +24183,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -24201,8 +24203,6 @@ adsw2: m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24214,6 +24214,10 @@ void m68000_device::eori_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24230,14 +24234,16 @@ void m68000_device::eori_b_imm8_adr16_df() // 0a38 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24254,16 +24260,13 @@ void m68000_device::eori_b_imm8_adr16_df() // 0a38 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -24277,13 +24280,15 @@ void m68000_device::eori_b_imm8_adr16_df() // 0a38 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24300,18 +24305,15 @@ void m68000_device::eori_b_imm8_adr16_df() // 0a38 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -24323,8 +24325,6 @@ void m68000_device::eori_b_imm8_adr16_df() // 0a38 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24336,6 +24336,10 @@ void m68000_device::eori_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24352,14 +24356,13 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24376,12 +24379,15 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24398,16 +24404,13 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -24421,13 +24424,15 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_substate = 8; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24444,18 +24449,15 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; if(m_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -24467,8 +24469,6 @@ void m68000_device::eori_b_imm8_adr32_df() // 0a39 ffff m_inst_substate = 12; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24480,6 +24480,10 @@ void m68000_device::eori_imm8_ccr_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24496,12 +24500,8 @@ void m68000_device::eori_imm8_ccr_df() // 0a3c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -24524,6 +24524,10 @@ void m68000_device::eori_imm8_ccr_df() // 0a3c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24540,12 +24544,8 @@ void m68000_device::eori_imm8_ccr_df() // 0a3c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -24555,6 +24555,7 @@ void m68000_device::eori_imm8_ccr_df() // 0a3c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24573,7 +24574,6 @@ void m68000_device::eori_imm8_ccr_df() // 0a3c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=b...... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24586,6 +24586,10 @@ void m68000_device::eori_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24602,12 +24606,8 @@ void m68000_device::eori_w_imm16_ds_df() // 0a40 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 100 roaw1 m_aob = m_au; m_ir = m_irc; @@ -24618,6 +24618,9 @@ void m68000_device::eori_w_imm16_ds_df() // 0a40 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24634,11 +24637,8 @@ void m68000_device::eori_w_imm16_ds_df() // 0a40 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.aluo:m_aluo d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24651,6 +24651,10 @@ void m68000_device::eori_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24667,18 +24671,16 @@ void m68000_device::eori_w_imm16_ais_df() // 0a50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24695,12 +24697,15 @@ void m68000_device::eori_w_imm16_ais_df() // 0a50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24717,18 +24722,15 @@ void m68000_device::eori_w_imm16_ais_df() // 0a50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -24745,8 +24747,6 @@ void m68000_device::eori_w_imm16_ais_df() // 0a50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24759,6 +24759,10 @@ void m68000_device::eori_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24775,12 +24779,8 @@ void m68000_device::eori_w_imm16_aips_df() // 0a58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 21c pinw1 m_aob = m_da[ry]; m_alub = m_dbin; @@ -24790,6 +24790,10 @@ void m68000_device::eori_w_imm16_aips_df() // 0a58 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24806,14 +24810,15 @@ void m68000_device::eori_w_imm16_aips_df() // 0a58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24830,18 +24835,15 @@ void m68000_device::eori_w_imm16_aips_df() // 0a58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -24858,8 +24860,6 @@ void m68000_device::eori_w_imm16_aips_df() // 0a58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24872,6 +24872,10 @@ void m68000_device::eori_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24888,12 +24892,8 @@ void m68000_device::eori_w_imm16_pais_df() // 0a60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 103 pdcw1 m_alub = m_dbin; m_pc = m_au; @@ -24904,6 +24904,11 @@ void m68000_device::eori_w_imm16_pais_df() // 0a60 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24920,15 +24925,15 @@ void m68000_device::eori_w_imm16_pais_df() // 0a60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=13 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -24945,18 +24950,15 @@ void m68000_device::eori_w_imm16_pais_df() // 0a60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -24973,8 +24975,6 @@ void m68000_device::eori_w_imm16_pais_df() // 0a60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -24987,6 +24987,10 @@ void m68000_device::eori_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25003,14 +25007,12 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25028,9 +25030,7 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.dbin:m_dbin // 02a adsw2 m_aob = m_au; m_at = m_au; @@ -25038,6 +25038,8 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25054,12 +25056,15 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25076,18 +25081,15 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25104,8 +25106,6 @@ void m68000_device::eori_w_imm16_das_df() // 0a68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25118,6 +25118,10 @@ void m68000_device::eori_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25134,12 +25138,8 @@ void m68000_device::eori_w_imm16_dais_df() // 0a70 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 1e3 aixl0 // alu r=13 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -25155,6 +25155,8 @@ void m68000_device::eori_w_imm16_dais_df() // 0a70 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25171,14 +25173,14 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25195,10 +25197,8 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] step_movem(); goto adsw2; adsw2: @@ -25209,6 +25209,8 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25225,12 +25227,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dtl:m_dt d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25247,18 +25252,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25275,8 +25277,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25288,6 +25288,10 @@ void m68000_device::eori_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25304,14 +25308,16 @@ void m68000_device::eori_w_imm16_adr16_df() // 0a78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25328,16 +25334,13 @@ void m68000_device::eori_w_imm16_adr16_df() // 0a78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25354,13 +25357,15 @@ void m68000_device::eori_w_imm16_adr16_df() // 0a78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25377,18 +25382,15 @@ void m68000_device::eori_w_imm16_adr16_df() // 0a78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25405,8 +25407,6 @@ void m68000_device::eori_w_imm16_adr16_df() // 0a78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25418,6 +25418,10 @@ void m68000_device::eori_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25434,14 +25438,13 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25458,12 +25461,15 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25480,16 +25486,13 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25506,13 +25509,15 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25529,18 +25534,15 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_dbin = m_edb; // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25557,8 +25559,6 @@ void m68000_device::eori_w_imm16_adr32_df() // 0a79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25574,6 +25574,10 @@ void m68000_device::eori_i16u_sr_df() // 0a7c 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25590,12 +25594,8 @@ void m68000_device::eori_i16u_sr_df() // 0a7c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 1cc stiw1 m_ftu = m_sr; m_au = m_pc - 2; @@ -25620,6 +25620,10 @@ void m68000_device::eori_i16u_sr_df() // 0a7c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25636,12 +25640,8 @@ void m68000_device::eori_i16u_sr_df() // 0a7c ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=R.dbin:m_dbin d=none // 363 b m_aob = m_au; m_ir = m_irc; @@ -25651,6 +25651,7 @@ void m68000_device::eori_i16u_sr_df() // 0a7c ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25669,7 +25670,6 @@ void m68000_device::eori_i16u_sr_df() // 0a7c ffff } m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=....... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25682,6 +25682,9 @@ void m68000_device::eori_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25698,12 +25701,13 @@ void m68000_device::eori_l_imm32_ds_df() // 0a80 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25720,12 +25724,8 @@ void m68000_device::eori_l_imm32_ds_df() // 0a80 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 10c roal1 m_aob = m_au; m_ir = m_irc; @@ -25734,6 +25734,8 @@ void m68000_device::eori_l_imm32_ds_df() // 0a80 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25750,10 +25752,8 @@ void m68000_device::eori_l_imm32_ds_df() // 0a80 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16l(m_da[ry], m_aluo); m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.aluo:m_aluo d=none // 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])); @@ -25778,6 +25778,9 @@ void m68000_device::eori_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25794,12 +25797,13 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25816,14 +25820,13 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25840,12 +25843,14 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25862,15 +25867,15 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25887,16 +25892,15 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25913,15 +25917,13 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -25938,8 +25940,6 @@ void m68000_device::eori_l_imm32_ais_df() // 0a90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -25952,6 +25952,9 @@ void m68000_device::eori_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25968,12 +25971,13 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -25990,14 +25994,13 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26014,9 +26017,6 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -26026,6 +26026,9 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26042,13 +26045,15 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26065,16 +26070,15 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26091,15 +26095,13 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26116,8 +26118,6 @@ void m68000_device::eori_l_imm32_aips_df() // 0a98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -26130,6 +26130,9 @@ void m68000_device::eori_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26146,12 +26149,13 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26168,12 +26172,8 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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 @@ -26181,6 +26181,9 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26197,12 +26200,14 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26219,15 +26224,15 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26244,16 +26249,15 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26270,15 +26274,13 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26295,8 +26297,6 @@ void m68000_device::eori_l_imm32_pais_df() // 0aa0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -26309,6 +26309,9 @@ void m68000_device::eori_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26325,12 +26328,13 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26347,14 +26351,12 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26372,11 +26374,12 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26393,12 +26396,14 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26415,15 +26420,15 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26440,16 +26445,15 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26466,15 +26470,13 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26491,8 +26493,6 @@ void m68000_device::eori_l_imm32_das_df() // 0aa8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -26505,6 +26505,9 @@ void m68000_device::eori_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26521,12 +26524,13 @@ void m68000_device::eori_l_imm32_dais_df() // 0ab0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26543,12 +26547,8 @@ void m68000_device::eori_l_imm32_dais_df() // 0ab0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 1e7 aixw0 // alu r=13 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 alu_ext(m_dbin); @@ -26564,6 +26564,8 @@ void m68000_device::eori_l_imm32_dais_df() // 0ab0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26580,14 +26582,14 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26604,15 +26606,16 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.rzl:m_da[map_sp(m_irc >> 12)] 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26629,12 +26632,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26651,15 +26656,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26676,16 +26681,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26702,15 +26706,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26727,8 +26729,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -26740,6 +26740,9 @@ void m68000_device::eori_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26756,12 +26759,13 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26778,14 +26782,16 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26802,16 +26808,13 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26828,12 +26831,14 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26850,15 +26855,15 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26875,16 +26880,15 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26901,15 +26905,13 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -26926,8 +26928,6 @@ void m68000_device::eori_l_imm32_adr16_df() // 0ab8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -26939,6 +26939,9 @@ void m68000_device::eori_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26955,12 +26958,13 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -26977,14 +26981,13 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27001,12 +27004,15 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=R.dbin:m_dbin d=none // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27023,16 +27029,13 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - 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_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27049,12 +27052,14 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27071,15 +27076,15 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=R.dbin:m_dbin // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27096,16 +27101,15 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -27122,15 +27126,13 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 38d morw2 m_aob = m_au; m_ird = m_ir; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -27147,8 +27149,6 @@ void m68000_device::eori_l_imm32_adr32_df() // 0ab9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; - // alu r=13 c=0 m=..... i=.l..... ALU.eor a=none d=none set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -27161,6 +27161,9 @@ void m68000_device::cmpi_b_imm8_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27177,10 +27180,7 @@ void m68000_device::cmpi_b_imm8_ds_df() // 0c00 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 108 rcaw1 m_aob = m_au; @@ -27192,6 +27192,7 @@ void m68000_device::cmpi_b_imm8_ds_df() // 0c00 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27209,7 +27210,6 @@ void m68000_device::cmpi_b_imm8_ds_df() // 0c00 fff8 return; } m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -27223,6 +27223,9 @@ void m68000_device::cmpi_b_imm8_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27239,10 +27242,7 @@ void m68000_device::cmpi_b_imm8_ais_df() // 0c10 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -27250,6 +27250,7 @@ void m68000_device::cmpi_b_imm8_ais_df() // 0c10 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27263,7 +27264,6 @@ void m68000_device::cmpi_b_imm8_ais_df() // 0c10 fff8 m_inst_substate = 4; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -27306,6 +27306,9 @@ void m68000_device::cmpi_b_imm8_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27322,10 +27325,7 @@ void m68000_device::cmpi_b_imm8_aips_df() // 0c18 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -27334,6 +27334,10 @@ void m68000_device::cmpi_b_imm8_aips_df() // 0c18 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27347,11 +27351,96 @@ void m68000_device::cmpi_b_imm8_aips_df() // 0c18 fff8 m_inst_substate = 4; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 5; + } 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 m68000_device::cmpi_b_imm8_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); + m_icount -= 4; + if(m_icount <= 0) { + if(access_to_be_redone()) { + m_icount += 4; + m_inst_substate = 1; + } else + m_inst_substate = 2; + 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); + if(!(m_aob & 1)) + m_edb >>= 8; + m_icount -= 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; // 087 cpdw1 m_aob = m_au; m_ir = m_irc; @@ -27388,100 +27477,14 @@ void m68000_device::cmpi_b_imm8_aips_df() // 0c18 fff8 return; } -void m68000_device::cmpi_b_imm8_pais_df() // 0c20 fff8 +void m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 { int ry = map_sp((m_irdi & 7) | 8); // 2b9 o#w1 m_aob = m_au; - m_base_ssw = SSW_PROGRAM | SSW_R; - m_edb = m_opcodes.read_interruptible(m_aob & ~1); - m_icount -= 4; - if(m_icount <= 0) { - if(access_to_be_redone()) { - m_icount += 4; - m_inst_substate = 1; - } else - m_inst_substate = 2; - return; - } - if(m_aob & 1) { - m_icount -= 4; - m_inst_state = S_ADDRESS_ERROR; - return; - } m_pc = m_au; set_16l(m_dt, m_dbin); - m_irc = m_edb; - m_au = m_au + 2; - 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_base_ssw = SSW_DATA | SSW_R; - m_edb = m_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); - if(!(m_aob & 1)) - m_edb >>= 8; - m_icount -= 4; - if(m_icount <= 0) { - if(access_to_be_redone()) { - m_icount += 4; - m_inst_substate = 3; - } else - m_inst_substate = 4; - return; - } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; - m_dbin = m_edb; - // alu r=6 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); - // 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_opcodes.read_interruptible(m_aob & ~1); - m_icount -= 4; - if(m_icount <= 0) { - if(access_to_be_redone()) { - m_icount += 4; - m_inst_substate = 5; - } 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 m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 -{ - int ry = map_sp((m_irdi & 7) | 8); - // 2b9 o#w1 - m_aob = m_au; m_base_ssw = SSW_PROGRAM | SSW_R; m_edb = m_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27498,13 +27501,11 @@ void m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27522,7 +27523,6 @@ void m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -27531,6 +27531,7 @@ void m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27544,7 +27545,6 @@ void m68000_device::cmpi_b_imm8_das_df() // 0c28 fff8 m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -27587,6 +27587,9 @@ void m68000_device::cmpi_b_imm8_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27603,10 +27606,7 @@ void m68000_device::cmpi_b_imm8_dais_df() // 0c30 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=6 c=5 m=..... i=b...... ALU.ext a=R.dbin:m_dbin d=0 @@ -27622,6 +27622,7 @@ void m68000_device::cmpi_b_imm8_dais_df() // 0c30 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27638,13 +27639,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27661,7 +27662,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -27674,6 +27674,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27687,7 +27688,6 @@ adsw2: m_inst_substate = 6; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -27729,6 +27729,9 @@ void m68000_device::cmpi_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27745,13 +27748,14 @@ void m68000_device::cmpi_b_imm8_adr16_df() // 0c38 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27768,14 +27772,13 @@ void m68000_device::cmpi_b_imm8_adr16_df() // 0c38 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27789,9 +27792,6 @@ void m68000_device::cmpi_b_imm8_adr16_df() // 0c38 ffff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -27833,6 +27833,9 @@ void m68000_device::cmpi_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27849,13 +27852,12 @@ void m68000_device::cmpi_b_imm8_adr32_df() // 0c39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27872,11 +27874,13 @@ void m68000_device::cmpi_b_imm8_adr32_df() // 0c39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27893,14 +27897,13 @@ void m68000_device::cmpi_b_imm8_adr32_df() // 0c39 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -27914,9 +27917,6 @@ void m68000_device::cmpi_b_imm8_adr32_df() // 0c39 ffff m_inst_substate = 8; return; } - 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_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -27959,6 +27959,9 @@ void m68000_device::cmpi_w_imm16_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -27975,10 +27978,7 @@ void m68000_device::cmpi_w_imm16_ds_df() // 0c40 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 108 rcaw1 m_aob = m_au; @@ -27990,6 +27990,7 @@ void m68000_device::cmpi_w_imm16_ds_df() // 0c40 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28007,7 +28008,6 @@ void m68000_device::cmpi_w_imm16_ds_df() // 0c40 fff8 return; } m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -28021,6 +28021,9 @@ void m68000_device::cmpi_w_imm16_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28037,10 +28040,7 @@ void m68000_device::cmpi_w_imm16_ais_df() // 0c50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 006 adrw1 m_aob = m_da[ry]; @@ -28048,6 +28048,7 @@ void m68000_device::cmpi_w_imm16_ais_df() // 0c50 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28064,7 +28065,6 @@ void m68000_device::cmpi_w_imm16_ais_df() // 0c50 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -28107,6 +28107,9 @@ void m68000_device::cmpi_w_imm16_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28123,10 +28126,7 @@ void m68000_device::cmpi_w_imm16_aips_df() // 0c58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 21c pinw1 m_aob = m_da[ry]; @@ -28135,6 +28135,10 @@ void m68000_device::cmpi_w_imm16_aips_df() // 0c58 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28151,11 +28155,7 @@ void m68000_device::cmpi_w_imm16_aips_df() // 0c58 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 087 cpdw1 m_aob = m_au; m_ir = m_irc; @@ -28197,6 +28197,9 @@ void m68000_device::cmpi_w_imm16_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28213,10 +28216,7 @@ void m68000_device::cmpi_w_imm16_pais_df() // 0c60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 103 pdcw1 m_alub = m_dbin; @@ -28226,6 +28226,11 @@ void m68000_device::cmpi_w_imm16_pais_df() // 0c60 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28242,12 +28247,7 @@ void m68000_device::cmpi_w_imm16_pais_df() // 0c60 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=6 c=1 m=..... i=....... ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); // 087 cpdw1 m_aob = m_au; m_ir = m_irc; @@ -28289,6 +28289,9 @@ void m68000_device::cmpi_w_imm16_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28305,13 +28308,11 @@ void m68000_device::cmpi_w_imm16_das_df() // 0c68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28329,7 +28330,6 @@ void m68000_device::cmpi_w_imm16_das_df() // 0c68 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -28338,6 +28338,7 @@ void m68000_device::cmpi_w_imm16_das_df() // 0c68 fff8 // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28354,7 +28355,6 @@ void m68000_device::cmpi_w_imm16_das_df() // 0c68 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -28397,6 +28397,9 @@ void m68000_device::cmpi_w_imm16_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28413,10 +28416,7 @@ void m68000_device::cmpi_w_imm16_dais_df() // 0c70 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e3 aixl0 // alu r=6 c=5 m=..... i=....... ALU.ext a=R.dbin:m_dbin d=0 @@ -28432,6 +28432,7 @@ void m68000_device::cmpi_w_imm16_dais_df() // 0c70 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28448,13 +28449,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28471,7 +28472,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -28484,6 +28484,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28500,7 +28501,6 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_dcr = m_dt; m_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -28542,6 +28542,9 @@ void m68000_device::cmpi_w_imm16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28558,13 +28561,14 @@ void m68000_device::cmpi_w_imm16_adr16_df() // 0c78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28581,14 +28585,13 @@ void m68000_device::cmpi_w_imm16_adr16_df() // 0c78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28605,9 +28608,6 @@ void m68000_device::cmpi_w_imm16_adr16_df() // 0c78 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -28649,6 +28649,9 @@ void m68000_device::cmpi_w_imm16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28665,13 +28668,12 @@ void m68000_device::cmpi_w_imm16_adr32_df() // 0c79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28688,11 +28690,13 @@ void m68000_device::cmpi_w_imm16_adr32_df() // 0c79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28709,14 +28713,13 @@ void m68000_device::cmpi_w_imm16_adr32_df() // 0c79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28733,9 +28736,6 @@ void m68000_device::cmpi_w_imm16_adr32_df() // 0c79 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 087 cpdw1 m_aob = m_au; @@ -28778,6 +28778,8 @@ void m68000_device::cmpi_l_imm32_ds_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28794,12 +28796,13 @@ void m68000_device::cmpi_l_imm32_ds_df() // 0c80 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28816,10 +28819,7 @@ void m68000_device::cmpi_l_imm32_ds_df() // 0c80 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 104 rcal1 m_aob = m_au; @@ -28829,6 +28829,9 @@ void m68000_device::cmpi_l_imm32_ds_df() // 0c80 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28847,9 +28850,6 @@ void m68000_device::cmpi_l_imm32_ds_df() // 0c80 fff8 } m_irc = m_edb; m_dbin = m_edb; - // 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(); // 08d rcal3 m_ird = m_ir; if(m_next_state != S_TRACE) m_next_state = m_int_next_state; @@ -28867,6 +28867,8 @@ void m68000_device::cmpi_l_imm32_ais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28883,11 +28885,12 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28904,13 +28907,13 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28927,12 +28930,13 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28949,10 +28953,6 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -28965,6 +28965,9 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -28983,9 +28986,6 @@ void m68000_device::cmpi_l_imm32_ais_df() // 0c90 fff8 } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -28998,6 +28998,8 @@ void m68000_device::cmpi_l_imm32_aips_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29014,11 +29016,12 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29035,13 +29038,13 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29058,9 +29061,6 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -29069,6 +29069,8 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29085,8 +29087,6 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29099,6 +29099,9 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29117,9 +29120,6 @@ void m68000_device::cmpi_l_imm32_aips_df() // 0c98 fff8 } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29132,6 +29132,8 @@ void m68000_device::cmpi_l_imm32_pais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29148,11 +29150,12 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29169,10 +29172,7 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 179 pdcl1 m_au = m_da[ry] - 4; @@ -29181,6 +29181,8 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29197,11 +29199,13 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29218,10 +29222,6 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29234,6 +29234,9 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29252,9 +29255,6 @@ void m68000_device::cmpi_l_imm32_pais_df() // 0ca0 fff8 } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29267,6 +29267,8 @@ void m68000_device::cmpi_l_imm32_das_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29283,11 +29285,12 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29304,13 +29307,11 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29328,10 +29329,12 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29348,12 +29351,13 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29370,10 +29374,6 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29386,6 +29386,9 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29404,9 +29407,6 @@ void m68000_device::cmpi_l_imm32_das_df() // 0ca8 fff8 } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29419,6 +29419,8 @@ void m68000_device::cmpi_l_imm32_dais_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29435,11 +29437,12 @@ void m68000_device::cmpi_l_imm32_dais_df() // 0cb0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29456,10 +29459,7 @@ void m68000_device::cmpi_l_imm32_dais_df() // 0cb0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1e7 aixw0 // alu r=6 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -29475,6 +29475,7 @@ void m68000_device::cmpi_l_imm32_dais_df() // 0cb0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29491,13 +29492,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29514,7 +29515,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -29522,6 +29522,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29538,12 +29541,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29560,10 +29564,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29576,6 +29576,9 @@ adsl2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29594,9 +29597,6 @@ adsl2: } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29608,6 +29608,8 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29624,11 +29626,12 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29645,13 +29648,14 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29668,14 +29672,13 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29692,12 +29695,13 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29714,10 +29718,6 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29730,6 +29730,9 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29748,9 +29751,6 @@ void m68000_device::cmpi_l_imm32_adr16_df() // 0cb8 ffff } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29762,6 +29762,8 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29778,11 +29780,12 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29799,13 +29802,12 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29822,11 +29824,13 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29843,14 +29847,13 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_dt; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29867,12 +29870,13 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29889,10 +29893,6 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 08f cpdl1 m_aob = m_au; @@ -29905,6 +29905,9 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29923,9 +29926,6 @@ void m68000_device::cmpi_l_imm32_adr32_df() // 0cb9 ffff } m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -29949,6 +29949,8 @@ void m68000_device::move_b_ds_dd_df() // 1000 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -29965,9 +29967,7 @@ void m68000_device::move_b_ds_dd_df() // 1000 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[rx], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -29986,6 +29986,7 @@ void m68000_device::move_b_ais_dd_df() // 1010 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -29999,7 +30000,6 @@ void m68000_device::move_b_ais_dd_df() // 1010 f1f8 m_inst_substate = 2; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30049,6 +30049,10 @@ void m68000_device::move_b_aips_dd_df() // 1018 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30062,11 +30066,7 @@ void m68000_device::move_b_aips_dd_df() // 1018 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 29b mrgw1 m_aob = m_au; m_ir = m_irc; @@ -30116,6 +30116,11 @@ void m68000_device::move_b_pais_dd_df() // 1020 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30129,12 +30134,7 @@ void m68000_device::move_b_pais_dd_df() // 1020 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 29b mrgw1 m_aob = m_au; m_ir = m_irc; @@ -30178,6 +30178,7 @@ void m68000_device::move_b_das_dd_df() // 1028 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30195,7 +30196,6 @@ void m68000_device::move_b_das_dd_df() // 1028 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -30204,6 +30204,7 @@ void m68000_device::move_b_das_dd_df() // 1028 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30217,7 +30218,6 @@ void m68000_device::move_b_das_dd_df() // 1028 f1f8 m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30274,6 +30274,7 @@ void m68000_device::move_b_dais_dd_df() // 1030 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30290,13 +30291,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30313,7 +30314,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -30326,6 +30326,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30339,7 +30340,6 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30383,6 +30383,10 @@ void m68000_device::move_b_adr16_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30399,14 +30403,13 @@ void m68000_device::move_b_adr16_dd_df() // 1038 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30420,9 +30423,6 @@ void m68000_device::move_b_adr16_dd_df() // 1038 f1ff m_inst_substate = 4; return; } - 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_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30466,6 +30466,8 @@ void m68000_device::move_b_adr32_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30482,11 +30484,13 @@ void m68000_device::move_b_adr32_dd_df() // 1039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30503,14 +30507,13 @@ void m68000_device::move_b_adr32_dd_df() // 1039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30524,9 +30527,6 @@ void m68000_device::move_b_adr32_dd_df() // 1039 f1ff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30570,6 +30570,7 @@ void m68000_device::move_b_dpc_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30587,7 +30588,6 @@ void m68000_device::move_b_dpc_dd_df() // 103a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -30596,6 +30596,7 @@ void m68000_device::move_b_dpc_dd_df() // 103a f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30609,7 +30610,6 @@ void m68000_device::move_b_dpc_dd_df() // 103a f1ff m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30665,6 +30665,7 @@ void m68000_device::move_b_dpci_dd_df() // 103b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30681,13 +30682,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30704,7 +30705,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -30717,6 +30717,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30730,7 +30731,6 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = m_da[rx]; m_dbin = m_edb; // 29b mrgw1 m_aob = m_au; @@ -30774,6 +30774,10 @@ void m68000_device::move_b_imm8_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30790,11 +30794,7 @@ void m68000_device::move_b_imm8_dd_df() // 103c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 121 rrgw1 m_aob = m_au; @@ -30808,6 +30808,8 @@ void m68000_device::move_b_imm8_dd_df() // 103c f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -30824,9 +30826,7 @@ void m68000_device::move_b_imm8_dd_df() // 103c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_8(m_da[rx], m_aluo); m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -30843,6 +30843,11 @@ void m68000_device::move_b_ds_aid_df() // 1080 f1f8 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -30854,11 +30859,6 @@ void m68000_device::move_b_ds_aid_df() // 1080 f1f8 m_inst_substate = 2; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -30901,6 +30901,7 @@ void m68000_device::move_b_ais_aid_df() // 1090 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30914,11 +30915,15 @@ void m68000_device::move_b_ais_aid_df() // 1090 f1f8 m_inst_substate = 2; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -30930,11 +30935,6 @@ void m68000_device::move_b_ais_aid_df() // 1090 f1f8 m_inst_substate = 4; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -30978,6 +30978,10 @@ void m68000_device::move_b_aips_aid_df() // 1098 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -30991,14 +30995,15 @@ void m68000_device::move_b_aips_aid_df() // 1098 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31010,11 +31015,6 @@ void m68000_device::move_b_aips_aid_df() // 1098 f1f8 m_inst_substate = 4; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31059,6 +31059,11 @@ void m68000_device::move_b_pais_aid_df() // 10a0 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31072,15 +31077,15 @@ void m68000_device::move_b_pais_aid_df() // 10a0 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31092,11 +31097,6 @@ void m68000_device::move_b_pais_aid_df() // 10a0 f1f8 m_inst_substate = 4; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31135,6 +31135,7 @@ void m68000_device::move_b_das_aid_df() // 10a8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31152,7 +31153,6 @@ void m68000_device::move_b_das_aid_df() // 10a8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -31161,6 +31161,7 @@ void m68000_device::move_b_das_aid_df() // 10a8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31174,11 +31175,15 @@ void m68000_device::move_b_das_aid_df() // 10a8 f1f8 m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31190,11 +31195,6 @@ void m68000_device::move_b_das_aid_df() // 10a8 f1f8 m_inst_substate = 6; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31245,6 +31245,7 @@ void m68000_device::move_b_dais_aid_df() // 10b0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31261,13 +31262,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31284,7 +31285,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -31297,6 +31297,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31310,11 +31311,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31326,11 +31331,6 @@ adsw2: m_inst_substate = 6; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31368,6 +31368,10 @@ void m68000_device::move_b_adr16_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31384,14 +31388,13 @@ void m68000_device::move_b_adr16_aid_df() // 10b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31405,13 +31408,15 @@ void m68000_device::move_b_adr16_aid_df() // 10b8 f1ff m_inst_substate = 4; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31423,11 +31428,6 @@ void m68000_device::move_b_adr16_aid_df() // 10b8 f1ff m_inst_substate = 6; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31465,6 +31465,8 @@ void m68000_device::move_b_adr32_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31481,11 +31483,13 @@ void m68000_device::move_b_adr32_aid_df() // 10b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31502,14 +31506,13 @@ void m68000_device::move_b_adr32_aid_df() // 10b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31523,13 +31526,15 @@ void m68000_device::move_b_adr32_aid_df() // 10b9 f1ff m_inst_substate = 6; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31541,11 +31546,6 @@ void m68000_device::move_b_adr32_aid_df() // 10b9 f1ff m_inst_substate = 8; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31583,6 +31583,7 @@ void m68000_device::move_b_dpc_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31600,7 +31601,6 @@ void m68000_device::move_b_dpc_aid_df() // 10ba f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -31609,6 +31609,7 @@ void m68000_device::move_b_dpc_aid_df() // 10ba f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31622,11 +31623,15 @@ void m68000_device::move_b_dpc_aid_df() // 10ba f1ff m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31638,11 +31643,6 @@ void m68000_device::move_b_dpc_aid_df() // 10ba f1ff m_inst_substate = 6; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31692,6 +31692,7 @@ void m68000_device::move_b_dpci_aid_df() // 10bb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31708,13 +31709,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31731,7 +31732,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -31744,6 +31744,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31757,11 +31758,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31773,11 +31778,6 @@ adsw2: m_inst_substate = 6; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31815,6 +31815,10 @@ void m68000_device::move_b_imm8_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31831,16 +31835,17 @@ void m68000_device::move_b_imm8_aid_df() // 10bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31852,11 +31857,6 @@ void m68000_device::move_b_imm8_aid_df() // 10bc f1ff m_inst_substate = 4; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -31897,6 +31897,11 @@ void m68000_device::move_b_ds_aipd_df() // 10c0 f1f8 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31908,15 +31913,12 @@ void m68000_device::move_b_ds_aipd_df() // 10c0 f1f8 m_inst_substate = 2; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -31933,9 +31935,7 @@ void m68000_device::move_b_ds_aipd_df() // 10c0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -31954,6 +31954,7 @@ void m68000_device::move_b_ais_aipd_df() // 10d0 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -31967,12 +31968,16 @@ void m68000_device::move_b_ais_aipd_df() // 10d0 f1f8 m_inst_substate = 2; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -31984,15 +31989,12 @@ void m68000_device::move_b_ais_aipd_df() // 10d0 f1f8 m_inst_substate = 4; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32009,9 +32011,7 @@ void m68000_device::move_b_ais_aipd_df() // 10d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32031,6 +32031,10 @@ void m68000_device::move_b_aips_aipd_df() // 10d8 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32044,15 +32048,16 @@ void m68000_device::move_b_aips_aipd_df() // 10d8 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32064,15 +32069,12 @@ void m68000_device::move_b_aips_aipd_df() // 10d8 f1f8 m_inst_substate = 4; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32089,9 +32091,7 @@ void m68000_device::move_b_aips_aipd_df() // 10d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32112,6 +32112,11 @@ void m68000_device::move_b_pais_aipd_df() // 10e0 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32125,16 +32130,16 @@ void m68000_device::move_b_pais_aipd_df() // 10e0 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32146,15 +32151,12 @@ void m68000_device::move_b_pais_aipd_df() // 10e0 f1f8 m_inst_substate = 4; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32171,9 +32173,7 @@ void m68000_device::move_b_pais_aipd_df() // 10e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32188,6 +32188,7 @@ void m68000_device::move_b_das_aipd_df() // 10e8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32205,7 +32206,6 @@ void m68000_device::move_b_das_aipd_df() // 10e8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -32214,6 +32214,7 @@ void m68000_device::move_b_das_aipd_df() // 10e8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32227,12 +32228,16 @@ void m68000_device::move_b_das_aipd_df() // 10e8 f1f8 m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32244,15 +32249,12 @@ void m68000_device::move_b_das_aipd_df() // 10e8 f1f8 m_inst_substate = 6; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32269,9 +32271,7 @@ void m68000_device::move_b_das_aipd_df() // 10e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32298,6 +32298,7 @@ void m68000_device::move_b_dais_aipd_df() // 10f0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32314,13 +32315,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32337,7 +32338,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -32350,6 +32350,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32363,12 +32364,16 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32380,15 +32385,12 @@ adsw2: m_inst_substate = 6; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32405,9 +32407,7 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32421,6 +32421,10 @@ void m68000_device::move_b_adr16_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32437,14 +32441,13 @@ void m68000_device::move_b_adr16_aipd_df() // 10f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32458,14 +32461,16 @@ void m68000_device::move_b_adr16_aipd_df() // 10f8 f1ff m_inst_substate = 4; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32477,15 +32482,12 @@ void m68000_device::move_b_adr16_aipd_df() // 10f8 f1ff m_inst_substate = 6; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32502,9 +32504,7 @@ void m68000_device::move_b_adr16_aipd_df() // 10f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32518,6 +32518,8 @@ void m68000_device::move_b_adr32_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32534,11 +32536,13 @@ void m68000_device::move_b_adr32_aipd_df() // 10f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32555,14 +32559,13 @@ void m68000_device::move_b_adr32_aipd_df() // 10f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32576,14 +32579,16 @@ void m68000_device::move_b_adr32_aipd_df() // 10f9 f1ff m_inst_substate = 6; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32595,15 +32600,12 @@ void m68000_device::move_b_adr32_aipd_df() // 10f9 f1ff m_inst_substate = 8; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32620,9 +32622,7 @@ void m68000_device::move_b_adr32_aipd_df() // 10f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32636,6 +32636,7 @@ void m68000_device::move_b_dpc_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32653,7 +32654,6 @@ void m68000_device::move_b_dpc_aipd_df() // 10fa f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -32662,6 +32662,7 @@ void m68000_device::move_b_dpc_aipd_df() // 10fa f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32675,12 +32676,16 @@ void m68000_device::move_b_dpc_aipd_df() // 10fa f1ff m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32692,15 +32697,12 @@ void m68000_device::move_b_dpc_aipd_df() // 10fa f1ff m_inst_substate = 6; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32717,9 +32719,7 @@ void m68000_device::move_b_dpc_aipd_df() // 10fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32745,6 +32745,7 @@ void m68000_device::move_b_dpci_aipd_df() // 10fb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32761,13 +32762,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32784,7 +32785,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -32797,6 +32797,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -32810,12 +32811,16 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32827,15 +32832,12 @@ adsw2: m_inst_substate = 6; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32852,9 +32854,7 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32868,6 +32868,10 @@ void m68000_device::move_b_imm8_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32884,16 +32888,17 @@ void m68000_device::move_b_imm8_aipd_df() // 10fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32905,15 +32910,12 @@ void m68000_device::move_b_imm8_aipd_df() // 10fc f1ff m_inst_substate = 4; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32930,9 +32932,7 @@ void m68000_device::move_b_imm8_aipd_df() // 10fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -32948,6 +32948,11 @@ void m68000_device::move_b_ds_paid_df() // 1100 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -32964,18 +32969,15 @@ void m68000_device::move_b_ds_paid_df() // 1100 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_da[rx] - (rx < 15 ? 1 : 2); m_dbin = m_edb; - // 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -32987,8 +32989,6 @@ void m68000_device::move_b_ds_paid_df() // 1100 f1f8 m_inst_substate = 4; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33006,6 +33006,7 @@ void m68000_device::move_b_ais_paid_df() // 1110 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33019,11 +33020,15 @@ void m68000_device::move_b_ais_paid_df() // 1110 f1f8 m_inst_substate = 2; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33040,18 +33045,15 @@ void m68000_device::move_b_ais_paid_df() // 1110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33063,8 +33065,6 @@ void m68000_device::move_b_ais_paid_df() // 1110 f1f8 m_inst_substate = 6; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33083,6 +33083,10 @@ void m68000_device::move_b_aips_paid_df() // 1118 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33096,14 +33100,15 @@ void m68000_device::move_b_aips_paid_df() // 1118 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33120,18 +33125,15 @@ void m68000_device::move_b_aips_paid_df() // 1118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33143,8 +33145,6 @@ void m68000_device::move_b_aips_paid_df() // 1118 f1f8 m_inst_substate = 6; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33164,6 +33164,11 @@ void m68000_device::move_b_pais_paid_df() // 1120 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33177,15 +33182,15 @@ void m68000_device::move_b_pais_paid_df() // 1120 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33202,18 +33207,15 @@ void m68000_device::move_b_pais_paid_df() // 1120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33225,8 +33227,6 @@ void m68000_device::move_b_pais_paid_df() // 1120 f1f8 m_inst_substate = 6; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33240,6 +33240,7 @@ void m68000_device::move_b_das_paid_df() // 1128 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33257,7 +33258,6 @@ void m68000_device::move_b_das_paid_df() // 1128 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -33266,6 +33266,7 @@ void m68000_device::move_b_das_paid_df() // 1128 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33279,11 +33280,15 @@ void m68000_device::move_b_das_paid_df() // 1128 f1f8 m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33300,18 +33305,15 @@ void m68000_device::move_b_das_paid_df() // 1128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33323,8 +33325,6 @@ void m68000_device::move_b_das_paid_df() // 1128 f1f8 m_inst_substate = 8; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33350,6 +33350,7 @@ void m68000_device::move_b_dais_paid_df() // 1130 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33366,13 +33367,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33389,7 +33390,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -33402,6 +33402,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33415,11 +33416,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33436,18 +33441,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33459,8 +33461,6 @@ adsw2: m_inst_substate = 8; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33473,6 +33473,10 @@ void m68000_device::move_b_adr16_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33489,14 +33493,13 @@ void m68000_device::move_b_adr16_paid_df() // 1138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33510,13 +33513,15 @@ void m68000_device::move_b_adr16_paid_df() // 1138 f1ff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33533,18 +33538,15 @@ void m68000_device::move_b_adr16_paid_df() // 1138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33556,8 +33558,6 @@ void m68000_device::move_b_adr16_paid_df() // 1138 f1ff m_inst_substate = 8; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33570,6 +33570,8 @@ void m68000_device::move_b_adr32_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33586,11 +33588,13 @@ void m68000_device::move_b_adr32_paid_df() // 1139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33607,14 +33611,13 @@ void m68000_device::move_b_adr32_paid_df() // 1139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33628,13 +33631,15 @@ void m68000_device::move_b_adr32_paid_df() // 1139 f1ff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33651,18 +33656,15 @@ void m68000_device::move_b_adr32_paid_df() // 1139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33674,8 +33676,6 @@ void m68000_device::move_b_adr32_paid_df() // 1139 f1ff m_inst_substate = 10; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33688,6 +33688,7 @@ void m68000_device::move_b_dpc_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33705,7 +33706,6 @@ void m68000_device::move_b_dpc_paid_df() // 113a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -33714,6 +33714,7 @@ void m68000_device::move_b_dpc_paid_df() // 113a f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33727,11 +33728,15 @@ void m68000_device::move_b_dpc_paid_df() // 113a f1ff m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33748,18 +33753,15 @@ void m68000_device::move_b_dpc_paid_df() // 113a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33771,8 +33773,6 @@ void m68000_device::move_b_dpc_paid_df() // 113a f1ff m_inst_substate = 8; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33797,6 +33797,7 @@ void m68000_device::move_b_dpci_paid_df() // 113b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33813,13 +33814,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33836,7 +33837,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -33849,6 +33849,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -33862,11 +33863,15 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33883,18 +33888,15 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33906,8 +33908,6 @@ adsw2: m_inst_substate = 8; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33920,6 +33920,10 @@ void m68000_device::move_b_imm8_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33936,15 +33940,16 @@ void m68000_device::move_b_imm8_paid_df() // 113c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -33961,18 +33966,15 @@ void m68000_device::move_b_imm8_paid_df() // 113c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_da[rx] - (rx < 15 ? 1 : 2); m_dbin = m_edb; - // 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -33984,8 +33986,6 @@ void m68000_device::move_b_imm8_paid_df() // 113c f1ff m_inst_substate = 6; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -33999,6 +33999,8 @@ void m68000_device::move_b_ds_dad_df() // 1140 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34015,13 +34017,15 @@ void m68000_device::move_b_ds_dad_df() // 1140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[rx]; // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34033,10 +34037,6 @@ void m68000_device::move_b_ds_dad_df() // 1140 f1f8 m_inst_substate = 4; return; } - 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(); // 363 b m_aob = m_au; m_ir = m_irc; @@ -34080,6 +34080,7 @@ void m68000_device::move_b_ais_dad_df() // 1150 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34093,10 +34094,14 @@ void m68000_device::move_b_ais_dad_df() // 1150 f1f8 m_inst_substate = 2; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34113,17 +34118,13 @@ void m68000_device::move_b_ais_dad_df() // 1150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34135,7 +34136,6 @@ void m68000_device::move_b_ais_dad_df() // 1150 f1f8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34183,6 +34183,10 @@ void m68000_device::move_b_aips_dad_df() // 1158 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34196,13 +34200,14 @@ void m68000_device::move_b_aips_dad_df() // 1158 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34219,17 +34224,13 @@ void m68000_device::move_b_aips_dad_df() // 1158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34241,7 +34242,6 @@ void m68000_device::move_b_aips_dad_df() // 1158 f1f8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34290,6 +34290,11 @@ void m68000_device::move_b_pais_dad_df() // 1160 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34303,14 +34308,14 @@ void m68000_device::move_b_pais_dad_df() // 1160 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34327,17 +34332,13 @@ void m68000_device::move_b_pais_dad_df() // 1160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34349,7 +34350,6 @@ void m68000_device::move_b_pais_dad_df() // 1160 f1f8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34392,6 +34392,7 @@ void m68000_device::move_b_das_dad_df() // 1168 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34409,7 +34410,6 @@ void m68000_device::move_b_das_dad_df() // 1168 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -34418,6 +34418,7 @@ void m68000_device::move_b_das_dad_df() // 1168 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34431,10 +34432,14 @@ void m68000_device::move_b_das_dad_df() // 1168 f1f8 m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34451,17 +34456,13 @@ void m68000_device::move_b_das_dad_df() // 1168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34473,7 +34474,6 @@ void m68000_device::move_b_das_dad_df() // 1168 f1f8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34528,6 +34528,7 @@ void m68000_device::move_b_dais_dad_df() // 1170 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34544,13 +34545,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34567,7 +34568,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -34580,6 +34580,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34593,10 +34594,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34613,17 +34618,13 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34635,7 +34636,6 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34677,6 +34677,10 @@ void m68000_device::move_b_adr16_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34693,14 +34697,13 @@ void m68000_device::move_b_adr16_dad_df() // 1178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34714,12 +34717,14 @@ void m68000_device::move_b_adr16_dad_df() // 1178 f1ff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34736,17 +34741,13 @@ void m68000_device::move_b_adr16_dad_df() // 1178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34758,7 +34759,6 @@ void m68000_device::move_b_adr16_dad_df() // 1178 f1ff m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34800,6 +34800,8 @@ void m68000_device::move_b_adr32_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34816,11 +34818,13 @@ void m68000_device::move_b_adr32_dad_df() // 1179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34837,14 +34841,13 @@ void m68000_device::move_b_adr32_dad_df() // 1179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34858,12 +34861,14 @@ void m68000_device::move_b_adr32_dad_df() // 1179 f1ff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34880,17 +34885,13 @@ void m68000_device::move_b_adr32_dad_df() // 1179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -34902,7 +34903,6 @@ void m68000_device::move_b_adr32_dad_df() // 1179 f1ff m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -34944,6 +34944,7 @@ void m68000_device::move_b_dpc_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -34961,7 +34962,6 @@ void m68000_device::move_b_dpc_dad_df() // 117a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -34970,6 +34970,7 @@ void m68000_device::move_b_dpc_dad_df() // 117a f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -34983,10 +34984,14 @@ void m68000_device::move_b_dpc_dad_df() // 117a f1ff m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35003,17 +35008,13 @@ void m68000_device::move_b_dpc_dad_df() // 117a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35025,7 +35026,6 @@ void m68000_device::move_b_dpc_dad_df() // 117a f1ff m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -35079,6 +35079,7 @@ void m68000_device::move_b_dpci_dad_df() // 117b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35095,13 +35096,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35118,7 +35119,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -35131,6 +35131,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -35144,10 +35145,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35164,17 +35169,13 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35186,7 +35187,6 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -35228,6 +35228,10 @@ void m68000_device::move_b_imm8_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35244,14 +35248,12 @@ void m68000_device::move_b_imm8_dad_df() // 117c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35268,13 +35270,15 @@ void m68000_device::move_b_imm8_dad_df() // 117c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[rx]; // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35286,10 +35290,6 @@ void m68000_device::move_b_imm8_dad_df() // 117c f1ff m_inst_substate = 6; return; } - 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(); // 363 b m_aob = m_au; m_ir = m_irc; @@ -35342,6 +35342,7 @@ void m68000_device::move_b_ds_daid_df() // 1180 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35358,13 +35359,13 @@ rmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35381,7 +35382,6 @@ rmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -35391,6 +35391,10 @@ 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35402,10 +35406,6 @@ rmdw2: m_inst_substate = 4; return; } - 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(); // 363 b m_aob = m_au; m_ir = m_irc; @@ -35449,6 +35449,7 @@ void m68000_device::move_b_ais_daid_df() // 1190 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -35462,7 +35463,6 @@ void m68000_device::move_b_ais_daid_df() // 1190 f1f8 m_inst_substate = 2; return; } - m_dcr = 0; m_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -35479,6 +35479,10 @@ void m68000_device::move_b_ais_daid_df() // 1190 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35495,14 +35499,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35519,11 +35523,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -35531,6 +35531,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35542,7 +35543,6 @@ maww2: m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -35590,6 +35590,10 @@ void m68000_device::move_b_aips_daid_df() // 1198 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -35603,11 +35607,7 @@ void m68000_device::move_b_aips_daid_df() // 1198 f1f8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 alu_ext(m_aluo); @@ -35623,6 +35623,10 @@ void m68000_device::move_b_aips_daid_df() // 1198 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35639,14 +35643,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35663,11 +35667,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -35675,6 +35675,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35686,7 +35687,6 @@ maww2: m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -35735,6 +35735,11 @@ void m68000_device::move_b_pais_daid_df() // 11a0 f1f8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -35748,12 +35753,7 @@ void m68000_device::move_b_pais_daid_df() // 11a0 f1f8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=bl..... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 alu_ext(m_aluo); @@ -35769,6 +35769,10 @@ void m68000_device::move_b_pais_daid_df() // 11a0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35785,14 +35789,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35809,11 +35813,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -35821,6 +35821,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35832,7 +35833,6 @@ maww2: m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -35875,6 +35875,7 @@ void m68000_device::move_b_das_daid_df() // 11a8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35892,7 +35893,6 @@ void m68000_device::move_b_das_daid_df() // 11a8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -35901,6 +35901,7 @@ void m68000_device::move_b_das_daid_df() // 11a8 f1f8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -35914,7 +35915,6 @@ void m68000_device::move_b_das_daid_df() // 11a8 f1f8 m_inst_substate = 4; return; } - m_dcr = 0; m_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -35931,6 +35931,10 @@ void m68000_device::move_b_das_daid_df() // 11a8 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35947,14 +35951,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -35971,11 +35975,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -35983,6 +35983,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -35994,7 +35995,6 @@ maww2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36049,6 +36049,7 @@ void m68000_device::move_b_dais_daid_df() // 11b0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36065,13 +36066,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36088,7 +36089,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -36101,6 +36101,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -36114,7 +36115,6 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; m_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -36131,6 +36131,10 @@ adsw2: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36147,14 +36151,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36171,11 +36175,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -36183,6 +36183,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -36194,7 +36195,6 @@ maww2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36236,6 +36236,10 @@ void m68000_device::move_b_adr16_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36252,14 +36256,13 @@ void m68000_device::move_b_adr16_daid_df() // 11b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -36273,9 +36276,6 @@ void m68000_device::move_b_adr16_daid_df() // 11b8 f1ff m_inst_substate = 4; return; } - 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_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -36292,6 +36292,10 @@ void m68000_device::move_b_adr16_daid_df() // 11b8 f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36308,14 +36312,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36332,11 +36336,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -36344,6 +36344,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -36355,7 +36356,6 @@ maww2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36397,6 +36397,8 @@ void m68000_device::move_b_adr32_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36413,11 +36415,13 @@ void m68000_device::move_b_adr32_daid_df() // 11b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36434,14 +36438,13 @@ void m68000_device::move_b_adr32_daid_df() // 11b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -36455,9 +36458,6 @@ void m68000_device::move_b_adr32_daid_df() // 11b9 f1ff m_inst_substate = 6; return; } - 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_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -36474,6 +36474,10 @@ void m68000_device::move_b_adr32_daid_df() // 11b9 f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36490,14 +36494,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36514,11 +36518,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -36526,6 +36526,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -36537,7 +36538,6 @@ maww2: m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36579,6 +36579,7 @@ void m68000_device::move_b_dpc_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36596,7 +36597,6 @@ void m68000_device::move_b_dpc_daid_df() // 11ba f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -36605,6 +36605,7 @@ void m68000_device::move_b_dpc_daid_df() // 11ba f1ff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -36618,7 +36619,6 @@ void m68000_device::move_b_dpc_daid_df() // 11ba f1ff m_inst_substate = 4; return; } - m_dcr = 0; m_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -36635,6 +36635,10 @@ void m68000_device::move_b_dpc_daid_df() // 11ba f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36651,14 +36655,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36675,11 +36679,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -36687,6 +36687,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -36698,7 +36699,6 @@ maww2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36752,6 +36752,7 @@ void m68000_device::move_b_dpci_daid_df() // 11bb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36768,13 +36769,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36791,7 +36792,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -36804,6 +36804,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -36817,7 +36818,6 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; m_dbin = m_edb; // 298 mmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.aluo:m_aluo d=0 @@ -36834,6 +36834,10 @@ adsw2: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36850,14 +36854,14 @@ mmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36874,11 +36878,7 @@ mmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); goto maww2; maww2: // 389 maww2 @@ -36886,6 +36886,7 @@ maww2: m_ird = m_ir; if(m_next_state != S_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -36897,7 +36898,6 @@ maww2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -36939,6 +36939,10 @@ void m68000_device::move_b_imm8_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36955,11 +36959,7 @@ void m68000_device::move_b_imm8_daid_df() // 11bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1eb rmxw0 // alu r=2 c=5 m=..... i=bl..... ALU.ext a=R.dbin:m_dbin d=0 @@ -36976,6 +36976,7 @@ void m68000_device::move_b_imm8_daid_df() // 11bc f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -36992,13 +36993,13 @@ rmxw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37015,7 +37016,6 @@ rmxw3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -37025,6 +37025,10 @@ 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37036,10 +37040,6 @@ rmdw2: m_inst_substate = 6; return; } - 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(); // 363 b m_aob = m_au; m_ir = m_irc; @@ -37078,6 +37078,12 @@ void m68000_device::move_b_ds_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37094,18 +37100,13 @@ void m68000_device::move_b_ds_adr16_df() // 11c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_da[ry]); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37117,7 +37118,6 @@ void m68000_device::move_b_ds_adr16_df() // 11c0 fff8 m_inst_substate = 4; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37163,6 +37163,7 @@ void m68000_device::move_b_ais_adr16_df() // 11d0 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37176,10 +37177,14 @@ void m68000_device::move_b_ais_adr16_df() // 11d0 fff8 m_inst_substate = 2; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37196,17 +37201,13 @@ void m68000_device::move_b_ais_adr16_df() // 11d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37218,7 +37219,6 @@ void m68000_device::move_b_ais_adr16_df() // 11d0 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37265,6 +37265,10 @@ void m68000_device::move_b_aips_adr16_df() // 11d8 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37278,13 +37282,14 @@ void m68000_device::move_b_aips_adr16_df() // 11d8 fff8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37301,17 +37306,13 @@ void m68000_device::move_b_aips_adr16_df() // 11d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37323,7 +37324,6 @@ void m68000_device::move_b_aips_adr16_df() // 11d8 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37371,6 +37371,11 @@ void m68000_device::move_b_pais_adr16_df() // 11e0 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37384,14 +37389,14 @@ void m68000_device::move_b_pais_adr16_df() // 11e0 fff8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37408,17 +37413,13 @@ void m68000_device::move_b_pais_adr16_df() // 11e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37430,7 +37431,6 @@ void m68000_device::move_b_pais_adr16_df() // 11e0 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37472,6 +37472,7 @@ void m68000_device::move_b_das_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37489,7 +37490,6 @@ void m68000_device::move_b_das_adr16_df() // 11e8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -37498,6 +37498,7 @@ void m68000_device::move_b_das_adr16_df() // 11e8 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37511,10 +37512,14 @@ void m68000_device::move_b_das_adr16_df() // 11e8 fff8 m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37531,17 +37536,13 @@ void m68000_device::move_b_das_adr16_df() // 11e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37553,7 +37554,6 @@ void m68000_device::move_b_das_adr16_df() // 11e8 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37607,6 +37607,7 @@ void m68000_device::move_b_dais_adr16_df() // 11f0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37623,13 +37624,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37646,7 +37647,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -37659,6 +37659,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37672,10 +37673,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37692,17 +37697,13 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37714,7 +37715,6 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37755,6 +37755,10 @@ void m68000_device::move_b_adr16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37771,14 +37775,13 @@ void m68000_device::move_b_adr16_adr16_df() // 11f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37792,12 +37795,14 @@ void m68000_device::move_b_adr16_adr16_df() // 11f8 ffff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37814,17 +37819,13 @@ void m68000_device::move_b_adr16_adr16_df() // 11f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37836,7 +37837,6 @@ void m68000_device::move_b_adr16_adr16_df() // 11f8 ffff m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -37877,6 +37877,8 @@ void m68000_device::move_b_adr32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37893,11 +37895,13 @@ void m68000_device::move_b_adr32_adr16_df() // 11f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37914,14 +37918,13 @@ void m68000_device::move_b_adr32_adr16_df() // 11f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -37935,12 +37938,14 @@ void m68000_device::move_b_adr32_adr16_df() // 11f9 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -37957,17 +37962,13 @@ void m68000_device::move_b_adr32_adr16_df() // 11f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -37979,7 +37980,6 @@ void m68000_device::move_b_adr32_adr16_df() // 11f9 ffff m_inst_substate = 10; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -38020,6 +38020,7 @@ void m68000_device::move_b_dpc_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38037,7 +38038,6 @@ void m68000_device::move_b_dpc_adr16_df() // 11fa ffff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -38046,6 +38046,7 @@ void m68000_device::move_b_dpc_adr16_df() // 11fa ffff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38059,10 +38060,14 @@ void m68000_device::move_b_dpc_adr16_df() // 11fa ffff m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38079,17 +38084,13 @@ void m68000_device::move_b_dpc_adr16_df() // 11fa ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38101,7 +38102,6 @@ void m68000_device::move_b_dpc_adr16_df() // 11fa ffff m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -38154,6 +38154,7 @@ void m68000_device::move_b_dpci_adr16_df() // 11fb ffff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38170,13 +38171,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38193,7 +38194,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -38206,6 +38206,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38219,10 +38220,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38239,17 +38244,13 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38261,7 +38262,6 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -38302,6 +38302,10 @@ void m68000_device::move_b_imm8_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38318,14 +38322,16 @@ void m68000_device::move_b_imm8_adr16_df() // 11fc ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38342,18 +38348,13 @@ void m68000_device::move_b_imm8_adr16_df() // 11fc ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_dt); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38365,7 +38366,6 @@ void m68000_device::move_b_imm8_adr16_df() // 11fc ffff m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -38407,6 +38407,8 @@ void m68000_device::move_b_ds_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38423,11 +38425,15 @@ void m68000_device::move_b_ds_adr32_df() // 13c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38444,18 +38450,13 @@ void m68000_device::move_b_ds_adr32_df() // 13c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_da[ry]); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38467,7 +38468,6 @@ void m68000_device::move_b_ds_adr32_df() // 13c0 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -38513,6 +38513,7 @@ void m68000_device::move_b_ais_adr32_df() // 13d0 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38526,10 +38527,14 @@ void m68000_device::move_b_ais_adr32_df() // 13d0 fff8 m_inst_substate = 2; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38546,16 +38551,12 @@ void m68000_device::move_b_ais_adr32_df() // 13d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38567,10 +38568,12 @@ void m68000_device::move_b_ais_adr32_df() // 13d0 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38587,10 +38590,7 @@ void m68000_device::move_b_ais_adr32_df() // 13d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -38635,6 +38635,10 @@ void m68000_device::move_b_aips_adr32_df() // 13d8 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38648,13 +38652,14 @@ void m68000_device::move_b_aips_adr32_df() // 13d8 fff8 m_inst_substate = 2; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38671,16 +38676,12 @@ void m68000_device::move_b_aips_adr32_df() // 13d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38692,10 +38693,12 @@ void m68000_device::move_b_aips_adr32_df() // 13d8 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38712,10 +38715,7 @@ void m68000_device::move_b_aips_adr32_df() // 13d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -38761,6 +38761,11 @@ void m68000_device::move_b_pais_adr32_df() // 13e0 fff8 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38774,14 +38779,14 @@ void m68000_device::move_b_pais_adr32_df() // 13e0 fff8 m_inst_substate = 2; return; } - m_at = m_au; - m_da[ry] = m_au; - m_au = m_pc; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=b...... ALU.and_ a=alub d=-1 - alu_and8(m_alub, 0xffff); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38798,16 +38803,12 @@ void m68000_device::move_b_pais_adr32_df() // 13e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38819,10 +38820,12 @@ void m68000_device::move_b_pais_adr32_df() // 13e0 fff8 m_inst_substate = 6; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38839,10 +38842,7 @@ void m68000_device::move_b_pais_adr32_df() // 13e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -38882,6 +38882,7 @@ void m68000_device::move_b_das_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38899,7 +38900,6 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -38908,6 +38908,7 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -38921,10 +38922,14 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38941,16 +38946,12 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -38962,10 +38963,12 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 m_inst_substate = 8; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -38982,10 +38985,7 @@ void m68000_device::move_b_das_adr32_df() // 13e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39037,6 +39037,7 @@ void m68000_device::move_b_dais_adr32_df() // 13f0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39053,13 +39054,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39076,7 +39077,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -39089,6 +39089,7 @@ adsw2: // 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -39102,10 +39103,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39122,16 +39127,12 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39143,10 +39144,12 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39163,10 +39166,7 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39205,6 +39205,10 @@ void m68000_device::move_b_adr16_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39221,14 +39225,13 @@ void m68000_device::move_b_adr16_adr32_df() // 13f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -39242,12 +39245,14 @@ void m68000_device::move_b_adr16_adr32_df() // 13f8 ffff m_inst_substate = 4; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39264,16 +39269,12 @@ void m68000_device::move_b_adr16_adr32_df() // 13f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39285,10 +39286,12 @@ void m68000_device::move_b_adr16_adr32_df() // 13f8 ffff m_inst_substate = 8; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39305,10 +39308,7 @@ void m68000_device::move_b_adr16_adr32_df() // 13f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39347,6 +39347,8 @@ void m68000_device::move_b_adr32_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39363,11 +39365,13 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39384,14 +39388,13 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -39405,12 +39408,14 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_substate = 6; return; } - 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_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39427,16 +39432,12 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39448,10 +39449,12 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_substate = 10; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39468,10 +39471,7 @@ void m68000_device::move_b_adr32_adr32_df() // 13f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39510,6 +39510,7 @@ void m68000_device::move_b_dpc_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39527,7 +39528,6 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; m_dbin = m_edb; // 02a adsw2 m_aob = m_au; @@ -39536,6 +39536,7 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -39549,10 +39550,14 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39569,16 +39574,12 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39590,10 +39591,12 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff m_inst_substate = 8; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39610,10 +39613,7 @@ void m68000_device::move_b_dpc_adr32_df() // 13fa ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39664,6 +39664,7 @@ void m68000_device::move_b_dpci_adr32_df() // 13fb ffff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39680,13 +39681,13 @@ aixl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; m_dbin = m_edb; step_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39703,7 +39704,6 @@ aixl5: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -39716,6 +39716,7 @@ adsw2: // 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_opcodes.read_interruptible(m_aob & ~1, m_aob & 1 ? 0x00ff : 0xff00); if(!(m_aob & 1)) @@ -39729,10 +39730,14 @@ adsw2: m_inst_substate = 4; return; } - m_dcr = 0; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39749,16 +39754,12 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39770,10 +39771,12 @@ adsw2: m_inst_substate = 8; return; } - m_au = m_pc + 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39790,10 +39793,7 @@ adsw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_ftu = m_dbin; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 363 b m_aob = m_au; @@ -39832,6 +39832,10 @@ void m68000_device::move_b_imm8_adr32_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39848,14 +39852,12 @@ void m68000_device::move_b_imm8_adr32_df() // 13fc ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39872,11 +39874,15 @@ void m68000_device::move_b_imm8_adr32_df() // 13fc ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39893,18 +39899,13 @@ void m68000_device::move_b_imm8_adr32_df() // 13fc ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_dt); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout, (m_aob & 1) ? 0x00ff : 0xff00); m_icount -= 4; @@ -39916,7 +39917,6 @@ void m68000_device::move_b_imm8_adr32_df() // 13fc ffff m_inst_substate = 8; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -39969,6 +39969,10 @@ void m68000_device::move_l_ds_dd_df() // 2000 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -39987,10 +39991,6 @@ void m68000_device::move_l_ds_dd_df() // 2000 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // 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; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40014,6 +40014,10 @@ void m68000_device::move_l_as_dd_df() // 2008 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40030,12 +40034,8 @@ void m68000_device::move_l_as_dd_df() // 2008 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_at; m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40049,6 +40049,9 @@ void m68000_device::move_l_ais_dd_df() // 2010 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40065,12 +40068,13 @@ void m68000_device::move_l_ais_dd_df() // 2010 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40087,10 +40091,6 @@ void m68000_device::move_l_ais_dd_df() // 2010 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40104,6 +40104,10 @@ void m68000_device::move_l_ais_dd_df() // 2010 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40120,12 +40124,8 @@ void m68000_device::move_l_ais_dd_df() // 2010 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40139,6 +40139,9 @@ void m68000_device::move_l_aips_dd_df() // 2018 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40155,9 +40158,6 @@ void m68000_device::move_l_aips_dd_df() // 2018 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -40166,6 +40166,8 @@ void m68000_device::move_l_aips_dd_df() // 2018 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40182,8 +40184,6 @@ void m68000_device::move_l_aips_dd_df() // 2018 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40197,6 +40197,10 @@ void m68000_device::move_l_aips_dd_df() // 2018 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40213,12 +40217,8 @@ void m68000_device::move_l_aips_dd_df() // 2018 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40237,6 +40237,8 @@ void m68000_device::move_l_pais_dd_df() // 2020 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40253,11 +40255,13 @@ void m68000_device::move_l_pais_dd_df() // 2020 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40274,10 +40278,6 @@ void m68000_device::move_l_pais_dd_df() // 2020 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40291,6 +40291,10 @@ void m68000_device::move_l_pais_dd_df() // 2020 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40307,12 +40311,8 @@ void m68000_device::move_l_pais_dd_df() // 2020 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40326,6 +40326,7 @@ void m68000_device::move_l_das_dd_df() // 2028 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40343,10 +40344,12 @@ void m68000_device::move_l_das_dd_df() // 2028 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40363,12 +40366,13 @@ void m68000_device::move_l_das_dd_df() // 2028 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40385,10 +40389,6 @@ void m68000_device::move_l_das_dd_df() // 2028 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40402,6 +40402,10 @@ void m68000_device::move_l_das_dd_df() // 2028 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40418,12 +40422,8 @@ void m68000_device::move_l_das_dd_df() // 2028 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40449,6 +40449,7 @@ void m68000_device::move_l_dais_dd_df() // 2030 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40465,13 +40466,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40488,7 +40489,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -40496,6 +40496,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40512,12 +40515,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40534,10 +40538,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40551,6 +40551,10 @@ adsl2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40567,12 +40571,8 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40585,6 +40585,10 @@ void m68000_device::move_l_adr16_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40601,14 +40605,13 @@ void m68000_device::move_l_adr16_dd_df() // 2038 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40625,12 +40628,13 @@ void m68000_device::move_l_adr16_dd_df() // 2038 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40647,10 +40651,6 @@ void m68000_device::move_l_adr16_dd_df() // 2038 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40664,6 +40664,10 @@ void m68000_device::move_l_adr16_dd_df() // 2038 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40680,12 +40684,8 @@ void m68000_device::move_l_adr16_dd_df() // 2038 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40698,6 +40698,8 @@ void m68000_device::move_l_adr32_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40714,11 +40716,13 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40735,14 +40739,13 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = m_da[rx]; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40759,12 +40762,13 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40781,10 +40785,6 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40798,6 +40798,10 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40814,12 +40818,8 @@ void m68000_device::move_l_adr32_dd_df() // 2039 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40832,6 +40832,7 @@ void m68000_device::move_l_dpc_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40849,10 +40850,12 @@ void m68000_device::move_l_dpc_dd_df() // 203a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40869,12 +40872,13 @@ void m68000_device::move_l_dpc_dd_df() // 203a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40891,10 +40895,6 @@ void m68000_device::move_l_dpc_dd_df() // 203a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -40908,6 +40908,10 @@ void m68000_device::move_l_dpc_dd_df() // 203a f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40924,12 +40928,8 @@ void m68000_device::move_l_dpc_dd_df() // 203a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -40954,6 +40954,7 @@ void m68000_device::move_l_dpci_dd_df() // 203b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40970,13 +40971,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -40993,7 +40994,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -41001,6 +41001,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41017,12 +41020,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41039,10 +41043,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41056,6 +41056,10 @@ adsl2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41072,12 +41076,8 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41090,6 +41090,8 @@ void m68000_device::move_l_imm32_dd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41106,11 +41108,13 @@ void m68000_device::move_l_imm32_dd_df() // 203c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41127,11 +41131,7 @@ void m68000_device::move_l_imm32_dd_df() // 203c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 129 rrgl1 m_aob = m_au; @@ -41145,6 +41145,10 @@ void m68000_device::move_l_imm32_dd_df() // 203c f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41161,12 +41165,8 @@ void m68000_device::move_l_imm32_dd_df() // 203c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_at; m_irc = m_edb; m_dbin = m_edb; - // 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(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41189,6 +41189,9 @@ void m68000_device::movea_l_ds_ad_df() // 2040 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41205,11 +41208,8 @@ void m68000_device::movea_l_ds_ad_df() // 2040 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_at; m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=18:m_da[ry] d=-1 - alu_and(high16(m_da[ry]), 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41232,6 +41232,9 @@ void m68000_device::movea_l_as_ad_df() // 2048 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41250,9 +41253,6 @@ void m68000_device::movea_l_as_ad_df() // 2048 f1f8 } m_irc = m_edb; m_dbin = m_edb; - // 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; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41266,6 +41266,9 @@ void m68000_device::movea_l_ais_ad_df() // 2050 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41282,12 +41285,13 @@ void m68000_device::movea_l_ais_ad_df() // 2050 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41304,10 +41308,6 @@ void m68000_device::movea_l_ais_ad_df() // 2050 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41320,6 +41320,9 @@ void m68000_device::movea_l_ais_ad_df() // 2050 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41336,11 +41339,8 @@ void m68000_device::movea_l_ais_ad_df() // 2050 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41354,6 +41354,9 @@ void m68000_device::movea_l_aips_ad_df() // 2058 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41370,9 +41373,6 @@ void m68000_device::movea_l_aips_ad_df() // 2058 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -41381,6 +41381,8 @@ void m68000_device::movea_l_aips_ad_df() // 2058 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41397,8 +41399,6 @@ void m68000_device::movea_l_aips_ad_df() // 2058 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41411,6 +41411,9 @@ void m68000_device::movea_l_aips_ad_df() // 2058 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41427,11 +41430,8 @@ void m68000_device::movea_l_aips_ad_df() // 2058 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41450,6 +41450,8 @@ void m68000_device::movea_l_pais_ad_df() // 2060 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41466,11 +41468,13 @@ void m68000_device::movea_l_pais_ad_df() // 2060 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41487,10 +41491,6 @@ void m68000_device::movea_l_pais_ad_df() // 2060 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41503,6 +41503,9 @@ void m68000_device::movea_l_pais_ad_df() // 2060 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41519,11 +41522,8 @@ void m68000_device::movea_l_pais_ad_df() // 2060 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41537,6 +41537,7 @@ void m68000_device::movea_l_das_ad_df() // 2068 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41554,10 +41555,12 @@ void m68000_device::movea_l_das_ad_df() // 2068 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41574,12 +41577,13 @@ void m68000_device::movea_l_das_ad_df() // 2068 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41596,10 +41600,6 @@ void m68000_device::movea_l_das_ad_df() // 2068 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41612,6 +41612,9 @@ void m68000_device::movea_l_das_ad_df() // 2068 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41628,11 +41631,8 @@ void m68000_device::movea_l_das_ad_df() // 2068 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41658,6 +41658,7 @@ void m68000_device::movea_l_dais_ad_df() // 2070 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41674,13 +41675,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41697,7 +41698,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -41705,6 +41705,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41721,12 +41724,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41743,10 +41747,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41759,6 +41759,9 @@ adsl2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41775,11 +41778,8 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41792,6 +41792,10 @@ void m68000_device::movea_l_adr16_ad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41808,14 +41812,13 @@ void m68000_device::movea_l_adr16_ad_df() // 2078 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41832,12 +41835,13 @@ void m68000_device::movea_l_adr16_ad_df() // 2078 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41854,10 +41858,6 @@ void m68000_device::movea_l_adr16_ad_df() // 2078 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -41870,6 +41870,9 @@ void m68000_device::movea_l_adr16_ad_df() // 2078 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41886,11 +41889,8 @@ void m68000_device::movea_l_adr16_ad_df() // 2078 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -41903,6 +41903,8 @@ void m68000_device::movea_l_adr32_ad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41919,11 +41921,13 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41940,14 +41944,13 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41964,12 +41967,13 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -41986,10 +41990,6 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -42002,6 +42002,9 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42018,11 +42021,8 @@ void m68000_device::movea_l_adr32_ad_df() // 2079 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42035,6 +42035,7 @@ void m68000_device::movea_l_dpc_ad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42052,10 +42053,12 @@ void m68000_device::movea_l_dpc_ad_df() // 207a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42072,12 +42075,13 @@ void m68000_device::movea_l_dpc_ad_df() // 207a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42094,10 +42098,6 @@ void m68000_device::movea_l_dpc_ad_df() // 207a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -42110,6 +42110,9 @@ void m68000_device::movea_l_dpc_ad_df() // 207a f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42126,11 +42129,8 @@ void m68000_device::movea_l_dpc_ad_df() // 207a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42155,6 +42155,7 @@ void m68000_device::movea_l_dpci_ad_df() // 207b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42171,13 +42172,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42194,7 +42195,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -42202,6 +42202,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42218,12 +42221,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42240,10 +42244,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29f mrgl1 m_aob = m_au; @@ -42256,6 +42256,9 @@ adsl2: // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42272,11 +42275,8 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_da[rx], m_alue); m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42289,6 +42289,8 @@ void m68000_device::movea_l_imm32_ad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42305,11 +42307,13 @@ void m68000_device::movea_l_imm32_ad_df() // 207c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42326,11 +42330,7 @@ void m68000_device::movea_l_imm32_ad_df() // 207c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 129 rrgl1 m_aob = m_au; @@ -42343,6 +42343,9 @@ void m68000_device::movea_l_imm32_ad_df() // 207c f1ff // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42359,11 +42362,8 @@ void m68000_device::movea_l_imm32_ad_df() // 207c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_at; m_irc = m_edb; m_dbin = m_edb; - // alu r=2 c=1 m=..... i=......f ALU.and_ a=23:m_dt d=-1 - alu_and(high16(m_dt), 0xffff); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42378,6 +42378,9 @@ void m68000_device::move_l_ds_aid_df() // 2080 f1f8 // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42394,13 +42397,14 @@ void m68000_device::move_l_ds_aid_df() // 2080 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_da[ry]); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42417,14 +42421,15 @@ void m68000_device::move_l_ds_aid_df() // 2080 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42441,13 +42446,8 @@ void m68000_device::move_l_ds_aid_df() // 2080 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42462,6 +42462,9 @@ void m68000_device::move_l_as_aid_df() // 2088 f1f8 // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42478,13 +42481,14 @@ void m68000_device::move_l_as_aid_df() // 2088 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_da[ry]); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42501,14 +42505,15 @@ void m68000_device::move_l_as_aid_df() // 2088 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42525,13 +42530,8 @@ void m68000_device::move_l_as_aid_df() // 2088 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -42545,6 +42545,9 @@ void m68000_device::move_l_ais_aid_df() // 2090 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42561,12 +42564,13 @@ void m68000_device::move_l_ais_aid_df() // 2090 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42583,14 +42587,15 @@ void m68000_device::move_l_ais_aid_df() // 2090 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42607,15 +42612,14 @@ void m68000_device::move_l_ais_aid_df() // 2090 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42632,10 +42636,6 @@ void m68000_device::move_l_ais_aid_df() // 2090 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -42674,6 +42674,9 @@ void m68000_device::move_l_aips_aid_df() // 2098 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42690,9 +42693,6 @@ void m68000_device::move_l_aips_aid_df() // 2098 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -42701,6 +42701,8 @@ void m68000_device::move_l_aips_aid_df() // 2098 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42717,12 +42719,15 @@ void m68000_device::move_l_aips_aid_df() // 2098 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42739,15 +42744,14 @@ void m68000_device::move_l_aips_aid_df() // 2098 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42764,10 +42768,6 @@ void m68000_device::move_l_aips_aid_df() // 2098 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -42811,6 +42811,8 @@ void m68000_device::move_l_pais_aid_df() // 20a0 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42827,11 +42829,13 @@ void m68000_device::move_l_pais_aid_df() // 20a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42848,14 +42852,15 @@ void m68000_device::move_l_pais_aid_df() // 20a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42872,15 +42877,14 @@ void m68000_device::move_l_pais_aid_df() // 20a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -42897,10 +42901,6 @@ void m68000_device::move_l_pais_aid_df() // 20a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -42939,6 +42939,7 @@ void m68000_device::move_l_das_aid_df() // 20a8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42956,10 +42957,12 @@ void m68000_device::move_l_das_aid_df() // 20a8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42976,12 +42979,13 @@ void m68000_device::move_l_das_aid_df() // 20a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -42998,14 +43002,15 @@ void m68000_device::move_l_das_aid_df() // 20a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43022,15 +43027,14 @@ void m68000_device::move_l_das_aid_df() // 20a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43047,10 +43051,6 @@ void m68000_device::move_l_das_aid_df() // 20a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43101,6 +43101,7 @@ void m68000_device::move_l_dais_aid_df() // 20b0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43117,13 +43118,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43140,7 +43141,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -43148,6 +43148,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43164,12 +43167,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43186,14 +43190,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43210,15 +43215,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43235,10 +43239,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43276,6 +43276,10 @@ void m68000_device::move_l_adr16_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43292,14 +43296,13 @@ void m68000_device::move_l_adr16_aid_df() // 20b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43316,12 +43319,13 @@ void m68000_device::move_l_adr16_aid_df() // 20b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43338,14 +43342,15 @@ void m68000_device::move_l_adr16_aid_df() // 20b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43362,15 +43367,14 @@ void m68000_device::move_l_adr16_aid_df() // 20b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43387,10 +43391,6 @@ void m68000_device::move_l_adr16_aid_df() // 20b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43428,6 +43428,8 @@ void m68000_device::move_l_adr32_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43444,11 +43446,13 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43465,14 +43469,13 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43489,12 +43492,13 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43511,14 +43515,15 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43535,15 +43540,14 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43560,10 +43564,6 @@ void m68000_device::move_l_adr32_aid_df() // 20b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43601,6 +43601,7 @@ void m68000_device::move_l_dpc_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43618,10 +43619,12 @@ void m68000_device::move_l_dpc_aid_df() // 20ba f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43638,12 +43641,13 @@ void m68000_device::move_l_dpc_aid_df() // 20ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43660,14 +43664,15 @@ void m68000_device::move_l_dpc_aid_df() // 20ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43684,15 +43689,14 @@ void m68000_device::move_l_dpc_aid_df() // 20ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43709,10 +43713,6 @@ void m68000_device::move_l_dpc_aid_df() // 20ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43762,6 +43762,7 @@ void m68000_device::move_l_dpci_aid_df() // 20bb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43778,13 +43779,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43801,7 +43802,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -43809,6 +43809,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43825,12 +43828,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43847,14 +43851,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43871,15 +43876,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43896,10 +43900,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 025 mmrw2 m_aob = m_pc; m_ir = m_irc; @@ -43937,6 +43937,8 @@ void m68000_device::move_l_imm32_aid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43953,11 +43955,13 @@ void m68000_device::move_l_imm32_aid_df() // 20bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -43974,15 +43978,14 @@ void m68000_device::move_l_imm32_aid_df() // 20bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -43999,13 +44002,14 @@ void m68000_device::move_l_imm32_aid_df() // 20bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_dt); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44022,14 +44026,15 @@ void m68000_device::move_l_imm32_aid_df() // 20bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44046,13 +44051,8 @@ void m68000_device::move_l_imm32_aid_df() // 20bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -44067,6 +44067,9 @@ void m68000_device::move_l_ds_aipd_df() // 20c0 f1f8 // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44083,13 +44086,14 @@ void m68000_device::move_l_ds_aipd_df() // 20c0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_da[ry]); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44106,14 +44110,15 @@ void m68000_device::move_l_ds_aipd_df() // 20c0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44130,13 +44135,8 @@ void m68000_device::move_l_ds_aipd_df() // 20c0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -44151,6 +44151,9 @@ void m68000_device::move_l_as_aipd_df() // 20c8 f1f8 // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44167,13 +44170,14 @@ void m68000_device::move_l_as_aipd_df() // 20c8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_da[ry]); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44190,14 +44194,15 @@ void m68000_device::move_l_as_aipd_df() // 20c8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44214,13 +44219,8 @@ void m68000_device::move_l_as_aipd_df() // 20c8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -44234,6 +44234,9 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44250,12 +44253,13 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44272,14 +44276,15 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44296,15 +44301,14 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44321,14 +44325,12 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44345,9 +44347,7 @@ void m68000_device::move_l_ais_aipd_df() // 20d0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -44362,6 +44362,9 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44378,9 +44381,6 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -44389,6 +44389,8 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44405,12 +44407,15 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44427,15 +44432,14 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44452,14 +44456,12 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44476,9 +44478,7 @@ void m68000_device::move_l_aips_aipd_df() // 20d8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -44498,6 +44498,8 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44514,11 +44516,13 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44535,14 +44539,15 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44559,15 +44564,14 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44584,14 +44588,12 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44608,9 +44610,7 @@ void m68000_device::move_l_pais_aipd_df() // 20e0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -44625,6 +44625,7 @@ void m68000_device::move_l_das_aipd_df() // 20e8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44642,10 +44643,12 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44662,12 +44665,13 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44684,14 +44688,15 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44708,15 +44713,14 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44733,14 +44737,12 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44757,9 +44759,7 @@ void m68000_device::move_l_das_aipd_df() // 20e8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -44786,6 +44786,7 @@ void m68000_device::move_l_dais_aipd_df() // 20f0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44802,13 +44803,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44825,7 +44826,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -44833,6 +44833,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44849,12 +44852,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44871,14 +44875,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44895,15 +44900,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -44920,14 +44924,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44944,9 +44946,7 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -44960,6 +44960,10 @@ void m68000_device::move_l_adr16_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -44976,14 +44980,13 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45000,12 +45003,13 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45022,14 +45026,15 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45046,15 +45051,14 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45071,14 +45075,12 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45095,9 +45097,7 @@ void m68000_device::move_l_adr16_aipd_df() // 20f8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -45111,6 +45111,8 @@ void m68000_device::move_l_adr32_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45127,11 +45129,13 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45148,14 +45152,13 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45172,12 +45175,13 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45194,14 +45198,15 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45218,15 +45223,14 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45243,14 +45247,12 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45267,9 +45269,7 @@ void m68000_device::move_l_adr32_aipd_df() // 20f9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -45283,6 +45283,7 @@ void m68000_device::move_l_dpc_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45300,10 +45301,12 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45320,12 +45323,13 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45342,14 +45346,15 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45366,15 +45371,14 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45391,14 +45395,12 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45415,9 +45417,7 @@ void m68000_device::move_l_dpc_aipd_df() // 20fa f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -45443,6 +45443,7 @@ void m68000_device::move_l_dpci_aipd_df() // 20fb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45459,13 +45460,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45482,7 +45483,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -45490,6 +45490,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45506,12 +45509,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45528,14 +45532,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45552,15 +45557,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45577,14 +45581,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45601,9 +45603,7 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; @@ -45617,6 +45617,8 @@ void m68000_device::move_l_imm32_aipd_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45633,11 +45635,13 @@ void m68000_device::move_l_imm32_aipd_df() // 20fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45654,15 +45658,14 @@ void m68000_device::move_l_imm32_aipd_df() // 20fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45679,13 +45682,14 @@ void m68000_device::move_l_imm32_aipd_df() // 20fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = high16(m_dt); - m_pc = m_au; - m_au = m_da[rx] + 2; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45702,14 +45706,15 @@ void m68000_device::move_l_imm32_aipd_df() // 20fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45726,13 +45731,8 @@ void m68000_device::move_l_imm32_aipd_df() // 20fc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; m_irc = m_edb; - m_au = m_pc + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -45747,6 +45747,11 @@ void m68000_device::move_l_ds_paid_df() // 2100 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45763,16 +45768,15 @@ void m68000_device::move_l_ds_paid_df() // 2100 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_da[rx] - 2; m_dbin = m_edb; - // 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45789,15 +45793,13 @@ void m68000_device::move_l_ds_paid_df() // 2100 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45814,8 +45816,6 @@ void m68000_device::move_l_ds_paid_df() // 2100 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -45830,6 +45830,11 @@ void m68000_device::move_l_as_paid_df() // 2108 f1f8 // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45846,16 +45851,15 @@ void m68000_device::move_l_as_paid_df() // 2108 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_da[rx] - 2; m_dbin = m_edb; - // 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45872,15 +45876,13 @@ void m68000_device::move_l_as_paid_df() // 2108 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -45897,8 +45899,6 @@ void m68000_device::move_l_as_paid_df() // 2108 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -45912,6 +45912,9 @@ void m68000_device::move_l_ais_paid_df() // 2110 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45928,12 +45931,13 @@ void m68000_device::move_l_ais_paid_df() // 2110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45950,14 +45954,15 @@ void m68000_device::move_l_ais_paid_df() // 2110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -45974,16 +45979,15 @@ void m68000_device::move_l_ais_paid_df() // 2110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46000,15 +46004,13 @@ void m68000_device::move_l_ais_paid_df() // 2110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46025,8 +46027,6 @@ void m68000_device::move_l_ais_paid_df() // 2110 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46040,6 +46040,9 @@ void m68000_device::move_l_aips_paid_df() // 2118 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46056,9 +46059,6 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -46067,6 +46067,8 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46083,12 +46085,15 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46105,16 +46110,15 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46131,15 +46135,13 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46156,8 +46158,6 @@ void m68000_device::move_l_aips_paid_df() // 2118 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46176,6 +46176,8 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46192,11 +46194,13 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46213,14 +46217,15 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46237,16 +46242,15 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46263,15 +46267,13 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46288,8 +46290,6 @@ void m68000_device::move_l_pais_paid_df() // 2120 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46303,6 +46303,7 @@ void m68000_device::move_l_das_paid_df() // 2128 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46320,10 +46321,12 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46340,12 +46343,13 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46362,14 +46366,15 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46386,16 +46391,15 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46412,15 +46416,13 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46437,8 +46439,6 @@ void m68000_device::move_l_das_paid_df() // 2128 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46464,6 +46464,7 @@ void m68000_device::move_l_dais_paid_df() // 2130 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46480,13 +46481,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46503,7 +46504,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -46511,6 +46511,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46527,12 +46530,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46549,14 +46553,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46573,16 +46578,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46599,15 +46603,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46624,8 +46626,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46638,6 +46638,10 @@ void m68000_device::move_l_adr16_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46654,14 +46658,13 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46678,12 +46681,13 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46700,14 +46704,15 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46724,16 +46729,15 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46750,15 +46754,13 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46775,8 +46777,6 @@ void m68000_device::move_l_adr16_paid_df() // 2138 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46789,6 +46789,8 @@ void m68000_device::move_l_adr32_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46805,11 +46807,13 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46826,14 +46830,13 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46850,12 +46853,13 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46872,14 +46876,15 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46896,16 +46901,15 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46922,15 +46926,13 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -46947,8 +46949,6 @@ void m68000_device::move_l_adr32_paid_df() // 2139 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -46961,6 +46961,7 @@ void m68000_device::move_l_dpc_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46978,10 +46979,12 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -46998,12 +47001,13 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47020,14 +47024,15 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47044,16 +47049,15 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47070,15 +47074,13 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47095,8 +47097,6 @@ void m68000_device::move_l_dpc_paid_df() // 213a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -47121,6 +47121,7 @@ void m68000_device::move_l_dpci_paid_df() // 213b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47137,13 +47138,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47160,7 +47161,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -47168,6 +47168,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47184,12 +47187,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47206,14 +47210,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47230,16 +47235,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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_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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47256,15 +47260,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47281,8 +47283,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -47295,6 +47295,8 @@ void m68000_device::move_l_imm32_paid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47311,11 +47313,13 @@ void m68000_device::move_l_imm32_paid_df() // 213c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47332,15 +47336,16 @@ void m68000_device::move_l_imm32_paid_df() // 213c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47357,16 +47362,15 @@ void m68000_device::move_l_imm32_paid_df() // 213c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_da[rx] - 2; m_dbin = m_edb; - // 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47383,15 +47387,13 @@ void m68000_device::move_l_imm32_paid_df() // 213c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47408,8 +47410,6 @@ void m68000_device::move_l_imm32_paid_df() // 213c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_da[rx] = m_au; - m_au = m_pc + 2; set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -47423,6 +47423,8 @@ void m68000_device::move_l_ds_dad_df() // 2140 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47439,12 +47441,15 @@ void m68000_device::move_l_ds_dad_df() // 2140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[rx]; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47461,15 +47466,14 @@ void m68000_device::move_l_ds_dad_df() // 2140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47486,14 +47490,15 @@ void m68000_device::move_l_ds_dad_df() // 2140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47510,13 +47515,8 @@ void m68000_device::move_l_ds_dad_df() // 2140 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -47530,6 +47530,8 @@ void m68000_device::move_l_as_dad_df() // 2148 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47546,12 +47548,15 @@ void m68000_device::move_l_as_dad_df() // 2148 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[rx]; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47568,15 +47573,14 @@ void m68000_device::move_l_as_dad_df() // 2148 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47593,14 +47597,15 @@ void m68000_device::move_l_as_dad_df() // 2148 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47617,13 +47622,8 @@ void m68000_device::move_l_as_dad_df() // 2148 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -47637,6 +47637,9 @@ void m68000_device::move_l_ais_dad_df() // 2150 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47653,12 +47656,13 @@ void m68000_device::move_l_ais_dad_df() // 2150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47675,13 +47679,14 @@ void m68000_device::move_l_ais_dad_df() // 2150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47698,15 +47703,15 @@ void m68000_device::move_l_ais_dad_df() // 2150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47723,16 +47728,12 @@ void m68000_device::move_l_ais_dad_df() // 2150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47749,7 +47750,6 @@ void m68000_device::move_l_ais_dad_df() // 2150 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -47792,6 +47792,9 @@ void m68000_device::move_l_aips_dad_df() // 2158 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=....... ALU.and_ a=R.dbin:m_dbin d=-1 + alu_and(m_dbin, 0xffff); m_base_ssw = SSW_DATA | SSW_R; m_edb = m_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47808,9 +47811,6 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -47819,6 +47819,8 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47835,11 +47837,14 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47856,15 +47861,15 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47881,16 +47886,12 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -47907,7 +47908,6 @@ void m68000_device::move_l_aips_dad_df() // 2158 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -47955,6 +47955,8 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47971,11 +47973,13 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -47992,13 +47996,14 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48015,15 +48020,15 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48040,16 +48045,12 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48066,7 +48067,6 @@ void m68000_device::move_l_pais_dad_df() // 2160 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -48109,6 +48109,7 @@ void m68000_device::move_l_das_dad_df() // 2168 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48126,10 +48127,12 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48146,12 +48149,13 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48168,13 +48172,14 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48191,15 +48196,15 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48216,16 +48221,12 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48242,7 +48243,6 @@ void m68000_device::move_l_das_dad_df() // 2168 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -48297,6 +48297,7 @@ void m68000_device::move_l_dais_dad_df() // 2170 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48313,13 +48314,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48336,7 +48337,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -48344,6 +48344,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48360,12 +48363,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48382,13 +48386,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48405,15 +48410,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48430,16 +48435,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48456,7 +48457,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -48498,6 +48498,10 @@ void m68000_device::move_l_adr16_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48514,14 +48518,13 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48538,12 +48541,13 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48560,13 +48564,14 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48583,15 +48588,15 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48608,16 +48613,12 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48634,7 +48635,6 @@ void m68000_device::move_l_adr16_dad_df() // 2178 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -48676,6 +48676,8 @@ void m68000_device::move_l_adr32_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48692,11 +48694,13 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48713,14 +48717,13 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48737,12 +48740,13 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48759,13 +48763,14 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48782,15 +48787,15 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48807,16 +48812,12 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48833,7 +48834,6 @@ void m68000_device::move_l_adr32_dad_df() // 2179 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -48875,6 +48875,7 @@ void m68000_device::move_l_dpc_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48892,10 +48893,12 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48912,12 +48915,13 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48934,13 +48938,14 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -48957,15 +48962,15 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -48982,16 +48987,12 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49008,7 +49009,6 @@ void m68000_device::move_l_dpc_dad_df() // 217a f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -49062,6 +49062,7 @@ void m68000_device::move_l_dpci_dad_df() // 217b f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49078,13 +49079,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49101,7 +49102,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -49109,6 +49109,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49125,12 +49128,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49147,13 +49151,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49170,15 +49175,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49195,16 +49200,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49221,7 +49222,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -49263,6 +49263,8 @@ void m68000_device::move_l_imm32_dad_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49279,11 +49281,13 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49300,14 +49304,12 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49324,12 +49326,15 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[rx]; // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49346,15 +49351,14 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49371,14 +49375,15 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49395,13 +49400,8 @@ void m68000_device::move_l_imm32_dad_df() // 217c f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // alu r=2 c=1 m=.nz.. i=......f ALU.and_ a=alub d=-1 - alu_and(m_alub, 0xffff); - sr_nz_u(); set_ftu_const(); m_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -49428,6 +49428,7 @@ void m68000_device::move_l_ds_daid_df() // 2180 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49444,13 +49445,13 @@ rmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49467,7 +49468,6 @@ rmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -49476,6 +49476,11 @@ 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49492,15 +49497,14 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49517,14 +49521,15 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49541,13 +49546,8 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -49574,6 +49574,7 @@ void m68000_device::move_l_as_daid_df() // 2188 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49590,13 +49591,13 @@ rmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49613,7 +49614,6 @@ rmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -49622,6 +49622,11 @@ 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49638,15 +49643,14 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49663,14 +49667,15 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49687,13 +49692,8 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -49707,6 +49707,9 @@ void m68000_device::move_l_ais_daid_df() // 2190 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49723,12 +49726,13 @@ void m68000_device::move_l_ais_daid_df() // 2190 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49745,10 +49749,6 @@ void m68000_device::move_l_ais_daid_df() // 2190 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -49765,6 +49765,10 @@ void m68000_device::move_l_ais_daid_df() // 2190 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49781,14 +49785,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49805,16 +49809,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49831,16 +49836,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -49857,7 +49858,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -49900,6 +49900,9 @@ void m68000_device::move_l_aips_daid_df() // 2198 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49916,9 +49919,6 @@ void m68000_device::move_l_aips_daid_df() // 2198 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -49927,6 +49927,8 @@ void m68000_device::move_l_aips_daid_df() // 2198 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49943,8 +49945,6 @@ void m68000_device::move_l_aips_daid_df() // 2198 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -49961,6 +49961,10 @@ void m68000_device::move_l_aips_daid_df() // 2198 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -49977,14 +49981,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50001,16 +50005,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50027,16 +50032,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50053,7 +50054,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -50101,6 +50101,8 @@ void m68000_device::move_l_pais_daid_df() // 21a0 f1f8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50117,11 +50119,13 @@ void m68000_device::move_l_pais_daid_df() // 21a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50138,10 +50142,6 @@ void m68000_device::move_l_pais_daid_df() // 21a0 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -50158,6 +50158,10 @@ void m68000_device::move_l_pais_daid_df() // 21a0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50174,14 +50178,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50198,16 +50202,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50224,16 +50229,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50250,7 +50251,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -50293,6 +50293,7 @@ void m68000_device::move_l_das_daid_df() // 21a8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50310,10 +50311,12 @@ void m68000_device::move_l_das_daid_df() // 21a8 f1f8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50330,12 +50333,13 @@ void m68000_device::move_l_das_daid_df() // 21a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50352,10 +50356,6 @@ void m68000_device::move_l_das_daid_df() // 21a8 f1f8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -50372,6 +50372,10 @@ void m68000_device::move_l_das_daid_df() // 21a8 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50388,14 +50392,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50412,16 +50416,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50438,16 +50443,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50464,7 +50465,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -50519,6 +50519,7 @@ void m68000_device::move_l_dais_daid_df() // 21b0 f1f8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50535,13 +50536,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50558,7 +50559,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -50566,6 +50566,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50582,12 +50585,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50604,10 +50608,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -50624,6 +50624,10 @@ adsl2: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50640,14 +50644,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50664,16 +50668,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50690,16 +50695,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50716,7 +50717,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -50758,6 +50758,10 @@ void m68000_device::move_l_adr16_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50774,14 +50778,13 @@ void m68000_device::move_l_adr16_daid_df() // 21b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50798,12 +50801,13 @@ void m68000_device::move_l_adr16_daid_df() // 21b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50820,10 +50824,6 @@ void m68000_device::move_l_adr16_daid_df() // 21b8 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -50840,6 +50840,10 @@ void m68000_device::move_l_adr16_daid_df() // 21b8 f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50856,14 +50860,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50880,16 +50884,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50906,16 +50911,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -50932,7 +50933,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -50974,6 +50974,8 @@ void m68000_device::move_l_adr32_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -50990,11 +50992,13 @@ void m68000_device::move_l_adr32_daid_df() // 21b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51011,14 +51015,13 @@ void m68000_device::move_l_adr32_daid_df() // 21b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51035,12 +51038,13 @@ void m68000_device::move_l_adr32_daid_df() // 21b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51057,10 +51061,6 @@ void m68000_device::move_l_adr32_daid_df() // 21b9 f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -51077,6 +51077,10 @@ void m68000_device::move_l_adr32_daid_df() // 21b9 f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51093,14 +51097,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51117,16 +51121,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51143,16 +51148,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51169,7 +51170,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -51211,6 +51211,7 @@ void m68000_device::move_l_dpc_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51228,10 +51229,12 @@ void m68000_device::move_l_dpc_daid_df() // 21ba f1ff return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_pc; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51248,12 +51251,13 @@ void m68000_device::move_l_dpc_daid_df() // 21ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51270,10 +51274,6 @@ void m68000_device::move_l_dpc_daid_df() // 21ba f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -51290,6 +51290,10 @@ void m68000_device::move_l_dpc_daid_df() // 21ba f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51306,14 +51310,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51330,16 +51334,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51356,16 +51361,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51382,7 +51383,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -51436,6 +51436,7 @@ void m68000_device::move_l_dpci_daid_df() // 21bb f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51452,13 +51453,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51475,7 +51476,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -51483,6 +51483,9 @@ aixw4: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51499,12 +51502,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51521,10 +51525,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; m_dbin = m_edb; // 29c mmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.aluo:m_aluo d=0 @@ -51541,6 +51541,10 @@ adsl2: 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51557,14 +51561,14 @@ mmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; m_irc = m_edb; - // 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(); 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51581,16 +51585,17 @@ mmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; - // 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(); 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51607,16 +51612,12 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51633,7 +51634,6 @@ mawl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -51675,6 +51675,8 @@ void m68000_device::move_l_imm32_daid_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51691,11 +51693,13 @@ void m68000_device::move_l_imm32_daid_df() // 21bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_dt, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51712,11 +51716,7 @@ void m68000_device::move_l_imm32_daid_df() // 21bc f1ff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16h(m_at, m_dbin); - set_16l(m_dt, m_dbin); m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; // 1ef rmxl0 // alu r=2 c=5 m=..... i=.l..... ALU.ext a=R.dbin:m_dbin d=0 @@ -51733,6 +51733,7 @@ void m68000_device::move_l_imm32_daid_df() // 21bc f1ff 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51749,13 +51750,13 @@ rmxl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51772,7 +51773,6 @@ rmxl3: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -51781,6 +51781,11 @@ 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51797,15 +51802,14 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51822,14 +51826,15 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51846,13 +51851,8 @@ rmdl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - m_au = m_au + 2; m_dbin = m_edb; - // 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_inst_state = m_next_state ? m_next_state : m_decode_table[m_ird]; if(m_sr & SR_T) @@ -51865,6 +51865,12 @@ void m68000_device::move_l_ds_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51881,16 +51887,15 @@ void m68000_device::move_l_ds_adr16_df() // 21c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_da[ry]); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51907,16 +51912,12 @@ void m68000_device::move_l_ds_adr16_df() // 21c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -51933,7 +51934,6 @@ void m68000_device::move_l_ds_adr16_df() // 21c0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -51975,6 +51975,12 @@ void m68000_device::move_l_as_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -51991,16 +51997,15 @@ void m68000_device::move_l_as_adr16_df() // 21c8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - set_16l(m_at, m_da[ry]); m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52017,16 +52022,12 @@ void m68000_device::move_l_as_adr16_df() // 21c8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52043,7 +52044,6 @@ void m68000_device::move_l_as_adr16_df() // 21c8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52085,6 +52085,9 @@ void m68000_device::move_l_ais_adr16_df() // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52101,12 +52104,13 @@ void m68000_device::move_l_ais_adr16_df() // 21d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52123,13 +52127,14 @@ void m68000_device::move_l_ais_adr16_df() // 21d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52146,15 +52151,15 @@ void m68000_device::move_l_ais_adr16_df() // 21d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52171,16 +52176,12 @@ void m68000_device::move_l_ais_adr16_df() // 21d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52197,7 +52198,6 @@ void m68000_device::move_l_ais_adr16_df() // 21d0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52239,6 +52239,9 @@ void m68000_device::move_l_aips_adr16_df() // 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52255,9 +52258,6 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 21a pinl2 m_aob = m_au; @@ -52266,6 +52266,8 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52282,11 +52284,14 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52303,15 +52308,15 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52328,16 +52333,12 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52354,7 +52355,6 @@ void m68000_device::move_l_aips_adr16_df() // 21d8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52401,6 +52401,8 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52417,11 +52419,13 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_da[ry] = m_au; - m_au = m_au + 2; m_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52438,13 +52442,14 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52461,15 +52466,15 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52486,16 +52491,12 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52512,7 +52513,6 @@ void m68000_device::move_l_pais_adr16_df() // 21e0 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52554,6 +52554,7 @@ void m68000_device::move_l_das_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52571,10 +52572,12 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 return; } m_irc = m_edb; - m_au = ext32(m_dbin) + m_da[ry]; 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52591,12 +52594,13 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52613,13 +52617,14 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52636,15 +52641,15 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52661,16 +52666,12 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52687,7 +52688,6 @@ void m68000_device::move_l_das_adr16_df() // 21e8 fff8 m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52741,6 +52741,7 @@ void m68000_device::move_l_dais_adr16_df() // 21f0 fff8 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52757,13 +52758,13 @@ aixw2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = ext32(m_da[map_sp(m_irc >> 12)]) + m_au; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52780,7 +52781,6 @@ aixw4: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_da[map_sp(m_irc >> 12)] + m_au; m_irc = m_edb; m_dbin = m_edb; step_movem(); @@ -52788,6 +52788,9 @@ aixw4: 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52804,12 +52807,13 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 026 adsl3 m_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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52826,13 +52830,14 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 4; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52849,15 +52854,15 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52874,16 +52879,12 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -52900,7 +52901,6 @@ adsl2: m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -52941,6 +52941,10 @@ void m68000_device::move_l_adr16_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52957,14 +52961,13 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - m_at = ext32(m_dbin); m_irc = m_edb; - m_au = ext32(m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -52981,12 +52984,13 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53003,13 +53007,14 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_alub = m_dbin; - m_alue = m_dbin; - m_at = m_au; - m_au = m_pc + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53026,15 +53031,15 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; m_irc = m_edb; - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -53051,16 +53056,12 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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(); // 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_program.write_interruptible(m_aob & ~1, m_dbout); m_icount -= 4; @@ -53077,7 +53078,6 @@ void m68000_device::move_l_adr16_adr16_df() // 21f8 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_au = m_pc + 2; set_ftu_const(); if(m_sr & SR_T) m_next_state = S_TRACE; @@ -53118,6 +53118,8 @@ void m68000_device::move_l_adr32_adr16_df() // 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53134,11 +53136,13 @@ void m68000_device::move_l_adr32_adr16_df() // 21f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - set_16h(m_at, m_dbin); - m_au = m_au + 2; 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_opcodes.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53155,14 +53159,13 @@ void m68000_device::move_l_adr32_adr16_df() // 21f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - m_pc = m_au; - m_dcr = 0; - set_16l(m_at, m_dbin); m_irc = m_edb; - m_au = merge_16_32(high16(m_at), m_dbin); 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53179,12 +53182,13 @@ void m68000_device::move_l_adr32_adr16_df() // 21f9 ffff m_inst_state = S_ADDRESS_ERROR; return; } - 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_dbin = m_edb; // 005 adrl2 m_aob = m_au; + 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_program.read_interruptible(m_aob & ~1); m_icount -= 4; @@ -53201,13 +53205,14 @@ void m68000_device::move_l_adr32_adr16_df() // 21f9 ffff m_inst_state = S_ADDRESS_ERROR; return;