diff options
Diffstat (limited to 'src/devices/bus/msx/softcard/softcard.cpp')
-rw-r--r-- | src/devices/bus/msx/softcard/softcard.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/devices/bus/msx/softcard/softcard.cpp b/src/devices/bus/msx/softcard/softcard.cpp new file mode 100644 index 00000000000..bd0b5847f9d --- /dev/null +++ b/src/devices/bus/msx/softcard/softcard.cpp @@ -0,0 +1,56 @@ +// license:BSD-3-Clause +// copyright-holders:Wilbert Pol + +#include "emu.h" +#include "bus/msx/cart/softcard.h" + + +DECLARE_DEVICE_TYPE(SOFTCARD_NOMAPPER, softcard_interface) + + +void softcard(device_slot_interface &device) +{ + device.option_add_internal("nomapper", SOFTCARD_NOMAPPER); +} + + +namespace { + +class softcard_nomapper_device : public device_t + , public softcard_interface +{ +public: + softcard_nomapper_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + // device-level overrides + virtual void device_start() override { } + + virtual std::error_condition initialize_cartridge(std::string &message) override; + +}; + + +softcard_nomapper_device::softcard_nomapper_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, SOFTCARD_NOMAPPER, tag, owner, clock) + , softcard_interface(mconfig, *this) +{ +} + +std::error_condition softcard_nomapper_device::initialize_cartridge(std::string &message) +{ + if (!cart_rom_region()) + { + message = "softcard_nomapper: Required region 'rom' was not found."; + return image_error::INTERNAL; + } + + page(1)->install_rom(0x4000, 0x7fff, cart_rom_region()->base()); + page(2)->install_rom(0x8000, 0xbfff, cart_rom_region()->base() + 0x4000); + + return std::error_condition(); +} + +} // anonymous namespace + +DEFINE_DEVICE_TYPE_PRIVATE(SOFTCARD_NOMAPPER, softcard_interface, softcard_nomapper_device, "softcard_nomapper", "SoftCard ROM") |