summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/diablo.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/imagedev/diablo.h')
-rw-r--r--src/devices/imagedev/diablo.h59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/devices/imagedev/diablo.h b/src/devices/imagedev/diablo.h
index a83d8bc30b7..c4b6e9408cf 100644
--- a/src/devices/imagedev/diablo.h
+++ b/src/devices/imagedev/diablo.h
@@ -4,14 +4,21 @@
* DIABLO drive image to hard disk interface
**********************************************************/
-#ifndef MAME_DEVICES_IMAGEDEV_DIABLO_H
-#define MAME_DEVICES_IMAGEDEV_DIABLO_H
+#ifndef MAME_IMAGEDEV_DIABLO_H
+#define MAME_IMAGEDEV_DIABLO_H
#pragma once
-#include "harddisk.h"
#include "softlist_dev.h"
+#include "harddriv.h"
+
+#include <memory>
+#include <string>
+#include <system_error>
+#include <utility>
+
+
#define DIABLO_TAG(id) "diablo"#id
/***************************************************************************
@@ -20,9 +27,12 @@
// ======================> diablo_image_device
-class diablo_image_device : public device_t, public device_image_interface
+class diablo_image_device : public harddisk_image_base_device
{
public:
+ typedef device_delegate<std::error_condition (device_image_interface &)> load_delegate;
+ typedef device_delegate<void (device_image_interface &)> unload_delegate;
+
// construction/destruction
diablo_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~diablo_image_device();
@@ -31,39 +41,34 @@ public:
template <typename Object> void set_device_unload(Object &&cb) { m_device_image_unload = std::forward<Object>(cb); }
void set_interface(const char *interface) { m_interface = interface; }
- // image-level overrides
- virtual image_init_result call_load() override;
- virtual image_init_result call_create(int create_format, util::option_resolution *create_args) override;
+ // device_image_interface implementation
+ virtual std::pair<std::error_condition, std::string> call_load() override;
+ virtual std::pair<std::error_condition, std::string> call_create(int create_format, util::option_resolution *create_args) override;
virtual void call_unload() override;
- virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
-
- virtual iodevice_t image_type() const override { return IO_HARDDISK; }
- virtual bool is_readable() const override { return 1; }
- virtual bool is_writeable() const override { return 1; }
- virtual bool is_creatable() const override { return 0; }
- 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 m_interface; }
- virtual const char *file_extensions() const override { return "chd,dsk"; }
+ virtual bool image_is_chd_type() const noexcept override { return true; }
+ virtual const char *image_interface() const noexcept override { return m_interface; }
+ virtual const char *file_extensions() const noexcept override { return "chd,dsk"; }
virtual const util::option_guide &create_option_guide() const override;
// specific implementation
- hard_disk_file *get_hard_disk_file() { return m_hard_disk_handle; }
- chd_file *get_chd_file();
+ hard_disk_file *get_hard_disk_file() { return m_hard_disk_handle.get(); }
protected:
- // device-level overrides
+ // device_t implementation
virtual void device_config_complete() override;
- virtual void device_start() override;
- virtual void device_stop() override;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_stop() override ATTR_COLD;
+
+ // device_image_interface implementation
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
- image_init_result internal_load_dsk();
+ std::error_condition internal_load_dsk();
chd_file *m_chd;
- chd_file m_origchd; /* handle to the original CHD */
- chd_file m_diffchd; /* handle to the diff CHD */
- hard_disk_file *m_hard_disk_handle;
+ chd_file m_origchd; // handle to the original CHD
+ chd_file m_diffchd; // handle to the diff CHD
+ std::unique_ptr<hard_disk_file> m_hard_disk_handle;
load_delegate m_device_image_load;
unload_delegate m_device_image_unload;
@@ -73,4 +78,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(DIABLO, diablo_image_device)
-#endif // MAME_DEVICES_IMAGEDEV_DIABLO_H
+#endif // MAME_IMAGEDEV_DIABLO_H