diff options
Diffstat (limited to 'src/devices/bus/pofo/ccm.cpp')
-rw-r--r-- | src/devices/bus/pofo/ccm.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/devices/bus/pofo/ccm.cpp b/src/devices/bus/pofo/ccm.cpp index 1ab5c3054b8..d2b60021f1d 100644 --- a/src/devices/bus/pofo/ccm.cpp +++ b/src/devices/bus/pofo/ccm.cpp @@ -9,6 +9,10 @@ #include "emu.h" #include "ccm.h" +#include "softlist_dev.h" + +#include <tuple> + //************************************************************************** @@ -46,7 +50,7 @@ device_portfolio_memory_card_slot_interface::device_portfolio_memory_card_slot_i portfolio_memory_card_slot_device::portfolio_memory_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PORTFOLIO_MEMORY_CARD_SLOT, tag, owner, clock), device_single_card_slot_interface<device_portfolio_memory_card_slot_interface>(mconfig, *this), - device_image_interface(mconfig, *this), + device_memcard_image_interface(mconfig, *this), m_card(nullptr) { } @@ -66,17 +70,37 @@ void portfolio_memory_card_slot_device::device_start() // call_load - //------------------------------------------------- -image_init_result portfolio_memory_card_slot_device::call_load() +std::pair<std::error_condition, std::string> portfolio_memory_card_slot_device::call_load() { + std::error_condition err; + if (m_card) { if (!loaded_through_softlist()) - fread(m_card->m_rom, length()); + { + size_t const size = length(); + size_t actual; + std::tie(err, m_card->m_rom, actual) = read(image_core_file(), size); + if (!err && (actual != size)) + err = std::errc::io_error; + } else + { load_software_region("rom", m_card->m_rom); + } } - return image_init_result::PASS; + return std::make_pair(err, std::string()); +} + + +//------------------------------------------------- +// get_software_list_loader - +//------------------------------------------------- + +const software_list_loader &portfolio_memory_card_slot_device::get_software_list_loader() const +{ + return rom_software_list_loader::instance(); } |