diff --git a/.gitattributes b/.gitattributes
index c7d0fe450da..3e520f99c6e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1534,6 +1534,10 @@ src/emu/bus/scv/rom.c svneol=native#text/plain
src/emu/bus/scv/rom.h svneol=native#text/plain
src/emu/bus/scv/slot.c svneol=native#text/plain
src/emu/bus/scv/slot.h svneol=native#text/plain
+src/emu/bus/sega8/ccatch.c svneol=native#text/plain
+src/emu/bus/sega8/ccatch.h svneol=native#text/plain
+src/emu/bus/sega8/mgear.c svneol=native#text/plain
+src/emu/bus/sega8/mgear.h svneol=native#text/plain
src/emu/bus/sega8/rom.c svneol=native#text/plain
src/emu/bus/sega8/rom.h svneol=native#text/plain
src/emu/bus/sega8/sega8_slot.c svneol=native#text/plain
diff --git a/hash/gamegear.xml b/hash/gamegear.xml
index 233c052955f..b99fe8e7104 100644
--- a/hash/gamegear.xml
+++ b/hash/gamegear.xml
@@ -9960,4 +9960,17 @@ a certain item) -->
+
+ Master Gear Adapter
+ 198?
+ <unknown>
+
+
+
+
+
+
+
+
+
diff --git a/src/emu/bus/bus.mak b/src/emu/bus/bus.mak
index 986adb3a0b8..60765ec9059 100644
--- a/src/emu/bus/bus.mak
+++ b/src/emu/bus/bus.mak
@@ -1143,6 +1143,8 @@ ifneq ($(filter SEGA8,$(BUSES)),)
OBJDIRS += $(BUSOBJ)/sega8
BUSOBJS += $(BUSOBJ)/sega8/sega8_slot.o
BUSOBJS += $(BUSOBJ)/sega8/rom.o
+BUSOBJS += $(BUSOBJ)/sega8/ccatch.o
+BUSOBJS += $(BUSOBJ)/sega8/mgear.o
endif
#-------------------------------------------------
diff --git a/src/emu/bus/sega8/ccatch.c b/src/emu/bus/sega8/ccatch.c
new file mode 100644
index 00000000000..3e917fa8d09
--- /dev/null
+++ b/src/emu/bus/sega8/ccatch.c
@@ -0,0 +1,61 @@
+/***********************************************************************************************************
+
+ SG-1000 Card Catcher emulation
+
+ Sega Card Catcher is a passthrough adapter for
+ SG-1000 to load games in MyCard format into the
+ main cartslot
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "ccatch.h"
+
+
+//-------------------------------------------------
+// constructors
+//-------------------------------------------------
+
+const device_type SEGA8_ROM_CARDCATCH = &device_creator;
+
+
+
+sega8_cardcatch_device::sega8_cardcatch_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : sega8_rom_device(mconfig, SEGA8_ROM_CARDCATCH, "SG-1000 Card Catcher Cart", tag, owner, clock, "sega8_ccatch", __FILE__),
+ m_card(*this, "cardslot")
+{
+}
+
+
+/*-------------------------------------------------
+ mapper specific handlers
+ -------------------------------------------------*/
+
+READ8_MEMBER(sega8_cardcatch_device::read_cart)
+{
+ if (offset < 0x8000)
+ return m_card->read_cart(space, offset);
+
+ return 0xff;
+}
+
+WRITE8_MEMBER(sega8_cardcatch_device::write_cart)
+{
+ // this should never happen, because there is no RAM on cards
+ if (offset < 0x8000)
+ logerror("Attempt to write to MyCard\n");
+}
+
+static SLOT_INTERFACE_START(sg1000_card)
+ SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD)
+SLOT_INTERFACE_END
+
+static MACHINE_CONFIG_FRAGMENT( sub_slot )
+ MCFG_SG1000_CARD_ADD("cardslot", sg1000_card, NULL)
+MACHINE_CONFIG_END
+
+machine_config_constructor sega8_cardcatch_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( sub_slot );
+}
diff --git a/src/emu/bus/sega8/ccatch.h b/src/emu/bus/sega8/ccatch.h
new file mode 100644
index 00000000000..3a632e6f6ce
--- /dev/null
+++ b/src/emu/bus/sega8/ccatch.h
@@ -0,0 +1,33 @@
+#ifndef __SEGA8_CCATCH_H
+#define __SEGA8_CCATCH_H
+
+#include "sega8_slot.h"
+#include "rom.h"
+
+// ======================> sega8_cardcatch_device
+
+class sega8_cardcatch_device : public sega8_rom_device
+{
+public:
+ // construction/destruction
+ sega8_cardcatch_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read_cart);
+ virtual DECLARE_WRITE8_MEMBER(write_cart);
+ virtual DECLARE_WRITE8_MEMBER(write_mapper) {}
+
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+protected:
+ required_device m_card;
+};
+
+
+
+
+
+// device type definition
+extern const device_type SEGA8_ROM_CARDCATCH;
+
+#endif
diff --git a/src/emu/bus/sega8/mgear.c b/src/emu/bus/sega8/mgear.c
new file mode 100644
index 00000000000..601bef6b9ec
--- /dev/null
+++ b/src/emu/bus/sega8/mgear.c
@@ -0,0 +1,44 @@
+/***********************************************************************************************************
+
+ Master Gear Adapter emulation
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "mgear.h"
+
+
+//-------------------------------------------------
+// constructors
+//-------------------------------------------------
+
+const device_type SEGA8_ROM_MGEAR = &device_creator;
+
+sega8_mgear_device::sega8_mgear_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : sega8_rom_device(mconfig, SEGA8_ROM_MGEAR, "Master Gear Adapter", tag, owner, clock, "sega8_mgear", __FILE__),
+ m_subslot(*this, "subslot")
+{
+}
+
+
+void sega8_mgear_device::device_start()
+{
+}
+
+void sega8_mgear_device::device_reset()
+{
+}
+
+/*-------------------------------------------------
+ mapper specific handlers
+ -------------------------------------------------*/
+
+static MACHINE_CONFIG_FRAGMENT( sub_slot )
+ MCFG_SMS_CARTRIDGE_ADD("subslot", sms_cart, NULL)
+MACHINE_CONFIG_END
+
+machine_config_constructor sega8_mgear_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( sub_slot );
+}
diff --git a/src/emu/bus/sega8/mgear.h b/src/emu/bus/sega8/mgear.h
new file mode 100644
index 00000000000..27672464ced
--- /dev/null
+++ b/src/emu/bus/sega8/mgear.h
@@ -0,0 +1,36 @@
+#ifndef __SEGA8_MGEAR_H
+#define __SEGA8_MGEAR_H
+
+#include "sega8_slot.h"
+#include "rom.h"
+
+
+// ======================> sega8_mgear_device
+
+class sega8_mgear_device : public sega8_rom_device
+{
+public:
+ // construction/destruction
+ sega8_mgear_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read_cart) { return m_subslot->read_cart(space, offset); }
+ virtual DECLARE_WRITE8_MEMBER(write_cart) { m_subslot->write_cart(space, offset, data); }
+ virtual DECLARE_WRITE8_MEMBER(write_mapper) { m_subslot->write_mapper(space, offset, data); }
+
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+protected:
+ required_device m_subslot;
+};
+
+
+// device type definition
+extern const device_type SEGA8_ROM_MGEAR;
+
+
+#endif
diff --git a/src/emu/bus/sega8/rom.c b/src/emu/bus/sega8/rom.c
index e2f89b3b3d2..9b222867ba3 100644
--- a/src/emu/bus/sega8/rom.c
+++ b/src/emu/bus/sega8/rom.c
@@ -20,7 +20,6 @@
const device_type SEGA8_ROM_STD = &device_creator;
// Specific SG-1000 MkI - MkII cart types
-const device_type SEGA8_ROM_CARDCATCH = &device_creator;
const device_type SEGA8_ROM_OTHELLO = &device_creator;
const device_type SEGA8_ROM_CASTLE = &device_creator;
const device_type SEGA8_ROM_BASIC_L3 = &device_creator;
@@ -56,13 +55,6 @@ sega8_rom_device::sega8_rom_device(const machine_config &mconfig, const char *ta
-sega8_cardcatch_device::sega8_cardcatch_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : sega8_rom_device(mconfig, SEGA8_ROM_CARDCATCH, "SG-1000 Card Catcher Cart", tag, owner, clock, "sega8_ccatch", __FILE__),
- m_card(*this, "cardslot")
-{
-}
-
-
sega8_othello_device::sega8_othello_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: sega8_rom_device(mconfig, SEGA8_ROM_OTHELLO, "SG-1000 Othello Cart", tag, owner, clock, "sega8_othello", __FILE__)
{
@@ -372,42 +364,6 @@ WRITE8_MEMBER(sega8_rom_device::write_mapper)
}
-/*-------------------------------------------------
-
- Sega Card Catcher is a passthrough adapter for
- SG-1000 to load games in MyCard format into the
- main cartslot
-
- -------------------------------------------------*/
-
-READ8_MEMBER(sega8_cardcatch_device::read_cart)
-{
- if (offset < 0x8000)
- return m_card->read_cart(space, offset);
-
- return 0xff;
-}
-
-WRITE8_MEMBER(sega8_cardcatch_device::write_cart)
-{
- // this should never happen, because there is no RAM on cards
- if (offset < 0x8000)
- logerror("Attempt to write to MyCard\n");
-}
-
-static SLOT_INTERFACE_START(sg1000_card)
- SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD)
-SLOT_INTERFACE_END
-
-static MACHINE_CONFIG_FRAGMENT( sub_slot )
- MCFG_SG1000_CARD_ADD("cardslot", sg1000_card, NULL)
-MACHINE_CONFIG_END
-
-machine_config_constructor sega8_cardcatch_device::device_mconfig_additions() const
-{
- return MACHINE_CONFIG_NAME( sub_slot );
-}
-
/*-------------------------------------------------
Othello is a SG-1000 game featuring 2K of
diff --git a/src/emu/bus/sega8/rom.h b/src/emu/bus/sega8/rom.h
index 79759a7d9e7..7e96ef99974 100644
--- a/src/emu/bus/sega8/rom.h
+++ b/src/emu/bus/sega8/rom.h
@@ -34,26 +34,6 @@ protected:
-// ======================> sega8_cardcatch_device
-
-class sega8_cardcatch_device : public sega8_rom_device
-{
-public:
- // construction/destruction
- sega8_cardcatch_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-
- // reading and writing
- virtual DECLARE_READ8_MEMBER(read_cart);
- virtual DECLARE_WRITE8_MEMBER(write_cart);
- virtual DECLARE_WRITE8_MEMBER(write_mapper) {}
-
- virtual machine_config_constructor device_mconfig_additions() const;
-
-protected:
- required_device m_card;
-};
-
-
// ======================> sega8_othello_device
class sega8_othello_device : public sega8_rom_device
@@ -363,7 +343,6 @@ public:
// device type definition
extern const device_type SEGA8_ROM_STD;
-extern const device_type SEGA8_ROM_CARDCATCH;
extern const device_type SEGA8_ROM_OTHELLO;
extern const device_type SEGA8_ROM_CASTLE;
extern const device_type SEGA8_ROM_BASIC_L3;
diff --git a/src/emu/bus/sega8/sega8_slot.c b/src/emu/bus/sega8/sega8_slot.c
index 7401c40e2e3..2933929081c 100644
--- a/src/emu/bus/sega8/sega8_slot.c
+++ b/src/emu/bus/sega8/sega8_slot.c
@@ -822,6 +822,8 @@ void sega8_cart_slot_device::internal_header_logging(UINT8 *ROM, UINT32 len, UIN
// slot interfaces
#include "rom.h"
+#include "ccatch.h"
+#include "mgear.h"
SLOT_INTERFACE_START(sg1000_cart)
SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD)
@@ -869,5 +871,6 @@ SLOT_INTERFACE_START(gg_cart)
SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD)
SLOT_INTERFACE_INTERNAL("eeprom", SEGA8_ROM_EEPROM)
SLOT_INTERFACE_INTERNAL("codemasters", SEGA8_ROM_CODEMASTERS)
+ SLOT_INTERFACE_INTERNAL("mgear", SEGA8_ROM_MGEAR)
SLOT_INTERFACE_END
diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c
index 3d395f9d45b..48ec3a29026 100644
--- a/src/mess/drivers/sg1000.c
+++ b/src/mess/drivers/sg1000.c
@@ -67,7 +67,6 @@ Notes:
#include "includes/sg1000.h"
#include "bus/rs232/rs232.h"
-#include "bus/sega8/rom.h"
/***************************************************************************
diff --git a/src/mess/drivers/sms.c b/src/mess/drivers/sms.c
index 44964322239..8408b66b16d 100644
--- a/src/mess/drivers/sms.c
+++ b/src/mess/drivers/sms.c
@@ -231,7 +231,6 @@ DC00 - Selection buttons #2, 9-16 (R)
#include "sound/2413intf.h"
#include "video/315_5124.h"
#include "includes/sms.h"
-#include "bus/sega8/rom.h"
#include "sms1.lh"