int vic_fp_bin_attach(const char *filename) { if (!cart_ram) { cart_ram = lib_malloc(CART_RAM_SIZE); } if (!cart_rom) { cart_rom = lib_malloc(CART_ROM_SIZE); } util_string_set(&cartfile, filename); if (zfile_load(filename, cart_rom, (size_t)CART_ROM_SIZE) < 0) { vic_fp_detach(); return -1; } if (export_add(&export_res) < 0) { return -1; } flash040core_init(&flash_state, maincpu_alarm_context, FLASH040_TYPE_032B_A0_1_SWAP, cart_rom); mem_cart_blocks = VIC_CART_RAM123 | VIC_CART_BLK1 | VIC_CART_BLK2 | VIC_CART_BLK3 | VIC_CART_BLK5 | VIC_CART_IO2; mem_initialize_memory(); vfp_list_item = io_source_register(&vfp_device); return 0; }
void cartridge_detach(int type) { int cartridge_reset; switch (type) { case CARTRIDGE_VIC20_GENERIC: generic_detach(); break; case CARTRIDGE_VIC20_FP: vic_fp_detach(); break; case CARTRIDGE_VIC20_MEGACART: megacart_detach(); break; case CARTRIDGE_VIC20_FINAL_EXPANSION: finalexpansion_detach(); break; } mem_cartridge_type = CARTRIDGE_NONE; /* this is probably redundant as it is also performed by the local detach functions. */ mem_cart_blocks = 0; mem_initialize_memory(); resources_get_int("CartridgeReset", &cartridge_reset); if (cartridge_reset != 0) { /* "Turn off machine before removing cartridge" */ machine_trigger_reset(MACHINE_RESET_MODE_HARD); } }