summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/sega8/sega8_slot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/sega8/sega8_slot.cpp')
-rw-r--r--src/devices/bus/sega8/sega8_slot.cpp91
1 files changed, 85 insertions, 6 deletions
diff --git a/src/devices/bus/sega8/sega8_slot.cpp b/src/devices/bus/sega8/sega8_slot.cpp
index 3242654b829..e897f6c53e8 100644
--- a/src/devices/bus/sega8/sega8_slot.cpp
+++ b/src/devices/bus/sega8/sega8_slot.cpp
@@ -40,6 +40,16 @@
DEFINE_DEVICE_TYPE(SEGA8_CART_SLOT, sega8_cart_slot_device, "sega8_cart_slot", "Sega Master System / Game Gear / SG-1000 Cartridge Slot")
DEFINE_DEVICE_TYPE(SEGA8_CARD_SLOT, sega8_card_slot_device, "sega8_card_slot", "Sega Master System / Game Gear / SG-1000 Card Slot")
+DEFINE_DEVICE_TYPE(SG1000_CART_SLOT, sg1000_cart_slot_device, "sg1000_cart_slot", "Sega SG-1000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(OMV_CART_SLOT, omv_cart_slot_device, "omv_cart_slot", "Tsukuda Original Othello Multivision FG-1000 / FG-2000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(SC3000_CART_SLOT, sc3000_cart_slot_device, "sc3000_cart_slot", "Sega SC-3000 Cartridge Slot")
+DEFINE_DEVICE_TYPE(SG1000MK3_CART_SLOT, sg1000mk3_cart_slot_device, "sg1000mk3_cart_slot", "Sega SG-1000 Mark III Cartridge Slot")
+DEFINE_DEVICE_TYPE(SMS_CART_SLOT, sms_cart_slot_device, "sms_cart_slot", "Sega Master System Cartridge Slot")
+DEFINE_DEVICE_TYPE(GAMEGEAR_CART_SLOT, gamegear_cart_slot_device, "gamegear_cart_slot", "Sega Game Gear Cartridge Slot")
+
+DEFINE_DEVICE_TYPE(SMS_CARD_SLOT, sms_card_slot_device, "sms_card_slot", "Sega Master System Card Slot")
+DEFINE_DEVICE_TYPE(SG1000_CARD_SLOT, sg1000_card_slot_device, "sg1000_card_slot", "Sega SG-1000 Card Slot")
+
//**************************************************************************
// SMS cartridges Interface
@@ -112,10 +122,7 @@ sega8_cart_slot_device::sega8_cart_slot_device(const machine_config &mconfig, de
, device_image_interface(mconfig, *this)
, device_slot_interface(mconfig, *this)
, m_type(SEGA8_BASE_ROM)
- , m_must_be_loaded(false)
, m_is_card(is_card)
- , m_interface("sms_cart")
- , m_extensions("bin")
, m_cart(nullptr)
{
}
@@ -125,11 +132,57 @@ sega8_cart_slot_device::sega8_cart_slot_device(const machine_config &mconfig, co
{
}
+sega8_card_slot_device::sega8_card_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, type, tag, owner, clock, true)
+{
+}
+
sega8_card_slot_device::sega8_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : sega8_cart_slot_device(mconfig, SEGA8_CARD_SLOT, tag, owner, clock, true)
+ : sega8_card_slot_device(mconfig, SEGA8_CARD_SLOT, tag, owner, clock)
+{
+}
+
+
+sg1000_cart_slot_device::sg1000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SG1000_CART_SLOT, tag, owner, clock)
+{
+}
+
+omv_cart_slot_device::omv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, OMV_CART_SLOT, tag, owner, clock)
+{
+}
+
+sc3000_cart_slot_device::sc3000_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SC3000_CART_SLOT, tag, owner, clock)
+{
+}
+
+sg1000mk3_cart_slot_device::sg1000mk3_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SG1000MK3_CART_SLOT, tag, owner, clock)
+{
+}
+
+sms_cart_slot_device::sms_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, SMS_CART_SLOT, tag, owner, clock)
{
}
+gamegear_cart_slot_device::gamegear_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_cart_slot_device(mconfig, GAMEGEAR_CART_SLOT, tag, owner, clock)
+{
+}
+
+
+sms_card_slot_device::sms_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_card_slot_device(mconfig, SMS_CARD_SLOT, tag, owner, clock)
+{
+}
+
+sg1000_card_slot_device::sg1000_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : sega8_card_slot_device(mconfig, SG1000_CARD_SLOT, tag, owner, clock)
+{
+}
//-------------------------------------------------
// sega8_cart_slot_device - destructor
@@ -178,7 +231,9 @@ static const sega8_slot slot_list[] =
{ SEGA8_MUSIC_EDITOR, "music_editor" },
{ SEGA8_DAHJEE_TYPEA, "dahjee_typea" },
{ SEGA8_DAHJEE_TYPEB, "dahjee_typeb" },
- { SEGA8_SEOJIN, "seojin" }
+ { SEGA8_SEOJIN, "seojin" },
+ { SEGA8_MULTICART, "multicart" },
+ { SEGA8_MEGACART, "megacart" }
};
static int sega8_get_pcb_id(const char *slot)
@@ -277,7 +332,7 @@ void sega8_cart_slot_device::setup_ram()
m_cart->ram_alloc(0x800);
m_cart->set_has_battery(false);
}
- else if (m_type == SEGA8_BASIC_L3)
+ else if (m_type == SEGA8_BASIC_L3 || m_type == SEGA8_MULTICART || m_type == SEGA8_MEGACART)
{
m_cart->ram_alloc(0x8000);
m_cart->set_has_battery(false);
@@ -584,6 +639,14 @@ int sega8_cart_slot_device::get_cart_type(const uint8_t *ROM, uint32_t len) cons
type = SEGA8_MUSIC_EDITOR;
}
+ // SC-3000 Survivors Multicart
+ if (len == 0x200000)
+ type = SEGA8_MULTICART;
+
+ // SC-3000 Survivors Megacart
+ if (len == 0x400000)
+ type = SEGA8_MEGACART;
+
return type;
}
@@ -638,6 +701,14 @@ READ8_MEMBER(sega8_cart_slot_device::read_ram)
return 0xff;
}
+READ8_MEMBER(sega8_cart_slot_device::read_io)
+{
+ if (m_cart)
+ return m_cart->read_io(space, offset);
+ else
+ return 0xff;
+}
+
/*-------------------------------------------------
write
@@ -661,6 +732,12 @@ WRITE8_MEMBER(sega8_cart_slot_device::write_ram)
m_cart->write_ram(space, offset, data);
}
+WRITE8_MEMBER(sega8_cart_slot_device::write_io)
+{
+ if (m_cart)
+ m_cart->write_io(space, offset, data);
+}
+
/*-------------------------------------------------
Internal header logging
@@ -817,6 +894,8 @@ void sg1000_cart(device_slot_interface &device)
device.option_add_internal("dahjee_typea", SEGA8_ROM_DAHJEE_TYPEA);
device.option_add_internal("dahjee_typeb", SEGA8_ROM_DAHJEE_TYPEB);
device.option_add_internal("cardcatcher", SEGA8_ROM_CARDCATCH);
+ device.option_add_internal("multicart", SEGA8_ROM_MULTICART);
+ device.option_add_internal("megacart", SEGA8_ROM_MEGACART);
}
void sg1000mk3_cart(device_slot_interface &device)