implement leading gap and 0x200-gap delays for ROM transfers

This commit is contained in:
StapleButter 2017-04-25 02:26:37 +02:00
parent 9eb68c2ede
commit 9b5f293a9e
1 changed files with 8 additions and 3 deletions

View File

@ -969,10 +969,12 @@ void WriteROMCnt(u32 val)
// and it would take 4 cycles to receive a word of data // and it would take 4 cycles to receive a word of data
u32 xfercycle = (ROMCnt & (1<<27)) ? 8 : 5; u32 xfercycle = (ROMCnt & (1<<27)) ? 8 : 5;
u32 cmddelay = 8 + (ROMCnt & 0x1FFF);
if (datasize == 0) if (datasize == 0)
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*8, ROMEndTransfer, 0); NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*cmddelay, ROMEndTransfer, 0);
else else
NDS::ScheduleEvent(NDS::Event_ROMTransfer, true, xfercycle*(8+4), ROMPrepareData, 0); NDS::ScheduleEvent(NDS::Event_ROMTransfer, true, xfercycle*(cmddelay+4), ROMPrepareData, 0);
} }
u32 ReadROMData() u32 ReadROMData()
@ -984,7 +986,10 @@ u32 ReadROMData()
if (DataOutPos < DataOutLen) if (DataOutPos < DataOutLen)
{ {
u32 xfercycle = (ROMCnt & (1<<27)) ? 8 : 5; u32 xfercycle = (ROMCnt & (1<<27)) ? 8 : 5;
NDS::ScheduleEvent(NDS::Event_ROMTransfer, true, xfercycle*4, ROMPrepareData, 0); u32 delay = 4;
if (!(DataOutPos & 0x1FF)) delay += ((ROMCnt >> 16) & 0x3F);
NDS::ScheduleEvent(NDS::Event_ROMTransfer, true, xfercycle*delay, ROMPrepareData, 0);
} }
else else
ROMEndTransfer(0); ROMEndTransfer(0);