diff --git a/src/boards/eh8813a.c b/src/boards/eh8813a.c index 2c491a3..ab15b39 100644 --- a/src/boards/eh8813a.c +++ b/src/boards/eh8813a.c @@ -21,17 +21,18 @@ #include "mapinc.h" static uint16 addrlatch; -static uint8 datalatch; +static uint8 datalatch, hw_mode; static SFORMAT StateRegs[] = { { &addrlatch, 2, "ADRL" }, { &datalatch, 1, "DATL" }, + { &hw_mode, 1, "HWMO" }, { 0 } }; static void Sync(void) { - uint8 prg = (addrlatch & 7) | ((addrlatch & 0x40) >> 3); + uint8 prg = (addrlatch & 7); setchr8(datalatch); if(addrlatch & 0x80) { setprg16(0x8000,prg); @@ -50,15 +51,23 @@ static DECLFW(EH8813AWrite) { Sync(); } +static DECLFR(EH8813ARead) { + if (addrlatch & 0x40) + A= (A & 0xFFF0) + hw_mode; + return CartBR(A); +} + static void EH8813APower(void) { - addrlatch = datalatch = 0; + addrlatch = datalatch = hw_mode = 0; Sync(); - SetReadHandler(0x8000, 0xFFFF, CartBR); + SetReadHandler(0x8000, 0xFFFF, EH8813ARead); SetWriteHandler(0x8000, 0xFFFF, EH8813AWrite); } static void EH8813AReset(void) { addrlatch = datalatch = 0; + hw_mode = (hw_mode + 1) & 0xF; + FCEU_printf("Hardware Switch is %01X\n", hw_mode); Sync(); }