summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hh_tms1k.cpp
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2017-07-06 21:45:38 +0200
committer hap <happppp@users.noreply.github.com>2017-07-06 21:46:08 +0200
commit13cd59060c4934463b57cc65b0593d2f6001672e (patch)
tree1739662018424197d661c0ea668b4270de1b483f /src/mame/drivers/hh_tms1k.cpp
parentceafa4beb4f5f019aad12b8c820a09f5715836b5 (diff)
New working machine added
--------- Milton Bradley Arcade Mania [hap, Sean Riddle]
Diffstat (limited to 'src/mame/drivers/hh_tms1k.cpp')
-rw-r--r--src/mame/drivers/hh_tms1k.cpp66
1 files changed, 55 insertions, 11 deletions
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 33737613cad..cf13e26b344 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -396,22 +396,23 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask)
return ret;
}
-
-// devices with a TMS0980 can auto power-off
+INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
+{
+ m_power_on = (bool)(uintptr_t)param;
+ m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
+}
WRITE_LINE_MEMBER(hh_tms1k_state::auto_power_off)
{
+ // devices with a TMS0980 can auto power-off
if (state)
- {
- m_power_on = false;
- m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
- }
+ power_off();
}
-INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
+void hh_tms1k_state::power_off()
{
- m_power_on = (bool)(uintptr_t)param;
- m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
+ m_power_on = false;
+ m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
@@ -6382,22 +6383,64 @@ public:
WRITE16_MEMBER(arcmania_state::write_r)
{
+ // R1-R9: leds
+ display_matrix(9, 1, data >> 1, 1);
}
WRITE16_MEMBER(arcmania_state::write_o)
{
+ // O0-O2(tied together): speaker out
+ m_speaker->level_w(data & 7);
+
+ // O3,O4,O6: input mux
+ m_inp_mux = (data >> 3 & 3) | (data >> 4 & 4);
+
+ // O5: power off when low (turn back on with button row 1)
+ if (~data & 0x20)
+ power_off();
}
READ8_MEMBER(arcmania_state::read_k)
{
- return 0;
+ // K: multiplexed inputs
+ return read_inputs(3);
}
// config
+/* physical button layout and labels is like this:
+
+ (orange) (orange) (orange)
+ [1] [2] [3]
+
+ (red) (yellow) (blue)
+ [RUN] [SNEAK
+ AMUK] ATTACK]
+
+ (green) (yellow) (purple)
+ [Alien [Rattler]
+ Raiders]
+*/
+
static INPUT_PORTS_START( arcmania )
+ PORT_START("IN.0") // O3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Alien Raiders")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("Yellow Button 2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Rattler")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Run Amuk")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("Yellow Button 1")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Sneak Attack")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_START("IN.2") // O6 (also O5 to power)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Orange Button 1") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Orange Button 2") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Orange Button 3") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static const s16 arcmania_speaker_levels[8] = { 0, 0x7fff/3, 0x7fff/3, 0x7fff/3*2, 0x7fff/3, 0x7fff/3*2, 0x7fff/3*2, 0x7fff };
@@ -6405,13 +6448,14 @@ static const s16 arcmania_speaker_levels[8] = { 0, 0x7fff/3, 0x7fff/3, 0x7fff/3*
static MACHINE_CONFIG_START( arcmania )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 400000) // approximation - RC osc. R=56K, C=100pF
+ MCFG_CPU_ADD("maincpu", TMS1100, 250000) // approximation - RC osc. R=56K, C=100pF
MCFG_TMS1XXX_READ_K_CB(READ8(arcmania_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(arcmania_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(arcmania_state, write_o))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
//MCFG_DEFAULT_LAYOUT(layout_arcmania)
+ MCFG_DEFAULT_LAYOUT(layout_hh_tms1k_test)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")