reios: allow hle savestates to be loaded in non-hle mode

Always initialize reios hooks during startup so hle savestates always work.
Fix bios loading logic for naomi/aw
This commit is contained in:
Flyinghead 2019-09-19 11:49:19 +02:00
parent 38c9eea50a
commit e7a33e6de1
4 changed files with 30 additions and 32 deletions

View File

@ -207,7 +207,9 @@ bool LoadHle(const string& root)
if (!nvmem_load(root))
WARN_LOG(FLASHROM, "No nvmem loaded\n");
return reios_init(sys_rom->data, sys_nvmem);
reios_reset(sys_rom->data, sys_nvmem);
return true;
}
static u32 ReadFlash(u32 addr,u32 sz) { return sys_nvmem->Read(addr,sz); }

View File

@ -123,7 +123,6 @@ void plugins_Term()
void plugins_Reset(bool hard)
{
reios_reset();
libPvr_Reset(hard);
libGDR_Reset(hard);
libAICA_Reset(hard);
@ -482,6 +481,7 @@ static void dc_init()
}
mem_Init();
reios_init();
init_done = true;
}
@ -520,22 +520,20 @@ void dc_start_game(const char *path)
LoadSettings(false);
std::string data_path = get_readonly_data_path(DATA_PATH);
if ((settings.platform.system == DC_PLATFORM_DREAMCAST && settings.bios.UseReios)
|| !LoadRomFiles(data_path))
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
{
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
if (settings.bios.UseReios || !LoadRomFiles(data_path))
{
if (!LoadHle(data_path))
throw ReicastException("Failed to initialize HLE BIOS");
NOTICE_LOG(BOOT, "Did not load BIOS, using reios");
}
else
{
throw ReicastException("Cannot find BIOS files in " + data_path);
}
}
else
{
LoadRomFiles(data_path);
}
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
{
mcfg_CreateDevices();

View File

@ -39,7 +39,6 @@
#define SYSINFO_ID_ADDR 0x8C001010
#define FONT_TABLE_ADDR 0xa0100020
static u8* biosrom;
static MemChip *flashrom;
static u32 base_fad = 45150;
static bool descrambl = false;
@ -446,7 +445,7 @@ static void reios_setup_state(u32 boot_addr) {
*/
//Setup registers to immitate a normal boot
//Setup registers to imitate a normal boot
r[15] = 0x8d000000;
gbr = 0x8c000000;
@ -552,7 +551,7 @@ static void reios_setup_naomi(u32 boot_addr) {
*/
//Setup registers to immitate a normal boot
//Setup registers to imitate a normal boot
r[0] = 0x0c021000;
r[1] = 0x0c01f820;
r[2] = 0xa0710004;
@ -686,20 +685,10 @@ static u32 hook_addr(hook_fp* fn) {
}
}
bool reios_init(u8* rom, MemChip* flash) {
bool reios_init()
{
INFO_LOG(REIOS, "reios: Init");
biosrom = rom;
flashrom = flash;
memset(rom, 0x00, 2048 * 1024);
memset(GetMemPtr(0x8C000000, 0), 0, RAM_SIZE);
u16* rom16 = (u16*)rom;
rom16[0] = REIOS_OPCODE;
register_hook(0xA0000000, reios_boot);
register_hook(0x8C001000, reios_sys_system);
@ -710,6 +699,20 @@ bool reios_init(u8* rom, MemChip* flash) {
register_hook(dc_bios_entrypoint_gd2, reios_sys_gd2);
return true;
}
void reios_reset(u8* rom, MemChip* flash)
{
flashrom = flash;
memset(rom, 0x00, BIOS_SIZE);
memset(GetMemPtr(0x8C000000, 0), 0, RAM_SIZE);
u16* rom16 = (u16*)rom;
rom16[0] = REIOS_OPCODE;
u8 *pFont = rom + (FONT_TABLE_ADDR % BIOS_SIZE);
// 288 12 × 24 pixels (36 bytes) characters
@ -734,11 +737,6 @@ bool reios_init(u8* rom, MemChip* flash) {
else
INFO_LOG(REIOS, "font.bin: loaded %zd bytes", size);
}
return true;
}
void reios_reset() {
}
void reios_term() {

View File

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