diff --git a/hash/msx2_cart.xml b/hash/msx2_cart.xml
index bbb3b7fadad..83380c48411 100644
--- a/hash/msx2_cart.xml
+++ b/hash/msx2_cart.xml
@@ -3778,6 +3778,55 @@ LZ93A13 (32 pin) - 8KB banks
+
+
+
+
+ MSX-SCSI Interface (Novaxis v1.59.66)
+ 2019
+ Jurgen Kramer
+
+
+
+
+
+
+
+
+
+
+
+ MSX-SCSI Interface (Novaxis v1.59.65)
+ 2019
+ Jurgen Kramer
+
+
+
+
+
+
+
+
+
+
+ MSX-SCSI Interface (Novaxis v1.59.64)
+ 1996
+ MSX Computer Club Gouda
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 42473c3ecfd..435b1bc6e96 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1994,6 +1994,8 @@ if (BUSES["MSX_SLOT"]~=null) then
MAME_DIR .. "src/devices/bus/msx/cart/ram.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/scsi.cpp",
+ MAME_DIR .. "src/devices/bus/msx/cart/scsi.h",
MAME_DIR .. "src/devices/bus/msx/cart/slotexpander.cpp",
MAME_DIR .. "src/devices/bus/msx/cart/slotexpander.h",
MAME_DIR .. "src/devices/bus/msx/cart/slotoptions.cpp",
diff --git a/src/devices/bus/msx/cart/cartridge.cpp b/src/devices/bus/msx/cart/cartridge.cpp
index 5e6143541d9..fd9b16e2e19 100644
--- a/src/devices/bus/msx/cart/cartridge.cpp
+++ b/src/devices/bus/msx/cart/cartridge.cpp
@@ -33,6 +33,7 @@
#include "quickdisk.h"
#include "ram.h"
#include "rtype.h"
+#include "scsi.h"
#include "slotexpander.h"
#include "slotoptions.h"
#include "softcard.h"
@@ -63,6 +64,7 @@ void msx_cart(device_slot_interface &device, bool is_in_subslot)
device.option_add_internal(slotoptions::FS_SR021, MSX_CART_FS_SR021);
device.option_add_internal(slotoptions::FS_SR022, MSX_CART_FS_SR022);
device.option_add_internal(slotoptions::GAMEMASTER2, MSX_CART_GAMEMASTER2);
+ device.option_add_internal(slotoptions::GOUDA_SCSI, MSX_CART_GOUDA_SCSI);
device.option_add_internal(slotoptions::HALNOTE, MSX_CART_HALNOTE);
device.option_add_internal(slotoptions::HFOX, MSX_CART_HFOX);
device.option_add_internal(slotoptions::HOLY_QURAN, MSX_CART_HOLY_QURAN);
diff --git a/src/devices/bus/msx/cart/scsi.cpp b/src/devices/bus/msx/cart/scsi.cpp
new file mode 100644
index 00000000000..4c29275a344
--- /dev/null
+++ b/src/devices/bus/msx/cart/scsi.cpp
@@ -0,0 +1,103 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#include "emu.h"
+#include "scsi.h"
+
+#include "bus/nscsi/devices.h"
+#include "machine/nscsi_bus.h"
+#include "machine/wd33c9x.h"
+
+/*
+
+Implementation of SCSI interface as it appeared in:
+- MSX Computer Club Gouda MSX-SCSI Interface
+
+
+Other known SCSI(-ish) interfaces:
+
+ASCII HD Interface (SASI Interface)
+B.E.R.T.
+ESE MegaSCSI
+- Came with SRAM on the cartridge (128/256/512/1024KB SRAM)
+HSH SCSI Interface
+MAK/Green/Sparrowsoft SCSI Interface
+MK SCSI Interface
+- Evolved into B.E.R.T. SCSI Interface.
+
+*/
+
+namespace
+{
+
+class msx_cart_gouda_scsi_device : public device_t, public msx_cart_interface
+{
+public:
+ msx_cart_gouda_scsi_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, MSX_CART_GOUDA_SCSI, tag, owner, clock)
+ , msx_cart_interface(mconfig, *this)
+ , m_wd33c93a(*this, "scsi:6:wd33c93a")
+ { }
+
+ virtual std::error_condition initialize_cartridge(std::string &message) override;
+
+protected:
+ virtual void device_start() override { }
+ virtual void device_add_mconfig(machine_config &config) override;
+
+private:
+ required_device m_wd33c93a;
+
+ void wd33c93a(device_t *device);
+ void reset_w(u8 data);
+};
+
+void msx_cart_gouda_scsi_device::wd33c93a(device_t *device)
+{
+ device->set_clock(10'000'000);
+}
+
+void msx_cart_gouda_scsi_device::device_add_mconfig(machine_config &config)
+{
+ NSCSI_BUS(config, "scsi", 0);
+ NSCSI_CONNECTOR(config, "scsi:0", default_scsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsi:1", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:2", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:3", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:4", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:5", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsi:6").option_set("wd33c93a", WD33C93A)
+ .machine_config([this] (device_t *device) { wd33c93a(device); });
+
+}
+
+std::error_condition msx_cart_gouda_scsi_device::initialize_cartridge(std::string &message)
+{
+ if (!cart_rom_region())
+ {
+ message = "msx_cart_gouda_scsi_device: Required region 'rom' was not found.";
+ return image_error::INTERNAL;
+ }
+
+ if (cart_rom_region()->bytes() < 0x4000)
+ {
+ message = "msx_cart_gouda_scsi_device: Region 'rom' has unsupported size.";
+ return image_error::INVALIDLENGTH;
+ }
+
+ page(1)->install_rom(0x4000, 0x7fff, cart_rom_region()->base());
+
+ io_space().install_write_handler(0x34, 0x35, emu::rw_delegate(*m_wd33c93a, FUNC(wd33c93a_device::indir_w)));
+ io_space().install_read_handler(0x34, 0x35, emu::rw_delegate(*m_wd33c93a, FUNC(wd33c93a_device::indir_r)));
+ io_space().install_write_handler(0x36, 0x36, emu::rw_delegate(*this, FUNC(msx_cart_gouda_scsi_device::reset_w)));
+
+ return std::error_condition();
+}
+
+void msx_cart_gouda_scsi_device::reset_w(u8 data)
+{
+ m_wd33c93a->reset_w(data);
+}
+
+} // anonymous namespace
+
+DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_GOUDA_SCSI, msx_cart_interface, msx_cart_gouda_scsi_device, "msx_cart_gouda_scsi", "MSX Computer Club Gouda MSX-SCSI Interface")
diff --git a/src/devices/bus/msx/cart/scsi.h b/src/devices/bus/msx/cart/scsi.h
new file mode 100644
index 00000000000..cd58c3cc76a
--- /dev/null
+++ b/src/devices/bus/msx/cart/scsi.h
@@ -0,0 +1,12 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol
+#ifndef MAME_BUS_MSX_CART_SCSI_H
+#define MAME_BUS_MSX_CART_SCSI_H
+
+#pragma once
+
+#include "bus/msx/slot/cartridge.h"
+
+DECLARE_DEVICE_TYPE(MSX_CART_GOUDA_SCSI, msx_cart_interface)
+
+#endif // MAME_BUS_MSX_CART_SCSI_H
diff --git a/src/devices/bus/msx/cart/slotoptions.cpp b/src/devices/bus/msx/cart/slotoptions.cpp
index e7f709ccc0c..966799b0f0d 100644
--- a/src/devices/bus/msx/cart/slotoptions.cpp
+++ b/src/devices/bus/msx/cart/slotoptions.cpp
@@ -37,6 +37,7 @@ char const *const FMPAC = "fmpac";
char const *const FS_SR021 = "fs_sr021";
char const *const FS_SR022 = "fs_sr022";
char const *const GAMEMASTER2 = "gamemaster2";
+char const *const GOUDA_SCSI = "gouda_scsi";
char const *const HALNOTE = "halnote";
char const *const HBI55 = "hbi55";
char const *const HFOX = "hfox";
diff --git a/src/devices/bus/msx/cart/slotoptions.h b/src/devices/bus/msx/cart/slotoptions.h
index a4208acf188..a676bded174 100644
--- a/src/devices/bus/msx/cart/slotoptions.h
+++ b/src/devices/bus/msx/cart/slotoptions.h
@@ -40,6 +40,7 @@ extern char const *const FMPAC;
extern char const *const FS_SR021;
extern char const *const FS_SR022;
extern char const *const GAMEMASTER2;
+extern char const *const GOUDA_SCSI;
extern char const *const HALNOTE;
extern char const *const HBI55;
extern char const *const HFOX;