static FLOPPY_CONSTRUCT(pc_dsk_construct) { floperr_t err; struct basicdsk_geometry geometry; if (params) { /* create */ memset(&geometry, 0, sizeof(geometry)); geometry.heads = option_resolution_lookup_int(params, PARAM_HEADS); geometry.tracks = option_resolution_lookup_int(params, PARAM_TRACKS); geometry.sectors = option_resolution_lookup_int(params, PARAM_SECTORS); geometry.first_sector_id = 1; geometry.sector_length = 512; } else { /* open */ err = pc_dsk_compute_geometry(floppy, &geometry); if (err) return err; } return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT(hector_disc2_dsk800_construct) { struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); geometry.heads = 2; geometry.first_sector_id = 0; geometry.sector_length = 512; geometry.tracks = 80; geometry.sectors = 10; return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT(bml3_dsk_construct) { struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); geometry.heads = 2; geometry.first_sector_id = 1; geometry.sector_length = 256; geometry.tracks = 40; geometry.sectors = 16; return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT(trd_dsk_construct) { struct basicdsk_geometry geometry; UINT8 data[1]; int heads; int cylinders; floppy_image_read( floppy, data, 0x8e3 , 1 ); /* guess geometry of disk */ heads = data[0] & 0x08 ? 1 : 2; cylinders = data[0] & 0x01 ? 40 : 80; memset(&geometry, 0, sizeof(geometry)); geometry.heads = heads; geometry.first_sector_id = 1; geometry.sector_length = 256; geometry.tracks = cylinders; geometry.sectors = 16; return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT( comx35_dsk_construct ) { UINT8 header[1]; int heads = 1; int cylinders = 35; switch (floppy_image_size(floppy)) { case 35*1*16*128: heads = 1; cylinders = 35; break; case 35*2*16*128: floppy_image_read(floppy, header, 0x12, 1); if (header[0] == 0x01) { heads = 1; cylinders = 70; } else { heads = 2; cylinders = 35; } break; } struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); geometry.heads = heads; geometry.first_sector_id = 0; geometry.sector_length = 128; geometry.tracks = cylinders; geometry.sectors = 16; return basicdsk_construct(floppy, &geometry); }
static floperr_t trs80_jv1_construct(floppy_image *floppy, option_resolution *params) { struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); geometry.heads = TRS80_JV1_HEADS; geometry.sectors = TRS80_JV1_SECTORS; geometry.first_sector_id = TRS80_JV1_FIRSTSECTORID; geometry.sector_length = TRS80_JV1_SECTORLENGTH; if (params) { /* create */ geometry.tracks = option_resolution_lookup_int(params, PARAM_TRACKS); } else { /* load */ geometry.tracks = (int) (floppy_image_size(floppy) / geometry.heads / geometry.sectors / geometry.sector_length); } return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT(vz_construct) { struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); if (params) { geometry.heads = option_resolution_lookup_int(params, PARAM_HEADS); geometry.tracks = option_resolution_lookup_int(params, PARAM_TRACKS); geometry.sectors = option_resolution_lookup_int(params, PARAM_SECTORS); geometry.first_sector_id = option_resolution_lookup_int(params, PARAM_FIRST_SECTOR_ID); geometry.sector_length = option_resolution_lookup_int(params, PARAM_SECTOR_LENGTH); } else { geometry.heads = 1; geometry.tracks = 40; geometry.sectors = 16; geometry.first_sector_id = 0; geometry.sector_length = floppy_image_size(floppy)/geometry.tracks/geometry.sectors; } return basicdsk_construct(floppy, &geometry); }
static FLOPPY_CONSTRUCT(compis_dsk_construct) { struct basicdsk_geometry geometry; memset(&geometry, 0, sizeof(geometry)); geometry.heads = 1; geometry.first_sector_id = 1; geometry.sector_length = 512; if (params) { /* create */ geometry.tracks = option_resolution_lookup_int(params, PARAM_TRACKS); geometry.sectors = option_resolution_lookup_int(params, PARAM_SECTORS); } else { /* open */ if (!compis_get_tracks_and_sectors(floppy, &geometry.tracks, &geometry.sectors)) return FLOPPY_ERROR_INVALIDIMAGE; } return basicdsk_construct(floppy, &geometry); }