X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fpico_cmn.c;h=b39cfdb2a7ac252c61623a1189a011728a8eb9ef;hb=4f2cdbf551ad1a7f487b65b4754cbf7983e80b8a;hp=5ce13aaeaadd7339e96d38fc85d5314d746cf52e;hpb=53f948c9014404685aaacce497755794c25bc5b6;p=picodrive.git diff --git a/pico/pico_cmn.c b/pico/pico_cmn.c index 5ce13aa..b39cfdb 100644 --- a/pico/pico_cmn.c +++ b/pico/pico_cmn.c @@ -39,7 +39,7 @@ static void SekSyncM68k(void) #elif defined(EMU_M68K) SekCycleCnt += m68k_execute(cyc_do) - cyc_do; #elif defined(EMU_F68K) - SekCycleCnt += fm68k_emulate(cyc_do, 0, 0) - cyc_do; + SekCycleCnt += fm68k_emulate(cyc_do, 0) - cyc_do; #endif } @@ -85,8 +85,7 @@ static int PicoFrameHints(void) } z80_resetCycles(); - PsndDacLine = 0; - emustatus &= ~1; + PsndStartFrame(); pv->status&=~0x88; // clear V-Int, come out of vblank @@ -145,10 +144,9 @@ static int PicoFrameHints(void) if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) PicoSyncZ80(cycles); - if (ym2612.dacen && PsndDacLine <= y) - PsndDoDAC(y); #ifdef PICO_CD - pcd_sync_s68k(cycles, 0); + if (PicoAHW & PAHW_MCD) + pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X p32x_sync_sh2s(cycles); @@ -167,7 +165,7 @@ static int PicoFrameHints(void) if (!skip) { - if (DrawScanline < y) + if (Pico.est.DrawScanline < y) PicoDrawSync(y - 1, 0); #ifdef DRAW_FINISH_FUNC DRAW_FINISH_FUNC(); @@ -203,6 +201,7 @@ static int PicoFrameHints(void) // also delay between F bit (bit 7) is set in SR and IRQ happens (Ex-Mutants) // also delay between last H-int and V-int (Golden Axe 3) line_base_cycles = SekCyclesDone(); + if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA()); CPUS_RUN(CYCLES_M68K_VINT_LAG); if (pv->reg[1]&0x20) { @@ -218,7 +217,8 @@ static int PicoFrameHints(void) } #ifdef PICO_CD - pcd_sync_s68k(cycles, 0); + if (PicoAHW & PAHW_MCD) + pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X p32x_sync_sh2s(cycles); @@ -227,14 +227,9 @@ static int PicoFrameHints(void) // get samples from sound chips if (y == 224 && PsndOut) - { - if (ym2612.dacen && PsndDacLine <= y) - PsndDoDAC(y); PsndGetSamples(y); - } // Run scanline: - if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA()); CPUS_RUN(CYCLES_M68K_LINE - CYCLES_M68K_VINT_LAG - CYCLES_M68K_ASD); if (PicoLineHook) PicoLineHook(); @@ -267,11 +262,12 @@ static int PicoFrameHints(void) cycles = SekCyclesDone(); if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) PicoSyncZ80(cycles); - if (PsndOut && ym2612.dacen && PsndDacLine <= lines-1) - PsndDoDAC(lines-1); + if (PsndOut && ym2612.dacen && PsndDacLine < lines) + PsndDoDAC(lines - 1); #ifdef PICO_CD - pcd_sync_s68k(cycles, 0); + if (PicoAHW & PAHW_MCD) + pcd_sync_s68k(cycles, 0); #endif #ifdef PICO_32X p32x_sync_sh2s(cycles);