add M-HT's neon scalers
[fceu.git] / boards / subor.c
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 }