int vdrive_attach_image(disk_image_t *image, unsigned int unit, vdrive_t *vdrive) { vdrive->unit = unit; disk_image_attach_log(image, 0, unit); switch(image->type) { case DISK_IMAGE_TYPE_D64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D67: vdrive->image_format = VDRIVE_IMAGE_FORMAT_2040; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D71: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1571; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D81: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1581; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D80: vdrive->image_format = VDRIVE_IMAGE_FORMAT_8050; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D82: vdrive->image_format = VDRIVE_IMAGE_FORMAT_8250; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_G64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = 35; break; case DISK_IMAGE_TYPE_X64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; break; default: return -1; } /* Initialise format constants */ vdrive_set_disk_geometry(vdrive); vdrive->image = image; if (vdrive_bam_read_bam(vdrive)) { #ifdef CELL_DEBUG printf("ERROR: Cannot access BAM.\n"); #endif return -1; } return 0; }
static int vdrive_command_initialize(vdrive_t *vdrive) { vdrive_close_all_channels(vdrive); if ((vdrive->image_format == VDRIVE_IMAGE_FORMAT_1581) || (vdrive->image_format == VDRIVE_IMAGE_FORMAT_4000)) { /* reset BAM/Dir/Partition to root */ vdrive_set_disk_geometry(vdrive); } /* Update BAM in memory. */ if (vdrive->image != NULL) { vdrive_bam_read_bam(vdrive); } return CBMDOS_IPE_OK; }
int vdrive_attach_image(disk_image_t *image, unsigned int unit, vdrive_t *vdrive) { vdrive->unit = unit; switch(image->type) { case DISK_IMAGE_TYPE_D64: disk_image_attach_log(image, vdrive_log, unit, "D64"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D67: disk_image_attach_log(image, vdrive_log, unit, "D67"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_2040; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D71: disk_image_attach_log(image, vdrive_log, unit, "D71"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_1571; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D81: disk_image_attach_log(image, vdrive_log, unit, "D81"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_1581; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D80: disk_image_attach_log(image, vdrive_log, unit, "D80"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_8050; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_D82: disk_image_attach_log(image, vdrive_log, unit, "D82"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_8250; vdrive->num_tracks = image->tracks; break; case DISK_IMAGE_TYPE_G64: disk_image_attach_log(image, vdrive_log, unit, "G64"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = 35; break; case DISK_IMAGE_TYPE_X64: disk_image_attach_log(image, vdrive_log, unit, "X64"); vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; break; default: return -1; } /* Initialise format constants */ vdrive_set_disk_geometry(vdrive); vdrive->image = image; if (vdrive_bam_read_bam(vdrive)) { log_error(vdrive_log, "Cannot access BAM."); return -1; } return 0; }
int vdrive_attach_image(disk_image_t *image, unsigned int unit, vdrive_t *vdrive) { vdrive->unit = unit; disk_image_attach_log(image, vdrive_log, unit); switch (image->type) { case DISK_IMAGE_TYPE_D64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x100; break; case DISK_IMAGE_TYPE_D67: vdrive->image_format = VDRIVE_IMAGE_FORMAT_2040; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x100; break; case DISK_IMAGE_TYPE_D71: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1571; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x200; break; case DISK_IMAGE_TYPE_D81: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1581; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x300; break; case DISK_IMAGE_TYPE_D80: vdrive->image_format = VDRIVE_IMAGE_FORMAT_8050; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x500; break; case DISK_IMAGE_TYPE_D82: vdrive->image_format = VDRIVE_IMAGE_FORMAT_8250; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x500; break; case DISK_IMAGE_TYPE_G64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = 35; /* FIXME: it can be more */ vdrive->bam_size = 0x100; break; case DISK_IMAGE_TYPE_P64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = 35; /* FIXME: it can be more */ vdrive->bam_size = 0x100; break; case DISK_IMAGE_TYPE_X64: vdrive->image_format = VDRIVE_IMAGE_FORMAT_1541; vdrive->num_tracks = image->tracks; vdrive->bam_size = 0x100; break; case DISK_IMAGE_TYPE_D1M: case DISK_IMAGE_TYPE_D2M: case DISK_IMAGE_TYPE_D4M: vdrive->image_format = VDRIVE_IMAGE_FORMAT_4000; vdrive->num_tracks = image->tracks - 1; vdrive->bam_size = 0x2100; break; default: return -1; } DBG(("vdrive_attach_image image type:%d vdrive format:%d num_tracks:%d bam_size:%d", image->type, vdrive->image_format, vdrive->num_tracks, vdrive->bam_size)); /* Initialise format constants */ vdrive_set_disk_geometry(vdrive); vdrive->image = image; vdrive->bam = lib_malloc(vdrive->bam_size); if (vdrive_bam_read_bam(vdrive)) { log_error(vdrive_log, "Cannot access BAM."); return -1; } return 0; }