summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/sms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/sms.cpp')
-rw-r--r--src/mame/machine/sms.cpp95
1 files changed, 47 insertions, 48 deletions
diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp
index fa1b149ee63..343863cce4a 100644
--- a/src/mame/machine/sms.cpp
+++ b/src/mame/machine/sms.cpp
@@ -72,7 +72,7 @@ WRITE_LINE_MEMBER(sms_state::sms_ctrl2_th_input)
}
-WRITE_LINE_MEMBER(sms_state::gg_ext_th_input)
+WRITE_LINE_MEMBER(gamegear_state::gg_ext_th_input)
{
if (!(m_cartslot->exists() && m_cartslot->get_sms_mode()))
return;
@@ -218,7 +218,7 @@ READ8_MEMBER(sms_state::sms_count_r)
/*
If the gamegear is in sms mode, the start button performs the pause function.
*/
-WRITE_LINE_MEMBER(sms_state::gg_pause_callback)
+WRITE_LINE_MEMBER(gamegear_state::gg_pause_callback)
{
if (!state)
{
@@ -248,7 +248,7 @@ WRITE_LINE_MEMBER(sms_state::gg_pause_callback)
}
-WRITE_LINE_MEMBER(sms_state::sms_n_csync_callback)
+WRITE_LINE_MEMBER(sms_state::rapid_n_csync_callback)
{
if (m_port_rapid.found())
{
@@ -528,7 +528,7 @@ WRITE8_MEMBER(sms_state::smsj_ym2413_data_port_w)
}
-WRITE8_MEMBER(sms_state::gg_psg_stereo_w)
+WRITE8_MEMBER(gamegear_state::gg_psg_stereo_w)
{
if (m_cartslot->exists() && m_cartslot->get_sms_mode())
return;
@@ -537,7 +537,7 @@ WRITE8_MEMBER(sms_state::gg_psg_stereo_w)
}
-READ8_MEMBER(sms_state::gg_input_port_00_r)
+READ8_MEMBER(gamegear_state::gg_input_port_00_r)
{
if (m_cartslot->exists() && m_cartslot->get_sms_mode())
return 0xff;
@@ -557,7 +557,7 @@ READ8_MEMBER(sms_state::gg_input_port_00_r)
}
-READ8_MEMBER(sms_state::sms_sscope_r)
+READ8_MEMBER(sms1_state::sscope_r)
{
int sscope = m_port_scope->read();
@@ -574,7 +574,7 @@ READ8_MEMBER(sms_state::sms_sscope_r)
}
-WRITE8_MEMBER(sms_state::sms_sscope_w)
+WRITE8_MEMBER(sms1_state::sscope_w)
{
write_ram(space, 0x3ff8 + offset, data);
@@ -829,7 +829,7 @@ WRITE8_MEMBER(sms_state::sg1000m3_peripheral_w)
}
-WRITE8_MEMBER(sms_state::gg_sio_w)
+WRITE8_MEMBER(gamegear_state::gg_sio_w)
{
if (m_cartslot->exists() && m_cartslot->get_sms_mode())
return;
@@ -857,7 +857,7 @@ WRITE8_MEMBER(sms_state::gg_sio_w)
}
-READ8_MEMBER(sms_state::gg_sio_r)
+READ8_MEMBER(gamegear_state::gg_sio_r)
{
if (m_cartslot->exists() && m_cartslot->get_sms_mode())
return 0xff;
@@ -1051,7 +1051,6 @@ void sms_state::machine_start()
m_lphaser_th_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sms_state::lphaser_th_generate),this));
- save_item(NAME(m_gg_paused));
save_item(NAME(m_mapper));
save_item(NAME(m_port_dc_reg));
save_item(NAME(m_port_dd_reg));
@@ -1083,16 +1082,6 @@ void sms_state::machine_start()
save_item(NAME(m_lphaser_x_offs));
}
- if (m_is_gamegear)
- {
- save_item(NAME(m_gg_sio));
- // The game Ecco requires SP to be initialized, so, to run on a BIOS-less Game
- // Gear, probably a custom chip like the 315-5378 does the initialization, as
- // done by the 315-5342 chip on the Power Base Converter for Sega Genesis/MD.
- // Reference: http://www.smspower.org/forums/14084-PowerBaseConverterInfo
- m_maincpu->set_state_int(Z80_SP, 0xdff0);
- }
-
if (m_cartslot)
m_cartslot->save_ram();
}
@@ -1105,6 +1094,20 @@ void smssdisp_state::machine_start()
save_item(NAME(m_store_cart_selection_data));
}
+void gamegear_state::machine_start()
+{
+ sms_state::machine_start();
+
+ save_item(NAME(m_gg_paused));
+ save_item(NAME(m_gg_sio));
+
+ // The game Ecco requires SP to be initialized, so, to run on a BIOS-less Game
+ // Gear, probably a custom chip like the 315-5378 does the initialization, as
+ // done by the 315-5342 chip on the Power Base Converter for Sega Genesis/MD.
+ // Reference: http://www.smspower.org/forums/14084-PowerBaseConverterInfo
+ m_maincpu->set_state_int(Z80_SP, 0xdff0);
+}
+
void sms_state::machine_reset()
{
if (m_is_smsj)
@@ -1133,19 +1136,6 @@ void sms_state::machine_reset()
m_ctrl2_th_state = 1;
}
- if (m_is_gamegear)
- {
- if (m_cartslot->exists() && m_cartslot->get_sms_mode())
- m_vdp->set_sega315_5124_compatibility_mode(true);
-
- /* Initialize SIO stuff for GG */
- m_gg_sio[0] = 0x7f;
- m_gg_sio[1] = 0xff;
- m_gg_sio[2] = 0x00;
- m_gg_sio[3] = 0xff;
- m_gg_sio[4] = 0x00;
- }
-
setup_bios();
setup_media_slots();
}
@@ -1159,6 +1149,21 @@ void smssdisp_state::machine_reset()
sms_state::machine_reset();
}
+void gamegear_state::machine_reset()
+{
+ if (m_cartslot->exists() && m_cartslot->get_sms_mode())
+ m_vdp->set_sega315_5124_compatibility_mode(true);
+
+ /* Initialize SIO stuff for GG */
+ m_gg_sio[0] = 0x7f;
+ m_gg_sio[1] = 0xff;
+ m_gg_sio[2] = 0x00;
+ m_gg_sio[3] = 0xff;
+ m_gg_sio[4] = 0x00;
+
+ sms_state::machine_reset();
+}
+
READ8_MEMBER(smssdisp_state::sms_store_cart_select_r)
{
return m_store_cart_selection_data;
@@ -1239,7 +1244,7 @@ WRITE_LINE_MEMBER(smssdisp_state::sms_store_int_callback)
}
-VIDEO_START_MEMBER(sms_state,sms1)
+void sms1_state::video_start()
{
m_main_scr->register_screen_bitmap(m_prevleft_bitmap);
m_main_scr->register_screen_bitmap(m_prevright_bitmap);
@@ -1253,7 +1258,7 @@ VIDEO_START_MEMBER(sms_state,sms1)
}
-VIDEO_RESET_MEMBER(sms_state,sms1)
+void sms1_state::video_reset()
{
if (m_port_scope->read())
{
@@ -1270,7 +1275,7 @@ VIDEO_RESET_MEMBER(sms_state,sms1)
}
-WRITE_LINE_MEMBER(sms_state::screen_vblank_sms1)
+WRITE_LINE_MEMBER(sms1_state::sscope_vblank)
{
// on falling edge
if (!state)
@@ -1285,13 +1290,7 @@ WRITE_LINE_MEMBER(sms_state::screen_vblank_sms1)
}
}
-uint32_t sms_state::screen_update_sms1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- m_vdp->screen_update(screen, bitmap, cliprect);
- return 0;
-}
-
-uint32_t sms_state::screen_update_sms1_left(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t sms1_state::screen_update_left(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t sscope = m_port_scope->read();
@@ -1321,7 +1320,7 @@ uint32_t sms_state::screen_update_sms1_left(screen_device &screen, bitmap_rgb32
return 0;
}
-uint32_t sms_state::screen_update_sms1_right(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t sms1_state::screen_update_right(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t sscope = m_port_scope->read();
@@ -1357,7 +1356,7 @@ uint32_t sms_state::screen_update_sms(screen_device &screen, bitmap_rgb32 &bitma
return 0;
}
-VIDEO_START_MEMBER(sms_state,gamegear)
+void gamegear_state::video_start()
{
m_prev_bitmap_copied = false;
m_main_scr->register_screen_bitmap(m_prev_bitmap);
@@ -1370,7 +1369,7 @@ VIDEO_START_MEMBER(sms_state,gamegear)
save_pointer(NAME(m_line_buffer), 160 * 4);
}
-VIDEO_RESET_MEMBER(sms_state,gamegear)
+void gamegear_state::video_reset()
{
if (m_prev_bitmap_copied)
{
@@ -1385,7 +1384,7 @@ VIDEO_RESET_MEMBER(sms_state,gamegear)
}
-void sms_state::screen_gg_sms_mode_scaling(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+void gamegear_state::screen_gg_sms_mode_scaling(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap_rgb32 &vdp_bitmap = m_vdp->get_bitmap();
const rectangle visarea = screen.visible_area();
@@ -1522,7 +1521,7 @@ void sms_state::screen_gg_sms_mode_scaling(screen_device &screen, bitmap_rgb32 &
}
-uint32_t sms_state::screen_update_gamegear(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t gamegear_state::screen_update_gamegear(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap_rgb32 *source_bitmap;