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;