summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-03-23 08:14:38 +0100
committer hap <happppp@users.noreply.github.com>2015-03-23 08:14:38 +0100
commit7f23e92a76cdc9bcc01e73f39a87afdd106c7769 (patch)
treee6ae0d661a693833ba2096d1731f2179d6c45826 /src
parentd0385f1671dc16f6be66740a3e832b42e5f81048 (diff)
darktower WIP
Diffstat (limited to 'src')
-rw-r--r--src/mess/drivers/hh_tms1k.c85
1 files changed, 82 insertions, 3 deletions
diff --git a/src/mess/drivers/hh_tms1k.c b/src/mess/drivers/hh_tms1k.c
index 39817dd91b6..0f8af1ff9bb 100644
--- a/src/mess/drivers/hh_tms1k.c
+++ b/src/mess/drivers/hh_tms1k.c
@@ -195,9 +195,13 @@ public:
DECLARE_WRITE16_MEMBER(ssimon_write_o);
DECLARE_READ8_MEMBER(ssimon_read_k);
+ bool m_dtower_motor_on;
+ bool m_dtower_sensor;
+ void mbdtower_display();
DECLARE_WRITE16_MEMBER(mbdtower_write_r);
DECLARE_WRITE16_MEMBER(mbdtower_write_o);
DECLARE_READ8_MEMBER(mbdtower_read_k);
+ DECLARE_MACHINE_START(mbdtower);
DECLARE_WRITE16_MEMBER(cnsector_write_r);
DECLARE_WRITE16_MEMBER(cnsector_write_o);
@@ -1540,7 +1544,8 @@ MACHINE_CONFIG_END
Milton Bradley Simon, created by Ralph Baer
Revision A hardware:
- * TMS1000 (die labeled MP3226), DS75494 lamp driver
+ * TMS1000 (die labeled MP3226)
+ * DS75494 lamp driver
Newer revisions (also Pocket Simon) have a smaller 16-pin MB4850 chip
instead of the TMS1000. This one has been decapped too, but we couldn't
@@ -1684,30 +1689,102 @@ MACHINE_CONFIG_END
/***************************************************************************
Milton Bradley Dark Tower
- * TMS1400 MP7332-N2LL (die labeled MP7332)
+ * TMS1400NLL MP7332-N1.U1(Rev. B) or MP7332-N2LL(Rev. C), die labeled MP7332
+ * SN75494N MOS-to-LED digit driver
x
***************************************************************************/
+void hh_tms1k_state::mbdtower_display()
+{
+}
+
WRITE16_MEMBER(hh_tms1k_state::mbdtower_write_r)
{
+ // R0-R2: input mux
+ m_inp_mux = data & 7;
+
+ // R3: N/C
+ // R4: 75494 enable (speaker, lamps, digit select go through that IC)
+ // R5-R7: tower lamps
+ // R8: rotation sensor led
+ // R9: motor on
+
+ // R10: speaker out
+ m_speaker->level_w(data >> 10 & 1);
}
WRITE16_MEMBER(hh_tms1k_state::mbdtower_write_o)
{
+ // O0-O6: led segments A-G
+ // O7: digit select
+ m_o = data;
}
READ8_MEMBER(hh_tms1k_state::mbdtower_read_k)
{
- return 0;
+ // rotation sensor is on K8
+
+ return read_inputs(3);
}
+/* physical button layout and labels is like this:
+
+ (green) (l.blue) (red)
+ [YES/ [REPEAT] [NO/
+ BUY] END]
+
+ (yellow) (blue) (white)
+ [HAGGLE] [BAZAAR] [CLEAR]
+
+ (blue) (blue) (blue)
+ [TOMB/ [MOVE] [SANCTUARY/
+ RUIN] CITADEL]
+
+ (orange) (blue) (d.yellow)
+ [DARK [FRONTIER] [INVENTORY]
+ TOWER]
+*/
+
static INPUT_PORTS_START( mbdtower )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Inventory")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("No/End")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Clear")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Sanctuary/Citadel")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Frontier")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Repeat")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Bazaar")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Move")
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Dark Tower")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Yes/Buy")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Haggle")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Tomb/Ruin")
INPUT_PORTS_END
+/* tower motor simulation:
+
+*/
+
+MACHINE_START_MEMBER(hh_tms1k_state, mbdtower)
+{
+ machine_start();
+
+ // zerofill/register for savestates
+ m_dtower_motor_on = false;
+ m_dtower_sensor = false;
+
+ save_item(NAME(m_dtower_motor_on));
+ save_item(NAME(m_dtower_sensor));
+}
+
static MACHINE_CONFIG_START( mbdtower, hh_tms1k_state )
/* basic machine hardware */
@@ -1719,6 +1796,8 @@ static MACHINE_CONFIG_START( mbdtower, hh_tms1k_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_mbdtower)
+ MCFG_MACHINE_START_OVERRIDE(hh_tms1k_state, mbdtower)
+
/* no video! */
/* sound hardware */