From bf72633444f7437a0f88ba33998a54275f823a88 Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Tue, 1 Apr 2025 15:13:23 +0200 Subject: [PATCH] Mapper 414: Add menu cycling. --- src/boards/414.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/boards/414.c b/src/boards/414.c index f8c4380..e57e642 100644 --- a/src/boards/414.c +++ b/src/boards/414.c @@ -22,14 +22,20 @@ static uint8 latch_data; static uint32 latch_addr; +static uint8 dipswitch; static SFORMAT StateRegs[] = { { &latch_addr, 4, "ADDR" }, { &latch_data, 1, "DATA" }, + { &dipswitch, 1, "DIPS" }, { 0 } }; +static DECLFR(Mapper414_ReadOB) { + return X.DB; +} + static void Sync(void) { if (latch_addr & 0x2000) { /* NROM-256 */ setprg32(0x8000, latch_addr >> 2); @@ -37,6 +43,7 @@ static void Sync(void) { setprg16(0x8000, latch_addr >> 1); setprg16(0xC000, latch_addr >> 1); } + SetReadHandler(0xC000, 0xFFFF, ~latch_addr &0x100 && latch_addr &dipswitch? Mapper414_ReadOB: CartBR); setchr8(latch_data); setmirror((latch_addr & 1) ^ 1); } @@ -48,17 +55,23 @@ static DECLFW(M414Write) { } static void M414Power(void) { + dipswitch =0; Sync(); SetReadHandler(0x8000, 0xFFFF, CartBR); SetWriteHandler(0x8000, 0xFFFF, M414Write); } +static void M414Reset(void) { + dipswitch =dipswitch ==0xF0? 0x00: (dipswitch <<1 | 0x10); +} + static void StateRestore(int version) { Sync(); } void Mapper414_Init(CartInfo *info) { info->Power = M414Power; + info->Reset = M414Reset; GameStateRestore = StateRestore; AddExState(&StateRegs, ~0, 0, 0); }