static int set_sidcart_enabled(int value, void *param) { int val = value ? 1 : 0; if (val == sidcart_sound_chip.chip_enabled) { return 0; } if (val) { if (sidcart_address == 0x8f00) { sidcart_list_item = io_source_register(&sidcart_8f00_device); } else { sidcart_list_item = io_source_register(&sidcart_e900_device); } } else { io_source_unregister(sidcart_list_item); sidcart_list_item = NULL; } sidcart_sound_chip.chip_enabled = val; #ifdef HAVE_RESID sid_set_enable(val); #endif sound_state_changed = 1; return 0; }
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; }
static int set_sid_address(int val, void *param) { switch (val) { case 0x8f00: case 0xe900: break; default: return -1; } if (sidcart_address == val) { return 0; } if (sidcart_sound_chip.chip_enabled) { io_source_unregister(sidcart_list_item); if (val == 0x8f00) { sidcart_list_item = io_source_register(&sidcart_8f00_device); } else { sidcart_list_item = io_source_register(&sidcart_e900_device); } } sidcart_address = val; return 0; }
/* FIXME: resetting the c64 should be handled in the upper layer */ static int set_mmc64_enabled(int val, void *param) { LOG(("MMC64: set_enabled: '%s' %d to %d", mmc64_bios_filename, mmc64_enabled, val)); if (!mmc64_enabled && val) { /* activate mmc64 */ if (param) { /* if the param is != NULL, then we should load the default image file */ LOG(("MMC64: set_enabled(1) '%s'", mmc64_bios_filename)); if (mmc64_bios_filename) { if (*mmc64_bios_filename) { if (cartridge_attach_image(CARTRIDGE_MMC64, mmc64_bios_filename) < 0) { LOG(("MMC64: set_enabled(1) did not register")); return -1; } /* mmc64_enabled = 1; */ /* cartridge_attach_image will end up calling set_mmc64_enabled again */ return 0; } } } else { LOG(("MMC64: set_enabled(0) '%s'", mmc64_bios_filename)); cart_power_off(); /* if the param is == NULL, then we should actually set the resource */ if (c64export_add(&export_res) < 0) { LOG(("MMC64: set_enabled(0) did not register")); return -1; } else { LOG(("MMC64: set_enabled registered")); if (mmc64_activate() < 0) { return -1; } mmc64_enabled = 1; cart_set_port_exrom_slot0(1); cart_port_config_changed_slot0(); mmc64_clockport_list_item = io_source_register(mmc64_current_clockport_device); mmc64_io1_list_item = io_source_register(&mmc64_io1_device); mmc64_io2_list_item = io_source_register(&mmc64_io2_device); mmc64_reset(); } } } else if (mmc64_enabled && !val) { /* remove mmc64 */ if (mmc64_deactivate() < 0) { return -1; } cart_power_off(); c64export_remove(&export_res); mmc64_enabled = 0; cart_set_port_exrom_slot0(0); cart_port_config_changed_slot0(); io_source_unregister(mmc64_clockport_list_item); io_source_unregister(mmc64_io1_list_item); io_source_unregister(mmc64_io2_list_item); mmc64_clockport_list_item = NULL; mmc64_io1_list_item = NULL; mmc64_io2_list_item = NULL; } LOG(("MMC64: set_enabled done: '%s' %d : %d", mmc64_bios_filename, val, mmc64_enabled)); return 0; }
static int set_digiblaster_enabled(int value, void *param) { int val = value ? 1 : 0; if (digiblaster_sound_chip.chip_enabled == val) { return 0; } if (val) { if (sidcart_address == 0xfd40) { digiblaster_list_item = io_source_register(&digiblaster_fd5e_device); } else { digiblaster_list_item = io_source_register(&digiblaster_fe9e_device); } sampler_start(SAMPLER_OPEN_MONO, "DigiBlaster"); } else { io_source_unregister(digiblaster_list_item); digiblaster_list_item = NULL; sampler_stop(); } digiblaster_sound_chip.chip_enabled = val ? 1 : 0; return 0; }
void c64io_vicii_init(void) { vicii_d000_list_item = io_source_register(&vicii_d000_device); vicii_d100_list_item = io_source_register(&vicii_d100_device); vicii_d200_list_item = io_source_register(&vicii_d200_device); vicii_d300_list_item = io_source_register(&vicii_d300_device); }
/* C64-specific I/O initialization. */ static void c64io_init(void) { c64io_vicii_init(); sid_d400_list_item = io_source_register(&sid_d400_device); sid_d420_list_item = io_source_register(&sid_d420_device); sid_d500_list_item = io_source_register(&sid_d500_device); sid_d600_list_item = io_source_register(&sid_d600_device); sid_d700_list_item = io_source_register(&sid_d700_device); }
static int mach5_common_attach(void) { if (c64export_add(&export_res) < 0) { return -1; } mach5_io1_list_item = io_source_register(&mach5_io1_device); mach5_io2_list_item = io_source_register(&mach5_io2_device); return 0; }
static int ross_common_attach(void) { if (export_add(&export_res) < 0) { return -1; } ross_io1_list_item = io_source_register(&ross_io1_device); ross_io2_list_item = io_source_register(&ross_io2_device); return 0; }
static int kcs_common_attach(void) { if (c64export_add(&export_res_kcs) < 0) { return -1; } kcs_io1_list_item = io_source_register(&kcs_io1_device); kcs_io2_list_item = io_source_register(&kcs_io2_device); return 0; }
static int freezemachine_common_attach(void) { if (c64export_add(&export_res) < 0) { return -1; } freezemachine_io1_list_item = io_source_register(&freezemachine_io1_device); freezemachine_io2_list_item = io_source_register(&freezemachine_io2_device); return 0; }
static int actionreplay2_common_attach(void) { if (c64export_add(&export_res) < 0) { return -1; } actionreplay2_io1_list_item = io_source_register(&actionreplay2_io1_device); actionreplay2_io2_list_item = io_source_register(&actionreplay2_io2_device); return 0; }
static int warpspeed_common_attach(void) { if (c64export_add(&export_res_warpspeed) < 0) { return -1; } warpspeed_io1_list_item = io_source_register(&warpspeed_io1_device); warpspeed_io2_list_item = io_source_register(&warpspeed_io2_device); return 0; }
void digiblaster_set_address(WORD addr) { if (digiblaster_sound_chip.chip_enabled) { io_source_unregister(digiblaster_list_item); if (addr == 0xfd40) { digiblaster_list_item = io_source_register(&digiblaster_fd5e_device); } else { digiblaster_list_item = io_source_register(&digiblaster_fe9e_device); } } }
static int final_v1_common_attach(void) { if (c64export_add(&export_res_v1) < 0) { return -1; } final1_io1_list_item = io_source_register(&final1_io1_device); final1_io2_list_item = io_source_register(&final1_io2_device); return 0; }
static int easyflash_common_attach(const char *filename) { if (c64export_add(&export_res) < 0) { return -1; } easyflash_io1_list_item = io_source_register(&easyflash_io1_device); easyflash_io2_list_item = io_source_register(&easyflash_io2_device); easyflash_filename = lib_stralloc(filename); return 0; }
static int epyxfastload_common_attach(void) { if (c64export_add(&export_res_epyx) < 0) { return -1; } epyxrom_alarm = alarm_new(maincpu_alarm_context, "EPYXCartRomAlarm", epyxfastload_alarm_handler, NULL); epyxrom_alarm_time = CLOCK_MAX; epyxfastload_io1_list_item = io_source_register(&epyxfastload_io1_device); epyxfastload_io2_list_item = io_source_register(&epyxfastload_io2_device); return 0; }
static int set_sfx_soundsampler_enabled(int val, void *param) { if (sfx_soundsampler_sound_chip.chip_enabled != val) { if (val) { if (c64export_add(&export_res) < 0) { return -1; } if (machine_class == VICE_MACHINE_VIC20) { if (sfx_soundsampler_io_swap) { sfx_soundsampler_device.start_address = 0x9c00; sfx_soundsampler_device.end_address = 0x9fff; } else { sfx_soundsampler_device.start_address = 0x9800; sfx_soundsampler_device.end_address = 0x9bff; } } sfx_soundsampler_list_item = io_source_register(&sfx_soundsampler_device); sfx_soundsampler_sound_chip.chip_enabled = 1; } else { c64export_remove(&export_res); io_source_unregister(sfx_soundsampler_list_item); sfx_soundsampler_list_item = NULL; sfx_soundsampler_sound_chip.chip_enabled = 0; } } return 0; }
static int set_ethernetcart_enabled(int value, void *param) { int val = value ? 1 : 0; if (!val) { /* Ethernet Cart should be deactived */ if (ethernetcart_enabled) { ethernetcart_enabled = 0; if (ethernetcart_deactivate() < 0) { return -1; } io_source_unregister(ethernetcart_list_item); ethernetcart_list_item = NULL; export_remove(&export_res); } } else { if (!ethernetcart_enabled) { if (ethernetcart_activate() < 0) { return -1; } export_res.io1 = ðernetcart_device; if (export_add(&export_res) < 0) { return -1; } ethernetcart_enabled = 1; ethernetcart_list_item = io_source_register(ðernetcart_device); } } return 0; }
static int set_expert_enabled(int val, void *param) { DBG(("EXPERT: set enabled: %d:%d\n", expert_enabled, val)); if (expert_enabled && !val) { DBG(("EXPERT: disable\n")); if (expert_deactivate() < 0) { return -1; } io_source_unregister(expert_io1_list_item); expert_io1_list_item = NULL; c64export_remove(&export_res); expert_enabled = 0; cart_power_off(); } else if (!expert_enabled && val) { DBG(("EXPERT: enable\n")); if (expert_activate() < 0) { return -1; } expert_io1_list_item = io_source_register(&expert_io1_device); if (c64export_add(&export_res) < 0) { DBG(("EXPERT: set enabled: error\n")); io_source_unregister(expert_io1_list_item); expert_io1_list_item = NULL; expert_enabled = 0; return -1; } expert_enabled = 1; resources_set_int("ExpertCartridgeMode", cartmode); cart_power_off(); } 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 acia_enable(void) { if (!_acia_enabled) { acia_list_item = io_source_register(&acia_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 set_cs256k_enabled(int value) { int val = value ? 1 : 0; if (val == cs256k_enabled) { return 0; } if (!val) { if (cs256k_enabled) { if (cs256k_deactivate() < 0) { return -1; } } cs256k_enabled = 0; io_source_unregister(cs256k_list_item); cs256k_list_item = NULL; plus4_pio1_init(-1); } else { if (!cs256k_enabled) { if (cs256k_activate() < 0) { return -1; } } cs256k_enabled = 1; cs256k_list_item = io_source_register(&cs256k_device); plus4_pio1_init(1); } return 0; }
static int magicdesk_common_attach(void) { if (export_add(&export_res) < 0) { return -1; } magicdesk_list_item = io_source_register(&magicdesk_device); return 0; }
static int acia1_enable(void) { if (export_add(&export_res) < 0) { return -1; } acia_list_item = io_source_register(&acia_device); return 0; }
static int sidcart_enable(void) { if (export_add(&export_res) < 0) { return -1; } sidcart_list_item = io_source_register(&sidcart_device); return 0; }
static int rex_common_attach(void) { if (export_add(&export_res_rex) < 0) { return -1; } rex_list_item = io_source_register(&rex_device); return 0; }
static int dinamic_common_attach(void) { if (c64export_add(&export_res) < 0) { return -1; } dinamic_io1_list_item = io_source_register(&dinamic_io1_device); return 0; }
static int simon_common_attach(void) { if (c64export_add(&export_res_simon) < 0) { return -1; } simon_list_item = io_source_register(&simon_device); return 0; }