summaryrefslogtreecommitdiffstats
path: root/src/lib/formats/ap2_dsk.cpp
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2022-03-30 14:28:37 +0200
committer Olivier Galibert <galibert@pobox.com>2022-03-30 15:45:35 +0200
commit08f28cee11ce94e6656d4924c7a3c30614811783 (patch)
treeec993e6409ededbc8dfc38c351b92dd1eab6e35f /src/lib/formats/ap2_dsk.cpp
parent40033c809aed228af9b928747a882ee275482c38 (diff)
floppy: Change the internal format to flux changes, update the mfi format accordingly (keep read compatibility with the old mfi)
Diffstat (limited to 'src/lib/formats/ap2_dsk.cpp')
-rw-r--r--src/lib/formats/ap2_dsk.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/lib/formats/ap2_dsk.cpp b/src/lib/formats/ap2_dsk.cpp
index 880ab10d092..2b6d6c07c88 100644
--- a/src/lib/formats/ap2_dsk.cpp
+++ b/src/lib/formats/ap2_dsk.cpp
@@ -1674,7 +1674,21 @@ bool a2_woz_format::load(util::random_read &io, uint32_t form_factor, const std:
if (r32(img, trks_off + 4) == 0)
return false;
- generate_track_from_bitstream(track, head, &img[boff], r32(img, trks_off + 4), image, subtrack, 0xffff);
+ uint32_t track_size = r32(img, trks_off + 4);
+
+ // With 5.25 floppies the end-of-track may be missing
+ // if unformatted. Accept track length down to 95% of
+ // 51090, otherwise pad it
+
+ bool short_track = !is_35 && track_size < 48535;
+
+ if(short_track) {
+ std::vector<uint8_t> buffer(6387, 0);
+ memcpy(buffer.data(), &img[boff], (track_size + 7) / 8);
+ generate_track_from_bitstream(track, head, buffer.data(), 51090, image, subtrack, 0xffff);
+
+ } else
+ generate_track_from_bitstream(track, head, &img[boff], track_size, image, subtrack, 0xffff);
if(is_35 && !track && head)
image->set_variant(r32(img, trks_off + 4) >= 90000 ? floppy_image::DSHD : floppy_image::DSDD);