mappers updated to 0.98.16
[fceu.git] / boards / 8157.c
1 /* FCE Ultra - NES/Famicom Emulator
2  *
3  * Copyright notice for this file:
4  *  Copyright (C) 2005 CaH4e3
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include "mapinc.h"
22
23 static uint16 cmdreg;
24 static uint8 invalid_data;
25 static SFORMAT StateRegs[]=
26 {
27   {&cmdreg, 2, "CMDREG"},
28   {0}
29 };
30
31 static void Sync(void)
32 {
33   setprg16r((cmdreg&0x060)>>5,0x8000,(cmdreg&0x01C)>>2);
34   setprg16r((cmdreg&0x060)>>5,0xC000,(cmdreg&0x200)?(~0):0);
35   setmirror(((cmdreg&2)>>1)^1);
36 }
37
38 static DECLFR(UNL8157Read)
39 {
40   if(invalid_data&&cmdreg&0x100)
41     return 0xFF;
42   else
43     return CartBR(A);
44 }
45
46 static DECLFW(UNL8157Write)
47 {
48   cmdreg=A;
49   Sync();
50 }
51
52 static void UNL8157Power(void)
53 {
54   setchr8(0);
55   SetWriteHandler(0x8000,0xFFFF,UNL8157Write);
56   SetReadHandler(0x8000,0xFFFF,UNL8157Read);
57   cmdreg=0x200;
58   invalid_data=1;
59   Sync();
60 }
61
62 static void UNL8157Reset(void)
63 {
64   cmdreg=0;
65   invalid_data^=1;
66   Sync();
67 }
68
69 static void UNL8157Restore(int version)
70 {
71   Sync();
72 }
73
74 void UNL8157_Init(CartInfo *info)
75 {
76   info->Power=UNL8157Power;
77   info->Reset=UNL8157Reset;
78   GameStateRestore=UNL8157Restore;
79   AddExState(&StateRegs, ~0, 0, 0);
80 }