summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit1d75370a5771b2755b3a8a0fbe5f3071344a627c (patch)
tree7781a1bec8c6cf28b3f818d8286b3afbed8dae27
parentfb9e4823f4c2178d2194a1cefbecd5638e4e25dd (diff)
amerihok: Log outputs (nw)
-rw-r--r--src/mame/drivers/amerihok.cpp29
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 */