summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev
diff options
context:
space:
mode:
author David Haywood <mamehaze@gmail.com>2019-07-31 23:08:48 +0100
committer ajrhacker <ajrhacker@users.noreply.github.com>2019-07-31 18:08:48 -0400
commitd193b2f3add468a9306b3c6954ec766189ffb56d (patch)
tree8e37446ee43eb2dcc1784f9e88561ef0bf1d62cf /src/devices/imagedev
parent89040a2acd3fd24ee25ef9d5f124ce388152bfd3 (diff)
steps towards some spectrum expansions - attempt 2 (resynced to AJRs changes) (nw) (#5417)
* steps towards some spectrum expansions - attempt 2 (nw) * (nw) * (nw)
Diffstat (limited to 'src/devices/imagedev')
-rw-r--r--src/devices/imagedev/microdrv.cpp14
-rw-r--r--src/devices/imagedev/microdrv.h4
-rw-r--r--src/devices/imagedev/wafadrive.cpp52
-rw-r--r--src/devices/imagedev/wafadrive.h58
4 files changed, 122 insertions, 6 deletions
diff --git a/src/devices/imagedev/microdrv.cpp b/src/devices/imagedev/microdrv.cpp
index 1947d22f840..3ff92471e47 100644
--- a/src/devices/imagedev/microdrv.cpp
+++ b/src/devices/imagedev/microdrv.cpp
@@ -2,9 +2,11 @@
// copyright-holders:Curt Coder
/*********************************************************************
- microdrv.c
+ microdrv.cpp
- MESS interface to the Sinclair Microdrive image abstraction code
+ MAME interface to the Sinclair Microdrive image abstraction code
+ (this seems to be QL format specific and hardcoded to a specific
+ size, Spectrum might need a different implementation?)
*********************************************************************/
@@ -83,6 +85,7 @@ image_init_result microdrive_image_device::call_load()
if (length() != MDV_IMAGE_LENGTH)
return image_init_result::FAIL;
+ // huh
for (int i = 0; i < MDV_IMAGE_LENGTH / 2; i++)
{
fread(m_left.get(), 1);
@@ -97,8 +100,11 @@ image_init_result microdrive_image_device::call_load()
void microdrive_image_device::call_unload()
{
- memset(m_left.get(), 0, MDV_IMAGE_LENGTH / 2);
- memset(m_right.get(), 0, MDV_IMAGE_LENGTH / 2);
+ if (m_left.get())
+ memset(m_left.get(), 0, MDV_IMAGE_LENGTH / 2);
+
+ if (m_right.get())
+ memset(m_right.get(), 0, MDV_IMAGE_LENGTH / 2);
}
void microdrive_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
diff --git a/src/devices/imagedev/microdrv.h b/src/devices/imagedev/microdrv.h
index 4ec1f728d83..30ff82724fc 100644
--- a/src/devices/imagedev/microdrv.h
+++ b/src/devices/imagedev/microdrv.h
@@ -4,7 +4,7 @@
microdrv.h
- MESS interface to the Sinclair Microdrive image abstraction code
+ MAME interface to the Sinclair Microdrive image abstraction code
*********************************************************************/
@@ -53,7 +53,7 @@ public:
virtual bool must_be_loaded() const override { return 0; }
virtual bool is_reset_on_load() const override { return 0; }
virtual const char *image_interface() const override { return "ql_cass"; }
- virtual const char *file_extensions() const override { return "mdv"; }
+ virtual const char *file_extensions() const override { return "mdv,mdr"; }
// specific implementation
DECLARE_WRITE_LINE_MEMBER( clk_w );
diff --git a/src/devices/imagedev/wafadrive.cpp b/src/devices/imagedev/wafadrive.cpp
new file mode 100644
index 00000000000..86ad5280bde
--- /dev/null
+++ b/src/devices/imagedev/wafadrive.cpp
@@ -0,0 +1,52 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/*********************************************************************
+
+ wafadrive.cpp
+
+ Emulation of an individual drive within the Wafadrive unit
+ (preliminary, no actual emulation yet)
+
+*********************************************************************/
+
+#include "emu.h"
+#include "wafadrive.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+// device type definition
+DEFINE_DEVICE_TYPE(WAFADRIVE_IMAGE, wafadrive_image_device, "wafadrive_image", "Sinclair Wafadrive Image")
+
+//-------------------------------------------------
+// microdrive_image_device - constructor
+//-------------------------------------------------
+
+wafadrive_image_device::wafadrive_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, WAFADRIVE_IMAGE, tag, owner, clock),
+ device_image_interface(mconfig, *this)
+{
+}
+
+//-------------------------------------------------
+// microdrive_image_device - destructor
+//-------------------------------------------------
+
+wafadrive_image_device::~wafadrive_image_device()
+{
+}
+
+
+void wafadrive_image_device::device_start()
+{
+}
+
+image_init_result wafadrive_image_device::call_load()
+{
+ return image_init_result::PASS;
+}
+
+void wafadrive_image_device::call_unload()
+{
+}
diff --git a/src/devices/imagedev/wafadrive.h b/src/devices/imagedev/wafadrive.h
new file mode 100644
index 00000000000..7d8daa5d98e
--- /dev/null
+++ b/src/devices/imagedev/wafadrive.h
@@ -0,0 +1,58 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/*********************************************************************
+
+ wafadrive.h
+
+ Emulation of an individual drive within the Wafadrive unit
+ (preliminary, no actual emulation yet)
+
+*********************************************************************/
+
+#ifndef MAME_DEVICES_IMAGEDEV_WAFADRIVE_H
+#define MAME_DEVICES_IMAGEDEV_WAFADRIVE_H
+
+#include "softlist_dev.h"
+
+#pragma once
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+// ======================> microdrive_image_device
+
+class wafadrive_image_device : public device_t,
+ public device_image_interface
+{
+public:
+ // construction/destruction
+ wafadrive_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ virtual ~wafadrive_image_device();
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual void call_unload() override;
+ virtual const software_list_loader &get_software_list_loader() const override { return image_software_list_loader::instance(); }
+
+ virtual iodevice_t image_type() const override { return IO_MAGTAPE; } // what are these classed as? they're infinite loop tapes, in a cartridge shell that operate like discs
+
+ virtual bool is_readable() const override { return 1; }
+ virtual bool is_writeable() const override { return 1; }
+ virtual bool is_creatable() const override { return 0; } // should be (although would need a way to specify size)
+ virtual bool must_be_loaded() const override { return 0; }
+ virtual bool is_reset_on_load() const override { return 0; }
+ virtual const char *image_interface() const override { return "wafadrive_cart"; }
+ virtual const char *file_extensions() const override { return "wdr"; }
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+private:
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(WAFADRIVE_IMAGE, wafadrive_image_device)
+
+#endif // MAME_DEVICES_IMAGEDEV_WAFADRIVE_H