diff --git a/src/lib/formats/d88_dsk.c b/src/lib/formats/d88_dsk.c index 5da6004572e..5da599891c4 100644 --- a/src/lib/formats/d88_dsk.c +++ b/src/lib/formats/d88_dsk.c @@ -524,16 +524,16 @@ bool d88_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) mfm_w(track_data, tpos, 8, 0xfc); for(int i=0; i<50; i++) mfm_w(track_data, tpos, 8, 0x4e); - // Updated after reading the first header + // Read all sector headers to compute the available and expected size for gap3 int sector_count = 1; int gap3 = 84; + int etpos = tpos; + int rpos = pos; for(int i=0; i cell_count) + throw emu_fatalerror("d88_format: Incorrect layout on track %d head %d, expected_size=%d, current_size=%d", track, head, cell_count, etpos); + + if(etpos + gap3*16*(sector_count-1) > cell_count) + gap3 = (cell_count - etpos) / 16 / (sector_count-1); + + // Build the track + for(int i=0; i cell_count) - throw emu_fatalerror("d88_format: Incorrect layout on track %d head %d, expected_size=%d, current_size=%d", track, head, cell_count, tpos); while(tpos < cell_count-15) mfm_w(track_data, tpos, 8, 0x4e); raw_w(track_data, tpos, cell_count-tpos, 0x9254 >> (16+tpos-cell_count));