summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/gridcomp/gridrom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/gridcomp/gridrom.cpp')
-rw-r--r--src/mame/gridcomp/gridrom.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/mame/gridcomp/gridrom.cpp b/src/mame/gridcomp/gridrom.cpp
new file mode 100644
index 00000000000..9d4350b45ab
--- /dev/null
+++ b/src/mame/gridcomp/gridrom.cpp
@@ -0,0 +1,63 @@
+// license:BSD-3-Clause
+// copyright-holders:vklachkov
+
+#include "gridrom.h"
+
+#include <inttypes.h>
+
+#include "bus/generic/rom.h"
+
+DEFINE_DEVICE_TYPE(GRIDROM_SOCKET, gridrom_socket_device, "gridrom_socket", "GRiD's ROM Socket")
+
+device_slot_interface &gridrom_slot(device_slot_interface &device)
+{
+ device.option_add_internal("rom", GENERIC_ROM_PLAIN);
+ return device;
+}
+
+gridrom_socket_device::gridrom_socket_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ generic_slot_device(mconfig, GRIDROM_SOCKET, tag, owner, clock)
+{
+}
+
+gridrom_socket_device::~gridrom_socket_device()
+{
+}
+
+std::pair<std::error_condition, std::string> gridrom_socket_device::call_load()
+{
+ const uint32_t size = loaded_through_softlist() ? get_software_region_length("rom") : length();
+ const std::vector<uint32_t> &sizes = m_acceptable_sizes;
+
+ if (std::find(sizes.begin(), sizes.end(), size) == sizes.end())
+ {
+ std::string sizes_str;
+ for (size_t i = 0; i < sizes.size(); ++i)
+ {
+ if (i != 0) sizes_str += ", ";
+ sizes_str += util::string_format("%" PRIu32, sizes[i]);
+ }
+
+ return std::make_pair(
+ image_error::INVALIDLENGTH,
+ util::string_format("Invalid ROM size: expected one of [%s] bytes, got %" PRIu32, sizes_str.c_str(), size));
+ }
+
+ return generic_slot_device::call_load();
+}
+
+uint8_t gridrom_socket_device::read(offs_t offset)
+{
+ return this->read_rom(offset);
+}
+
+void gridrom_socket_device::set_image_names(std::string type_name, std::string brief_type_name)
+{
+ m_image_type_name = type_name;
+ m_image_brief_type_name = brief_type_name;
+}
+
+void gridrom_socket_device::set_acceptable_sizes(std::vector<uint32_t> values)
+{
+ m_acceptable_sizes = values;
+}