diff options
Diffstat (limited to 'trunk/src/lib/formats/pasti_dsk.h')
-rw-r--r-- | trunk/src/lib/formats/pasti_dsk.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/trunk/src/lib/formats/pasti_dsk.h b/trunk/src/lib/formats/pasti_dsk.h new file mode 100644 index 00000000000..16c56d53463 --- /dev/null +++ b/trunk/src/lib/formats/pasti_dsk.h @@ -0,0 +1,62 @@ +#ifndef PASTI_DSK_H_ +#define PASTI_DSK_H_ + +#include "flopimg.h" + +class pasti_format : public floppy_image_format_t +{ +public: + pasti_format(); + + virtual int identify(io_generic *io, UINT32 form_factor); + virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image); + + virtual const char *name() const; + virtual const char *description() const; + virtual const char *extensions() const; + virtual bool supports_save() const; + + static const desc_e xdesc[]; + +protected: + struct wd_sect { + const UINT8 *data; + const UINT8 *fuzzy_mask; + UINT8 id[6]; + int position; + double time_ratio; + }; + + struct wd_obs { + const UINT8 *track_data; + wd_sect sectors[256]; + int track_size, sector_count; + }; + + void wd_generate_track_from_observations(int track, int head, floppy_image *image, wd_obs &obs); + +private: + struct wd_sect_info { + int hstart, hend; + int dstart, dend; + bool hsynced, dsynced; + }; + + void map_sectors_in_track(wd_obs &obs, wd_sect_info *sect_infos); + void match_mfm_data(wd_obs &obs, int tpos, const UINT8 *data, int size, UINT8 context, int &bcount, int &ccount, bool &synced); + void match_raw_data(wd_obs &obs, int tpos, const UINT8 *data, int size, UINT8 context, int &bcount, int &ccount); + UINT16 byte_to_mfm(UINT8 data, bool context); + UINT16 calc_crc(const UINT8 *data, int size, UINT16 crc); + + void wd_generate_unsynced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size); + void wd_generate_synced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size); + void wd_generate_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, bool synced, UINT32 cell_size_start, UINT32 cell_size_end); + void wd_generate_sector_header(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size); + void wd_generate_sector_data(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size); + void wd_generate_track_from_sectors_and_track(int track, int head, floppy_image *image, wd_obs &obs); + void wd_generate_track_from_sectors_only(int track, int head, floppy_image *image, wd_obs &obs); +}; + +extern const floppy_format_type FLOPPY_PASTI_FORMAT; + +#endif /*PASTI_DSK_H_*/ |