sms.cpp: Get rid of driver inits; hopefully fix output finder problem (nw)

This commit is contained in:
AJR 2018-05-21 02:02:42 -04:00
parent 49f354d544
commit f5b42ab403
3 changed files with 101 additions and 129 deletions

View File

@ -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 )

View File

@ -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<int[]> 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];

View File

@ -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)
{