Showing with 13 additions and 4 deletions.
  1. +13 −4 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();
}