diff options
author | 2011-09-29 20:02:54 +0000 | |
---|---|---|
committer | 2011-09-29 20:02:54 +0000 | |
commit | c19d93027bb155b7190603ae8e9b21c573305df1 (patch) | |
tree | aadaa65028a0992f344b07e29ab43743194996df /src/emu | |
parent | 040b619770dc20f484dda8933d43c3e0b7fa9cdd (diff) |
m68k: Activate trace emulation and fix it [O. Galibert]
Diffstat (limited to 'src/emu')
-rw-r--r-- | src/emu/cpu/m68000/m68k_in.c | 78 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kcpu.c | 6 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kcpu.h | 30 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kfpu.c | 4 |
4 files changed, 53 insertions, 65 deletions
diff --git a/src/emu/cpu/m68000/m68k_in.c b/src/emu/cpu/m68000/m68k_in.c index 16b6334e8a6..aadb1096a62 100644 --- a/src/emu/cpu/m68000/m68k_in.c +++ b/src/emu/cpu/m68000/m68k_in.c @@ -1824,7 +1824,7 @@ M68KMAKE_OP(andi, 16, tos, .) if((mc68kcpu)->s_flag) { UINT32 src = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) & src); return; } @@ -2263,7 +2263,7 @@ M68KMAKE_OP(bcc, 8, ., .) { if(M68KMAKE_CC) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); return; } @@ -2277,7 +2277,7 @@ M68KMAKE_OP(bcc, 16, ., .) { UINT32 offset = OPER_I_16(mc68kcpu); REG_PC(mc68kcpu) -= 2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_16((mc68kcpu), offset); return; } @@ -2294,7 +2294,7 @@ M68KMAKE_OP(bcc, 32, ., .) { UINT32 offset = OPER_I_32(mc68kcpu); REG_PC(mc68kcpu) -= 4; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_32((mc68kcpu), offset); return; } @@ -2305,7 +2305,7 @@ M68KMAKE_OP(bcc, 32, ., .) { if(M68KMAKE_CC) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); return; } @@ -3141,7 +3141,7 @@ M68KMAKE_OP(bkpt, 0, ., .) M68KMAKE_OP(bra, 8, ., .) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->remaining_cycles > 0) (mc68kcpu)->remaining_cycles = 0; @@ -3152,7 +3152,7 @@ M68KMAKE_OP(bra, 16, ., .) { UINT32 offset = OPER_I_16(mc68kcpu); REG_PC(mc68kcpu) -= 2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_16((mc68kcpu), offset); if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->remaining_cycles > 0) (mc68kcpu)->remaining_cycles = 0; @@ -3165,7 +3165,7 @@ M68KMAKE_OP(bra, 32, ., .) { UINT32 offset = OPER_I_32(mc68kcpu); REG_PC(mc68kcpu) -= 4; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_32((mc68kcpu), offset); if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->remaining_cycles > 0) (mc68kcpu)->remaining_cycles = 0; @@ -3173,7 +3173,7 @@ M68KMAKE_OP(bra, 32, ., .) } else { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->remaining_cycles > 0) (mc68kcpu)->remaining_cycles = 0; @@ -3225,7 +3225,7 @@ M68KMAKE_OP(bset, 8, s, .) M68KMAKE_OP(bsr, 8, ., .) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); } @@ -3234,7 +3234,7 @@ M68KMAKE_OP(bsr, 8, ., .) M68KMAKE_OP(bsr, 16, ., .) { UINT32 offset = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); REG_PC(mc68kcpu) -= 2; m68ki_branch_16((mc68kcpu), offset); @@ -3246,7 +3246,7 @@ M68KMAKE_OP(bsr, 32, ., .) if(CPU_TYPE_IS_EC020_PLUS((mc68kcpu)->cpu_type)) { UINT32 offset = OPER_I_32(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); REG_PC(mc68kcpu) -= 4; m68ki_branch_32((mc68kcpu), offset); @@ -3254,7 +3254,7 @@ M68KMAKE_OP(bsr, 32, ., .) } else { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); m68ki_branch_8((mc68kcpu), MASK_OUT_ABOVE_8((mc68kcpu)->ir)); } @@ -3294,7 +3294,7 @@ M68KMAKE_OP(callm, 32, ., .) { UINT32 ea = M68KMAKE_GET_EA_AY_32; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ REG_PC(mc68kcpu) += 2; (void)ea; /* just to avoid an 'unused variable' warning */ logerror("%s at %08x: called unimplemented instruction %04x (callm)\n", @@ -3315,7 +3315,7 @@ M68KMAKE_OP(cas, 8, ., .) UINT32* compare = ®_D(mc68kcpu)[word2 & 7]; UINT32 res = dest - MASK_OUT_ABOVE_8(*compare); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->n_flag = NFLAG_8(res); (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_8(res); (mc68kcpu)->v_flag = VFLAG_SUB_8(*compare, dest, res); @@ -3344,7 +3344,7 @@ M68KMAKE_OP(cas, 16, ., .) UINT32* compare = ®_D(mc68kcpu)[word2 & 7]; UINT32 res = dest - MASK_OUT_ABOVE_16(*compare); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->n_flag = NFLAG_16(res); (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res); (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare, dest, res); @@ -3373,7 +3373,7 @@ M68KMAKE_OP(cas, 32, ., .) UINT32* compare = ®_D(mc68kcpu)[word2 & 7]; UINT32 res = dest - *compare; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->n_flag = NFLAG_32(res); (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res); (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare, dest, res); @@ -3406,7 +3406,7 @@ M68KMAKE_OP(cas2, 16, ., .) UINT32 dest2 = m68ki_read_16((mc68kcpu), ea2); UINT32 res2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->n_flag = NFLAG_16(res1); (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_16(res1); (mc68kcpu)->v_flag = VFLAG_SUB_16(*compare1, dest1, res1); @@ -3451,7 +3451,7 @@ M68KMAKE_OP(cas2, 32, ., .) UINT32 dest2 = m68ki_read_32((mc68kcpu), ea2); UINT32 res2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->n_flag = NFLAG_32(res1); (mc68kcpu)->not_z_flag = MASK_OUT_ABOVE_32(res1); (mc68kcpu)->v_flag = VFLAG_SUB_32(*compare1, dest1, res1); @@ -4446,7 +4446,7 @@ M68KMAKE_OP(dbf, 16, ., .) { UINT32 offset = OPER_I_16(mc68kcpu); REG_PC(mc68kcpu) -= 2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_16((mc68kcpu), offset); (mc68kcpu)->remaining_cycles -= (mc68kcpu)->cyc_dbcc_f_noexp; return; @@ -4468,7 +4468,7 @@ M68KMAKE_OP(dbcc, 16, ., .) { UINT32 offset = OPER_I_16(mc68kcpu); REG_PC(mc68kcpu) -= 2; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_branch_16((mc68kcpu), offset); (mc68kcpu)->remaining_cycles -= (mc68kcpu)->cyc_dbcc_f_noexp; return; @@ -4913,7 +4913,7 @@ M68KMAKE_OP(eori, 16, tos, .) if((mc68kcpu)->s_flag) { UINT32 src = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) ^ src); return; } @@ -5003,7 +5003,7 @@ M68KMAKE_OP(illegal, 0, ., .) M68KMAKE_OP(jmp, 32, ., .) { m68ki_jump((mc68kcpu), M68KMAKE_GET_EA_AY_32); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ if(REG_PC(mc68kcpu) == REG_PPC(mc68kcpu) && (mc68kcpu)->remaining_cycles > 0) (mc68kcpu)->remaining_cycles = 0; } @@ -5012,7 +5012,7 @@ M68KMAKE_OP(jmp, 32, ., .) M68KMAKE_OP(jsr, 32, ., .) { UINT32 ea = M68KMAKE_GET_EA_AY_32; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_push_32((mc68kcpu), REG_PC(mc68kcpu)); m68ki_jump((mc68kcpu), ea); } @@ -6498,7 +6498,7 @@ M68KMAKE_OP(move, 16, tos, .) if((mc68kcpu)->s_flag) { UINT32 new_sr = M68KMAKE_GET_OPER_AY_16; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_set_sr((mc68kcpu), new_sr); return; } @@ -6521,7 +6521,7 @@ M68KMAKE_OP(move, 32, tou, .) { if((mc68kcpu)->s_flag) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ REG_USP(mc68kcpu) = AY(mc68kcpu); return; } @@ -6537,7 +6537,7 @@ M68KMAKE_OP(movec, 32, cr, .) { UINT32 word2 = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ switch (word2 & 0xfff) { case 0x000: /* SFC */ @@ -6667,7 +6667,7 @@ M68KMAKE_OP(movec, 32, rc, .) { UINT32 word2 = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ switch (word2 & 0xfff) { case 0x000: /* SFC */ @@ -7102,7 +7102,7 @@ M68KMAKE_OP(moves, 8, ., .) UINT32 word2 = OPER_I_16(mc68kcpu); UINT32 ea = M68KMAKE_GET_EA_AY_8; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { m68ki_write_8_fc((mc68kcpu), ea, (mc68kcpu)->dfc, MASK_OUT_ABOVE_8(REG_DA(mc68kcpu)[(word2 >> 12) & 15])); @@ -7137,7 +7137,7 @@ M68KMAKE_OP(moves, 16, ., .) UINT32 word2 = OPER_I_16(mc68kcpu); UINT32 ea = M68KMAKE_GET_EA_AY_16; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { m68ki_write_16_fc((mc68kcpu), ea, (mc68kcpu)->dfc, MASK_OUT_ABOVE_16(REG_DA(mc68kcpu)[(word2 >> 12) & 15])); @@ -7172,7 +7172,7 @@ M68KMAKE_OP(moves, 32, ., .) UINT32 word2 = OPER_I_16(mc68kcpu); UINT32 ea = M68KMAKE_GET_EA_AY_32; - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { m68ki_write_32_fc((mc68kcpu), ea, (mc68kcpu)->dfc, REG_DA(mc68kcpu)[(word2 >> 12) & 15]); @@ -7629,7 +7629,7 @@ M68KMAKE_OP(negx, 32, ., .) M68KMAKE_OP(nop, 0, ., .) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ } @@ -7912,7 +7912,7 @@ M68KMAKE_OP(ori, 16, tos, .) if((mc68kcpu)->s_flag) { UINT32 src = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_set_sr((mc68kcpu), m68ki_get_sr(mc68kcpu) | src); return; } @@ -8724,7 +8724,7 @@ M68KMAKE_OP(rtd, 32, ., .) { UINT32 new_pc = m68ki_pull_32(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ REG_A(mc68kcpu)[7] = MASK_OUT_ABOVE_32(REG_A(mc68kcpu)[7] + MAKE_INT_16(OPER_I_16(mc68kcpu))); m68ki_jump((mc68kcpu), new_pc); return; @@ -8743,7 +8743,7 @@ M68KMAKE_OP(rte, 32, ., .) if ((mc68kcpu)->rte_instr_callback != NULL) (*(mc68kcpu)->rte_instr_callback)((mc68kcpu)->device); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ if(CPU_TYPE_IS_000((mc68kcpu)->cpu_type)) { @@ -8876,7 +8876,7 @@ M68KMAKE_OP(rtm, 32, ., .) { if(CPU_TYPE_IS_020_VARIANT((mc68kcpu)->cpu_type)) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ logerror("%s at %08x: called unimplemented instruction %04x (rtm)\n", (mc68kcpu)->device->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir); return; @@ -8887,7 +8887,7 @@ M68KMAKE_OP(rtm, 32, ., .) M68KMAKE_OP(rtr, 32, ., .) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_set_ccr((mc68kcpu), m68ki_pull_16(mc68kcpu)); m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu)); } @@ -8895,7 +8895,7 @@ M68KMAKE_OP(rtr, 32, ., .) M68KMAKE_OP(rts, 32, ., .) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ m68ki_jump((mc68kcpu), m68ki_pull_32(mc68kcpu)); } @@ -9107,7 +9107,7 @@ M68KMAKE_OP(stop, 0, ., .) if((mc68kcpu)->s_flag) { UINT32 new_sr = OPER_I_16(mc68kcpu); - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(mc68kcpu); /* auto-disable (see m68kcpu.h) */ (mc68kcpu)->stopped |= STOP_LEVEL_STOP; m68ki_set_sr((mc68kcpu), new_sr); (mc68kcpu)->remaining_cycles = 0; diff --git a/src/emu/cpu/m68000/m68kcpu.c b/src/emu/cpu/m68000/m68kcpu.c index 1093bcba4e3..2bd885801ca 100644 --- a/src/emu/cpu/m68000/m68kcpu.c +++ b/src/emu/cpu/m68000/m68kcpu.c @@ -725,7 +725,7 @@ static CPU_EXECUTE( m68k ) do { /* Set tracing accodring to T1. (T0 is done inside instruction) */ - m68ki_trace_t1(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t1(m68k); /* auto-disable (see m68kcpu.h) */ /* Call external hook to peek at CPU */ debugger_instruction_hook(device, REG_PC(m68k)); @@ -810,7 +810,7 @@ static CPU_EXECUTE( m68k ) } /* Trace m68k_exception, if necessary */ - m68ki_exception_if_trace(); /* auto-disable (see m68kcpu.h) */ + m68ki_exception_if_trace(m68k); /* auto-disable (see m68kcpu.h) */ } while (m68k->remaining_cycles > 0); /* set previous PC to current PC for the next entry into the loop */ @@ -886,7 +886,7 @@ static CPU_RESET( m68k ) /* Turn off tracing */ m68k->t1_flag = m68k->t0_flag = 0; - m68ki_clear_trace(); + m68ki_clear_trace(m68k); /* Interrupt mask to level 7 */ m68k->int_mask = 0x0700; m68k->int_level = 0; diff --git a/src/emu/cpu/m68000/m68kcpu.h b/src/emu/cpu/m68000/m68kcpu.h index 62634ed0f25..5ea17526079 100644 --- a/src/emu/cpu/m68000/m68kcpu.h +++ b/src/emu/cpu/m68000/m68kcpu.h @@ -255,26 +255,14 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core; #define CPU_TYPE_IS_000(A) ((A) == CPU_TYPE_000 || (A) == CPU_TYPE_008) -/* Configuration switches (see m68kconf.h for explanation) */ -#define M68K_EMULATE_TRACE 0 - -/* Enable or disable trace emulation */ -#if M68K_EMULATE_TRACE - /* Initiates trace checking before each instruction (t1) */ - #define m68ki_trace_t1() m68ki_tracing = m68k->t1_flag - /* adds t0 to trace checking if we encounter change of flow */ - #define m68ki_trace_t0() m68ki_tracing |= m68k->t0_flag - /* Clear all tracing */ - #define m68ki_clear_trace() m68ki_tracing = 0 - /* Cause a trace exception if we are tracing */ - #define m68ki_exception_if_trace() if(m68ki_tracing) m68ki_exception_trace(m68k) -#else - #define m68ki_trace_t1() - #define m68ki_trace_t0() - #define m68ki_clear_trace() - #define m68ki_exception_if_trace() -#endif /* M68K_EMULATE_TRACE */ - +/* Initiates trace checking before each instruction (t1) */ +#define m68ki_trace_t1(m68k) m68k->tracing = m68k->t1_flag +/* adds t0 to trace checking if we encounter change of flow */ +#define m68ki_trace_t0(m68k) m68k->tracing |= m68k->t0_flag +/* Clear all tracing */ +#define m68ki_clear_trace(m68k) m68k->tracing = 0 +/* Cause a trace exception if we are tracing */ +#define m68ki_exception_if_trace(m68k) if(m68k->tracing) m68ki_exception_trace(m68k) /* Address error */ @@ -1448,7 +1436,7 @@ INLINE UINT32 m68ki_init_exception(m68ki_cpu_core *m68k) /* Turn off trace flag, clear pending traces */ m68k->t1_flag = m68k->t0_flag = 0; - m68ki_clear_trace(); + m68ki_clear_trace(m68k); /* Enter supervisor mode */ m68ki_set_s_flag(m68k, SFLAG_SET); diff --git a/src/emu/cpu/m68000/m68kfpu.c b/src/emu/cpu/m68000/m68kfpu.c index 8aca216c46c..adeb77591db 100644 --- a/src/emu/cpu/m68000/m68kfpu.c +++ b/src/emu/cpu/m68000/m68kfpu.c @@ -1683,7 +1683,7 @@ static void fbcc16(m68ki_cpu_core *m68k) // TODO: condition and jump!!! if (TEST_CONDITION(m68k, condition)) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(m68k); /* auto-disable (see m68kcpu.h) */ m68ki_branch_16(m68k, offset-2); } @@ -1700,7 +1700,7 @@ static void fbcc32(m68ki_cpu_core *m68k) // TODO: condition and jump!!! if (TEST_CONDITION(m68k, condition)) { - m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ + m68ki_trace_t0(m68k); /* auto-disable (see m68kcpu.h) */ m68ki_branch_32(m68k, offset-4); } |