d97315ac |
1 | /* |
2 | #include "mapinc.h" |
3 | |
4 | static uint8 cmdin; |
5 | static uint8 cmd; |
6 | static uint8 regs[8]; |
7 | static uint8 master,chrm; |
8 | |
9 | static void DoPRG217(void) |
10 | { |
11 | if(master&0x80) |
12 | { |
13 | setprg16(0x8000,master&0x1F); |
14 | setprg16(0xc000,master&0x1F); |
15 | } |
16 | else |
17 | { |
18 | setprg8(0x8000,regs[1]); |
19 | setprg8(0xA000,regs[3]); |
20 | setprg8(0xC000,~1); |
21 | setprg8(0xE000,~0); |
22 | } |
23 | } |
24 | |
25 | static void DoCHR217(void) |
26 | { |
27 | uint32 base=(cmd&0x80)<<5; |
28 | int orie=(chrm&0x4)<<6; |
29 | |
30 | setchr2(0x0000^base,(orie|regs[0])>>1); |
31 | setchr2(0x0800^base,(orie|regs[7])>>1); |
32 | |
33 | setchr1(0x1000,orie|regs[5]); |
34 | setchr1(0x1400,orie|regs[2]); |
35 | setchr1(0x1800,orie|regs[6]); |
36 | setchr1(0x1c00,orie|regs[4]); |
37 | } |
38 | |
39 | static DECLFW(Write217_write) |
40 | { |
41 | // if(A==0x5000) |
42 | // { |
43 | // master=V; |
44 | // DoPRG217(); |
45 | // } |
46 | // else if(A==0x5001) |
47 | // { |
48 | // chrm=V; |
49 | // DoCHR217(); |
50 | // } |
51 | // else if(A==0x5007) |
52 | // { |
53 | // } |
54 | |
55 | switch(A&0xE001) |
56 | { |
57 | case 0x4000:master=V;DoPRG217();break; |
58 | case 0x8000:IRQCount=V;break; |
59 | case 0xc001:break; |
60 | case 0xe000:X6502_IRQEnd(FCEU_IQEXT);break; |
61 | case 0xe001:break; |
62 | case 0xa001:setmirror((V&1)^1);break; |
63 | case 0x8001:cmd=V;cmdin=1;DoPRG217();DoCHR217();break; |
64 | case 0xa000:if(!cmdin) break; |
65 | regs[cmd&7]=V; |
66 | DoPRG217(); |
67 | DoCHR217(); |
68 | cmdin=0; |
69 | break; |
70 | } |
71 | } |
72 | |
73 | static void hooko217(void) |
74 | { |
75 | if(IRQCount) |
76 | { |
77 | IRQCount--; |
78 | if(!IRQCount) |
79 | { |
80 | X6502_IRQBegin(FCEU_IQEXT); |
81 | } |
82 | } |
83 | } |
84 | |
85 | void Mapper217_init(void) |
86 | { |
87 | int x; |
88 | for(x=0;x<8;x++) regs[x]=0; |
89 | master=chrm=cmd=cmdin=IRQCount=0; |
90 | GameHBIRQHook=hooko217; |
91 | SetReadHandler(0x8000,0xFFFF,CartBR); |
92 | SetWriteHandler(0x5000,0xFFFF,Write217_write); |
93 | DoPRG217(); |
94 | DoCHR217(); |
95 | } |
43725da7 |
96 | */ |