From 943cccd0feb2469eb7f1b2d88d54624ccf0d1905 Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Mon, 8 Sep 2025 17:05:45 +0200 Subject: [PATCH] Add mapper 579. --- src/boards/579.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ src/ines.c | 1 + src/ines.h | 1 + 3 files changed, 51 insertions(+) create mode 100644 src/boards/579.c diff --git a/src/boards/579.c b/src/boards/579.c new file mode 100644 index 0000000..0357e52 --- /dev/null +++ b/src/boards/579.c @@ -0,0 +1,49 @@ +/* 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 "asic_latch.h" + +static void sync () { + int prg = Latch_address >>2 &0x1F; + if (Latch_address &0x200) { + setprg16(0x8000, prg); + setprg16(0xC000, prg |7); + } else { + if (Latch_address &0x001) + setprg32(0x8000, prg >>1); + else { + setprg16(0x8000, prg); + setprg16(0xC000, prg); + } + } + SetupCartCHRMapping(0, CHRptr[0], CHRsize[0], Latch_address &0x80? 0: 1); + setchr8(0); + setmirror(Latch_address &0x02? MI_H: MI_V); +} + +void protectLatchBits (uint16 *address, uint8 *newValue, uint8 romValue) { /* Once bit 9 is set, only the inner bank bits can be modified. */ + if (Latch_address &0x200) *address = *address &0x01C | Latch_address &~0x01C; +} + +void Mapper579_Init (CartInfo *info) { + Latch_init(info, sync, 0x8000, 0xFFFF, protectLatchBits); + info->Reset = Latch_power; +} diff --git a/src/ines.c b/src/ines.c index 547adc5..bd4d6ef 100644 --- a/src/ines.c +++ b/src/ines.c @@ -948,6 +948,7 @@ INES_BOARD_BEGIN() INES_BOARD( "Bung Super Game Doctor", 561, Mapper561_562_Init ) INES_BOARD( "Venus Turbo Game Doctor", 562, Mapper561_562_Init ) INES_BOARD( "J-2020", 563, Mapper563_Init ) + INES_BOARD( "T-215", 579, Mapper579_Init ) INES_BOARD( "HN-02", 586, Mapper586_Init ) INES_BOARD_END() diff --git a/src/ines.h b/src/ines.h index 0991fed..423ba96 100644 --- a/src/ines.h +++ b/src/ines.h @@ -413,6 +413,7 @@ void Mapper558_Init(CartInfo *); void Mapper559_Init(CartInfo *); void Mapper561_562_Init(CartInfo *); void Mapper563_Init(CartInfo *); +void Mapper579_Init(CartInfo *); void Mapper586_Init(CartInfo *); void FFE_Init(CartInfo *);