diff --git a/src/defs_instr.h b/src/defs_instr.h index 79257bc..b8a66e7 100644 --- a/src/defs_instr.h +++ b/src/defs_instr.h @@ -1055,14 +1055,14 @@ defs_instr_start_16 .word 0 # define TSB_INST(in_bank) \ tmp1 = arg | acc; \ CYCLES_PLUS_1; \ - zero = arg & acc; \ - SET_MEMORY8(addr_latch, tmp1); + SET_MEMORY8(addr_latch, tmp1); \ + zero = arg & acc; # else # define TSB_INST(in_bank) \ tmp1 = arg | acc; \ CYCLES_PLUS_1; \ - zero = arg & acc; \ - SET_MEMORY16(addr_latch, tmp1, in_bank); + SET_MEMORY16(addr_latch, tmp1, in_bank); \ + zero = arg & acc; # endif #endif @@ -1107,15 +1107,15 @@ defs_instr_start_16 .word 0 psr = (psr & 0x1fe) + ((arg >> 7) & 1); \ tmp1 = (arg << 1) & 0xff; \ CYCLES_PLUS_1; \ - SET_NEG_ZERO8(tmp1); \ - SET_MEMORY8(addr_latch, tmp1); + SET_MEMORY8(addr_latch, tmp1); \ + SET_NEG_ZERO8(tmp1); # else # define ASL_INST(in_bank) \ psr = (psr & 0x1fe) + ((arg >> 15) & 1);\ tmp1 = (arg << 1) & 0xffff; \ CYCLES_PLUS_1; \ - SET_NEG_ZERO16(tmp1); \ - SET_MEMORY16(addr_latch, tmp1, in_bank); + SET_MEMORY16(addr_latch, tmp1, in_bank);\ + SET_NEG_ZERO16(tmp1); # endif #endif @@ -1302,14 +1302,14 @@ defs_instr_start_16 .word 0 arg = arg & 0xff; \ tmp1 = arg & ~acc; \ CYCLES_PLUS_1; \ - zero = arg & acc; \ - SET_MEMORY8(addr_latch, tmp1); + SET_MEMORY8(addr_latch, tmp1); \ + zero = arg & acc; # else # define TRB_INST(in_bank) \ tmp1 = arg & ~acc; \ CYCLES_PLUS_1; \ - zero = arg & acc; \ - SET_MEMORY16(addr_latch, tmp1, in_bank); + SET_MEMORY16(addr_latch, tmp1, in_bank);\ + zero = arg & acc; # endif #endif diff --git a/src/engine_c.c b/src/engine_c.c index c69177d..4365f8f 100644 --- a/src/engine_c.c +++ b/src/engine_c.c @@ -230,6 +230,9 @@ extern word32 slow_mem_changed[]; g_ret2 = saved_pc; \ kpc = saved_pc; goto abort; \ + kpc = saved_pc; \ + psr = saved_psr; \ + goto finish; \ } #else #define MMU_CHECK(addr, val, bytes, in_page, in_bank) @@ -936,6 +939,7 @@ word32 get_remaining_operands(word32 addr, word32 opcode, word32 psr, Fplus *fpl #define FETCH_OPCODE \ addr = saved_pc = kpc; \ + saved_psr = psr; \ CYCLES_PLUS_2; \ stat = GET_PAGE_INFO_RD(((addr) >> 8) & 0xffff); \ wstat = PTR2WORD(stat) & 0xff; \ @@ -1008,6 +1012,7 @@ int enter_engine(Engine_reg *engine_ptr) { word32 tmp1, tmp2; word32 saved_pc = 0; + word32 saved_psr = 0; word32 abort_support = g_num_breakpoints ? 1 : 0; word32 kpc_support = g_num_kpc_breakpoints ? 1 : 0;