Add mapper 468
This commit is contained in:
45
src/boards/468_cnrom.h
Normal file
45
src/boards/468_cnrom.h
Normal file
@@ -0,0 +1,45 @@
|
||||
#define CNROM_reg regByte
|
||||
|
||||
static void CNROM_sync () {
|
||||
int OR =prgOR >>1;
|
||||
if (mapperFlags &2) {
|
||||
setprg16(0x8000, CNROM_reg[2] <<1 &0xE | mapperFlags &1 | OR &~0xF);
|
||||
setprg16(0xC000, CNROM_reg[2] <<1 &0xE | mapperFlags &1 | OR &~0xF);
|
||||
setchr8(CNROM_reg[0] &0x03);
|
||||
} else {
|
||||
OR >>=1;
|
||||
setprg32(0x8000, CNROM_reg[2] &0x7 | OR &~0x7);
|
||||
setchr8(CNROM_reg[0] &0x0F);
|
||||
}
|
||||
if (mapperFlags &8)
|
||||
setmirror(mapperFlags &0x04? MI_H: MI_V);
|
||||
else
|
||||
setmirror(CNROM_reg[1] &0x10? MI_1: MI_0);
|
||||
}
|
||||
|
||||
static DECLFW(CNROM_writeReg) {
|
||||
switch(A &0xE000) {
|
||||
case 0x8000: case 0xA000:
|
||||
CNROM_reg[0] =V;
|
||||
break;
|
||||
case 0xE000:
|
||||
CNROM_reg[2] =V;
|
||||
break;
|
||||
}
|
||||
sync();
|
||||
}
|
||||
|
||||
static DECLFW(BF9097_writeMirroring) {
|
||||
CNROM_reg[1] =V;
|
||||
sync();
|
||||
}
|
||||
|
||||
void CNROM_BF9097_reset(uint8 clearRegs) { /* This strange mapper is used for both (C)NROM games and FireHawk. What an absurd combination!*/
|
||||
sync =CNROM_sync;
|
||||
SetWriteHandler(0x8000, 0xFFFF, CNROM_writeReg);
|
||||
if (~mapperFlags &8)
|
||||
SetWriteHandler(0x9000, 0x9FFF, BF9097_writeMirroring);
|
||||
sync();
|
||||
}
|
||||
|
||||
#undef CNROM_reg
|
||||
Reference in New Issue
Block a user