summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-03-31 16:49:14 +0200
committer Olivier Galibert <galibert@pobox.com>2021-03-31 16:49:29 +0200
commit69bde90a2f5a7d129702e026c965d0415ab6cee3 (patch)
tree7b1723463d071dbdb8ceb4f010cbaf80cdbf5cf3 /src/lib
parent75cfa07377683ff3cbd6e633b556160ab8252c7a (diff)
wd,upd: filter unsupported image formats
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/upd765_dsk.cpp8
-rw-r--r--src/lib/formats/upd765_dsk.h2
-rw-r--r--src/lib/formats/wd177x_dsk.cpp9
-rw-r--r--src/lib/formats/wd177x_dsk.h2
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 &current_size, int &end_gap_index);
floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int &current_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 &current_size, int &end_gap_index);
virtual floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int &current_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);