diff options
Diffstat (limited to 'src/lib/formats')
-rw-r--r-- | src/lib/formats/ppg_dsk.cpp | 67 | ||||
-rw-r--r-- | src/lib/formats/ppg_dsk.h | 32 |
2 files changed, 99 insertions, 0 deletions
diff --git a/src/lib/formats/ppg_dsk.cpp b/src/lib/formats/ppg_dsk.cpp new file mode 100644 index 00000000000..dd08a841e00 --- /dev/null +++ b/src/lib/formats/ppg_dsk.cpp @@ -0,0 +1,67 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev +/********************************************************************* + + formats/ppg_dsk.c + + PPG Waveterm formats + +*********************************************************************/ + +#include <assert.h> + +#include "formats/ppg_dsk.h" + +ppg_format::ppg_format() : wd177x_format(formats) +{ +} + +const char *ppg_format::name() const +{ + return "ppg"; +} + +const char *ppg_format::description() const +{ + return "PPG Waveterm disk image"; +} + +const char *ppg_format::extensions() const +{ + return "wta"; +} + +const ppg_format::format ppg_format::formats[] = { + // .dsk formats used by flexemu. gaps unverified. + { floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 10, 35, 1, 256, {}, 1, {}, 32, 22, 31 }, + { floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 10, 40, 1, 256, {}, 1, {}, 32, 22, 31 }, + { floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 10, 35, 2, 256, {}, 1, {}, 32, 22, 31 }, + { floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 10, 40, 2, 256, {}, 1, {}, 32, 22, 31 }, + { floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 20, 35, 2, 256, {}, 1, {}, 32, 2, 2 }, + { floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 20, 40, 2, 256, {}, 1, {}, 32, 2, 2 }, + + // .wta format used by PPG Waveterm A transfer software. gaps unverified. + { floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 16, 77, 2, 256, {}, 1, {}, 32, 22, 31 }, + {} +}; + +void ppg_format::build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const +{ + int cur_offset = 0; + + for (int i=0; i<f.sector_count; i++) { + sectors[i].data = sectdata + cur_offset; + sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i]; + cur_offset += sectors[i].size; + sectors[i].sector_id = i + f.sector_base_id + (head * f.sector_count); + } +} + +const floppy_format_type FLOPPY_PPG_FORMAT = &floppy_image_format_creator<ppg_format>; diff --git a/src/lib/formats/ppg_dsk.h b/src/lib/formats/ppg_dsk.h new file mode 100644 index 00000000000..34416578566 --- /dev/null +++ b/src/lib/formats/ppg_dsk.h @@ -0,0 +1,32 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev +/********************************************************************* + + formats/ppg_dsk.h + + ppg format + +*********************************************************************/ + +#ifndef PPG_DSK_H_ +#define PPG_DSK_H_ + +#include "wd177x_dsk.h" + +class ppg_format : public wd177x_format { +public: + ppg_format(); + + virtual const char *name() const override; + virtual const char *description() const override; + virtual const char *extensions() const override; + +private: + static const format formats[]; + + virtual void build_sector_description(const format &d, uint8_t *sectdata, desc_s *sectors, int track, int head) const override; +}; + +extern const floppy_format_type FLOPPY_PPG_FORMAT; + +#endif |