mcd, add poll detection for gfx busy

This commit is contained in:
kub 2024-04-27 09:53:33 +02:00
parent e61dbac103
commit 4985bad0fb
2 changed files with 7 additions and 3 deletions

View file

@ -409,6 +409,8 @@ void gfx_start(uint32 base)
/* start graphics operation */ /* start graphics operation */
Pico_mcd->s68k_regs[0x58] = 0x80; Pico_mcd->s68k_regs[0x58] = 0x80;
Pico_mcd->m.state_flags &= ~PCD_ST_S68K_POLL;
Pico_mcd->m.s68k_poll_cnt = 0;
gfx_schedule(); gfx_schedule();
} }
@ -451,6 +453,8 @@ void gfx_update(unsigned int cycles)
Pico_mcd->s68k_regs[0x64] = Pico_mcd->s68k_regs[0x64] =
Pico_mcd->s68k_regs[0x65] = 0; Pico_mcd->s68k_regs[0x65] = 0;
Pico_mcd->m.state_flags &= ~PCD_ST_S68K_POLL;
Pico_mcd->m.s68k_poll_cnt = 0;
if (Pico_mcd->s68k_regs[0x33] & PCDS_IEN1) { if (Pico_mcd->s68k_regs[0x33] & PCDS_IEN1) {
elprintf(EL_INTS|EL_CD, "s68k: gfx_cd irq 1"); elprintf(EL_INTS|EL_CD, "s68k: gfx_cd irq 1");
pcd_irq_s68k(1, 1); pcd_irq_s68k(1, 1);

View file

@ -366,8 +366,8 @@ u32 s68k_reg_read16(u32 a)
d = (Pico_mcd->s68k_regs[a]<<8) | Pico_mcd->s68k_regs[a+1]; d = (Pico_mcd->s68k_regs[a]<<8) | Pico_mcd->s68k_regs[a+1];
if (a >= 0x0e && a < 0x30) if ((a >= 0x0e && a < 0x30) || a == 0x58)
return s68k_poll_detect(a, d); d = s68k_poll_detect(a, d);
end: end:
return d; return d;
@ -995,7 +995,7 @@ static u32 PicoReadS68k8_pr(u32 a)
a &= 0x1ff; a &= 0x1ff;
if (a >= 0x0e && a < 0x30) { if (a >= 0x0e && a < 0x30) {
d = Pico_mcd->s68k_regs[a]; d = Pico_mcd->s68k_regs[a];
s68k_poll_detect(a & ~1, d); d = s68k_poll_detect(a & ~1, d);
goto regs_done; goto regs_done;
} }
d = s68k_reg_read16(a & ~1); d = s68k_reg_read16(a & ~1);