diff options
-rw-r--r-- | src/lib/formats/upd765_dsk.cpp | 8 | ||||
-rw-r--r-- | src/lib/formats/upd765_dsk.h | 2 | ||||
-rw-r--r-- | src/lib/formats/wd177x_dsk.cpp | 9 | ||||
-rw-r--r-- | src/lib/formats/wd177x_dsk.h | 2 |
4 files changed, 12 insertions, 9 deletions
diff --git a/src/lib/formats/upd765_dsk.cpp b/src/lib/formats/upd765_dsk.cpp index e5f298ed8fd..e7118dde236 100644 --- a/src/lib/formats/upd765_dsk.cpp +++ b/src/lib/formats/upd765_dsk.cpp @@ -15,13 +15,15 @@ upd765_format::upd765_format(const format *_formats) : file_header_skip_bytes(0) { } -int upd765_format::find_size(io_generic *io, uint32_t form_factor) const +int upd765_format::find_size(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) const { uint64_t size = io_generic_size(io); for(int i=0; formats[i].form_factor; i++) { const format &f = formats[i]; if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) continue; + if(!variants.empty() && !has_variant(variants, f.variant)) + continue; if(size == file_header_skip_bytes + (uint64_t) compute_track_size(f) * f.track_count * f.head_count + file_footer_skip_bytes) return i; @@ -31,7 +33,7 @@ int upd765_format::find_size(io_generic *io, uint32_t form_factor) const int upd765_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { - int type = find_size(io, form_factor); + int type = find_size(io, form_factor, variants); if(type != -1) return 50; @@ -175,7 +177,7 @@ floppy_image_format_t::desc_e* upd765_format::get_desc_mfm(const format &f, int 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); + int type = find_size(io, form_factor, variants); if(type == -1) return false; diff --git a/src/lib/formats/upd765_dsk.h b/src/lib/formats/upd765_dsk.h index bea2f8405c5..e93a0f24326 100644 --- a/src/lib/formats/upd765_dsk.h +++ b/src/lib/formats/upd765_dsk.h @@ -50,7 +50,7 @@ protected: floppy_image_format_t::desc_e* get_desc_fm(const format &f, int ¤t_size, int &end_gap_index); floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int ¤t_size, int &end_gap_index); - int find_size(io_generic *io, uint32_t form_factor) const; + int find_size(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) const; int compute_track_size(const format &f) const; virtual void build_sector_description(const format &d, uint8_t *sectdata, desc_s *sectors, int track, int head) const; void check_compatibility(floppy_image *image, std::vector<int> &candidates); diff --git a/src/lib/formats/wd177x_dsk.cpp b/src/lib/formats/wd177x_dsk.cpp index 2979d213933..b7b4da3a382 100644 --- a/src/lib/formats/wd177x_dsk.cpp +++ b/src/lib/formats/wd177x_dsk.cpp @@ -29,14 +29,15 @@ const wd177x_format::format &wd177x_format::get_track_format(const format &f, in /* Default implementation for find_size. May be overwritten by subclasses. */ -int wd177x_format::find_size(io_generic *io, uint32_t form_factor) +int wd177x_format::find_size(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) { uint64_t size = io_generic_size(io); for(int i=0; formats[i].form_factor; i++) { const format &f = formats[i]; if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) continue; - + if(!variants.empty() && !has_variant(variants, f.variant)) + continue; uint64_t format_size = 0; for(int track=0; track < f.track_count; track++) { for(int head=0; head < f.head_count; head++) { @@ -53,7 +54,7 @@ int wd177x_format::find_size(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); + int type = find_size(io, form_factor, variants); if(type != -1) return 50; @@ -198,7 +199,7 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int 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); + int type = find_size(io, form_factor, variants); if(type == -1) return false; diff --git a/src/lib/formats/wd177x_dsk.h b/src/lib/formats/wd177x_dsk.h index bb72de85ef8..4cae9ffa754 100644 --- a/src/lib/formats/wd177x_dsk.h +++ b/src/lib/formats/wd177x_dsk.h @@ -51,7 +51,7 @@ protected: virtual const wd177x_format::format &get_track_format(const format &f, int head, int track); virtual floppy_image_format_t::desc_e* get_desc_fm(const format &f, int ¤t_size, int &end_gap_index); virtual floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int ¤t_size, int &end_gap_index); - virtual int find_size(io_generic *io, uint32_t form_factor); + virtual int find_size(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants); virtual int get_image_offset(const format &f, int head, int track); virtual int get_track_dam_fm(const format &f, int head, int track); virtual int get_track_dam_mfm(const format &f, int head, int track); |