updated bords/mappers/stuff to 0.98.15, lots of them got broken, asmcore support...
[fceu.git] / boards / subor.c
1 #include "mapinc.h"\r
2 \r
3 static uint8 mode;\r
4 static uint8 DRegs[4];\r
5 \r
6 static SFORMAT StateRegs[]=\r
7 {\r
8  {DRegs, 4, "DREG"},\r
9  {0}\r
10 };\r
11 \r
12 static 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
50 static DECLFW(Mapper167_write)\r
51 {\r
52  DRegs[(A>>13)&0x03]=V;\r
53  Sync();\r
54 }\r
55 \r
56 static void StateRestore(int version)\r
57 {\r
58  Sync();\r
59 }\r
60 \r
61 void 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
71 void 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