X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FPicoFrameHints.c;h=c8f8946f5beb36515654a859ac2f07bd4ad02b68;hb=fad248933b6676d30ccf419858b4ee10cc123fc5;hp=755ab3d673a8651d964c79d47e6342f85b25c35a;hpb=71bb1b7bd0186eb056609fec62a134dcaadbffdf;p=picodrive.git diff --git a/Pico/PicoFrameHints.c b/Pico/PicoFrameHints.c index 755ab3d..c8f8946 100644 --- a/Pico/PicoFrameHints.c +++ b/Pico/PicoFrameHints.c @@ -1,5 +1,5 @@ // common code for Pico.c and cd/Pico.c -// (c) Copyright 2007, Grazvydas "notaz" Ignotas +// (c) Copyright 2007,2008 Grazvydas "notaz" Ignotas #define CYCLES_M68K_LINE 488 // suitable for both PAL/NTSC #define CYCLES_M68K_VINT_LAG 68 @@ -60,7 +60,7 @@ static int PicoFrameHints(void) int lines, y, lines_vis = 224, total_z80 = 0, z80CycleAim = 0, line_sample, skip; int hint; // Hint counter - if ((PicoOpt&0x10) && !PicoSkipFrame) { + if ((PicoOpt&0x10) && !PicoSkipFrame && (pv->reg[1]&0x40)) { // fast rend., display enabled // draw a frame just after vblank in alternative render mode // yes, this will cause 1 frame lag, but this is inaccurate mode anyway. PicoFrameFull(); @@ -125,21 +125,37 @@ static int PicoFrameHints(void) } // decide if we draw this line + if (!skip) + { + if (PicoOpt&0x10) { + // find the right moment for fast renderer, when display is no longer blanked + if ((pv->reg[1]&0x40) || y > 100) { + PicoFrameFull(); +#ifdef DRAW_FINISH_FUNC + DRAW_FINISH_FUNC(); +#endif + skip = 1; + } + } + else + { #if CAN_HANDLE_240_LINES - if(!skip && ((!(pv->reg[1]&8) && y<224) || (pv->reg[1]&8)) ) + if (((!(pv->reg[1]&8) && y < 224) || (pv->reg[1]&8)) ) #else - if(!skip && y<224) + if (y < 224) #endif - PicoLine(y); + PicoLine(y); + } + } - if(PicoOpt&1) + if (PicoOpt&1) Psnd_timers_and_dac(y); #ifndef PICO_CD // get samples from sound chips - if(y == 32 && PsndOut) + if (y == 32 && PsndOut) emustatus &= ~1; - else if((y == 224 || y == line_sample) && PsndOut) + else if ((y == 224 || y == line_sample) && PsndOut) getSamples(y); #endif