summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Sven Schnelle <svens@stackframe.org>2018-06-18 17:13:59 +0200
committer Sven Schnelle <svens@stackframe.org>2018-06-18 17:13:59 +0200
commit97070511beec74f0de62e083e885d053fd43361a (patch)
treee8bd23b4735dbac7f31de7a0dc129ab8d34b32ce
parent1d5f7c49c345abe0ab89959e02d788a6404c8209 (diff)
68k: fix pack instructions
The following test code from the 'HP9000/300 series mainframe tests' fails: lea bytes, a0 pack -(a0),-(a1), #$FEDC move.b (a1),d0 cmbi.b #$E,d0 loop: bne.s loop bytes: 0x41 0x42 It looks like most of the pack instructions have the byte order wrong, but the pack dx,dy variant seems to have been fixed already. Signed-off-by: Sven Schnelle <svens@stackframe.org>
-rw-r--r--src/devices/cpu/m68000/m68k_in.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/devices/cpu/m68000/m68k_in.cpp b/src/devices/cpu/m68000/m68k_in.cpp
index 7fa4ee4e2ea..27b3fcd0b0e 100644
--- a/src/devices/cpu/m68000/m68k_in.cpp
+++ b/src/devices/cpu/m68000/m68k_in.cpp
@@ -8185,9 +8185,9 @@ M68KMAKE_OP(pack, 16, mm, ay7)
uint32_t ea_src = EA_A7_PD_8();
uint32_t src = m68ki_read_8(ea_src);
ea_src = EA_A7_PD_8();
- src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
+ src = (src | (m68ki_read_8(ea_src) << 8)) + OPER_I_16();
- m68ki_write_8(EA_AX_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
+ m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x00f));
return;
}
m68ki_exception_illegal();
@@ -8201,9 +8201,9 @@ M68KMAKE_OP(pack, 16, mm, axy7)
uint32_t ea_src = EA_A7_PD_8();
uint32_t src = m68ki_read_8(ea_src);
ea_src = EA_A7_PD_8();
- src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
+ src = (src | (m68ki_read_8(ea_src) << 8)) + OPER_I_16();
- m68ki_write_8(EA_A7_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
+ m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
return;
}
m68ki_exception_illegal();
@@ -8218,9 +8218,9 @@ M68KMAKE_OP(pack, 16, mm, .)
uint32_t ea_src = EA_AY_PD_8();
uint32_t src = m68ki_read_8(ea_src);
ea_src = EA_AY_PD_8();
- src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
+ src = (src | (m68ki_read_8(ea_src) << 8)) + OPER_I_16();
- m68ki_write_8(EA_AX_PD_8(), ((src >> 8) & 0x000f) | ((src<<4) & 0x00f0));
+ m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
return;
}
m68ki_exception_illegal();