mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-04 23:07:46 -04:00
core z80, bus blocking for VDP DMA
This commit is contained in:
parent
274dd51a60
commit
ebde43de9d
3 changed files with 11 additions and 1 deletions
|
@ -565,6 +565,7 @@ void NOINLINE ctl_write_z80reset(u32 d)
|
|||
pprof_end_sub(m68k);
|
||||
}
|
||||
Pico.t.z80_busdelay &= 0xff; // also resets bus request
|
||||
Pico.video.status &= ~PVS_Z80WAIT;
|
||||
YM2612ResetChip();
|
||||
timers_reset();
|
||||
}
|
||||
|
@ -1369,8 +1370,10 @@ void PicoWrite16_32x(u32 a, u32 d) {}
|
|||
static void access_68k_bus(int delay) // bus delay as Q8
|
||||
{
|
||||
// TODO: if the 68K is in DMA wait, Z80 has to wait until DMA ends
|
||||
if (Pico.video.status & (PVS_CPUWR|PVS_CPURD))
|
||||
if (Pico.video.status & (PVS_CPUWR|PVS_CPURD)) {
|
||||
z80_subCLeft(z80_cyclesLeft); // rather rough on both condition and action
|
||||
Pico.video.status |= PVS_Z80WAIT;
|
||||
}
|
||||
|
||||
// 68k bus access delay for z80. The fractional part needs to be accumulated
|
||||
// until an additional cycle is full. That is then added to the integer part.
|
||||
|
|
|
@ -125,6 +125,12 @@ static void do_timing_hacks_start(struct PicoVideo *pv)
|
|||
int cycles = PicoVideoFIFOHint();
|
||||
|
||||
SekCyclesBurn(cycles); // prolong cpu HOLD if necessary
|
||||
if (pv->status & PVS_Z80WAIT) {
|
||||
Pico.t.z80c_cnt += cycles_68k_to_z80(cycles);
|
||||
if (!(pv->status & (PVS_CPUWR|PVS_CPURD)))
|
||||
pv->status &= ~PVS_Z80WAIT;
|
||||
}
|
||||
|
||||
// XXX how to handle Z80 bus cycle stealing during DMA correctly?
|
||||
if ((Pico.t.z80_buscycles -= cycles) < 0)
|
||||
Pico.t.z80_buscycles = 0;
|
||||
|
|
|
@ -299,6 +299,7 @@ extern SH2 sh2s[2];
|
|||
#define PVS_DMAFILL (1 << 20) // DMA fill is waiting for fill data
|
||||
#define PVS_DMABG (1 << 21) // background DMA operation is running
|
||||
#define PVS_FIFORUN (1 << 22) // FIFO is processing
|
||||
#define PVS_Z80WAIT (1 << 23) // Z80 blocked by VDP DMA
|
||||
|
||||
struct PicoVideo
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue