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);
    }
}
Ejemplo n.º 2
0
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);
    }
}
Ejemplo n.º 3
0
static void write(RomMapperMatraINK* rm, UInt16 address, UInt8 value) 
{
    amdFlashWrite(rm->flash, address, value);
}