reios: fix crash when loading a HLE savestate in a non-HLE session

flashrom pointer wasn't initialized in this case
This commit is contained in:
Flyinghead 2020-11-21 20:09:06 +01:00
parent 525c2dc88c
commit 99b01536bc
3 changed files with 11 additions and 7 deletions

View File

@ -209,7 +209,7 @@ bool LoadHle(const std::string& root)
if (!nvmem_load(root))
WARN_LOG(FLASHROM, "No nvmem loaded\n");
reios_reset(sys_rom->data, sys_nvmem);
reios_reset(sys_rom->data);
return true;
}
@ -469,6 +469,7 @@ void sh4_area0_Reset(bool hard)
case DC_PLATFORM_DREAMCAST:
sys_rom = new RomChip(settings.platform.bios_size);
sys_nvmem = new DCFlashChip(settings.platform.flash_size);
reios_set_flash(sys_nvmem);
break;
case DC_PLATFORM_NAOMI:
sys_rom = new RomChip(settings.platform.bios_size);

View File

@ -299,7 +299,7 @@ static void reios_sys_flashrom() {
u32 offset = r[4];
u32 dest = r[5];
u32 size = r[6];
// FIXME after loading a hle savestate in a !hle env, flashrom is null (changing CT options -> crash)
debugf("reios_sys_flashrom: FLASHROM_READ offs %x dest %08x size %x", offset, dest, size);
for (u32 i = 0; i < size; i++)
WriteMem8(dest++, flashrom->Read8(offset + i));
@ -350,7 +350,7 @@ static void reios_sys_flashrom() {
int part_offset;
int size;
static_cast<DCFlashChip*>(flashrom)->GetPartitionInfo(part, &part_offset, &size);
if (offset == part_offset)
if (offset == (u32)part_offset)
{
found = true;
memset(flashrom->data + offset, 0xFF, size);
@ -654,7 +654,7 @@ static void reios_boot()
msgboxf("Naomi boot failure", MBX_ICONERROR);
}
int size = *sz;
const u32 size = *sz;
data_size = 1;
verify(size < RAM_SIZE && CurrentCartridge->GetPtr(size - 1, data_size) && "Invalid cart size");
@ -719,10 +719,13 @@ bool reios_init()
return true;
}
void reios_reset(u8* rom, MemChip* flash)
void reios_set_flash(MemChip* flash)
{
flashrom = flash;
}
void reios_reset(u8* rom)
{
memset(rom, 0x00, BIOS_SIZE);
memset(GetMemPtr(0x8C000000, 0), 0, RAM_SIZE);

View File

@ -5,8 +5,8 @@
#include "hw/flashrom/flashrom.h"
bool reios_init();
void reios_reset(u8* rom, MemChip *flash);
void reios_set_flash(MemChip* flash);
void reios_reset(u8* rom);
void reios_term();