Mesen2/InteropDLL/TestApiWrapper.cpp

71 lines
2 KiB
C++
Raw Permalink Normal View History

2022-09-08 21:15:56 -04:00
#include "Common.h"
2021-04-09 21:45:04 -04:00
#include "Core/Shared/RecordedRomTest.h"
#include "Core/Shared/Emulator.h"
#include "Core/Shared/EmuSettings.h"
2019-10-16 20:22:45 -04:00
extern unique_ptr<Emulator> _emu;
2019-10-16 20:22:45 -04:00
shared_ptr<RecordedRomTest> _recordedRomTest;
extern "C"
{
2023-01-24 05:20:42 -05:00
DllExport RomTestResult __stdcall RunRecordedTest(char* filename, bool inBackground)
2019-10-16 20:22:45 -04:00
{
if(inBackground) {
unique_ptr<Emulator> emu(new Emulator());
emu->Initialize();
emu->GetSettings()->SetFlag(EmulationFlags::ConsoleMode);
2023-01-24 05:20:42 -05:00
shared_ptr<RecordedRomTest> romTest(new RecordedRomTest(emu.get(), true));
return romTest->Run(filename);
} else {
2023-01-24 05:20:42 -05:00
shared_ptr<RecordedRomTest> romTest(new RecordedRomTest(_emu.get(), false));
return romTest->Run(filename);
}
2019-10-16 20:22:45 -04:00
}
DllExport uint64_t __stdcall RunTest(char* filename, uint32_t address, MemoryType memType)
{
unique_ptr<Emulator> emu(new Emulator());
emu->Initialize();
emu->GetSettings()->SetFlag(EmulationFlags::ConsoleMode);
emu->GetSettings()->GetGameboyConfig().Model = GameboyModel::Gameboy;
emu->GetSettings()->GetGameboyConfig().RamPowerOnState = RamState::AllZeros;
emu->LoadRom((VirtualFile)filename, VirtualFile());
emu->GetSettings()->SetFlag(EmulationFlags::MaximumSpeed);
while(emu->GetFrameCount() < 500) {
std::this_thread::sleep_for(std::chrono::duration<int, std::milli>(10));
}
ConsoleMemoryInfo memInfo = emu->GetMemory(memType);
uint8_t* memBuffer = (uint8_t*)memInfo.Memory;
uint64_t result = memBuffer[address];
for(int i = 1; i < 8; i++) {
if(address + i < memInfo.Size) {
result |= ((uint64_t)memBuffer[address + i] << (8*i));
} else {
break;
}
}
emu->Stop(false);
emu->Release();
return result;
}
2019-10-16 20:22:45 -04:00
DllExport void __stdcall RomTestRecord(char* filename, bool reset)
{
2023-01-24 05:20:42 -05:00
_recordedRomTest.reset(new RecordedRomTest(_emu.get(), false));
2019-10-16 20:22:45 -04:00
_recordedRomTest->Record(filename, reset);
}
DllExport void __stdcall RomTestStop()
{
if(_recordedRomTest) {
_recordedRomTest->Stop();
_recordedRomTest.reset();
}
}
DllExport bool __stdcall RomTestRecording() { return _recordedRomTest != nullptr; }
}