diff options
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 |
commit | d193b2f3add468a9306b3c6954ec766189ffb56d (patch) | |
tree | 8e37446ee43eb2dcc1784f9e88561ef0bf1d62cf /src/devices/imagedev | |
parent | 89040a2acd3fd24ee25ef9d5f124ce388152bfd3 (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.cpp | 14 | ||||
-rw-r--r-- | src/devices/imagedev/microdrv.h | 4 | ||||
-rw-r--r-- | src/devices/imagedev/wafadrive.cpp | 52 | ||||
-rw-r--r-- | src/devices/imagedev/wafadrive.h | 58 |
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 |