summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/bbc/rom/slot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/bbc/rom/slot.cpp')
-rw-r--r--src/devices/bus/bbc/rom/slot.cpp37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/devices/bus/bbc/rom/slot.cpp b/src/devices/bus/bbc/rom/slot.cpp
index 6ef0dddf180..744d9ea9681 100644
--- a/src/devices/bus/bbc/rom/slot.cpp
+++ b/src/devices/bus/bbc/rom/slot.cpp
@@ -123,20 +123,24 @@ std::pair<std::error_condition, std::string> bbc_romslot_device::call_load()
if (size % 0x2000)
return std::make_pair(image_error::INVALIDLENGTH, "Invalid ROM size (must be a multiple of 8K)");
- m_cart->rom_alloc(size, tag());
+ uint8_t *base;
+ const char *pcb_name = get_feature("slot");
+ if (pcb_name && !strcmp(pcb_name, "ram"))
+ {
+ base = m_cart->get_ram_base();
+ }
+ else
+ {
+ m_cart->rom_alloc(size, tag());
+ base = m_cart->get_rom_base();
+ }
if (!loaded_through_softlist())
- fread(m_cart->get_rom_base(), size);
+ fread(base, size);
else
- memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
+ memcpy(base, get_software_region("rom"), size);
m_cart->decrypt_rom();
-
- if (get_software_region("ram"))
- m_cart->ram_alloc(get_software_region_length("ram"));
-
- if (get_software_region("nvram"))
- m_cart->nvram_alloc(get_software_region_length("nvram"));
}
return std::make_pair(std::error_condition(), std::string());
@@ -216,10 +220,23 @@ void bbc_romslot_device::write(offs_t offset, uint8_t data)
#include "rtc.h"
+//-------------------------------------------------
+// present - rom/ram selected
+//-------------------------------------------------
+
+bool bbc_romslot_device::present()
+{
+ if (m_cart && ((m_cart->device().type() == BBC_RAM) || m_cart->device().type() == BBC_NVRAM))
+ return true;
+ else
+ return is_loaded() || loaded_through_softlist();
+}
+
+
void bbc_rom_devices(device_slot_interface &device)
{
+ device.option_add("ram", BBC_RAM);
device.option_add_internal("rom", BBC_ROM);
- device.option_add_internal("ram", BBC_RAM);
device.option_add_internal("nvram", BBC_NVRAM);
device.option_add_internal("cciword", BBC_CCIWORD);
device.option_add_internal("ccibase", BBC_CCIBASE);