Fix goofy ahh segfault
This commit is contained in:
@@ -10,10 +10,17 @@
|
||||
#define MEMPAK_SIZE 32768
|
||||
|
||||
namespace n64 {
|
||||
void PIF::LoadMempak(fs::path path) {
|
||||
if (mempak)
|
||||
free(mempak);
|
||||
PIF::PIF() {
|
||||
mempak = (u8*)calloc(MEMPAK_SIZE, 1);
|
||||
}
|
||||
|
||||
void PIF::Reset() {
|
||||
memset(joybusDevices, 0, sizeof(JoybusDevice) * 6);
|
||||
memset(bootrom, 0, PIF_BOOTROM_SIZE);
|
||||
memset(ram, 0, PIF_RAM_SIZE);
|
||||
}
|
||||
|
||||
void PIF::LoadMempak(fs::path path) {
|
||||
mempakPath = path.replace_extension(".mempak").string();
|
||||
FILE* f = fopen(mempakPath.c_str(), "rb");
|
||||
if (!f) {
|
||||
@@ -79,11 +86,15 @@ void PIF::LoadEeprom(SaveType saveType, fs::path path) {
|
||||
|
||||
PIF::~PIF() {
|
||||
FILE* f = fopen(mempakPath.c_str(), "wb");
|
||||
fwrite(mempak, 1, MEMPAK_SIZE, f);
|
||||
fclose(f);
|
||||
if(f) {
|
||||
fwrite(mempak, 1, MEMPAK_SIZE, f);
|
||||
fclose(f);
|
||||
}
|
||||
f = fopen(eepromPath.c_str(), "wb");
|
||||
fwrite(eeprom, 1, eepromSize, f);
|
||||
fclose(f);
|
||||
if(f) {
|
||||
fwrite(eeprom, 1, eepromSize, f);
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
enum CMDIndexes {
|
||||
|
||||
@@ -91,7 +91,9 @@ enum CICType {
|
||||
struct CartInfo;
|
||||
|
||||
struct PIF {
|
||||
PIF();
|
||||
~PIF();
|
||||
void Reset();
|
||||
void LoadMempak(fs::path);
|
||||
void LoadEeprom(SaveType, fs::path);
|
||||
void ProcessCommands(Mem&);
|
||||
@@ -115,13 +117,13 @@ struct PIF {
|
||||
std::string mempakPath{}, eepromPath{};
|
||||
size_t eepromSize{};
|
||||
|
||||
u8 Read(u32 addr) {
|
||||
FORCE_INLINE u8 Read(u32 addr) {
|
||||
addr &= 0x7FF;
|
||||
if(addr < 0x7c0) return bootrom[addr];
|
||||
return ram[addr & PIF_RAM_DSIZE];
|
||||
}
|
||||
|
||||
void Write(u32 addr, u8 val) {
|
||||
FORCE_INLINE void Write(u32 addr, u8 val) {
|
||||
addr &= 0x7FF;
|
||||
if(addr < 0x7c0) return;
|
||||
ram[addr & PIF_RAM_DSIZE] = val;
|
||||
|
||||
@@ -11,9 +11,7 @@ void SI::Reset() {
|
||||
status.raw = 0;
|
||||
dramAddr = 0;
|
||||
pifAddr = 0;
|
||||
memset(&pif.joybusDevices, 0, sizeof(JoybusDevice) * 6);
|
||||
memset(&pif.bootrom, 0, PIF_BOOTROM_SIZE);
|
||||
memset(&pif.ram, 0, PIF_RAM_SIZE);
|
||||
pif.Reset();
|
||||
}
|
||||
|
||||
auto SI::Read(MI& mi, u32 addr) const -> u32 {
|
||||
|
||||
Reference in New Issue
Block a user