1 // license:BSD-3-Clause
2 // copyright-holders:Sergey Svishchev
3 /*********************************************************************
4 
5     formats/ppg_dsk.c
6 
7     PPG Waveterm formats
8 
9 *********************************************************************/
10 
11 #include <cassert>
12 
13 #include "formats/ppg_dsk.h"
14 
ppg_format()15 ppg_format::ppg_format() : wd177x_format(formats)
16 {
17 }
18 
name() const19 const char *ppg_format::name() const
20 {
21 	return "ppg";
22 }
23 
description() const24 const char *ppg_format::description() const
25 {
26 	return "PPG Waveterm disk image";
27 }
28 
extensions() const29 const char *ppg_format::extensions() const
30 {
31 	return "wta";
32 }
33 
34 const ppg_format::format ppg_format::formats[] = {
35 	// .dsk formats used by flexemu.  gaps unverified.
36 	{ floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
37 		2000,  10, 35, 1, 256,  {}, 1, {},  32, 22, 31 },
38 	{ floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
39 		2000,  10, 40, 1, 256,  {}, 1, {},  32, 22, 31 },
40 	{ floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
41 		2000,  10, 35, 2, 256,  {}, 1, {},  32, 22, 31 },
42 	{ floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
43 		2000,  10, 40, 2, 256,  {}, 1, {},  32, 22, 31 },
44 	{ floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
45 		2000,  20, 35, 2, 256,  {}, 1, {},  32,  2,  2 },
46 	{ floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
47 		2000,  20, 40, 2, 256,  {}, 1, {},  32,  2,  2 },
48 
49 	// .wta format used by PPG Waveterm A transfer software.  gaps unverified.
50 	{ floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
51 		2000,  16, 77, 2, 256,  {}, 1, {},  32, 22, 31 },
52 	{}
53 };
54 
build_sector_description(const format & f,uint8_t * sectdata,desc_s * sectors,int track,int head) const55 void ppg_format::build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const
56 {
57 	int cur_offset = 0;
58 
59 	for (int i=0; i<f.sector_count; i++) {
60 		sectors[i].data = sectdata + cur_offset;
61 		sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i];
62 		cur_offset += sectors[i].size;
63 		sectors[i].sector_id = i + f.sector_base_id + (head * f.sector_count);
64 	}
65 }
66 
67 const floppy_format_type FLOPPY_PPG_FORMAT = &floppy_image_format_creator<ppg_format>;
68