GBA Memory: Don't reallocate RAM every reset

This commit is contained in:
Vicki Pfau 2017-12-28 14:17:53 -05:00
parent 821c8988a3
commit 459d133855
2 changed files with 7 additions and 8 deletions

View File

@ -300,7 +300,6 @@ bool GBALoadNull(struct GBA* gba) {
GBAUnloadROM(gba);
gba->romVf = NULL;
gba->pristineRomSize = 0;
gba->memory.wram = anonymousMemoryMap(SIZE_WORKING_RAM);
#ifndef FIXED_ROM_BUFFER
gba->memory.rom = anonymousMemoryMap(SIZE_CART0);
#else
@ -328,7 +327,6 @@ bool GBALoadMB(struct GBA* gba, struct VFile* vf) {
gba->pristineRomSize = SIZE_WORKING_RAM;
}
gba->isPristine = true;
gba->memory.wram = anonymousMemoryMap(SIZE_WORKING_RAM);
memset(gba->memory.wram, 0, SIZE_WORKING_RAM);
vf->read(vf, gba->memory.wram, gba->pristineRomSize);
if (!gba->memory.wram) {

View File

@ -81,6 +81,7 @@ void GBAMemoryInit(struct GBA* gba) {
gba->memory.mirroring = false;
gba->memory.iwram = anonymousMemoryMap(SIZE_WORKING_IRAM);
gba->memory.wram = anonymousMemoryMap(SIZE_WORKING_RAM);
GBADMAInit(gba);
GBAVFameInit(&gba->memory.vfame);
@ -98,15 +99,15 @@ void GBAMemoryDeinit(struct GBA* gba) {
if (gba->memory.savedata.realVf) {
gba->memory.savedata.realVf->close(gba->memory.savedata.realVf);
}
if (gba->memory.agbPrintBuffer) {
mappedMemoryFree(gba->memory.agbPrintBuffer, SIZE_AGB_PRINT);
}
}
void GBAMemoryReset(struct GBA* gba) {
if (gba->memory.rom || gba->memory.fullBios || !gba->memory.wram) {
// Not multiboot
if (gba->memory.wram) {
mappedMemoryFree(gba->memory.wram, SIZE_WORKING_RAM);
}
gba->memory.wram = anonymousMemoryMap(SIZE_WORKING_RAM);
if (gba->memory.wram && gba->memory.rom) {
memset(gba->memory.wram, 0, SIZE_WORKING_RAM);
}
if (gba->memory.iwram) {