summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2017-12-30 21:42:57 +0100
committer hap <happppp@users.noreply.github.com>2017-12-30 21:43:18 +0100
commitd27de747d3ec88fe0b47a773cde211d7e7c67f5a (patch)
treea9a1c28005d9383c4a3e059898f2d88fadfcc337 /src/mame
parent4e4cd1bf04bd723707303818108fc1c427f352aa (diff)
New working machines
----------- Alphie - The Electronic Robot (patent) [hap]
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/hh_sm510.cpp6
-rw-r--r--src/mame/drivers/hh_tms1k.cpp136
-rw-r--r--src/mame/layout/alphie.lay53
-rw-r--r--src/mame/mame.lst1
4 files changed, 193 insertions, 3 deletions
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 56db31c249a..0c9296f5339 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -3498,7 +3498,7 @@ MACHINE_CONFIG_END
/***************************************************************************
VTech Electronic Number Muncher
- * Sharp SM511 under epoxy (die label ?)
+ * Sharp SM511 under epoxy (die label 772)
* lcd screen with custom segments, 1-bit sound
***************************************************************************/
@@ -4020,10 +4020,10 @@ ROM_END
ROM_START( nummunch )
ROM_REGION( 0x1000, "maincpu", 0 )
- ROM_LOAD( "nummunch.program", 0x0000, 0x1000, CRC(2f7ff516) SHA1(132e7c5c4d69170953b2e51731992d6d6ba829f9) )
+ ROM_LOAD( "772.program", 0x0000, 0x1000, CRC(2f7ff516) SHA1(132e7c5c4d69170953b2e51731992d6d6ba829f9) )
ROM_REGION( 0x100, "maincpu:melody", 0 )
- ROM_LOAD( "nummunch.melody", 0x000, 0x100, CRC(96fe463a) SHA1(dcef5eee15a3f6d21e0db1b8ae3fbddc81633fc8) )
+ ROM_LOAD( "772.melody", 0x000, 0x100, CRC(96fe463a) SHA1(dcef5eee15a3f6d21e0db1b8ae3fbddc81633fc8) )
ROM_REGION( 140664, "svg", 0)
ROM_LOAD( "nummunch.svg", 0, 140664, CRC(879df7e2) SHA1(78d8500a445cbbea0090d4e97b781c1e4ed11dd3) )
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index a3d9bb19aea..9f36de6f056 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -158,6 +158,7 @@
// internal artwork
#include "7in1ss.lh"
+#include "alphie.lh"
#include "amaztron.lh" // clickable
#include "arcmania.lh" // clickable
#include "arrball.lh"
@@ -7527,6 +7528,128 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Playskool Alphie
+ * TMS1000 (label not known yet)
+ * 5 LEDs, 1-bit sound
+
+ This is an educational toy robot for young kids. It has 2 sliding arms:
+ the left arm(Alphie's right arm) is for questions, the other for answers.
+ Cardboard inlays are used for arm position labels.
+
+ There are 4 play modes:
+ - S symbol: Alphie answers questions. The answers are always the same,
+ no matter the inlay: Q1=A3, Q2=A5, Q3=A4, Q4=A1, Q5=A2.
+ - * symbol: used with Lunar Landing board game
+ - X symbol: used with Robot Land board game
+ - music note: play a selection of 5 tunes
+
+***************************************************************************/
+
+class alphie_state : public hh_tms1k_state
+{
+public:
+ alphie_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_tms1k_state(mconfig, type, tag)
+ { }
+
+ TIMER_DEVICE_CALLBACK_MEMBER(show_arm_position);
+
+ DECLARE_WRITE16_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_READ8_MEMBER(read_k);
+};
+
+// handlers
+
+TIMER_DEVICE_CALLBACK_MEMBER(alphie_state::show_arm_position)
+{
+ // arm position 1(up) to 5(down)
+ output().set_value("q_pos", 32 - count_leading_zeros(m_inp_matrix[1]->read()));
+ output().set_value("a_pos", 32 - count_leading_zeros(m_inp_matrix[2]->read()));
+}
+
+WRITE16_MEMBER(alphie_state::write_r)
+{
+ // R1-R5, input mux (using d5 for Vss)
+ m_inp_mux = (data >> 1 & 0x1f) | 0x20;
+
+ // R6-R10: leds
+ display_matrix(5, 1, data >> 6, 1);
+
+ // R0: power off on falling edge (turn back on with button)
+ if (~data & m_r & 1)
+ power_off();
+
+ m_r = data;
+}
+
+WRITE16_MEMBER(alphie_state::write_o)
+{
+ // O?: speaker out
+ m_speaker->level_w(data & 1);
+}
+
+READ8_MEMBER(alphie_state::read_k)
+{
+ // K: multiplexed inputs, rotated matrix
+ return read_rotated_inputs(6);
+}
+
+
+// config
+
+static const ioport_value alphie_armpos_table[5] = { 0x01, 0x02, 0x04, 0x08, 0x10 };
+
+static INPUT_PORTS_START( alphie )
+ PORT_START("IN.0") // K1
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true)
+
+ PORT_START("IN.1") // K2
+ PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_PLAYER(2) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Question Arm")
+
+ PORT_START("IN.2") // K4
+ PORT_BIT( 0x1f, 0x00, IPT_POSITIONAL_V ) PORT_POSITIONS(5) PORT_REMAP_TABLE(alphie_armpos_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Answer Arm")
+
+ PORT_START("IN.3") // K8
+ PORT_CONFNAME( 0x0f, 0x01, "Activity" )
+ PORT_CONFSETTING( 0x01, "Questions" )
+ PORT_CONFSETTING( 0x02, "Lunar Landing" )
+ PORT_CONFSETTING( 0x04, "Robot Land" )
+ PORT_CONFSETTING( 0x08, "Tunes" )
+INPUT_PORTS_END
+
+// output PLA is guessed
+static const u16 alphie_output_pla[0x20] =
+{
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1
+};
+
+static MACHINE_CONFIG_START( alphie )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1000, 350000) // approximation
+ MCFG_TMS1XXX_OUTPUT_PLA(alphie_output_pla)
+ MCFG_TMS1XXX_READ_K_CB(READ8(alphie_state, read_k))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(alphie_state, write_r))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(alphie_state, write_o))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("arm_position", alphie_state, show_arm_position, attotime::from_msec(50))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_alphie)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
+/***************************************************************************
+
Tandy Radio Shack Championship Football (model 60-2150)
* PCB label CYG-316
* TMS1100NLL MP1193 (die label 1100B, MP1193)
@@ -9776,6 +9899,17 @@ ROM_START( lostreas )
ROM_END
+ROM_START( alphie )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "us4280809", 0x0000, 0x0400, CRC(f8f14013) SHA1(bf31b929fcbcb189bbe4623104e1da0a639b5954) ) // from patent US4280809, should be good
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, BAD_DUMP CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) ) // not in patent description
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1000_alphie_output.pla", 0, 365, NO_DUMP ) // "
+ROM_END
+
+
ROM_START( tcfball )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "mp1193", 0x0000, 0x0800, CRC(7d9f446f) SHA1(bb6af47b42d989494f21475a73f072cddf58c99f) )
@@ -9994,6 +10128,8 @@ CONS( 1980, splitsec, 0, 0, splitsec, splitsec, splitsec_state, 0,
CONS( 1982, mmerlin, 0, 0, mmerlin, mmerlin, mmerlin_state, 0, "Parker Brothers", "Master Merlin", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1982, lostreas, 0, 0, lostreas, lostreas, lostreas_state, 0, "Parker Brothers", "Lost Treasure - The Electronic Deep-Sea Diving Game (Electronic Dive-Control Center)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
+CONS( 1978, alphie, 0, 0, alphie, alphie, alphie_state, 0, "Playskool", "Alphie - The Electronic Robot (patent)", MACHINE_SUPPORTS_SAVE ) // ***
+
CONS( 1980, tcfball, 0, 0, tcfball, tcfball, tcfball_state, 0, "Tandy Radio Shack", "Championship Football (model 60-2150)", MACHINE_SUPPORTS_SAVE )
CONS( 1980, tcfballa, tcfball, 0, tcfballa, tcfballa, tcfballa_state, 0, "Tandy Radio Shack", "Championship Football (model 60-2151)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, tandy12, 0, 0, tandy12, tandy12, tandy12_state, 0, "Tandy Radio Shack", "Tandy-12: Computerized Arcade", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // some of the minigames: ***
diff --git a/src/mame/layout/alphie.lay b/src/mame/layout/alphie.lay
new file mode 100644
index 00000000000..259af608f92
--- /dev/null
+++ b/src/mame/layout/alphie.lay
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_gray"><rect><color red="0.13" green="0.13" blue="0.13" /></rect></element>
+
+ <element name="led" defstate="0">
+ <disk state="0"><color red="0.15" green="0.03" blue="0.035" /></disk>
+ <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
+ </element>
+
+ <element name="text_1"><text string="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_5"><text string="5"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_q"><text string="Question:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+ <element name="text_a"><text string="Answer:" align="1"><color red="0.75" green="0.75" blue="0.75" /></text></element>
+
+ <element name="counter" defstate="1">
+ <simplecounter maxstate="9" digits="1">
+ <color red="0.95" green="0.95" blue="0.95" />
+ </simplecounter>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-1.5" right="17.5" top="-0.5" bottom="14.5" />
+
+ <bezel name="0.0" element="led"><bounds x="2" y="0" width="2" height="2" /></bezel>
+ <bezel name="0.1" element="led"><bounds x="2" y="3" width="2" height="2" /></bezel>
+ <bezel name="0.2" element="led"><bounds x="2" y="6" width="2" height="2" /></bezel>
+ <bezel name="0.3" element="led"><bounds x="2" y="9" width="2" height="2" /></bezel>
+ <bezel name="0.4" element="led"><bounds x="2" y="12" width="2" height="2" /></bezel>
+
+ <bezel element="text_1"><bounds x="-1" y="0" width="2" height="2" /></bezel>
+ <bezel element="text_2"><bounds x="-1" y="3" width="2" height="2" /></bezel>
+ <bezel element="text_3"><bounds x="-1" y="6" width="2" height="2" /></bezel>
+ <bezel element="text_4"><bounds x="-1" y="9" width="2" height="2" /></bezel>
+ <bezel element="text_5"><bounds x="-1" y="12" width="2" height="2" /></bezel>
+
+ <bezel element="static_gray"><bounds x="6" y="0.5" width="0.2" height="13" /></bezel>
+
+ <bezel element="text_q"><bounds x="8" y="0" width="10" height="2" /></bezel>
+ <bezel element="text_a"><bounds x="8" y="3" width="10" height="2" /></bezel>
+ <bezel name="q_pos" element="counter"><bounds x="15" y="0" width="2" height="2" /></bezel>
+ <bezel name="a_pos" element="counter"><bounds x="15" y="3" width="2" height="2" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 18016060c7e..199ee358066 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -14777,6 +14777,7 @@ tswampt // Tiger
@source:hh_tms1k.cpp
7in1ss // Tiger Electronics
+alphie // Playskool
arcmania // Milton Bradley
arrball // A-One LSI
amaztron // Coleco