int drive_check_type(unsigned int drive_type, unsigned int dnr) { if (!drive_check_bus(drive_type, iec_available_busses())) return 0; if (drive_check_dual(drive_type)) { if (is_drive1(dnr)) { /* Dual drives only supported on even device numbers. */ return 0; } else { if (drive_context[mk_drive1(dnr)]->drive->type != DRIVE_TYPE_NONE) /* Disable dual drive if second device is enabled. */ return 0; } } else { if (is_drive1(dnr)) { if (drive_check_dual(drive_context[mk_drive0(dnr)]->drive->type)) /* Disable second device if dual drive is enabled. */ return drive_type == DRIVE_TYPE_NONE; } } if (machine_drive_rom_check_loaded(drive_type) < 0) return 0; return 1; }
int drive_check_type(unsigned int drive_type, unsigned int dnr) { if (!drive_check_bus(drive_type, dnr, iec_available_busses())) return 0; if (drive_check_dual(drive_type)) { if (dnr > 0) { /* A second dual drive is not supported. */ return 0; } else { if (drive_context[1]->drive->type != DRIVE_TYPE_NONE) /* Disable dual drive if second drive is enabled. */ return 0; } } /* If the first drive is dual no second drive is supported at all. */ if (drive_check_dual(drive_context[0]->drive->type) && dnr > 0) return 0; if (machine_drive_rom_check_loaded(drive_type) < 0) return 0; return 1; }
int drive_set_disk_drive_type(unsigned int type, struct drive_context_s *drv) { unsigned int dnr; drive_t *drive; drive_t *drive1; dnr = drv->mynumber; if (machine_drive_rom_check_loaded(type) < 0) { return -1; } drive = drv->drive; rotation_rotate_disk(drive); drivesync_clock_frequency(type, drive); rotation_init(0, dnr); drive->type = type; if (type == DRIVE_TYPE_2000 || type == DRIVE_TYPE_4000) { drivecpu65c02_setup_context(drv, 0); } else { drivecpu_setup_context(drv, 0); } drive->side = 0; machine_drive_rom_setup_image(dnr); drivesync_factor(drv); drive_set_active_led_color(type, dnr); /* set up (relatively) easy detection of dual drives */ drive1 = drive_context[mk_drive1(dnr)]->drive; drive->drive0 = NULL; drive1->drive1 = NULL; if (is_drive0(dnr) && drive_check_dual(type)) { drive->drive1 = drive1; drive1->drive0 = drive; } else { drive->drive1 = NULL; drive1->drive0 = NULL; } if (type == DRIVE_TYPE_2000 || type == DRIVE_TYPE_4000) { drivecpu65c02_init(drv, type); } else { drivecpu_init(drv, type); } return 0; }
int driverom_load_images(void) { drive_rom_load_ok = 1; machine_drive_rom_load(); if (machine_drive_rom_check_loaded(DRIVE_TYPE_ANY) < 0) { log_error(driverom_log, "No ROM image found at all! " "Hardware-level emulation is not available."); return -1; } return 0; }
int driverom_load_images(void) { drive_rom_load_ok = 1; machine_drive_rom_load(); if (machine_drive_rom_check_loaded(DRIVE_TYPE_ANY) < 0) { #ifdef CELL_DEBUG printf("ERROR: No ROM image found at all!\nHardware-level emulation is not available.\n"); #endif return -1; } return 0; }
int drive_set_disk_drive_type(unsigned int type, struct drive_context_s *drv) { unsigned int dnr; dnr = drv->mynumber; if (machine_drive_rom_check_loaded(type) < 0) return -1; rotation_rotate_disk(drv->drive); drivesync_clock_frequency(type, drv->drive); rotation_init(0, dnr); drv->drive->type = type; drv->drive->side = 0; machine_drive_rom_setup_image(dnr); drivesync_factor(drv); drive_set_active_led_color(type, dnr); drivecpu_init(drv, type); return 0; }