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.
This commit is contained in:
wilbertpol 2022-12-02 15:46:39 +00:00 committed by GitHub
parent 8b8569a18e
commit 3b9fa5f3c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 683 additions and 113 deletions

153
hash/msx1_bee_card.xml Normal file
View file

@ -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>

View file

@ -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>

67
hash/msx_softcard.xml Normal file
View file

@ -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>

View file

@ -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

View file

@ -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")

View file

@ -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

View file

@ -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;
}

View file

@ -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

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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

View file

@ -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)
{

View file

@ -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")

View file

@ -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