summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/sms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/sms.cpp')
-rw-r--r--src/mame/drivers/sms.cpp155
1 files changed, 70 insertions, 85 deletions
diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp
index 9bee323b0ab..436e5c82351 100644
--- a/src/mame/drivers/sms.cpp
+++ b/src/mame/drivers/sms.cpp
@@ -263,15 +263,15 @@ DC00 - Selection buttons #2, 9-16 (R)
#define MASTER_CLOCK_PAL 53203425.0 /* 12 * subcarrier freq. (4.43361875MHz) */
-void sms_state::sms1_mem(address_map &map)
+void sms1_state::sms1_mem(address_map &map)
{
- map(0x0000, 0xbfff).w(FUNC(sms_state::write_cart));
- map(0x0000, 0x3fff).r(FUNC(sms_state::read_0000));
- map(0x4000, 0x7fff).r(FUNC(sms_state::read_4000));
- map(0x8000, 0xbfff).r(FUNC(sms_state::read_8000));
- map(0xc000, 0xfff7).rw(FUNC(sms_state::read_ram), FUNC(sms_state::write_ram));
- map(0xfff8, 0xfffb).rw(FUNC(sms_state::sms_sscope_r), FUNC(sms_state::sms_sscope_w)); /* 3-D glasses */
- map(0xfffc, 0xffff).rw(FUNC(sms_state::sms_mapper_r), FUNC(sms_state::sms_mapper_w)); /* Bankswitch control */
+ map(0x0000, 0xbfff).w(FUNC(sms1_state::write_cart));
+ map(0x0000, 0x3fff).r(FUNC(sms1_state::read_0000));
+ map(0x4000, 0x7fff).r(FUNC(sms1_state::read_4000));
+ map(0x8000, 0xbfff).r(FUNC(sms1_state::read_8000));
+ map(0xc000, 0xfff7).rw(FUNC(sms1_state::read_ram), FUNC(sms1_state::write_ram));
+ map(0xfff8, 0xfffb).rw(FUNC(sms1_state::sscope_r), FUNC(sms1_state::sscope_w)); /* 3-D glasses */
+ map(0xfffc, 0xffff).rw(FUNC(sms1_state::sms_mapper_r), FUNC(sms1_state::sms_mapper_w)); /* Bankswitch control */
}
void sms_state::sms_mem(address_map &map)
@@ -361,22 +361,22 @@ void sms_state::smsj_io(address_map &map)
// It seems the mirrors for I/O ports $3E/$3F also don't seem to exist on the
// Game Gear. Leaving the mirrors breaks 'gloc' (it freezes after 1st stage).
-void sms_state::gg_io(address_map &map)
+void gamegear_state::gg_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
- map(0x00, 0x00).r(FUNC(sms_state::gg_input_port_00_r));
- map(0x01, 0x05).rw(FUNC(sms_state::gg_sio_r), FUNC(sms_state::gg_sio_w));
- map(0x06, 0x06).w(FUNC(sms_state::gg_psg_stereo_w));
- map(0x3e, 0x3e).w(FUNC(sms_state::sms_mem_control_w));
- map(0x3f, 0x3f).w(FUNC(sms_state::sms_io_control_w));
- map(0x40, 0x7f).r(FUNC(sms_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w));
+ map(0x00, 0x00).r(FUNC(gamegear_state::gg_input_port_00_r));
+ map(0x01, 0x05).rw(FUNC(gamegear_state::gg_sio_r), FUNC(gamegear_state::gg_sio_w));
+ map(0x06, 0x06).w(FUNC(gamegear_state::gg_psg_stereo_w));
+ map(0x3e, 0x3e).w(FUNC(gamegear_state::sms_mem_control_w));
+ map(0x3f, 0x3f).w(FUNC(gamegear_state::sms_io_control_w));
+ map(0x40, 0x7f).r(FUNC(gamegear_state::sms_count_r)).w(m_vdp, FUNC(sega315_5124_device::psg_w));
map(0x80, 0x80).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::data_read), FUNC(sega315_5124_device::data_write));
map(0x81, 0x81).mirror(0x3e).rw(m_vdp, FUNC(sega315_5124_device::control_read), FUNC(sega315_5124_device::control_write));
- map(0xc0, 0xc0).r(FUNC(sms_state::sms_input_port_dc_r));
- map(0xc1, 0xc1).r(FUNC(sms_state::sms_input_port_dd_r));
- map(0xdc, 0xdc).r(FUNC(sms_state::sms_input_port_dc_r));
- map(0xdd, 0xdd).r(FUNC(sms_state::sms_input_port_dd_r));
+ map(0xc0, 0xc0).r(FUNC(gamegear_state::sms_input_port_dc_r));
+ map(0xc1, 0xc1).r(FUNC(gamegear_state::sms_input_port_dd_r));
+ map(0xdc, 0xdc).r(FUNC(gamegear_state::sms_input_port_dc_r));
+ map(0xdd, 0xdd).r(FUNC(gamegear_state::sms_input_port_dd_r));
}
@@ -564,7 +564,7 @@ void sms_state::screen_sms_ntsc_raw_params(screen_device &screen, X &&pixelclock
}
template <typename X>
-void sms_state::screen_gg_raw_params(screen_device &screen, X &&pixelclock)
+void gamegear_state::screen_gg_raw_params(screen_device &screen, X &&pixelclock)
{
screen.set_raw(std::forward<X>(pixelclock),
sega315_5124_device::WIDTH,
@@ -596,32 +596,29 @@ void sms_state::sms2_ntsc(machine_config &config)
}
-void sms_state::sms1_ntsc(machine_config &config)
+void sms1_state::sms1_ntsc(machine_config &config)
{
sms_ntsc_base(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
+ m_maincpu->set_addrmap(AS_PROGRAM, &sms1_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
/* video hardware */
SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER);
screen_sms_ntsc_raw_params(*m_main_scr, XTAL(10'738'635)/2);
- m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_main_scr->set_screen_update(FUNC(sms1_state::screen_update_sms));
SCREEN(config, m_left_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Left LCD
screen_sms_ntsc_raw_params(*m_left_lcd, XTAL(10'738'635)/2);
- m_left_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1_left));
+ m_left_lcd->set_screen_update(FUNC(sms1_state::screen_update_left));
SCREEN(config, m_right_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Right LCD
screen_sms_ntsc_raw_params(*m_right_lcd, XTAL(10'738'635)/2);
- m_right_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1_right));
+ m_right_lcd->set_screen_update(FUNC(sms1_state::screen_update_right));
- m_main_scr->screen_vblank().set(FUNC(sms_state::screen_vblank_sms1));
+ m_main_scr->screen_vblank().set(FUNC(sms1_state::sscope_vblank));
config.set_default_layout(layout_sms1);
- MCFG_VIDEO_START_OVERRIDE(sms_state,sms1)
- MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1)
-
SEGA315_5124(config, m_vdp, XTAL(10'738'635));
m_vdp->set_screen(m_main_scr);
m_vdp->set_is_pal(false);
@@ -690,32 +687,29 @@ void sms_state::sms2_pal(machine_config &config)
m_has_bios_full = true;
}
-void sms_state::sms1_pal(machine_config &config)
+void sms1_state::sms1_pal(machine_config &config)
{
sms_pal_base(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
+ m_maincpu->set_addrmap(AS_PROGRAM, &sms1_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
/* video hardware */
SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER);
screen_sms_pal_raw_params(*m_main_scr, MASTER_CLOCK_PAL/10);
- m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_main_scr->set_screen_update(FUNC(sms1_state::screen_update_sms));
SCREEN(config, m_left_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Left LCD
screen_sms_pal_raw_params(*m_left_lcd, MASTER_CLOCK_PAL/10);
- m_left_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_left_lcd->set_screen_update(FUNC(sms1_state::screen_update_left));
SCREEN(config, m_right_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Right LCD
screen_sms_pal_raw_params(*m_right_lcd, MASTER_CLOCK_PAL/10);
- m_right_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_right_lcd->set_screen_update(FUNC(sms1_state::screen_update_right));
- m_main_scr->screen_vblank().set(FUNC(sms_state::screen_vblank_sms1));
+ m_main_scr->screen_vblank().set(FUNC(sms1_state::sscope_vblank));
config.set_default_layout(layout_sms1);
- MCFG_VIDEO_START_OVERRIDE(sms_state,sms1)
- MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1)
-
SEGA315_5124(config, m_vdp, MASTER_CLOCK_PAL/5);
m_vdp->set_screen(m_main_scr);
m_vdp->set_is_pal(true);
@@ -762,32 +756,29 @@ void sms_state::sms3_paln(machine_config &config)
m_has_bios_full = true;
}
-void sms_state::sms1_paln(machine_config &config)
+void sms1_state::sms1_paln(machine_config &config)
{
sms_paln_base(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
+ m_maincpu->set_addrmap(AS_PROGRAM, &sms1_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
/* video hardware */
SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER);
screen_sms_pal_raw_params(*m_main_scr, MASTER_CLOCK_PALN/2);
- m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_main_scr->set_screen_update(FUNC(sms1_state::screen_update_sms));
SCREEN(config, m_left_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Left LCD
screen_sms_pal_raw_params(*m_left_lcd, MASTER_CLOCK_PALN/2);
- m_left_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_left_lcd->set_screen_update(FUNC(sms1_state::screen_update_left));
SCREEN(config, m_right_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Right LCD
screen_sms_pal_raw_params(*m_right_lcd, MASTER_CLOCK_PALN/2);
- m_right_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_right_lcd->set_screen_update(FUNC(sms1_state::screen_update_right));
- m_main_scr->screen_vblank().set(FUNC(sms_state::screen_vblank_sms1));
+ m_main_scr->screen_vblank().set(FUNC(sms1_state::sscope_vblank));
config.set_default_layout(layout_sms1);
- MCFG_VIDEO_START_OVERRIDE(sms_state,sms1)
- MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1)
-
SEGA315_5124(config, m_vdp, MASTER_CLOCK_PALN);
m_vdp->set_screen(m_main_scr);
m_vdp->set_is_pal(true);
@@ -835,33 +826,30 @@ void sms_state::sms3_br(machine_config &config)
m_has_bios_full = true;
}
-void sms_state::sms1_br(machine_config &config)
+void sms1_state::sms1_br(machine_config &config)
{
sms_br_base(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
+ m_maincpu->set_addrmap(AS_PROGRAM, &sms1_state::sms1_mem); // This adds the SegaScope handlers for 3-D glasses
/* video hardware */
// PAL-M height/width parameters are the same of NTSC screens.
SCREEN(config, m_main_scr, SCREEN_TYPE_RASTER);
screen_sms_ntsc_raw_params(*m_main_scr, MASTER_CLOCK_PALM/2);
- m_main_scr->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_main_scr->set_screen_update(FUNC(sms1_state::screen_update_sms));
SCREEN(config, m_left_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Left LCD
screen_sms_ntsc_raw_params(*m_left_lcd, MASTER_CLOCK_PALM/2);
- m_left_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_left_lcd->set_screen_update(FUNC(sms1_state::screen_update_left));
SCREEN(config, m_right_lcd, SCREEN_TYPE_LCD); // This is needed for SegaScope Right LCD
screen_sms_ntsc_raw_params(*m_right_lcd, MASTER_CLOCK_PALM/2);
- m_right_lcd->set_screen_update(FUNC(sms_state::screen_update_sms1));
+ m_right_lcd->set_screen_update(FUNC(sms1_state::screen_update_right));
- m_main_scr->screen_vblank().set(FUNC(sms_state::screen_vblank_sms1));
+ m_main_scr->screen_vblank().set(FUNC(sms1_state::sscope_vblank));
config.set_default_layout(layout_sms1);
- MCFG_VIDEO_START_OVERRIDE(sms_state,sms1)
- MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1)
-
SEGA315_5124(config, m_vdp, MASTER_CLOCK_PALM);
m_vdp->set_screen(m_main_scr);
m_vdp->set_is_pal(false); // PAL-M has same line count of NTSC
@@ -892,11 +880,11 @@ void sms_state::sms2_kr(machine_config &config)
m_has_jpn_sms_cart_slot = true;
}
-void sms_state::sms1_kr(machine_config &config)
+void sms1_state::sms1_kr(machine_config &config)
{
sms1_ntsc(config);
- m_maincpu->set_addrmap(AS_IO, &sms_state::smskr_io);
+ m_maincpu->set_addrmap(AS_IO, &sms1_state::smskr_io);
// need to replace the cartridge slot with the Japanese version, so to
// keep the usual media order, remove and reinsert all of them.
@@ -909,7 +897,7 @@ void sms_state::sms1_kr(machine_config &config)
SOFTWARE_LIST(config, "cart_list2").set_original("sg1000");
- m_vdp->n_csync().set(FUNC(sms_state::sms_n_csync_callback));
+ m_vdp->n_csync().set(FUNC(sms1_state::rapid_n_csync_callback));
m_has_bios_full = false;
m_has_bios_2000 = true;
@@ -917,11 +905,11 @@ void sms_state::sms1_kr(machine_config &config)
m_has_jpn_sms_cart_slot = true;
}
-void sms_state::smsj(machine_config &config)
+void sms1_state::smsj(machine_config &config)
{
sms1_kr(config);
- m_maincpu->set_addrmap(AS_IO, &sms_state::smsj_io);
+ m_maincpu->set_addrmap(AS_IO, &sms1_state::smsj_io);
YM2413(config, m_ym, XTAL(10'738'635)/3);
// if this output gain is changed, the gain set when unmute the output need
@@ -931,11 +919,11 @@ void sms_state::smsj(machine_config &config)
m_is_smsj = true;
}
-void sms_state::sg1000m3(machine_config &config)
+void sms1_state::sg1000m3(machine_config &config)
{
sms1_ntsc(config);
- m_maincpu->set_addrmap(AS_IO, &sms_state::sg1000m3_io);
+ m_maincpu->set_addrmap(AS_IO, &sms1_state::sg1000m3_io);
// Remove and reinsert all media slots, as done with the sms1_kr config,
// and also replace the expansion slot with the SG-1000 version.
@@ -957,22 +945,19 @@ void sms_state::sg1000m3(machine_config &config)
m_has_jpn_sms_cart_slot = true;
}
-void sms_state::gamegear(machine_config &config)
+void gamegear_state::gamegear(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK_GG/9);
- m_maincpu->set_addrmap(AS_PROGRAM, &sms_state::sms_mem);
- m_maincpu->set_addrmap(AS_IO, &sms_state::gg_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &gamegear_state::sms_mem);
+ m_maincpu->set_addrmap(AS_IO, &gamegear_state::gg_io);
config.m_minimum_quantum = attotime::from_hz(60);
/* video hardware */
SCREEN(config, m_main_scr, SCREEN_TYPE_LCD);
screen_gg_raw_params(*m_main_scr, MASTER_CLOCK_GG/6);
- m_main_scr->set_screen_update(FUNC(sms_state::screen_update_gamegear));
-
- MCFG_VIDEO_START_OVERRIDE(sms_state,gamegear)
- MCFG_VIDEO_RESET_OVERRIDE(sms_state,gamegear)
+ m_main_scr->set_screen_update(FUNC(gamegear_state::screen_update_gamegear));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
@@ -983,7 +968,7 @@ void sms_state::gamegear(machine_config &config)
m_vdp->set_screen(m_main_scr);
m_vdp->set_is_pal(false);
m_vdp->n_int().set_inputline(m_maincpu, 0);
- m_vdp->vblank().set(FUNC(sms_state::gg_pause_callback));
+ m_vdp->vblank().set(FUNC(gamegear_state::gg_pause_callback));
m_vdp->add_route(0, "lspeaker", 1.00);
m_vdp->add_route(1, "rspeaker", 1.00);
@@ -994,14 +979,14 @@ void sms_state::gamegear(machine_config &config)
GG_EXT_PORT(config, m_port_gg_ext, gg_ext_port_devices, nullptr);
m_port_gg_ext->set_screen_tag(m_main_scr);
- m_port_gg_ext->th_input_handler().set(FUNC(sms_state::gg_ext_th_input));
+ m_port_gg_ext->th_input_handler().set(FUNC(gamegear_state::gg_ext_th_input));
m_is_gamegear = true;
m_has_bios_0400 = true;
m_has_pwr_led = true;
}
-void sms_state::gamegeaj(machine_config &config)
+void gamegear_state::gamegeaj(machine_config &config)
{
gamegear(config);
m_ioctrl_region_is_japan = true;
@@ -1255,22 +1240,22 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-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( 1985, sg1000m3, sms, 0, sg1000m3, sg1000m3, sms1_state, empty_init, "Sega", "Mark III", MACHINE_SUPPORTS_SAVE )
+CONS( 1986, sms1, sms, 0, sms1_ntsc, sms1, sms1_state, empty_init, "Sega", "Master System I", MACHINE_SUPPORTS_SAVE )
+CONS( 1986, sms1pal, sms, 0, sms1_pal, sms1, sms1_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( 1987, smsj, sms, 0, smsj, smsj, sms1_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( 1989, sms1krfm, sms, 0, smsj, smsj, sms1_state, empty_init, "Samsung", "Gam*Boy I (Korea) (FM)", MACHINE_SUPPORTS_SAVE )
+CONS( 19??, sms1kr, sms, 0, sms1_kr, smsj, sms1_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( 1989, sms1br, sms, 0, sms1_br, sms1, sms1_state, empty_init, "Tec Toy", "Master System I (Brazil)", MACHINE_SUPPORTS_SAVE )
+CONS( 1991, sms2br, sms, 0, sms1_br, sms1, sms1_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??, sms1paln, sms, 0, sms1_paln, sms1, sms1_state, empty_init, "Tec Toy", "Master System I (PAL-N)", MACHINE_SUPPORTS_SAVE )
+CONS( 19??, sms2paln, sms, 0, sms1_paln, sms1, sms1_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, 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 )
+CONS( 1991, gamegear, 0, sms, gamegear, gg, gamegear_state, empty_init, "Sega", "Game Gear (Europe/America)", MACHINE_SUPPORTS_SAVE )
+CONS( 1990, gamegeaj, gamegear, 0, gamegeaj, gg, gamegear_state, empty_init, "Sega", "Game Gear (Japan)", MACHINE_SUPPORTS_SAVE )