Files
ci-libretro-fceumm/src/boards/468_cnrom.h
NewRisingSun 07284ca4af Add mapper 468
2022-12-30 23:56:50 +01:00

46 lines
1.0 KiB
C

#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