757f8dae |
1 | #include "../PicoInt.h" |
2 | |
3 | /* 12-in-1 */ |
4 | static unsigned int carthw_12in1_read16(unsigned int a, int realsize) |
5 | { |
6 | // ?? |
7 | elprintf(EL_UIO, "12-in-1: read [%06x] @ %06x", a, SekPc); |
8 | return 0; |
9 | } |
10 | |
11 | static void carthw_12in1_write8(unsigned int a, unsigned int d, int realsize) |
12 | { |
13 | int len; |
14 | |
15 | if (a < 0xA13000 || a >= 0xA13040) { |
16 | elprintf(EL_ANOMALY, "12-in-1: unexpected write [%06x] %02x @ %06x", a, d, SekPc); |
17 | } |
18 | |
19 | a &= 0x3f; a <<= 16; |
20 | len = Pico.romsize - a; |
21 | if (len <= 0) { |
22 | elprintf(EL_ANOMALY, "12-in-1: missing bank @ %06x", a); |
23 | return; |
24 | } |
25 | |
26 | memcpy(Pico.rom, Pico.rom + 0x200000 + a, len); |
27 | } |
28 | |
29 | static void carthw_12in1_reset(void) |
30 | { |
31 | carthw_12in1_write8(0xA13000, 0, 0); |
32 | } |
33 | |
34 | void carthw_12in1_startup(void) |
35 | { |
36 | void *tmp; |
37 | |
38 | elprintf(EL_STATUS, "12-in-1 mapper detected"); |
39 | |
40 | tmp = realloc(Pico.rom, 0x200000 + 0x200000); |
41 | if (tmp == NULL) |
42 | { |
43 | elprintf(EL_STATUS, "OOM"); |
44 | return; |
45 | } |
46 | memcpy(Pico.rom + 0x200000, Pico.rom, 0x200000); |
47 | |
48 | PicoRead16Hook = carthw_12in1_read16; |
49 | PicoWrite8Hook = carthw_12in1_write8; |
50 | PicoResetHook = carthw_12in1_reset; |
51 | } |
52 | |