X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2F_cyclone_debug.c;h=a15f85be045cb7f14b08f3a391fb80b6395186ea;hb=9112b6ce9fd42ee46adb7e8148e587a7f60e35f4;hp=25e94d63d118e5c33fcf115ee2c63760b0c29eea;hpb=aa15fda82ceeac7082ef0354ab3f9f05d954ae38;p=picodrive.git diff --git a/Pico/_cyclone_debug.c b/Pico/_cyclone_debug.c index 25e94d6..a15f85b 100644 --- a/Pico/_cyclone_debug.c +++ b/Pico/_cyclone_debug.c @@ -7,7 +7,7 @@ typedef unsigned char u8; static unsigned int pppc, ops=0; extern unsigned int lastread_a, lastread_d[16], lastwrite_cyc_d[16], lastwrite_mus_d[16]; extern int lrp_cyc, lrp_mus, lwp_cyc, lwp_mus; -unsigned int old_regs[16], old_sr, ppop, have_illegal = 0; +unsigned int old_regs[16], old_sr, ppop, have_illegal = 0, dbg_irq_level = 0; #undef dprintf #define dprintf(f,...) printf("%05i:%03i: " f "\n",Pico.m.frame_count,Pico.m.scanline,##__VA_ARGS__) @@ -53,23 +53,27 @@ int CM_compareRun(int cyc) //m68ki_cpu.s_flag = SFLAG_SET; //PicoCpu.srh|=0x20; } - if (PicoCpu.a[7] < 0x00ff0000 || PicoCpu.a[7] >= 0x01000000) - { - PicoCpu.a[7] = m68ki_cpu.dar[15] = 0xff8000; - } pppc = SekPc; ppop = m68k_read_disassembler_16(pppc); memcpy(old_regs, PicoCpu.d, 4*16); old_sr = CycloneGetSr(&PicoCpu); - //if (Pico.m.frame_count > 1400) - // dprintf("---"); +#if 0 { char buff[128]; dprintf("---"); m68k_disassemble(buff, pppc, M68K_CPU_TYPE_68000); dprintf("PC: %06x: %04x: %s", pppc, ppop, buff); + //dprintf("A7: %08x", PicoCpu.a[7]); + } +#endif + + if (dbg_irq_level) + { + PicoCpu.irq=dbg_irq_level; + m68k_set_irq(dbg_irq_level); + dbg_irq_level=0; } PicoCpu.cycles=1; @@ -102,8 +106,8 @@ int CM_compareRun(int cyc) // compare PC m68ki_cpu.pc&=~1; - if( SekPc != (m68ki_cpu.pc&0xffffff) ) { - dprintf("PC: %06x vs %06x", SekPc, m68ki_cpu.pc&0xffffff); + if( SekPc != (m68ki_cpu.pc/*&0xffffff*/) ) { + dprintf("PC: %06x vs %06x", SekPc, m68ki_cpu.pc/*&0xffffff*/); err=1; } @@ -137,18 +141,30 @@ int CM_compareRun(int cyc) // OSP/USP if(PicoCpu.osp != m68ki_cpu.sp[((mu_sr>>11)&4)^4]) { - dprintf("OSP: %06x vs %06x", PicoCpu.osp, m68ki_cpu.sp[0]); + dprintf("OSP: %06x vs %06x", PicoCpu.osp, m68ki_cpu.sp[((mu_sr>>11)&4)^4]); err=1; } // stopped - if((PicoCpu.stopped && !m68ki_cpu.stopped) || (!PicoCpu.stopped && m68ki_cpu.stopped)) { - dprintf("stopped: %i vs %i", PicoCpu.stopped, m68ki_cpu.stopped); + if(((PicoCpu.state_flags&1) && !m68ki_cpu.stopped) || (!(PicoCpu.state_flags&1) && m68ki_cpu.stopped)) { + dprintf("stopped: %i vs %i", PicoCpu.state_flags&1, m68ki_cpu.stopped); + err=1; + } + + // tracing + if(((PicoCpu.state_flags&2) && !m68ki_tracing) || (!(PicoCpu.state_flags&2) && m68ki_tracing)) { + dprintf("tracing: %i vs %i", PicoCpu.state_flags&2, m68ki_tracing); err=1; } if(err) dumpPCandExit(); +#if 0 + if (PicoCpu.a[7] < 0x00ff0000 || PicoCpu.a[7] >= 0x01000000) + { + PicoCpu.a[7] = m68ki_cpu.dar[15] = 0xff8000; + } +#endif #if 0 m68k_set_reg(M68K_REG_SR, ((mu_sr-1)&~0x2000)|(mu_sr&0x2000)); // broken CycloneSetSr(&PicoCpu, ((mu_sr-1)&~0x2000)|(mu_sr&0x2000));