formats/imd_dsk: implement get_sectors_per_track() (#11672)

This commit is contained in:
Lubomir Rintel 2023-10-29 12:53:44 +01:00 committed by GitHub
parent 1e3d35e962
commit c40d893239
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -23,6 +23,7 @@ struct imddsk_tag
{
int heads;
int tracks;
int track_sectors[84*2]; /* number of sectors for each track */
int sector_size;
uint64_t track_offsets[84*2]; /* offset within data for each track */
};
@ -60,6 +61,11 @@ static int imd_get_tracks_per_disk(floppy_image_legacy *floppy)
return get_tag(floppy)->tracks;
}
static int imd_get_sectors_per_track(floppy_image_legacy *floppy, int head, int track)
{
return get_tag(floppy)->track_sectors[(track<<1) + head];
}
static uint64_t imd_get_track_offset(floppy_image_legacy *floppy, int head, int track)
{
return get_tag(floppy)->track_offsets[(track<<1) + head];
@ -334,9 +340,11 @@ FLOPPY_CONSTRUCT( imd_dsk_construct )
tag->heads = 1;
do {
floppy_image_read(floppy, header, pos, 5);
if ((header[2] & 1)==1) tag->heads = 2;
tag->track_offsets[(header[1]<<1) + (header[2] & 1)] = pos;
sector_num = header[3];
int track = (header[1]<<1) + (header[2] & 1);
if ((header[2] & 1)==1) tag->heads = 2;
tag->track_offsets[track] = pos;
tag->track_sectors[track] = sector_num;
pos += 5 + sector_num; // skip header and sector numbering map
if(header[2] & 0x80) pos += sector_num; // skip cylinder numbering map
if(header[2] & 0x40) pos += sector_num; // skip head numbering map
@ -365,6 +373,7 @@ FLOPPY_CONSTRUCT( imd_dsk_construct )
callbacks->get_heads_per_disk = imd_get_heads_per_disk;
callbacks->get_tracks_per_disk = imd_get_tracks_per_disk;
callbacks->get_indexed_sector_info = imd_get_indexed_sector_info;
callbacks->get_sectors_per_track = imd_get_sectors_per_track;
return FLOPPY_ERROR_SUCCESS;
}