reios: reset gdrom state at reset

Fixes "Reboot to BIOS" exception when loading another game
This commit is contained in:
Flyinghead 2021-09-11 11:22:58 +02:00
parent ad2e142b01
commit 1762987aae
3 changed files with 18 additions and 17 deletions

View File

@ -23,7 +23,7 @@
#define debugf(...) DEBUG_LOG(REIOS, __VA_ARGS__)
gdrom_hle_state_t gd_hle_state = { 0xffffffff, 2, BIOS_INACTIVE };
gdrom_hle_state_t gd_hle_state;
static void GDROM_HLE_ReadSES()
{
@ -644,9 +644,7 @@ void gdrom_hle_op()
case GDROM_INIT:
// Initialize the GDROM subsystem. Should be called before any requests are enqueued.
DEBUG_LOG(REIOS, "GDROM: HLE GDROM_INIT");
gd_hle_state.last_request_id = 0xFFFFFFFF;
gd_hle_state.next_request_id = 2;
gd_hle_state.status = BIOS_INACTIVE;
gd_hle_state = {};
break;
case GDROM_RESET:

View File

@ -49,21 +49,23 @@ void gdrom_hle_op();
typedef enum { BIOS_ERROR = -1, BIOS_INACTIVE, BIOS_ACTIVE, BIOS_COMPLETED, BIOS_DATA_AVAIL } gd_bios_status;
struct gdrom_hle_state_t
{
u32 last_request_id;
u32 next_request_id;
gd_bios_status status;
u32 command;
gdrom_hle_state_t() : params{}, result{} {}
u32 last_request_id = 0xFFFFFFFF;
u32 next_request_id = 2;
gd_bios_status status = BIOS_INACTIVE;
u32 command = 0;
u32 params[4];
u32 result[4];
u32 cur_sector;
u32 multi_read_sector;
u32 multi_read_offset;
u32 multi_read_count;
u32 multi_read_total;
u32 multi_callback;
u32 multi_callback_arg;
bool dma_trans_ended;
u64 xfer_end_time;
u32 cur_sector = 0;
u32 multi_read_sector = 0;
u32 multi_read_offset = 0;
u32 multi_read_count = 0;
u32 multi_read_total = 0;
u32 multi_callback = 0;
u32 multi_callback_arg = 0;
bool dma_trans_ended = false;
u64 xfer_end_time = 0;
bool Serialize(void **data, unsigned int *total_size)
{

View File

@ -763,6 +763,7 @@ void reios_reset(u8* rom)
else
INFO_LOG(REIOS, "font.bin: loaded %zd bytes", size);
}
gd_hle_state = {};
}
void reios_term() {