mirror of
https://github.com/dborth/fceugx.git
synced 2024-11-02 07:25:06 +01:00
196 lines
3.5 KiB
C
196 lines
3.5 KiB
C
/* FCE Ultra - NES/Famicom Emulator
|
|
*
|
|
* Copyright notice for this file:
|
|
* Copyright (C) 2002 Xodnizel
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "mapinc.h"
|
|
|
|
#define CHRRAM (GameMemBlock)
|
|
static uint8 latche;
|
|
|
|
DECLFW(CPROMWrite)
|
|
{
|
|
latche=V&3;
|
|
setvram4(0x1000,CHRRAM+((V&3)<<12));
|
|
}
|
|
|
|
static void CPROMReset(void)
|
|
{
|
|
setprg32(0x8000,0);
|
|
setvram8(0);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
SetWriteHandler(0x8000,0xffff,CPROMWrite);
|
|
}
|
|
|
|
static void CPROMRestore(int version)
|
|
{
|
|
setvram4(0x1000,CHRRAM+((latche)<<12));
|
|
}
|
|
|
|
void CPROM_Init(CartInfo *info)
|
|
{
|
|
info->Power=CPROMReset;
|
|
GameStateRestore=CPROMRestore;
|
|
AddExState(&latche, 1, 0, "LATC");
|
|
}
|
|
|
|
DECLFW(CNROMWrite)
|
|
{
|
|
latche=V&3;
|
|
setchr8(V&3);
|
|
}
|
|
|
|
static void CNROMReset(void)
|
|
{
|
|
setprg16(0x8000,0);
|
|
setprg16(0xC000,1);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
SetWriteHandler(0x8000,0xffff,CNROMWrite);
|
|
}
|
|
|
|
static void CNROMRestore(int version)
|
|
{
|
|
setchr8(latche);
|
|
}
|
|
|
|
void CNROM_Init(CartInfo *info)
|
|
{
|
|
info->Power=CNROMReset;
|
|
GameStateRestore=CNROMRestore;
|
|
AddExState(&latche, 1, 0, "LATC");
|
|
}
|
|
|
|
static void NROM128Reset(void)
|
|
{
|
|
setprg16(0x8000,0);
|
|
setprg16(0xC000,0);
|
|
setchr8(0);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
}
|
|
|
|
static void NROM256Reset(void)
|
|
{
|
|
setprg16(0x8000,0);
|
|
setprg16(0xC000,1);
|
|
setchr8(0);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
}
|
|
|
|
void NROM128_Init(CartInfo *info)
|
|
{
|
|
info->Power=NROM128Reset;
|
|
}
|
|
|
|
void NROM256_Init(CartInfo *info)
|
|
{
|
|
info->Power=NROM256Reset;
|
|
}
|
|
|
|
static DECLFW(MHROMWrite)
|
|
{
|
|
setprg32(0x8000,V>>4);
|
|
setchr8(V);
|
|
latche=V;
|
|
}
|
|
|
|
static void MHROMReset(void)
|
|
{
|
|
setprg32(0x8000,0);
|
|
setchr8(0);
|
|
latche=0;
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
}
|
|
|
|
static void MHROMRestore(int version)
|
|
{
|
|
setprg32(0x8000,latche);
|
|
setchr8(latche);
|
|
SetWriteHandler(0x8000,0xffff,MHROMWrite);
|
|
}
|
|
|
|
void MHROM_Init(CartInfo *info)
|
|
{
|
|
info->Power=MHROMReset;
|
|
AddExState(&latche, 1, 0,"LATC");
|
|
PRGmask32[0]&=1;
|
|
CHRmask8[0]&=1;
|
|
GameStateRestore=MHROMRestore;
|
|
}
|
|
|
|
static void UNROMRestore(int version)
|
|
{
|
|
setprg16(0x8000,latche);
|
|
}
|
|
|
|
static DECLFW(UNROMWrite)
|
|
{
|
|
setprg16(0x8000,V);
|
|
latche=V;
|
|
}
|
|
|
|
static void UNROMReset(void)
|
|
{
|
|
setprg16(0x8000,0);
|
|
setprg16(0xc000,~0);
|
|
setvram8(CHRRAM);
|
|
SetWriteHandler(0x8000,0xffff,UNROMWrite);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
latche=0;
|
|
}
|
|
|
|
void UNROM_Init(CartInfo *info)
|
|
{
|
|
info->Power=UNROMReset;
|
|
PRGmask16[0]&=7;
|
|
AddExState(&latche, 1, 0, "LATC");
|
|
AddExState(CHRRAM, 8192, 0, "CHRR");
|
|
GameStateRestore=UNROMRestore;
|
|
}
|
|
|
|
static void GNROMSync()
|
|
{
|
|
setchr8(latche&3);
|
|
setprg32(0x8000,(latche>>4)&3);
|
|
}
|
|
|
|
static DECLFW(GNROMWrite)
|
|
{
|
|
latche=V&0x33;
|
|
GNROMSync();
|
|
}
|
|
|
|
static void GNROMStateRestore(int version)
|
|
{
|
|
GNROMSync();
|
|
}
|
|
|
|
static void GNROMReset(void)
|
|
{
|
|
latche=0;
|
|
GNROMSync();
|
|
SetWriteHandler(0x8000,0xffff,GNROMWrite);
|
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
|
}
|
|
|
|
void GNROM_Init(CartInfo *info)
|
|
{
|
|
info->Power=GNROMReset;
|
|
AddExState(&latche, 1, 0, "LATC");
|
|
GameStateRestore=GNROMStateRestore;
|
|
}
|