summaryrefslogtreecommitdiff
path: root/m68k_core.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-09-06 23:10:11 -0700
committerMichael Pavone <pavone@retrodev.com>2017-09-06 23:10:11 -0700
commitce22ec9e4135e9465f7c67cbecf71681d686a844 (patch)
tree6775bcfef68b6ca5f45f93ee7e3a5fc4ab7747ce /m68k_core.c
parentefa3b83e4e7eb76b4a13f94e79371a704c85252f (diff)
Properly clear trace mode on interrupt or other exception. Fix NBCD with memory destination
Diffstat (limited to 'm68k_core.c')
-rw-r--r--m68k_core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/m68k_core.c b/m68k_core.c
index 7a54966..6218e75 100644
--- a/m68k_core.c
+++ b/m68k_core.c
@@ -94,7 +94,9 @@ void m68k_write_size(m68k_options *opts, uint8_t size, uint8_t lowfirst)
void m68k_save_result(m68kinst * inst, m68k_options * opts)
{
if (inst->dst.addr_mode != MODE_REG && inst->dst.addr_mode != MODE_AREG && inst->dst.addr_mode != MODE_UNUSED) {
- if (inst->dst.addr_mode == MODE_AREG_PREDEC && inst->src.addr_mode == MODE_AREG_PREDEC && inst->op != M68K_MOVE) {
+ if (inst->dst.addr_mode == MODE_AREG_PREDEC &&
+ ((inst->src.addr_mode == MODE_AREG_PREDEC && inst->op != M68K_MOVE) || (inst->op == M68K_NBCD))
+ ) {
areg_to_native(opts, inst->dst.params.regs.pri, opts->gen.scratch2);
}
m68k_write_size(opts, inst->extra.size, 1);