diff options
Diffstat (limited to 'src/NDSCart.cpp')
-rw-r--r-- | src/NDSCart.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/NDSCart.cpp b/src/NDSCart.cpp index 400f7d6..33d7795 100644 --- a/src/NDSCart.cpp +++ b/src/NDSCart.cpp @@ -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); } } |