Extract gba roms to memory

Signed-off-by: Madhav Kanbur <abcdjdj@gmail.com>
This commit is contained in:
Madhav Kanbur
2021-01-11 21:45:24 +05:30
parent d5df5fd6ed
commit c98b981813
6 changed files with 35 additions and 9 deletions

View File

@ -677,6 +677,20 @@ bool LoadROM(const char* path, const char* sram)
return true; return true;
} }
bool LoadROM(const u8* romdata, u32 filelength, const char *sram)
{
CartROMSize = 0x200;
while (CartROMSize < filelength)
CartROMSize <<= 1;
CartROM = new u8[CartROMSize];
memcpy(CartROM, romdata, filelength);
LoadROMCommon(sram);
return true;
}
void RelocateSave(const char* path, bool write) void RelocateSave(const char* path, bool write)
{ {
// derp herp // derp herp

View File

@ -66,6 +66,7 @@ void Eject();
void DoSavestate(Savestate* file); void DoSavestate(Savestate* file);
bool LoadROM(const char* path, const char* sram); bool LoadROM(const char* path, const char* sram);
bool LoadROM(const u8* romdata, u32 filelength, const char *sram);
void RelocateSave(const char* path, bool write); void RelocateSave(const char* path, bool write);
void WriteGPIO(u32 addr, u16 val); void WriteGPIO(u32 addr, u16 val);

View File

@ -864,6 +864,19 @@ bool LoadGBAROM(const char* path, const char* sram)
} }
} }
bool LoadGBAROM(const u8* romdata, u32 filelength, const char *filename, const char *sram)
{
if (GBACart::LoadROM(romdata, filelength, sram))
{
return true;
}
else
{
printf("Failed to load ROM %s from archive\n", filename);
return false;
}
}
void LoadBIOS() void LoadBIOS()
{ {
Reset(); Reset();

View File

@ -195,6 +195,7 @@ void SetConsoleType(int type);
bool LoadROM(const char* path, const char* sram, bool direct); bool LoadROM(const char* path, const char* sram, bool direct);
bool LoadROM(const u8* romdata, u32 filelength, const char *sram, bool direct); bool LoadROM(const u8* romdata, u32 filelength, const char *sram, bool direct);
bool LoadGBAROM(const char* path, const char* sram); bool LoadGBAROM(const char* path, const char* sram);
bool LoadGBAROM(const u8* romdata, u32 filelength, const char *filename, const char *sram);
void LoadBIOS(); void LoadBIOS();
void SetupDirectBoot(); void SetupDirectBoot();
void RelocateSave(const char* path, bool write); void RelocateSave(const char* path, bool write);

View File

@ -350,13 +350,13 @@ int LoadROM(const QByteArray *romdata, QString archivefilename, QString romfilen
strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety
return Load_OK; return Load_OK;
} }
/*else if (slot == ROMSlot_GBA && NDS::LoadGBAROM(ROMPath[slot], SRAMPath[slot])) else if (slot == ROMSlot_GBA && NDS::LoadGBAROM((const u8*)romdata->constData(), romdata->size(), romfilename.toStdString().c_str(), SRAMPath[slot]))
{ {
SavestateLoaded = false; // checkme?? SavestateLoaded = false; // checkme??
strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety
return Load_OK; return Load_OK;
}*/ }
else else
{ {
strncpy(ROMPath[slot], oldpath, 1024); strncpy(ROMPath[slot], oldpath, 1024);

View File

@ -1507,20 +1507,17 @@ void MainWindow::loadROM(QByteArray *romData, QString archiveFileName, QString r
strncpy(Config::LastROMFolder, QFileInfo(archiveFileName).absolutePath().toStdString().c_str(), 1024); strncpy(Config::LastROMFolder, QFileInfo(archiveFileName).absolutePath().toStdString().c_str(), 1024);
int slot; int res; int slot; int res;
/*if (!strcasecmp(ext, "gba")) if (romFileName.endsWith("gba"))
{ {
slot = 1; slot = 1;
res = Frontend::LoadROM(file, Frontend::ROMSlot_GBA); res = Frontend::LoadROM(romData, archiveFileName, romFileName, Frontend::ROMSlot_GBA);
} }
else else
{ {
slot = 0; slot = 0;
res = Frontend::LoadROM(file, Frontend::ROMSlot_NDS); res = Frontend::LoadROM(romData, archiveFileName, romFileName, Frontend::ROMSlot_NDS);
}*/ }
// TODO: GBA support here!
slot = 0;
res = Frontend::LoadROM(romData, archiveFileName, romFileName, Frontend::ROMSlot_NDS);
if (res != Frontend::Load_OK) if (res != Frontend::Load_OK)
{ {
QMessageBox::critical(this, QMessageBox::critical(this,