From e3907cb6977d19d973b30f08bfaa0501b5ccdb79 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 20 Nov 2024 19:18:27 -0500 Subject: vt_dsk: Restore the newer bitstream generator, except for the part that was actually broken --- src/lib/formats/vt_dsk.cpp | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/lib/formats/vt_dsk.cpp b/src/lib/formats/vt_dsk.cpp index 040d24b4fb9..00284d2bd9e 100644 --- a/src/lib/formats/vt_dsk.cpp +++ b/src/lib/formats/vt_dsk.cpp @@ -94,29 +94,41 @@ std::vector vtech_common_format::flux_to_image(const floppy_image &imag continue; std::vector bitstream; - int lpos = -1; - bool looped = !((buffer[sz-1] ^ buffer[0]) & floppy_image::MG_MASK); - int cpos = looped ? sz-1 : 0; - while(cpos != lpos) { - int dt = looped && cpos == sz-1 ? (200000000 - (buffer[cpos] & floppy_image::TIME_MASK)) + (buffer[1] & floppy_image::TIME_MASK) : - cpos == sz-1 ? 200000000 - (buffer[cpos] & floppy_image::TIME_MASK) : - (buffer[cpos+1] & floppy_image::TIME_MASK) - (buffer[cpos] & floppy_image::TIME_MASK); + int cpos = 0; + while((buffer[cpos] & floppy_image::MG_MASK) != floppy_image::MG_F) { + cpos++; + if(cpos == sz) { + cpos = -1; + break; + } + } + if(cpos == -1) + continue; + for(;;) { + int npos = cpos; + for(;;) { + npos++; + if(npos == sz) + npos = 0; + if((buffer[npos] & floppy_image::MG_MASK) == floppy_image::MG_F) + break; + } + int dt = (buffer[npos] & floppy_image::TIME_MASK) - (buffer[cpos] & floppy_image::TIME_MASK); + if(dt < 0) + cpos += 200000000; int t = dt >= 9187 - 143 ? 0 : dt >= 2237 - 143 && dt <= 2237 + 143 ? 1 : 2; - if(t <= 1) { - if(lpos == -1) - lpos = cpos; + if(t <= 1) bitstream.push_back(t); - } - cpos += 1; - if(cpos == sz) - cpos = looped ? 1 : 0; + if(npos <= cpos) + break; + cpos = npos; } int mode = 0; int pos = 0; int count = 0; - looped = false; + bool looped = false; uint8_t *dest = nullptr; [[maybe_unused]] uint16_t checksum = 0; uint64_t buf = 0; -- cgit v1.2.3