summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2019-03-22 19:24:13 +0000
committer Nigel Barnes <Pernod70@users.noreply.github.com>2019-03-22 19:24:13 +0000
commit60e30e44b3916015997e332ce5bfdfc9f47440bd (patch)
treedd81b79da349653d610e22457d2ff360ddd67ef9 /src/lib
parent374d6d674f23ae770c267d1bbdf1278bd10cf202 (diff)
spectrum: Added the Opus Discovery disc system, and OPD floppy format.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/opd_dsk.cpp61
-rw-r--r--src/lib/formats/opd_dsk.h38
2 files changed, 99 insertions, 0 deletions
diff --git a/src/lib/formats/opd_dsk.cpp b/src/lib/formats/opd_dsk.cpp
new file mode 100644
index 00000000000..b45b58762ed
--- /dev/null
+++ b/src/lib/formats/opd_dsk.cpp
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Sinclair ZX Spectrum
+
+ Opus Discovery disk image formats
+
+***************************************************************************/
+
+#include "opd_dsk.h"
+
+
+opd_format::opd_format() : wd177x_format(formats)
+{
+}
+
+const char *opd_format::name() const
+{
+ return "opd";
+}
+
+const char *opd_format::description() const
+{
+ return "Opus Discovery disk image";
+}
+
+const char *opd_format::extensions() const
+{
+ return "opd,opu";
+}
+
+int opd_format::identify(io_generic *io, uint32_t form_factor)
+{
+ int type = find_size(io, form_factor);
+
+ if (type != -1)
+ return 90;
+ return 0;
+}
+
+int opd_format::get_image_offset(const format &f, int head, int track)
+{
+ return (f.track_count * head + track) * compute_track_size(f);
+}
+
+const opd_format::format opd_format::formats[] =
+{
+ { // 180k 40 track single sided double density - gaps unverified
+ floppy_image::FF_35, floppy_image::SSSD, floppy_image::MFM,
+ 2000, 18, 40, 1, 256, {}, 0, {}, 36, 22, 27
+ },
+ { // 360k 40 track double sided double density - gaps unverified
+ floppy_image::FF_35, floppy_image::DSSD, floppy_image::MFM,
+ 2000, 18, 40, 2, 256, {}, 0, {}, 36, 22, 27
+ },
+ {}
+};
+
+
+const floppy_format_type FLOPPY_OPD_FORMAT = &floppy_image_format_creator<opd_format>;
diff --git a/src/lib/formats/opd_dsk.h b/src/lib/formats/opd_dsk.h
new file mode 100644
index 00000000000..3eb018ca1dc
--- /dev/null
+++ b/src/lib/formats/opd_dsk.h
@@ -0,0 +1,38 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Sinclair ZX Spectrum
+
+ Opus Discovery disk image formats
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef OPD_DSK_H
+#define OPD_DSK_H
+
+#include "flopimg.h"
+#include "wd177x_dsk.h"
+
+
+class opd_format : public wd177x_format
+{
+public:
+ opd_format();
+
+ virtual int identify(io_generic *io, uint32_t form_factor) override;
+ virtual int get_image_offset(const format &f, int head, int track) override;
+ virtual const char *name() const override;
+ virtual const char *description() const override;
+ virtual const char *extensions() const override;
+
+private:
+ static const format formats[];
+};
+
+
+extern const floppy_format_type FLOPPY_OPD_FORMAT;
+
+#endif // OPD_DSK_H