Mercurial > repos > blastem
diff sms.c @ 2325:26597f9805b4
Initial Codemasters mapper support
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 18 Jul 2023 21:46:09 -0700 |
parents | 2eda5f81f91e |
children | 03e6ac327ba0 |
line wrap: on
line diff
--- a/sms.c Thu Jun 15 09:36:11 2023 -0700 +++ b/sms.c Tue Jul 18 21:46:09 2023 -0700 @@ -178,6 +178,34 @@ return vcontext; } +static z80_context *codemasters_write(uint8_t bank, z80_context *z80, uint8_t value) +{ + sms_context *sms = z80->system; + if (value != sms->bank_regs[bank]) { + sms->bank_regs[bank] = value; + value &= 0x7F; + z80->mem_pointers[bank] = sms->rom + (value << 14 & (sms->rom_size-1)); + z80_invalidate_code_range(z80, bank * 0x4000, bank * 0x4000 + 0x4000); + } + return z80; +} + +void *sms_codemasters_bank0_write(uint32_t location, void *vcontext, uint8_t value) +{ + return codemasters_write(0, vcontext, value); +} + +void *sms_codemasters_bank1_write(uint32_t location, void *vcontext, uint8_t value) +{ + return codemasters_write(1, vcontext, value); +} + +void *sms_codemasters_bank2_write(uint32_t location, void *vcontext, uint8_t value) +{ + //TODO: Handle Ernie Els Golf cart RAM + return codemasters_write(2, vcontext, value); +} + uint8_t debug_commands(system_header *system, char *input_buf) { sms_context *sms = (sms_context *)system;