Just some flash fixes

This commit is contained in:
SimoneN64
2023-11-06 22:07:54 +01:00
parent 4331981d34
commit 443446e68d
2 changed files with 10 additions and 9 deletions

View File

@@ -24,7 +24,7 @@ Mem::Mem() {
void Mem::Reset() { void Mem::Reset() {
memset(rom.cart, 0, CART_SIZE); memset(rom.cart, 0, CART_SIZE);
flash.Reset(); flash.Reset();
if(sram.is_open()) { if(sram.is_mapped()) {
std::error_code error; std::error_code error;
sram.sync(error); sram.sync(error);
sram.unmap(); sram.unmap();
@@ -533,7 +533,7 @@ u32 Mem::BackupRead32(u32 addr) {
Util::warn("Accessing cartridge backup type SAVE_EEPROM, returning 0 for word read"); Util::warn("Accessing cartridge backup type SAVE_EEPROM, returning 0 for word read");
return 0; return 0;
case SAVE_FLASH_1m: case SAVE_FLASH_1m:
if(flash.flash.is_open()) { if(flash.flash.is_mapped()) {
return flash.Read32(addr); return flash.Read32(addr);
} else { } else {
Util::panic("Invalid backup Read32 if save data is not initialized"); Util::panic("Invalid backup Read32 if save data is not initialized");
@@ -552,7 +552,7 @@ void Mem::BackupWrite32(u32 addr, u32 val) {
case SAVE_EEPROM_4k: case SAVE_EEPROM_16k: case SAVE_EEPROM_4k: case SAVE_EEPROM_16k:
Util::panic("Accessing cartridge with save type SAVE_EEPROM in write word"); Util::panic("Accessing cartridge with save type SAVE_EEPROM in write word");
case SAVE_FLASH_1m: case SAVE_FLASH_1m:
if(flash.flash.is_open()) { if(flash.flash.is_mapped()) {
flash.Write32(addr, val); flash.Write32(addr, val);
} else { } else {
Util::panic("Invalid backup Write32 if save data is not initialized"); Util::panic("Invalid backup Write32 if save data is not initialized");
@@ -572,13 +572,13 @@ u8 Mem::BackupRead8(u32 addr) {
Util::warn("Accessing cartridge backup type SAVE_EEPROM, returning 0 for word read"); Util::warn("Accessing cartridge backup type SAVE_EEPROM, returning 0 for word read");
return 0; return 0;
case SAVE_FLASH_1m: case SAVE_FLASH_1m:
if(flash.flash.is_open()) { if(flash.flash.is_mapped()) {
return flash.Read8(addr); return flash.Read8(addr);
} else { } else {
Util::panic("Invalid backup Read8 if save data is not initialized"); Util::panic("Invalid backup Read8 if save data is not initialized");
} }
case SAVE_SRAM_256k: case SAVE_SRAM_256k:
if(sram.is_open()) { if(sram.is_mapped()) {
return sram[addr & 0x8000]; return sram[addr & 0x8000];
} else { } else {
Util::panic("Invalid backup Read8 if save data is not initialized"); Util::panic("Invalid backup Read8 if save data is not initialized");
@@ -595,14 +595,14 @@ void Mem::BackupWrite8(u32 addr, u8 val) {
case SAVE_EEPROM_4k: case SAVE_EEPROM_16k: case SAVE_EEPROM_4k: case SAVE_EEPROM_16k:
Util::panic("Accessing cartridge with save type SAVE_EEPROM in write word"); Util::panic("Accessing cartridge with save type SAVE_EEPROM in write word");
case SAVE_FLASH_1m: case SAVE_FLASH_1m:
if(flash.flash.is_open()) { if(flash.flash.is_mapped()) {
flash.Write8(addr, val); flash.Write8(addr, val);
} else { } else {
Util::panic("Invalid backup Write8 if save data is not initialized"); Util::panic("Invalid backup Write8 if save data is not initialized");
} }
break; break;
case SAVE_SRAM_256k: case SAVE_SRAM_256k:
if(sram.is_open()) { if(sram.is_mapped()) {
sram[addr & 0x8000] = val; sram[addr & 0x8000] = val;
} else { } else {
Util::panic("Invalid backup Write8 if save data is not initialized"); Util::panic("Invalid backup Write8 if save data is not initialized");

View File

@@ -4,6 +4,7 @@ namespace n64 {
constexpr auto FLASH_SIZE = 1_mb; constexpr auto FLASH_SIZE = 1_mb;
void Flash::Reset() { void Flash::Reset() {
state = Idle;
if (flash.is_mapped()) { if (flash.is_mapped()) {
std::error_code error; std::error_code error;
flash.sync(error); flash.sync(error);
@@ -77,16 +78,16 @@ void Flash::CommandSetEraseOffs(u32 val) {
void Flash::CommandErase() { void Flash::CommandErase() {
state = FlashState::Erase; state = FlashState::Erase;
status = 0x11118004F0000000; status = 0x1111800800C20000LL;
} }
void Flash::CommandSetWriteOffs(u32 val) { void Flash::CommandSetWriteOffs(u32 val) {
writeOffs = (val & 0xffff) << 7; writeOffs = (val & 0xffff) << 7;
status = 0x1111800400C20000LL;
} }
void Flash::CommandWrite() { void Flash::CommandWrite() {
state = FlashState::Write; state = FlashState::Write;
status = 0x1111800400C20000LL;
} }
void Flash::CommandRead() { void Flash::CommandRead() {