From 2d49f1c18d806a956c9ae9d4634a6346fa30b307 Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 26 Sep 2015 18:52:48 -0400 Subject: [PATCH] m68k: fix 020+ PACK/UNPK nibble ordering [Till Harbaum, R. Belmont] --- src/devices/cpu/m68000/m68k_in.c | 24 ++++++++++++------------ src/devices/cpu/m68000/m68kops.c | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/devices/cpu/m68000/m68k_in.c b/src/devices/cpu/m68000/m68k_in.c index 754402fd749..9bdc9558a83 100644 --- a/src/devices/cpu/m68000/m68k_in.c +++ b/src/devices/cpu/m68000/m68k_in.c @@ -8171,7 +8171,7 @@ M68KMAKE_OP(pack, 16, mm, ax7) ea_src = EA_AY_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -8188,7 +8188,7 @@ M68KMAKE_OP(pack, 16, mm, ay7) ea_src = EA_A7_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -8204,7 +8204,7 @@ M68KMAKE_OP(pack, 16, mm, axy7) ea_src = EA_A7_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -8221,7 +8221,7 @@ M68KMAKE_OP(pack, 16, mm, .) ea_src = EA_AY_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -10443,9 +10443,9 @@ M68KMAKE_OP(unpk, 16, mm, ax7) src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_A7_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -10462,9 +10462,9 @@ M68KMAKE_OP(unpk, 16, mm, ay7) src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_AX_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -10480,9 +10480,9 @@ M68KMAKE_OP(unpk, 16, mm, axy7) src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_A7_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -10499,9 +10499,9 @@ M68KMAKE_OP(unpk, 16, mm, .) src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_AX_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); diff --git a/src/devices/cpu/m68000/m68kops.c b/src/devices/cpu/m68000/m68kops.c index 585d26d42c2..245f5fb3b0a 100644 --- a/src/devices/cpu/m68000/m68kops.c +++ b/src/devices/cpu/m68000/m68kops.c @@ -26391,7 +26391,7 @@ void m68000_base_device_ops::m68k_op_pack_16_mm_ax7(m68000_base_device* mc68kcpu ea_src = EA_AY_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -26408,7 +26408,7 @@ void m68000_base_device_ops::m68k_op_pack_16_mm_ay7(m68000_base_device* mc68kcpu ea_src = EA_A7_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -26424,7 +26424,7 @@ void m68000_base_device_ops::m68k_op_pack_16_mm_axy7(m68000_base_device* mc68kcp ea_src = EA_A7_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_A7_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -26441,7 +26441,7 @@ void m68000_base_device_ops::m68k_op_pack_16_mm(m68000_base_device* mc68kcpu) ea_src = EA_AY_PD_8(mc68kcpu); src = ((src << 8) | m68ki_read_8((mc68kcpu), ea_src)) + OPER_I_16(mc68kcpu); - m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8((mc68kcpu), EA_AX_PD_8(mc68kcpu), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0)); return; } m68ki_exception_illegal(mc68kcpu); @@ -32656,9 +32656,9 @@ void m68000_base_device_ops::m68k_op_unpk_16_mm_ax7(m68000_base_device* mc68kcpu src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_A7_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -32675,9 +32675,9 @@ void m68000_base_device_ops::m68k_op_unpk_16_mm_ay7(m68000_base_device* mc68kcpu src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_AX_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -32693,9 +32693,9 @@ void m68000_base_device_ops::m68k_op_unpk_16_mm_axy7(m68000_base_device* mc68kcp src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_A7_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_A7_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu); @@ -32712,9 +32712,9 @@ void m68000_base_device_ops::m68k_op_unpk_16_mm(m68000_base_device* mc68kcpu) src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(mc68kcpu); ea_dst = EA_AX_PD_8(mc68kcpu); - m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(mc68kcpu); m68ki_write_8((mc68kcpu), ea_dst, src & 0xff); + ea_dst = EA_AX_PD_8(mc68kcpu); + m68ki_write_8((mc68kcpu), ea_dst, (src >> 8) & 0xff); return; } m68ki_exception_illegal(mc68kcpu);