diff options
author | 2022-03-30 14:28:37 +0200 | |
---|---|---|
committer | 2022-03-30 15:45:35 +0200 | |
commit | 08f28cee11ce94e6656d4924c7a3c30614811783 (patch) | |
tree | ec993e6409ededbc8dfc38c351b92dd1eab6e35f /src/lib/formats/ap2_dsk.cpp | |
parent | 40033c809aed228af9b928747a882ee275482c38 (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.cpp | 16 |
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); |