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