static void drive_setup_context_for_drive(drive_context_t *drv, unsigned int dnr) { drv->mynumber = dnr; drv->drive = lib_calloc(1, sizeof(drive_t)); drv->clk_ptr = &drive_clk[dnr]; drivecpu_setup_context(drv); machine_drive_setup_context(drv); }
static void drive_setup_context_for_drive(drive_context_t *drv, unsigned int dnr) { drv->mynumber = dnr; drv->drive = lib_calloc(1, sizeof(drive_t)); drv->clk_ptr = &drive_clk[dnr]; drivecpu_setup_context(drv, 1); /* no need for 65c02, only allocating common stuff */ machine_drive_setup_context(drv); }
static void drive_setup_context_for_drive(drive_context_t *drv, unsigned int dnr) { drv->mynumber = dnr; drv->drive = lib_calloc(1, sizeof(drive_t)); drv->clk_ptr = &drive_clk[dnr]; if (drv->drive->type == DRIVE_TYPE_2000 || drv->drive->type == DRIVE_TYPE_4000) { drivecpu65c02_setup_context(drv, 1); } else { drivecpu_setup_context(drv, 1); } machine_drive_setup_context(drv); }
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; }