summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author wilbertpol <wilbertpol@users.noreply.github.com>2022-12-02 15:46:39 +0000
committer GitHub <noreply@github.com>2022-12-03 02:46:39 +1100
commit3b9fa5f3c69ea498be27bc74d3c9fc25f9b6bde6 (patch)
tree69324330bf2cba1f0a42187379c5e6ecbbda74be
parent8b8569a18edb45b96a9c38a72bbf13a58736c16b (diff)
bus/msx: Added support for Hudson Soft Bee Card and Electric Software Astron Softcard media. (#10610)
* Copied or moved Bee Cards entries from msx1_cart.xml to msx1_bee_card.xml. * Copied or moved SoftCard entries from msx1_cart.xml to msx_softcard.xml.
-rw-r--r--hash/msx1_bee_card.xml153
-rw-r--r--hash/msx1_cart.xml112
-rw-r--r--hash/msx_softcard.xml67
-rw-r--r--scripts/src/bus.lua8
-rw-r--r--src/devices/bus/msx/beecard/beecard.cpp55
-rw-r--r--src/devices/bus/msx/beecard/beecard.h12
-rw-r--r--src/devices/bus/msx/cart/beepack.cpp100
-rw-r--r--src/devices/bus/msx/cart/beepack.h58
-rw-r--r--src/devices/bus/msx/cart/cartridge.cpp4
-rw-r--r--src/devices/bus/msx/cart/softcard.cpp99
-rw-r--r--src/devices/bus/msx/cart/softcard.h58
-rw-r--r--src/devices/bus/msx/slot/cartridge.cpp4
-rw-r--r--src/devices/bus/msx/softcard/softcard.cpp54
-rw-r--r--src/devices/bus/msx/softcard/softcard.h12
14 files changed, 683 insertions, 113 deletions
diff --git a/hash/msx1_bee_card.xml b/hash/msx1_bee_card.xml
new file mode 100644
index 00000000000..300061e3099
--- /dev/null
+++ b/hash/msx1_bee_card.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+-->
+<softwarelist name="msx1_bee_card" description="MSX1 Hudson Soft Bee Cards">
+
+<!--
+Known releases:
+BC-M1 Baseball Craze (Japan)
+*BC-M1E Baseball Craze (Spain, UK)
+BC-M2 Star Force (Japan)
+BC-M3 Jet Set Willy (Spain, Japan, UK)
+*BC-M4 T-Plan (Italy)
+BC-M5 Konami's Pooyan (Japan)
+BC-M7 Bomber Man Special (Japan)
+BC-M8 Star Soldier (Japan)
+BC-M9 Master Takahashi's Adventure Island (Japan)
+
+No dump known for entries marked with a *
+-->
+
+ <software name="bombmnsp">
+ <description>Bomber Man Special (Japan)</description>
+ <year>1986</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M7" />
+ <info name="alt_title" value="ボンバーマンスペシャル" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="bomber man special (japan).rom" size="0x8000" crc="042ad44d" sha1="e700493e1c4c14f711e9c1c262fe3e8d76931ca3" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jetsetw">
+ <description>Jet Set Willy</description>
+ <year>1985</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M3" />
+ <info name="alt_title" value="ジェットセットウィリー" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x4000">
+ <rom name="jet set willy (japan).rom" size="0x4000" crc="9191c890" sha1="45b5b0e9dd8d11d034e09803f92ec9720cda1e3c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pooyan">
+ <description>Pooyan (Japan)</description>
+ <year>1985</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M5" />
+ <info name="alt_title" value="コナミのプーヤン ~ Konami no Pooyan (Box?)" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x4000">
+ <rom name="pooyan (japan).rom" size="0x4000" crc="558a09f6" sha1="692a55393e8eef0800a612c01456e9cecd9c1418" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starfrce">
+ <description>Star Force (Japan)</description>
+ <year>1985</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M2" />
+ <info name="alt_title" value="スターフォース" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="star force (japan).rom" size="0x8000" crc="c14e53a1" sha1="c1746efeb4b44dcc80dfc4f429009feac91d9c48" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starfrcea" cloneof="starfrce">
+ <description>Star Force (Japan, alt)</description>
+ <year>1985</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M2" />
+ <info name="alt_title" value="スターフォース" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="star force (japan) (alt 1).rom" size="0x8000" crc="e9de7e32" sha1="5fe86465119343804a722ce4768eb33de806a39f" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starsold">
+ <description>Star Soldier (Japan)</description>
+ <year>1986</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M8" />
+ <info name="alt_title" value="スターソルジャー" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="star soldier (japan).rom" size="0x8000" crc="0b3d975d" sha1="6a56b46b8bf014b25863433d6d96e64641a93eef" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starsolda" cloneof="starsold">
+ <description>Star Soldier (Japan, alt)</description>
+ <year>1986</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M8" />
+ <info name="alt_title" value="スターソルジャー" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="star soldier (japan) (alt 1).rom" size="0x8000" crc="f6d4e101" sha1="b58caf47c953b6f00935a201bfccf7ee968dff32" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="takameij">
+ <description>Takahashi Meijin no Boukenjima (Japan)</description>
+ <year>1986</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M9" />
+ <info name="alt_title" value="高橋名人の冒険島" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="wonder boy (japan).rom" size="0x8000" crc="892266ca" sha1="d74c381ea17acb94527ef3abaa280793a824d322" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="takameija" cloneof="takameij">
+ <description>Takahashi Meijin no Boukenjima (Japan, alt)</description>
+ <year>1986</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M9" />
+ <info name="alt_title" value="高橋名人の冒険島" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="wonder boy (japan) (alt 1).rom" size="0x8000" crc="5130c27b" sha1="1672af5bc1740480e8302f7690589ea5b5391bcb" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="yakyukyo">
+ <description>Yakyuu Kyou (Japan)</description>
+ <year>1985</year>
+ <publisher>Hudson Soft</publisher>
+ <info name="serial" value="BC-M1" />
+ <info name="alt_title" value="野球狂" />
+ <part name="cart" interface="bee_card">
+ <dataarea name="rom" size="0x8000">
+ <rom name="baseball (japan).rom" size="0x8000" crc="24b94274" sha1="f27721cf9ec316ea3b18233f699febf739b25678" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml
index 8dfc2deff6e..0eef52d56e7 100644
--- a/hash/msx1_cart.xml
+++ b/hash/msx1_cart.xml
@@ -1932,18 +1932,6 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Softcard -->
- <software name="backgamm">
- <description>Backgammon (Euro)</description>
- <year>1984</year>
- <publisher>Electric Software</publisher>
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="backgammon (europe).rom" size="32768" crc="b3694e5a" sha1="363b5a8c94cdb63a7ee72b9d25f7b5053cab319a" offset="0" />
- </dataarea>
- </part>
- </software>
-
<software name="backgamj">
<description>Back Gammon (Jpn)</description>
<year>1984</year>
@@ -2497,20 +2485,6 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Bee Card -->
- <software name="bombmnsp">
- <description>Bomber Man Special (Jpn)</description>
- <year>1986</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M7" />
- <info name="alt_title" value="ボンバーマンスペシャル" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="bomber man special (japan).rom" size="32768" crc="042ad44d" sha1="e700493e1c4c14f711e9c1c262fe3e8d76931ca3" offset="0" />
- </dataarea>
- </part>
- </software>
-
<software name="boogie">
<description>Boogie Woogi Jungle (Jpn)</description>
<year>1983</year>
@@ -7587,19 +7561,6 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Softcard -->
- <software name="lemans2">
- <description>Le Mans 2 (Euro)</description>
- <year>1984</year>
- <publisher>Electric Software</publisher>
- <info name="serial" value="5305" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="le mans 2 (europe).rom" size="32768" crc="82dddc34" sha1="f69541b86c2b396cdce765c2dec498e11232b3c9" offset="0" />
- </dataarea>
- </part>
- </software>
-
<!-- Which is the right hardware and which has been hacked to run on the modified pcb? -->
<software name="legendk">
<description>Legendly Knight - Daemaseong (Kor)</description>
@@ -9834,20 +9795,6 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Bee Card -->
- <software name="pooyan">
- <description>Pooyan (Jpn)</description>
- <year>1985</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M5" />
- <info name="alt_title" value="コナミのプーヤン ~ Konami no Pooyan (Box?)" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="16384">
- <rom name="pooyan (japan).rom" size="16384" crc="558a09f6" sha1="692a55393e8eef0800a612c01456e9cecd9c1418" offset="0" />
- </dataarea>
- </part>
- </software>
-
<software name="poppaq">
<description>Poppaq the Fish (Jpn)</description>
<year>1984</year>
@@ -11074,60 +11021,6 @@ kept for now until finding out what those bytes affect...
</part>
</software>
- <software name="starfrce">
- <description>Star Force (Jpn)</description>
- <year>1985</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M2" />
- <info name="alt_title" value="スターフォース" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="star force (japan).rom" size="32768" crc="c14e53a1" sha1="c1746efeb4b44dcc80dfc4f429009feac91d9c48" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="starfrcea" cloneof="starfrce">
- <description>Star Force (Jpn, Alt)</description>
- <year>1985</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M2" />
- <info name="alt_title" value="スターフォース" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="star force (japan) (alt 1).rom" size="32768" crc="e9de7e32" sha1="5fe86465119343804a722ce4768eb33de806a39f" offset="0" />
- </dataarea>
- </part>
- </software>
-
-<!-- Bee Card -->
- <software name="starsold">
- <description>Star Soldier (Jpn)</description>
- <year>1986</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M8" />
- <info name="alt_title" value="スターソルジャー" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="star soldier (japan).rom" size="32768" crc="0b3d975d" sha1="6a56b46b8bf014b25863433d6d96e64641a93eef" offset="0" />
- </dataarea>
- </part>
- </software>
-
-<!-- Bee Card -->
- <software name="starsolda" cloneof="starsold">
- <description>Star Soldier (Jpn, Alt)</description>
- <year>1986</year>
- <publisher>Hudson Soft</publisher>
- <info name="serial" value="BC-M8" />
- <info name="alt_title" value="スターソルジャー" />
- <part name="cart" interface="msx_cart">
- <dataarea name="rom" size="32768">
- <rom name="star soldier (japan) (alt 1).rom" size="32768" crc="f6d4e101" sha1="b58caf47c953b6f00935a201bfccf7ee968dff32" offset="0" />
- </dataarea>
- </part>
- </software>
-
<software name="startrap">
<description>Star Trap (Jpn)</description>
<year>1987</year>
@@ -12507,12 +12400,11 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Softcard -->
<software name="wreck">
<description>The Wreck (Euro)</description>
<year>1984</year>
<publisher>Electric Software</publisher>
- <info name="serial" value="5306/1" />
+ <info name="serial" value="5206/1" />
<part name="cart" interface="msx_cart">
<dataarea name="rom" size="32768">
<rom name="wreck, the (europe).rom" size="32768" crc="7efde800" sha1="58e335c943d2647c3ff1e689069d9fa5e1c7ff6e" offset="0" />
@@ -12580,7 +12472,7 @@ kept for now until finding out what those bytes affect...
</part>
</software>
-<!-- Bee Card (possibly also ROM) -->
+ <!-- This might not exist on cartridge, no photographic evidence yet. -->
<software name="yakyukyo">
<description>Yakyu Kyo (Jpn)</description>
<year>1985</year>
diff --git a/hash/msx_softcard.xml b/hash/msx_softcard.xml
new file mode 100644
index 00000000000..5568c3a7980
--- /dev/null
+++ b/hash/msx_softcard.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+-->
+<softwarelist name="msx_softcard" description="MSX1 Astron SoftCards">
+
+<!--
+Known releases:
+*5302 Shark Hunter (UK)
+5304 Backgammon (UK)
+5305 Le Mans 2 (UK)
+5306/1 The Wreck (UK)
+*5307 Barnstormer (UK)
+*5310 Sweet Acorn (UK)
+*5311 Chack'n Pop (UK)
+*5312 ChoroQ (UK)
+*5313 Xyzolog (UK)
+*DB014 Front Line (UK)
+*DD150 Graphics Editor (UK)
+*????? Unknown title, CAD with digitizing for MSX2 (UK)
+*5509 Quiniela Fútbolistica 1X2 (Spain)
+*6202 Backgammon (Spain)
+*6203 La Bellota (Spain)
+*???? Lotería Primitiva (Spain)
+*???? Quiniela Hipica (Spain)
+
+No dump known for entries marked with a *
+-->
+
+ <software name="backgamm">
+ <description>Backgammon (UK)</description>
+ <year>1984</year>
+ <publisher>Electric Software</publisher>
+ <info name="serial" value="5304" />
+ <part name="cart" interface="softcard">
+ <dataarea name="rom" size="0x8000">
+ <rom name="backgammon (europe).rom" size="0x8000" crc="b3694e5a" sha1="363b5a8c94cdb63a7ee72b9d25f7b5053cab319a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lemans2">
+ <description>Le Mans 2 (UK)</description>
+ <year>1984</year>
+ <publisher>Electric Software</publisher>
+ <info name="serial" value="5305" />
+ <part name="cart" interface="softcard">
+ <dataarea name="rom" size="0x8000">
+ <rom name="le mans 2 (europe).rom" size="0x8000" crc="82dddc34" sha1="f69541b86c2b396cdce765c2dec498e11232b3c9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wreck">
+ <description>The Wreck (UK)</description>
+ <year>1984</year>
+ <publisher>Electric Software</publisher>
+ <info name="serial" value="5306/1" />
+ <part name="cart" interface="softcard">
+ <dataarea name="rom" size="0x8000">
+ <rom name="wreck, the (europe).rom" size="0x8000" crc="7efde800" sha1="58e335c943d2647c3ff1e689069d9fa5e1c7ff6e" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 5aef3a467b2..bd98fa8d8d3 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1855,10 +1855,14 @@ if (BUSES["MSX_SLOT"]~=null) then
MAME_DIR .. "src/devices/bus/msx/slot/slot.h",
MAME_DIR .. "src/devices/bus/msx/slot/sony08.cpp",
MAME_DIR .. "src/devices/bus/msx/slot/sony08.h",
+ MAME_DIR .. "src/devices/bus/msx/beecard/beecard.cpp",
+ MAME_DIR .. "src/devices/bus/msx/beecard/beecard.h",
MAME_DIR .. "src/devices/bus/msx/cart/arc.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/arc.h",
MAME_DIR .. "src/devices/bus/msx/cart/ascii.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/ascii.h",
+ MAME_DIR .. "src/devices/bus/msx/cart/beepack.cpp",
+ MAME_DIR .. "src/devices/bus/msx/cart/beepack.h",
MAME_DIR .. "src/devices/bus/msx/cart/bm_012.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/bm_012.h",
MAME_DIR .. "src/devices/bus/msx/cart/cartridge.cpp",
@@ -1903,12 +1907,16 @@ if (BUSES["MSX_SLOT"]~=null) then
MAME_DIR .. "src/devices/bus/msx/cart/nomapper.h",
MAME_DIR .. "src/devices/bus/msx/cart/rtype.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/rtype.h",
+ MAME_DIR .. "src/devices/bus/msx/cart/softcard.cpp",
+ MAME_DIR .. "src/devices/bus/msx/cart/softcard.h",
MAME_DIR .. "src/devices/bus/msx/cart/superloderunner.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/superloderunner.h",
MAME_DIR .. "src/devices/bus/msx/cart/super_swangi.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/super_swangi.h",
MAME_DIR .. "src/devices/bus/msx/cart/yamaha.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/yamaha.h",
+ MAME_DIR .. "src/devices/bus/msx/softcard/softcard.cpp",
+ MAME_DIR .. "src/devices/bus/msx/softcard/softcard.h",
}
end
diff --git a/src/devices/bus/msx/beecard/beecard.cpp b/src/devices/bus/msx/beecard/beecard.cpp
new file mode 100644
index 00000000000..5885a892445
--- /dev/null
+++ b/src/devices/bus/msx/beecard/beecard.cpp
@@ -0,0 +1,55 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+
+#include "emu.h"
+#include "beecard.h"
+#include "bus/msx/cart/beepack.h"
+
+
+DECLARE_DEVICE_TYPE(BEE_CARD_NOMAPPER, bee_card_interface)
+
+
+void bee_card(device_slot_interface &device)
+{
+ device.option_add_internal("nomapper", BEE_CARD_NOMAPPER);
+}
+
+
+namespace {
+
+class bee_card_nomapper_device : public device_t
+ , public bee_card_interface
+{
+public:
+ bee_card_nomapper_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override { }
+
+ virtual void initialize_cartridge() override;
+
+};
+
+
+bee_card_nomapper_device::bee_card_nomapper_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, BEE_CARD_NOMAPPER, tag, owner, clock)
+ , bee_card_interface(mconfig, *this)
+{
+}
+
+void bee_card_nomapper_device::initialize_cartridge()
+{
+ if (!cart_rom_region())
+ {
+ fatalerror("bee_card_nomapper: ROM region not setup\n");
+ }
+
+ page(1)->install_rom(0x4000, 0x7fff, cart_rom_region()->base());
+ if (cart_rom_region()->bytes() == 0x8000)
+ page(2)->install_rom(0x8000, 0xbfff, cart_rom_region()->base() + 0x4000);
+}
+
+} // anonymous namespace
+
+DEFINE_DEVICE_TYPE_PRIVATE(BEE_CARD_NOMAPPER, bee_card_interface, bee_card_nomapper_device, "bee_card_nomapper", "Bee Card ROM")
diff --git a/src/devices/bus/msx/beecard/beecard.h b/src/devices/bus/msx/beecard/beecard.h
new file mode 100644
index 00000000000..63bf77533aa
--- /dev/null
+++ b/src/devices/bus/msx/beecard/beecard.h
@@ -0,0 +1,12 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_BEECARD_BEECARD_H
+#define MAME_BUS_MSX_BEECARD_BEECARD_H
+
+#pragma once
+
+
+void bee_card(device_slot_interface &device);
+
+
+#endif // MAME_BUS_MSX_BEECARD_BEECARD_H
diff --git a/src/devices/bus/msx/cart/beepack.cpp b/src/devices/bus/msx/cart/beepack.cpp
new file mode 100644
index 00000000000..6567dc96a03
--- /dev/null
+++ b/src/devices/bus/msx/cart/beepack.cpp
@@ -0,0 +1,100 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+/***********************************************************************************
+
+Emulation for the Hudson Soft BP-0001 Bee Pack card reader cartridge.
+
+This cartridge allows Bee Cards (a predecessor of HuCards) to be used on an MSX system.
+
+***********************************************************************************/
+
+#include "emu.h"
+#include "beepack.h"
+#include "bus/msx/beecard/beecard.h"
+#include "softlist_dev.h"
+
+
+DEFINE_DEVICE_TYPE(MSX_CART_BEEPACK, msx_cart_beepack_device, "msx_cart_beepack", "Hudson Soft BP-0001 Bee Pack card reader")
+
+
+msx_cart_beepack_device::msx_cart_beepack_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, MSX_CART_BEEPACK, tag, owner, clock)
+ , device_cartrom_image_interface(mconfig, *this)
+ , device_single_card_slot_interface<bee_card_interface>(mconfig, *this)
+ , msx_cart_interface(mconfig, *this)
+{
+}
+
+void msx_cart_beepack_device::device_resolve_objects()
+{
+ m_beecard = get_card_device();
+ if (m_beecard)
+ {
+ m_beecard->set_views(page(0), page(1), page(2), page(3));
+ }
+}
+
+void msx_cart_beepack_device::device_add_mconfig(machine_config &config)
+{
+ bee_card(*this);
+ SOFTWARE_LIST(config, "bee_card_list").set_original("msx1_bee_card");
+}
+
+image_init_result msx_cart_beepack_device::call_load()
+{
+ if (m_beecard)
+ {
+ if (loaded_through_softlist())
+ {
+ u32 length = get_software_region_length("rom");
+ // Only 16KB or 32KB images are supported
+ if (length != 0x4000 && length != 0x8000)
+ {
+ seterror(image_error::UNSPECIFIED, "Invalid file size for a bee card");
+ return image_init_result::FAIL;
+ }
+ }
+ else
+ {
+ u32 length = this->length();
+ // Only 16KB or 32KB images are supported
+ if (length != 0x4000 && length != 0x8000)
+ {
+ seterror(image_error::UNSPECIFIED, "Invalid file size for a bee card");
+ return image_init_result::FAIL;
+ }
+
+ memory_region *const romregion = machine().memory().region_alloc(subtag("rom"), length, 1, ENDIANNESS_LITTLE);
+ if (fread(romregion->base(), length) != length)
+ {
+ seterror(image_error::UNSPECIFIED, "Unable to fully read file");
+ return image_init_result::FAIL;
+ }
+ }
+
+ m_beecard->initialize_cartridge();
+ }
+ return image_init_result::PASS;
+}
+
+std::string msx_cart_beepack_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("nomapper");
+}
+
+
+
+bee_card_interface::bee_card_interface(const machine_config &mconfig, device_t &device)
+ : device_interface(device, "beecard")
+ , m_page{nullptr, nullptr, nullptr, nullptr}
+ , m_slot(dynamic_cast<msx_cart_beepack_device *>(device.owner()))
+{
+}
+
+void bee_card_interface::set_views(memory_view::memory_view_entry *page0, memory_view::memory_view_entry *page1, memory_view::memory_view_entry *page2, memory_view::memory_view_entry *page3)
+{
+ m_page[0] = page0;
+ m_page[1] = page1;
+ m_page[2] = page2;
+ m_page[3] = page3;
+}
diff --git a/src/devices/bus/msx/cart/beepack.h b/src/devices/bus/msx/cart/beepack.h
new file mode 100644
index 00000000000..9926f831124
--- /dev/null
+++ b/src/devices/bus/msx/cart/beepack.h
@@ -0,0 +1,58 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_CART_BEEPACK_H
+#define MAME_BUS_MSX_CART_BEEPACK_H
+
+#pragma once
+
+#include "cartridge.h"
+#include "imagedev/cartrom.h"
+
+
+DECLARE_DEVICE_TYPE(MSX_CART_BEEPACK, msx_cart_beepack_device)
+
+class bee_card_interface;
+
+
+class msx_cart_beepack_device : public device_t
+ , public device_cartrom_image_interface
+ , public device_single_card_slot_interface<bee_card_interface>
+ , public msx_cart_interface
+{
+public:
+ msx_cart_beepack_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual bool is_reset_on_load() const noexcept override { return true; }
+ virtual const char *image_interface() const noexcept override { return "bee_card"; }
+ virtual const char *file_extensions() const noexcept override { return "bin,rom"; }
+
+protected:
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+ bee_card_interface *m_beecard;
+};
+
+
+class bee_card_interface : public device_interface
+{
+public:
+ virtual void initialize_cartridge() { }
+ void set_views(memory_view::memory_view_entry *page0, memory_view::memory_view_entry *page1, memory_view::memory_view_entry *page2, memory_view::memory_view_entry *page3);
+
+protected:
+ bee_card_interface(const machine_config &mconfig, device_t &device);
+ memory_region *cart_rom_region() { return m_slot ? m_slot->memregion("rom") : nullptr; }
+ memory_view::memory_view_entry *page(int i) { return m_page[i]; }
+
+private:
+ memory_view::memory_view_entry *m_page[4];
+ msx_cart_beepack_device *const m_slot;
+};
+
+
+#endif // MAME_BUS_MSX_CART_BEEPACK_H
diff --git a/src/devices/bus/msx/cart/cartridge.cpp b/src/devices/bus/msx/cart/cartridge.cpp
index 71910f71ac5..115a1a918c2 100644
--- a/src/devices/bus/msx/cart/cartridge.cpp
+++ b/src/devices/bus/msx/cart/cartridge.cpp
@@ -5,6 +5,7 @@
#include "cartridge.h"
#include "arc.h"
#include "ascii.h"
+#include "beepack.h"
#include "bm_012.h"
#include "crossblaim.h"
#include "disk.h"
@@ -25,6 +26,7 @@
#include "msxdos2.h"
#include "nomapper.h"
#include "rtype.h"
+#include "softcard.h"
#include "superloderunner.h"
#include "super_swangi.h"
#include "yamaha.h"
@@ -71,8 +73,10 @@ void msx_cart(device_slot_interface &device)
device.option_add_internal("superloderunner", MSX_CART_SUPERLODERUNNER);
device.option_add_internal("synthesizer", MSX_CART_SYNTHESIZER);
device.option_add_internal("ec701", MSX_CART_EC701);
+ device.option_add("beepack", MSX_CART_BEEPACK);
device.option_add("bm_012", MSX_CART_BM_012);
device.option_add("moonsound", MSX_CART_MOONSOUND);
+ device.option_add("softcard", MSX_CART_SOFTCARD);
}
diff --git a/src/devices/bus/msx/cart/softcard.cpp b/src/devices/bus/msx/cart/softcard.cpp
new file mode 100644
index 00000000000..b5f5583b26d
--- /dev/null
+++ b/src/devices/bus/msx/cart/softcard.cpp
@@ -0,0 +1,99 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+/***********************************************************************************
+
+Emulation for the Electric Software Astron SoftCard Adaptor cartridge.
+
+This cartridge allows SoftCards to be used on an MSX system.
+
+***********************************************************************************/
+
+#include "emu.h"
+#include "softcard.h"
+#include "bus/msx/softcard/softcard.h"
+#include "softlist_dev.h"
+
+
+DEFINE_DEVICE_TYPE(MSX_CART_SOFTCARD, msx_cart_softcard_device, "msx_cart_softcard", "Electric Softward Astron SoftCard Adaptor")
+
+
+msx_cart_softcard_device::msx_cart_softcard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, MSX_CART_SOFTCARD, tag, owner, clock)
+ , device_cartrom_image_interface(mconfig, *this)
+ , device_single_card_slot_interface<softcard_interface>(mconfig, *this)
+ , msx_cart_interface(mconfig, *this)
+{
+}
+
+void msx_cart_softcard_device::device_resolve_objects()
+{
+ m_softcard = get_card_device();
+ if (m_softcard)
+ {
+ m_softcard->set_views(page(0), page(1), page(2), page(3));
+ }
+}
+
+void msx_cart_softcard_device::device_add_mconfig(machine_config &config)
+{
+ softcard(*this);
+ SOFTWARE_LIST(config, "softcard_list").set_original("msx_softcard");
+}
+
+image_init_result msx_cart_softcard_device::call_load()
+{
+ if (m_softcard)
+ {
+ if (loaded_through_softlist())
+ {
+ u32 length = get_software_region_length("rom");
+ // Only 32KB images are supported
+ if (length != 0x8000)
+ {
+ seterror(image_error::UNSPECIFIED, "Invalid file size for a softcard");
+ return image_init_result::FAIL;
+ }
+ }
+ else
+ {
+ u32 length = this->length();
+ // Only 32KB images are supported
+ if (length != 0x8000)
+ {
+ seterror(image_error::UNSPECIFIED, "Invalid file size for a softcard");
+ return image_init_result::FAIL;
+ }
+
+ memory_region *const romregion = machine().memory().region_alloc(subtag("rom"), length, 1, ENDIANNESS_LITTLE);
+ if (fread(romregion->base(), length) != length)
+ {
+ seterror(image_error::UNSPECIFIED, "Unable to fully read file");
+ return image_init_result::FAIL;
+ }
+ }
+
+ m_softcard->initialize_cartridge();
+ }
+ return image_init_result::PASS;
+}
+
+std::string msx_cart_softcard_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("nomapper");
+}
+
+
+softcard_interface::softcard_interface(const machine_config &mconfig, device_t &device)
+ : device_interface(device, "softcard")
+ , m_page{nullptr, nullptr, nullptr, nullptr}
+ , m_slot(dynamic_cast<msx_cart_softcard_device *>(device.owner()))
+{
+}
+
+void softcard_interface::set_views(memory_view::memory_view_entry *page0, memory_view::memory_view_entry *page1, memory_view::memory_view_entry *page2, memory_view::memory_view_entry *page3)
+{
+ m_page[0] = page0;
+ m_page[1] = page1;
+ m_page[2] = page2;
+ m_page[3] = page3;
+}
diff --git a/src/devices/bus/msx/cart/softcard.h b/src/devices/bus/msx/cart/softcard.h
new file mode 100644
index 00000000000..6174b0939a8
--- /dev/null
+++ b/src/devices/bus/msx/cart/softcard.h
@@ -0,0 +1,58 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_CART_SOFTCARD_H
+#define MAME_BUS_MSX_CART_SOFTCARD_H
+
+#pragma once
+
+#include "cartridge.h"
+#include "imagedev/cartrom.h"
+
+
+DECLARE_DEVICE_TYPE(MSX_CART_SOFTCARD, msx_cart_softcard_device)
+
+class softcard_interface;
+
+
+class msx_cart_softcard_device : public device_t
+ , public device_cartrom_image_interface
+ , public device_single_card_slot_interface<softcard_interface>
+ , public msx_cart_interface
+{
+public:
+ msx_cart_softcard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual bool is_reset_on_load() const noexcept override { return true; }
+ virtual const char *image_interface() const noexcept override { return "softcard"; }
+ virtual const char *file_extensions() const noexcept override { return "bin,rom"; }
+
+protected:
+ virtual void device_resolve_objects() override;
+ virtual void device_start() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+ softcard_interface *m_softcard;
+};
+
+
+class softcard_interface : public device_interface
+{
+public:
+ virtual void initialize_cartridge() { }
+ void set_views(memory_view::memory_view_entry *page0, memory_view::memory_view_entry *page1, memory_view::memory_view_entry *page2, memory_view::memory_view_entry *page3);
+
+protected:
+ softcard_interface(const machine_config &mconfig, device_t &device);
+ memory_region *cart_rom_region() { return m_slot ? m_slot->memregion("rom") : nullptr; }
+ memory_view::memory_view_entry *page(int i) { return m_page[i]; }
+
+private:
+ memory_view::memory_view_entry *m_page[4];
+ msx_cart_softcard_device *const m_slot;
+};
+
+
+#endif // MAME_BUS_MSX_CART_SOFTCARD_H
diff --git a/src/devices/bus/msx/slot/cartridge.cpp b/src/devices/bus/msx/slot/cartridge.cpp
index 958004d43df..4d7b81bfb0f 100644
--- a/src/devices/bus/msx/slot/cartridge.cpp
+++ b/src/devices/bus/msx/slot/cartridge.cpp
@@ -113,10 +113,8 @@ image_init_result msx_slot_cartridge_device::call_load()
{
if (loaded_through_softlist())
{
- u32 length;
-
// Allocate and copy rom contents
- length = get_software_region_length("rom");
+ u32 length = get_software_region_length("rom");
m_cartridge->rom_alloc(length);
if (length > 0)
{
diff --git a/src/devices/bus/msx/softcard/softcard.cpp b/src/devices/bus/msx/softcard/softcard.cpp
new file mode 100644
index 00000000000..a489749de8a
--- /dev/null
+++ b/src/devices/bus/msx/softcard/softcard.cpp
@@ -0,0 +1,54 @@
+// 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 void initialize_cartridge() 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)
+{
+}
+
+void softcard_nomapper_device::initialize_cartridge()
+{
+ if (!cart_rom_region())
+ {
+ fatalerror("softcard_nomapper: ROM region not setup\n");
+ }
+
+ page(1)->install_rom(0x4000, 0x7fff, cart_rom_region()->base());
+ page(2)->install_rom(0x8000, 0xbfff, cart_rom_region()->base() + 0x4000);
+
+}
+
+} // anonymous namespace
+
+DEFINE_DEVICE_TYPE_PRIVATE(SOFTCARD_NOMAPPER, softcard_interface, softcard_nomapper_device, "softcard_nomapper", "SoftCard ROM")
diff --git a/src/devices/bus/msx/softcard/softcard.h b/src/devices/bus/msx/softcard/softcard.h
new file mode 100644
index 00000000000..c47c5c8d6ac
--- /dev/null
+++ b/src/devices/bus/msx/softcard/softcard.h
@@ -0,0 +1,12 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_SOFTCARD_SOFTCARD_H
+#define MAME_BUS_MSX_SOFTCARD_SOFTCARD_H
+
+#pragma once
+
+
+void softcard(device_slot_interface &device);
+
+
+#endif // MAME_BUS_MSX_SOFTCARD_SOFTCARD_H