diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2019-03-24 20:58:25 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2019-03-24 20:58:25 -0400 |
commit | 1d75370a5771b2755b3a8a0fbe5f3071344a627c (patch) | |
tree | 7781a1bec8c6cf28b3f818d8286b3afbed8dae27 | |
parent | fb9e4823f4c2178d2194a1cefbecd5638e4e25dd (diff) |
amerihok: Log outputs (nw)
-rw-r--r-- | src/mame/drivers/amerihok.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mame/drivers/amerihok.cpp b/src/mame/drivers/amerihok.cpp index bf0c0e4ddcd..73276053c03 100644 --- a/src/mame/drivers/amerihok.cpp +++ b/src/mame/drivers/amerihok.cpp @@ -40,12 +40,17 @@ private: virtual void machine_reset() override; void control_w(u8 data); + void p2_w(u8 data); u8 p3_r(); required_device<z8_device> m_maincpu; required_device<okim6376_device> m_oki; void amerihok_data_map(address_map &map); void amerihok_map(address_map &map); + + u32 m_outputs[2]; + u32 m_latched_outputs[2]; + u8 m_old_p2; }; void amerihok_state::control_w(u8 data) @@ -54,6 +59,24 @@ void amerihok_state::control_w(u8 data) m_oki->ch2_w(!BIT(data, 7)); } +void amerihok_state::p2_w(u8 data) +{ + if (BIT(data, 5) && !BIT(m_old_p2, 5)) + { + m_outputs[1] = (m_outputs[1] << 1) | BIT(m_outputs[0], 31); + m_outputs[0] = (m_outputs[0] << 1) | BIT(data, 6); + } + + if (BIT(data, 7) && (m_outputs[0] != m_latched_outputs[0] || m_outputs[1] != m_latched_outputs[1])) + { + m_latched_outputs[0] = m_outputs[0]; + m_latched_outputs[1] = m_outputs[1]; + logerror("Outputs = %08X%08X\n", m_latched_outputs[1], m_latched_outputs[0]); + } + + m_old_p2 = data; +} + void amerihok_state::amerihok_map(address_map &map) { map(0x0000, 0xffff).rom().region("maincpu", 0); @@ -99,6 +122,11 @@ INPUT_PORTS_END void amerihok_state::machine_start() { + std::fill(std::begin(m_outputs), std::end(m_outputs), 0); + std::fill(std::begin(m_latched_outputs), std::end(m_latched_outputs), 0); + + save_item(NAME(m_outputs)); + save_item(NAME(m_latched_outputs)); } void amerihok_state::machine_reset() @@ -112,6 +140,7 @@ void amerihok_state::amerihok(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &amerihok_state::amerihok_map); m_maincpu->set_addrmap(AS_DATA, &amerihok_state::amerihok_data_map); m_maincpu->p2_in_cb().set_ioport("P2"); + m_maincpu->p2_out_cb().set(FUNC(amerihok_state::p2_w)); m_maincpu->p3_in_cb().set_ioport("P3"); /* sound hardware */ |