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