diff options
Diffstat (limited to 'src/devices/bus/ql/rom.cpp')
-rw-r--r-- | src/devices/bus/ql/rom.cpp | 42 |
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()); } |