msx1_cart.xml: Added 100 items (99 working). (#11235)

bus/msx/cart: Added support for Love Plus Pack 0 multi-game cartridge.

New working software list items (msx1_cart.xml)
-------------------------------
The Love Plus Pack 0 (Korea, pirate) [file-hunter]
Trun (demo) [file-hunter]
Twin Hammer (Europe, alt) [file-hunter]
Twin Hammer (Europe, alt 2) [file-hunter]
Video Hustler (Japan, alt 2) [file-hunter]
Volguard (Japan, alt) [file-hunter]
TT Racer (Al Alamiah) [file-hunter]
Voyage to Mecca (Arab, alt 3) [file-hunter]
T-Game 4 [file-hunter]
T-Game 4 (alt) [file-hunter]
T-Virus [MSXDev]
Tales of Popolon (English, v1.3.1) [santiontanon]
Tales of Popolon (Spanish, v1.3.1) [santiontanon]
Tales of Popolon (English, v1.3) [santiontanon]
Tales of Popolon (Spanish, v1.3) [santiontanon]
Tales of Popolon (English, v1.2) [santiontanon]
Tales of Popolon (Spanish, v1.2) [santiontanon]
Tales of Popolon (English, v1.1.1) [santiontanon]
Tales of Popolon (English, v1.1) [santiontanon]
Tales of Popolon (English, v1.0) [santiontanon]
Teki-Paki [file-hunter]
Teki-Paki (beta) [MSXDev]
Tekmo 400 [file-hunter]
Teodoro no Sabe Volar (English) [MSXDev]
Teodoro no Sabe Volar (Spanish) [MSXDev]
The Circus Mystery (v1.4) [MSXDev]
The Circus Mystery (v1.3) [file-hunter]
The Cure [MSXDev]
The Cure (alt) [file-hunter]
The Lost Mines [file-hunter]
The Mansion (English) [MSXDev]
The Mansion (Spanish) [MSXDev]
The Menace from Triton (v1.2) [santiontanon]
The Menace from Triton (v1.1) [santiontanon]
The Menace from Triton (v1.0.2) [santiontanon]
The Menace from Triton (v1.0.1) [santiontanon]
The Menace from Triton (v1.0.0) [santiontanon]
The Queen's Footsteps (v1.1.1) [Davide Bucci]
The Queen's Footsteps (v1.0) [file-hunter]
Tiles of Shalom [MSXDev]
Tilez [[msx.org](http://msx.org/)]
Tina's Adventure Island [hobbyretro]
Tiny Slot Checker (v3.2) [tiny-yarou]
Tiny Slot Checker (v2) [tiny-yarou]
Tiny Slot Checker (older) [file-hunter]
Tomb of Genghis Khan [MSXDev]
Tool Blocks [MSXDev]
Tortilla Sunrise (English, v1.1) [MSXDev]
Tortilla Sunrise (Spanish, v1.1) [MSXDev]
Tortilla Sunrise (English, v1.0) [MSXDev]
Toss a Coin to your Witcher [cobinee]
Traffic Jam [MSXDev]
Traffic Jam (alt) [file-hunter]
Tragaperras (Spanish) [MSXDev]
Trail 2 [file-hunter]
Transball (v1.3.2, English) [santiontanon]
Transball (v1.3.2, Spanish) [santiontanon]
Transball (v1.3.1, English) [santiontanon]
Transball (v1.3.1, Spanish) [santiontanon]
Transball (v1.3, English) [santiontanon]
Transball (v1.3, Spanish) [santiontanon]
Transball (v1.2.1, English) [santiontanon]
Transball (v1.2.1, Spanish) [santiontanon]
Transball (v1.2, English) [santiontanon]
Transball (v1.2, Spanish) [santiontanon]
Transball (v1.1.1, English) [santiontanon]
Transball (v1.1.1, Spanish) [santiontanon]
Transball (v1.1, English) [santiontanon]
Transball (v1.1, Spanish) [santiontanon]
Transball (v1.0.1, Spanish) [santiontanon]
Transball (v1.0, English) [santiontanon]
Transball (v1.0, Spanish) [santiontanon]
Turfy (2019 version) [file-hunter]
Turfy (2016 version) [file-hunter]
Twinlight [retrosouls]
Twinlight (alt) [file-hunter]
Txupinazo! [MSXDev]
U-Do [file-hunter]
U.F.O. [file-hunter]
UnidentifiedFlyingObject [cobinee]
Universe Unknown [file-hunter]
Universe Unknown (alt) [file-hunter]
Up Tack [cobinee]
Uridium [file-hunter]
Uridium (alt) [file-hunter]
Uridium (alt 2) [file-hunter]
Uridium (alt 3) [file-hunter]
Utopia [file-hunter]
veejingSX (v0.996b) [303bcn]
veejingSX (v0.99b) [303bcn]
veejingSX (v0.9b) [303bcn]
9918-veejing (v0.7b, Russian) [303bcn]
9918-veejing (v0.1b) [303bcn]
Viking (English) [MSXDev]
Viking (Spanish) [MSXDev]
Virus LPQ-79 (v1.20) [MSXDev]
Virus LPQ-79 (v1.10) [file-hunter]
Virus LPQ-79 (v1.00) [file-hunter]
VVVVVV (unfinished) [hap]

New NOT_WORKING software list additions (msx1_cart.xml)
------------------------------------------
Tel-Tron (Netherlands) [file-hunter]
This commit is contained in:
wilbertpol 2023-05-17 02:40:14 +01:00 committed by GitHub
parent dcf0346ad0
commit d605021ac0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1482 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1928,6 +1928,8 @@ if (BUSES["MSX_SLOT"]~=null) then
MAME_DIR .. "src/devices/bus/msx/cart/konami.h",
MAME_DIR .. "src/devices/bus/msx/cart/korean.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/korean.h",
MAME_DIR .. "src/devices/bus/msx/cart/loveplus.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/loveplus.h",
MAME_DIR .. "src/devices/bus/msx/cart/majutsushi.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/majutsushi.h",
MAME_DIR .. "src/devices/bus/msx/cart/moonsound.h",

View File

@ -0,0 +1,119 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol
/******************************************************************************
Banking for Love Plus Pack 0, Korean 83-in-1 pirate.
******************************************************************************/
#include "emu.h"
#include "loveplus.h"
namespace {
class msx_cart_loveplus_device : public device_t, public msx_cart_interface
{
public:
msx_cart_loveplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual std::error_condition initialize_cartridge(std::string &message) override;
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
private:
template <int Bank> void bank_w(u8 data);
void bank_9000_w(u8 data);
memory_bank_array_creator<4> m_rombank;
u8 m_bank_mask;
bool m_bank_locked[4];
};
msx_cart_loveplus_device::msx_cart_loveplus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, MSX_CART_LOVEPLUS, tag, owner, clock)
, msx_cart_interface(mconfig, *this)
, m_rombank(*this, "rombank%u", 0U)
{
}
void msx_cart_loveplus_device::device_start()
{
save_item(NAME(m_bank_locked));
}
void msx_cart_loveplus_device::device_reset()
{
m_rombank[0]->set_entry(0);
m_rombank[1]->set_entry(1);
m_rombank[2]->set_entry(2);
m_rombank[3]->set_entry(3);
}
std::error_condition msx_cart_loveplus_device::initialize_cartridge(std::string &message)
{
if (!cart_rom_region())
{
message = "msx_cart_loveplus_device: Required region 'rom' was not found.";
return image_error::INTERNAL;
}
const u32 size = cart_rom_region()->bytes();
const u16 banks = size / 0x2000;
if (size > 256 * 0x8000 || size < 0x10000 || size != banks * 0x2000 || (~(banks - 1) % banks))
{
message = "msx_cart_loveplus_device: Region 'rom' has unsupported size.";
return image_error::INVALIDLENGTH;
}
m_bank_mask = banks - 1;
m_rombank[0]->configure_entries(0, banks, cart_rom_region()->base(), 0x2000);
m_rombank[1]->configure_entries(0, banks, cart_rom_region()->base(), 0x2000);
m_rombank[2]->configure_entries(0, banks, cart_rom_region()->base(), 0x2000);
m_rombank[3]->configure_entries(0, banks, cart_rom_region()->base(), 0x2000);
page(1)->install_read_bank(0x4000, 0x5fff, m_rombank[0]);
page(1)->install_read_bank(0x6000, 0x7fff, m_rombank[1]);
page(1)->nop_write(0x5000, 0x5000); // Referenced from code but never used
page(1)->install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_cart_loveplus_device::bank_w<0>)));
page(1)->install_write_handler(0x6800, 0x6800, emu::rw_delegate(*this, FUNC(msx_cart_loveplus_device::bank_w<1>)));
page(1)->install_write_handler(0x7000, 0x7000, emu::rw_delegate(*this, FUNC(msx_cart_loveplus_device::bank_w<2>)));
page(1)->install_write_handler(0x7800, 0x7800, emu::rw_delegate(*this, FUNC(msx_cart_loveplus_device::bank_w<3>)));
page(2)->install_read_bank(0x8000, 0x9fff, m_rombank[2]);
page(2)->install_read_bank(0xa000, 0xbfff, m_rombank[3]);
page(2)->install_write_handler(0x9000, 0x9000, emu::rw_delegate(*this, FUNC(msx_cart_loveplus_device::bank_9000_w)));
page(2)->nop_write(0xb000, 0xb000); // Referenced from code but never used
return std::error_condition();
}
template <int Bank>
void msx_cart_loveplus_device::bank_w(u8 data)
{
// The banking registers can be only written to once otherwise Q-Bert will not
// start and drop back to Basic.
if (!m_bank_locked[Bank])
{
m_rombank[Bank]->set_entry(data & m_bank_mask);
m_bank_locked[Bank] = true;
}
}
void msx_cart_loveplus_device::bank_9000_w(u8 data)
{
// Before switching to a game the sequence 00, 3f, c2 is written here.
// This unlocks and/or configures the write-once banking somehow
for (int i = 0; i < 4; i++)
m_bank_locked[i] = false;
}
} // anonymous namespace
DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_LOVEPLUS, msx_cart_interface, msx_cart_loveplus_device, "msx_cart_loveplus", "MSX Cartridge - Love Plus Pack")

