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"
|
2024-01-22 03:29:04 -05:00
|
|
|
#include "Core/Shared/EmuSettings.h"
|
2019-10-16 20:22:45 -04:00
|
|
|
|
2022-01-21 21:25:33 -05: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
|
|
|
{
|
2022-01-21 21:25:33 -05:00
|
|
|
if(inBackground) {
|
|
|
|
unique_ptr<Emulator> emu(new Emulator());
|
|
|
|
emu->Initialize();
|
2024-01-22 03:29:04 -05:00
|
|
|
emu->GetSettings()->SetFlag(EmulationFlags::ConsoleMode);
|
2023-01-24 05:20:42 -05:00
|
|
|
shared_ptr<RecordedRomTest> romTest(new RecordedRomTest(emu.get(), true));
|
2022-01-21 21:25:33 -05:00
|
|
|
return romTest->Run(filename);
|
|
|
|
} else {
|
2023-01-24 05:20:42 -05:00
|
|
|
shared_ptr<RecordedRomTest> romTest(new RecordedRomTest(_emu.get(), false));
|
2022-01-21 21:25:33 -05:00
|
|
|
return romTest->Run(filename);
|
|
|
|
}
|
2019-10-16 20:22:45 -04:00
|
|
|
}
|
|
|
|
|
2024-01-22 03:29:04 -05:00
|
|
|
DllExport uint32_t __stdcall RunTest(char* filename)
|
|
|
|
{
|
|
|
|
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>(50));
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t result = ((uint8_t*)emu->GetMemory(MemoryType::GbHighRam).Memory)[2];
|
|
|
|
|
|
|
|
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; }
|
|
|
|
}
|