From 825cdb8788391b7afc8bb92845314f6c0d73ff12 Mon Sep 17 00:00:00 2001 From: NewRisingSun <8vytz1+dhp372pv94ebg@sharklasers.com> Date: Wed, 14 Apr 2021 21:03:59 +0200 Subject: [PATCH] Add lock bit, necessary for NT-234's Road Fighter --- src/boards/addrlatch.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/boards/addrlatch.c b/src/boards/addrlatch.c index 1cd7a26..e46b9ee 100644 --- a/src/boards/addrlatch.c +++ b/src/boards/addrlatch.c @@ -108,6 +108,12 @@ static DECLFR(BMCD1038Read) { return CartBR(A); } +static DECLFW(BMCD1038Write) { + /* Only recognize the latch write if the lock bit has not been set. Needed for NT-234 "Road Fighter" */ + if (~latche & 0x200) + LatchWrite(A, V); +} + static void BMCD1038Reset(void) { dipswitch++; dipswitch &= 3; @@ -117,9 +123,17 @@ static void BMCD1038Reset(void) { BMCD1038Sync(); } +static void BMCD1038Power(void) { + LatchPower(); + + /* Trap latch writes to enforce the "Lock" bit */ + SetWriteHandler(0x8000, 0xFFFF, BMCD1038Write); +} + void BMCD1038_Init(CartInfo *info) { Latch_Init(info, BMCD1038Sync, BMCD1038Read, 0x0000, 0x8000, 0xFFFF, 0); info->Reset = BMCD1038Reset; + info->Power = BMCD1038Power; AddExState(&dipswitch, 1, 0, "DIPSW"); }