summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/flex_dsk.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/flex_dsk.h')
-rw-r--r--src/lib/formats/flex_dsk.h66
1 files changed, 39 insertions, 27 deletions
diff --git a/src/lib/formats/flex_dsk.h b/src/lib/formats/flex_dsk.h
index 3c61bdd4243..d2a34eaf213 100644
--- a/src/lib/formats/flex_dsk.h
+++ b/src/lib/formats/flex_dsk.h
@@ -18,39 +18,51 @@ class flex_format : public wd177x_format
public:
flex_format();
- 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 find_size(io_generic *io, uint32_t form_factor) override;
- virtual void build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const override;
- virtual void check_compatibility(floppy_image *image, std::vector<int> &candidates) override;
+ virtual const char *name() const noexcept override;
+ virtual const char *description() const noexcept override;
+ virtual const char *extensions() const noexcept override;
+ virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override;
+ virtual int find_size(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override;
+ virtual const wd177x_format::format &get_track_format(const format &f, int head, int track) const override;
private:
struct sysinfo_sector
{
- uint8_t unused1[16];
- uint8_t disk_name[8];
- uint8_t disk_ext[3];
- uint8_t disk_number[2];
- uint8_t fc_start_trk;
- uint8_t fc_start_sec;
- uint8_t fc_end_trk;
- uint8_t fc_end_sec;
- uint8_t free[2];
- uint8_t month;
- uint8_t day;
- uint8_t year;
- uint8_t last_trk;
- uint8_t last_sec;
- uint8_t unused2[216];
- } info;
- static const format formats[];
+ uint8_t unused1[16]{};
+ uint8_t disk_name[8]{};
+ uint8_t disk_ext[3]{};
+ uint8_t disk_number[2]{};
+ uint8_t fc_start_trk = 0;
+ uint8_t fc_start_sec = 0;
+ uint8_t fc_end_trk = 0;
+ uint8_t fc_end_sec = 0;
+ uint8_t free[2]{};
+ uint8_t month = 0;
+ uint8_t day = 0;
+ uint8_t year = 0;
+ uint8_t last_trk = 0;
+ uint8_t last_sec = 0;
+ uint8_t unused2[216]{};
+ };
+ // FLEX 1.0 SIR (System Information Record)
+ // Ref: https://deramp.com/downloads/swtpc/software/FLEX/FLEX%201.0%20(MiniFLEX)/Source/NEWDISK.LST
+ struct sysinfo_sector_flex10
+ {
+ uint8_t unused[21]{};
+ uint8_t fc_start_trk = 0;
+ uint8_t fc_start_sec = 0;
+ uint8_t fc_end_trk = 0;
+ uint8_t fc_end_sec = 0;
+ uint8_t free[2]{};
+ uint8_t unused2[101]{};
+ };
- uint8_t boot0_sector_id;
- uint8_t boot1_sector_id;
+ static const format formats[];
+ static const format formats_head1[];
+ static const format formats_track0[];
+ static const format formats_head1_track0[];
};
-extern const floppy_format_type FLOPPY_FLEX_FORMAT;
+extern const flex_format FLOPPY_FLEX_FORMAT;
#endif // MAME_FORMATS_FLEX_DSK_H