summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/sharp/mz80_m.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/sharp/mz80_m.cpp')
-rw-r--r--src/mame/sharp/mz80_m.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/mame/sharp/mz80_m.cpp b/src/mame/sharp/mz80_m.cpp
new file mode 100644
index 00000000000..7f31c9172bc
--- /dev/null
+++ b/src/mame/sharp/mz80_m.cpp
@@ -0,0 +1,84 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic
+/***************************************************************************
+
+ MZ80 driver by Miodrag Milanovic
+
+ 22/11/2008 Preliminary driver.
+
+****************************************************************************/
+
+#include "emu.h"
+#include "mz80.h"
+
+
+/* Driver initialization */
+void mz80_state::init_mz80k()
+{
+}
+
+void mz80_state::machine_reset()
+{
+ m_mz80k_tempo_strobe = 0;
+ m_mz80k_vertical = 0;
+ m_mz80k_cursor_cnt = 0;
+ m_mz80k_keyboard_line = 0;
+}
+
+
+uint8_t mz80_state::mz80k_8255_portb_r()
+{
+ if (m_mz80k_keyboard_line < 10)
+ return m_keyboard[m_mz80k_keyboard_line]->read();
+ else
+ return 0xff;
+}
+
+uint8_t mz80_state::mz80k_8255_portc_r()
+{
+ uint8_t val = 0;
+ val |= m_mz80k_vertical ? 0x80 : 0x00;
+ val |= ((m_mz80k_cursor_cnt & 0x3f) > 31) ? 0x40 : 0x00;
+ val |= (m_cassette->get_state() & CASSETTE_MASK_UISTATE)!= CASSETTE_STOPPED ? 0x10 : 0x00;
+
+ if (m_cassette->input() > 0.00)
+ val |= 0x20;
+
+ return val;
+}
+
+void mz80_state::mz80k_8255_porta_w(uint8_t data)
+{
+ m_mz80k_keyboard_line = data & 0x0f;
+}
+
+void mz80_state::mz80k_8255_portc_w(uint8_t data)
+{
+// logerror("mz80k_8255_portc_w %02x\n",data);
+ m_cassette->output(BIT(data, 1) ? -1.0 : +1.0);
+}
+
+
+void mz80_state::pit_out0_changed(int state)
+{
+ if(!m_prev_state && state)
+ m_speaker_level++;
+
+ m_prev_state = state;
+ m_speaker->level_w(BIT(m_speaker_level, 1));
+}
+
+void mz80_state::pit_out2_changed(int state)
+{
+ m_maincpu->set_input_line(0, HOLD_LINE);
+}
+
+uint8_t mz80_state::mz80k_strobe_r()
+{
+ return 0x7e | (uint8_t)m_mz80k_tempo_strobe;
+}
+
+void mz80_state::mz80k_strobe_w(uint8_t data)
+{
+ m_pit->write_gate0(BIT(data, 0));
+}