diff options
author | 2012-12-31 15:23:16 +0000 | |
---|---|---|
committer | 2012-12-31 15:23:16 +0000 | |
commit | d58eef5b1254023eb115968f95dcfec446b2eb32 (patch) | |
tree | 274bcd43c975d891dc6183b6528ae728043e3ea3 /src/lib | |
parent | 3aa34032cf53f52c1bc6dee5397a3732438df9c3 (diff) |
there are 81 track adf files out there, actually I think there can be anything from 1 track to 82 tracks, but we'll cross that bridge when we come to it etc.)
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/formats/ami_dsk.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/lib/formats/ami_dsk.c b/src/lib/formats/ami_dsk.c index 7b6b6e44751..e198a7213be 100644 --- a/src/lib/formats/ami_dsk.c +++ b/src/lib/formats/ami_dsk.c @@ -68,7 +68,7 @@ bool adf_format::supports_save() const int adf_format::identify(io_generic *io, UINT32 form_factor) { UINT64 size = io_generic_size(io); - if ((size == 901120) || (size == 1802240)) + if ((size == 901120) || (size == 912384) || (size == 1802240)) { return 50; } @@ -79,6 +79,9 @@ bool adf_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) { desc_s sectors[22]; UINT8 sectdata[512*22]; + bool is_hd = false; + int tracks = 80; + for(int i=0; i<22; i++) { sectors[i].data = sectdata + 512*i; sectors[i].size = 512; @@ -86,9 +89,25 @@ bool adf_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) } UINT64 size = io_generic_size(io); - if(size == 901120) { + if(size == 901120) + { + is_hd = false; + tracks = 80; + } + else if (size == 912384) + { + is_hd = false; + tracks = 81; + } + else + { + is_hd = true; + tracks = 80; + } + + if (!is_hd) { image->set_variant(floppy_image::DSDD); - for(int track=0; track < 80; track++) { + for(int track=0; track < tracks; track++) { for(int side=0; side < 2; side++) { io_generic_read(io, sectdata, (track*2 + side)*512*11, 512*11); generate_track(amiga_11, track, side, sectors, 11, 100000, image); @@ -96,7 +115,7 @@ bool adf_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) } } else { image->set_variant(floppy_image::DSHD); - for(int track=0; track < 80; track++) { + for(int track=0; track < tracks; track++) { for(int side=0; side < 2; side++) { io_generic_read(io, sectdata, (track*2 + side)*512*22, 512*22); generate_track(amiga_22, track, side, sectors, 22, 200000, image); |