From 4d2dfc820467a1c18fa935290b964ff50d007774 Mon Sep 17 00:00:00 2001 From: angelosa Date: Fri, 11 Jul 2025 13:54:57 +0200 Subject: sega/megadriv.cpp: fix #13941 --- src/mame/sega/mdconsole.cpp | 8 +++++++- src/mame/sega/mdconsole.h | 1 + src/mame/sega/megadriv.cpp | 7 ++++--- src/mame/sega/megadriv.h | 3 ++- src/mame/sega/segapico.cpp | 2 +- 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 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 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; -- cgit v1.2.3