add memory callbacks to melon, cleanup some code

This commit is contained in:
CasualPokePlayer 2022-02-03 18:59:51 -08:00
parent 0edf95948f
commit dd3cf6091f
3 changed files with 50 additions and 6 deletions

Binary file not shown.

View File

@ -5,6 +5,7 @@
#include "ARM.h" #include "ARM.h"
#include "NDSCart.h" #include "NDSCart.h"
#include "GBACart.h" #include "GBACart.h"
#include "DSi.h"
#include "DSi_NAND.h" #include "DSi_NAND.h"
#include "Platform.h" #include "Platform.h"
#include "BizConfig.h" #include "BizConfig.h"
@ -253,17 +254,33 @@ static bool SafeToPeek(u32 addr)
static void ARM9Access(u8* buffer, s64 address, s64 count, bool write) static void ARM9Access(u8* buffer, s64 address, s64 count, bool write)
{ {
if (write) if (write)
while (count--) NDS::ARM9Write8(address++, *buffer++); {
void (*Write)(u32, u8) = NDS::ConsoleType == 1 ? DSi::ARM9Write8 : NDS::ARM9Write8;
while (count--)
Write(address++, *buffer++);
}
else else
while (count--) *buffer++ = SafeToPeek<true>(address) ? NDS::ARM9Read8(address) : 0, address++; {
u8 (*Read)(u32) = NDS::ConsoleType == 1 ? DSi::ARM9Read8 : NDS::ARM9Read8;
while (count--)
*buffer++ = SafeToPeek<true>(address) ? Read(address) : 0, address++;
}
} }
static void ARM7Access(u8* buffer, s64 address, s64 count, bool write) static void ARM7Access(u8* buffer, s64 address, s64 count, bool write)
{ {
if (write) if (write)
while (count--) NDS::ARM7Write8(address++, *buffer++); {
void (*Write)(u32, u8) = NDS::ConsoleType == 1 ? DSi::ARM7Write8 : NDS::ARM7Write8;
while (count--)
Write(address++, *buffer++);
}
else else
while (count--) *buffer++ = SafeToPeek<false>(address) ? NDS::ARM7Read8(address) : 0, address++; {
u8 (*Read)(u32) = NDS::ConsoleType == 1 ? DSi::ARM7Read8 : NDS::ARM7Read8;
while (count--)
*buffer++ = SafeToPeek<true>(address) ? Read(address) : 0, address++;
}
} }
EXPORT void GetMemoryAreas(MemoryArea *m) EXPORT void GetMemoryAreas(MemoryArea *m)
@ -336,8 +353,12 @@ static void MicFeedNoise(s8 vol)
} }
} }
static bool RunningFrame = false;
EXPORT void FrameAdvance(MyFrameInfo* f) EXPORT void FrameAdvance(MyFrameInfo* f)
{ {
RunningFrame = true;
if (f->Keys & 0x8000) if (f->Keys & 0x8000)
{ {
NDS::LoadBIOS(); NDS::LoadBIOS();
@ -391,6 +412,8 @@ EXPORT void FrameAdvance(MyFrameInfo* f)
SPU::ReadOutput(f->SoundBuffer, f->Samples); SPU::ReadOutput(f->SoundBuffer, f->Samples);
f->Cycles = NDS::GetSysClockCycles(2); f->Cycles = NDS::GetSysClockCycles(2);
f->Lagged = NDS::LagFrameFlag; f->Lagged = NDS::LagFrameFlag;
RunningFrame = false;
} }
void (*InputCallback)(); void (*InputCallback)();
@ -410,7 +433,28 @@ EXPORT void SetReg(s32 ncpu, s32 index, s32 val)
NDS::SetReg(ncpu, index, val); NDS::SetReg(ncpu, index, val);
} }
EXPORT void SetTraceCallback(void (*callback)(u32 cpu, u32* regs, u32 opcode, s64 ccoffset)) EXPORT u32 GetTotalExecutedCycles()
{
return RunningFrame ? NDS::GetSysClockCycles(2) : 0;
}
void (*ReadCallback)(u32);
void (*WriteCallback)(u32);
void (*ExecuteCallback)(u32);
EXPORT void SetMemoryCallback(u32 which, void (*callback)(u32 addr))
{
switch (which)
{
case 0: ReadCallback = callback; break;
case 1: WriteCallback = callback; break;
case 2: ExecuteCallback = callback; break;
}
}
void (*TraceCallback)(u32, u32*, u32);
EXPORT void SetTraceCallback(void (*callback)(u32 cpu, u32* regs, u32 opcode))
{ {
TraceCallback = callback; TraceCallback = callback;
} }

@ -1 +1 @@
Subproject commit 4faf7b4dd4e3ffbe9f1fe72df3bf8448276d660b Subproject commit 70e45e69f466fb6750abc786200cf027ade11867