summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hh_pps41.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hh_pps41.cpp')
-rw-r--r--src/mame/drivers/hh_pps41.cpp365
1 files changed, 352 insertions, 13 deletions
diff --git a/src/mame/drivers/hh_pps41.cpp b/src/mame/drivers/hh_pps41.cpp
index b2db23137b9..8b94a02faeb 100644
--- a/src/mame/drivers/hh_pps41.cpp
+++ b/src/mame/drivers/hh_pps41.cpp
@@ -24,8 +24,10 @@ ROM source notes when dumped from another publisher, but confident it's the same
#include "speaker.h"
// internal artwork
+#include "brainbaf.lh"
#include "dunksunk.lh"
#include "ftri1.lh"
+#include "horocomp.lh"
#include "mastmind.lh"
#include "memoquiz.lh"
#include "mwcfootb.lh"
@@ -51,7 +53,7 @@ public:
required_device<pps41_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
- optional_ioport_array<6> m_inputs; // max 6
+ optional_ioport_array<11> m_inputs; // max 11
u16 m_inp_mux = 0;
u32 m_grid = 0;
@@ -104,8 +106,7 @@ u8 hh_pps41_state::read_inputs(int columns)
if (m_inp_mux >> i & 1)
ret |= m_inputs[i]->read();
- // active low by default
- return ~ret;
+ return ret;
}
INPUT_CHANGED_MEMBER(hh_pps41_state::reset_button)
@@ -290,7 +291,7 @@ void mastmind_state::write_r(u16 data)
u8 mastmind_state::read_p()
{
// PI1-PI4: multiplexed inputs
- return read_inputs(4);
+ return ~read_inputs(4);
}
// config
@@ -441,7 +442,7 @@ void dunksunk_state::write_r(u16 data)
// config
static INPUT_PORTS_START( dunksunk )
- PORT_START("IN.0") // P
+ PORT_START("IN.0") // PI
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -567,7 +568,7 @@ void memoquiz_state::write_r(u16 data)
u8 memoquiz_state::read_p()
{
// PI1-PI4: multiplexed inputs
- return read_inputs(4);
+ return ~read_inputs(4);
}
// config
@@ -637,6 +638,342 @@ ROM_END
/***************************************************************************
+ Mattel Brain Baffler (model 1080)
+ * PCB label: OLYMPOS KOREA, CM04-D102-001 REV D
+ * MM78LA MCU (label MM95 B9000-12, die label B9000)
+ * 8-digit 14seg LED display, 2-bit sound
+
+ It includes 8 word games, most of them are meant for 2 players.
+
+***************************************************************************/
+
+class brainbaf_state : public hh_pps41_state
+{
+public:
+ brainbaf_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_pps41_state(mconfig, type, tag)
+ { }
+
+ void update_display();
+ void write_d(u16 data);
+ void write_r(u16 data);
+ u8 read_p();
+ void write_spk(u8 data);
+ void brainbaf(machine_config &config);
+};
+
+// handlers
+
+void brainbaf_state::update_display()
+{
+ m_display->matrix(m_inp_mux, bitswap<14>(m_r, 6,5,13,12,11,4,3,10,9,8,7,2,1,0));
+}
+
+void brainbaf_state::write_d(u16 data)
+{
+ // DIO0-DIO9: input mux
+ // DIO0-DIO7: digit select
+ m_inp_mux = data;
+ update_display();
+}
+
+void brainbaf_state::write_r(u16 data)
+{
+ // RO01-RO14: digit segment data
+ m_r = data;
+ update_display();
+}
+
+u8 brainbaf_state::read_p()
+{
+ // PI5-PI8: multiplexed inputs
+ return read_inputs(10) << 4;
+}
+
+void brainbaf_state::write_spk(u8 data)
+{
+ // SPK: speaker out
+ m_speaker->level_w(data);
+}
+
+// config
+
+static INPUT_PORTS_START( brainbaf )
+ PORT_START("IN.0") // DIO0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('J') PORT_NAME("J-0")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12) PORT_NAME("Player / Bonus R")
+
+ PORT_START("IN.1") // DIO1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('A') PORT_NAME("A-1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_NAME("Player / Bonus L")
+
+ PORT_START("IN.2") // DIO2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('B') PORT_NAME("B-2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_NAME("Game")
+
+ PORT_START("IN.3") // DIO3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('C') PORT_NAME("C-3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_NAME("Go")
+
+ PORT_START("IN.4") // DIO4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('D') PORT_NAME("D-4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) PORT_NAME("Entry")
+
+ PORT_START("IN.5") // DIO5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('E') PORT_NAME("E-5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("Clear")
+
+ PORT_START("IN.6") // DIO6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('F') PORT_NAME("F-6")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_NAME("Refresh")
+
+ PORT_START("IN.7") // DIO7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('G') PORT_NAME("G-7")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_NAME("Buy")
+
+ PORT_START("IN.8") // DIO8
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('H') PORT_NAME("H-8")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_NAME("Give-Up")
+
+ PORT_START("IN.9") // DIO9
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('I') PORT_NAME("I-9")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CODE(KEYCODE_F11) PORT_NAME("Stop") // both STOP keys
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_NAME("Score")
+INPUT_PORTS_END
+
+void brainbaf_state::brainbaf(machine_config &config)
+{
+ /* basic machine hardware */
+ MM78LA(config, m_maincpu, 440000); // approximation - VC osc. R=10K
+ m_maincpu->write_d().set(FUNC(brainbaf_state::write_d));
+ m_maincpu->write_r().set(FUNC(brainbaf_state::write_r));
+ m_maincpu->read_p().set(FUNC(brainbaf_state::read_p));
+ m_maincpu->write_spk().set(FUNC(brainbaf_state::write_spk));
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8, 14);
+ m_display->set_segmask(0xff, 0x3fff);
+ config.set_default_layout(layout_brainbaf);
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
+ m_speaker->set_levels(4, speaker_levels);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( brainbaf )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mm95_b9000-12", 0x0000, 0x0800, CRC(f7a4829c) SHA1(12f789d8264a969777764d31ea67067cc330a73c) )
+
+ ROM_REGION( 605, "maincpu:opla", 0 )
+ ROM_LOAD( "mm78la_brainbaf_output.pla", 0, 605, CRC(4fae532f) SHA1(3a08c0fa3ce476c014280b3cfeb6aa37824ae503) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
+ Mattel Horoscope Computer (model 1081)
+ * PCB label: DET. CM05-D102-001 REV D
+ * MM78LA MCU (label MM95 B9001-13, die label B9001)
+ * 8-digit 14seg LED display, 2-bit sound
+
+ This is not a toy, but a fortune forecast. Date format is mm-dd-yy, it is
+ valid only from June 1 1979 until December 31 1987
+
+***************************************************************************/
+
+class horocomp_state : public hh_pps41_state
+{
+public:
+ horocomp_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_pps41_state(mconfig, type, tag)
+ { }
+
+ void update_display();
+ void write_d(u16 data);
+ void write_r(u16 data);
+ u8 read_p();
+ void write_spk(u8 data);
+ void horocomp(machine_config &config);
+};
+
+// handlers
+
+void horocomp_state::update_display()
+{
+ // 7seg display is upside-down
+ u16 flip = m_r << 7 | m_r >> 7;
+ m_display->matrix(m_inp_mux, bitswap<14>(flip, 6,5,13,12,11,4,3,10,9,8,7,2,1,0));
+}
+
+void horocomp_state::write_d(u16 data)
+{
+ // DIO0-DIO9: input mux
+ // DIO0-DIO7: digit select
+ m_inp_mux = data;
+ update_display();
+}
+
+void horocomp_state::write_r(u16 data)
+{
+ // RO01-RO14: digit segment data
+ m_r = data;
+ update_display();
+}
+
+u8 horocomp_state::read_p()
+{
+ // PI4: mode switch
+ // PI5-PI8: multiplexed inputs
+ return read_inputs(10) << 4 | (m_inputs[10]->read() & 8);
+}
+
+void horocomp_state::write_spk(u8 data)
+{
+ // SPK: speaker out
+ m_speaker->level_w(data);
+}
+
+// config
+
+/* physical button layout and labels is like this:
+
+ CAP.
+ AQU. [ ] SAG.
+ [ ] 9 [ ]
+ PIS. 8 SCO.
+ [ ] 7[ ]
+
+ARI.[ ]0 6[ ]LIB.
+
+ [ ]1 5[ ] [ ] [ ] [ ] [ ]
+ TAU. 2 4 VIR. LOVE CAREER TRAVEL MONEY
+ [ ] 3 [ ]
+ GEM. [ ] LEO [ ] [ ] [ ] [ ]
+ CAN. FRIENDS SPIRIT FAMILY CREATIVE
+*/
+
+static INPUT_PORTS_START( horocomp )
+ PORT_START("IN.0") // DIO0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("Love")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("Friends")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0 / Aries")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1") // DIO1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Career")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Spirit")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1 / Taurus")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.2") // DIO2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Travel")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Family")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2 / Gemini")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.3") // DIO3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("Money")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Creative")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3 / Cancer")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.4") // DIO4
+ PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4 / Leo")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Aquarius / Reset")
+
+ PORT_START("IN.5") // DIO5
+ PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5 / Virgo")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("Pisces")
+
+ PORT_START("IN.6") // DIO6
+ PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6 / Libra")
+
+ PORT_START("IN.7") // DIO7
+ PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7 / Scorpio")
+
+ PORT_START("IN.8") // DIO8
+ PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8 / Sagittarius")
+
+ PORT_START("IN.9") // DIO9
+ PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9 / Capricorn")
+
+ PORT_START("IN.10") // PI4
+ PORT_CONFNAME( 0x08, 0x00, "Mode" )
+ PORT_CONFSETTING( 0x08, "C" ) // compatibility
+ PORT_CONFSETTING( 0x00, "P" ) // personal
+INPUT_PORTS_END
+
+void horocomp_state::horocomp(machine_config &config)
+{
+ /* basic machine hardware */
+ MM78LA(config, m_maincpu, 440000); // approximation - VC osc. R=10K
+ m_maincpu->write_d().set(FUNC(horocomp_state::write_d));
+ m_maincpu->write_r().set(FUNC(horocomp_state::write_r));
+ m_maincpu->read_p().set(FUNC(horocomp_state::read_p));
+ m_maincpu->write_spk().set(FUNC(horocomp_state::write_spk));
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8, 14);
+ m_display->set_segmask(0xff, 0x3fff);
+ config.set_default_layout(layout_horocomp);
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker);
+ static const double speaker_levels[4] = { 0.0, 1.0, -1.0, 0.0 };
+ m_speaker->set_levels(4, speaker_levels);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( horocomp )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mm95_b9001-13", 0x0000, 0x0800, CRC(d284a837) SHA1(02092db2a29b4bb7e9f86286601b67b2e9556476) )
+
+ ROM_REGION( 605, "maincpu:opla", 0 )
+ ROM_LOAD( "mm78la_horocomp_output.pla", 0, 605, CRC(4fae532f) SHA1(3a08c0fa3ce476c014280b3cfeb6aa37824ae503) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Mattel World Championship Football (model 3202)
* MM78L MCU (label MM78 A78C6-12, die label A78C6)
* MM78L MCU (label MM78 A78C7-12, die label A78C7)
@@ -709,7 +1046,7 @@ void mwcfootb_state::main_write_r(u16 data)
u8 mwcfootb_state::main_read_p()
{
// PI1-PI8: multiplexed inputs
- return read_inputs(3);
+ return ~read_inputs(3);
}
// subcpu side
@@ -895,7 +1232,7 @@ void scrabsen_state::write_r(u16 data)
u8 scrabsen_state::read_p()
{
// PI1-PI7: multiplexed inputs
- return read_inputs(5);
+ return ~read_inputs(5);
}
// config
@@ -988,7 +1325,7 @@ ROM_END
Selchow & Righter Reader's Digest Q&A
* MM76EL MCU (label MM76EL B8654-11, die label B8654)
- * 9-digit 7seg display(4 unused), 2-bit sound
+ * 9-digit 7seg LED display(4 unused), 2-bit sound
The game requires question books. The player inputs a 3-digit code and
answers 20 multiple-choice questions from the page.
@@ -1046,7 +1383,7 @@ void rdqa_state::write_r(u16 data)
u8 rdqa_state::read_p()
{
// PI1-PI5: multiplexed inputs
- return read_inputs(4);
+ return ~read_inputs(4);
}
// config
@@ -1133,11 +1470,13 @@ 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( 1979, 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( 1981, mwcfootb, 0, 0, mwcfootb, mwcfootb, mwcfootb_state, empty_init, "Mattel", "World Championship Football", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, brainbaf, 0, 0, brainbaf, brainbaf, brainbaf_state, empty_init, "Mattel", "Brain Baffler", MACHINE_SUPPORTS_SAVE )
+CONS( 1979, horocomp, 0, 0, horocomp, horocomp, horocomp_state, empty_init, "Mattel", "Horoscope Computer", MACHINE_SUPPORTS_SAVE )
+CONS( 1980, mwcfootb, 0, 0, mwcfootb, mwcfootb, mwcfootb_state, empty_init, "Mattel", "World Championship Football", 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( 1978, 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 )