X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fsek.c;h=4525c7c9bb8bd103241e3a1fb623fba398bc36f8;hb=a39743e3153322ec0e18bb0d05cd16af1d9a6d79;hp=5a7b7076c99e153bd719cd8fd48166c0bc542932;hpb=0219d379de3e8168a94dc4a5f220af04039868fd;p=picodrive.git diff --git a/pico/sek.c b/pico/sek.c index 5a7b707..4525c7c 100644 --- a/pico/sek.c +++ b/pico/sek.c @@ -11,9 +11,8 @@ #include "memory.h" -int SekCycleCnt=0; // cycles done in this frame -int SekCycleAim=0; // cycle aim -unsigned int SekCycleCntT=0; +unsigned int SekCycleCnt; +unsigned int SekCycleAim; /* context */ @@ -91,8 +90,14 @@ static int SekTasCallback(void) #ifdef EMU_F68K static void SekIntAckF68K(unsigned level) { - if (level == 4) { Pico.video.pending_ints = 0; elprintf(EL_INTS, "hack: @ %06x [%i]", SekPc, SekCycleCnt); } - else if(level == 6) { Pico.video.pending_ints &= ~0x20; elprintf(EL_INTS, "vack: @ %06x [%i]", SekPc, SekCycleCnt); } + if (level == 4) { + Pico.video.pending_ints = 0; + elprintf(EL_INTS, "hack: @ %06x [%i]", SekPc, SekCyclesDone()); + } + else if(level == 6) { + Pico.video.pending_ints &= ~0x20; + elprintf(EL_INTS, "vack: @ %06x [%i]", SekPc, SekCyclesDone()); + } PicoCpuFM68k.interrupts[0] = 0; } #endif @@ -171,7 +176,7 @@ void SekStepM68k(void) #elif defined(EMU_M68K) SekCycleCnt+=m68k_execute(1); #elif defined(EMU_F68K) - SekCycleCnt+=fm68k_emulate(1, 0, 0); + SekCycleCnt+=fm68k_emulate(1, 0); #endif } @@ -220,7 +225,8 @@ PICO_INTERNAL void SekPackCpu(unsigned char *cpu, int is_sub) #endif *(unsigned int *)(cpu+0x40) = pc; - *(unsigned int *)(cpu+0x50) = SekCycleCntT; + *(unsigned int *)(cpu+0x50) = + is_sub ? SekCycleCntS68k : SekCycleCnt; } PICO_INTERNAL void SekUnpackCpu(const unsigned char *cpu, int is_sub) @@ -257,7 +263,10 @@ PICO_INTERNAL void SekUnpackCpu(const unsigned char *cpu, int is_sub) context->execinfo &= ~FM68K_HALTED; if (cpu[0x4d]&1) context->execinfo |= FM68K_HALTED; #endif - SekCycleCntT = *(unsigned int *)(cpu+0x50); + if (is_sub) + SekCycleCntS68k = *(unsigned int *)(cpu+0x50); + else + SekCycleCnt = *(unsigned int *)(cpu+0x50); } @@ -308,7 +317,7 @@ void SekInitIdleDet(void) CycloneInitIdle(); #endif #ifdef EMU_F68K - fm68k_emulate(0, 0, 1); + fm68k_emulate(0, 1); #endif } @@ -416,7 +425,7 @@ void SekFinishIdleDet(void) CycloneFinishIdle(); #endif #ifdef EMU_F68K - fm68k_emulate(0, 0, 2); + fm68k_emulate(0, 2); #endif while (idledet_count > 0) { @@ -540,6 +549,7 @@ breakloop: printf("D%d: %08x A%d: %08x\n", i, x68k->dar[i], i, x68k->dar[i + 8]); printf("PC: %08x, %08x\n", x68k->pc, x68k->pc_prev); + printf("SR: %04x\n", x68k->sr); PDebugDumpMem(); exit(1);