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;
- }
}
}
}
--
⑨