diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp index c04d8c80250..dd7ac77bad9 100644 --- a/src/mame/drivers/sms.cpp +++ b/src/mame/drivers/sms.cpp @@ -583,6 +583,8 @@ MACHINE_CONFIG_START(sms_state::sms2_ntsc) MCFG_SEGA315_5246_IS_PAL(false) MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(*this, sms_state, sms_pause_callback)) + + m_has_bios_full = true; MACHINE_CONFIG_END @@ -621,6 +623,9 @@ MACHINE_CONFIG_START(sms_state::sms1_ntsc) // card and expansion slots, not present in Master System II MCFG_SMS_CARD_ADD("mycard", sms_cart, nullptr) MCFG_SMS_EXPANSION_ADD("smsexp", sms_expansion_devices, nullptr) + + m_has_bios_full = true; + m_has_pwr_led = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(smssdisp_state::sms_sdisp) @@ -669,6 +674,10 @@ MACHINE_CONFIG_START(smssdisp_state::sms_sdisp) MCFG_SMS_CARD_ADD("slot30", sms_cart, nullptr) MCFG_SMS_CARD_ADD("slot31", sms_cart, nullptr) MCFG_SMS_CARD_ADD("slot32", sms_cart, nullptr) + + m_has_bios_full = false; + m_is_sdisp = true; + m_has_pwr_led = false; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sms_pal_base) @@ -698,6 +707,8 @@ MACHINE_CONFIG_START(sms_state::sms2_pal) MCFG_SEGA315_5246_IS_PAL(true) MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(*this, sms_state, sms_pause_callback)) + + m_has_bios_full = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sms1_pal) @@ -735,6 +746,9 @@ MACHINE_CONFIG_START(sms_state::sms1_pal) // card and expansion slots, not present in Master System II MCFG_SMS_CARD_ADD("mycard", sms_cart, nullptr) MCFG_SMS_EXPANSION_ADD("smsexp", sms_expansion_devices, nullptr) + + m_has_bios_full = true; + m_has_pwr_led = true; MACHINE_CONFIG_END @@ -765,6 +779,8 @@ MACHINE_CONFIG_START(sms_state::sms3_paln) MCFG_SEGA315_5246_IS_PAL(true) MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(*this, sms_state, sms_pause_callback)) + + m_has_bios_full = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sms1_paln) @@ -802,6 +818,9 @@ MACHINE_CONFIG_START(sms_state::sms1_paln) // card and expansion slots, not present in Tec Toy Master System III MCFG_SMS_CARD_ADD("mycard", sms_cart, nullptr) MCFG_SMS_EXPANSION_ADD("smsexp", sms_expansion_devices, nullptr) + + m_has_bios_full = true; + m_has_pwr_led = true; MACHINE_CONFIG_END @@ -833,6 +852,8 @@ MACHINE_CONFIG_START(sms_state::sms3_br) MCFG_SEGA315_5246_IS_PAL(false) // PAL-M has same line count of NTSC MCFG_SEGA315_5246_INT_CB(INPUTLINE("maincpu", 0)) MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(*this, sms_state, sms_pause_callback)) + + m_has_bios_full = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sms1_br) @@ -871,6 +892,9 @@ MACHINE_CONFIG_START(sms_state::sms1_br) // card and expansion slots, not present in Tec Toy Master System III MCFG_SMS_CARD_ADD("mycard", sms_cart, nullptr) MCFG_SMS_EXPANSION_ADD("smsexp", sms_expansion_devices, nullptr) + + m_has_bios_full = true; + m_has_pwr_led = true; MACHINE_CONFIG_END @@ -882,6 +906,9 @@ MACHINE_CONFIG_START(sms_state::sms2_kr) MCFG_DEVICE_REMOVE("slot") MCFG_SG1000MK3_CARTRIDGE_ADD("slot", sg1000mk3_cart, nullptr) MCFG_SOFTWARE_LIST_ADD("cart_list2","sg1000") + + // Despite having a Japanese cartridge slot, this version is detected as Export region. + m_has_jpn_sms_cart_slot = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sms1_kr) @@ -902,6 +929,11 @@ MACHINE_CONFIG_START(sms_state::sms1_kr) MCFG_DEVICE_MODIFY("sms_vdp") MCFG_SEGA315_5124_CSYNC_CB(WRITELINE(*this, sms_state, sms_csync_callback)) + + m_has_bios_full = false; + m_has_bios_2000 = true; + m_ioctrl_region_is_japan = true; + m_has_jpn_sms_cart_slot = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::smsj) @@ -913,6 +945,8 @@ MACHINE_CONFIG_START(sms_state::smsj) // if this output gain is changed, the gain set when unmute the output need // to be changed too, probably along the gain set for the Mark III FM Unit. MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + + m_is_smsj = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::sg1000m3) @@ -936,6 +970,10 @@ MACHINE_CONFIG_START(sms_state::sg1000m3) MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(NOOP) MCFG_SMS_CONTROL_PORT_MODIFY(CONTROL2_TAG) MCFG_SMS_CONTROL_PORT_TH_INPUT_HANDLER(NOOP) + + m_has_bios_full = false; + m_is_mark_iii = true; + m_has_jpn_sms_cart_slot = true; MACHINE_CONFIG_END MACHINE_CONFIG_START(sms_state::gamegear) @@ -978,6 +1016,15 @@ MACHINE_CONFIG_START(sms_state::gamegear) MCFG_GG_EXT_PORT_TH_INPUT_HANDLER(WRITELINE(*this, sms_state, gg_ext_th_input)) // only for GG-TV mod (may be simulated with a driver modified with SMS screen settings) //MCFG_GG_EXT_PORT_PIXEL_HANDLER(READ32(*this, sms_state, sms_pixel_color)) + + m_is_gamegear = true; + m_has_bios_0400 = true; + m_has_pwr_led = true; +MACHINE_CONFIG_END + +MACHINE_CONFIG_START(sms_state::gamegeaj) + gamegear(config); + m_ioctrl_region_is_japan = true; MACHINE_CONFIG_END @@ -1228,22 +1275,22 @@ ROM_END ***************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1985, sg1000m3, sms, 0, sg1000m3, sg1000m3, sms_state, init_sg1000m3, "Sega", "Mark III", MACHINE_SUPPORTS_SAVE ) -CONS( 1986, sms1, sms, 0, sms1_ntsc, sms1, sms_state, init_sms1, "Sega", "Master System I", MACHINE_SUPPORTS_SAVE ) -CONS( 1986, sms1pal, sms, 0, sms1_pal, sms1, sms_state, init_sms1, "Sega", "Master System I (PAL)" , MACHINE_SUPPORTS_SAVE ) -CONS( 1986, smssdisp, sms, 0, sms_sdisp, smssdisp, smssdisp_state, init_smssdisp, "Sega", "Master System Store Display Unit", MACHINE_SUPPORTS_SAVE ) -CONS( 1987, smsj, sms, 0, smsj, smsj, sms_state, init_smsj, "Sega", "Master System (Japan)", MACHINE_SUPPORTS_SAVE ) -CONS( 1990, sms, 0, 0, sms2_ntsc, sms, sms_state, init_sms, "Sega", "Master System II", MACHINE_SUPPORTS_SAVE ) -CONS( 1990, smspal, sms, 0, sms2_pal, sms, sms_state, init_sms, "Sega", "Master System II (PAL)", MACHINE_SUPPORTS_SAVE ) -CONS( 1989, sms1krfm, sms, 0, smsj, smsj, sms_state, init_smsj, "Samsung", "Gam*Boy I (Korea) (FM)", MACHINE_SUPPORTS_SAVE ) -CONS( 19??, sms1kr, sms, 0, sms1_kr, smsj, sms_state, init_sms1kr, "Samsung", "Gam*Boy I (Korea)", MACHINE_SUPPORTS_SAVE ) -CONS( 1991, smskr, sms, 0, sms2_kr, sms, sms_state, init_smskr, "Samsung", "Gam*Boy II (Korea)", MACHINE_SUPPORTS_SAVE ) -CONS( 1989, sms1br, sms, 0, sms1_br, sms1, sms_state, init_sms1, "Tec Toy", "Master System I (Brazil)", MACHINE_SUPPORTS_SAVE ) -CONS( 1991, sms2br, sms, 0, sms1_br, sms1, sms_state, init_sms1, "Tec Toy", "Master System II (Brazil)", MACHINE_SUPPORTS_SAVE ) -CONS( 1992, smsbr, sms, 0, sms3_br, sms, sms_state, init_sms, "Tec Toy", "Master System III Compact (Brazil)", MACHINE_SUPPORTS_SAVE ) -CONS( 19??, sms1paln, sms, 0, sms1_paln, sms1, sms_state, init_sms1, "Tec Toy", "Master System I (PAL-N)", MACHINE_SUPPORTS_SAVE ) -CONS( 19??, sms2paln, sms, 0, sms1_paln, sms1, sms_state, init_sms1, "Tec Toy", "Master System II (PAL-N)", MACHINE_SUPPORTS_SAVE ) -CONS( 19??, smspaln, sms, 0, sms3_paln, sms, sms_state, init_sms, "Tec Toy", "Master System III Compact (PAL-N)", MACHINE_SUPPORTS_SAVE ) +CONS( 1985, sg1000m3, sms, 0, sg1000m3, sg1000m3, sms_state, empty_init, "Sega", "Mark III", MACHINE_SUPPORTS_SAVE ) +CONS( 1986, sms1, sms, 0, sms1_ntsc, sms1, sms_state, empty_init, "Sega", "Master System I", MACHINE_SUPPORTS_SAVE ) +CONS( 1986, sms1pal, sms, 0, sms1_pal, sms1, sms_state, empty_init, "Sega", "Master System I (PAL)" , MACHINE_SUPPORTS_SAVE ) +CONS( 1986, smssdisp, sms, 0, sms_sdisp, smssdisp, smssdisp_state, empty_init, "Sega", "Master System Store Display Unit", MACHINE_SUPPORTS_SAVE ) +CONS( 1987, smsj, sms, 0, smsj, smsj, sms_state, empty_init, "Sega", "Master System (Japan)", MACHINE_SUPPORTS_SAVE ) +CONS( 1990, sms, 0, 0, sms2_ntsc, sms, sms_state, empty_init, "Sega", "Master System II", MACHINE_SUPPORTS_SAVE ) +CONS( 1990, smspal, sms, 0, sms2_pal, sms, sms_state, empty_init, "Sega", "Master System II (PAL)", MACHINE_SUPPORTS_SAVE ) +CONS( 1989, sms1krfm, sms, 0, smsj, smsj, sms_state, empty_init, "Samsung", "Gam*Boy I (Korea) (FM)", MACHINE_SUPPORTS_SAVE ) +CONS( 19??, sms1kr, sms, 0, sms1_kr, smsj, sms_state, empty_init, "Samsung", "Gam*Boy I (Korea)", MACHINE_SUPPORTS_SAVE ) +CONS( 1991, smskr, sms, 0, sms2_kr, sms, sms_state, empty_init, "Samsung", "Gam*Boy II (Korea)", MACHINE_SUPPORTS_SAVE ) +CONS( 1989, sms1br, sms, 0, sms1_br, sms1, sms_state, empty_init, "Tec Toy", "Master System I (Brazil)", MACHINE_SUPPORTS_SAVE ) +CONS( 1991, sms2br, sms, 0, sms1_br, sms1, sms_state, empty_init, "Tec Toy", "Master System II (Brazil)", MACHINE_SUPPORTS_SAVE ) +CONS( 1992, smsbr, sms, 0, sms3_br, sms, sms_state, empty_init, "Tec Toy", "Master System III Compact (Brazil)", MACHINE_SUPPORTS_SAVE ) +CONS( 19??, sms1paln, sms, 0, sms1_paln, sms1, sms_state, empty_init, "Tec Toy", "Master System I (PAL-N)", MACHINE_SUPPORTS_SAVE ) +CONS( 19??, sms2paln, sms, 0, sms1_paln, sms1, sms_state, empty_init, "Tec Toy", "Master System II (PAL-N)", MACHINE_SUPPORTS_SAVE ) +CONS( 19??, smspaln, sms, 0, sms3_paln, sms, sms_state, empty_init, "Tec Toy", "Master System III Compact (PAL-N)", MACHINE_SUPPORTS_SAVE ) -CONS( 1991, gamegear, 0, sms, gamegear, gg, sms_state, init_gamegear, "Sega", "Game Gear (Europe/America)", MACHINE_SUPPORTS_SAVE ) -CONS( 1990, gamegeaj, gamegear, 0, gamegear, gg, sms_state, init_gamegeaj, "Sega", "Game Gear (Japan)", MACHINE_SUPPORTS_SAVE ) +CONS( 1991, gamegear, 0, sms, gamegear, gg, sms_state, empty_init, "Sega", "Game Gear (Europe/America)", MACHINE_SUPPORTS_SAVE ) +CONS( 1990, gamegeaj, gamegear, 0, gamegeaj, gg, sms_state, empty_init, "Sega", "Game Gear (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/sms.h b/src/mame/includes/sms.h index 381778ab431..502a8ed554e 100644 --- a/src/mame/includes/sms.h +++ b/src/mame/includes/sms.h @@ -58,16 +58,17 @@ public: m_led_pwr(*this, "led_pwr"), m_region_maincpu(*this, "maincpu"), m_mainram(nullptr), - m_is_gamegear(0), - m_is_smsj(0), - m_is_mark_iii(0), - m_is_sdisp(0), - m_ioctrl_region_is_japan(0), - m_has_bios_0400(0), - m_has_bios_2000(0), - m_has_bios_full(0), - m_has_jpn_sms_cart_slot(0), - m_store_cart_selection_data(0) + m_is_gamegear(false), + m_is_smsj(false), + m_is_mark_iii(false), + m_is_sdisp(false), + m_ioctrl_region_is_japan(false), + m_has_bios_0400(false), + m_has_bios_2000(false), + m_has_bios_full(false), + m_has_jpn_sms_cart_slot(false), + m_has_pwr_led(false), + m_store_cart_selection_data(false) { } void store_post_load(); @@ -109,15 +110,6 @@ public: DECLARE_WRITE_LINE_MEMBER(gg_ext_th_input); DECLARE_READ32_MEMBER(sms_pixel_color); - void init_sg1000m3(); - void init_gamegear(); - void init_gamegeaj(); - void init_sms1krfm(); - void init_sms1kr(); - void init_smskr(); - void init_smsj(); - void init_sms1(); - void init_sms(); DECLARE_VIDEO_START(gamegear); DECLARE_VIDEO_RESET(gamegear); DECLARE_VIDEO_START(sms1); @@ -140,6 +132,7 @@ public: void sms1_paln(machine_config &config); void sms1_ntsc(machine_config &config); void gamegear(machine_config &config); + void gamegeaj(machine_config &config); void sms3_paln(machine_config &config); void sms1_pal(machine_config &config); void sms2_pal(machine_config &config); @@ -210,15 +203,16 @@ protected: std::unique_ptr m_line_buffer; // model identifiers - uint8_t m_is_gamegear; - uint8_t m_is_smsj; - uint8_t m_is_mark_iii; - uint8_t m_is_sdisp; - uint8_t m_ioctrl_region_is_japan; - uint8_t m_has_bios_0400; - uint8_t m_has_bios_2000; - uint8_t m_has_bios_full; - uint8_t m_has_jpn_sms_cart_slot; + bool m_is_gamegear; + bool m_is_smsj; + bool m_is_mark_iii; + bool m_is_sdisp; + bool m_ioctrl_region_is_japan; + bool m_has_bios_0400; + bool m_has_bios_2000; + bool m_has_bios_full; + bool m_has_jpn_sms_cart_slot; + bool m_has_pwr_led; // [0] for 0x400-0x3fff, [1] for 0x4000-0x7fff, [2] for 0x8000-0xffff, [3] for 0x0000-0x0400 uint8_t m_bios_page[4]; diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp index 12e9e66596e..ecbadd784b2 100644 --- a/src/mame/machine/sms.cpp +++ b/src/mame/machine/sms.cpp @@ -295,7 +295,7 @@ WRITE_LINE_MEMBER(sms_state::sms_csync_callback) // Power LED blinks while Rapid Fire is enabled. // It switches between on/off at each 2048 C-Sync pulses. - if ((m_csync_counter & 0x7ff) == 0) + if ((m_csync_counter & 0x7ff) == 0 && m_has_pwr_led) { m_led_pwr = !m_led_pwr; } @@ -306,7 +306,8 @@ WRITE_LINE_MEMBER(sms_state::sms_csync_callback) { m_rapid_read_state = 0x00; // Power LED remains lit again - m_led_pwr = 1; + if (m_has_pwr_led) + m_led_pwr = 1; } } } @@ -999,9 +1000,9 @@ void sms_state::setup_bios() if (m_BIOS == nullptr || m_BIOS[0] == 0x00) { m_BIOS = nullptr; - m_has_bios_0400 = 0; - m_has_bios_2000 = 0; - m_has_bios_full = 0; + m_has_bios_0400 = false; + m_has_bios_2000 = false; + m_has_bios_full = false; } if (m_BIOS) @@ -1025,7 +1026,12 @@ void sms_state::setup_bios() void sms_state::machine_start() { - m_led_pwr.resolve(); + // turn on the Power LED + if (m_has_pwr_led) + { + m_led_pwr.resolve(); + m_led_pwr = 1; + } char str[7]; @@ -1134,7 +1140,8 @@ void sms_state::machine_reset() m_rapid_last_dc = 0xff; m_rapid_last_dd = 0xff; // Power LED remains lit again - m_led_pwr = 1; + if (m_has_pwr_led) + m_led_pwr = 1; } if (!m_is_mark_iii) @@ -1249,82 +1256,6 @@ WRITE_LINE_MEMBER(smssdisp_state::sms_store_int_callback) } } -void sms_state::init_sg1000m3() -{ - m_is_mark_iii = 1; - m_has_jpn_sms_cart_slot = 1; - // turn on the Power LED - m_led_pwr = 1; -} - - -void sms_state::init_sms() -{ - m_has_bios_full = 1; -} - - -void sms_state::init_sms1() -{ - m_has_bios_full = 1; - // turn on the Power LED - m_led_pwr = 1; -} - - -void sms_state::init_smsj() -{ - m_is_smsj = 1; - m_has_bios_2000 = 1; - m_ioctrl_region_is_japan = 1; - m_has_jpn_sms_cart_slot = 1; - // turn on the Power LED - m_led_pwr = 1; -} - - -void sms_state::init_sms1kr() -{ - m_has_bios_2000 = 1; - m_ioctrl_region_is_japan = 1; - m_has_jpn_sms_cart_slot = 1; - // turn on the Power LED - m_led_pwr = 1; -} - - -void sms_state::init_smskr() -{ - m_has_bios_full = 1; - // Despite having a Japanese cartridge slot, this version is detected as Export region. - m_has_jpn_sms_cart_slot = 1; -} - - -void smssdisp_state::init_smssdisp() -{ - m_is_sdisp = 1; -} - - -void sms_state::init_gamegear() -{ - m_is_gamegear = 1; - m_has_bios_0400 = 1; - // turn on the Power LED - m_led_pwr = 1; -} - - -void sms_state::init_gamegeaj() -{ - m_is_gamegear = 1; - m_has_bios_0400 = 1; - m_ioctrl_region_is_japan = 1; - // turn on the Power LED - m_led_pwr = 1; -} - VIDEO_START_MEMBER(sms_state,sms1) {