[Contents] [index] [Help] [Retrace] [browse <] [Browse >]

There are two possible ways for the keyboard to be powered up under normal
circumstances: <1> the computer can be turned on with the keyboard plugged
in, or <2> the keyboard can be plugged into an already "on" computer.  The
keyboard and computer must handle either case without causing any upset.

The first thing the keyboard does on power-up is to perform a self-test.
This involves a ROM checksum test, simple RAM test, and watchdog timer
test.  Whenever the keyboard is powered up (or  restarted  -- see below), it
must not transmit anything until it has achieved synchronization with the
computer. The way it does this is by slowly  clocking out 1 bits , as
described above, until it receives a handshake pulse.

If the keyboard is plugged in before power-up, the keyboard may continue
this process for several minutes as the computer struggles to boot up and
get running.  The keyboard must continue clocking out 1s for however long
is necessary, until it receives its handshake.

If the keyboard is plugged in after power-up, no more than eight clocks
will be needed to achieve sync.  In this case, however, the computer may
be in any state imaginable but must not be adversely affected by the
 garbage character  it will receive.  again, because it receives a key
release, the damage should be minimal.  The keyboard driver must
anticipate this happening and handle it, as should any application that
uses raw keycodes.

   Warning:
   --------
   The keyboard must not transmit a " lost sync " code after
   re-synchronizing due to a power-up or  restart ; only after
   re-synchronizing due to a handshake time-out.

Once the keyboard and computer are in sync, the keyboard must inform the
computer of the results of the self-test.  If the self-test failed for any
reason, a "selftest failed" code (value $FC = 11111100) is transmitted
(the keyboard does not wait for a handshake pulse after sending the
"selftest failed" code).  After this, the keyboard processor goes into a
loop in which it blinks the Caps Lock LED to inform the user of the
failure.  The blinks are coded as bursts of one, two, three, or four
blinks, approximately one burst per second:

     One blink        ROM checksum failure.
     Two blinks       RAM test failed.
     Three blinks     Watchdog timer test failed.
     Four blinks      A short exists between two row lines or one of
                          the seven special keys (not implemented).

If the self-test succeeds, then the keyboard will proceed to transmit any
keys that are currently down.  First, it sends an "initiate power-up key
stream" code (value $FD = 11111101), followed by the key codes of all
depressed keys (with keyup/down set to "down" for each key).  After all
keys are sent (usually there won't be any at all), a "terminate key
stream" code (value $FE = 11111110) is sent.  Finally, the Caps Lock LED
is shut off. This marks the end of the start-up sequence, and normal
processing commences.

The usual sequence of events will therefore be:  power-up; synchronize;
transmit "initiate power-up key stream" ($FD); transmit "terminate key
stream" ($FE).