From 99b01536bc6d25a4de086e5a2b44cc365afe4d61 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Sat, 21 Nov 2020 20:09:06 +0100 Subject: [PATCH] reios: fix crash when loading a HLE savestate in a non-HLE session flashrom pointer wasn't initialized in this case --- core/hw/holly/sb_mem.cpp | 3 ++- core/reios/reios.cpp | 11 +++++++---- core/reios/reios.h | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/hw/holly/sb_mem.cpp b/core/hw/holly/sb_mem.cpp index eb7683037..49e9c0923 100644 --- a/core/hw/holly/sb_mem.cpp +++ b/core/hw/holly/sb_mem.cpp @@ -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); diff --git a/core/reios/reios.cpp b/core/reios/reios.cpp index 4564d6973..48e58844e 100644 --- a/core/reios/reios.cpp +++ b/core/reios/reios.cpp @@ -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(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); diff --git a/core/reios/reios.h b/core/reios/reios.h index a206d6cd4..251403f57 100644 --- a/core/reios/reios.h +++ b/core/reios/reios.h @@ -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();