summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-06-04 15:09:40 +0200
committer hap <happppp@users.noreply.github.com>2020-06-04 15:09:51 +0200
commit7bff87f979646d7a0b878658a636ca072c7e88e8 (patch)
treee731ef51b0b9e6c0ea2a5709c5b199d6f55aa447 /src/devices/bus
parentca83ae11fe7ea23b5c64de820bb2dc56fe95dea0 (diff)
msx: add matra ink cartridge (nw)
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/msx_cart/cartridge.cpp2
-rw-r--r--src/devices/bus/msx_cart/ink.cpp55
-rw-r--r--src/devices/bus/msx_cart/ink.h36
3 files changed, 93 insertions, 0 deletions
diff --git a/src/devices/bus/msx_cart/cartridge.cpp b/src/devices/bus/msx_cart/cartridge.cpp
index 967732b3ae3..9c1e03a05fb 100644
--- a/src/devices/bus/msx_cart/cartridge.cpp
+++ b/src/devices/bus/msx_cart/cartridge.cpp
@@ -14,6 +14,7 @@
#include "halnote.h"
#include "hfox.h"
#include "holy_quran.h"
+#include "ink.h"
#include "konami.h"
#include "korean.h"
#include "majutsushi.h"
@@ -58,6 +59,7 @@ void msx_cart(device_slot_interface &device)
device.option_add_internal("msxaud_nms1205", MSX_CART_MSX_AUDIO_NMS1205);
device.option_add_internal("super_swangi", MSX_CART_SUPER_SWANGI);
device.option_add_internal("hfox", MSX_CART_HFOX);
+ device.option_add_internal("ink", MSX_CART_INK);
device.option_add_internal("keyboard_master", MSX_CART_KEYBOARD_MASTER);
device.option_add_internal("holy_quran", MSX_CART_HOLY_QURAN);
device.option_add_internal("dooly", MSX_CART_DOOLY);
diff --git a/src/devices/bus/msx_cart/ink.cpp b/src/devices/bus/msx_cart/ink.cpp
new file mode 100644
index 00000000000..e3053a5da7d
--- /dev/null
+++ b/src/devices/bus/msx_cart/ink.cpp
@@ -0,0 +1,55 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/******************************************************************************
+
+Ink cartridge (Matra, 2006)
+
+48KB ROM data on an AMD Am29F040B(label scratched off), the game uses it
+for protection.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "ink.h"
+
+DEFINE_DEVICE_TYPE(MSX_CART_INK, msx_cart_ink_device, "msx_cart_ink", "MSX Cartridge - Ink")
+
+
+msx_cart_ink_device::msx_cart_ink_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, MSX_CART_INK, tag, owner, clock)
+ , msx_cart_interface(mconfig, *this)
+ , m_flash(*this, "flash")
+{
+}
+
+ROM_START( msx_cart_ink )
+ ROM_REGION(0x80000, "flash", ROMREGION_ERASEFF)
+ROM_END
+
+const tiny_rom_entry *msx_cart_ink_device::device_rom_region() const
+{
+ return ROM_NAME( msx_cart_ink );
+}
+
+void msx_cart_ink_device::device_add_mconfig(machine_config &config)
+{
+ AMD_29F040(config, m_flash);
+}
+
+void msx_cart_ink_device::initialize_cartridge()
+{
+ size_t size = get_rom_size() > 0x80000 ? 0x80000 : get_rom_size();
+ memcpy(memregion("flash")->base(), get_rom_base(), size);
+}
+
+
+uint8_t msx_cart_ink_device::read_cart(offs_t offset)
+{
+ return m_flash->read(offset);
+}
+
+void msx_cart_ink_device::write_cart(offs_t offset, uint8_t data)
+{
+ // /RD connects to flashrom A16-A18
+ m_flash->write(offset | 0x70000, data);
+}
diff --git a/src/devices/bus/msx_cart/ink.h b/src/devices/bus/msx_cart/ink.h
new file mode 100644
index 00000000000..933385c575d
--- /dev/null
+++ b/src/devices/bus/msx_cart/ink.h
@@ -0,0 +1,36 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+#ifndef MAME_BUS_MSX_CART_INK_H
+#define MAME_BUS_MSX_CART_INK_H
+
+#pragma once
+
+#include "bus/msx_cart/cartridge.h"
+#include "machine/intelfsh.h"
+
+
+DECLARE_DEVICE_TYPE(MSX_CART_INK, msx_cart_ink_device)
+
+
+class msx_cart_ink_device : public device_t, public msx_cart_interface
+{
+public:
+ msx_cart_ink_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void initialize_cartridge() override;
+
+ virtual uint8_t read_cart(offs_t offset) override;
+ virtual void write_cart(offs_t offset, uint8_t data) override;
+
+protected:
+ // device-level overrides
+ virtual void device_start() override { ; }
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ required_device<amd_29f040_device> m_flash;
+};
+
+
+#endif // MAME_BUS_MSX_CART_INK_H