/* Attach a disk image to the true drive emulation. */ int drive_image_attach(disk_image_t *image, unsigned int unit) { unsigned int dnr; drive_t *drive; if (unit < 8 || unit >= 8 + DRIVE_NUM) { return -1; } dnr = unit - 8; drive = drive_context[dnr]->drive; if (drive_check_image_format(image->type, dnr) < 0) { return -1; } drive->read_only = image->read_only; drive->attach_clk = drive_clk[dnr]; if (drive->detach_clk > (CLOCK)0) { drive->attach_detach_clk = drive_clk[dnr]; } drive->ask_extend_disk_image = 1; switch (image->type) { case DISK_IMAGE_TYPE_D64: case DISK_IMAGE_TYPE_D67: case DISK_IMAGE_TYPE_D71: case DISK_IMAGE_TYPE_G64: case DISK_IMAGE_TYPE_X64: case DISK_IMAGE_TYPE_P64: disk_image_attach_log(image, driveimage_log, unit); break; default: return -1; } drive->image = image; drive->image->gcr = drive->gcr; drive->image->p64 = (void*)drive->p64; if (disk_image_read_image(drive->image) < 0) { drive->image = NULL; return -1; } if (drive->image->type == DISK_IMAGE_TYPE_P64) { drive->P64_image_loaded = 1; drive->P64_dirty = 0; } else { drive->GCR_image_loaded = 1; } drive->complicated_image_loaded = (drive->image->type == DISK_IMAGE_TYPE_P64 || drive->image->type == DISK_IMAGE_TYPE_G64); drive_set_half_track(drive->current_half_track, drive->side, drive); return 0; }
/* Attach a disk image to the true drive emulation. */ int drive_image_attach(disk_image_t *image, unsigned int unit) { unsigned int dnr; drive_t *drive; if (unit < 8 || unit >= 8 + DRIVE_NUM) return -1; dnr = unit - 8; drive = drive_context[dnr]->drive; if (drive_check_image_format(image->type, dnr) < 0) return -1; drive->read_only = image->read_only; drive->attach_clk = drive_clk[dnr]; if (drive->detach_clk > (CLOCK)0) drive->attach_detach_clk = drive_clk[dnr]; drive->ask_extend_disk_image = 1; switch(image->type) { case DISK_IMAGE_TYPE_D64: case DISK_IMAGE_TYPE_D67: case DISK_IMAGE_TYPE_D71: case DISK_IMAGE_TYPE_G64: case DISK_IMAGE_TYPE_X64: disk_image_attach_log(image, 0, unit); break; default: return -1; } drive->image = image; drive->image->gcr = drive->gcr; if (drive->image->type == DISK_IMAGE_TYPE_G64) { if (disk_image_read_gcr_image(drive->image) < 0) { drive->image = NULL; return -1; } } else { if (setID(dnr) >= 0) { drive_image_read_d64_d71(drive); drive->GCR_image_loaded = 1; return 0; } else { return -1; } } drive->GCR_image_loaded = 1; return 0; }