1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert, R. Belmont 3 /********************************************************************* 4 5 ap2_dsk.h 6 7 Apple II disk images 8 9 *********************************************************************/ 10 #ifndef MAME_FORMATS_AP2_DSK_H 11 #define MAME_FORMATS_AP2_DSK_H 12 13 #pragma once 14 15 #include "flopimg.h" 16 17 18 /*************************************************************************** 19 20 Constants 21 22 ***************************************************************************/ 23 24 #define APPLE2_NIBBLE_SIZE 416 25 #define APPLE2_SMALL_NIBBLE_SIZE 374 26 #define APPLE2_STD_TRACK_COUNT 35 27 #define APPLE2_TRACK_COUNT 40 28 #define APPLE2_SECTOR_COUNT 16 29 #define APPLE2_SECTOR_SIZE 256 30 31 32 33 /**************************************************************************/ 34 35 LEGACY_FLOPPY_OPTIONS_EXTERN(apple2); 36 37 // new style code 38 39 class a2_16sect_format : public floppy_image_format_t 40 { 41 public: 42 a2_16sect_format(); 43 44 virtual int identify(io_generic *io, uint32_t form_factor) override; 45 virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; 46 virtual bool save(io_generic *io, floppy_image *image) override; 47 48 virtual const char *name() const override; 49 virtual const char *description() const override; 50 virtual const char *extensions() const override; 51 virtual bool supports_save() const override; 52 53 private: 54 static const desc_e mac_gcr[]; 55 56 uint8_t gb(const uint8_t *buf, int ts, int &pos, int &wrap); 57 void update_chk(const uint8_t *data, int size, uint32_t &chk); 58 59 bool m_prodos_order; 60 61 int m_tracks; 62 }; 63 64 extern const floppy_format_type FLOPPY_A216S_FORMAT; 65 66 class a2_rwts18_format : public floppy_image_format_t 67 { 68 public: 69 a2_rwts18_format(); 70 71 virtual int identify(io_generic *io, uint32_t form_factor) override; 72 virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; 73 virtual bool save(io_generic *io, floppy_image *image) override; 74 75 virtual const char *name() const override; 76 virtual const char *description() const override; 77 virtual const char *extensions() const override; 78 virtual bool supports_save() const override; 79 80 private: 81 static const desc_e mac_gcr[]; 82 83 uint8_t gb(const uint8_t *buf, int ts, int &pos, int &wrap); 84 void update_chk(const uint8_t *data, int size, uint32_t &chk); 85 }; 86 87 extern const floppy_format_type FLOPPY_RWTS18_FORMAT; 88 89 90 class a2_edd_format : public floppy_image_format_t 91 { 92 public: 93 a2_edd_format(); 94 95 virtual int identify(io_generic *io, uint32_t form_factor) override; 96 virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; 97 virtual bool supports_save() const override; 98 99 virtual const char *name() const override; 100 virtual const char *description() const override; 101 virtual const char *extensions() const override; 102 103 private: 104 static uint8_t pick(const uint8_t *data, int pos); 105 }; 106 107 extern const floppy_format_type FLOPPY_EDD_FORMAT; 108 109 class a2_woz_format : public floppy_image_format_t 110 { 111 public: 112 a2_woz_format(); 113 114 virtual int identify(io_generic *io, uint32_t form_factor) override; 115 virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override; 116 virtual bool supports_save() const override; 117 118 virtual const char *name() const override; 119 virtual const char *description() const override; 120 virtual const char *extensions() const override; 121 122 private: 123 static const uint8_t signature[8]; 124 static const uint8_t signature2[8]; 125 126 static uint32_t r32(const std::vector<uint8_t> &data, uint32_t offset); 127 static uint16_t r16(const std::vector<uint8_t> &data, uint32_t offset); 128 static uint8_t r8(const std::vector<uint8_t> &data, uint32_t offset); 129 static uint32_t crc32r(const uint8_t *data, uint32_t size); 130 static uint32_t find_tag(const std::vector<uint8_t> &data, uint32_t tag); 131 }; 132 133 extern const floppy_format_type FLOPPY_WOZ_FORMAT; 134 135 #endif // MAME_FORMATS_AP2_DSK_H 136