static unsigned int pppc, ops=0;\r
extern unsigned int lastread_a, lastread_d[16], lastwrite_cyc_d[16], lastwrite_mus_d[16];\r
extern int lrp_cyc, lrp_mus, lwp_cyc, lwp_mus;\r
-unsigned int old_regs[16], old_sr, ppop, have_illegal = 0;\r
+unsigned int old_regs[16], old_sr, ppop, have_illegal = 0, dbg_irq_level = 0;\r
\r
#undef dprintf\r
#define dprintf(f,...) printf("%05i:%03i: " f "\n",Pico.m.frame_count,Pico.m.scanline,##__VA_ARGS__)\r
//m68ki_cpu.s_flag = SFLAG_SET;\r
//PicoCpu.srh|=0x20;\r
}\r
- if (PicoCpu.a[7] < 0x00ff0000 || PicoCpu.a[7] >= 0x01000000)\r
- {\r
- PicoCpu.a[7] = m68ki_cpu.dar[15] = 0xff8000;\r
- }\r
\r
pppc = SekPc;\r
ppop = m68k_read_disassembler_16(pppc);\r
memcpy(old_regs, PicoCpu.d, 4*16);\r
old_sr = CycloneGetSr(&PicoCpu);\r
\r
- //if (Pico.m.frame_count > 1400)\r
- // dprintf("---");\r
+#if 0\r
{\r
char buff[128];\r
dprintf("---");\r
m68k_disassemble(buff, pppc, M68K_CPU_TYPE_68000);\r
dprintf("PC: %06x: %04x: %s", pppc, ppop, buff);\r
+ //dprintf("A7: %08x", PicoCpu.a[7]);\r
+ }\r
+#endif\r
+\r
+ if (dbg_irq_level)\r
+ {\r
+ PicoCpu.irq=dbg_irq_level;\r
+ m68k_set_irq(dbg_irq_level);\r
+ dbg_irq_level=0;\r
}\r
\r
PicoCpu.cycles=1;\r
\r
// compare PC\r
m68ki_cpu.pc&=~1;\r
- if( SekPc != (m68ki_cpu.pc&0xffffff) ) {\r
- dprintf("PC: %06x vs %06x", SekPc, m68ki_cpu.pc&0xffffff);\r
+ if( SekPc != (m68ki_cpu.pc/*&0xffffff*/) ) {\r
+ dprintf("PC: %06x vs %06x", SekPc, m68ki_cpu.pc/*&0xffffff*/);\r
err=1;\r
}\r
\r
\r
// OSP/USP\r
if(PicoCpu.osp != m68ki_cpu.sp[((mu_sr>>11)&4)^4]) {\r
- dprintf("OSP: %06x vs %06x", PicoCpu.osp, m68ki_cpu.sp[0]);\r
+ dprintf("OSP: %06x vs %06x", PicoCpu.osp, m68ki_cpu.sp[((mu_sr>>11)&4)^4]);\r
err=1;\r
}\r
\r
// stopped\r
- if((PicoCpu.stopped && !m68ki_cpu.stopped) || (!PicoCpu.stopped && m68ki_cpu.stopped)) {\r
- dprintf("stopped: %i vs %i", PicoCpu.stopped, m68ki_cpu.stopped);\r
+ if(((PicoCpu.state_flags&1) && !m68ki_cpu.stopped) || (!(PicoCpu.state_flags&1) && m68ki_cpu.stopped)) {\r
+ dprintf("stopped: %i vs %i", PicoCpu.state_flags&1, m68ki_cpu.stopped);\r
+ err=1;\r
+ }\r
+\r
+ // tracing\r
+ if(((PicoCpu.state_flags&2) && !m68ki_tracing) || (!(PicoCpu.state_flags&2) && m68ki_tracing)) {\r
+ dprintf("tracing: %i vs %i", PicoCpu.state_flags&2, m68ki_tracing);\r
err=1;\r
}\r
\r
if(err) dumpPCandExit();\r
\r
+#if 0\r
+ if (PicoCpu.a[7] < 0x00ff0000 || PicoCpu.a[7] >= 0x01000000)\r
+ {\r
+ PicoCpu.a[7] = m68ki_cpu.dar[15] = 0xff8000;\r
+ }\r
+#endif\r
#if 0\r
m68k_set_reg(M68K_REG_SR, ((mu_sr-1)&~0x2000)|(mu_sr&0x2000)); // broken\r
CycloneSetSr(&PicoCpu, ((mu_sr-1)&~0x2000)|(mu_sr&0x2000));\r