vt_dsk: Regression fixes for loading and saving both disk formats

- Remember to put in a flux change at the start of each bit
- Revert flux_to_image bitstream generator to as it was before 08f28cee11 (new version simply didn't work)
This commit is contained in:
AJR 2024-11-20 18:28:31 -05:00
parent 91f5246705
commit 35d7c11f91

View File

@ -21,6 +21,7 @@
void vtech_common_format::wbit(std::vector<uint32_t> &buffer, uint32_t &pos, bool bit)
{
buffer.push_back(pos | floppy_image::MG_F);
if(bit) {
pos += 2237;
buffer.push_back(pos | floppy_image::MG_F);
@ -93,37 +94,29 @@ std::vector<uint8_t> vtech_common_format::flux_to_image(const floppy_image &imag
continue;
std::vector<bool> bitstream;
int cpos = 0;
while((buffer[cpos] & floppy_image::MG_MASK) != floppy_image::MG_F) {
cpos++;
if(cpos == sz) {
cpos = -1;
break;
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 t = dt >= 9187 - 143 ? 0 :
dt >= 2237 - 143 && dt <= 2237 + 143 ? 1 :
2;
if(t <= 1) {
if(lpos == -1)
lpos = cpos;
bitstream.push_back(t);
}
}
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;
bitstream.push_back(dt < 9187 - 143);
if(npos <= cpos)
break;
cpos = npos;
cpos += 1;
if(cpos == sz)
cpos = looped ? 1 : 0;
}
int mode = 0;
int pos = 0;
int count = 0;
bool looped = false;
looped = false;
uint8_t *dest = nullptr;
[[maybe_unused]] uint16_t checksum = 0;
uint64_t buf = 0;