diff --git a/hash/sg1000.xml b/hash/sg1000.xml index 54deebb1ba3..6e33ea9e999 100644 --- a/hash/sg1000.xml +++ b/hash/sg1000.xml @@ -1385,6 +1385,8 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A + + @@ -1461,9 +1463,12 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A + + + @@ -1695,9 +1700,12 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A + + + @@ -1708,9 +1716,12 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A + + + @@ -2410,6 +2421,7 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A + @@ -2601,9 +2613,12 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A 1987 Abstract Software + + + @@ -2612,9 +2627,12 @@ A135 : 森林歷險記 / Sēnlín lìxiǎn jì -> Pitfall II (same as R-049 by A 1985 Sega + + + diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c index b336729507c..dbfdd08689a 100644 --- a/src/mess/drivers/sg1000.c +++ b/src/mess/drivers/sg1000.c @@ -781,6 +781,7 @@ void sf7000_state::machine_reset() static SLOT_INTERFACE_START(sg1000_cart) SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD) + SLOT_INTERFACE_INTERNAL("othello", SEGA8_ROM_OTHELLO) SLOT_INTERFACE_INTERNAL("castle", SEGA8_ROM_CASTLE) SLOT_INTERFACE_INTERNAL("terebi", SEGA8_ROM_TEREBI) SLOT_INTERFACE_INTERNAL("level3", SEGA8_ROM_BASIC_L3) diff --git a/src/mess/drivers/sms.c b/src/mess/drivers/sms.c index a79a855aef4..abef61272f9 100644 --- a/src/mess/drivers/sms.c +++ b/src/mess/drivers/sms.c @@ -560,6 +560,7 @@ static SLOT_INTERFACE_START(sg1000mk3_cart) SLOT_INTERFACE_INTERNAL("janggun", SEGA8_ROM_JANGGUN) SLOT_INTERFACE_INTERNAL("korean", SEGA8_ROM_KOREAN) SLOT_INTERFACE_INTERNAL("korean_nb", SEGA8_ROM_KOREAN_NB) + SLOT_INTERFACE_INTERNAL("othello", SEGA8_ROM_OTHELLO) SLOT_INTERFACE_INTERNAL("castle", SEGA8_ROM_CASTLE) SLOT_INTERFACE_INTERNAL("dahjee_typea", SEGA8_ROM_DAHJEE_TYPEA) SLOT_INTERFACE_INTERNAL("dahjee_typeb", SEGA8_ROM_DAHJEE_TYPEB) diff --git a/src/mess/machine/sega8_rom.c b/src/mess/machine/sega8_rom.c index 82402bc1110..5b2698f85af 100644 --- a/src/mess/machine/sega8_rom.c +++ b/src/mess/machine/sega8_rom.c @@ -21,6 +21,7 @@ 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; const device_type SEGA8_ROM_MUSIC_EDITOR = &device_creator; @@ -62,6 +63,12 @@ sega8_cardcatch_device::sega8_cardcatch_device(const machine_config &mconfig, co } +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__) +{ +} + + sega8_castle_device::sega8_castle_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : sega8_rom_device(mconfig, SEGA8_ROM_CASTLE, "SG-1000 The Castle Cart", tag, owner, clock, "sega8_castle", __FILE__) { @@ -401,6 +408,31 @@ machine_config_constructor sega8_cardcatch_device::device_mconfig_additions() co return MACHINE_CONFIG_NAME( sub_slot ); } +/*------------------------------------------------- + + Othello is a SG-1000 game featuring 2K of + oncart RAM, mapped at 0x8000-0x9fff. + Is RAM mirrored? For now we assume so... + + -------------------------------------------------*/ + +READ8_MEMBER(sega8_othello_device::read_cart) +{ + // 8K of RAM sits in 0x8000-0x9fff + if (offset >= 0x8000 && offset < 0xa000) + return m_ram[offset & 0x7ff]; + + return m_rom[offset % m_rom_size]; +} + +WRITE8_MEMBER(sega8_othello_device::write_cart) +{ + // 2K of RAM sits in 0x8000-0x9fff + if (offset >= 0x8000 && offset < 0xa000) + m_ram[offset & 0x7ff] = data; +} + + /*------------------------------------------------- The Castle is a SG-1000 game featuring 8K of diff --git a/src/mess/machine/sega8_rom.h b/src/mess/machine/sega8_rom.h index 1d8be4f0db4..1c78a20788f 100644 --- a/src/mess/machine/sega8_rom.h +++ b/src/mess/machine/sega8_rom.h @@ -54,6 +54,21 @@ protected: }; +// ======================> sega8_othello_device + +class sega8_othello_device : public sega8_rom_device +{ +public: + // construction/destruction + sega8_othello_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) {} +}; + + // ======================> sega8_castle_device class sega8_castle_device : public sega8_rom_device @@ -348,6 +363,7 @@ 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; extern const device_type SEGA8_ROM_MUSIC_EDITOR; diff --git a/src/mess/machine/sega8_slot.c b/src/mess/machine/sega8_slot.c index 673ec44579c..31d8245d966 100644 --- a/src/mess/machine/sega8_slot.c +++ b/src/mess/machine/sega8_slot.c @@ -183,6 +183,7 @@ static const sega8_slot slot_list[] = { SEGA8_JANGGUN, "janggun" }, { SEGA8_KOREAN, "korean" }, { SEGA8_KOREAN_NOBANK, "korean_nb" }, + { SEGA8_OTHELLO, "othello" }, { SEGA8_CASTLE, "castle" }, { SEGA8_BASIC_L3, "level3" }, { SEGA8_MUSIC_EDITOR, "music_editor" }, @@ -282,6 +283,11 @@ void sega8_cart_slot_device::setup_ram() m_cart->ram_alloc(machine(), 0x2000); m_cart->set_has_battery(FALSE); } + else if (m_type == SEGA8_OTHELLO) + { + m_cart->ram_alloc(machine(), 0x800); + m_cart->set_has_battery(FALSE); + } else if (m_type == SEGA8_BASIC_L3) { m_cart->ram_alloc(machine(), 0x8000); diff --git a/src/mess/machine/sega8_slot.h b/src/mess/machine/sega8_slot.h index e88b0976ea0..23d54af0f21 100644 --- a/src/mess/machine/sega8_slot.h +++ b/src/mess/machine/sega8_slot.h @@ -19,6 +19,7 @@ enum SEGA8_JANGGUN, SEGA8_KOREAN, SEGA8_KOREAN_NOBANK, + SEGA8_OTHELLO, SEGA8_CASTLE, SEGA8_BASIC_L3, SEGA8_MUSIC_EDITOR,