static void write(RomMapperMegaFlashRomScc* rm, UInt16 address, UInt8 value) { int change = 0; int bank; address += 0x4000; if (address >= 0x9800 && address < 0xa000 && rm->sccEnable) { sccWrite(rm->scc, address & 0xff, value); } address -= 0x4000; bank = address >> 13; if (rm->flashPage[bank] >= 0) { amdFlashWrite(rm->flash, (address & 0x1fff) + 0x2000 * rm->flashPage[bank], value); } if ((address - 0x1000) & 0x1800) { return; } if (bank == 2) { int newEnable = (value & 0x3F) == 0x3F; change = rm->sccEnable != newEnable; rm->sccEnable = newEnable; } value &= rm->romMask; if (rm->romMapper[bank] != value || change) { mapPage(rm, bank, value); } }
static void write(RomMapperNoWind* rm, UInt16 address, UInt8 value) { if (address < 0x4000) { amdFlashWrite(rm->amdFlash, address + 0x4000 * rm->romMapper, value); return; } if ((address >= 0x4000 && address < 0x6000) || (address >= 0x8000 && address < 0xa000)) { #ifdef USE_NOWIND_DLL if (nowindusb_write) nowindusb_write(value); #endif return; } if ((address >= 0x6000 && address < 0x8000) || (address >= 0xa000 && address < 0xc000)) { // FIXME: Is the page selected based on address or data lines? updateMapper(rm, value & 0x1f); } }
static void write(RomMapperMatraINK* rm, UInt16 address, UInt8 value) { amdFlashWrite(rm->flash, address, value); }