diff options
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 |
commit | 3b9fa5f3c69ea498be27bc74d3c9fc25f9b6bde6 (patch) | |
tree | 69324330bf2cba1f0a42187379c5e6ecbbda74be | |
parent | 8b8569a18edb45b96a9c38a72bbf13a58736c16b (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.xml | 153 | ||||
-rw-r--r-- | hash/msx1_cart.xml | 112 | ||||
-rw-r--r-- | hash/msx_softcard.xml | 67 | ||||
-rw-r--r-- | scripts/src/bus.lua | 8 | ||||
-rw-r--r-- | src/devices/bus/msx/beecard/beecard.cpp | 55 | ||||
-rw-r--r-- | src/devices/bus/msx/beecard/beecard.h | 12 | ||||
-rw-r--r-- | src/devices/bus/msx/cart/beepack.cpp | 100 | ||||
-rw-r--r-- | src/devices/bus/msx/cart/beepack.h | 58 | ||||
-rw-r--r-- | src/devices/bus/msx/cart/cartridge.cpp | 4 | ||||
-rw-r--r-- | src/devices/bus/msx/cart/softcard.cpp | 99 | ||||
-rw-r--r-- | src/devices/bus/msx/cart/softcard.h | 58 | ||||
-rw-r--r-- | src/devices/bus/msx/slot/cartridge.cpp | 4 | ||||
-rw-r--r-- | src/devices/bus/msx/softcard/softcard.cpp | 54 | ||||
-rw-r--r-- | src/devices/bus/msx/softcard/softcard.h | 12 |
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 |