aboutsummaryrefslogtreecommitdiff
path: root/src/NDSCart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/NDSCart.cpp')
-rw-r--r--src/NDSCart.cpp22
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);
}
}