diff options
Diffstat (limited to 'src/lib/formats/ds9_dsk.cpp')
-rw-r--r-- | src/lib/formats/ds9_dsk.cpp | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/src/lib/formats/ds9_dsk.cpp b/src/lib/formats/ds9_dsk.cpp index 0866d78d58f..c0cbf0dccbc 100644 --- a/src/lib/formats/ds9_dsk.cpp +++ b/src/lib/formats/ds9_dsk.cpp @@ -14,45 +14,12 @@ ************************************************************************/ -#include <assert.h> - #include "formats/ds9_dsk.h" +#include "ioprocs.h" -static FLOPPY_IDENTIFY(ds9_dsk_identify) -{ - switch (floppy_image_size(floppy)) - { - case (80 * 2 * 21 * 256): - case 860164: - case 860288: - *vote = 100; - break; - - default: - *vote = 0; - break; - } - - return FLOPPY_ERROR_SUCCESS; -} - -static FLOPPY_CONSTRUCT(ds9_dsk_construct) -{ - struct basicdsk_geometry geometry; - memset(&geometry, 0, sizeof(geometry)); - geometry.heads = 2; - geometry.first_sector_id = 0; - geometry.sector_length = 256; - geometry.tracks = 80; - geometry.sectors = 21; - return basicdsk_construct(floppy, &geometry); -} +#include <cstring> -LEGACY_FLOPPY_OPTIONS_START( ds9 ) - LEGACY_FLOPPY_OPTION( ds9_dsk, "ds9,dsk,raw", "Agat 840K DSK image", - ds9_dsk_identify, ds9_dsk_construct, nullptr, nullptr) -LEGACY_FLOPPY_OPTIONS_END // exactly 6500 bytes const floppy_image_format_t::desc_e ds9_format::ds9_desc[] = { @@ -82,48 +49,47 @@ ds9_format::ds9_format() { } -const char *ds9_format::name() const +const char *ds9_format::name() const noexcept { return "a9dsk"; } -const char *ds9_format::description() const +const char *ds9_format::description() const noexcept { return "Agat-9 840K floppy image"; } -const char *ds9_format::extensions() const +const char *ds9_format::extensions() const noexcept { return "ds9"; } -void ds9_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &head_count, uint8_t §or_count) +void ds9_format::find_size(util::random_read &io, uint8_t &track_count, uint8_t &head_count, uint8_t §or_count) { - uint32_t expected_size = 0; - uint64_t size = io_generic_size(io); - head_count = 2; track_count = 80; sector_count = 21; - expected_size = 256 * track_count * head_count * sector_count; + uint32_t const expected_size = 256 * track_count * head_count * sector_count; - if (size >= expected_size) // standard format has 860160 bytes + uint64_t size; + if (!io.length(size) && (size >= expected_size)) // standard format has 860160 bytes return; track_count = head_count = sector_count = 0; } -int ds9_format::identify(io_generic *io, uint32_t form_factor) +int ds9_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); - if (track_count) return 50; + if (track_count) + return FIFID_SIZE; return 0; } -bool ds9_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ds9_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -143,14 +109,14 @@ bool ds9_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) { for (int head = 0; head < head_count; head++) { - io_generic_read(io, sectdata, (track * head_count + head) * track_size, track_size); + /*auto const [err, actual] =*/ read_at(io, (track * head_count + head) * track_size, sectdata, track_size); // FIXME: check for errors and premature EOF generate_track(ds9_desc, track, head, sectors, sector_count, 104000, image); } } - image->set_variant(floppy_image::DSQD); + image.set_variant(floppy_image::DSQD); return true; } -const floppy_format_type FLOPPY_DS9_FORMAT = &floppy_image_format_creator<ds9_format>; +const ds9_format FLOPPY_DS9_FORMAT; |