mirror of
https://github.com/digarok/gsplus.git
synced 2025-02-20 02:28:57 +00:00
re-order instructions so zero/negative flags are set AFTER memory write (which may abort)
This commit is contained in:
parent
8d60a2d437
commit
0e2f35e7fe
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user