Example #1
0
static void reset(RomMapperObsonet* rm)
{
    rm->regBank   = 0;
    rm->romMapper = 0;
    amdFlashReset(rm->amdFlash);
    rtl8019Reset(rm->rtl8019);
    rm->flashPage = amdFlashGetPage(rm->amdFlash, rm->romMapper * 0x4000);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 0, rm->flashPage, 1, 0);
}
static void updateMapper(RomMapperNoWind* rm, UInt8 page)
{
    rm->romMapper = page & 0x1f;
    rm->flashPage = amdFlashGetPage(rm->amdFlash, rm->romMapper * 0x4000);

    slotMapPage(rm->slot, rm->sslot, rm->startPage + 0, NULL, 0, 0);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 1, NULL, 0, 0);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 2, rm->flashPage, 1, 0);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 3, rm->flashPage + 0x2000, 1, 0);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 4, NULL,          0, 0);
    slotMapPage(rm->slot, rm->sslot, rm->startPage + 5, rm->flashPage + 0x2000, 1, 0);
}
Example #3
0
static void loadState(RomMapperObsonet* rm)
{
    SaveState* state = saveStateOpenForRead("mapperObsonet");

    rm->romMapper = (UInt8)saveStateGet(state, "romMapper", 0);
    rm->regBank = (UInt8)saveStateGet(state, "regBank", 0);

    saveStateClose(state);

    amdFlashLoadState(rm->amdFlash);
    rtl8019LoadState(rm->rtl8019);

    rm->flashPage = amdFlashGetPage(rm->amdFlash, rm->romMapper * 0x4000);

    slotMapPage(rm->slot, rm->sslot, rm->startPage + 0, rm->flashPage, 1, 0);
}
static void mapPage(RomMapperMegaFlashRomScc* rm, int bank, int page)
{
    int readEnable;
    UInt8* bankData;

    rm->romMapper[bank] = page & (rm->size / 0x2000 - 1);
    rm->flashPage[bank] = page;

    if (rm->flashPage[bank] < 0) {
        bankData = rm->romData + page * 0x2000;
    }
    else {
        bankData = amdFlashGetPage(rm->flash, rm->flashPage[bank] * 0x2000);
    }

    readEnable = (bank == 2 && rm->sccEnable) || rm->flashPage[bank] >= 0 ? 0 : 1;

    slotMapPage(rm->slot, rm->sslot, rm->startPage + bank, bankData, readEnable, 0);
}
Example #5
0
static void write(RomMapperObsonet* rm, UInt16 address, UInt8 value) 
{
    if ((address & 0x3fe0) == 0x3fe0) {
        if (rm->regBank < 3) {
//        printf("W %d: %.4x  %.2x\n", rm->regBank, address & 0x1f, value);
        }
        switch (address & 0x1f) {
        case 0:
            rm->regBank = value >> 6;
            break;
        case 2:
            if (rm->regBank == 3) {
                rm->romMapper = value & 0x1f;
                rm->flashPage = amdFlashGetPage(rm->amdFlash, rm->romMapper * 0x4000);
                slotMapPage(rm->slot, rm->sslot, rm->startPage + 0, rm->flashPage, 1, 0);
            }
            break;
        }
        rtl8019Write(rm->rtl8019, address & 0x1f, value);
    }
    else if (address < 0x4000) {