mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-23 06:10:03 -06:00
better, less hacky, more OOP-friendly scheduler design
This commit is contained in:
@ -34,6 +34,12 @@ using Platform::LogLevel;
|
||||
namespace NDSCart
|
||||
{
|
||||
|
||||
enum
|
||||
{
|
||||
ROMTransfer_PrepareData = 0,
|
||||
ROMTransfer_End
|
||||
};
|
||||
|
||||
// SRAM TODO: emulate write delays???
|
||||
|
||||
u16 SPICnt;
|
||||
@ -1468,6 +1474,10 @@ void CartHomebrew::ReadROM_B7(u32 addr, u32 len, u8* data, u32 offset)
|
||||
|
||||
bool Init()
|
||||
{
|
||||
NDS::RegisterEventFunc(NDS::Event_ROMTransfer, ROMTransfer_PrepareData, ROMPrepareData);
|
||||
NDS::RegisterEventFunc(NDS::Event_ROMTransfer, ROMTransfer_End, ROMEndTransfer);
|
||||
NDS::RegisterEventFunc(NDS::Event_ROMSPITransfer, 0, SPITransferDone);
|
||||
|
||||
Cart = nullptr;
|
||||
|
||||
return true;
|
||||
@ -1476,6 +1486,10 @@ bool Init()
|
||||
void DeInit()
|
||||
{
|
||||
Cart = nullptr;
|
||||
|
||||
NDS::UnregisterEventFunc(NDS::Event_ROMTransfer, ROMTransfer_PrepareData);
|
||||
NDS::UnregisterEventFunc(NDS::Event_ROMTransfer, ROMTransfer_End);
|
||||
NDS::UnregisterEventFunc(NDS::Event_ROMSPITransfer, 0);
|
||||
}
|
||||
|
||||
void Reset()
|
||||
@ -1967,9 +1981,9 @@ void WriteROMCnt(u32 val)
|
||||
}
|
||||
|
||||
if (datasize == 0)
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*cmddelay, ROMEndTransfer, 0);
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*cmddelay, ROMTransfer_End, 0);
|
||||
else
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*(cmddelay+4), ROMPrepareData, 0);
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*(cmddelay+4), ROMTransfer_PrepareData, 0);
|
||||
}
|
||||
|
||||
void AdvanceROMTransfer()
|
||||
@ -1986,7 +2000,7 @@ void AdvanceROMTransfer()
|
||||
delay += ((ROMCnt >> 16) & 0x3F);
|
||||
}
|
||||
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*delay, ROMPrepareData, 0);
|
||||
NDS::ScheduleEvent(NDS::Event_ROMTransfer, false, xfercycle*delay, ROMTransfer_PrepareData, 0);
|
||||
}
|
||||
else
|
||||
ROMEndTransfer(0);
|
||||
@ -2088,7 +2102,7 @@ void WriteSPIData(u8 val)
|
||||
|
||||
// SPI transfers one bit per cycle -> 8 cycles per byte
|
||||
u32 delay = 8 * (8 << (SPICnt & 0x3));
|
||||
NDS::ScheduleEvent(NDS::Event_ROMSPITransfer, false, delay, SPITransferDone, 0);
|
||||
NDS::ScheduleEvent(NDS::Event_ROMSPITransfer, false, delay, 0, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user