diff options
Diffstat (limited to 'src/devices/cpu/alto2/a2kbd.cpp')
-rw-r--r-- | src/devices/cpu/alto2/a2kbd.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/devices/cpu/alto2/a2kbd.cpp b/src/devices/cpu/alto2/a2kbd.cpp new file mode 100644 index 00000000000..45800f03bd2 --- /dev/null +++ b/src/devices/cpu/alto2/a2kbd.cpp @@ -0,0 +1,63 @@ +// license:BSD-3-Clause +// copyright-holders:Juergen Buchmueller +/***************************************************************************** + * + * Xerox AltoII memory mapped I/O keyboard + * + *****************************************************************************/ +#include "alto2cpu.h" + +/** + * @brief read the keyboard address matrix + * + * @param addr memory mapped I/O address to be read + * @return keyboard matrix value for address modulo 4 + */ +READ16_MEMBER( alto2_cpu_device::kbd_ad_r ) +{ + UINT16 data = 0177777; + switch (offset & 3) { + case 0: + data = machine().root_device().ioport("ROW0")->read(); + break; + case 1: + data = machine().root_device().ioport("ROW1")->read(); + break; + case 2: + data = machine().root_device().ioport("ROW2")->read(); + break; + case 3: + data = machine().root_device().ioport("ROW3")->read(); + break; + } + m_kbd.matrix[offset & 03] = data; + if (!space.debugger_access()) { + LOG((this,LOG_KBD,2," read KBDAD+%o (%#o)\n", offset & 3, data)); + } + if (0 == (offset & 3) && (m_kbd.bootkey != 0177777)) { + if (!space.debugger_access()) { + LOG((this,0,2," boot keys (%#o & %#o)\n", data, m_kbd.bootkey)); + } + data &= m_kbd.bootkey; + m_kbd.bootkey = 0177777; + } + return data; +} + +void alto2_cpu_device::init_kbd(UINT16 bootkey) +{ + m_kbd.bootkey = bootkey; +} + +void alto2_cpu_device::exit_kbd() +{ + // nothing to do yet +} + +void alto2_cpu_device::reset_kbd() +{ + m_kbd.matrix[0] = 0177777; + m_kbd.matrix[1] = 0177777; + m_kbd.matrix[2] = 0177777; + m_kbd.matrix[3] = 0177777; +} |