diff options
Diffstat (limited to 'src')
123 files changed, 355 insertions, 336 deletions
diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index ec69043fdc4..ae8764d8c7c 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -307,7 +307,7 @@ void floppy_image_device::commit_image() if (err != osd_file::error::NONE) popmessage("Error, unable to truncate image: %d", int(err)); - output_format->save(&io, image.get()); + output_format->save(&io, variants, image.get()); } //------------------------------------------------- @@ -413,7 +413,7 @@ floppy_image_format_t *floppy_image_device::identify(std::string filename) floppy_image_format_t *best_format = nullptr; for (floppy_image_format_t *format = fif_list; format; format = format->next) { - int score = format->identify(&io, form_factor); + int score = format->identify(&io, form_factor, variants); if(score > best) { best = score; best_format = format; @@ -460,7 +460,7 @@ image_init_result floppy_image_device::call_load() int best = 0; floppy_image_format_t *best_format = nullptr; for (floppy_image_format_t *format = fif_list; format; format = format->next) { - int score = format->identify(&io, form_factor); + int score = format->identify(&io, form_factor, variants); if(score > best) { best = score; best_format = format; @@ -473,7 +473,7 @@ image_init_result floppy_image_device::call_load() } image = std::make_unique<floppy_image>(tracks, sides, form_factor); - if (!best_format->load(&io, form_factor, image.get())) { + if (!best_format->load(&io, form_factor, variants, image.get())) { seterror(IMAGE_ERROR_UNSUPPORTED, "Incompatible image format or corrupted data"); image.reset(); return image_init_result::FAIL; diff --git a/src/lib/formats/acorn_dsk.cpp b/src/lib/formats/acorn_dsk.cpp index 64091ed887b..2f9f5ebf7ab 100644 --- a/src/lib/formats/acorn_dsk.cpp +++ b/src/lib/formats/acorn_dsk.cpp @@ -93,7 +93,7 @@ int acorn_ssd_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int acorn_ssd_format::identify(io_generic *io, uint32_t form_factor) +int acorn_ssd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -216,7 +216,7 @@ int acorn_dsd_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int acorn_dsd_format::identify(io_generic *io, uint32_t form_factor) +int acorn_dsd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -311,7 +311,7 @@ int opus_ddos_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int opus_ddos_format::identify(io_generic *io, uint32_t form_factor) +int opus_ddos_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -399,7 +399,7 @@ int acorn_adfs_old_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int acorn_adfs_old_format::identify(io_generic *io, uint32_t form_factor) +int acorn_adfs_old_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -496,7 +496,7 @@ int acorn_adfs_new_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int acorn_adfs_new_format::identify(io_generic *io, uint32_t form_factor) +int acorn_adfs_new_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -567,7 +567,7 @@ int acorn_dos_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int acorn_dos_format::identify(io_generic *io, uint32_t form_factor) +int acorn_dos_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -618,7 +618,7 @@ bool opus_ddcpm_format::supports_save() const return false; } -int opus_ddcpm_format::identify(io_generic *io, uint32_t form_factor) +int opus_ddcpm_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[8]; @@ -630,7 +630,7 @@ int opus_ddcpm_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool opus_ddcpm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool opus_ddcpm_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { // Double density discs formatted with DDCPM : // @@ -677,7 +677,7 @@ bool opus_ddcpm_format::load(io_generic *io, uint32_t form_factor, floppy_image return true; } -bool opus_ddcpm_format::save(io_generic *io, floppy_image *image) +bool opus_ddcpm_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/acorn_dsk.h b/src/lib/formats/acorn_dsk.h index 043c2859232..2f3da32184a 100644 --- a/src/lib/formats/acorn_dsk.h +++ b/src/lib/formats/acorn_dsk.h @@ -21,7 +21,7 @@ public: acorn_ssd_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -37,7 +37,7 @@ public: acorn_dsd_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -53,7 +53,7 @@ public: opus_ddos_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -69,7 +69,7 @@ public: acorn_adfs_old_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -85,7 +85,7 @@ public: acorn_adfs_new_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -101,7 +101,7 @@ public: acorn_dos_format(); virtual int find_size(io_generic *io, uint32_t form_factor) override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; @@ -116,9 +116,9 @@ class opus_ddcpm_format : public floppy_image_format_t public: opus_ddcpm_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/afs_dsk.cpp b/src/lib/formats/afs_dsk.cpp index ee89e26a87e..b9b6cefadec 100644 --- a/src/lib/formats/afs_dsk.cpp +++ b/src/lib/formats/afs_dsk.cpp @@ -30,7 +30,7 @@ const char *afs_format::extensions() const return "adl,img"; } -int afs_format::identify(io_generic *io, uint32_t form_factor) +int afs_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/afs_dsk.h b/src/lib/formats/afs_dsk.h index e523d834031..1a15e54d90d 100644 --- a/src/lib/formats/afs_dsk.h +++ b/src/lib/formats/afs_dsk.h @@ -20,7 +20,7 @@ class afs_format : public wd177x_format public: afs_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/aim_dsk.cpp b/src/lib/formats/aim_dsk.cpp index b0b109b15c9..489ec1752e4 100644 --- a/src/lib/formats/aim_dsk.cpp +++ b/src/lib/formats/aim_dsk.cpp @@ -40,7 +40,7 @@ const char *aim_format::extensions() const } -int aim_format::identify(io_generic *io, uint32_t form_factor) +int aim_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { if (io_generic_size(io) == 2068480) { @@ -51,7 +51,7 @@ int aim_format::identify(io_generic *io, uint32_t form_factor) } -bool aim_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool aim_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { image->set_variant(floppy_image::DSQD); diff --git a/src/lib/formats/aim_dsk.h b/src/lib/formats/aim_dsk.h index 75229875c69..c4737efc7e6 100644 --- a/src/lib/formats/aim_dsk.h +++ b/src/lib/formats/aim_dsk.h @@ -20,8 +20,8 @@ class aim_format : public floppy_image_format_t public: aim_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/ami_dsk.cpp b/src/lib/formats/ami_dsk.cpp index ba04067f752..d231de9e20a 100644 --- a/src/lib/formats/ami_dsk.cpp +++ b/src/lib/formats/ami_dsk.cpp @@ -36,7 +36,7 @@ bool adf_format::supports_save() const return true; } -int adf_format::identify(io_generic *io, uint32_t form_factor) +int adf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); if ((size == 901120) || (size == 912384) || (size == 1802240)) @@ -46,7 +46,7 @@ int adf_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool adf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool adf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { desc_s sectors[22]; uint8_t sectdata[512*22]; @@ -127,7 +127,7 @@ uint32_t adf_format::checksum(const uint8_t *trackbuf, int track_size, int pos, return check & 0x55555555; } -bool adf_format::save(io_generic *io, floppy_image *image) +bool adf_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t sectdata[512*22]; uint8_t trackbuf[300000/8]; diff --git a/src/lib/formats/ami_dsk.h b/src/lib/formats/ami_dsk.h index 899e612415a..cde8d28a810 100644 --- a/src/lib/formats/ami_dsk.h +++ b/src/lib/formats/ami_dsk.h @@ -19,9 +19,9 @@ class adf_format : public floppy_image_format_t public: adf_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/ap2_dsk.cpp b/src/lib/formats/ap2_dsk.cpp index 9e71303ece5..89776eb52f1 100644 --- a/src/lib/formats/ap2_dsk.cpp +++ b/src/lib/formats/ap2_dsk.cpp @@ -559,7 +559,7 @@ bool a2_16sect_format::supports_save() const return true; } -int a2_16sect_format::identify(io_generic *io, uint32_t form_factor) +int a2_16sect_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); //uint32_t expected_size = 35 * 16 * 256; @@ -604,7 +604,7 @@ const floppy_image_format_t::desc_e a2_16sect_format::mac_gcr[] = { { END }, }; -bool a2_16sect_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool a2_16sect_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); @@ -768,7 +768,7 @@ void a2_16sect_format::update_chk(const uint8_t *data, int size, uint32_t &chk) //#define VERBOSE_SAVE -bool a2_16sect_format::save(io_generic *io, floppy_image *image) +bool a2_16sect_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int g_tracks, g_heads; int visualgrid[16][APPLE2_TRACK_COUNT]; // visualizer grid, cleared/initialized below @@ -1046,7 +1046,7 @@ bool a2_rwts18_format::supports_save() const return true; } -int a2_rwts18_format::identify(io_generic *io, uint32_t form_factor) +int a2_rwts18_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); uint32_t expected_size = APPLE2_TRACK_COUNT * 16 * 256; @@ -1084,7 +1084,7 @@ const floppy_image_format_t::desc_e a2_rwts18_format::mac_gcr[] = { }; -bool a2_rwts18_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool a2_rwts18_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { /* TODO: rewrite me properly uint8_t sector_data[(256)*16]; @@ -1133,7 +1133,7 @@ void a2_rwts18_format::update_chk(const uint8_t *data, int size, uint32_t &chk) { } -bool a2_rwts18_format::save(io_generic *io, floppy_image *image) +bool a2_rwts18_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int g_tracks, g_heads; int visualgrid[18][APPLE2_TRACK_COUNT]; // visualizer grid, cleared/initialized below @@ -1562,7 +1562,7 @@ bool a2_edd_format::supports_save() const return false; } -int a2_edd_format::identify(io_generic *io, uint32_t form_factor) +int a2_edd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { return ((io_generic_size(io) == 2244608) || (io_generic_size(io) == 2310144)) ? 50 : 0; } @@ -1572,7 +1572,7 @@ uint8_t a2_edd_format::pick(const uint8_t *data, int pos) return ((data[pos>>3] << 8) | data[(pos>>3)+1]) >> (8-(pos & 7)); } -bool a2_edd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool a2_edd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t *img; uint8_t nibble[16384], stream[16384]; @@ -1686,7 +1686,7 @@ bool a2_woz_format::supports_save() const const uint8_t a2_woz_format::signature[8] = { 0x57, 0x4f, 0x5a, 0x31, 0xff, 0x0a, 0x0d, 0x0a }; const uint8_t a2_woz_format::signature2[8] = { 0x57, 0x4f, 0x5a, 0x32, 0xff, 0x0a, 0x0d, 0x0a }; -int a2_woz_format::identify(io_generic *io, uint32_t form_factor) +int a2_woz_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[8]; io_generic_read(io, header, 0, 8); @@ -1695,7 +1695,7 @@ int a2_woz_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool a2_woz_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool a2_woz_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { std::vector<uint8_t> img(io_generic_size(io)); io_generic_read(io, &img[0], 0, img.size()); diff --git a/src/lib/formats/ap2_dsk.h b/src/lib/formats/ap2_dsk.h index 345ca3ea6c3..1a250e5e110 100644 --- a/src/lib/formats/ap2_dsk.h +++ b/src/lib/formats/ap2_dsk.h @@ -41,9 +41,9 @@ class a2_16sect_format : public floppy_image_format_t public: a2_16sect_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; @@ -68,9 +68,9 @@ class a2_rwts18_format : public floppy_image_format_t public: a2_rwts18_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; @@ -92,8 +92,8 @@ class a2_edd_format : public floppy_image_format_t public: a2_edd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; virtual const char *name() const override; @@ -111,8 +111,8 @@ class a2_woz_format : public floppy_image_format_t public: a2_woz_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; virtual const char *name() const override; diff --git a/src/lib/formats/ap_dsk35.cpp b/src/lib/formats/ap_dsk35.cpp index 243eacaa7ad..c59d28a0a4b 100644 --- a/src/lib/formats/ap_dsk35.cpp +++ b/src/lib/formats/ap_dsk35.cpp @@ -1232,7 +1232,7 @@ bool dc42_format::supports_save() const return true; } -int dc42_format::identify(io_generic *io, uint32_t form_factor) +int dc42_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[0x54]; uint64_t size = io_generic_size(io); @@ -1276,7 +1276,7 @@ const floppy_image_format_t::desc_e dc42_format::mac_gcr[] = { }; -bool dc42_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dc42_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t h[0x54]; io_generic_read(io, h, 0, 0x54); @@ -1350,7 +1350,7 @@ void dc42_format::update_chk(const uint8_t *data, int size, uint32_t &chk) } } -bool dc42_format::save(io_generic *io, floppy_image *image) +bool dc42_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int g_tracks, g_heads; image->get_actual_geometry(g_tracks, g_heads); diff --git a/src/lib/formats/ap_dsk35.h b/src/lib/formats/ap_dsk35.h index 8b3a8bbc1d3..2f6c54d66ce 100644 --- a/src/lib/formats/ap_dsk35.h +++ b/src/lib/formats/ap_dsk35.h @@ -29,9 +29,9 @@ class dc42_format : public floppy_image_format_t public: dc42_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/apd_dsk.cpp b/src/lib/formats/apd_dsk.cpp index 202c7e0d239..45d385a0800 100644 --- a/src/lib/formats/apd_dsk.cpp +++ b/src/lib/formats/apd_dsk.cpp @@ -85,7 +85,7 @@ const char *apd_format::extensions() const return "apd"; } -int apd_format::identify(io_generic *io, uint32_t form_factor) +int apd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); @@ -123,7 +123,7 @@ int apd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool apd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool apd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); diff --git a/src/lib/formats/apd_dsk.h b/src/lib/formats/apd_dsk.h index 343d45eb51d..bc551973c4a 100644 --- a/src/lib/formats/apd_dsk.h +++ b/src/lib/formats/apd_dsk.h @@ -23,8 +23,8 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; }; diff --git a/src/lib/formats/apollo_dsk.cpp b/src/lib/formats/apollo_dsk.cpp index 213286dd85b..75c31cfe7f8 100644 --- a/src/lib/formats/apollo_dsk.cpp +++ b/src/lib/formats/apollo_dsk.cpp @@ -46,7 +46,7 @@ const apollo_format::format apollo_format::formats[] = { const floppy_format_type FLOPPY_APOLLO_FORMAT = &floppy_image_format_creator<apollo_format>; -int apollo_format::identify(io_generic *io, uint32_t form_factor) +int apollo_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); uint32_t expected_size = 77*2*8*1024; diff --git a/src/lib/formats/apollo_dsk.h b/src/lib/formats/apollo_dsk.h index 048a2438cc5..6376c77b067 100644 --- a/src/lib/formats/apollo_dsk.h +++ b/src/lib/formats/apollo_dsk.h @@ -19,7 +19,7 @@ class apollo_format : public upd765_format public: apollo_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; diff --git a/src/lib/formats/apridisk.cpp b/src/lib/formats/apridisk.cpp index aad688167cf..388d358f6f8 100644 --- a/src/lib/formats/apridisk.cpp +++ b/src/lib/formats/apridisk.cpp @@ -32,7 +32,7 @@ const char *apridisk_format::extensions() const return "dsk"; } -int apridisk_format::identify(io_generic *io, uint32_t form_factor) +int apridisk_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[APR_HEADER_SIZE]; io_generic_read(io, header, 0, APR_HEADER_SIZE); @@ -45,7 +45,7 @@ int apridisk_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool apridisk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool apridisk_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { desc_pc_sector sectors[80][2][18]; std::unique_ptr<uint8_t []> sector_data(new uint8_t [MAX_SECTORS * SECTOR_SIZE]); @@ -140,7 +140,7 @@ bool apridisk_format::load(io_generic *io, uint32_t form_factor, floppy_image *i return true; } -bool apridisk_format::save(io_generic *io, floppy_image *image) +bool apridisk_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/apridisk.h b/src/lib/formats/apridisk.h index 957ef3aef1c..3e751f8d6ec 100644 --- a/src/lib/formats/apridisk.h +++ b/src/lib/formats/apridisk.h @@ -23,9 +23,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; private: diff --git a/src/lib/formats/ccvf_dsk.cpp b/src/lib/formats/ccvf_dsk.cpp index 27aaf355871..bba52d3922a 100644 --- a/src/lib/formats/ccvf_dsk.cpp +++ b/src/lib/formats/ccvf_dsk.cpp @@ -46,7 +46,7 @@ const ccvf_format::format ccvf_format::file_formats[] = { {} }; -int ccvf_format::identify(io_generic *io, uint32_t form_factor) +int ccvf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { char h[36]; @@ -87,7 +87,7 @@ floppy_image_format_t::desc_e* ccvf_format::get_desc_8n1(const format &f, int &c return desc; } -bool ccvf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ccvf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { const format &f = formats[0]; diff --git a/src/lib/formats/ccvf_dsk.h b/src/lib/formats/ccvf_dsk.h index d101172b5b9..5895a882550 100644 --- a/src/lib/formats/ccvf_dsk.h +++ b/src/lib/formats/ccvf_dsk.h @@ -39,8 +39,8 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; protected: diff --git a/src/lib/formats/concept_dsk.cpp b/src/lib/formats/concept_dsk.cpp index b8c010af852..36531ac8d7f 100644 --- a/src/lib/formats/concept_dsk.cpp +++ b/src/lib/formats/concept_dsk.cpp @@ -89,7 +89,7 @@ void cc525dsdd_format::find_size(io_generic *io, uint8_t &track_count, uint8_t & track_count = head_count = sector_count = 0; } -int cc525dsdd_format::identify(io_generic *io, uint32_t form_factor) +int cc525dsdd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -99,7 +99,7 @@ int cc525dsdd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool cc525dsdd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool cc525dsdd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -125,7 +125,7 @@ bool cc525dsdd_format::load(io_generic *io, uint32_t form_factor, floppy_image * return true; } -bool cc525dsdd_format::save(io_generic *io, floppy_image *image) +bool cc525dsdd_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/concept_dsk.h b/src/lib/formats/concept_dsk.h index ad6e8d63514..58d4e1c52b3 100644 --- a/src/lib/formats/concept_dsk.h +++ b/src/lib/formats/concept_dsk.h @@ -17,9 +17,9 @@ class cc525dsdd_format : public floppy_image_format_t public: cc525dsdd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/coupedsk.cpp b/src/lib/formats/coupedsk.cpp index 967896195f1..16842583855 100644 --- a/src/lib/formats/coupedsk.cpp +++ b/src/lib/formats/coupedsk.cpp @@ -64,7 +64,7 @@ bool mgt_format::supports_save() const return true; } -int mgt_format::identify(io_generic *io, uint32_t form_factor) +int mgt_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -74,7 +74,7 @@ int mgt_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool mgt_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool mgt_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); int sector_count = size == 737280 ? 9 : 10; @@ -99,7 +99,7 @@ bool mgt_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool mgt_format::save(io_generic *io, floppy_image *image) +bool mgt_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/coupedsk.h b/src/lib/formats/coupedsk.h index 190ec0b27b1..3700d3e9974 100644 --- a/src/lib/formats/coupedsk.h +++ b/src/lib/formats/coupedsk.h @@ -19,9 +19,9 @@ class mgt_format : public floppy_image_format_t public: mgt_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/cqm_dsk.cpp b/src/lib/formats/cqm_dsk.cpp index 64ff22939aa..5f79a4d3694 100644 --- a/src/lib/formats/cqm_dsk.cpp +++ b/src/lib/formats/cqm_dsk.cpp @@ -261,7 +261,7 @@ const char *cqm_format::extensions() const return "cqm,cqi,dsk"; } -int cqm_format::identify(io_generic *io, uint32_t form_factor) +int cqm_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[3]; io_generic_read(io, h, 0, 3); @@ -272,7 +272,7 @@ int cqm_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool cqm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool cqm_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { const int max_size = 4*1024*1024; // 4MB ought to be large enough for any floppy std::vector<uint8_t> imagebuf(max_size); @@ -369,7 +369,7 @@ bool cqm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool cqm_format::save(io_generic *io, floppy_image *image) +bool cqm_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/cqm_dsk.h b/src/lib/formats/cqm_dsk.h index b8e590d9021..183c0b83e68 100644 --- a/src/lib/formats/cqm_dsk.h +++ b/src/lib/formats/cqm_dsk.h @@ -19,9 +19,9 @@ class cqm_format : public floppy_image_format_t public: cqm_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/d64_dsk.cpp b/src/lib/formats/d64_dsk.cpp index a0460554d8f..46090580056 100644 --- a/src/lib/formats/d64_dsk.cpp +++ b/src/lib/formats/d64_dsk.cpp @@ -92,7 +92,7 @@ int d64_format::find_size(io_generic *io, uint32_t form_factor) const return -1; } -int d64_format::identify(io_generic *io, uint32_t form_factor) +int d64_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -206,7 +206,7 @@ void d64_format::fix_end_gap(floppy_image_format_t::desc_e* desc, int remaining_ desc[22].p1 >>= remaining_size & 0x01; } -bool d64_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool d64_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int type = find_size(io, form_factor); if(type == -1) @@ -266,7 +266,7 @@ bool d64_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool d64_format::save(io_generic *io, floppy_image *image) +bool d64_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { const format &f = formats[0]; diff --git a/src/lib/formats/d64_dsk.h b/src/lib/formats/d64_dsk.h index c91f116795f..665f6489a81 100644 --- a/src/lib/formats/d64_dsk.h +++ b/src/lib/formats/d64_dsk.h @@ -37,9 +37,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override { return true; } protected: diff --git a/src/lib/formats/d88_dsk.cpp b/src/lib/formats/d88_dsk.cpp index 30073d1874d..7c4eaa079dc 100644 --- a/src/lib/formats/d88_dsk.cpp +++ b/src/lib/formats/d88_dsk.cpp @@ -414,7 +414,7 @@ const char *d88_format::extensions() const return "d77,d88,1dd"; } -int d88_format::identify(io_generic *io, uint32_t form_factor) +int d88_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); uint8_t h[32]; @@ -427,7 +427,7 @@ int d88_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool d88_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool d88_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t h[32]; @@ -536,7 +536,7 @@ bool d88_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool d88_format::save(io_generic *io, floppy_image *image) +bool d88_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/d88_dsk.h b/src/lib/formats/d88_dsk.h index f769aa9f85e..c7c85fc1949 100644 --- a/src/lib/formats/d88_dsk.h +++ b/src/lib/formats/d88_dsk.h @@ -20,9 +20,9 @@ class d88_format : public floppy_image_format_t public: d88_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dcp_dsk.cpp b/src/lib/formats/dcp_dsk.cpp index c245d4ff0e3..b3beb40404f 100644 --- a/src/lib/formats/dcp_dsk.cpp +++ b/src/lib/formats/dcp_dsk.cpp @@ -43,7 +43,7 @@ const char *dcp_format::extensions() const return "dcp,dcu"; } -int dcp_format::identify(io_generic *io, uint32_t form_factor) +int dcp_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); uint8_t h[0xa2]; @@ -112,7 +112,7 @@ int dcp_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool dcp_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dcp_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t h[0xa2]; int heads, tracks, spt, bps; diff --git a/src/lib/formats/dcp_dsk.h b/src/lib/formats/dcp_dsk.h index 3ecfab71f61..c06396d527e 100644 --- a/src/lib/formats/dcp_dsk.h +++ b/src/lib/formats/dcp_dsk.h @@ -20,8 +20,8 @@ class dcp_format : public floppy_image_format_t public: dcp_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dfi_dsk.cpp b/src/lib/formats/dfi_dsk.cpp index 23884f10b52..409797e9583 100644 --- a/src/lib/formats/dfi_dsk.cpp +++ b/src/lib/formats/dfi_dsk.cpp @@ -56,14 +56,14 @@ bool dfi_format::supports_save() const return false; } -int dfi_format::identify(io_generic *io, uint32_t form_factor) +int dfi_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { char sign[4]; io_generic_read(io, sign, 0, 4); return memcmp(sign, "DFE2", 4) ? 0 : 100; } -bool dfi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dfi_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { char sign[4]; io_generic_read(io, sign, 0, 4); diff --git a/src/lib/formats/dfi_dsk.h b/src/lib/formats/dfi_dsk.h index 6dd56aa623c..d727f1d3c06 100644 --- a/src/lib/formats/dfi_dsk.h +++ b/src/lib/formats/dfi_dsk.h @@ -12,9 +12,9 @@ class dfi_format : public floppy_image_format_t public: dfi_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - // virtual bool save(io_generic *io, floppy_image *image); + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + // virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image); virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dim_dsk.cpp b/src/lib/formats/dim_dsk.cpp index ac9930e4782..964f19ce028 100644 --- a/src/lib/formats/dim_dsk.cpp +++ b/src/lib/formats/dim_dsk.cpp @@ -132,7 +132,7 @@ const char *dim_format::extensions() const return "dim"; } -int dim_format::identify(io_generic *io, uint32_t form_factor) +int dim_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[16]; @@ -144,7 +144,7 @@ int dim_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool dim_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dim_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int offset = 0x100; uint8_t h; @@ -223,7 +223,7 @@ bool dim_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool dim_format::save(io_generic *io, floppy_image *image) +bool dim_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/dim_dsk.h b/src/lib/formats/dim_dsk.h index b1c3d60a801..e0227e2e221 100644 --- a/src/lib/formats/dim_dsk.h +++ b/src/lib/formats/dim_dsk.h @@ -25,9 +25,9 @@ class dim_format : public floppy_image_format_t public: dim_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dip_dsk.cpp b/src/lib/formats/dip_dsk.cpp index 573f3768072..a33d6fe35d6 100644 --- a/src/lib/formats/dip_dsk.cpp +++ b/src/lib/formats/dip_dsk.cpp @@ -37,7 +37,7 @@ const char *dip_format::extensions() const return "dip"; } -int dip_format::identify(io_generic *io, uint32_t form_factor) +int dip_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -47,7 +47,7 @@ int dip_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool dip_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dip_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int heads, tracks, spt, bps; diff --git a/src/lib/formats/dip_dsk.h b/src/lib/formats/dip_dsk.h index b504c73fbb0..255e4e6c8a1 100644 --- a/src/lib/formats/dip_dsk.h +++ b/src/lib/formats/dip_dsk.h @@ -20,8 +20,8 @@ class dip_format : public floppy_image_format_t public: dip_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dmk_dsk.cpp b/src/lib/formats/dmk_dsk.cpp index 4b3336b4bcb..39c23223ec5 100644 --- a/src/lib/formats/dmk_dsk.cpp +++ b/src/lib/formats/dmk_dsk.cpp @@ -41,7 +41,7 @@ const char *dmk_format::extensions() const } -int dmk_format::identify(io_generic *io, uint32_t form_factor) +int dmk_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { const int header_size = 16; uint8_t header[header_size]; @@ -81,7 +81,7 @@ int dmk_format::identify(io_generic *io, uint32_t form_factor) } -bool dmk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dmk_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { const int header_size = 16; uint8_t header[header_size]; @@ -213,7 +213,7 @@ bool dmk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool dmk_format::save(io_generic *io, floppy_image *image) +bool dmk_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/dmk_dsk.h b/src/lib/formats/dmk_dsk.h index 44993f8df32..a2e7898dece 100644 --- a/src/lib/formats/dmk_dsk.h +++ b/src/lib/formats/dmk_dsk.h @@ -21,9 +21,9 @@ class dmk_format : public floppy_image_format_t public: dmk_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/ds9_dsk.cpp b/src/lib/formats/ds9_dsk.cpp index cd241c3a319..fdf4f5e2299 100644 --- a/src/lib/formats/ds9_dsk.cpp +++ b/src/lib/formats/ds9_dsk.cpp @@ -113,7 +113,7 @@ void ds9_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &head_c track_count = head_count = sector_count = 0; } -int ds9_format::identify(io_generic *io, uint32_t form_factor) +int ds9_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -123,7 +123,7 @@ int ds9_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool ds9_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ds9_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); diff --git a/src/lib/formats/ds9_dsk.h b/src/lib/formats/ds9_dsk.h index 540c49a7ce7..317134eab87 100644 --- a/src/lib/formats/ds9_dsk.h +++ b/src/lib/formats/ds9_dsk.h @@ -19,8 +19,8 @@ class ds9_format : public floppy_image_format_t public: ds9_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dsk_dsk.cpp b/src/lib/formats/dsk_dsk.cpp index c208a5f8e81..dba11347887 100644 --- a/src/lib/formats/dsk_dsk.cpp +++ b/src/lib/formats/dsk_dsk.cpp @@ -299,7 +299,7 @@ bool dsk_format::supports_save() const return false; } -int dsk_format::identify(io_generic *io, uint32_t form_factor) +int dsk_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[16]; @@ -344,7 +344,7 @@ struct sector_header #pragma pack() -bool dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dsk_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t header[0x100]; bool extendformat = false; diff --git a/src/lib/formats/dsk_dsk.h b/src/lib/formats/dsk_dsk.h index e6b289a3cca..a08e3955888 100644 --- a/src/lib/formats/dsk_dsk.h +++ b/src/lib/formats/dsk_dsk.h @@ -19,8 +19,8 @@ class dsk_format : public floppy_image_format_t public: dsk_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/dvk_mx_dsk.cpp b/src/lib/formats/dvk_mx_dsk.cpp index 37de4111948..07d7a38cf95 100644 --- a/src/lib/formats/dvk_mx_dsk.cpp +++ b/src/lib/formats/dvk_mx_dsk.cpp @@ -108,7 +108,7 @@ void dvk_mx_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &hea } } -int dvk_mx_format::identify(io_generic *io, uint32_t form_factor) +int dvk_mx_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; @@ -129,7 +129,7 @@ int dvk_mx_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool dvk_mx_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool dvk_mx_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; diff --git a/src/lib/formats/dvk_mx_dsk.h b/src/lib/formats/dvk_mx_dsk.h index a95b635588c..38fd895d154 100644 --- a/src/lib/formats/dvk_mx_dsk.h +++ b/src/lib/formats/dvk_mx_dsk.h @@ -19,8 +19,8 @@ class dvk_mx_format : public floppy_image_format_t public: dvk_mx_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/esq16_dsk.cpp b/src/lib/formats/esq16_dsk.cpp index 72e27ebfad5..10802d26495 100644 --- a/src/lib/formats/esq16_dsk.cpp +++ b/src/lib/formats/esq16_dsk.cpp @@ -87,7 +87,7 @@ void esqimg_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &hea track_count = head_count = sector_count = 0; } -int esqimg_format::identify(io_generic *io, uint32_t form_factor) +int esqimg_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -97,7 +97,7 @@ int esqimg_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool esqimg_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool esqimg_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -123,7 +123,7 @@ bool esqimg_format::load(io_generic *io, uint32_t form_factor, floppy_image *ima return true; } -bool esqimg_format::save(io_generic *io, floppy_image *image) +bool esqimg_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/esq16_dsk.h b/src/lib/formats/esq16_dsk.h index 91bd03b8151..8cc49150d2c 100644 --- a/src/lib/formats/esq16_dsk.h +++ b/src/lib/formats/esq16_dsk.h @@ -21,9 +21,9 @@ class esqimg_format : public floppy_image_format_t public: esqimg_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/esq8_dsk.cpp b/src/lib/formats/esq8_dsk.cpp index b7f69c85afc..2c93e3e3286 100644 --- a/src/lib/formats/esq8_dsk.cpp +++ b/src/lib/formats/esq8_dsk.cpp @@ -88,7 +88,7 @@ void esq8img_format::find_size(io_generic *io, int &track_count, int &head_count track_count = head_count = sector_count = 0; } -int esq8img_format::identify(io_generic *io, uint32_t form_factor) +int esq8img_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -98,7 +98,7 @@ int esq8img_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool esq8img_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool esq8img_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -136,7 +136,7 @@ bool esq8img_format::load(io_generic *io, uint32_t form_factor, floppy_image *im return true; } -bool esq8img_format::save(io_generic *io, floppy_image *image) +bool esq8img_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/esq8_dsk.h b/src/lib/formats/esq8_dsk.h index af0cb46eecd..c4fe5a74f1b 100644 --- a/src/lib/formats/esq8_dsk.h +++ b/src/lib/formats/esq8_dsk.h @@ -23,9 +23,9 @@ class esq8img_format : public floppy_image_format_t public: esq8img_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/fdd_dsk.cpp b/src/lib/formats/fdd_dsk.cpp index f5eb6ea19a5..df5fd3caa8c 100644 --- a/src/lib/formats/fdd_dsk.cpp +++ b/src/lib/formats/fdd_dsk.cpp @@ -54,7 +54,7 @@ const char *fdd_format::extensions() const return "fdd"; } -int fdd_format::identify(io_generic *io, uint32_t form_factor) +int fdd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[7]; io_generic_read(io, h, 0, 7); @@ -65,7 +65,7 @@ int fdd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool fdd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool fdd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t hsec[0x0c]; diff --git a/src/lib/formats/fdd_dsk.h b/src/lib/formats/fdd_dsk.h index 86a43d5d0ee..ec013c58571 100644 --- a/src/lib/formats/fdd_dsk.h +++ b/src/lib/formats/fdd_dsk.h @@ -20,8 +20,8 @@ class fdd_format : public floppy_image_format_t public: fdd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/flex_dsk.cpp b/src/lib/formats/flex_dsk.cpp index ee3750b6101..13dcbb0f367 100644 --- a/src/lib/formats/flex_dsk.cpp +++ b/src/lib/formats/flex_dsk.cpp @@ -71,7 +71,7 @@ const char *flex_format::extensions() const return "dsk"; } -int flex_format::identify(io_generic *io, uint32_t form_factor) +int flex_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/flex_dsk.h b/src/lib/formats/flex_dsk.h index 9df0d1b24b8..d1b55168c9c 100644 --- a/src/lib/formats/flex_dsk.h +++ b/src/lib/formats/flex_dsk.h @@ -21,7 +21,7 @@ public: virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int find_size(io_generic *io, uint32_t form_factor) override; virtual const wd177x_format::format &get_track_format(const format &f, int head, int track) override; diff --git a/src/lib/formats/flopimg.cpp b/src/lib/formats/flopimg.cpp index 3f57ae9b19b..d6bd264906d 100644 --- a/src/lib/formats/flopimg.cpp +++ b/src/lib/formats/flopimg.cpp @@ -969,6 +969,14 @@ const char *floppy_image::get_variant_name(uint32_t form_factor, uint32_t varian return "Unknown"; } +bool floppy_image_format_t::has_variant(const std::vector<uint32_t> &variants, uint32_t variant) +{ + for(uint32_t v : variants) + if(variant == v) + return true; + return false; +} + floppy_image_format_t::floppy_image_format_t() { next = nullptr; @@ -986,7 +994,7 @@ void floppy_image_format_t::append(floppy_image_format_t *_next) next = _next; } -bool floppy_image_format_t::save(io_generic *, floppy_image *) +bool floppy_image_format_t::save(io_generic *, const std::vector<uint32_t> &, floppy_image *) { return false; } diff --git a/src/lib/formats/flopimg.h b/src/lib/formats/flopimg.h index d5edd6b0315..003d5f9fec5 100644 --- a/src/lib/formats/flopimg.h +++ b/src/lib/formats/flopimg.h @@ -233,9 +233,10 @@ public: @param io buffer containing the image data. @param form_factor Physical form factor of disk, from the enum in floppy_image + @param variants the variants from floppy_image the drive can handle @return 1 if image valid, 0 otherwise. */ - virtual int identify(io_generic *io, uint32_t form_factor) = 0; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) = 0; /*! @brief Load an image. The load function opens an image file and converts it to the @@ -243,19 +244,21 @@ public: @param io source buffer containing the image data. @param form_factor Physical form factor of disk, from the enum in floppy_image + @param variants the variants from floppy_image the drive can handle @param image output buffer for data in MESS internal format. @return true on success, false otherwise. */ - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) = 0; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) = 0; /*! @brief Save an image. The save function writes back an image from the MESS internal floppy representation to the appropriate format on disk. @param io output buffer for the data in the on-disk format. + @param variants the variants from floppy_image the drive can handle @param image source buffer containing data in MESS internal format. @return true on success, false otherwise. */ - virtual bool save(io_generic *io, floppy_image *image); + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image); //! @returns string containing name of format. virtual const char *name() const = 0; @@ -366,6 +369,14 @@ protected: SECTOR_INTERLEAVE_SKEW //!< Defines interleave and skew for sector counting }; + + /*! @brief Test if a variant is present in the variant vector + @param variants the variant vector + @param variant the variant to test + @result true if variant is in variants + */ + static bool has_variant(const std::vector<uint32_t> &variants, uint32_t variant); + //! Sector data description struct desc_s { diff --git a/src/lib/formats/fsd_dsk.cpp b/src/lib/formats/fsd_dsk.cpp index 7880c4415c6..c5ebd243875 100644 --- a/src/lib/formats/fsd_dsk.cpp +++ b/src/lib/formats/fsd_dsk.cpp @@ -83,7 +83,7 @@ bool fsd_format::supports_save() const return false; } -int fsd_format::identify(io_generic *io, uint32_t form_factor) +int fsd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[3]; @@ -95,7 +95,7 @@ int fsd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool fsd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool fsd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { const char* result[255]; result[0x00] = "OK"; diff --git a/src/lib/formats/fsd_dsk.h b/src/lib/formats/fsd_dsk.h index 0eddbb3f5d7..ee2c4aa466c 100644 --- a/src/lib/formats/fsd_dsk.h +++ b/src/lib/formats/fsd_dsk.h @@ -33,8 +33,8 @@ public: virtual const char *extensions() const override; virtual bool supports_save() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; }; extern const floppy_format_type FLOPPY_FSD_FORMAT; diff --git a/src/lib/formats/g64_dsk.cpp b/src/lib/formats/g64_dsk.cpp index 685b16c42ca..ed97486f08d 100644 --- a/src/lib/formats/g64_dsk.cpp +++ b/src/lib/formats/g64_dsk.cpp @@ -27,7 +27,7 @@ const uint32_t g64_format::c1541_cell_size[] = 3250 // 16MHz/13/4 }; -int g64_format::identify(io_generic *io, uint32_t form_factor) +int g64_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { char h[8]; @@ -38,7 +38,7 @@ int g64_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool g64_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool g64_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); @@ -109,7 +109,7 @@ int g64_format::generate_bitstream(int track, int head, int speed_zone, uint8_t return ((actual_cell_size >= cell_size-10) && (actual_cell_size <= cell_size+10)) ? speed_zone : -1; } -bool g64_format::save(io_generic *io, floppy_image *image) +bool g64_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int tracks, heads; image->get_actual_geometry(tracks, heads); diff --git a/src/lib/formats/g64_dsk.h b/src/lib/formats/g64_dsk.h index 1c032a09759..533a80ee266 100644 --- a/src/lib/formats/g64_dsk.h +++ b/src/lib/formats/g64_dsk.h @@ -20,9 +20,9 @@ class g64_format : public floppy_image_format_t public: g64_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/hpi_dsk.cpp b/src/lib/formats/hpi_dsk.cpp index 7a4f8d1903a..996ab60c941 100644 --- a/src/lib/formats/hpi_dsk.cpp +++ b/src/lib/formats/hpi_dsk.cpp @@ -78,7 +78,7 @@ hpi_format::hpi_format() (void)HPI_RED_IMAGE_SIZE; } -int hpi_format::identify(io_generic *io, uint32_t form_factor) +int hpi_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -142,7 +142,7 @@ bool hpi_format::geometry_from_size(uint64_t image_size , unsigned& heads , unsi } } -bool hpi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool hpi_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { unsigned heads; unsigned cylinders; @@ -191,7 +191,7 @@ bool hpi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool hpi_format::save(io_generic *io, floppy_image *image) +bool hpi_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int tracks; int heads; diff --git a/src/lib/formats/hpi_dsk.h b/src/lib/formats/hpi_dsk.h index 565a22dea58..0ce5d1e0422 100644 --- a/src/lib/formats/hpi_dsk.h +++ b/src/lib/formats/hpi_dsk.h @@ -28,9 +28,9 @@ class hpi_format : public floppy_image_format_t public: hpi_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; diff --git a/src/lib/formats/hxchfe_dsk.cpp b/src/lib/formats/hxchfe_dsk.cpp index 8e51af8a825..68360f4e9bb 100644 --- a/src/lib/formats/hxchfe_dsk.cpp +++ b/src/lib/formats/hxchfe_dsk.cpp @@ -144,7 +144,7 @@ bool hfe_format::supports_save() const return true; } -int hfe_format::identify(io_generic *io, uint32_t form_factor) +int hfe_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[8]; @@ -155,7 +155,7 @@ int hfe_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool hfe_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool hfe_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t header[HEADER_LENGTH]; uint8_t track_table[TRACK_TABLE_LENGTH]; @@ -412,7 +412,7 @@ void hfe_format::generate_track_from_hfe_bitstream(int cyl, int head, int sample image->set_write_splice_position(cyl, head, 0, 0); } -bool hfe_format::save(io_generic *io, floppy_image *image) +bool hfe_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { std::vector<uint8_t> cylbuf; diff --git a/src/lib/formats/hxchfe_dsk.h b/src/lib/formats/hxchfe_dsk.h index 75dd4c3c371..9d2dbdeae77 100644 --- a/src/lib/formats/hxchfe_dsk.h +++ b/src/lib/formats/hxchfe_dsk.h @@ -47,9 +47,9 @@ public: hfe_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/hxcmfm_dsk.cpp b/src/lib/formats/hxcmfm_dsk.cpp index 390e07ff3f8..d7cace590e7 100644 --- a/src/lib/formats/hxcmfm_dsk.cpp +++ b/src/lib/formats/hxcmfm_dsk.cpp @@ -57,7 +57,7 @@ bool mfm_format::supports_save() const return true; } -int mfm_format::identify(io_generic *io, uint32_t form_factor) +int mfm_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[7]; @@ -68,7 +68,7 @@ int mfm_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool mfm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool mfm_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { MFMIMG header; MFMTRACKIMG trackdesc; @@ -109,7 +109,7 @@ bool mfm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool mfm_format::save(io_generic *io, floppy_image *image) +bool mfm_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { // TODO: HD support MFMIMG header; diff --git a/src/lib/formats/hxcmfm_dsk.h b/src/lib/formats/hxcmfm_dsk.h index 6616794f1ed..a6f884ab03e 100644 --- a/src/lib/formats/hxcmfm_dsk.h +++ b/src/lib/formats/hxcmfm_dsk.h @@ -19,9 +19,9 @@ class mfm_format : public floppy_image_format_t public: mfm_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/ibmxdf_dsk.cpp b/src/lib/formats/ibmxdf_dsk.cpp index 592f603ef30..06265ff581a 100644 --- a/src/lib/formats/ibmxdf_dsk.cpp +++ b/src/lib/formats/ibmxdf_dsk.cpp @@ -52,7 +52,7 @@ const char *ibmxdf_format::extensions() const return "xdf,img"; } -int ibmxdf_format::identify(io_generic *io, uint32_t form_factor) +int ibmxdf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -173,7 +173,7 @@ const ibmxdf_format::format ibmxdf_format::formats_head1_track0[] = { {} }; -bool ibmxdf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ibmxdf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int type = find_size(io, form_factor); if(type == -1) diff --git a/src/lib/formats/ibmxdf_dsk.h b/src/lib/formats/ibmxdf_dsk.h index 494dbca4bfd..e22cab89c45 100644 --- a/src/lib/formats/ibmxdf_dsk.h +++ b/src/lib/formats/ibmxdf_dsk.h @@ -23,8 +23,8 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override { return false; } virtual int find_size(io_generic *io, uint32_t form_factor) override; diff --git a/src/lib/formats/imd_dsk.cpp b/src/lib/formats/imd_dsk.cpp index 80df5793489..74d414e27c2 100644 --- a/src/lib/formats/imd_dsk.cpp +++ b/src/lib/formats/imd_dsk.cpp @@ -409,7 +409,7 @@ void imd_format::fixnum(char *start, char *end) const }; } -int imd_format::identify(io_generic *io, uint32_t form_factor) +int imd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { char h[4]; @@ -420,7 +420,7 @@ int imd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool imd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool imd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); @@ -561,7 +561,7 @@ bool can_compress(const uint8_t* buffer, uint8_t ptrn, uint64_t size) return true; } -bool imd_format::save(io_generic* io, floppy_image* image) +bool imd_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t pos = 0; io_generic_write(io, &m_comment[0], pos, m_comment.size()); diff --git a/src/lib/formats/imd_dsk.h b/src/lib/formats/imd_dsk.h index dd413ae9568..cc7b3942bca 100644 --- a/src/lib/formats/imd_dsk.h +++ b/src/lib/formats/imd_dsk.h @@ -17,9 +17,9 @@ class imd_format : public floppy_image_format_t public: imd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic* io, floppy_image* image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image* image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/img_dsk.cpp b/src/lib/formats/img_dsk.cpp index 5921130003f..fd31ca37e87 100644 --- a/src/lib/formats/img_dsk.cpp +++ b/src/lib/formats/img_dsk.cpp @@ -40,7 +40,7 @@ img_format::img_format() { } -int img_format::identify(io_generic *io, uint32_t form_factor) +int img_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -52,7 +52,7 @@ int img_format::identify(io_generic *io, uint32_t form_factor) } } -bool img_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool img_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); if (size != IMG_IMAGE_SIZE) { @@ -96,7 +96,7 @@ bool img_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool img_format::save(io_generic *io, floppy_image *image) +bool img_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { for (int cyl = 0; cyl < TRACKS; cyl++) { uint8_t bitstream[ 21000 ]; diff --git a/src/lib/formats/img_dsk.h b/src/lib/formats/img_dsk.h index ab2c5adc1c2..f35e9eb00c0 100644 --- a/src/lib/formats/img_dsk.h +++ b/src/lib/formats/img_dsk.h @@ -27,9 +27,9 @@ public: img_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; diff --git a/src/lib/formats/ipf_dsk.cpp b/src/lib/formats/ipf_dsk.cpp index fc81ffe66ce..066d9ff62a6 100644 --- a/src/lib/formats/ipf_dsk.cpp +++ b/src/lib/formats/ipf_dsk.cpp @@ -45,7 +45,7 @@ bool ipf_format::supports_save() const return false; } -int ipf_format::identify(io_generic *io, uint32_t form_factor) +int ipf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { static const uint8_t refh[12] = { 0x43, 0x41, 0x50, 0x53, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0xd5, 0x73, 0xba }; uint8_t h[12]; @@ -57,7 +57,7 @@ int ipf_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool ipf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ipf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); std::vector<uint8_t> data(size); diff --git a/src/lib/formats/ipf_dsk.h b/src/lib/formats/ipf_dsk.h index e026cab2c4c..a2e4bee2a79 100644 --- a/src/lib/formats/ipf_dsk.h +++ b/src/lib/formats/ipf_dsk.h @@ -14,8 +14,8 @@ class ipf_format : public floppy_image_format_t public: ipf_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/jfd_dsk.cpp b/src/lib/formats/jfd_dsk.cpp index 7f2dc52e23b..947d6ba4022 100644 --- a/src/lib/formats/jfd_dsk.cpp +++ b/src/lib/formats/jfd_dsk.cpp @@ -183,7 +183,7 @@ const char *jfd_format::extensions() const return "jfd"; } -int jfd_format::identify(io_generic *io, uint32_t form_factor) +int jfd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); @@ -221,7 +221,7 @@ int jfd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool jfd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool jfd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); std::vector<uint8_t> img(size); diff --git a/src/lib/formats/jfd_dsk.h b/src/lib/formats/jfd_dsk.h index 50db9f9caa5..75b9910c426 100644 --- a/src/lib/formats/jfd_dsk.h +++ b/src/lib/formats/jfd_dsk.h @@ -23,8 +23,8 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; }; diff --git a/src/lib/formats/jvc_dsk.cpp b/src/lib/formats/jvc_dsk.cpp index b9ef776ef87..42bb26899d1 100644 --- a/src/lib/formats/jvc_dsk.cpp +++ b/src/lib/formats/jvc_dsk.cpp @@ -168,13 +168,13 @@ bool jvc_format::parse_header(io_generic *io, int &header_size, int &tracks, int return tracks * heads * sectors * sector_size == (size - header_size); } -int jvc_format::identify(io_generic *io, uint32_t form_factor) +int jvc_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int header_size, tracks, heads, sectors, sector_size, sector_base_id; return parse_header(io, header_size, tracks, heads, sectors, sector_size, sector_base_id) ? 50 : 0; } -bool jvc_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool jvc_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int header_size, track_count, head_count, sector_count, sector_size, sector_base_id; @@ -223,7 +223,7 @@ bool jvc_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool jvc_format::save(io_generic *io, floppy_image *image) +bool jvc_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t bitstream[500000/8]; uint8_t sector_data[50000]; diff --git a/src/lib/formats/jvc_dsk.h b/src/lib/formats/jvc_dsk.h index da37856bcf6..7c744a0acb5 100644 --- a/src/lib/formats/jvc_dsk.h +++ b/src/lib/formats/jvc_dsk.h @@ -35,9 +35,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; private: diff --git a/src/lib/formats/m20_dsk.cpp b/src/lib/formats/m20_dsk.cpp index cdd0e230db7..871e721b1bb 100644 --- a/src/lib/formats/m20_dsk.cpp +++ b/src/lib/formats/m20_dsk.cpp @@ -40,14 +40,14 @@ bool m20_format::supports_save() const return true; } -int m20_format::identify(io_generic *io, uint32_t form_factor) +int m20_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { if(io_generic_size(io) == 286720) return 50; return 0; } -bool m20_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool m20_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { for (int track = 0; track < 35; track++) for (int head = 0; head < 2; head ++) { @@ -76,7 +76,7 @@ bool m20_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool m20_format::save(io_generic *io, floppy_image *image) +bool m20_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t bitstream[500000/8]; uint8_t sector_data[50000]; diff --git a/src/lib/formats/m20_dsk.h b/src/lib/formats/m20_dsk.h index fe06d75df22..ed8a7bc4517 100644 --- a/src/lib/formats/m20_dsk.h +++ b/src/lib/formats/m20_dsk.h @@ -18,9 +18,9 @@ class m20_format : public floppy_image_format_t { public: m20_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/mdos_dsk.cpp b/src/lib/formats/mdos_dsk.cpp index a86558428ad..68a3b403b9d 100644 --- a/src/lib/formats/mdos_dsk.cpp +++ b/src/lib/formats/mdos_dsk.cpp @@ -72,7 +72,7 @@ const char *mdos_format::extensions() const return "dsk"; } -int mdos_format::identify(io_generic *io, uint32_t form_factor) +int mdos_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/mdos_dsk.h b/src/lib/formats/mdos_dsk.h index 744c9b97ed2..b6e4420f758 100644 --- a/src/lib/formats/mdos_dsk.h +++ b/src/lib/formats/mdos_dsk.h @@ -19,7 +19,7 @@ public: virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int find_size(io_generic *io, uint32_t form_factor) override; virtual const wd177x_format::format &get_track_format(const format &f, int head, int track) override; diff --git a/src/lib/formats/mfi_dsk.cpp b/src/lib/formats/mfi_dsk.cpp index eb86d8d80da..dc6c320042f 100644 --- a/src/lib/formats/mfi_dsk.cpp +++ b/src/lib/formats/mfi_dsk.cpp @@ -94,7 +94,7 @@ bool mfi_format::supports_save() const return true; } -int mfi_format::identify(io_generic *io, uint32_t form_factor) +int mfi_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { header h; @@ -108,7 +108,7 @@ int mfi_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool mfi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool mfi_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { header h; entry entries[84*2*4]; @@ -160,7 +160,7 @@ bool mfi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool mfi_format::save(io_generic *io, floppy_image *image) +bool mfi_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int tracks, heads; image->get_actual_geometry(tracks, heads); diff --git a/src/lib/formats/mfi_dsk.h b/src/lib/formats/mfi_dsk.h index 7cb84e999f0..129a9ee599e 100644 --- a/src/lib/formats/mfi_dsk.h +++ b/src/lib/formats/mfi_dsk.h @@ -12,9 +12,9 @@ class mfi_format : public floppy_image_format_t public: mfi_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/nfd_dsk.cpp b/src/lib/formats/nfd_dsk.cpp index e677f4ff6f5..1a0430f9af1 100644 --- a/src/lib/formats/nfd_dsk.cpp +++ b/src/lib/formats/nfd_dsk.cpp @@ -100,7 +100,7 @@ const char *nfd_format::extensions() const return "nfd"; } -int nfd_format::identify(io_generic *io, uint32_t form_factor) +int nfd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[16]; io_generic_read(io, h, 0, 16); @@ -111,7 +111,7 @@ int nfd_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool nfd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool nfd_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); uint8_t h[0x120], hsec[0x10]; diff --git a/src/lib/formats/nfd_dsk.h b/src/lib/formats/nfd_dsk.h index 56cf6cdb506..5eb41893c5f 100644 --- a/src/lib/formats/nfd_dsk.h +++ b/src/lib/formats/nfd_dsk.h @@ -20,8 +20,8 @@ class nfd_format : public floppy_image_format_t public: nfd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/opd_dsk.cpp b/src/lib/formats/opd_dsk.cpp index b45b58762ed..65c139bc6bb 100644 --- a/src/lib/formats/opd_dsk.cpp +++ b/src/lib/formats/opd_dsk.cpp @@ -30,7 +30,7 @@ const char *opd_format::extensions() const return "opd,opu"; } -int opd_format::identify(io_generic *io, uint32_t form_factor) +int opd_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/opd_dsk.h b/src/lib/formats/opd_dsk.h index 45e002092d6..9a4205314ec 100644 --- a/src/lib/formats/opd_dsk.h +++ b/src/lib/formats/opd_dsk.h @@ -21,7 +21,7 @@ class opd_format : public wd177x_format public: opd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int get_image_offset(const format &f, int head, int track) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/oric_dsk.cpp b/src/lib/formats/oric_dsk.cpp index 4e77cfab13b..f555416a21c 100644 --- a/src/lib/formats/oric_dsk.cpp +++ b/src/lib/formats/oric_dsk.cpp @@ -35,7 +35,7 @@ bool oric_dsk_format::supports_save() const return true; } -int oric_dsk_format::identify(io_generic *io, uint32_t form_factor) +int oric_dsk_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[256]; io_generic_read(io, h, 0, 256); @@ -54,7 +54,7 @@ int oric_dsk_format::identify(io_generic *io, uint32_t form_factor) return 100; } -bool oric_dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool oric_dsk_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t h[256]; uint8_t t[6250+3]; @@ -103,7 +103,7 @@ bool oric_dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *i return true; } -bool oric_dsk_format::save(io_generic *io, floppy_image *image) +bool oric_dsk_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return true; } diff --git a/src/lib/formats/oric_dsk.h b/src/lib/formats/oric_dsk.h index 5104273864b..1c9e12a29d6 100644 --- a/src/lib/formats/oric_dsk.h +++ b/src/lib/formats/oric_dsk.h @@ -18,9 +18,9 @@ class oric_dsk_format : public floppy_image_format_t { public: oric_dsk_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/os9_dsk.cpp b/src/lib/formats/os9_dsk.cpp index 164eafeeedb..352afa63c25 100644 --- a/src/lib/formats/os9_dsk.cpp +++ b/src/lib/formats/os9_dsk.cpp @@ -69,7 +69,7 @@ const char *os9_format::extensions() const return "dsk,os9"; } -int os9_format::identify(io_generic *io, uint32_t form_factor) +int os9_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/os9_dsk.h b/src/lib/formats/os9_dsk.h index 338e290e07b..eb062e6bdcf 100644 --- a/src/lib/formats/os9_dsk.h +++ b/src/lib/formats/os9_dsk.h @@ -21,7 +21,7 @@ public: virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int find_size(io_generic *io, uint32_t form_factor) override; virtual const wd177x_format::format &get_track_format(const format &f, int head, int track) override; diff --git a/src/lib/formats/pasti_dsk.cpp b/src/lib/formats/pasti_dsk.cpp index 4236c066708..0ab6dc2f064 100644 --- a/src/lib/formats/pasti_dsk.cpp +++ b/src/lib/formats/pasti_dsk.cpp @@ -36,7 +36,7 @@ bool pasti_format::supports_save() const return false; } -int pasti_format::identify(io_generic *io, uint32_t form_factor) +int pasti_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[16]; io_generic_read(io, h, 0, 16); @@ -58,7 +58,7 @@ static void hexdump(const uint8_t *d, int s) } } -bool pasti_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool pasti_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t fh[16]; io_generic_read(io, fh, 0, 16); diff --git a/src/lib/formats/pasti_dsk.h b/src/lib/formats/pasti_dsk.h index a98baffcb90..b3fc869da4d 100644 --- a/src/lib/formats/pasti_dsk.h +++ b/src/lib/formats/pasti_dsk.h @@ -12,8 +12,8 @@ class pasti_format : public floppy_image_format_t public: pasti_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/pc98fdi_dsk.cpp b/src/lib/formats/pc98fdi_dsk.cpp index 37cdae18ff7..2d503acebe4 100644 --- a/src/lib/formats/pc98fdi_dsk.cpp +++ b/src/lib/formats/pc98fdi_dsk.cpp @@ -30,7 +30,7 @@ const char *pc98fdi_format::extensions() const return "fdi"; } -int pc98fdi_format::identify(io_generic *io, uint32_t form_factor) +int pc98fdi_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); uint8_t h[32]; @@ -48,7 +48,7 @@ int pc98fdi_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool pc98fdi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool pc98fdi_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t h[32]; diff --git a/src/lib/formats/pc98fdi_dsk.h b/src/lib/formats/pc98fdi_dsk.h index 18c2d9edc7d..1c60f059cbe 100644 --- a/src/lib/formats/pc98fdi_dsk.h +++ b/src/lib/formats/pc98fdi_dsk.h @@ -20,8 +20,8 @@ class pc98fdi_format : public floppy_image_format_t public: pc98fdi_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/pc_dsk.cpp b/src/lib/formats/pc_dsk.cpp index c86335a0596..75e05f87654 100644 --- a/src/lib/formats/pc_dsk.cpp +++ b/src/lib/formats/pc_dsk.cpp @@ -159,7 +159,7 @@ const char *pc_format::extensions() const return "dsk,ima,img,ufi,360"; } -int pc_format::identify(io_generic *io, uint32_t form_factor) +int pc_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -178,7 +178,7 @@ int pc_format::identify(io_generic *io, uint32_t form_factor) file_footer_skip_bytes = 0x400; } - return upd765_format::identify(io, form_factor); + return upd765_format::identify(io, form_factor, variants); } const pc_format::format pc_format::formats[] = { diff --git a/src/lib/formats/pc_dsk.h b/src/lib/formats/pc_dsk.h index b4080e1dcc7..1d049360831 100644 --- a/src/lib/formats/pc_dsk.h +++ b/src/lib/formats/pc_dsk.h @@ -25,7 +25,7 @@ class pc_format : public upd765_format public: pc_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/poly_dsk.cpp b/src/lib/formats/poly_dsk.cpp index cf746b78624..a865729864e 100644 --- a/src/lib/formats/poly_dsk.cpp +++ b/src/lib/formats/poly_dsk.cpp @@ -34,7 +34,7 @@ bool poly_cpm_format::supports_save() const return true; } -int poly_cpm_format::identify(io_generic *io, uint32_t form_factor) +int poly_cpm_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t boot[16]; uint64_t size = io_generic_size(io); @@ -52,7 +52,7 @@ int poly_cpm_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool poly_cpm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool poly_cpm_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int total_tracks, spt, bps, head_num; diff --git a/src/lib/formats/poly_dsk.h b/src/lib/formats/poly_dsk.h index 65b69c69270..8fd3c9be4a5 100644 --- a/src/lib/formats/poly_dsk.h +++ b/src/lib/formats/poly_dsk.h @@ -20,8 +20,8 @@ public: virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; }; diff --git a/src/lib/formats/rx50_dsk.cpp b/src/lib/formats/rx50_dsk.cpp index 18bac995146..6e076f1a5bd 100644 --- a/src/lib/formats/rx50_dsk.cpp +++ b/src/lib/formats/rx50_dsk.cpp @@ -124,7 +124,7 @@ void rx50img_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &he track_count = head_count = sector_count = 0; } -int rx50img_format::identify(io_generic *io, uint32_t form_factor) +int rx50img_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -135,7 +135,7 @@ int rx50img_format::identify(io_generic *io, uint32_t form_factor) } // /* Sectors are numbered 1 to 10 */ -bool rx50img_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool rx50img_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -163,7 +163,7 @@ bool rx50img_format::load(io_generic *io, uint32_t form_factor, floppy_image *im return true; } -bool rx50img_format::save(io_generic *io, floppy_image *image) +bool rx50img_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/rx50_dsk.h b/src/lib/formats/rx50_dsk.h index 318e0d02902..9cac83bd67f 100644 --- a/src/lib/formats/rx50_dsk.h +++ b/src/lib/formats/rx50_dsk.h @@ -23,9 +23,9 @@ class rx50img_format : public floppy_image_format_t public: rx50img_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/sdf_dsk.cpp b/src/lib/formats/sdf_dsk.cpp index a1a0c921da7..223b6dc8d8a 100644 --- a/src/lib/formats/sdf_dsk.cpp +++ b/src/lib/formats/sdf_dsk.cpp @@ -37,7 +37,7 @@ const char *sdf_format::extensions() const } -int sdf_format::identify(io_generic *io, uint32_t form_factor) +int sdf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t header[HEADER_SIZE]; @@ -74,7 +74,7 @@ int sdf_format::identify(io_generic *io, uint32_t form_factor) } -bool sdf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool sdf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t header[HEADER_SIZE]; std::vector<uint8_t> track_data(TOTAL_TRACK_SIZE); @@ -181,7 +181,7 @@ bool sdf_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool sdf_format::save(io_generic *io, floppy_image *image) +bool sdf_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/sdf_dsk.h b/src/lib/formats/sdf_dsk.h index 46b3905d6e7..fe3f6eb7a98 100644 --- a/src/lib/formats/sdf_dsk.h +++ b/src/lib/formats/sdf_dsk.h @@ -22,9 +22,9 @@ class sdf_format : public floppy_image_format_t public: sdf_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/st_dsk.cpp b/src/lib/formats/st_dsk.cpp index 36fe9a01970..cb363cbe3e3 100644 --- a/src/lib/formats/st_dsk.cpp +++ b/src/lib/formats/st_dsk.cpp @@ -47,7 +47,7 @@ void st_format::find_size(io_generic *io, uint8_t &track_count, uint8_t &head_co track_count = head_count = sector_count = 0; } -int st_format::identify(io_generic *io, uint32_t form_factor) +int st_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -57,7 +57,7 @@ int st_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool st_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool st_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t track_count, head_count, sector_count; find_size(io, track_count, head_count, sector_count); @@ -84,7 +84,7 @@ bool st_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool st_format::save(io_generic *io, floppy_image *image) +bool st_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); @@ -206,7 +206,7 @@ bool msa_format::compress(const uint8_t *buffer, int usize, uint8_t *dest, int & return dst < usize; } -int msa_format::identify(io_generic *io, uint32_t form_factor) +int msa_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint16_t sign, sect, head, strack, etrack; read_header(io, sign, sect, head, strack, etrack); @@ -220,7 +220,7 @@ int msa_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool msa_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool msa_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint16_t sign, sect, heads, strack, etrack; read_header(io, sign, sect, heads, strack, etrack); @@ -258,7 +258,7 @@ bool msa_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool msa_format::save(io_generic *io, floppy_image *image) +bool msa_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count, head_count, sector_count; get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count); diff --git a/src/lib/formats/st_dsk.h b/src/lib/formats/st_dsk.h index 44a0827757a..ce501a9f516 100644 --- a/src/lib/formats/st_dsk.h +++ b/src/lib/formats/st_dsk.h @@ -19,9 +19,9 @@ class st_format : public floppy_image_format_t public: st_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; @@ -37,9 +37,9 @@ class msa_format : public floppy_image_format_t public: msa_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/svi_dsk.cpp b/src/lib/formats/svi_dsk.cpp index 2fd168b1dff..c67ef0cd95d 100644 --- a/src/lib/formats/svi_dsk.cpp +++ b/src/lib/formats/svi_dsk.cpp @@ -29,7 +29,7 @@ const char *svi_format::extensions() const return "dsk"; } -int svi_format::identify(io_generic *io, uint32_t form_factor) +int svi_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); @@ -39,7 +39,7 @@ int svi_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool svi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool svi_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint64_t size = io_generic_size(io); int head_count; @@ -91,7 +91,7 @@ bool svi_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool svi_format::save(io_generic *io, floppy_image *image) +bool svi_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t bitstream[500000/8]; uint8_t sector_data[50000]; diff --git a/src/lib/formats/svi_dsk.h b/src/lib/formats/svi_dsk.h index c95bc241e21..57f4f89ccca 100644 --- a/src/lib/formats/svi_dsk.h +++ b/src/lib/formats/svi_dsk.h @@ -23,9 +23,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; }; diff --git a/src/lib/formats/td0_dsk.cpp b/src/lib/formats/td0_dsk.cpp index 20902fd011e..1ca0479669a 100644 --- a/src/lib/formats/td0_dsk.cpp +++ b/src/lib/formats/td0_dsk.cpp @@ -819,7 +819,7 @@ const char *td0_format::extensions() const return "td0"; } -int td0_format::identify(io_generic *io, uint32_t form_factor) +int td0_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t h[7]; @@ -831,7 +831,7 @@ int td0_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool td0_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool td0_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int track_count = 0; int head_count = 0; @@ -1028,7 +1028,7 @@ bool td0_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) } -bool td0_format::save(io_generic *io, floppy_image *image) +bool td0_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { return false; } diff --git a/src/lib/formats/td0_dsk.h b/src/lib/formats/td0_dsk.h index 96007fa4314..b4656305920 100644 --- a/src/lib/formats/td0_dsk.h +++ b/src/lib/formats/td0_dsk.h @@ -13,9 +13,9 @@ class td0_format : public floppy_image_format_t public: td0_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual const char *name() const override; virtual const char *description() const override; diff --git a/src/lib/formats/ti99_dsk.cpp b/src/lib/formats/ti99_dsk.cpp index d8f12ea960d..00925a0feb7 100644 --- a/src/lib/formats/ti99_dsk.cpp +++ b/src/lib/formats/ti99_dsk.cpp @@ -80,7 +80,7 @@ int ti99_floppy_format::get_encoding(int cell_size) /* Load the image from disk and convert it into a sequence of flux levels. */ -bool ti99_floppy_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool ti99_floppy_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int cell_size = 0; int sector_count = 0; @@ -211,7 +211,7 @@ bool ti99_floppy_format::load(io_generic *io, uint32_t form_factor, floppy_image /* Save all tracks to the image file. */ -bool ti99_floppy_format::save(io_generic *io, floppy_image *image) +bool ti99_floppy_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { int act_track_size = 0; @@ -925,7 +925,7 @@ const char *ti99_sdf_format::extensions() const return "dsk"; } -int ti99_sdf_format::identify(io_generic *io, uint32_t form_factor) +int ti99_sdf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t file_size = io_generic_size(io); int vote = 0; @@ -1218,7 +1218,7 @@ const char *ti99_tdf_format::extensions() const /* Determine whether the image file can be interpreted as a track dump */ -int ti99_tdf_format::identify(io_generic *io, uint32_t form_factor) +int ti99_tdf_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int vote = 0; uint8_t fulltrack[6872]; diff --git a/src/lib/formats/ti99_dsk.h b/src/lib/formats/ti99_dsk.h index 04ba3e88a14..d15a71c62ac 100644 --- a/src/lib/formats/ti99_dsk.h +++ b/src/lib/formats/ti99_dsk.h @@ -23,8 +23,8 @@ class ti99_floppy_format : public floppy_image_format_t { public: bool supports_save() const override { return true; } - bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - bool save(io_generic *io, floppy_image *image) override; + bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; protected: int decode_bitstream(const uint8_t *bitstream, uint8_t *trackdata, int *sector, int cell_count, int encoding, uint8_t gapbytes, int track_size); @@ -54,7 +54,7 @@ protected: class ti99_sdf_format : public ti99_floppy_format { public: - int identify(io_generic *io, uint32_t form_factor) override; + int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; const char *name() const override; const char *description() const override; const char *extensions() const override; @@ -93,7 +93,7 @@ extern const floppy_format_type FLOPPY_TI99_SDF_FORMAT; class ti99_tdf_format : public ti99_floppy_format { public: - int identify(io_generic *io, uint32_t form_factor) override; + int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; const char *name() const override; const char *description() const override; const char *extensions() const override; diff --git a/src/lib/formats/uniflex_dsk.cpp b/src/lib/formats/uniflex_dsk.cpp index 6b536aac3eb..21f4479e704 100644 --- a/src/lib/formats/uniflex_dsk.cpp +++ b/src/lib/formats/uniflex_dsk.cpp @@ -31,7 +31,7 @@ const char *uniflex_format::extensions() const return "dsk"; } -int uniflex_format::identify(io_generic *io, uint32_t form_factor) +int uniflex_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); diff --git a/src/lib/formats/uniflex_dsk.h b/src/lib/formats/uniflex_dsk.h index cd3a3c515ab..eeb50e5bbe9 100644 --- a/src/lib/formats/uniflex_dsk.h +++ b/src/lib/formats/uniflex_dsk.h @@ -19,7 +19,7 @@ public: virtual const char *name() const override; virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; virtual int find_size(io_generic *io, uint32_t form_factor) override; void build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const override; diff --git a/src/lib/formats/upd765_dsk.cpp b/src/lib/formats/upd765_dsk.cpp index 4265aea6a36..8676c4b9f63 100644 --- a/src/lib/formats/upd765_dsk.cpp +++ b/src/lib/formats/upd765_dsk.cpp @@ -29,7 +29,7 @@ int upd765_format::find_size(io_generic *io, uint32_t form_factor) const return -1; } -int upd765_format::identify(io_generic *io, uint32_t form_factor) +int upd765_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -173,7 +173,7 @@ floppy_image_format_t::desc_e* upd765_format::get_desc_mfm(const format &f, int return desc; } -bool upd765_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool upd765_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int type = find_size(io, form_factor); if(type == -1) @@ -234,7 +234,7 @@ bool upd765_format::supports_save() const return true; } -bool upd765_format::save(io_generic *io, floppy_image *image) +bool upd765_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { // Count the number of formats int formats_count; diff --git a/src/lib/formats/upd765_dsk.h b/src/lib/formats/upd765_dsk.h index a1b3f776104..bea2f8405c5 100644 --- a/src/lib/formats/upd765_dsk.h +++ b/src/lib/formats/upd765_dsk.h @@ -39,9 +39,9 @@ public: // End the array with {} upd765_format(const format *formats); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; protected: diff --git a/src/lib/formats/vdk_dsk.cpp b/src/lib/formats/vdk_dsk.cpp index fa07d22a958..7baab19dc21 100644 --- a/src/lib/formats/vdk_dsk.cpp +++ b/src/lib/formats/vdk_dsk.cpp @@ -31,7 +31,7 @@ const char *vdk_format::extensions() const return "vdk"; } -int vdk_format::identify(io_generic *io, uint32_t form_factor) +int vdk_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint8_t id[2]; io_generic_read(io, id, 0, 2); @@ -42,7 +42,7 @@ int vdk_format::identify(io_generic *io, uint32_t form_factor) return 0; } -bool vdk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool vdk_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t header[0x100]; io_generic_read(io, header, 0, 0x100); @@ -85,7 +85,7 @@ bool vdk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) return true; } -bool vdk_format::save(io_generic *io, floppy_image *image) +bool vdk_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { uint8_t bitstream[500000/8]; uint8_t sector_data[50000]; diff --git a/src/lib/formats/vdk_dsk.h b/src/lib/formats/vdk_dsk.h index c68fbd9bfb0..94347b326f6 100644 --- a/src/lib/formats/vdk_dsk.h +++ b/src/lib/formats/vdk_dsk.h @@ -25,9 +25,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; private: diff --git a/src/lib/formats/victor9k_dsk.cpp b/src/lib/formats/victor9k_dsk.cpp index 188b4c250e4..b9ae3d89a72 100644 --- a/src/lib/formats/victor9k_dsk.cpp +++ b/src/lib/formats/victor9k_dsk.cpp @@ -130,7 +130,7 @@ int victor9k_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int victor9k_format::identify(io_generic *io, uint32_t form_factor) +int victor9k_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -248,7 +248,7 @@ void victor9k_format::build_sector_description(const format &f, uint8_t *sectdat } } -bool victor9k_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool victor9k_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int type = find_size(io, form_factor); if(type == -1) @@ -392,7 +392,7 @@ const int victor9k_format::rpm[9] = 252, 267, 283, 300, 321, 342, 368, 401, 417 }; -bool victor9k_format::save(io_generic *io, floppy_image *image) +bool victor9k_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { const format &f = formats[0]; diff --git a/src/lib/formats/victor9k_dsk.h b/src/lib/formats/victor9k_dsk.h index 066e270e78f..92d1c664a5f 100644 --- a/src/lib/formats/victor9k_dsk.h +++ b/src/lib/formats/victor9k_dsk.h @@ -34,9 +34,9 @@ public: virtual const char *description() const override; virtual const char *extensions() const override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override { return true; } static int get_rpm(int head, int track); diff --git a/src/lib/formats/wd177x_dsk.cpp b/src/lib/formats/wd177x_dsk.cpp index a7a829efb8f..c4c98f54d32 100644 --- a/src/lib/formats/wd177x_dsk.cpp +++ b/src/lib/formats/wd177x_dsk.cpp @@ -51,7 +51,7 @@ int wd177x_format::find_size(io_generic *io, uint32_t form_factor) return -1; } -int wd177x_format::identify(io_generic *io, uint32_t form_factor) +int wd177x_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { int type = find_size(io, form_factor); @@ -196,7 +196,7 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int return desc; } -bool wd177x_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) +bool wd177x_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int type = find_size(io, form_factor); if(type == -1) @@ -257,7 +257,7 @@ bool wd177x_format::supports_save() const return true; } -bool wd177x_format::save(io_generic *io, floppy_image *image) +bool wd177x_format::save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) { // Count the number of formats int formats_count; diff --git a/src/lib/formats/wd177x_dsk.h b/src/lib/formats/wd177x_dsk.h index 540e3e8079c..bb72de85ef8 100644 --- a/src/lib/formats/wd177x_dsk.h +++ b/src/lib/formats/wd177x_dsk.h @@ -38,9 +38,9 @@ public: // End the array with {} wd177x_format(const format *formats); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override; + virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override; + virtual bool save(io_generic *io, const std::vector<uint32_t> &variants, floppy_image *image) override; virtual bool supports_save() const override; protected: |