int megacart_bin_attach(const char *filename) { if (!cart_ram) { cart_ram = lib_malloc(CART_RAM_SIZE); } if (!cart_nvram) { cart_nvram = lib_malloc(CART_NVRAM_SIZE); } if (!cart_rom) { cart_rom = lib_malloc(CART_ROM_SIZE); } if (zfile_load(filename, cart_rom, (size_t)CART_ROM_SIZE) < 0) { megacart_detach(); return -1; } try_nvram_load(nvram_filename); cart_rom_low = cart_rom; cart_rom_high = cart_rom + 0x100000; mem_cart_blocks = VIC_CART_RAM123 | VIC_CART_BLK1 | VIC_CART_BLK2 | VIC_CART_BLK3 | VIC_CART_BLK5 | VIC_CART_IO2 | VIC_CART_IO3; mem_initialize_memory(); megacart_io2_list_item = io_source_register(&megacart_io2_device); megacart_io3_list_item = io_source_register(&megacart_io3_device); return 0; }
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; }
int finalexpansion_bin_attach(const char *filename) { BYTE *cart_flash; if (!cart_ram) { cart_ram = lib_malloc(CART_RAM_SIZE); } cart_flash = lib_malloc(CART_ROM_SIZE); if (cart_flash == NULL) { return -1; } /* flash040core_init() does not clear the flash */ memset(cart_flash, 0xff, CART_ROM_SIZE); flash040core_init(&flash_state, maincpu_alarm_context, FLASH040_TYPE_B, cart_flash); util_string_set(&cartfile, filename); if (zfile_load(filename, flash_state.flash_data) < 0) { finalexpansion_detach(); return -1; } mem_cart_blocks = VIC_CART_RAM123 | VIC_CART_BLK1 | VIC_CART_BLK2 | VIC_CART_BLK3 | VIC_CART_BLK5 | VIC_CART_IO3; mem_initialize_memory(); finalexpansion_list_item = io_source_register(&finalexpansion_device); return 0; }
static int try_nvram_load(const char *filename) { if (cart_nvram && filename && *filename != '\0') { if (zfile_load(filename, cart_nvram, (size_t)CART_NVRAM_SIZE) < 0) { log_message(megacart_log, "Failed to read NvRAM image `%s'!", filename); return -1; } else { log_message(megacart_log, "Read NvRAM image `%s'.", filename); } } return 0; }
int behrbonz_bin_attach(const char *filename) { if (!cart_rom) { cart_rom = lib_malloc(CART_ROM_SIZE); } if (zfile_load(filename, cart_rom, (size_t)CART_ROM_SIZE) < 0) { behrbonz_detach(); return -1; } if (export_add(&export_res) < 0) { return -1; } mem_cart_blocks = VIC_CART_BLK1 | VIC_CART_BLK2 | VIC_CART_BLK3 | VIC_CART_BLK5 | VIC_CART_IO3; mem_initialize_memory(); behrbonz_io3_list_item = io_source_register(&behrbonz_io3_device); return 0; }