80 lines
1.3 KiB
C++
80 lines
1.3 KiB
C++
|
#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);
|
||
|
}
|