View File

@ -0,0 +1,14 @@
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol
#ifndef MAME_BUS_MSX_CART_LOVEPLUS_H
#define MAME_BUS_MSX_CART_LOVEPLUS_H
#pragma once
#include "bus/msx/slot/cartridge.h"
DECLARE_DEVICE_TYPE(MSX_CART_LOVEPLUS, msx_cart_interface)
#endif // MAME_BUS_MSX_CART_LOVEPLUS_H

View File

@ -47,6 +47,7 @@ char const *const KONAMI_SCC = "konami_scc";
char const *const KOREAN_80IN1 = "korean_80in1";
char const *const KOREAN_90IN1 = "korean_90in1";
char const *const KOREAN_126IN1 = "korean_126in1";
char const *const LOVEPLUS = "loveplus";
char const *const MAJUSTUSHI = "majutsushi";
char const *const MM256K = "mm256k";
char const *const MM512K = "mm512k";

View File

@ -50,6 +50,7 @@ extern char const *const KONAMI_SCC;
extern char const *const KOREAN_80IN1;
extern char const *const KOREAN_90IN1;
extern char const *const KOREAN_126IN1;
extern char const *const LOVEPLUS;
extern char const *const MAJUSTUSHI;
extern char const *const MM256K;
extern char const *const MM512K;