X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FPico.c;h=2ebe9c9b9cf60380bee79b76b453c2fe221e9641;hb=65ca3034d455b9934e7ff82813e3df49cf56cf87;hp=a76c9e40cfc611a453d3638c97c10fa71fa62044;hpb=a12b1b29cc7e394128da59614c2efe8f5d182741;p=picodrive.git diff --git a/Pico/Pico.c b/Pico/Pico.c index a76c9e4..2ebe9c9 100644 --- a/Pico/Pico.c +++ b/Pico/Pico.c @@ -244,12 +244,12 @@ static __inline void SekStep(void) static int CheckIdle(void) { - int i, state[0x22]; + int i, state[0x24]; // See if the state is the same after 2 steps: - SekState(state); SekStep(); SekStep(); SekState(state+0x11); - for (i = 0x10; i >= 0; i--) - if (state[i] != state[i+0x11]) return 0; + SekState(state); SekStep(); SekStep(); SekState(state+0x12); + for (i = 0x11; i >= 0; i--) + if (state[i] != state[i+0x12]) return 0; return 1; } @@ -344,6 +344,10 @@ static int PicoFrameSimple(void) lines_step = 14; } + // a hack for VR, to get it running in fast mode + if (PicoRead16Hook == PicoSVPRead16) + Pico.ram[0xd864^1] = 0x1a; + // we don't emulate DMA timing in this mode if (Pico.m.dma_xfers) { Pico.m.dma_xfers=0; @@ -391,10 +395,19 @@ static int PicoFrameSimple(void) if (PicoLineHook) PicoLineHook(sects*lines_step); } + // another hack for VR (it needs hints to work) + if (PicoRead16Hook == PicoSVPRead16) { + Pico.ram[0xd864^1] = 1; + pv->pending_ints|=0x10; + if (pv->reg[0]&0x10) SekInterrupt(4); + SekRunM68k(160); + } + // render screen if (!PicoSkipFrame) { if (!(PicoOpt&0x10)) + { // Draw the screen #if CAN_HANDLE_240_LINES if (pv->reg[1]&8) { @@ -405,6 +418,7 @@ static int PicoFrameSimple(void) #else for (y=0;y<224;y++) PicoLine(y); #endif + } else PicoFrameFull(); #ifdef DRAW_FINISH_FUNC DRAW_FINISH_FUNC();