56K420ADA_Protocol

http://bitsavers.org/pdf/att/610/55K420ADA_kbd/

this kbd works with the 610, 630 and 730

communicates 4800 baud 8 bits no parity, msb set on keydown, off on keyup

the host sends two status bytes periodically with state and kb volume, one of the bits is used for keyclick
which is only sent when a keyclick is to happen. It does NOT appear in the periodic status update.

default bytes sent are (00)(84)

period varies between implementations, the 610 sends both bytes every second, the 630 sends one byte every second

kbd sends an id (01) twice 10ms apart on power up but it seems to be ignored
host queries id with (8C)

beep generated with (40) (or 41, 44 or 45 if the kbd LEDs are on)

it is a triangle wave sent in variable width bursts with fewer triangle waves per burst for .8 seconds
a scope trace is in beep.wfm

key click is 4 square wave pulses 60uS active 330 uS between pulses

state bits

byte 1 msb  0
            beep
            click
            0
            0
            scroll lock LED (1 = ON)
            0
            caps lock LED (1 = ON)

byte 2 msb  1
            0
            0
            0
            kb inquiry      kb returns (01) (01)  inquiry also sends kb volume bits
            vol msb
            vol
            vol lsb

default volume is 4, scroll lock, click and caps lock off

examples (all with keyclick on)

capslock pressed   20 01 sent
next keydown       21    sent

capslock pressed   21 00 sent
next keydown       20

scr lock pressed   20 04 sent
next keydown       24

it is actually sending two commands when keyclick is on, the first ALSO sends the LED state

if we have the sequence scroll lock, shift lock, shift lock, scroll lock
you see

kb    host
F1
      01     SCROLL LK ON
71
A7
      05     SCROLL LK AND SHIFT LK ON
27
A7
      01     SCROLL LK ON
27
F1
      00     BOTH OFF
71 

No host bytes are sent if any other key is pressed

--

kbd ID is jumperable on the pcb
jumpering the next pad down changes the ID from 1 to 3