GBA: Remove some magic numbers for main pointers and save types size

This commit is contained in:
retro-wertz 2019-01-30 08:25:09 +08:00 committed by Rafael Kitover
parent 0697922179
commit e912c359f6
7 changed files with 116 additions and 93 deletions

View File

@ -11,11 +11,11 @@ int eepromByte = 0;
int eepromBits = 0; int eepromBits = 0;
int eepromAddress = 0; int eepromAddress = 0;
uint8_t eepromData[0x2000]; uint8_t eepromData[SIZE_EEPROM_8K];
uint8_t eepromBuffer[16]; uint8_t eepromBuffer[16];
bool eepromInUse = false; bool eepromInUse = false;
int eepromSize = 512; int eepromSize = SIZE_EEPROM_512;
variable_desc eepromSaveData[] = { variable_desc eepromSaveData[] = {
{ &eepromMode, sizeof(int) }, { &eepromMode, sizeof(int) },
@ -23,7 +23,7 @@ variable_desc eepromSaveData[] = {
{ &eepromBits, sizeof(int) }, { &eepromBits, sizeof(int) },
{ &eepromAddress, sizeof(int) }, { &eepromAddress, sizeof(int) },
{ &eepromInUse, sizeof(bool) }, { &eepromInUse, sizeof(bool) },
{ &eepromData[0], 512 }, { &eepromData[0], SIZE_EEPROM_512 },
{ &eepromBuffer[0], 16 }, { &eepromBuffer[0], 16 },
{ NULL, 0 } { NULL, 0 }
}; };
@ -31,7 +31,7 @@ variable_desc eepromSaveData[] = {
void eepromInit() void eepromInit()
{ {
eepromInUse = false; eepromInUse = false;
eepromSize = 512; eepromSize = SIZE_EEPROM_512;
memset(eepromData, 255, sizeof(eepromData)); memset(eepromData, 255, sizeof(eepromData));
} }
@ -48,7 +48,7 @@ void eepromSaveGame(uint8_t*& data)
{ {
utilWriteDataMem(data, eepromSaveData); utilWriteDataMem(data, eepromSaveData);
utilWriteIntMem(data, eepromSize); utilWriteIntMem(data, eepromSize);
utilWriteMem(data, eepromData, 0x2000); utilWriteMem(data, eepromData, SIZE_EEPROM_8K);
} }
void eepromReadGame(const uint8_t*& data, int version) void eepromReadGame(const uint8_t*& data, int version)
@ -56,10 +56,10 @@ void eepromReadGame(const uint8_t*& data, int version)
utilReadDataMem(data, eepromSaveData); utilReadDataMem(data, eepromSaveData);
if (version >= SAVE_GAME_VERSION_3) { if (version >= SAVE_GAME_VERSION_3) {
eepromSize = utilReadIntMem(data); eepromSize = utilReadIntMem(data);
utilReadMem(eepromData, data, 0x2000); utilReadMem(eepromData, data, SIZE_EEPROM_8K);
} else { } else {
// prior to 0.7.1, only 4K EEPROM was supported // prior to 0.7.1, only 4K EEPROM was supported
eepromSize = 512; eepromSize = SIZE_EEPROM_512;
} }
} }
@ -69,7 +69,7 @@ void eepromSaveGame(gzFile gzFile)
{ {
utilWriteData(gzFile, eepromSaveData); utilWriteData(gzFile, eepromSaveData);
utilWriteInt(gzFile, eepromSize); utilWriteInt(gzFile, eepromSize);
utilGzWrite(gzFile, eepromData, 0x2000); utilGzWrite(gzFile, eepromData, SIZE_EEPROM_8K);
} }
void eepromReadGame(gzFile gzFile, int version) void eepromReadGame(gzFile gzFile, int version)
@ -77,10 +77,10 @@ void eepromReadGame(gzFile gzFile, int version)
utilReadData(gzFile, eepromSaveData); utilReadData(gzFile, eepromSaveData);
if (version >= SAVE_GAME_VERSION_3) { if (version >= SAVE_GAME_VERSION_3) {
eepromSize = utilReadInt(gzFile); eepromSize = utilReadInt(gzFile);
utilGzRead(gzFile, eepromData, 0x2000); utilGzRead(gzFile, eepromData, SIZE_EEPROM_8K);
} else { } else {
// prior to 0.7.1, only 4K EEPROM was supported // prior to 0.7.1, only 4K EEPROM was supported
eepromSize = 512; eepromSize = SIZE_EEPROM_512;
} }
} }
@ -90,7 +90,7 @@ void eepromReadGameSkip(gzFile gzFile, int version)
utilReadDataSkip(gzFile, eepromSaveData); utilReadDataSkip(gzFile, eepromSaveData);
if (version >= SAVE_GAME_VERSION_3) { if (version >= SAVE_GAME_VERSION_3) {
utilGzSeek(gzFile, sizeof(int), SEEK_CUR); utilGzSeek(gzFile, sizeof(int), SEEK_CUR);
utilGzSeek(gzFile, 0x2000, SEEK_CUR); utilGzSeek(gzFile, SIZE_EEPROM_8K, SEEK_CUR);
} }
} }
#endif #endif
@ -150,7 +150,7 @@ void eepromWrite(uint32_t /* address */, uint8_t value)
if (cpuDmaCount == 0x11 || cpuDmaCount == 0x51) { if (cpuDmaCount == 0x11 || cpuDmaCount == 0x51) {
if (eepromBits == 0x11) { if (eepromBits == 0x11) {
eepromInUse = true; eepromInUse = true;
eepromSize = 0x2000; eepromSize = SIZE_EEPROM_8K;
eepromAddress = ((eepromBuffer[0] & 0x3F) << 8) | ((eepromBuffer[1] & 0xFF)); eepromAddress = ((eepromBuffer[0] & 0x3F) << 8) | ((eepromBuffer[1] & 0xFF));
if (!(eepromBuffer[0] & 0x40)) { if (!(eepromBuffer[0] & 0x40)) {
eepromBuffer[0] = bit; eepromBuffer[0] = bit;

View File

@ -18,11 +18,11 @@
#define FLASH_PROGRAM 8 #define FLASH_PROGRAM 8
#define FLASH_SETBANK 9 #define FLASH_SETBANK 9
uint8_t flashSaveMemory[FLASH_128K_SZ]; uint8_t flashSaveMemory[SIZE_FLASH1M];
int flashState = FLASH_READ_ARRAY; int flashState = FLASH_READ_ARRAY;
int flashReadState = FLASH_READ_ARRAY; int flashReadState = FLASH_READ_ARRAY;
int flashSize = 0x10000; int flashSize = SIZE_FLASH512;
int flashDeviceID = 0x1b; int flashDeviceID = 0x1b;
int flashManufacturerID = 0x32; int flashManufacturerID = 0x32;
int flashBank = 0; int flashBank = 0;
@ -30,7 +30,7 @@ int flashBank = 0;
static variable_desc flashSaveData[] = { static variable_desc flashSaveData[] = {
{ &flashState, sizeof(int) }, { &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) }, { &flashReadState, sizeof(int) },
{ &flashSaveMemory[0], 0x10000 }, { &flashSaveMemory[0], SIZE_FLASH512 },
{ NULL, 0 } { NULL, 0 }
}; };
@ -38,7 +38,7 @@ static variable_desc flashSaveData2[] = {
{ &flashState, sizeof(int) }, { &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) }, { &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) }, { &flashSize, sizeof(int) },
{ &flashSaveMemory[0], 0x20000 }, { &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 } { NULL, 0 }
}; };
@ -47,7 +47,7 @@ static variable_desc flashSaveData3[] = {
{ &flashReadState, sizeof(int) }, { &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) }, { &flashSize, sizeof(int) },
{ &flashBank, sizeof(int) }, { &flashBank, sizeof(int) },
{ &flashSaveMemory[0], 0x20000 }, { &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 } { NULL, 0 }
}; };
@ -109,7 +109,7 @@ void flashReadGameSkip(gzFile gzFile, int version)
void flashSetSize(int size) void flashSetSize(int size)
{ {
// log("Setting flash size to %d\n", size); // log("Setting flash size to %d\n", size);
if (size == 0x10000) { if (size == SIZE_FLASH512) {
flashDeviceID = 0x1b; flashDeviceID = 0x1b;
flashManufacturerID = 0x32; flashManufacturerID = 0x32;
} else { } else {
@ -118,8 +118,8 @@ void flashSetSize(int size)
} }
// Added to make 64k saves compatible with 128k ones // Added to make 64k saves compatible with 128k ones
// (allow wrongfuly set 64k saves to work for Pokemon games) // (allow wrongfuly set 64k saves to work for Pokemon games)
if ((size == 0x20000) && (flashSize == 0x10000)) if ((size == SIZE_FLASH1M) && (flashSize == SIZE_FLASH512))
memcpy((uint8_t*)(flashSaveMemory + 0x10000), (uint8_t*)(flashSaveMemory), 0x10000); memcpy((uint8_t*)(flashSaveMemory + SIZE_FLASH512), (uint8_t*)(flashSaveMemory), SIZE_FLASH512);
flashSize = size; flashSize = size;
} }
@ -208,7 +208,7 @@ void flashWrite(uint32_t address, uint8_t byte)
flashReadState = FLASH_READ_ARRAY; flashReadState = FLASH_READ_ARRAY;
} else if (byte == 0xA0) { } else if (byte == 0xA0) {
flashState = FLASH_PROGRAM; flashState = FLASH_PROGRAM;
} else if (byte == 0xB0 && flashSize == 0x20000) { } else if (byte == 0xB0 && flashSize == SIZE_FLASH1M) {
flashState = FLASH_SETBANK; flashState = FLASH_SETBANK;
} else { } else {
flashState = FLASH_READ_ARRAY; flashState = FLASH_READ_ARRAY;

View File

@ -75,11 +75,11 @@ static profile_segment* profilSegment = NULL;
#endif #endif
#ifdef BKPT_SUPPORT #ifdef BKPT_SUPPORT
uint8_t freezeWorkRAM[WORK_RAM_SIZE]; uint8_t freezeWorkRAM[SIZE_WRAM];
uint8_t freezeInternalRAM[0x8000]; uint8_t freezeInternalRAM[SIZE_IRAM];
uint8_t freezeVRAM[0x18000]; uint8_t freezeVRAM[0x18000];
uint8_t freezePRAM[0x400]; uint8_t freezePRAM[SIZE_PRAM];
uint8_t freezeOAM[0x400]; uint8_t freezeOAM[SIZE_OAM];
bool debugger_last; bool debugger_last;
#endif #endif
@ -458,7 +458,7 @@ variable_desc saveGameStruct[] = {
{ NULL, 0 } { NULL, 0 }
}; };
static int romSize = ROM_SIZE; static int romSize = SIZE_ROM;
#ifdef PROFILING #ifdef PROFILING
void cpuProfil(profile_segment* seg) void cpuProfil(profile_segment* seg)
@ -593,13 +593,13 @@ unsigned int CPUWriteState(uint8_t* data, unsigned size)
utilWriteIntMem(data, stopState); utilWriteIntMem(data, stopState);
utilWriteIntMem(data, IRQTicks); utilWriteIntMem(data, IRQTicks);
utilWriteMem(data, internalRAM, 0x8000); utilWriteMem(data, internalRAM, SIZE_IRAM);
utilWriteMem(data, paletteRAM, 0x400); utilWriteMem(data, paletteRAM, SIZE_PRAM);
utilWriteMem(data, workRAM, WORK_RAM_SIZE); utilWriteMem(data, workRAM, SIZE_WRAM);
utilWriteMem(data, vram, 0x20000); utilWriteMem(data, vram, SIZE_VRAM);
utilWriteMem(data, oam, 0x400); utilWriteMem(data, oam, SIZE_OAM);
utilWriteMem(data, pix, 4 * 240 * 160); utilWriteMem(data, pix, SIZE_PIX);
utilWriteMem(data, ioMem, 0x400); utilWriteMem(data, ioMem, SIZE_IOMEM);
eepromSaveGame(data); eepromSaveGame(data);
flashSaveGame(data); flashSaveGame(data);
@ -643,13 +643,13 @@ bool CPUReadState(const uint8_t* data, unsigned size)
IRQTicks = 0; IRQTicks = 0;
} }
utilReadMem(internalRAM, data, 0x8000); utilReadMem(internalRAM, data, SIZE_IRAM);
utilReadMem(paletteRAM, data, 0x400); utilReadMem(paletteRAM, data, SIZE_PRAM);
utilReadMem(workRAM, data, WORK_RAM_SIZE); utilReadMem(workRAM, data, SIZE_WRAM);
utilReadMem(vram, data, 0x20000); utilReadMem(vram, data, SIZE_VRAM);
utilReadMem(oam, data, 0x400); utilReadMem(oam, data, SIZE_OAM);
utilReadMem(pix, data, 4 * 240 * 160); utilReadMem(pix, data, SIZE_PIX);
utilReadMem(ioMem, data, 0x400); utilReadMem(ioMem, data, SIZE_IOMEM);
eepromReadGame(data, version); eepromReadGame(data, version);
flashReadGame(data, version); flashReadGame(data, version);
@ -705,13 +705,13 @@ static bool CPUWriteState(gzFile gzFile)
// new to version 0.8 // new to version 0.8
utilWriteInt(gzFile, IRQTicks); utilWriteInt(gzFile, IRQTicks);
utilGzWrite(gzFile, internalRAM, 0x8000); utilGzWrite(gzFile, internalRAM, SIZE_IRAM);
utilGzWrite(gzFile, paletteRAM, 0x400); utilGzWrite(gzFile, paletteRAM, SIZE_PRAM);
utilGzWrite(gzFile, workRAM, WORK_RAM_SIZE); utilGzWrite(gzFile, workRAM, SIZE_WRAM);
utilGzWrite(gzFile, vram, 0x20000); utilGzWrite(gzFile, vram, SIZE_VRAM);
utilGzWrite(gzFile, oam, 0x400); utilGzWrite(gzFile, oam, SIZE_OAM);
utilGzWrite(gzFile, pix, 4 * 241 * 162); utilGzWrite(gzFile, pix, SIZE_PIX);
utilGzWrite(gzFile, ioMem, 0x400); utilGzWrite(gzFile, ioMem, SIZE_IOMEM);
eepromSaveGame(gzFile); eepromSaveGame(gzFile);
flashSaveGame(gzFile); flashSaveGame(gzFile);
@ -819,16 +819,16 @@ static bool CPUReadState(gzFile gzFile)
} }
} }
utilGzRead(gzFile, internalRAM, 0x8000); utilGzRead(gzFile, internalRAM, SIZE_IRAM);
utilGzRead(gzFile, paletteRAM, 0x400); utilGzRead(gzFile, paletteRAM, SIZE_PRAM);
utilGzRead(gzFile, workRAM, WORK_RAM_SIZE); utilGzRead(gzFile, workRAM, SIZE_WRAM);
utilGzRead(gzFile, vram, 0x20000); utilGzRead(gzFile, vram, SIZE_VRAM);
utilGzRead(gzFile, oam, 0x400); utilGzRead(gzFile, oam, SIZE_OAM);
if (version < SAVE_GAME_VERSION_6) if (version < SAVE_GAME_VERSION_6)
utilGzRead(gzFile, pix, 4 * 240 * 160); utilGzRead(gzFile, pix, 4 * 240 * 160);
else else
utilGzRead(gzFile, pix, 4 * 241 * 162); utilGzRead(gzFile, pix, SIZE_PIX);
utilGzRead(gzFile, ioMem, 0x400); utilGzRead(gzFile, ioMem, SIZE_IOMEM);
if (skipSaveGameBattery) { if (skipSaveGameBattery) {
// skip eeprom data // skip eeprom data
@ -1448,20 +1448,20 @@ void SetMapMasks()
int CPULoadRom(const char* szFile) int CPULoadRom(const char* szFile)
{ {
romSize = ROM_SIZE; romSize = SIZE_ROM;
if (rom != NULL) { if (rom != NULL) {
CPUCleanUp(); CPUCleanUp();
} }
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
rom = (uint8_t*)malloc(romSize); rom = (uint8_t*)malloc(SIZE_ROM);
if (rom == NULL) { if (rom == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"ROM"); "ROM");
return 0; return 0;
} }
workRAM = (uint8_t*)calloc(1, WORK_RAM_SIZE); workRAM = (uint8_t*)calloc(1, SIZE_WRAM);
if (workRAM == NULL) { if (workRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"WRAM"); "WRAM");
@ -1513,35 +1513,35 @@ int CPULoadRom(const char* szFile)
temp++; temp++;
} }
bios = (uint8_t*)calloc(1, 0x4000); bios = (uint8_t*)calloc(1, SIZE_BIOS);
if (bios == NULL) { if (bios == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"BIOS"); "BIOS");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
internalRAM = (uint8_t*)calloc(1, 0x8000); internalRAM = (uint8_t*)calloc(1, SIZE_IRAM);
if (internalRAM == NULL) { if (internalRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"IRAM"); "IRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
paletteRAM = (uint8_t*)calloc(1, 0x400); paletteRAM = (uint8_t*)calloc(1, SIZE_PRAM);
if (paletteRAM == NULL) { if (paletteRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"PRAM"); "PRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
vram = (uint8_t*)calloc(1, 0x20000); vram = (uint8_t*)calloc(1, SIZE_VRAM);
if (vram == NULL) { if (vram == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"VRAM"); "VRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
oam = (uint8_t*)calloc(1, 0x400); oam = (uint8_t*)calloc(1, SIZE_OAM);
if (oam == NULL) { if (oam == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"OAM"); "OAM");
@ -1556,7 +1556,7 @@ int CPULoadRom(const char* szFile)
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
ioMem = (uint8_t*)calloc(1, 0x400); ioMem = (uint8_t*)calloc(1, SIZE_IOMEM);
if (ioMem == NULL) { if (ioMem == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"IO"); "IO");
@ -1574,20 +1574,20 @@ int CPULoadRom(const char* szFile)
int CPULoadRomData(const char* data, int size) int CPULoadRomData(const char* data, int size)
{ {
romSize = ROM_SIZE; romSize = SIZE_ROM;
if (rom != NULL) { if (rom != NULL) {
CPUCleanUp(); CPUCleanUp();
} }
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
rom = (uint8_t*)malloc(romSize); rom = (uint8_t*)malloc(SIZE_ROM);
if (rom == NULL) { if (rom == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"ROM"); "ROM");
return 0; return 0;
} }
workRAM = (uint8_t*)calloc(1, WORK_RAM_SIZE); workRAM = (uint8_t*)calloc(1, SIZE_WRAM);
if (workRAM == NULL) { if (workRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"WRAM"); "WRAM");
@ -1606,35 +1606,35 @@ int CPULoadRomData(const char* data, int size)
temp++; temp++;
} }
bios = (uint8_t*)calloc(1, 0x4000); bios = (uint8_t*)calloc(1, SIZE_BIOS);
if (bios == NULL) { if (bios == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"BIOS"); "BIOS");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
internalRAM = (uint8_t*)calloc(1, 0x8000); internalRAM = (uint8_t*)calloc(1, SIZE_IRAM);
if (internalRAM == NULL) { if (internalRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"IRAM"); "IRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
paletteRAM = (uint8_t*)calloc(1, 0x400); paletteRAM = (uint8_t*)calloc(1, SIZE_PRAM);
if (paletteRAM == NULL) { if (paletteRAM == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"PRAM"); "PRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
vram = (uint8_t*)calloc(1, 0x20000); vram = (uint8_t*)calloc(1, SIZE_VRAM);
if (vram == NULL) { if (vram == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"VRAM"); "VRAM");
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
oam = (uint8_t*)calloc(1, 0x400); oam = (uint8_t*)calloc(1, SIZE_OAM);
if (oam == NULL) { if (oam == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"OAM"); "OAM");
@ -1649,7 +1649,7 @@ int CPULoadRomData(const char* data, int size)
CPUCleanUp(); CPUCleanUp();
return 0; return 0;
} }
ioMem = (uint8_t*)calloc(1, 0x400); ioMem = (uint8_t*)calloc(1, SIZE_IOMEM);
if (ioMem == NULL) { if (ioMem == NULL) {
systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"),
"IO"); "IO");
@ -3381,15 +3381,15 @@ void CPUReset()
// clean registers // clean registers
memset(&reg[0], 0, sizeof(reg)); memset(&reg[0], 0, sizeof(reg));
// clean OAM // clean OAM
memset(oam, 0, 0x400); memset(oam, 0, SIZE_OAM);
// clean palette // clean palette
memset(paletteRAM, 0, 0x400); memset(paletteRAM, 0, SIZE_PRAM);
// clean picture // clean picture
memset(pix, 0, 4 * 160 * 240); memset(pix, 0, SIZE_PIX);
// clean vram // clean vram
memset(vram, 0, 0x20000); memset(vram, 0, SIZE_VRAM);
// clean io memory // clean io memory
memset(ioMem, 0, 0x400); memset(ioMem, 0, SIZE_IOMEM);
DISPCNT = 0x0080; DISPCNT = 0x0080;
DISPSTAT = 0x0000; DISPSTAT = 0x0000;

View File

@ -27,6 +27,30 @@ enum {
GBA_SAVE_NONE GBA_SAVE_NONE
}; };
enum {
SIZE_SRAM = 32768,
SIZE_FLASH512 = 65536,
SIZE_FLASH1M = 131072,
SIZE_EEPROM_512 = 512,
SIZE_EEPROM_8K = 8192
};
enum {
SIZE_ROM = 0x2000000,
SIZE_BIOS = 0x0004000,
SIZE_IRAM = 0x0008000,
SIZE_WRAM = 0x0040000,
SIZE_PRAM = 0x0000400,
SIZE_VRAM = 0x0020000,
SIZE_OAM = 0x0000400,
SIZE_IOMEM = 0x0000400,
#ifndef __LIBRETRO__
SIZE_PIX = (4 * 241 * 162)
#else
SIZE_PIX = (4 * 240 * 160)
#endif
};
typedef struct { typedef struct {
uint8_t* address; uint8_t* address;
uint32_t mask; uint32_t mask;
@ -162,9 +186,6 @@ extern struct EmulatedSystem GBASystem;
#define R14_FIQ 43 #define R14_FIQ 43
#define SPSR_FIQ 44 #define SPSR_FIQ 44
#define WORK_RAM_SIZE 0x40000
#define ROM_SIZE 0x2000000
#include "Cheats.h" #include "Cheats.h"
#include "EEprom.h" #include "EEprom.h"
#include "Flash.h" #include "Flash.h"

View File

@ -852,7 +852,7 @@ void BIOS_RegisterRamReset(uint32_t flags)
if (flags) { if (flags) {
if (flags & 0x01) { if (flags & 0x01) {
// clear work RAM // clear work RAM
memset(workRAM, 0, WORK_RAM_SIZE); memset(workRAM, 0, SIZE_WRAM);
} }
if (flags & 0x02) { if (flags & 0x02) {
// clear internal RAM // clear internal RAM

View File

@ -2575,14 +2575,14 @@ bool elfReadProgram(ELFHeader* eh, uint8_t* data, unsigned long data_size, int&
if (cpuIsMultiBoot) { if (cpuIsMultiBoot) {
unsigned effective_address = address - 0x2000000; unsigned effective_address = address - 0x2000000;
if (effective_address + section_size < WORK_RAM_SIZE) { if (effective_address + section_size < SIZE_WRAM) {
memcpy(&workRAM[effective_address], source, section_size); memcpy(&workRAM[effective_address], source, section_size);
size += section_size; size += section_size;
} }
} else { } else {
unsigned effective_address = address - 0x8000000; unsigned effective_address = address - 0x8000000;
if (effective_address + section_size < ROM_SIZE) { if (effective_address + section_size < SIZE_ROM) {
memcpy(&rom[effective_address], source, section_size); memcpy(&rom[effective_address], source, section_size);
size += section_size; size += section_size;
} }

View File

@ -322,13 +322,15 @@ size_t retro_get_memory_size(unsigned id)
case RETRO_MEMORY_SAVE_RAM: case RETRO_MEMORY_SAVE_RAM:
if ((saveType == GBA_SAVE_EEPROM) | (saveType == GBA_SAVE_EEPROM_SENSOR)) if ((saveType == GBA_SAVE_EEPROM) | (saveType == GBA_SAVE_EEPROM_SENSOR))
return eepromSize; return eepromSize;
if ((saveType == GBA_SAVE_SRAM) | (saveType == GBA_SAVE_FLASH)) if (saveType == GBA_SAVE_FLASH)
return (saveType == GBA_SAVE_SRAM) ? 0x8000 : flashSize; return flashSize;
if (saveType == GBA_SAVE_SRAM)
return SIZE_SRAM;
return 0; return 0;
case RETRO_MEMORY_SYSTEM_RAM: case RETRO_MEMORY_SYSTEM_RAM:
return 0x40000; return SIZE_WRAM;
case RETRO_MEMORY_VIDEO_RAM: case RETRO_MEMORY_VIDEO_RAM:
return 0x18000; return SIZE_VRAM - 0x2000; // usuable vram is only 0x18000
} }
} }
else if (type == IMAGE_GB) { else if (type == IMAGE_GB) {
@ -746,8 +748,8 @@ static void load_image_preferences(void)
buffer[4] = 0; buffer[4] = 0;
cpuSaveType = GBA_SAVE_AUTO; cpuSaveType = GBA_SAVE_AUTO;
flashSize = 65536; flashSize = SIZE_FLASH512;
eepromSize = 512; eepromSize = SIZE_EEPROM_512;
rtcEnabled = false; rtcEnabled = false;
mirroringEnable = false; mirroringEnable = false;
@ -773,11 +775,11 @@ static void load_image_preferences(void)
unsigned size = gbaover[found_no].saveSize; unsigned size = gbaover[found_no].saveSize;
if (cpuSaveType == GBA_SAVE_SRAM) if (cpuSaveType == GBA_SAVE_SRAM)
flashSize = 32768; flashSize = SIZE_SRAM;
else if (cpuSaveType == GBA_SAVE_FLASH) else if (cpuSaveType == GBA_SAVE_FLASH)
flashSize = size ? size : 65536; flashSize = (size == SIZE_FLASH1M) ? SIZE_FLASH1M : SIZE_FLASH512;
else if ((cpuSaveType == GBA_SAVE_EEPROM) || (cpuSaveType == GBA_SAVE_EEPROM_SENSOR)) else if ((cpuSaveType == GBA_SAVE_EEPROM) || (cpuSaveType == GBA_SAVE_EEPROM_SENSOR))
eepromSize = size ? size : 512; eepromSize = (size == SIZE_EEPROM_8K) ? SIZE_EEPROM_8K : SIZE_EEPROM_512;
} }
// gameID that starts with 'F' are classic/famicom games // gameID that starts with 'F' are classic/famicom games
@ -790,7 +792,7 @@ static void load_image_preferences(void)
saveType = cpuSaveType; saveType = cpuSaveType;
if (flashSize == 65536 || flashSize == 131072) if (flashSize == SIZE_FLASH512 || flashSize == SIZE_FLASH1M)
flashSetSize(flashSize); flashSetSize(flashSize);
rtcEnable(rtcEnabled); rtcEnable(rtcEnabled);