#include "mapinc.h" static uint8 mode; static uint8 DRegs[4]; static SFORMAT StateRegs[]= { {DRegs, 4, "DREG"}, {0} }; static void Sync(void) { int base, bank; base = ((DRegs[0]^DRegs[1])&0x10)<<1; bank = (DRegs[2]^DRegs[3])&0x1f; if(DRegs[1]&0x08) { bank &= 0xfe; if(mode==0) { setprg16(0x8000,base+bank+1); setprg16(0xC000,base+bank+0); } else { setprg16(0x8000,base+bank+0); setprg16(0xC000,base+bank+1); } } else { if(DRegs[1]&0x04) { setprg16(0x8000,0x1f); setprg16(0xC000,base+bank); } else { setprg16(0x8000,base+bank); if(mode==0) setprg16(0xC000,0x20); else setprg16(0xC000,0x07); } } } static DECLFW(Mapper167_write) { DRegs[(A>>13)&0x03]=V; Sync(); } static void StateRestore(int version) { Sync(); } void Mapper166_init(void) { mode=1; DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0; Sync(); SetWriteHandler(0x8000,0xFFFF,Mapper167_write); GameStateRestore=StateRestore; AddExState(&StateRegs, ~0, 0, 0); } void Mapper167_init(void) { mode=0; DRegs[0]=DRegs[1]=DRegs[2]=DRegs[3]=0; Sync(); SetWriteHandler(0x8000,0xFFFF,Mapper167_write); GameStateRestore=StateRestore; AddExState(&StateRegs, ~0, 0, 0); }