diff --git a/src/emu/imagedev/floppy.h b/src/emu/imagedev/floppy.h index a37d14d82e7..2e916671b09 100644 --- a/src/emu/imagedev/floppy.h +++ b/src/emu/imagedev/floppy.h @@ -34,6 +34,7 @@ FLOPPY_IPF_FORMAT, \ FLOPPY_MFI_FORMAT, \ FLOPPY_MFM_FORMAT, \ + FLOPPY_TD0_FORMAT, \ NULL }; diff --git a/src/lib/formats/td0_dsk.c b/src/lib/formats/td0_dsk.c index 7e8734d8f37..064e98a1b6c 100644 --- a/src/lib/formats/td0_dsk.c +++ b/src/lib/formats/td0_dsk.c @@ -779,7 +779,6 @@ FLOPPY_DESTRUCT( td0_dsk_destruct ) *********************************************************************/ -#include #include "td0_dsk.h" td0_format::td0_format() @@ -806,7 +805,7 @@ int td0_format::identify(io_generic *io, UINT32 form_factor) UINT8 h[7]; io_generic_read(io, h, 0, 7); - if((toupper(h[0]) == 'T') && (toupper(h[1]) == 'D')) + if(((h[0] == 'T') && (h[1] == 'D')) || ((h[0] == 't') && (h[1] == 'd'))) { return 100; } @@ -815,7 +814,6 @@ int td0_format::identify(io_generic *io, UINT32 form_factor) bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) { - int cell_count = 0; int track_count = 0; int head_count = 0; int track_spt; @@ -853,7 +851,6 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) case 2: if((imagebuf[offset + 2] & 0x7f) == 2) // ? { - cell_count = 166666; if(head_count == 2) image->set_variant(floppy_image::DSHD); else @@ -862,7 +859,6 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) } /* no break; could be qd, won't know until tracks are counted */ case 1: - cell_count = 100000; if(head_count == 2) image->set_variant(floppy_image::DSDD); else @@ -871,7 +867,6 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) case 4: if((imagebuf[offset + 2] & 0x7f) == 2) // ? { - cell_count = 200000; if(head_count == 2) image->set_variant(floppy_image::DSHD); else @@ -880,10 +875,9 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) } /* no break */ case 3: - cell_count = 100000; if(head_count == 2) { - if(form_factor == floppy_image::FF_525) // is this correct? + if(form_factor == floppy_image::FF_525) image->set_variant(floppy_image::DSQD); else image->set_variant(floppy_image::DSDD); @@ -898,6 +892,11 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) break; } + static const int rates[3] = { 250000, 300000, 500000 }; + int rate = (header[5] & 0x7f) >= 3 ? 500000 : rates[header[5] & 0x7f]; + int rpm = form_factor == floppy_image::FF_8 || (form_factor == floppy_image::FF_525 && rate >= 300000) ? 360 : 300; + int base_cell_count = rate*60/rpm; + while(track_spt != 255) { desc_pc_sector sects[256]; @@ -986,10 +985,12 @@ bool td0_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) } } track_count = track; + if(fm) - build_pc_track_fm(track, head, image, cell_count, track_spt, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size)); + build_pc_track_fm(track, head, image, base_cell_count, track_spt, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size)); else - build_pc_track_mfm(track, head, image, cell_count, track_spt, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size)); + build_pc_track_mfm(track, head, image, base_cell_count*2, track_spt, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size)); + track_spt = imagebuf[offset]; } if((track_count > 50) && (form_factor == floppy_image::FF_525)) // ?