X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fpico_cmn.c;h=95b6b10376bec92551b2f45e06686ef6cb04e417;hb=6311a3baf533d4a034e51dfe38e8cb213a1bf442;hp=d2a1d94cf6019eac41f565e8bf0c8e5093b92149;hpb=12f23dac6f91eb707f985ef00a5d48e9e5ef8838;p=picodrive.git diff --git a/pico/pico_cmn.c b/pico/pico_cmn.c index d2a1d94..95b6b10 100644 --- a/pico/pico_cmn.c +++ b/pico/pico_cmn.c @@ -81,7 +81,7 @@ static void do_timing_hacks_as(struct PicoVideo *pv, int vdp_slots) static void do_timing_hacks_vb(void) { - if (Pico.m.dma_xfers) + if (unlikely(Pico.m.dma_xfers)) SekCyclesBurn(CheckDMA()); } @@ -97,7 +97,7 @@ static int PicoFrameHints(void) pevt_log_m68k_o(EVT_FRAME_START); - if ((PicoOpt&POPT_ALT_RENDERER) && !PicoSkipFrame && (pv->reg[1]&0x40)) { // fast rend., display enabled + if ((PicoIn.opt&POPT_ALT_RENDERER) && !PicoIn.skipFrame && (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(); @@ -106,7 +106,7 @@ static int PicoFrameHints(void) #endif skip = 1; } - else skip=PicoSkipFrame; + else skip=PicoIn.skipFrame; Pico.t.m68c_frame_start = Pico.t.m68c_aim; pv->v_counter = Pico.m.scanline = 0; @@ -140,7 +140,7 @@ static int PicoFrameHints(void) } // decide if we draw this line - if (!skip && (PicoOpt & POPT_ALT_RENDERER)) + if (!skip && (PicoIn.opt & POPT_ALT_RENDERER)) { // find the right moment for frame renderer, when display is no longer blanked if ((pv->reg[1]&0x40) || y > 100) { @@ -153,14 +153,14 @@ static int PicoFrameHints(void) } // get samples from sound chips - if ((y == 224 || y == line_sample) && PsndOut) + if ((y == 224 || y == line_sample) && PicoIn.sndOut) { cycles = SekCyclesDone(); - if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) + if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoIn.opt&POPT_EN_Z80)) PicoSyncZ80(cycles); #ifdef PICO_CD - if (PicoAHW & PAHW_MCD) + if (PicoIn.AHW & PAHW_MCD) pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X @@ -195,7 +195,7 @@ static int PicoFrameHints(void) pv->lwrite_cnt = 0; Pico.video.status |= SR_EMPT; - memcpy(PicoPadInt, PicoPad, sizeof(PicoPadInt)); + memcpy(PicoIn.padInt, PicoIn.pad, sizeof(PicoIn.padInt)); PAD_DELAY(); // Last H-Int (normally): @@ -225,14 +225,14 @@ static int PicoFrameHints(void) } cycles = SekCyclesDone(); - if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) { + if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoIn.opt&POPT_EN_Z80)) { PicoSyncZ80(cycles); elprintf(EL_INTS, "zint"); z80_int(); } #ifdef PICO_CD - if (PicoAHW & PAHW_MCD) + if (PicoIn.AHW & PAHW_MCD) pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X @@ -241,7 +241,7 @@ static int PicoFrameHints(void) #endif // get samples from sound chips - if (y == 224 && PsndOut) + if (y == 224 && PicoIn.sndOut) PsndGetSamples(y); // Run scanline: @@ -272,7 +272,7 @@ static int PicoFrameHints(void) PAD_DELAY(); - if ((pv->status & PVS_ACTIVE) && --hint < 0) + if (unlikely(pv->status & PVS_ACTIVE) && --hint < 0) { hint = pv->reg[10]; // Reload H-Int counter do_hint(pv); @@ -287,6 +287,15 @@ static int PicoFrameHints(void) pevt_log_m68k_o(EVT_NEXT_LINE); } + if (unlikely(PicoIn.overclockM68k)) { + unsigned int l = PicoIn.overclockM68k * lines / 100; + while (l-- > 0) { + Pico.t.m68c_cnt -= CYCLES_M68K_LINE; + do_timing_hacks_vb(); + SekSyncM68k(); + } + } + pv->status &= ~(SR_VB | PVS_VB2); pv->status |= ((pv->reg[1] >> 3) ^ SR_VB) & SR_VB; // forced blanking @@ -313,15 +322,15 @@ static int PicoFrameHints(void) // sync cpus cycles = SekCyclesDone(); - if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) + if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoIn.opt&POPT_EN_Z80)) PicoSyncZ80(cycles); - if (PsndOut && ym2612.dacen && PsndDacLine < lines) + if (PicoIn.sndOut && ym2612.dacen && Pico.snd.dac_line < lines) PsndDoDAC(lines - 1); - if (PsndOut && PsndPsgLine < lines) + if (PicoIn.sndOut && Pico.snd.psg_line < lines) PsndDoPSG(lines - 1); #ifdef PICO_CD - if (PicoAHW & PAHW_MCD) + if (PicoIn.AHW & PAHW_MCD) pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X