diff options
Diffstat (limited to 'src/lib/formats/ap2_dsk.h')
-rw-r--r-- | src/lib/formats/ap2_dsk.h | 132 |
1 files changed, 75 insertions, 57 deletions
diff --git a/src/lib/formats/ap2_dsk.h b/src/lib/formats/ap2_dsk.h index b5b08db663b..33117ecbd84 100644 --- a/src/lib/formats/ap2_dsk.h +++ b/src/lib/formats/ap2_dsk.h @@ -21,70 +21,89 @@ ***************************************************************************/ -#define APPLE2_NIBBLE_SIZE 416 -#define APPLE2_SMALL_NIBBLE_SIZE 374 -//#define APPLE2_TRACK_COUNT 35 -#define APPLE2_TRACK_COUNT 40 -#define APPLE2_SECTOR_COUNT 16 -#define APPLE2_SECTOR_SIZE 256 +constexpr int APPLE2_STD_TRACK_COUNT = 35; +constexpr int APPLE2_TRACK_COUNT = 40; +constexpr int APPLE2_SECTOR_SIZE = 256; +/**************************************************************************/ +class a2_13sect_format : public floppy_image_format_t +{ +public: + a2_13sect_format(); + virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override; + virtual bool load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const override; -/**************************************************************************/ + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; + virtual bool supports_save() const noexcept override; -LEGACY_FLOPPY_OPTIONS_EXTERN(apple2); +private: + static uint8_t gb(const std::vector<bool> &buf, int &pos, int &wrap); +}; -// new style code +extern const a2_13sect_format FLOPPY_A213S_FORMAT; class a2_16sect_format : public floppy_image_format_t { public: - a2_16sect_format(); + a2_16sect_format(bool prodos_order); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override; + virtual bool load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const override; + virtual bool save(util::random_read_write &io, const std::vector<uint32_t> &variants, const floppy_image &image) const override; - virtual const char *name() const override; - virtual const char *description() const override; - virtual const char *extensions() const override; - virtual bool supports_save() const override; + virtual bool supports_save() const noexcept override; private: - static const desc_e mac_gcr[]; + const bool m_prodos_order; - uint8_t gb(const uint8_t *buf, int ts, int &pos, int &wrap); - void update_chk(const uint8_t *data, int size, uint32_t &chk); + static uint8_t gb(const std::vector<bool> &buf, int &pos, int &wrap); +}; - bool m_prodos_order; +class a2_16sect_dos_format : public a2_16sect_format +{ +public: + a2_16sect_dos_format(); + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; +}; - int m_tracks; +class a2_16sect_prodos_format : public a2_16sect_format +{ +public: + a2_16sect_prodos_format(); + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; }; -extern const floppy_format_type FLOPPY_A216S_FORMAT; +extern const a2_16sect_dos_format FLOPPY_A216S_DOS_FORMAT; +extern const a2_16sect_prodos_format FLOPPY_A216S_PRODOS_FORMAT; class a2_rwts18_format : public floppy_image_format_t { public: a2_rwts18_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool save(io_generic *io, floppy_image *image) override; + virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override; + virtual bool load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const override; + virtual bool save(util::random_read_write &io, const std::vector<uint32_t> &variants, const floppy_image &image) const override; - virtual const char *name() const override; - virtual const char *description() const override; - virtual const char *extensions() const override; - virtual bool supports_save() const override; + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; + virtual bool supports_save() const noexcept override; private: static const desc_e mac_gcr[]; - uint8_t gb(const uint8_t *buf, int ts, int &pos, int &wrap); - void update_chk(const uint8_t *data, int size, uint32_t &chk); + static uint8_t gb(const std::vector<bool> &buf, int &pos, int &wrap); }; -extern const floppy_format_type FLOPPY_RWTS18_FORMAT; +extern const a2_rwts18_format FLOPPY_RWTS18_FORMAT; class a2_edd_format : public floppy_image_format_t @@ -92,44 +111,43 @@ class a2_edd_format : public floppy_image_format_t public: a2_edd_format(); - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool supports_save() const override; + virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override; + virtual bool load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const override; + virtual bool supports_save() const noexcept override; - virtual const char *name() const override; - virtual const char *description() const override; - virtual const char *extensions() const override; + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; private: static uint8_t pick(const uint8_t *data, int pos); }; -extern const floppy_format_type FLOPPY_EDD_FORMAT; +extern const a2_edd_format FLOPPY_EDD_FORMAT; -class a2_woz_format : public floppy_image_format_t +class a2_nib_format : public floppy_image_format_t { public: - a2_woz_format(); + a2_nib_format(); + + virtual int identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const override; + virtual bool load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const override; + virtual bool supports_save() const noexcept override; - virtual int identify(io_generic *io, uint32_t form_factor) override; - virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; - virtual bool supports_save() const override; + virtual const char *name() const noexcept override; + virtual const char *description() const noexcept override; + virtual const char *extensions() const noexcept override; - virtual const char *name() const override; - virtual const char *description() const override; - virtual const char *extensions() const override; private: - static const uint8_t signature[8]; - static const uint8_t signature2[8]; - - static uint32_t r32(const std::vector<uint8_t> &data, uint32_t offset); - static uint16_t r16(const std::vector<uint8_t> &data, uint32_t offset); - static uint8_t r8(const std::vector<uint8_t> &data, uint32_t offset); - static uint32_t crc32r(const uint8_t *data, uint32_t size); - static uint32_t find_tag(const std::vector<uint8_t> &data, uint32_t tag); + static constexpr size_t nibbles_per_track = 0x1a00; + static constexpr size_t min_sync_bytes = 4; + static constexpr auto expected_size_35t = APPLE2_STD_TRACK_COUNT * nibbles_per_track; + static constexpr auto expected_size_40t = APPLE2_TRACK_COUNT * nibbles_per_track; + + static std::vector<uint32_t> generate_levels_from_nibbles(const std::vector<uint8_t>& nibbles); }; -extern const floppy_format_type FLOPPY_WOZ_FORMAT; +extern const a2_nib_format FLOPPY_NIB_FORMAT; #endif // MAME_FORMATS_AP2_DSK_H |