/* mapper 33: Taito TC0190*/ static void map33_write(uint32 address, uint8 value) { int page = (address >> 13) & 3; int reg = address & 3; switch (page) { case 0: /* $800X */ switch (reg) { case 0: mmc_bankrom(8, 0x8000, value); break; case 1: mmc_bankrom(8, 0xA000, value); break; case 2: mmc_bankvrom(2, 0x0000, value); break; case 3: mmc_bankvrom(2, 0x0800, value); break; } break; case 1: /* $A00X */ { int loc = 0x1000 + (reg << 10); mmc_bankvrom(1, loc, value); } break; case 2: /* $C00X */ case 3: /* $E00X */ switch (reg) { case 0: /* irqs maybe ? */ //break; case 1: /* this doesn't seem to work just right */ if (value & 1) ppu_mirror(0, 0, 1, 1); /* horizontal */ else ppu_mirror(0, 1, 0, 1); break; default: break; } break; } }
/* mapper 15: Contra 100-in-1 */ static void map15_write(uint32 address, uint8 value) { int bank = value & 0x3F; uint8 swap = (value & 0x80) >> 7; switch (address & 0x3) { case 0: mmc_bankrom(8, 0x8000, (bank << 1) + swap); mmc_bankrom(8, 0xA000, (bank << 1) + (swap ^ 1)); mmc_bankrom(8, 0xC000, ((bank + 1) << 1) + swap); mmc_bankrom(8, 0xE000, ((bank + 1) << 1) + (swap ^ 1)); if (value & 0x40) ppu_mirror(0, 0, 1, 1); /* horizontal */ else ppu_mirror(0, 1, 0, 1); /* vertical */ break; case 1: mmc_bankrom(8, 0xC000, (bank << 1) + swap); mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1)); break; case 2: if (swap) { mmc_bankrom(8, 0x8000, (bank << 1) + 1); mmc_bankrom(8, 0xA000, (bank << 1) + 1); mmc_bankrom(8, 0xC000, (bank << 1) + 1); mmc_bankrom(8, 0xE000, (bank << 1) + 1); } else { mmc_bankrom(8, 0x8000, (bank << 1)); mmc_bankrom(8, 0xA000, (bank << 1)); mmc_bankrom(8, 0xC000, (bank << 1)); mmc_bankrom(8, 0xE000, (bank << 1)); } break; case 3: mmc_bankrom(8, 0xC000, (bank << 1) + swap); mmc_bankrom(8, 0xE000, (bank << 1) + (swap ^ 1)); if (value & 0x40) ppu_mirror(0, 0, 1, 1); /* horizontal */ else ppu_mirror(0, 1, 0, 1); /* vertical */ break; default: break; } }
static void map93_write(uint32 address, uint8 value) { UNUSED(address); /* ($8000-$FFFF) D7-D4 = switch $8000-$BFFF D0: mirror */ mmc_bankrom(16, 0x8000, value >> 4); if (value & 1) ppu_mirror(0, 1, 0, 1); /* vert */ else ppu_mirror(0, 0, 1, 1); /* horiz */ }