diff options
| author | Peter Fors <peter.fors@mindkiller.com> | 2025-04-02 13:17:35 +0200 |
|---|---|---|
| committer | Peter Fors <peter.fors@mindkiller.com> | 2025-04-02 13:17:35 +0200 |
| commit | 971e51eebbf088f1ac590da1fc57e803eb1ee8cf (patch) | |
| tree | 887bac941f0d9e540e3b1ba5c27c6426e76746b2 /mapper.c | |
| parent | 6f63478cf43d4c0b77cabe3f76710f2b9f0c912e (diff) | |
add mapper #66 (GXROM)
Diffstat (limited to 'mapper.c')
| -rw-r--r-- | mapper.c | 51 |
1 files changed, 32 insertions, 19 deletions
@@ -3,27 +3,40 @@ #include "mapper_nrom.c" // #include "mapper_mmc1.c" // #include "mapper_uxrom.c" +#include "mapper_gxrom.c" -static void mapper_setup(struct nes_state *state) { - printf("Mapper: %d\n", state->ines.mapper); - switch(state->ines.mapper) { - case 0: - state->mapper.read = mapper_nrom_read; - state->mapper.write = mapper_nrom_write; - state->mapper.tick = mapper_nrom_tick; - state->mapper.init = mapper_nrom_init; - state->mapper.init(state); - break; +struct mapper_entry { + int id; + uint8_t (*read)(struct nes_state *state, uint32_t addr); + void (*write)(struct nes_state *state, uint32_t addr, uint8_t value); + void (*tick)(struct nes_state *state); + void (*init)(struct nes_state *state); +}; - default: - // fallback: NROM-compatible - state->mapper.read = mapper_nrom_read; - state->mapper.write = mapper_nrom_write; - state->mapper.tick = mapper_nrom_tick; - state->mapper.init = mapper_nrom_init; +static struct mapper_entry mapper_table[] = { + { 0, mapper_nrom_read, mapper_nrom_write, mapper_nrom_tick, mapper_nrom_init }, + { 66, mapper_66_read, mapper_66_write, mapper_66_tick, mapper_66_init }, + // { 1, mapper_mmc1_read, ... }, etc +}; + +static void mapper_setup(struct nes_state *state) { + uint32_t mapper = state->ines.mapper; + for(uint32_t i = 0; i < sizeof(mapper_table)/sizeof(mapper_table[0]); i++) { + if(mapper_table[i].id == mapper) { +printf("%d\n", mapper); + state->mapper.read = mapper_table[i].read; + state->mapper.write = mapper_table[i].write; + state->mapper.tick = mapper_table[i].tick; + state->mapper.init = mapper_table[i].init; state->mapper.init(state); - break; + return; + } } -} - + printf("Unsupported mapper %d, falling back to NROM\n", mapper); + state->mapper.read = mapper_nrom_read; + state->mapper.write = mapper_nrom_write; + state->mapper.tick = mapper_nrom_tick; + state->mapper.init = mapper_nrom_init; + state->mapper.init(state); +} |
