diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp index a3edded323f..0777707c48e 100644 --- a/src/mame/drivers/hh_sm510.cpp +++ b/src/mame/drivers/hh_sm510.cpp @@ -1669,6 +1669,94 @@ void gnw_mario_state::gnw_mario(machine_config &config) +/*************************************************************************** + + Nintendo Game & Watch: Lifeboat (model TC-58) + * PCB labels: TC-58-M (left), TC-58-S (right) + * Sharp SM510 label TC-58 281D (no decap) + * horizontal dual lcd screens with custom segments, 1-bit sound + +***************************************************************************/ + +class gnw_lboat_state : public hh_sm510_state +{ +public: + gnw_lboat_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_sm510_state(mconfig, type, tag) + { + m_inp_lines = 2; + } + + void gnw_lboat(machine_config &config); +}; + +// config + +static INPUT_PORTS_START( gnw_lboat ) + PORT_START("IN.0") // S1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // S2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Time") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game B") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Game A") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, nullptr) PORT_NAME("Alarm") + + PORT_START("ACL") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, acl_button, nullptr) PORT_NAME("ACL") + + PORT_START("BA") // MCU BA(alpha) pin pulled to GND + PORT_CONFNAME( 0x01, 0x01, "Increase Score (Cheat)") + PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("B") // MCU B(beta) pin pulled to GND + PORT_CONFNAME( 0x01, 0x01, "Invincibility (Cheat)") + PORT_CONFSETTING( 0x01, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +void gnw_lboat_state::gnw_lboat(machine_config &config) +{ + /* basic machine hardware */ + SM510(config, m_maincpu); + m_maincpu->set_r_mask_option(2); // confirmed + m_maincpu->write_segs().set(FUNC(hh_sm510_state::sm510_lcd_segment_w)); + m_maincpu->read_k().set(FUNC(hh_sm510_state::input_r)); + m_maincpu->write_s().set(FUNC(hh_sm510_state::input_w)); + m_maincpu->write_r().set(FUNC(hh_sm510_state::piezo_r1_w)); + m_maincpu->read_ba().set_ioport("BA"); + m_maincpu->read_b().set_ioport("B"); + + /* video hardware */ + screen_device &screen_left(SCREEN(config, "screen_left", SCREEN_TYPE_SVG)); + screen_left.set_svg_region("svg_left"); + screen_left.set_refresh_hz(50); + screen_left.set_size(2116/2, 1440/2); + screen_left.set_visarea(0, 2116/2-1, 0, 1440/2-1); + + screen_device &screen_right(SCREEN(config, "screen_right", SCREEN_TYPE_SVG)); + screen_right.set_svg_region("svg_right"); + screen_right.set_refresh_hz(50); + screen_right.set_size(2057/2, 1440/2); + screen_right.set_visarea(0, 2057/2-1, 0, 1440/2-1); + + TIMER(config, "display_decay").configure_periodic(FUNC(hh_sm510_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_gnw_dualh); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + + + + + /*************************************************************************** Nintendo Game & Watch: Black Jack (model BJ-60) @@ -7363,6 +7451,18 @@ ROM_START( gnw_mario ) ROM_END +ROM_START( gnw_lboat ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "tc-58", 0x0000, 0x1000, CRC(1f88f6a2) SHA1(22fd62127dda43a0ada2fe89b0518eec8cbe2a25) ) + + ROM_REGION( 156272, "svg_left", 0) + ROM_LOAD( "gnw_lboat_left.svg", 0, 156272, CRC(1f0c18bd) SHA1(ca11c83b4b4d6a91ecb0300cff392e010064ba25) ) + + ROM_REGION( 155093, "svg_right", 0) + ROM_LOAD( "gnw_lboat_right.svg", 0, 155093, CRC(6f68780a) SHA1(63488693fbb1a8ad4d59da9e4e003eef709926f9) ) +ROM_END + + ROM_START( gnw_bjack ) ROM_REGION( 0x1000, "maincpu", 0 ) ROM_LOAD( "bj-60.program", 0x0000, 0x1000, CRC(8e74f633) SHA1(54b0f65ee716d2820a9ed9c743755d2a2d99ce4d) ) @@ -7962,6 +8062,7 @@ CONS( 1982, gnw_mickdon, 0, 0, gnw_mickdon, gnw_mickdon, gnw_mickdon_st CONS( 1982, gnw_ghouse, 0, 0, gnw_ghouse, gnw_ghouse, gnw_ghouse_state, empty_init, "Nintendo", "Game & Watch: Green House", MACHINE_SUPPORTS_SAVE ) CONS( 1983, gnw_dkong2, 0, 0, gnw_dkong2, gnw_dkong2, gnw_dkong2_state, empty_init, "Nintendo", "Game & Watch: Donkey Kong II", MACHINE_SUPPORTS_SAVE ) CONS( 1983, gnw_mario, 0, 0, gnw_mario, gnw_mario, gnw_mario_state, empty_init, "Nintendo", "Game & Watch: Mario Bros.", MACHINE_SUPPORTS_SAVE ) +CONS( 1983, gnw_lboat, 0, 0, gnw_lboat, gnw_lboat, gnw_lboat_state, empty_init, "Nintendo", "Game & Watch: Lifeboat", MACHINE_SUPPORTS_SAVE) CONS( 1985, gnw_bjack, 0, 0, gnw_bjack, gnw_bjack, gnw_bjack_state, empty_init, "Nintendo", "Game & Watch: Black Jack", MACHINE_SUPPORTS_SAVE) CONS( 1986, gnw_squish, 0, 0, gnw_squish, gnw_squish, gnw_squish_state, empty_init, "Nintendo", "Game & Watch: Squish", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 235f6c0e5e9..e97fdef1162 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15015,6 +15015,7 @@ gnw_dkong // Nintendo gnw_dkong2 // Nintendo gnw_egg // Nintendo gnw_ghouse // Nintendo +gnw_lboat // Nintendo gnw_manhole // Nintendo gnw_mario // Nintendo gnw_mariocm // Nintendo