From 9ef9396b71e9c9670e94a24d45bc89484a95e776 Mon Sep 17 00:00:00 2001
From: "ol.sc"
Date: Sat, 20 Feb 2010 09:52:05 +0000
Subject: [PATCH] Added comment based on mailing list posting by Greg King.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4593 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
libsrc/c64/c64-1351.s | 18 ++++++++++++++++++
libsrc/c64/c64-joymouse.s | 18 ++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/libsrc/c64/c64-1351.s b/libsrc/c64/c64-1351.s
index c53940d7a..d4dfa1c91 100644
--- a/libsrc/c64/c64-1351.s
+++ b/libsrc/c64/c64-1351.s
@@ -4,6 +4,24 @@
;
; 2009-09-26, Ullrich von Bassewitz
; 2010-02-06, Greg King
+;
+; The driver prevents the keyboard from interfering by changing the
+; keyboard's output port into an input port while the driver reads its
+; controller device. That disables a wire that is left active by the
+; Kernal. That wire is used by the STOP-key to break out of BASIC
+; programs -- CC65 programs don't use that feature. The wire is shared
+; by these keys: STOP, "Q", Commodore, Space, "2", CTRL, Left-Arrow, and
+; "1". I listed them, in order, from bit 7 over to bit 0. The
+; rightmost five keys can look like joystick switches.
+;
+; The driver prevents the mouse/joystick from interfering by "blinding"
+; the keyboard scanner while any button/switch is active. It changes
+; the input port into an output port, then stores all zero-bits in that
+; port's latch. Reading from an output port sees the bitwise-AND of the
+; latch and the input signals. Therefore, the scanner thinks that eight
+; keys are being pushed at the same time. It doesn't know what to do
+; about that condition; so, it does nothing. The driver lets the
+; scanner see normally, again, when no buttons/switches are active.
;
.include "zeropage.inc"
diff --git a/libsrc/c64/c64-joymouse.s b/libsrc/c64/c64-joymouse.s
index e99adac7a..23564c39a 100644
--- a/libsrc/c64/c64-joymouse.s
+++ b/libsrc/c64/c64-joymouse.s
@@ -3,6 +3,24 @@
;
; Ullrich von Bassewitz, 2004-03-29, 2009-09-26
; 2010-02-08, Greg King
+;
+; The driver prevents the keyboard from interfering by changing the
+; keyboard's output port into an input port while the driver reads its
+; controller device. That disables a wire that is left active by the
+; Kernal. That wire is used by the STOP-key to break out of BASIC
+; programs -- CC65 programs don't use that feature. The wire is shared
+; by these keys: STOP, "Q", Commodore, Space, "2", CTRL, Left-Arrow, and
+; "1". I listed them, in order, from bit 7 over to bit 0. The
+; rightmost five keys can look like joystick switches.
+;
+; The driver prevents the mouse/joystick from interfering by "blinding"
+; the keyboard scanner while any button/switch is active. It changes
+; the input port into an output port, then stores all zero-bits in that
+; port's latch. Reading from an output port sees the bitwise-AND of the
+; latch and the input signals. Therefore, the scanner thinks that eight
+; keys are being pushed at the same time. It doesn't know what to do
+; about that condition; so, it does nothing. The driver lets the
+; scanner see normally, again, when no buttons/switches are active.
;
.include "zeropage.inc"