summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ql/rom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/ql/rom.cpp')
-rw-r--r--src/devices/bus/ql/rom.cpp42
1 files changed, 16 insertions, 26 deletions
diff --git a/src/devices/bus/ql/rom.cpp b/src/devices/bus/ql/rom.cpp
index 28bc29d00f4..ab0e3c1e765 100644
--- a/src/devices/bus/ql/rom.cpp
+++ b/src/devices/bus/ql/rom.cpp
@@ -9,6 +9,8 @@
#include "emu.h"
#include "rom.h"
+#include <tuple>
+
//**************************************************************************
@@ -28,8 +30,7 @@ DEFINE_DEVICE_TYPE(QL_ROM_CARTRIDGE_SLOT, ql_rom_cartridge_slot_device, "ql_rom_
//-------------------------------------------------
device_ql_rom_cartridge_card_interface::device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device) :
- device_slot_card_interface(mconfig, device),
- m_rom(*this, "rom"),
+ device_interface(device, "qlrom"),
m_slot(dynamic_cast<ql_rom_cartridge_slot_device *>(device.owner())),
m_romoeh(0)
{
@@ -47,8 +48,6 @@ device_ql_rom_cartridge_card_interface::~device_ql_rom_cartridge_card_interface(
void device_ql_rom_cartridge_card_interface::interface_post_start()
{
- device_slot_card_interface::interface_post_start();
-
device().save_item(NAME(m_romoeh));
}
@@ -64,8 +63,9 @@ void device_ql_rom_cartridge_card_interface::interface_post_start()
ql_rom_cartridge_slot_device::ql_rom_cartridge_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, QL_ROM_CARTRIDGE_SLOT, tag, owner, clock),
- device_slot_interface(mconfig, *this),
- device_image_interface(mconfig, *this), m_card(nullptr)
+ device_single_card_slot_interface<device_ql_rom_cartridge_card_interface>(mconfig, *this),
+ device_cartrom_image_interface(mconfig, *this),
+ m_card(nullptr)
{
}
@@ -73,24 +73,13 @@ ql_rom_cartridge_slot_device::ql_rom_cartridge_slot_device(const machine_config
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
-
-void ql_rom_cartridge_slot_device::device_validity_check(validity_checker &valid) const
-{
- device_t *const card(get_card_device());
- if (card && !dynamic_cast<device_ql_rom_cartridge_card_interface *>(card))
- osd_printf_error("Card device %s (%s) does not implement device_ql_rom_cartridge_card_interface\n", card->tag(), card->name());
-}
-
void ql_rom_cartridge_slot_device::device_resolve_objects()
{
- m_card = dynamic_cast<device_ql_rom_cartridge_card_interface *>(get_card_device());
+ m_card = get_card_device();
}
void ql_rom_cartridge_slot_device::device_start()
{
- device_t *const card(get_card_device());
- if (card && !m_card)
- throw emu_fatalerror("ql_rom_cartridge_slot_device: card device %s (%s) does not implement device_ql_rom_cartridge_card_interface\n", card->tag(), card->name());
}
@@ -98,18 +87,19 @@ void ql_rom_cartridge_slot_device::device_start()
// call_load -
//-------------------------------------------------
-image_init_result ql_rom_cartridge_slot_device::call_load()
+std::pair<std::error_condition, std::string> ql_rom_cartridge_slot_device::call_load()
{
+ std::error_condition err;
+
if (m_card)
{
- size_t size;
-
if (!loaded_through_softlist())
{
- size = length();
-
- m_card->m_rom.allocate(size);
- fread(m_card->m_rom, size);
+ size_t const size = length();
+ size_t actual;
+ std::tie(err, m_card->m_rom, actual) = util::read(image_core_file(), size);
+ if (!err && (actual != size))
+ err = std::errc::io_error;
}
else
{
@@ -117,7 +107,7 @@ image_init_result ql_rom_cartridge_slot_device::call_load()
}
}
- return image_init_result::PASS;
+ return std::make_pair(err, std::string());
}