diff --git a/src/NDS.cpp b/src/NDS.cpp index ea9eb76a..42eac35e 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -909,6 +909,8 @@ void NDS::RunSystemSleep(u64 timestamp) #define A7WENTLAST ( MainRAMLastAccess) #define A9LAST false #define A7LAST true +#define A9PRIORITY !(ExMemCnt[0] & 0x8000) +#define A7PRIORITY (ExMemCnt[0] & 0x8000) void NDS::MainRAMHandleARM9() { @@ -933,7 +935,7 @@ void NDS::MainRAMHandleARM9() } else { - if (A9ContentionTS < MainRAMTimestamp) { A9ContentionTS = MainRAMTimestamp; return; } + if (A9ContentionTS < MainRAMTimestamp) { A9ContentionTS = MainRAMTimestamp; if (A7PRIORITY) return; } MainRAMTimestamp = A9ContentionTS + 9; A9ContentionTS += (ARM9ClockShift == 1) ? 9 : 8; @@ -978,11 +980,12 @@ void NDS::MainRAMHandleARM7() } else { - if (ARM7Timestamp < MainRAMTimestamp) { ARM7Timestamp = MainRAMTimestamp; return; } + if (ARM7Timestamp < MainRAMTimestamp) { ARM7Timestamp = MainRAMTimestamp; if (A9PRIORITY) return; } MainRAMTimestamp = ARM7Timestamp + (var & MR16) ? 8 : 9; // checkme: are these correct for 8bit? if (var & MRWrite) ARM7Timestamp += (var & MR16) ? 3 : 4; else ARM7Timestamp += (var & MR16) ? 5 : 6; + MainRAMLastAccess = A7LAST; } if (var & MRCodeFetch) @@ -1024,8 +1027,7 @@ void NDS::MainRAMHandle() if ((ARM9.MRTrack.Type != MainRAMType::Null) && (A9ContentionTS < MainRAMTimestamp)) A9ContentionTS = MainRAMTimestamp; } - bool A7Priority = ExMemCnt[0] & 0x8000; - if (A7Priority) + if (A7PRIORITY) { while (true) { @@ -1063,6 +1065,8 @@ void NDS::MainRAMHandle() #undef A7WENTLAST #undef A9LAST #undef A7LAST +#undef A9PRIORITY +#undef A7PRIORITY template <CPUExecuteMode cpuMode> u32 NDS::RunFrame()