diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml
index d70597efea9..d82a264eb95 100644
--- a/hash/msx1_cart.xml
+++ b/hash/msx1_cart.xml
@@ -2961,6 +2961,20 @@ kept for now until finding out what those bytes affect...
+
+ C_So! (Japan, alt)
+ 1985
+ Pony Canyon
+
+
+
+
+
+
+
+
+
+
C_So! (Korea)
198?
@@ -2973,6 +2987,30 @@ kept for now until finding out what those bytes affect...
+
+ Campeón de Conductores (Spain)
+ 1986
+ Toshiba Spain
+
+
+
+
+
+
+
+
+
+ Cannon Fighter (Japan, The Link)
+ 198?
+ Policy
+
+
+
+
+
+
+
+
Cannon Turbo (Japan)
198?
@@ -2986,6 +3024,19 @@ kept for now until finding out what those bytes affect...
+
+ Cannon Turbo (Japan, alt)
+ 198?
+ Brother Kougyou
+
+
+
+
+
+
+
+
+
Cabbage Patch Kids (Japan)
1984
@@ -3588,6 +3639,20 @@ kept for now until finding out what those bytes affect...
+
+ Circus Charlie (Japan, The Link)
+ 1984
+ Konami
+
+
+
+
+
+
+
+
+
+
City Connection (Japan)
1986
@@ -4021,12 +4086,16 @@ kept for now until finding out what those bytes affect...
-
-
+
+
+
+
+
+
@@ -4039,12 +4108,16 @@ kept for now until finding out what those bytes affect...
-
-
+
+
+
+
+
+
@@ -4118,6 +4191,21 @@ kept for now until finding out what those bytes affect...
+
+ Custar (Japan)
+ 1985
+ HAL Laboratory
+
+
+
+
+
+
+
+
+
+
+
Cyborg Z (Korea)
@@ -8855,6 +8943,20 @@ Character creation does not write the new character data.
+
+ Midway (Japan, alt)
+ 1983
+ National
+
+
+
+
+
+
+
+
+
+
Mil Caras (Spain)
1985
@@ -13698,6 +13800,20 @@ Right/left cursor keys select tape baud rate 1200/2400 respectively.
+
+ Video Hustler (Japan, alt 3)
+ 1984
+ Konami
+
+
+
+
+
+
+
+
+
+
Vifam (Japan)
1984
@@ -18955,6 +19071,907 @@ legacy FM implementations cannot find it.
+
+ C.C.R. Anexo 1 El Algoritmo (v1.2)
+ 2018
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ C.C.R. Anexo 1 El Algoritmo (v1.1)
+ 2018
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ C.C.R. Anexo 1 El Algoritmo (v1.0)
+ 2018
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cacorm
+ 2022
+ Inufuto
+
+
+
+
+
+
+
+
+
+ Caos Begins
+ 2007
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Caos Begins (alt)
+ 2007
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Caos Begins (alt 2)
+ 2007
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cardwork Orange (unlicensed)
+ 2010
+ Matra
+
+
+
+
+
+
+
+
+
+ Casio GPM-Collection Volumen 1 (unlicensed)
+ 2010
+ Matra
+
+
+
+
+
+
+
+
+
+ Casio GPM-Collection Volumen 2 (unlicensed)
+ 2010
+ Matra
+
+
+
+
+
+
+
+
+
+ Castle Tomb
+ 2009
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Caverns of Titan
+ 2005
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Caverns of Titan (alt)
+ 2005
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cavit
+ 2021
+ Inufuto
+
+
+
+
+
+
+
+
+
+ Chambers of Thyrea
+ 2020
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Champion Billiards
+ 2020
+ Mastropiero
+
+
+
+
+
+
+
+
+
+ Cheating Wives
+ 2005
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Chocobo Racing
+ 2004
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Classic Minesweeper
+ 2004
+ Karoshi Corporation
+
+
+
+
+
+
+
+
+
+ Classic Pong
+ 2004
+ Karoshi Corporation
+
+
+
+
+
+
+
+
+
+ CMJN
+ 2014
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cocoa and the Time Machine
+ 2020
+ Minilop
+
+
+
+
+
+
+
+
+
+
+ Codename: INTRUDER
+ 2018
+ Repro Factory
+
+
+
+
+
+
+
+
+
+
+ Cold Blood
+ 2009
+ MSX Cartridge Shop
+
+
+
+
+
+
+
+
+
+ Cold Blood (demo)
+ 2009
+ Paxanga Soft
+
+
+
+
+
+
+
+
+
+ Computer Wars (English)
+ 2004
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Computer Wars (Spanish)
+ 2004
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Corona's Spree
+ 2020
+ Arnauri Calcalho
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v1.1.2)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v1.1.1)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v1.1.0)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v1.0.1)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v1.0.0)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v0.3.1)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v0.3.0)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v0.2.2)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v0.2.0)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Corridor Runner (v0.1.0)
+ 2022
+ Aburi Games
+
+
+
+
+
+
+
+
+
+ Cosmic Battle (beta)
+ 2005
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cow Abductors
+ 2009
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cow Abductors (older)
+ 2009
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Crappy Olympics
+ 2021
+ Orazio Cacciola
+
+
+
+
+
+
+
+
+
+ Crazy Buggy
+ 2005
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Crazy MSX Frenchies
+ 2007
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cross Bomber (2022-07-20)
+ 2022
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Bomber (alt)
+ 2022
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Bomber (2020-09-25)
+ 2020
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2021-05-13)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (alt)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2020-04-02)
+ 2020
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-11-13)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-08-10)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-07-19)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-05-19)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-04-15)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2018-02-03)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2017-12-16)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2017-10-30)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Chase (2017-10-11)
+ 2018
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Horde (2021-05-12)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Horde (2021-05-01)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Horde (2021-04-25)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Shoot (2022-02-26)
+ 2022
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Shoot (alt)
+ 2022
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Shoot (2021-05-12)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Snake (v2.0)
+ 2020
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Snake (v2.0, alt)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Snake (v1.0)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cross Snake (preview)
+ 2021
+ Fabrizio Caruso
+
+
+
+
+
+
+
+
+
+ Cryptogram - Anagrams Crosswords (v1.1)
+ 2022
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cryptogram - Anagrams Crosswords (v1.0)
+ 2022
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cuncuna
+ 2020
+ MSXDev
+
+
+
+
+
+
+
+
+
+
+ Cuncuna (older)
+ 1991
+ Christian Córdova
+
+
+
+
+
+
+
+
Daedalian Opus
2006
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 7a70aa86ea5..c369983f01a 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1953,6 +1953,8 @@ if (BUSES["MSX_SLOT"]~=null) then
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/matra.cpp",
+ MAME_DIR .. "src/devices/bus/msx/cart/matra.h",
MAME_DIR .. "src/devices/bus/msx/cart/moonsound.h",
MAME_DIR .. "src/devices/bus/msx/cart/moonsound.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/msx_audio.cpp",
diff --git a/src/devices/bus/msx/cart/cartridge.cpp b/src/devices/bus/msx/cart/cartridge.cpp
index 65679d17ba2..2f0c8d64639 100644
--- a/src/devices/bus/msx/cart/cartridge.cpp
+++ b/src/devices/bus/msx/cart/cartridge.cpp
@@ -24,6 +24,7 @@
#include "korean.h"
#include "loveplus.h"
#include "majutsushi.h"
+#include "matra.h"
#include "moonsound.h"
#include "msx_audio.h"
#include "msxdos2.h"
@@ -75,6 +76,7 @@ void msx_cart(device_slot_interface &device, bool is_in_subslot)
device.option_add_internal(slotoptions::KOREAN_HYDLIDE2, MSX_CART_KOREAN_HYDLIDE2);
device.option_add_internal(slotoptions::LOVEPLUS, MSX_CART_LOVEPLUS);
device.option_add_internal(slotoptions::MAJUSTUSHI, MSX_CART_MAJUTSUSHI);
+ device.option_add_internal(slotoptions::MATRA_COMP, MSX_CART_MATRA_COMP);
device.option_add_internal(slotoptions::MSXAUD_FSCA1, MSX_CART_MSX_AUDIO_FSCA1);
device.option_add_internal(slotoptions::MSXAUD_HXMU900, MSX_CART_MSX_AUDIO_HXMU900);
device.option_add_internal(slotoptions::MSXAUD_NMS1205, MSX_CART_MSX_AUDIO_NMS1205);
diff --git a/src/devices/bus/msx/cart/matra.cpp b/src/devices/bus/msx/cart/matra.cpp
new file mode 100644
index 00000000000..d49b34d148d
--- /dev/null
+++ b/src/devices/bus/msx/cart/matra.cpp
@@ -0,0 +1,102 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#include "emu.h"
+#include "matra.h"
+
+namespace {
+
+class msx_cart_matra_comp_device : public device_t, public msx_cart_interface
+{
+public:
+ msx_cart_matra_comp_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 void bank_w(u8 data);
+ void disable_banking_w(u8 data);
+
+ memory_bank_array_creator<4> m_rombank;
+
+ u8 m_bank_mask;
+ bool m_banking_enabled;
+};
+
+
+msx_cart_matra_comp_device::msx_cart_matra_comp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, MSX_CART_MATRA_COMP, tag, owner, clock)
+ , msx_cart_interface(mconfig, *this)
+ , m_rombank(*this, "rombank%u", 0U)
+ , m_bank_mask(0)
+ , m_banking_enabled(true)
+{
+}
+
+void msx_cart_matra_comp_device::device_start()
+{
+ save_item(NAME(m_banking_enabled));
+}
+
+void msx_cart_matra_comp_device::device_reset()
+{
+ for (int i = 0; i < 4; i++)
+ m_rombank[i]->set_entry(i);
+ m_banking_enabled = true;
+}
+
+std::error_condition msx_cart_matra_comp_device::initialize_cartridge(std::string &message)
+{
+ if (!cart_rom_region())
+ {
+ message = "msx_cart_matra_comp_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 * 0x2000 || size < 0x8000 || size != banks * 0x2000 || (~(banks - 1) % banks))
+ {
+ message = "msx_cart_matra_comp_device: Region 'rom' has unsupported size.";
+ return image_error::INVALIDLENGTH;
+ }
+
+ m_bank_mask = banks - 1;
+
+ for (int i = 0; i < 4; i++)
+ m_rombank[i]->configure_entries(0, banks, cart_rom_region()->base(), 0x2000);
+
+ page(1)->install_read_bank(0x4000, 0x5fff, m_rombank[0]);
+ page(1)->install_write_handler(0x5000, 0x5000, emu::rw_delegate(*this, FUNC(msx_cart_matra_comp_device::bank_w<0>)));
+ page(1)->install_read_bank(0x6000, 0x7fff, m_rombank[1]);
+ page(1)->install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(msx_cart_matra_comp_device::bank_w<1>)));
+ page(2)->install_read_bank(0x8000, 0x9fff, m_rombank[2]);
+ page(2)->install_write_handler(0x8000, 0x8000, emu::rw_delegate(*this, FUNC(msx_cart_matra_comp_device::bank_w<2>)));
+ page(2)->install_read_bank(0xa000, 0xbfff, m_rombank[3]);
+ page(2)->install_write_handler(0xa000, 0xa000, emu::rw_delegate(*this, FUNC(msx_cart_matra_comp_device::bank_w<3>)));
+ page(2)->install_write_handler(0xba00, 0xba00, emu::rw_delegate(*this, FUNC(msx_cart_matra_comp_device::disable_banking_w)));
+
+ return std::error_condition();
+}
+
+template
+void msx_cart_matra_comp_device::bank_w(u8 data)
+{
+ if (m_banking_enabled)
+ m_rombank[Bank]->set_entry(data & m_bank_mask);
+}
+
+void msx_cart_matra_comp_device::disable_banking_w(u8 data)
+{
+ // Assuming that any write here disables banking
+ m_banking_enabled = false;
+}
+
+} // anonymous namespace
+
+DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_MATRA_COMP, msx_cart_interface, msx_cart_matra_comp_device, "msx_cart_matra_comp", "MSX Cartridge - Matra Compilation")
diff --git a/src/devices/bus/msx/cart/matra.h b/src/devices/bus/msx/cart/matra.h
new file mode 100644
index 00000000000..ed010b4d42d
--- /dev/null
+++ b/src/devices/bus/msx/cart/matra.h
@@ -0,0 +1,14 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_CART_MATRA_H
+#define MAME_BUS_MSX_CART_MATRA_H
+
+#pragma once
+
+#include "bus/msx/slot/cartridge.h"
+
+
+DECLARE_DEVICE_TYPE(MSX_CART_MATRA_COMP, msx_cart_interface)
+
+
+#endif // MAME_BUS_MSX_CART_MATRA_H
diff --git a/src/devices/bus/msx/cart/slotoptions.cpp b/src/devices/bus/msx/cart/slotoptions.cpp
index e3ae9bc4e81..ec2da0dbf22 100644
--- a/src/devices/bus/msx/cart/slotoptions.cpp
+++ b/src/devices/bus/msx/cart/slotoptions.cpp
@@ -52,6 +52,7 @@ char const *const KOREAN_126IN1 = "korean_126in1";
char const *const KOREAN_HYDLIDE2 = "korean_hydlide2";
char const *const LOVEPLUS = "loveplus";
char const *const MAJUSTUSHI = "majutsushi";
+char const *const MATRA_COMP = "matra_comp";
char const *const MM256K = "mm256k";
char const *const MM512K = "mm512k";
char const *const MM768K = "mm768k";
diff --git a/src/devices/bus/msx/cart/slotoptions.h b/src/devices/bus/msx/cart/slotoptions.h
index 44fedd84707..7bda2112d08 100644
--- a/src/devices/bus/msx/cart/slotoptions.h
+++ b/src/devices/bus/msx/cart/slotoptions.h
@@ -54,6 +54,7 @@ extern char const *const KOREAN_126IN1;
extern char const *const KOREAN_HYDLIDE2;
extern char const *const LOVEPLUS;
extern char const *const MAJUSTUSHI;
+extern char const *const MATRA_COMP;
extern char const *const MM256K;
extern char const *const MM512K;
extern char const *const MM768K;