e2d0dd92 |
1 | #include "mapinc.h" |
2 | |
3 | static uint8 mode; |
4 | static uint8 DRegs[4]; |
5 | |
6 | static SFORMAT StateRegs[]= |
7 | { |
8 | {DRegs, 4, "DREG"}, |
9 | {0} |
10 | }; |
11 | |
12 | static void Sync(void) |
13 | { |
14 | int base, bank; |
15 | base = ((DRegs[0]^DRegs[1])&0x10)<<1; |
16 | bank = (DRegs[2]^DRegs[3])&0x1f; |
17 | |
18 | if(DRegs[1]&0x08) |
19 | { |
20 | bank &= 0xfe; |
21 | if(mode==0) |
22 | { |
23 | setprg16(0x8000,base+bank+1); |
24 | setprg16(0xC000,base+bank+0); |
25 | } |
26 | else |
27 | { |
28 | setprg16(0x8000,base+bank+0); |
29 | setprg16(0xC000,base+bank+1); |
30 | } |
31 | } |
32 | else |
33 | { |
34 | if(DRegs[1]&0x04) |
35 | { |
36 | setprg16(0x8000,0x1f); |
37 | setprg16(0xC000,base+bank); |
38 | } |
39 | else |
40 | { |
41 | setprg16(0x8000,base+bank); |
42 | if(mode==0) |
43 | setprg16(0xC000,0x20); |
44 | else |
45 | setprg16(0xC000,0x07); |
46 | } |
47 | } |
48 | } |
49 | |
50 | static DECLFW(Mapper167_write) |
51 | { |
52 | DRegs[(A>>13)&0x03]=V; |
53 | Sync(); |
54 | } |
55 | |
56 | static void StateRestore(int version) |
57 | { |
58 | Sync(); |
59 | } |
60 | |
61 | void Mapper166_init(void) |
62 | { |
63 | mode=1; |
64 | DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0; |
65 | Sync(); |
66 | SetWriteHandler(0x8000,0xFFFF,Mapper167_write); |
67 | GameStateRestore=StateRestore; |
68 | AddExState(&StateRegs, ~0, 0, 0); |
69 | } |
70 | |
71 | void Mapper167_init(void) |
72 | { |
73 | mode=0; |
74 | DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0; |
75 | Sync(); |
76 | SetWriteHandler(0x8000,0xFFFF,Mapper167_write); |
77 | GameStateRestore=StateRestore; |
78 | AddExState(&StateRegs, ~0, 0, 0); |
79 | } |