mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-26 15:50:00 -06:00
re-add SRAM import
This commit is contained in:
@ -224,7 +224,9 @@ void CartGame::LoadSave(const u8* savedata, u32 savelen)
|
|||||||
{
|
{
|
||||||
if (!SRAM) return;
|
if (!SRAM) return;
|
||||||
|
|
||||||
memcpy(SRAM, savedata, std::min(savelen, SRAMLength));
|
u32 len = std::min(savelen, SRAMLength);
|
||||||
|
memcpy(SRAM, savedata, len);
|
||||||
|
Platform::WriteGBASave(savedata, len, 0, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 CartGame::ROMRead(u32 addr)
|
u16 CartGame::ROMRead(u32 addr)
|
||||||
@ -744,7 +746,6 @@ void DoSavestate(Savestate* file)
|
|||||||
if (Cart) Cart->DoSavestate(file);
|
if (Cart) Cart->DoSavestate(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void LoadROMCommon(const char *sram)
|
|
||||||
bool LoadROM(const u8* romdata, u32 romlen)
|
bool LoadROM(const u8* romdata, u32 romlen)
|
||||||
{
|
{
|
||||||
if (CartInserted)
|
if (CartInserted)
|
||||||
@ -852,56 +853,6 @@ void EjectCart()
|
|||||||
CartID = 0;
|
CartID = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*bool LoadROM(const char* path, const char* sram)
|
|
||||||
{
|
|
||||||
FILE* f = Platform::OpenFile(path, "rb");
|
|
||||||
if (!f)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CartInserted)
|
|
||||||
{
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(f, 0, SEEK_END);
|
|
||||||
u32 len = (u32)ftell(f);
|
|
||||||
|
|
||||||
CartROMSize = 0x200;
|
|
||||||
while (CartROMSize < len)
|
|
||||||
CartROMSize <<= 1;
|
|
||||||
|
|
||||||
CartROM = new u8[CartROMSize];
|
|
||||||
memset(CartROM, 0, CartROMSize);
|
|
||||||
fseek(f, 0, SEEK_SET);
|
|
||||||
fread(CartROM, 1, len, f);
|
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
LoadROMCommon(sram);
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
if (Cart) Cart->RelocateSave(path, write);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
int SetInput(int num, bool pressed)
|
int SetInput(int num, bool pressed)
|
||||||
{
|
{
|
||||||
|
@ -926,6 +926,12 @@ bool LoadCart(const u8* romdata, u32 romlen, const u8* savedata, u32 savelen)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoadSave(const u8* savedata, u32 savelen)
|
||||||
|
{
|
||||||
|
if (savedata && savelen)
|
||||||
|
NDSCart::LoadSave(savedata, savelen);
|
||||||
|
}
|
||||||
|
|
||||||
void EjectCart()
|
void EjectCart()
|
||||||
{
|
{
|
||||||
NDSCart::EjectCart();
|
NDSCart::EjectCart();
|
||||||
|
@ -238,13 +238,10 @@ void SetARM7RegionTimings(u32 addrstart, u32 addrend, u32 region, int buswidth,
|
|||||||
// 0=DS 1=DSi
|
// 0=DS 1=DSi
|
||||||
void SetConsoleType(int type);
|
void SetConsoleType(int type);
|
||||||
|
|
||||||
/*bool LoadROM(const char* path, 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 u8* romdata, u32 filelength, const char *filename, const char *sram);*/
|
|
||||||
void LoadBIOS();
|
void LoadBIOS();
|
||||||
|
|
||||||
bool LoadCart(const u8* romdata, u32 romlen, const u8* savedata, u32 savelen);
|
bool LoadCart(const u8* romdata, u32 romlen, const u8* savedata, u32 savelen);
|
||||||
|
void LoadSave(const u8* savedata, u32 savelen);
|
||||||
void EjectCart();
|
void EjectCart();
|
||||||
bool CartInserted();
|
bool CartInserted();
|
||||||
|
|
||||||
@ -255,8 +252,6 @@ bool LoadGBACart(const u8* romdata, u32 romlen, const u8* savedata, u32 savelen)
|
|||||||
void LoadGBAAddon(int type);
|
void LoadGBAAddon(int type);
|
||||||
void EjectGBACart();
|
void EjectGBACart();
|
||||||
|
|
||||||
//void RelocateSave(const char* path, bool write);
|
|
||||||
|
|
||||||
u32 RunFrame();
|
u32 RunFrame();
|
||||||
|
|
||||||
void TouchScreen(u16 x, u16 y);
|
void TouchScreen(u16 x, u16 y);
|
||||||
@ -269,8 +264,6 @@ void SetLidClosed(bool closed);
|
|||||||
|
|
||||||
void MicInputFrame(s16* data, int samples);
|
void MicInputFrame(s16* data, int samples);
|
||||||
|
|
||||||
//int ImportSRAM(u8* data, u32 length);
|
|
||||||
|
|
||||||
void ScheduleEvent(u32 id, bool periodic, s32 delay, void (*func)(u32), u32 param);
|
void ScheduleEvent(u32 id, bool periodic, s32 delay, void (*func)(u32), u32 param);
|
||||||
void CancelEvent(u32 id);
|
void CancelEvent(u32 id);
|
||||||
|
|
||||||
|
@ -473,7 +473,9 @@ void CartRetail::LoadSave(const u8* savedata, u32 savelen)
|
|||||||
{
|
{
|
||||||
if (!SRAM) return;
|
if (!SRAM) return;
|
||||||
|
|
||||||
memcpy(SRAM, savedata, std::min(savelen, SRAMLength));
|
u32 len = std::min(savelen, SRAMLength);
|
||||||
|
memcpy(SRAM, savedata, len);
|
||||||
|
Platform::WriteNDSSave(savedata, len, 0, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CartRetail::ROMCommandStart(u8* cmd, u8* data, u32 len)
|
int CartRetail::ROMCommandStart(u8* cmd, u8* data, u32 len)
|
||||||
|
@ -1862,6 +1862,7 @@ void MainWindow::dropEvent(QDropEvent* event)
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(true);
|
actEjectCart->setEnabled(true);
|
||||||
|
actImportSavefile->setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1929,6 +1930,7 @@ bool MainWindow::preloadROMs(QString filename, QString gbafilename)
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(true);
|
actEjectCart->setEnabled(true);
|
||||||
|
actImportSavefile->setEnabled(true);
|
||||||
|
|
||||||
if (gbaloaded)
|
if (gbaloaded)
|
||||||
{
|
{
|
||||||
@ -2071,6 +2073,7 @@ void MainWindow::onOpenFile()
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(true);
|
actEjectCart->setEnabled(true);
|
||||||
|
actImportSavefile->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onClearRecentFiles()
|
void MainWindow::onClearRecentFiles()
|
||||||
@ -2163,6 +2166,7 @@ void MainWindow::onClickRecentFile()
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(true);
|
actEjectCart->setEnabled(true);
|
||||||
|
actImportSavefile->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onBootFirmware()
|
void MainWindow::onBootFirmware()
|
||||||
@ -2210,6 +2214,7 @@ void MainWindow::onInsertCart()
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(true);
|
actEjectCart->setEnabled(true);
|
||||||
|
actImportSavefile->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onEjectCart()
|
void MainWindow::onEjectCart()
|
||||||
@ -2222,6 +2227,7 @@ void MainWindow::onEjectCart()
|
|||||||
|
|
||||||
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
actCurrentCart->setText("DS slot: " + ROMManager::CartLabel());
|
||||||
actEjectCart->setEnabled(false);
|
actEjectCart->setEnabled(false);
|
||||||
|
actImportSavefile->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onInsertGBACart()
|
void MainWindow::onInsertGBACart()
|
||||||
@ -2386,37 +2392,52 @@ void MainWindow::onUndoStateLoad()
|
|||||||
|
|
||||||
void MainWindow::onImportSavefile()
|
void MainWindow::onImportSavefile()
|
||||||
{
|
{
|
||||||
if (!RunningSomething) return;
|
emuThread->emuPause();
|
||||||
|
|
||||||
/*emuThread->emuPause();
|
|
||||||
QString path = QFileDialog::getOpenFileName(this,
|
QString path = QFileDialog::getOpenFileName(this,
|
||||||
"Select savefile",
|
"Select savefile",
|
||||||
QString::fromStdString(Config::LastROMFolder),
|
QString::fromStdString(Config::LastROMFolder),
|
||||||
"Savefiles (*.sav *.bin *.dsv);;Any file (*.*)");
|
"Savefiles (*.sav *.bin *.dsv);;Any file (*.*)");
|
||||||
|
|
||||||
if (!path.isEmpty())
|
if (path.isEmpty())
|
||||||
|
{
|
||||||
|
emuThread->emuUnpause();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE* f = Platform::OpenFile(path.toStdString(), "rb", true);
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, "melonDS", "Could not open the given savefile.");
|
||||||
|
emuThread->emuUnpause();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RunningSomething)
|
||||||
{
|
{
|
||||||
if (QMessageBox::warning(this,
|
if (QMessageBox::warning(this,
|
||||||
"Emulation will be reset and data overwritten",
|
"melonDS",
|
||||||
"The emulation will be reset and the current savefile overwritten.",
|
"The emulation will be reset and the current savefile overwritten.",
|
||||||
QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok)
|
QMessageBox::Ok, QMessageBox::Cancel) != QMessageBox::Ok)
|
||||||
{
|
{
|
||||||
int res = Frontend::Reset();
|
emuThread->emuUnpause();
|
||||||
if (res != Frontend::Load_OK)
|
return;
|
||||||
{
|
|
||||||
QMessageBox::critical(this, "melonDS", "Reset failed\n" + loadErrorStr(res));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int diff = Frontend::ImportSRAM(path.toStdString().c_str());
|
|
||||||
if (diff > 0)
|
|
||||||
OSD::AddMessage(0, "Trimmed savefile");
|
|
||||||
else if (diff < 0)
|
|
||||||
OSD::AddMessage(0, "Savefile shorter than SRAM");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ROMManager::Reset();
|
||||||
}
|
}
|
||||||
emuThread->emuUnpause();*/
|
|
||||||
|
u32 len;
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
len = (u32)ftell(f);
|
||||||
|
|
||||||
|
u8* data = new u8[len];
|
||||||
|
fseek(f, 0, SEEK_SET);
|
||||||
|
fread(data, len, 1, f);
|
||||||
|
|
||||||
|
NDS::LoadSave(data, len);
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
emuThread->emuUnpause();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onQuit()
|
void MainWindow::onQuit()
|
||||||
@ -2806,7 +2827,6 @@ void MainWindow::onEmuStart()
|
|||||||
actReset->setEnabled(true);
|
actReset->setEnabled(true);
|
||||||
actStop->setEnabled(true);
|
actStop->setEnabled(true);
|
||||||
actFrameStep->setEnabled(true);
|
actFrameStep->setEnabled(true);
|
||||||
actImportSavefile->setEnabled(true);
|
|
||||||
|
|
||||||
actSetupCheats->setEnabled(true);
|
actSetupCheats->setEnabled(true);
|
||||||
actTitleManager->setEnabled(false);
|
actTitleManager->setEnabled(false);
|
||||||
@ -2824,7 +2844,6 @@ void MainWindow::onEmuStop()
|
|||||||
actLoadState[i]->setEnabled(false);
|
actLoadState[i]->setEnabled(false);
|
||||||
}
|
}
|
||||||
actUndoStateLoad->setEnabled(false);
|
actUndoStateLoad->setEnabled(false);
|
||||||
actImportSavefile->setEnabled(false);
|
|
||||||
|
|
||||||
actPause->setEnabled(false);
|
actPause->setEnabled(false);
|
||||||
actReset->setEnabled(false);
|
actReset->setEnabled(false);
|
||||||
|
Reference in New Issue
Block a user