summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m68000/m68k_in.lst
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m68000/m68k_in.lst')
-rw-r--r--src/devices/cpu/m68000/m68k_in.lst60
1 files changed, 23 insertions, 37 deletions
diff --git a/src/devices/cpu/m68000/m68k_in.lst b/src/devices/cpu/m68000/m68k_in.lst
index 78583dc144d..846172f61ff 100644
--- a/src/devices/cpu/m68000/m68k_in.lst
+++ b/src/devices/cpu/m68000/m68k_in.lst
@@ -2797,9 +2797,6 @@ b1c0 f1c0 cmpa l A+-DXWLdxI 01:6 7:7 234fc:4
u32 dst = DY();
u32 res = dst - src;
- if (!m_cmpild_instr_callback.isnull())
- (m_cmpild_instr_callback)(*m_program, m_ir & 7, src, 0xffffffff);
-
m_n_flag = NFLAG_32(res);
m_not_z_flag = MASK_OUT_ABOVE_32(res);
m_v_flag = VFLAG_SUB_32(src, dst, res);
@@ -2947,7 +2944,7 @@ f278 fff8 ftrapcc l . 23:4
m_pc += 2;
-51c8 fff8 dbf w . 01:12 7:14 2:6 34fc:4
+51c8 fff8 dbf w . 0:12 7:14 1:10 2:6 34fc:4
u32* r_dst = &DY();
u32 res = MASK_OUT_ABOVE_16(*r_dst - 1);
@@ -2964,7 +2961,7 @@ f278 fff8 ftrapcc l . 23:4
}
-50c8 f0f8 dbcc w . 01:12 7:14 234fc:6
+50c8 f0f8 dbcc w . 0:12 7:14 1:10 234fc:6
if(M68KMAKE_NOT_CC) {
u32* r_dst = &DY();
u32 res = MASK_OUT_ABOVE_16(*r_dst - 1);
@@ -4919,6 +4916,7 @@ e3c0 ffc0 lsl w A+-DXWL 01:8 7:14 234fc:5
if (m_cacr & (M68K_CACR_CI | M68K_CACR_CEI)) {
m68ki_ic_clear();
+ m_cacr &= ~(M68K_CACR_CI | M68K_CACR_CEI);
}
break;
break;
@@ -4973,6 +4971,7 @@ e3c0 ffc0 lsl w A+-DXWL 01:8 7:14 234fc:5
if (m_cacr & (M68K_CACR_CI | M68K_CACR_CEI)) {
m68ki_ic_clear();
+ m_cacr &= ~(M68K_CACR_CI | M68K_CACR_CEI);
}
break;
break;
@@ -5026,6 +5025,7 @@ e3c0 ffc0 lsl w A+-DXWL 01:8 7:14 234fc:5
m_cacr = REG_DA()[(word2 >> 12) & 15];
if (m_cacr & (M68K_CACR_CI | M68K_CACR_CEI)) {
m68ki_ic_clear();
+ m_cacr &= ~(M68K_CACR_CI | M68K_CACR_CEI);
}
break;
case 0x800: /* USP */
@@ -5063,6 +5063,7 @@ e3c0 ffc0 lsl w A+-DXWL 01:8 7:14 234fc:5
{
m_pmmu_enabled = 0;
}
+ m_instruction_restart = m_pmmu_enabled || m_emmu_enabled;
break;
case 0x004: /* ITT0 */
m_mmu_itt0 = REG_DA()[(word2 >> 12) & 15];
@@ -5112,6 +5113,7 @@ e3c0 ffc0 lsl w A+-DXWL 01:8 7:14 234fc:5
if (m_cacr & (M68K_CACR_CI | M68K_CACR_CEI)) {
m68ki_ic_clear();
+ m_cacr &= ~(M68K_CACR_CI | M68K_CACR_CEI);
}
break;
case 0x800: /* USP */
@@ -6226,7 +6228,7 @@ f000 fe00 pmmu l . 234fc:8p
f548 ffd8 ptest l . 4:8p
if(m_has_pmmu)
{
- logerror("68040: unhandled PTEST\n");
+ //logerror("68040: unhandled PTEST\n");
}
else
{
@@ -6236,10 +6238,9 @@ f548 ffd8 ptest l . 4:8p
4e70 ffff reset . . 071234fc:0p
if(m_s_flag) {
- if(!m_reset_instr_callback.isnull())
- (m_reset_instr_callback)(1);
- m68k_reset_peripherals();
+ m_reset_cb(1);
m_icount -= m_cyc_reset;
+ m_reset_cb(0);
} else {
m68ki_exception_privilege_violation();
}
@@ -6850,8 +6851,6 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
u32 new_sr;
u32 new_pc;
- if (!m_rte_instr_callback.isnull())
- (m_rte_instr_callback)(1);
m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
new_sr = m68ki_pull_16();
@@ -6872,8 +6871,6 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
u32 new_pc;
u32 format_word;
- if (!m_rte_instr_callback.isnull())
- (m_rte_instr_callback)(1);
m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
format_word = m68ki_read_16(REG_A()[7]+6) >> 12;
@@ -6886,16 +6883,12 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
m_instr_mode = INSTRUCTION_YES;
m_run_mode = RUN_MODE_NORMAL;
} else {
- if (format_word == 0x8) /* type 1000 stack frame */
+ if (format_word == 0x8) /* 68010 - type 1000 stack frame */
{
new_sr = m68ki_pull_16();
new_pc = m68ki_pull_32();
- m68ki_fake_pull_16(); /* format word */
- m68ki_jump(new_pc);
- m68ki_set_sr(new_sr);
- m_instr_mode = INSTRUCTION_YES;
- m_run_mode = RUN_MODE_NORMAL;
- m68ki_fake_pull_16(); /* special status */
+ m68ki_fake_pull_16(); /* format word */
+ m68ki_fake_pull_16(); /* special status word */
m68ki_fake_pull_32(); /* fault address */
m68ki_fake_pull_32(); /* reserved and data output buffer */
m68ki_fake_pull_32(); /* reserved and data input buffer */
@@ -6908,6 +6901,10 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
m68ki_fake_pull_32();
m68ki_fake_pull_32();
m68ki_fake_pull_32();
+ m68ki_jump(new_pc);
+ m68ki_set_sr(new_sr);
+ m_instr_mode = INSTRUCTION_YES;
+ m_run_mode = RUN_MODE_NORMAL;
}
else
{
@@ -6927,8 +6924,6 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
u32 new_pc;
u32 format_word;
- if (!m_rte_instr_callback.isnull())
- (m_rte_instr_callback)(1);
m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
rte_loop:
@@ -7799,15 +7794,7 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
m_v_flag = VFLAG_CLEAR;
m_c_flag = CFLAG_CLEAR;
- /* On the 68000 and 68010, the TAS instruction uses a unique bus cycle that may have
- side effects (e.g. delaying DMA) or may fail to write back at all depending on the
- bus implementation.
- In particular, the Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS
- to fail to write back in order to function properly. */
- if (CPU_TYPE_IS_010_LESS() && !m_tas_write_callback.isnull())
- (m_tas_write_callback)(*m_program, ea, dst | 0x80, 0xff);
- else
- m68ki_write_8(ea, dst | 0x80);
+ m68ki_write_8(ea, dst | 0x80);
4e40 fff0 trap . . 071234fc:4
@@ -7820,10 +7807,12 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
50fa ffff trapt w . 234fc:6
+ m_pc += 2; // increase before else stackframe & return addresses are incorrect
m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
50fb ffff trapt l . 234fc:8
+ m_pc += 4; // increase before else stackframe & return addresses are incorrect
m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
@@ -7844,18 +7833,16 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5
50fa f0ff trapcc w . 234fc:6
+ m_pc += 2; /* increase _before_ calling handler or 1) stackframe is incorrect 2) RTE address is wrong if trap is taken */
if(M68KMAKE_CC) {
m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
- } else {
- m_pc += 2;
}
50fb f0ff trapcc l . 234fc:8
+ m_pc += 4; /* increase _before_ calling handler or 1) stackframe is incorrect 2) RTE address is wrong if trap is taken */
if(M68KMAKE_CC) {
m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
- } else {
- m_pc += 4;
}
@@ -8105,7 +8092,6 @@ f400 ff20 cinv l . 4:16
f420 ff20 cpush l . 4:16
- logerror("%s at %08x: called unimplemented instruction %04x (cpush)\n",
- tag(), m_ppc, m_ir);
+ //logerror("%s at %08x: called unimplemented instruction %04x (cpush)\n", tag(), m_ppc, m_ir);