diff options
Diffstat (limited to 'src/mame/drivers/hh_pps41.cpp')
-rw-r--r-- | src/mame/drivers/hh_pps41.cpp | 138 |
1 files changed, 134 insertions, 4 deletions
diff --git a/src/mame/drivers/hh_pps41.cpp b/src/mame/drivers/hh_pps41.cpp index 34d425796aa..0134f12a861 100644 --- a/src/mame/drivers/hh_pps41.cpp +++ b/src/mame/drivers/hh_pps41.cpp @@ -3,7 +3,10 @@ // thanks-to:Sean Riddle, Kevin Horton /*************************************************************************** - Rockwell PPS-4/1 MCU series handhelds +Rockwell PPS-4/1 MCU series handhelds + +ROM source notes when dumped from another publisher, but confident it's the same game: +- memoquiz: Mattel Mind Boggler ***************************************************************************/ @@ -20,6 +23,7 @@ #include "speaker.h" // internal artwork +#include "dunksunk.lh" #include "ftri1.lh" #include "mastmind.lh" #include "memoquiz.lh" @@ -370,6 +374,130 @@ ROM_END /*************************************************************************** + Kmart Dunk 'n Sunk (manufactured in Hong Kong) + * MM76EL MCU (label GE-E 1V2280, die label B8617) + * 4 7seg leds, 31 other leds, 1-bit sound + + It's by the same Hong Kong company that did Kmart Dr. Dunk/Tandy Electronic + Basketball (PIC16 MCU), Grandstand Pocket Match of the Day (MOS MPS765x MCU) + among others. + + known releases: + - USA(1): Dunk 'n Sunk, published by Kmart + - USA(2): Electronic Basketball / Submarine Warfare, published by U.S. Games + +***************************************************************************/ + +class dunksunk_state : public hh_pps41_state +{ +public: + dunksunk_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_pps41_state(mconfig, type, tag) + { } + + DECLARE_INPUT_CHANGED_MEMBER(difficulty_switch) { update_int(); } + DECLARE_INPUT_CHANGED_MEMBER(game_switch) { update_int(); } + virtual void update_int() override; + + void update_display(); + void write_d(u16 data); + void write_r(u8 data); + void dunksunk(machine_config &config); +}; + +// handlers + +void dunksunk_state::update_int() +{ + // 2 of the switches are tied to MCU interrupt pins + m_maincpu->set_input_line(0, (m_inputs[1]->read() & 1) ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(1, (m_inputs[2]->read() & 1) ? ASSERT_LINE : CLEAR_LINE); +} + +void dunksunk_state::update_display() +{ + m_display->matrix(m_d >> 1, ~m_r); +} + +void dunksunk_state::write_d(u16 data) +{ + // DIO0: speaker out + m_speaker->level_w(data & 1); + + // DIO1-DIO5: led select + // DIO6-DIO9: digit select + m_d = data; + update_display(); +} + +void dunksunk_state::write_r(u8 data) +{ + // RIO1-RIO7: led data + m_r = data; + update_display(); +} + +// config + +static INPUT_PORTS_START( dunksunk ) + PORT_START("IN.0") // P + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION("IN.1", 0x03, EQUALS, 0x01) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + + PORT_START("IN.1") + PORT_CONFNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, dunksunk_state, difficulty_switch, 0) + PORT_CONFSETTING( 0x00, "1" ) // INT0 + PORT_CONFSETTING( 0x01, "2" ) // PI4 + PORT_CONFSETTING( 0x03, "3" ) + + PORT_START("IN.2") // INT1 + PORT_CONFNAME( 0x01, 0x01, "Game Select" ) PORT_CHANGED_MEMBER(DEVICE_SELF, dunksunk_state, game_switch, 0) + PORT_CONFSETTING( 0x01, "Basketball" ) + PORT_CONFSETTING( 0x00, "Submarine Chase" ) +INPUT_PORTS_END + +void dunksunk_state::dunksunk(machine_config &config) +{ + /* basic machine hardware */ + MM76EL(config, m_maincpu, 390000); // approximation - VC osc. R=56K + m_maincpu->write_d().set(FUNC(dunksunk_state::write_d)); + m_maincpu->write_r().set(FUNC(dunksunk_state::write_r)); + m_maincpu->read_p().set_ioport("IN.0"); + + /* video hardware */ + PWM_DISPLAY(config, m_display).set_size(9, 7); + m_display->set_segmask(0x1e0, 0x7f); + m_display->set_bri_levels(0.015, 0.2); // player led is brighter + config.set_default_layout(layout_dunksunk); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( dunksunk ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "ge-e_1v2280", 0x0000, 0x0400, CRC(90f17191) SHA1(80c3708af99c9db7afe17254fa4df2080aa9f145) ) + + ROM_REGION( 314, "maincpu:opla", 0 ) + ROM_LOAD( "mm76_dunksunk_output.pla", 0, 314, CRC(410fa6d7) SHA1(d46aaf1ec2c942083cba7dbd59d4261dc238d4c8) ) +ROM_END + + + + + +/*************************************************************************** + M.E.M. Belgium Memoquiz * PCB label: MEMOQUIZ MO3 * MM75 MCU (label M7505 A7505-12, die label A7505) @@ -380,7 +508,7 @@ ROM_END confirming with the "=" button. CD reveals the answer, PE is for player entry. known releases: - - Europe: Memoquiz + - Europe: Memoquiz, published by M.E.M. Belgium - UK: Memoquiz, published by Polymark - USA: Mind Boggler (model 2626), published by Mattel @@ -1004,9 +1132,11 @@ CONS( 1979, ftri1, 0, 0, ftri1, ftri1, ftri1_state, empty_in CONS( 1979, mastmind, 0, 0, mastmind, mastmind, mastmind_state, empty_init, "Invicta", "Electronic Master Mind (Invicta)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) CONS( 1979, smastmind, 0, 0, smastmind, mastmind, mastmind_state, empty_init, "Invicta", "Super-Sonic Electronic Master Mind", MACHINE_SUPPORTS_SAVE ) +CONS( 1980, dunksunk, 0, 0, dunksunk, dunksunk, dunksunk_state, empty_init, "Kmart", "Dunk 'n Sunk", MACHINE_SUPPORTS_SAVE ) + CONS( 1978, memoquiz, 0, 0, memoquiz, memoquiz, memoquiz_state, empty_init, "M.E.M. Belgium", "Memoquiz", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW ) -CONS( 1980, mwcfootb, 0, 0, mwcfootb, mwcfootb, mwcfootb_state, empty_init, "Mattel", "World Championship Football", MACHINE_SUPPORTS_SAVE ) +CONS( 1981, mwcfootb, 0, 0, mwcfootb, mwcfootb, mwcfootb_state, empty_init, "Mattel", "World Championship Football", MACHINE_SUPPORTS_SAVE ) -CONS( 1978, scrabsen, 0, 0, scrabsen, scrabsen, scrabsen_state, empty_init, "Selchow & Righter", "Scrabble Sensor - Electronic Word Game", MACHINE_SUPPORTS_SAVE ) +CONS( 1979, scrabsen, 0, 0, scrabsen, scrabsen, scrabsen_state, empty_init, "Selchow & Righter", "Scrabble Sensor - Electronic Word Game", MACHINE_SUPPORTS_SAVE ) CONS( 1980, rdqa, 0, 0, rdqa, rdqa, rdqa_state, empty_init, "Selchow & Righter", "Reader's Digest Q&A - Computer Question & Answer Game", MACHINE_SUPPORTS_SAVE ) |