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"