make Platform stuff pull the right EmuInstance.

FUCK THIS IS ATROCIOUS FUCK FUCK FUCK FUCK FUCK FUCK FUCK FUCK
This commit is contained in:
Arisotura
2024-06-03 23:31:30 +02:00
parent 1e9326bf85
commit 5378be51c4
20 changed files with 231 additions and 204 deletions

View File

@ -1127,9 +1127,9 @@ bool EmuInstance::updateConsole(UpdateConsoleNDSArgs&& _ndsargs, UpdateConsoleGB
if (nds) delete nds;
if (consoletype == 1)
nds = new DSi(std::move(dsiargs.value()));
nds = new DSi(std::move(dsiargs.value()), this);
else
nds = new NDS(std::move(ndsargs));
nds = new NDS(std::move(ndsargs), this);
NDS::Current = nds;
nds->Reset();
@ -1676,7 +1676,7 @@ bool EmuInstance::loadROM(QStringList filepath, bool reset)
.SRAMLength = savelen,
};
auto cart = NDSCart::ParseROM(std::move(filedata), filelen, std::move(cartargs));
auto cart = NDSCart::ParseROM(std::move(filedata), filelen, this, std::move(cartargs));
if (!cart)
{
// If we couldn't parse the ROM...
@ -1812,7 +1812,7 @@ bool EmuInstance::loadGBAROM(QStringList filepath)
CloseFile(sav);
}
auto cart = GBACart::ParseROM(std::move(filedata), filelen, std::move(savedata), savelen);
auto cart = GBACart::ParseROM(std::move(filedata), filelen, std::move(savedata), savelen, this);
if (!cart)
{
QMessageBox::critical(mainWindow, "melonDS", "Failed to load the GBA ROM.");

View File

@ -50,9 +50,6 @@
extern CameraManager* camManager[2];
// REMOVE ME
extern EmuInstance* testinst;
void emuStop();
// TEMP
@ -63,8 +60,9 @@ void emuStop();
namespace melonDS::Platform
{
void SignalStop(StopReason reason)
void SignalStop(StopReason reason, void* userdata)
{
EmuInstance* inst = (EmuInstance*)userdata;
emuStop();
switch (reason)
{
@ -412,23 +410,23 @@ void Sleep(u64 usecs)
}
void WriteNDSSave(const u8* savedata, u32 savelen, u32 writeoffset, u32 writelen)
void WriteNDSSave(const u8* savedata, u32 savelen, u32 writeoffset, u32 writelen, void* userdata)
{
EmuInstance* inst = testinst;
EmuInstance* inst = (EmuInstance*)userdata;
if (inst->ndsSave)
inst->ndsSave->RequestFlush(savedata, savelen, writeoffset, writelen);
}
void WriteGBASave(const u8* savedata, u32 savelen, u32 writeoffset, u32 writelen)
void WriteGBASave(const u8* savedata, u32 savelen, u32 writeoffset, u32 writelen, void* userdata)
{
EmuInstance* inst = testinst;
EmuInstance* inst = (EmuInstance*)userdata;
if (inst->gbaSave)
inst->gbaSave->RequestFlush(savedata, savelen, writeoffset, writelen);
}
void WriteFirmware(const Firmware& firmware, u32 writeoffset, u32 writelen)
void WriteFirmware(const Firmware& firmware, u32 writeoffset, u32 writelen, void* userdata)
{
EmuInstance* inst = testinst;
EmuInstance* inst = (EmuInstance*)userdata;
if (!inst->firmwareSave)
return;
@ -458,72 +456,81 @@ void WriteFirmware(const Firmware& firmware, u32 writeoffset, u32 writelen)
}
void WriteDateTime(int year, int month, int day, int hour, int minute, int second)
void WriteDateTime(int year, int month, int day, int hour, int minute, int second, void* userdata)
{
EmuInstance* inst = (EmuInstance*)userdata;
QDateTime hosttime = QDateTime::currentDateTime();
QDateTime time = QDateTime(QDate(year, month, day), QTime(hour, minute, second));
auto& cfg = testinst->getLocalConfig();
auto& cfg = inst->getLocalConfig();
cfg.SetInt64("RTC.Offset", hosttime.secsTo(time));
Config::Save();
}
bool MP_Init()
bool MP_Init(void* userdata)
{
return LocalMP::Init();
//return LocalMP::Init();
return true;
}
void MP_DeInit()
void MP_DeInit(void* userdata)
{
return LocalMP::DeInit();
//return LocalMP::DeInit();
}
void MP_Begin()
void MP_Begin(void* userdata)
{
return LocalMP::Begin();
//return LocalMP::Begin();
}
void MP_End()
void MP_End(void* userdata)
{
return LocalMP::End();
//return LocalMP::End();
}
int MP_SendPacket(u8* data, int len, u64 timestamp)
int MP_SendPacket(u8* data, int len, u64 timestamp, void* userdata)
{
return LocalMP::SendPacket(data, len, timestamp);
//return LocalMP::SendPacket(data, len, timestamp);
return 0;
}
int MP_RecvPacket(u8* data, u64* timestamp)
int MP_RecvPacket(u8* data, u64* timestamp, void* userdata)
{
return LocalMP::RecvPacket(data, timestamp);
//return LocalMP::RecvPacket(data, timestamp);
return 0;
}
int MP_SendCmd(u8* data, int len, u64 timestamp)
int MP_SendCmd(u8* data, int len, u64 timestamp, void* userdata)
{
return LocalMP::SendCmd(data, len, timestamp);
//return LocalMP::SendCmd(data, len, timestamp);
return 0;
}
int MP_SendReply(u8* data, int len, u64 timestamp, u16 aid)
int MP_SendReply(u8* data, int len, u64 timestamp, u16 aid, void* userdata)
{
return LocalMP::SendReply(data, len, timestamp, aid);
//return LocalMP::SendReply(data, len, timestamp, aid);
return 0;
}
int MP_SendAck(u8* data, int len, u64 timestamp)
int MP_SendAck(u8* data, int len, u64 timestamp, void* userdata)
{
return LocalMP::SendAck(data, len, timestamp);
//return LocalMP::SendAck(data, len, timestamp);
return 0;
}
int MP_RecvHostPacket(u8* data, u64* timestamp)
int MP_RecvHostPacket(u8* data, u64* timestamp, void* userdata)
{
return LocalMP::RecvHostPacket(data, timestamp);
//return LocalMP::RecvHostPacket(data, timestamp);
return 0;
}
u16 MP_RecvReplies(u8* data, u64 timestamp, u16 aidmask)
u16 MP_RecvReplies(u8* data, u64 timestamp, u16 aidmask, void* userdata)
{
return LocalMP::RecvReplies(data, timestamp, aidmask);
//return LocalMP::RecvReplies(data, timestamp, aidmask);
return 0;
}
bool LAN_Init()
bool LAN_Init(void* userdata)
{
/*if (testinst->getGlobalConfig().GetBool("LAN.DirectMode"))
{
@ -539,7 +546,7 @@ bool LAN_Init()
return true;
}
void LAN_DeInit()
void LAN_DeInit(void* userdata)
{
// checkme. blarg
//if (Config::DirectLAN)
@ -550,7 +557,7 @@ void LAN_DeInit()
LAN_Socket::DeInit();*/
}
int LAN_SendPacket(u8* data, int len)
int LAN_SendPacket(u8* data, int len, void* userdata)
{
/*if (testinst->getGlobalConfig().GetBool("LAN.DirectMode"))
return LAN_PCap::SendPacket(data, len);
@ -559,7 +566,7 @@ int LAN_SendPacket(u8* data, int len)
return 0;
}
int LAN_RecvPacket(u8* data)
int LAN_RecvPacket(u8* data, void* userdata)
{
/*if (testinst->getGlobalConfig().GetBool("LAN.DirectMode"))
return LAN_PCap::RecvPacket(data);
@ -569,17 +576,17 @@ int LAN_RecvPacket(u8* data)
}
void Camera_Start(int num)
void Camera_Start(int num, void* userdata)
{
return camManager[num]->start();
}
void Camera_Stop(int num)
void Camera_Stop(int num, void* userdata)
{
return camManager[num]->stop();
}
void Camera_CaptureFrame(int num, u32* frame, int width, int height, bool yuv)
void Camera_CaptureFrame(int num, u32* frame, int width, int height, bool yuv, void* userdata)
{
return camManager[num]->captureFrame(frame, width, height, yuv);
}

View File

@ -1831,8 +1831,8 @@ void MainWindow::onOpenWifiSettings()
void MainWindow::onWifiSettingsFinished(int res)
{
Platform::LAN_DeInit();
Platform::LAN_Init();
//Platform::LAN_DeInit();
//Platform::LAN_Init();
if (WifiSettingsDialog::needsReset)
onReset();