diff options
Diffstat (limited to 'src/devices/bus/cbm2/exp.cpp')
-rw-r--r-- | src/devices/bus/cbm2/exp.cpp | 63 |
1 files changed, 28 insertions, 35 deletions
diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp index bcc2a654060..187c98ef5aa 100644 --- a/src/devices/bus/cbm2/exp.cpp +++ b/src/devices/bus/cbm2/exp.cpp @@ -9,6 +9,8 @@ #include "emu.h" #include "exp.h" +#include <tuple> + //************************************************************************** @@ -35,11 +37,8 @@ DEFINE_DEVICE_TYPE(CBM2_EXPANSION_SLOT, cbm2_expansion_slot_device, "cbm2_expans // device_cbm2_expansion_card_interface - constructor //------------------------------------------------- -device_cbm2_expansion_card_interface::device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device), - m_bank1(*this, "bank1"), - m_bank2(*this, "bank2"), - m_bank3(*this, "bank3") +device_cbm2_expansion_card_interface::device_cbm2_expansion_card_interface(const machine_config &mconfig, device_t &device) : + device_interface(device, "cbm2exp") { m_slot = dynamic_cast<cbm2_expansion_slot_device *>(device.owner()); } @@ -65,8 +64,8 @@ device_cbm2_expansion_card_interface::~device_cbm2_expansion_card_interface() cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CBM2_EXPANSION_SLOT, tag, owner, clock), - device_slot_interface(mconfig, *this), - device_image_interface(mconfig, *this), + device_single_card_slot_interface<device_cbm2_expansion_card_interface>(mconfig, *this), + device_cartrom_image_interface(mconfig, *this), m_card(nullptr) { } @@ -78,24 +77,7 @@ cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mco void cbm2_expansion_slot_device::device_start() { - m_card = dynamic_cast<device_cbm2_expansion_card_interface *>(get_card_device()); - - // inherit bus clock - if (clock() == 0) - { - cbm2_expansion_slot_device *root = machine().device<cbm2_expansion_slot_device>(CBM2_EXPANSION_SLOT_TAG); - assert(root); - set_unscaled_clock(root->clock()); - } -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cbm2_expansion_slot_device::device_reset() -{ + m_card = get_card_device(); } @@ -103,30 +85,41 @@ void cbm2_expansion_slot_device::device_reset() // call_load - //------------------------------------------------- -image_init_result cbm2_expansion_slot_device::call_load() +std::pair<std::error_condition, std::string> cbm2_expansion_slot_device::call_load() { - size_t size; + std::error_condition err; if (m_card) { if (!loaded_through_softlist()) { - size = length(); + util::core_file &file = image_core_file(); + size_t const size = length(); if (is_filetype("20")) { - m_card->m_bank1.allocate(size); - fread(m_card->m_bank1, size); + size_t actual; + std::tie(err, m_card->m_bank1, actual) = util::read(file, size); + if (!err && (actual != size)) + err = std::errc::io_error; } else if (is_filetype("40")) { - m_card->m_bank2.allocate(size); - fread(m_card->m_bank2, size); + size_t actual; + std::tie(err, m_card->m_bank2, actual) = util::read(file, size); + if (!err && (actual != size)) + err = std::errc::io_error; } else if (is_filetype("60")) { - m_card->m_bank3.allocate(size); - fread(m_card->m_bank3, size); + size_t actual; + std::tie(err, m_card->m_bank3, actual) = util::read(file, size); + if (!err && (actual != size)) + err = std::errc::io_error; + } + else + { + err = image_error::INVALIDIMAGE; } } else @@ -137,7 +130,7 @@ image_init_result cbm2_expansion_slot_device::call_load() } } - return image_init_result::PASS; + return std::make_pair(err, std::string()); } |