From c40d893239f79d825ce075f4a3e94588c933e285 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 29 Oct 2023 12:53:44 +0100 Subject: formats/imd_dsk: implement get_sectors_per_track() (#11672) --- src/lib/formats/imd_dsk.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/formats/imd_dsk.cpp b/src/lib/formats/imd_dsk.cpp index 713cf28cbef..fde013f3113 100644 --- a/src/lib/formats/imd_dsk.cpp +++ b/src/lib/formats/imd_dsk.cpp @@ -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; } -- cgit v1.2.3