summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2025-07-11 13:54:57 +0200
committer angelosa <lordkale4@gmail.com>2025-07-11 13:55:06 +0200
commit4d2dfc820467a1c18fa935290b964ff50d007774 (patch)
treebfb1c52af6758ffde5653da90355a59c261facab
parent671b8c33d9f964e1d118910905e506a58ea1beed (diff)
sega/megadriv.cpp: fix #13941
-rw-r--r--src/mame/sega/mdconsole.cpp8
-rw-r--r--src/mame/sega/mdconsole.h1
-rw-r--r--src/mame/sega/megadriv.cpp7
-rw-r--r--src/mame/sega/megadriv.h3
-rw-r--r--src/mame/sega/segapico.cpp2
5 files changed, 15 insertions, 6 deletions
diff --git a/src/mame/sega/mdconsole.cpp b/src/mame/sega/mdconsole.cpp
index 57b90a7a18c..15c515c015f 100644
--- a/src/mame/sega/mdconsole.cpp
+++ b/src/mame/sega/mdconsole.cpp
@@ -325,6 +325,12 @@ void md_cons_state::init_genesis()
m_version_hi_nibble |= 0x20;
}
+void md_cons_state::init_genesis_tmss()
+{
+ init_genesis();
+ m_version_lo_nibble = 1;
+}
+
void md_cons_state::init_md_eur()
{
init_megadrie();
@@ -967,7 +973,7 @@ CONS( 1990, megadriv, genesis, 0, ms_megadpal, md, md_cons_s
CONS( 1988, megadrij, genesis, 0, ms_megadrivj, md, md_cons_slot_state, init_md_jpn, "Sega", "Mega Drive (Japan, NTSC)", MACHINE_SUPPORTS_SAVE )
// 1990+ models had the TMSS security chip, leave this as a clone, it reduces compatibility and nothing more.
-CONS( 1990, genesis_tmss, genesis, 0, genesis_tmss, md, md_cons_slot_state, init_genesis, "Sega", "Genesis (USA, NTSC, with TMSS chip)", MACHINE_SUPPORTS_SAVE )
+CONS( 1990, genesis_tmss, genesis, 0, genesis_tmss, md, md_cons_slot_state, init_genesis_tmss, "Sega", "Genesis (USA, NTSC, with TMSS chip)", MACHINE_SUPPORTS_SAVE )
// the 32X plugged in the cart slot, games plugged into the 32x. Maybe it should be handled as an expansion device?
CONS( 1994, 32x, 0, 0, genesis_32x, md, md_cons_state, init_genesis, "Sega", "Genesis with 32X (USA, NTSC)", MACHINE_NOT_WORKING )
diff --git a/src/mame/sega/mdconsole.h b/src/mame/sega/mdconsole.h
index 7e260ae414f..f4def6510ab 100644
--- a/src/mame/sega/mdconsole.h
+++ b/src/mame/sega/mdconsole.h
@@ -31,6 +31,7 @@ public:
void init_genesis();
void init_md_eur();
void init_md_jpn();
+ void init_genesis_tmss();
void md_32x(machine_config &config);
void genesis_32x(machine_config &config);
diff --git a/src/mame/sega/megadriv.cpp b/src/mame/sega/megadriv.cpp
index 7cc00059936..4d88199e328 100644
--- a/src/mame/sega/megadriv.cpp
+++ b/src/mame/sega/megadriv.cpp
@@ -245,9 +245,8 @@ uint16_t md_base_state::m68k_version_read()
D0 : Bit 0 of version number
*/
LOG("%s: read version register\n", machine().describe_context());
- // Version number contained in bits 3-0
- // TODO: non-TMSS BIOSes must return 0 here
- uint16_t const retdata = m_version_hi_nibble | 0x01;
+ // Version number contained in bits 3-0 (TMSS)
+ uint16_t const retdata = m_version_hi_nibble | m_version_lo_nibble;
return retdata | (retdata << 8);
}
@@ -956,6 +955,8 @@ void md_base_state::megadriv_init_common()
save_pointer(NAME(m_genz80.z80_prgram), 0x2000);
m_maincpu->set_tas_write_callback(*this, FUNC(md_base_state::megadriv_tas_callback));
+
+ m_version_lo_nibble = 0;
}
void md_base_state::init_megadriv()
diff --git a/src/mame/sega/megadriv.h b/src/mame/sega/megadriv.h
index b273170e3c6..238f8e55757 100644
--- a/src/mame/sega/megadriv.h
+++ b/src/mame/sega/megadriv.h
@@ -131,7 +131,8 @@ protected:
optional_shared_ptr<uint16_t> m_megadrive_ram;
genesis_z80_vars m_genz80;
- int m_version_hi_nibble;
+ uint8_t m_version_hi_nibble;
+ uint8_t m_version_lo_nibble; // 0 = non-TMSS, 1 = TMSS
required_device_array<megadrive_io_port_device, 3> m_ioports;
diff --git a/src/mame/sega/segapico.cpp b/src/mame/sega/segapico.cpp
index dff6f2ae139..bece9dc0fc7 100644
--- a/src/mame/sega/segapico.cpp
+++ b/src/mame/sega/segapico.cpp
@@ -158,7 +158,7 @@ protected:
required_ioport m_io_penx;
required_ioport m_io_peny;
- int m_version_hi_nibble;
+ uint8_t m_version_hi_nibble;
uint8_t m_page_register;