Update GB/GBC memory maps (retro_memory_descriptors)

This commit is contained in:
retro-wertz 2019-07-28 20:28:00 +08:00
parent a727e22265
commit 2084a63e1f
1 changed files with 31 additions and 16 deletions

View File

@ -197,9 +197,7 @@ static struct palettes_t defaultGBPalettes[] = {
{
"Real GB on GBASP Colors",
{ 0x7BDE, 0x5778, 0x5640, 0x0000, 0x7BDE, 0x529C, 0x2990, 0x0000 },
},
{ NULL, { 0, 0, 0, 0, 0, 0, 0, 0 } }
}
};
static void set_gbPalette(void)
@ -1496,7 +1494,7 @@ bool retro_load_game(const struct retro_game_info *game)
gb_init();
unsigned addr, i;
struct retro_memory_descriptor desc[17];
struct retro_memory_descriptor desc[18];
struct retro_memory_map retromap;
memset(desc, 0, sizeof(desc));
@ -1519,22 +1517,39 @@ bool retro_load_game(const struct retro_game_info *game)
// $0000-$00FF Restart and Interrupt Vectors
// http://gameboy.mongenel.com/dmg/asmmemmap.html
for (addr = 0, i = 0; addr < 16; addr++) {
if (gbMemoryMap[addr] != NULL) {
desc[i].ptr = gbMemoryMap[addr];
desc[i].start = addr * 0x1000;
desc[i].len = 4096;
if (addr < 4) desc[i].flags = RETRO_MEMDESC_CONST;
if (addr == 13) continue;
if (addr == 14) continue;
if (addr == 12) { // WRAM, bank 0-1
if (!gbCgbMode) { // WRAM-GB
if (!gbMemory) continue;
desc[i].ptr = gbMemory + 0xC000;
} else { // WRAM GBC
if (!gbWram) continue;
desc[i].ptr = gbWram;
}
desc[i].start = addr * 0x1000;
desc[i].len = 0x2000;
i++;
continue;
} else { // Everything else map
if (gbMemoryMap[addr]) {
desc[i].ptr = gbMemoryMap[addr];
desc[i].start = addr * 0x1000;
desc[i].len = 0x1000;
if (addr < 4)
desc[i].flags = RETRO_MEMDESC_CONST;
i++;
}
}
}
if (gbCgbMode) { // banks 2-7 of GBC work ram banks at $10000
desc[i].ptr = (void*)gbWram;
desc[i].offset = 0x2000;
desc[i].start = 0x10000;
desc[i].select = 0xFFFFA000;
desc[i].len = 0x6000;
i++;
if (gbWram && gbCgbMode) { // banks 2-7 of GBC work ram banks at $10000
desc[i].ptr = gbWram;
desc[i].offset = 0x2000;
desc[i].start = 0x10000;
desc[i].select = 0xFFFFA000;
desc[i].len = 0x6000;
i++;
}
retromap.descriptors = desc;