mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-06 07:38:05 -04:00
32x: rework scheduling/timing
- don't run in line quantity - decouple from 68k - some things to tune..
This commit is contained in:
parent
ed4402a7df
commit
a8fd6e3761
9 changed files with 325 additions and 130 deletions
|
@ -111,9 +111,6 @@ static int PicoFrameHints(void)
|
|||
#ifdef PICO_CD
|
||||
check_cd_dma();
|
||||
#endif
|
||||
#ifdef PICO_32X
|
||||
p32x_timers_do(1);
|
||||
#endif
|
||||
|
||||
// H-Interrupts:
|
||||
if (--hint < 0) // y <= lines_vis: Comix Zone, Golden Axe
|
||||
|
@ -146,6 +143,9 @@ static int PicoFrameHints(void)
|
|||
PicoSyncZ80(SekCycleCnt);
|
||||
if (ym2612.dacen && PsndDacLine <= y)
|
||||
PsndDoDAC(y);
|
||||
#ifdef PICO_32X
|
||||
p32x_sync_sh2s(SekCycleCntT + SekCycleCnt);
|
||||
#endif
|
||||
PsndGetSamples(y);
|
||||
}
|
||||
|
||||
|
@ -183,9 +183,6 @@ static int PicoFrameHints(void)
|
|||
#ifdef PICO_CD
|
||||
check_cd_dma();
|
||||
#endif
|
||||
#ifdef PICO_32X
|
||||
p32x_timers_do(1);
|
||||
#endif
|
||||
|
||||
// Last H-Int:
|
||||
if (--hint < 0)
|
||||
|
@ -199,10 +196,6 @@ static int PicoFrameHints(void)
|
|||
pv->status|=0x08; // go into vblank
|
||||
pv->pending_ints|=0x20;
|
||||
|
||||
#ifdef PICO_32X
|
||||
p32x_start_blank();
|
||||
#endif
|
||||
|
||||
// the following SekRun is there for several reasons:
|
||||
// there must be a delay after vblank bit is set and irq is asserted (Mazin Saga)
|
||||
// also delay between F bit (bit 7) is set in SR and IRQ happens (Ex-Mutants)
|
||||
|
@ -219,6 +212,11 @@ static int PicoFrameHints(void)
|
|||
z80_int();
|
||||
}
|
||||
|
||||
#ifdef PICO_32X
|
||||
p32x_sync_sh2s(SekCycleCntT + SekCycleCnt);
|
||||
p32x_start_blank();
|
||||
#endif
|
||||
|
||||
// get samples from sound chips
|
||||
if (y == 224 && PsndOut)
|
||||
{
|
||||
|
@ -254,9 +252,6 @@ static int PicoFrameHints(void)
|
|||
#ifdef PICO_CD
|
||||
check_cd_dma();
|
||||
#endif
|
||||
#ifdef PICO_32X
|
||||
p32x_timers_do(1);
|
||||
#endif
|
||||
|
||||
// Run scanline:
|
||||
if (Pico.m.dma_xfers) SekCyclesBurn(CheckDMA());
|
||||
|
@ -275,6 +270,9 @@ static int PicoFrameHints(void)
|
|||
if (PsndOut && ym2612.dacen && PsndDacLine <= lines-1)
|
||||
PsndDoDAC(lines-1);
|
||||
|
||||
#ifdef PICO_32X
|
||||
p32x_sync_sh2s(SekCycleCntT + SekCycleCnt);
|
||||
#endif
|
||||
timers_cycle();
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue