mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
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:
parent
91f5246705
commit
35d7c11f91
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user