From c23a5c7b5fb70f06820e680a18d3d44942b1b6d7 Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Thu, 10 Apr 2025 18:35:30 +0200 Subject: [PATCH] Add mapper 559. --- src/boards/530.c | 1 - src/boards/559.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ src/ines.c | 1 + src/ines.h | 1 + 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/boards/559.c diff --git a/src/boards/530.c b/src/boards/530.c index eaf6d44..2f7dcd6 100644 --- a/src/boards/530.c +++ b/src/boards/530.c @@ -41,7 +41,6 @@ DECLFW(UNLAX5705_unscrambleAddress) { VRC24_writeReg(A &~0x1000 | A <<9 &0x1000, V); } - void UNLAX5705_power (void) { VRC24_power(); SetWriteHandler(0x8000, 0xFFFF, UNLAX5705_unscrambleAddress); diff --git a/src/boards/559.c b/src/boards/559.c new file mode 100644 index 0000000..a9a2c15 --- /dev/null +++ b/src/boards/559.c @@ -0,0 +1,71 @@ +/* FCE Ultra - NES/Famicom Emulator + * + * Copyright notice for this file: + * Copyright (C) 2025 NewRisingSun + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "mapinc.h" +#include "vrc2and4.h" + +static uint8 nt[4]; +static uint8 prg; + +static SFORMAT stateRegs[] ={ + { nt, 4, "EXPN" }, + { &prg, 1, "PRGC" }, + { 0 } +}; + +static void sync () { + int bank; + VRC24_syncWRAM(0); + VRC24_syncPRG(0x01F, 0x000); + VRC24_syncCHR(0x1FF, 0x000); + setmirrorw(nt[0] &1, nt[1] &1, nt[2] &1, nt[3] &1); +} + +int Mapper559_getPRGBank(int bank) { + return bank ==2? prg: VRC24_getPRGBank(bank); +} + +DECLFW(Mapper559_externalSelect) { + if (A &4) + nt[A &3] =V; + else + prg =V; + VRC24_Sync(); +} + +DECLFW(Mapper559_nibblizeData) { + VRC24_writeReg(A, V >>(A &0x400? 4: 0)); +} + +void Mapper559_power (void) { + nt[0] =nt[1] =0xE0; + nt[2] =nt[3] =0xE1; + prg =0xFE; + VRC24_power(); + SetWriteHandler(0xB000, 0xFFFF, Mapper559_nibblizeData); +} + +void Mapper559_Init (CartInfo *info) { + VRC24_init(info, sync, 0x400, 0x800, 1, 1, 0); + info->Power =Mapper559_power; + VRC24_GetPRGBank =Mapper559_getPRGBank; + VRC24_ExternalSelect =Mapper559_externalSelect; + AddExState(stateRegs, ~0, 0, 0); +} diff --git a/src/ines.c b/src/ines.c index c43f580..e871870 100644 --- a/src/ines.c +++ b/src/ines.c @@ -895,6 +895,7 @@ INES_BOARD_BEGIN() INES_BOARD( "JY-215", 556, Mapper556_Init ) INES_BOARD( "", 550, Mapper550_Init ) INES_BOARD( "YC-03-09", 558, Mapper558_Init ) + INES_BOARD( "Subor Sango II", 559, Mapper559_Init ) INES_BOARD_END() static uint32 iNES_get_mapper_id(void) diff --git a/src/ines.h b/src/ines.h index 36550cd..e737994 100644 --- a/src/ines.h +++ b/src/ines.h @@ -393,5 +393,6 @@ void Mapper554_Init(CartInfo *); void Mapper555_Init(CartInfo *); void Mapper556_Init(CartInfo *); void Mapper558_Init(CartInfo *); +void Mapper559_Init(CartInfo *); #endif