diff options
Diffstat (limited to 'src/tools/imgtool/formats/vt_dsk_legacy.cpp')
-rw-r--r-- | src/tools/imgtool/formats/vt_dsk_legacy.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/tools/imgtool/formats/vt_dsk_legacy.cpp b/src/tools/imgtool/formats/vt_dsk_legacy.cpp new file mode 100644 index 00000000000..6cf57856574 --- /dev/null +++ b/src/tools/imgtool/formats/vt_dsk_legacy.cpp @@ -0,0 +1,58 @@ +// license:GPL-2.0+ +// copyright-holders:Juergen Buchmueller +/********************************************************************* + + formats/vt_dsk_legacy.cpp + + VTech Laser/VZ disk images (legacy support) + +*********************************************************************/ + +#include "formats/vt_dsk_legacy.h" +#include "formats/basicdsk.h" + +#include "opresolv.h" + +#include <cstring> + +static FLOPPY_IDENTIFY(vz_identify) +{ + uint64_t size = floppy_image_size(floppy); + *vote = ((size == 98560) || (size == 99200) || (size == 99184)) ? 100 : 0; + return FLOPPY_ERROR_SUCCESS; +} + +static FLOPPY_CONSTRUCT(vz_construct) +{ + struct basicdsk_geometry geometry; + memset(&geometry, 0, sizeof(geometry)); + + if (params) + { + geometry.heads = params->lookup_int(PARAM_HEADS); + geometry.tracks = params->lookup_int(PARAM_TRACKS); + geometry.sectors = params->lookup_int(PARAM_SECTORS); + geometry.first_sector_id = params->lookup_int(PARAM_FIRST_SECTOR_ID); + geometry.sector_length = params->lookup_int(PARAM_SECTOR_LENGTH); + } + else + { + geometry.heads = 1; + geometry.tracks = 40; + geometry.sectors = 16; + geometry.first_sector_id = 0; + geometry.sector_length = floppy_image_size(floppy)/geometry.tracks/geometry.sectors; + } + + return basicdsk_construct(floppy, &geometry); +} + + +LEGACY_FLOPPY_OPTIONS_START(vz) + LEGACY_FLOPPY_OPTION(vtech1, "dsk", "Laser/VZ disk image", vz_identify, vz_construct, NULL, + HEADS([1]) + TRACKS([40]) + SECTORS([16]) + SECTOR_LENGTH([154]) + FIRST_SECTOR_ID([0])) +LEGACY_FLOPPY_OPTIONS_END |