random warning fixes
[fceu.git] / boards / t-227-1.c
CommitLineData
386f5371 1/* FCE Ultra - NES/Famicom Emulator\r
2 *\r
3 * Copyright notice for this file:\r
4 * Copyright (C) 2008 CaH4e3\r
5 *\r
6 * This program is free software; you can redistribute it and/or modify\r
7 * it under the terms of the GNU General Public License as published by\r
8 * the Free Software Foundation; either version 2 of the License, or\r
9 * (at your option) any later version.\r
10 *\r
11 * This program is distributed in the hope that it will be useful,\r
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
14 * GNU General Public License for more details.\r
15 *\r
16 * You should have received a copy of the GNU General Public License\r
17 * along with this program; if not, write to the Free Software\r
43725da7 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
386f5371 19 */\r
20\r
21// T-227-1, 820632, MMC3 based, multimenu, 60000in1 (0010) dip switches\r
22\r
23#include "mapinc.h"\r
24#include "mmc3.h"\r
25\r
26static uint8 reset_flag = 0x07;\r
27\r
28static void BMCT2271CW(uint32 A, uint8 V)\r
29{\r
30 uint32 va = V; \r
31 if(EXPREGS[0]&0x20)\r
32 {\r
33 va|=0x200;\r
34 va|=(EXPREGS[0]&0x10)<<4;\r
35 }\r
36 else\r
37 {\r
38 va&=0x7F;\r
39 va|=(EXPREGS[0]&0x18)<<4;\r
40 }\r
41 setchr1(A,va);\r
42}\r
43\r
44static void BMCT2271PW(uint32 A, uint8 V)\r
45{\r
46 uint32 va = V & 0x3F; \r
47 if(EXPREGS[0]&0x20)\r
48 {\r
49 va&=0x1F;\r
50 va|=0x40;\r
51 va|=(EXPREGS[0]&0x10)<<1;\r
52 }\r
53 else\r
54 {\r
55 va&=0x0F;\r
56 va|=(EXPREGS[0]&0x18)<<1;\r
57 }\r
58 switch(EXPREGS[0]&3)\r
59 {\r
60 case 0x00: setprg8(A,va); break;\r
61 case 0x02: \r
62 {\r
63 va=(va&0xFD)|((EXPREGS[0]&4)>>1);\r
64 if(A<0xC000)\r
65 {\r
66 setprg16(0x8000,va >> 1); \r
67 setprg16(0xC000,va >> 1); \r
68 }\r
69 break;\r
70 }\r
71 case 0x01: \r
72 case 0x03: if(A<0xC000) setprg32(0x8000,va >> 2); break;\r
73 }\r
74\r
75}\r
76 \r
77static DECLFW(BMCT2271LoWrite)\r
78{\r
79 if(!(EXPREGS[0]&0x80))\r
80 EXPREGS[0] = A & 0xFF;\r
81 FixMMC3PRG(MMC3_cmd);\r
82 FixMMC3CHR(MMC3_cmd);\r
83}\r
84\r
85static DECLFR(BMCT2271HiRead)\r
86{\r
87 uint32 av = A;\r
88 if(EXPREGS[0]&0x40) av = (av & 0xFFF0)|reset_flag;\r
89 return CartBR(av);\r
90}\r
91\r
92static void BMCT2271Reset(void)\r
93{\r
94 EXPREGS[0] = 0x00;\r
95 reset_flag++;\r
96 reset_flag&=0x0F;\r
97 MMC3RegReset();\r
98}\r
99\r
100static void BMCT2271Power(void)\r
101{\r
102 EXPREGS[0] = 0x00;\r
103 GenMMC3Power();\r
104 SetWriteHandler(0x6000,0x7FFF,BMCT2271LoWrite);\r
105 SetReadHandler(0x8000,0xFFFF,BMCT2271HiRead);\r
106}\r
107\r
108void BMCT2271_Init(CartInfo *info)\r
109{\r
110 GenMMC3_Init(info, 128, 128, 8, 0);\r
111 pwrap=BMCT2271PW;\r
112 cwrap=BMCT2271CW;\r
113 info->Power=BMCT2271Power;\r
114 info->Reset=BMCT2271Reset;\r
115 AddExState(EXPREGS, 1, 0, "EXPR");\r
116}\r