shithub: sms

Download patch

ref: 6437450b9de805c51023c13db8bafe25b547b777
parent: 5ea5c3cd1df2baf4463914f3873a322068d15429
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Tue Jul 2 11:29:27 EDT 2024

Sega mapper

--- a/mem.c
+++ b/mem.c
@@ -22,6 +22,8 @@
 uint8_t z80bus = 0;
 uint16_t z80bank;
 
+int slotaddr[3] = {0, 0, 0};
+
 uint8_t
 z80read(uint16_t a)
 {
@@ -28,8 +30,14 @@
 	printf("z80read %x\n", a);
 	uint16_t v;
 
-	if (a < 0xC000)
+	if (a < 0x400)
 		return rom[a];
+	else if (a < 0x4000)
+		return rom[a + slotaddr[0]];
+	else if (a < 0x8000)
+		return rom[a - 0x4000 + slotaddr[1]];
+	else if (a < 0xC000)
+		return rom[a - 0x8000 + slotaddr[2]];
 	else
 		return mem[a];
 }
@@ -53,25 +61,20 @@
         switch (a)
         {
             case 0xFFFC:
-            {
                 printf("Persistent RAM");
                 break;
-            }
             case 0xFFFD:
-            {
                 printf("Switch mapper slot 0 to %d\n", v);
+				slotaddr[0] = v * 0x4000;
                 break;
-            }
             case 0xFFFE:
-            {
                 printf("Switch mapper slot 1 to %d\n", v);
+				slotaddr[1] = v * 0x4000;
                 break;
-            }
             case 0xFFFF:
-            {
                 printf("Switch mapper slot 2 to %d\n", v);
+				slotaddr[2] = v * 0x4000;
                 break;
-            }
 		}
 	}
 }
--