diff options
Diffstat (limited to 'src/devices/bus/generic/slot.cpp')
-rw-r--r-- | src/devices/bus/generic/slot.cpp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/devices/bus/generic/slot.cpp b/src/devices/bus/generic/slot.cpp index c892d07f3fe..f2e86809a66 100644 --- a/src/devices/bus/generic/slot.cpp +++ b/src/devices/bus/generic/slot.cpp @@ -18,6 +18,10 @@ e.g. APF cart slot device for an example of a simple device with multiple pcbs supported) + TODO: + - add support for hotswapping (ie. don't force a hard reset), it's doable for + generic rom cartridges, but then you still can't swap from empty slot + ***********************************************************************************************************/ @@ -91,7 +95,7 @@ void device_generic_cart_interface::rom_alloc(u32 size, int width, endianness_t std::string fulltag(tag); fulltag.append(GENERIC_ROM_REGION_TAG); device().logerror("Allocating %u byte ROM region with tag '%s' (width %d)\n", size, fulltag, width); - m_rom = device().machine().memory().region_alloc(fulltag.c_str(), size, width, endian)->base(); + m_rom = device().machine().memory().region_alloc(fulltag, size, width, endian)->base(); m_rom_size = size; } @@ -117,12 +121,11 @@ void device_generic_cart_interface::ram_alloc(u32 size) generic_slot_device::generic_slot_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) : device_t(mconfig, type, tag, owner, clock), - device_image_interface(mconfig, *this), + device_rom_image_interface(mconfig, *this), device_single_card_slot_interface<device_generic_cart_interface>(mconfig, *this), m_interface(nullptr), m_default_card("rom"), m_extensions("bin"), - m_must_be_loaded(false), m_width(GENERIC_ROM8_WIDTH), m_endianness(ENDIANNESS_LITTLE), m_cart(nullptr), @@ -145,6 +148,14 @@ generic_slot_device::~generic_slot_device() { } +generic_socket_device::~generic_socket_device() +{ +} + +generic_cartslot_device::~generic_cartslot_device() +{ +} + void generic_slot_device::device_start() { m_cart = get_card_device(); @@ -157,24 +168,25 @@ void generic_slot_device::device_start() call load -------------------------------------------------*/ -image_init_result generic_slot_device::call_load() +std::pair<std::error_condition, std::string> generic_slot_device::call_load() { - if (m_cart) + if (!m_cart) + { + return std::make_pair(std::error_condition(), std::string()); + } + else if (!m_device_image_load.isnull()) { - if (!m_device_image_load.isnull()) - return m_device_image_load(*this); - else - { - u32 len = common_get_size("rom"); + return m_device_image_load(*this); + } + else + { + u32 const len = common_get_size("rom"); - rom_alloc(len, m_width, m_endianness); - common_load_rom(get_rom_base(), len, "rom"); + rom_alloc(len, m_width, m_endianness); + common_load_rom(get_rom_base(), len, "rom"); - return image_init_result::PASS; - } + return std::make_pair(std::error_condition(), std::string()); } - - return image_init_result::PASS; } |