Beispiel #1
0
int cbm2rom_load_kernal(const char *rom_name)
{
    if (!rom_loaded)
        return 0;  /* init not far enough */

    /* De-initialize kbd-buf, autostart and tape stuff here before
       reloading the ROM the traps are installed in.  */
    kbdbuf_init(0, 0, 0, 0);
    autostart_init(0, 0, 0, 0, 0, 0);
    tape_init(&tapeinit);

    /* Load Kernal ROM.  */
    if (!util_check_null_string(rom_name)) {
        if (sysfile_load(rom_name, mem_rom + 0xe000, 0x2000, 0x2000) < 0) {
            log_error(cbm2rom_log, "Couldn't load ROM `%s'.", rom_name);
            return -1;
        }
    }

    return cbm2rom_checksum();
}
Beispiel #2
0
static int mem_read_rom_snapshot_module(snapshot_t *p)
{
    BYTE vmajor, vminor;
    snapshot_module_t *m;
    BYTE config;
    int i, trapfl;

    m = snapshot_module_open(p, module_rom_name, &vmajor, &vminor);
    if (m == NULL)
        return 0;       /* optional */

    if (vmajor != CBM2ROM_DUMP_VER_MAJOR) {
        snapshot_module_close(m);
        return -1;
    }

    /* disable traps before loading the ROM */
    resources_get_int("VirtualDevices", &trapfl);
    resources_set_int("VirtualDevices", 0);

    SMR_B(m, &config);

    /* kernal */
    SMR_BA(m, mem_rom + 0xe000, 0x2000);
    /* basic */
    SMR_BA(m, mem_rom + 0x8000, 0x4000);

    /* chargen */
    if (config & 32) {
        SMR_BA(m, mem_chargen_rom, 0x1000);
    } else {
        SMR_BA(m, mem_chargen_rom, 0x0800);
        SMR_BA(m, mem_chargen_rom + 0x1000, 0x0800);
        /* Inverted chargen into second half. This is a hardware feature.  */
        for (i = 0; i < 2048; i++) {
            mem_chargen_rom[i + 2048] = mem_chargen_rom[i] ^ 0xff;
            mem_chargen_rom[i + 6144] = mem_chargen_rom[i + 4096] ^ 0xff;
        }
    }

    if (config & 2) {
        SMR_BA(m, mem_rom + 0x1000, 0x1000);
    }
    if (config & 4) {
        SMR_BA(m, mem_rom + 0x2000, 0x2000);
    }
    if (config & 8) {
        SMR_BA(m, mem_rom + 0x4000, 0x2000);
    }
    if (config & 16) {
        SMR_BA(m, mem_rom + 0x6000, 0x2000);
    }

    log_warning(cbm2_snapshot_log,
                "Dumped Romset files and saved settings will "
                "represent\nthe state before loading the snapshot!");

    cbm2rom_checksum();

    /* enable traps again when necessary */
    resources_set_int("VirtualDevices", trapfl);

    snapshot_module_close(m);

    return 0;
}