mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-26 11:11:48 +01:00
[Core/MCD] added CDC & GFX register polling detection / synchronization
This commit is contained in:
parent
a43bad325c
commit
f7fc3382fc
@ -214,9 +214,22 @@ void cdc_dma_update(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clear DSR bit & set EDT bit (SCD register $04) */
|
/* clear DSR bit & set EDT bit (CD register $04) */
|
||||||
scd.regs[0x04>>1].byte.h = (scd.regs[0x04>>1].byte.h & 0x07) | 0x80;
|
scd.regs[0x04>>1].byte.h = (scd.regs[0x04>>1].byte.h & 0x07) | 0x80;
|
||||||
|
|
||||||
|
/* SUB-CPU idle on register $04 polling ? */
|
||||||
|
if (s68k.stopped & (1<<0x04))
|
||||||
|
{
|
||||||
|
/* sync SUB-CPU with CDC */
|
||||||
|
s68k.cycles = scd.cycles;
|
||||||
|
|
||||||
|
/* restart SUB-CPU */
|
||||||
|
s68k.stopped = 0;
|
||||||
|
#ifdef LOG_SCD
|
||||||
|
error("s68k started from %d cycles\n", s68k.cycles);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* disable DMA transfer */
|
/* disable DMA transfer */
|
||||||
cdc.dma_w = 0;
|
cdc.dma_w = 0;
|
||||||
}
|
}
|
||||||
|
@ -692,6 +692,19 @@ void gfx_update(int cycles)
|
|||||||
/* end of graphics operation */
|
/* end of graphics operation */
|
||||||
scd.regs[0x58>>1].byte.h = 0;
|
scd.regs[0x58>>1].byte.h = 0;
|
||||||
|
|
||||||
|
/* SUB-CPU idle on register $58 polling ? */
|
||||||
|
if (s68k.stopped & (1<<0x08))
|
||||||
|
{
|
||||||
|
/* sync SUB-CPU with GFX chip */
|
||||||
|
s68k.cycles = scd.cycles;
|
||||||
|
|
||||||
|
/* restart SUB-CPU */
|
||||||
|
s68k.stopped = 0;
|
||||||
|
#ifdef LOG_SCD
|
||||||
|
error("s68k started from %d cycles\n", s68k.cycles);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* level 1 interrupt enabled ? */
|
/* level 1 interrupt enabled ? */
|
||||||
if (scd.regs[0x32>>1].byte.l & 0x02)
|
if (scd.regs[0x32>>1].byte.l & 0x02)
|
||||||
{
|
{
|
||||||
|
@ -287,6 +287,20 @@ static unsigned int scd_read_byte(unsigned int address)
|
|||||||
return scd.regs[0x0e>>1].byte.h;
|
return scd.regs[0x0e>>1].byte.h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* CDC transfer status */
|
||||||
|
if (address == 0xff8004)
|
||||||
|
{
|
||||||
|
s68k_poll_detect(1<<0x04);
|
||||||
|
return scd.regs[0x04>>1].byte.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GFX operation status */
|
||||||
|
if (address == 0xff8058)
|
||||||
|
{
|
||||||
|
s68k_poll_detect(1<<0x08);
|
||||||
|
return scd.regs[0x58>>1].byte.h;
|
||||||
|
}
|
||||||
|
|
||||||
/* CDC register data (controlled by BIOS, byte access only ?) */
|
/* CDC register data (controlled by BIOS, byte access only ?) */
|
||||||
if (address == 0xff8007)
|
if (address == 0xff8007)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user