summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/alto2/a2kbd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/alto2/a2kbd.cpp')
-rw-r--r--src/devices/cpu/alto2/a2kbd.cpp63
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;
+}