summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-03-04 13:48:07 +0100
committer Olivier Galibert <galibert@pobox.com>2021-03-04 13:48:34 +0100
commit551714138a9dbe4e4a598d70315c01417e3e35a6 (patch)
tree446c8dca4884fab712ccac5b73678cc16a3bc932
parente3d0004eed9f933844fbf8db6a9f78174fecd3c6 (diff)
apple_gcr: Refuse 800K images on single-sided drives
-rw-r--r--src/lib/formats/ap_dsk35.cpp5
-rw-r--r--src/lib/formats/flopimg.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/src/lib/formats/ap_dsk35.cpp b/src/lib/formats/ap_dsk35.cpp
index cecf105c189..39ceceaef7b 100644
--- a/src/lib/formats/ap_dsk35.cpp
+++ b/src/lib/formats/ap_dsk35.cpp
@@ -1403,7 +1403,7 @@ bool apple_gcr_format::supports_save() const
int apple_gcr_format::identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants)
{
uint64_t size = io_generic_size(io);
- if(size == 409600 || size == 819200)
+ if(size == 409600 || (size == 819200 && (variants.empty() || has_variant(variants, floppy_image::DSDD))))
return 50;
return 0;
@@ -1422,9 +1422,10 @@ bool apple_gcr_format::load(io_generic *io, uint32_t form_factor, const std::vec
uint64_t size = io_generic_size(io);
int head_count = size == 409600 ? 1 : size == 819200 ? 2 : 0;
+ image->set_form_variant(floppy_image::FF_35, head_count == 2 ? floppy_image::DSDD : floppy_image::SSDD);
+
if(!head_count)
return false;
-
for(int track=0; track < 80; track++) {
for(int head=0; head < head_count; head++) {
int ns = 12 - (track/16);
diff --git a/src/lib/formats/flopimg.h b/src/lib/formats/flopimg.h
index 661ce4b2ac5..49d9ae1f29c 100644
--- a/src/lib/formats/flopimg.h
+++ b/src/lib/formats/flopimg.h
@@ -751,7 +751,7 @@ public:
//! @param v the variant.
void set_variant(uint32_t v) { variant = v; }
//! @param v the variant.
- void set_form_variant(uint32_t f, uint32_t v) { if(form_factor == FF_UNKNOWN) form_factor = f, variant = v; }
+ void set_form_variant(uint32_t f, uint32_t v) { if(form_factor == FF_UNKNOWN) form_factor = f; variant = v; }
/*!
@param track