summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author Mark Garlanger <mgarlanger@users.noreply.github.com>2024-09-08 04:29:42 -0500
committer GitHub <noreply@github.com>2024-09-08 11:29:42 +0200
commit362d7321368c93bb960d51dbfe6bf6e07d451b18 (patch)
tree585e0ccd6f105f92d20d45dee478702bd5768d00 /src/lib
parentb72023282b6029adf489b8a4b8b79b1ba760707d (diff)
floppy.cpp: Use standard drives for hard-sectored systems (#12727)
* floppy.cpp: Use standard drives for hard-sectored systems * fix typo
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/flopimg.cpp13
-rw-r--r--src/lib/formats/flopimg.h26
2 files changed, 38 insertions, 1 deletions
diff --git a/src/lib/formats/flopimg.cpp b/src/lib/formats/flopimg.cpp
index 2139ae11be0..fa4903447fb 100644
--- a/src/lib/formats/flopimg.cpp
+++ b/src/lib/formats/flopimg.cpp
@@ -138,13 +138,26 @@ const char *floppy_image::get_variant_name(uint32_t form_factor, uint32_t varian
{
switch(variant) {
case SSSD: return "Single side, single density";
+ case SSSD10: return "Single side, single density, 10-sector";
+ case SSSD16: return "Single side, single density, 16-sector";
+ case SSSD32: return "Single side, single density, 32-sector";
case SSDD: return "Single side, double density";
+ case SSDD10: return "Single side, double density, 10-sector";
case SSDD16: return "Single side, double density, 16 hard sector";
+ case SSDD32: return "Single side, double density, 32-sector";
case SSQD: return "Single side, quad density";
+ case SSQD10: return "Single side, quad density, 10-sector";
case SSQD16: return "Single side, quad density, 16 hard sector";
+ case DSSD: return "Double side, single density";
+ case DSSD10: return "Double side, single density, 10-sector";
+ case DSSD16: return "Double side, single density, 16-sector";
+ case DSSD32: return "Double side, single density, 32-sector";
case DSDD: return "Double side, double density";
+ case DSDD10: return "Double side, double density, 10-sector";
case DSDD16: return "Double side, double density, 16 hard sector";
+ case DSDD32: return "Double side, double density, 32-sector";
case DSQD: return "Double side, quad density";
+ case DSQD10: return "Double side, quad density, 10-sector";
case DSQD16: return "Double side, quad density, 16 hard sector";
case DSHD: return "Double side, high density";
case DSED: return "Double side, extended density";
diff --git a/src/lib/formats/flopimg.h b/src/lib/formats/flopimg.h
index bd8e4e52f67..18cc17ea73b 100644
--- a/src/lib/formats/flopimg.h
+++ b/src/lib/formats/flopimg.h
@@ -526,14 +526,26 @@ public:
//! Variants
enum {
SSSD = 0x44535353, //!< "SSSD", Single-sided single-density
+ SSSD10 = 0x30315353, //!< "SS10", Single-sided single-density 10 hard sector
+ SSSD16 = 0x36315353, //!< "SS16", Single-sided single-density 16 hard sector
+ SSSD32 = 0x32335353, //!< "SS32", Single-sided single-density 32 hard sector
SSDD = 0x44445353, //!< "SSDD", Single-sided double-density
+ SSDD10 = 0x30314453, //!< "SD10", Single-sided double-density 10 hard sector
SSDD16 = 0x36314453, //!< "SD16", Single-sided double-density 16 hard sector
+ SSDD32 = 0x32334453, //!< "SD32", Single-sided double-density 32 hard sector
SSQD = 0x44515353, //!< "SSQD", Single-sided quad-density
+ SSQD10 = 0x30315153, //!< "SQ10", Single-sided quad-density 10 hard sector
SSQD16 = 0x36315153, //!< "SQ16", Single-sided quad-density 16 hard sector
DSSD = 0x44535344, //!< "DSSD", Double-sided single-density
+ DSSD10 = 0x30315344, //!< "DS10", Double-sided single-density 10 hard sector
+ DSSD16 = 0x36315344, //!< "DS16", Double-sided single-density 16 hard sector
+ DSSD32 = 0x32335344, //!< "DS32", Double-sided single-density 32 hard sector
DSDD = 0x44445344, //!< "DSDD", Double-sided double-density (720K in 3.5, 360K in 5.25)
+ DSDD10 = 0x30314444, //!< "DD10", Double-sided double-density 10 hard sector
DSDD16 = 0x36314444, //!< "DD16", Double-sided double-density 16 hard sector (360K in 5.25)
+ DSDD32 = 0x32334444, //!< "DD32", Double-sided double-density 32 hard sector
DSQD = 0x44515344, //!< "DSQD", Double-sided quad-density (720K in 5.25, means DD+80 tracks)
+ DSQD10 = 0x30315144, //!< "DQ10", Double-sided quad-density 10 hard sector
DSQD16 = 0x36315144, //!< "DQ16", Double-sided quad-density 16 hard sector (720K in 5.25, means DD+80 tracks)
DSHD = 0x44485344, //!< "DSHD", Double-sided high-density (1440K)
DSED = 0x44455344 //!< "DSED", Double-sided extra-density (2880K)
@@ -546,6 +558,14 @@ public:
M2FM = 0x4D32464D //!< "M2FM", modified modified frequency modulation
};
+ //! Sectoring
+ enum {
+ SOFT = 0x54464F53, //!< "SOFT", Soft-sectored
+ H10 = 0x20303148, //!< "H10 ", Hard 10-sectored
+ H16 = 0x20363148, //!< "H16 ", Hard 16-sectored
+ H32 = 0x20323348 //!< "H32 ", Hard 32-sectored (8 inch disk)
+ };
+
// construction/destruction
@@ -562,10 +582,14 @@ public:
uint32_t get_form_factor() const noexcept { return form_factor; }
//! @return the variant.
uint32_t get_variant() const noexcept { return variant; }
+ //! @return the disk sectoring.
+ uint32_t get_sectoring() const noexcept { return sectoring; }
//! @param v the variant.
void set_variant(uint32_t v);
//! @param v the variant.
void set_form_variant(uint32_t f, uint32_t v) { if(form_factor == FF_UNKNOWN) form_factor = f; set_variant(v); }
+ //! @param s the sectoring.
+ void set_sectoring(uint32_t s) { sectoring = s; }
//! Find most recent and next index hole for provided angular position.
//! The most recent hole may be equal to provided position. The next
@@ -623,7 +647,7 @@ public:
private:
int tracks, heads;
- uint32_t form_factor, variant;
+ uint32_t form_factor, variant, sectoring;
struct track_info
{