1,458 bytes added,
22:37, 26 August 2006 This is a routine which scans the keyboard directly. It is approximately 8% faster then the firmware routine and doesn't enable interrupts.
'''Input:''' A = ''layer (&40 - &49)
'''Output:''' A = ''hardware keyboard value''
'''Destroyed:''' BC
== Hardware scancode table ==
{|{{Prettytable|width: 700px; font-size: 2em;}}
|'''Value:<br>Layer''' || '''&7F''' || '''&BF''' || '''&DF''' || '''&EF''' || '''&F7''' || '''&FB''' || '''&FD''' || '''&FE'''
|-
|'''&40''' || (ZB) || ENTER || F3 || F6 || F9 || CURDOWN || CURRIGHT || CURUP
|-
|'''&41''' || F0 || F2 || F1 || F5 || F8 || F7 || COPY || CURLEFT
|-
|'''&42''' || CONTROL || \ || SHIFT || F4 || ] || RETURN || [ || CLR
|-
|'''&43''' || . || / || : || ; || P || @ || - || ^
|-
|'''&44''' || , || M || K || L || I || O || 9 || 0
|-
|'''&45''' || SPACE || N || J || H || Y || U || 7 || 8
|-
|'''&46''' || V || B || F || G || T || R || 5 || 6
|-
|'''&47''' || X || C || D || S || W || E || 3 || 4
|-
|'''&48''' || Z || CAPSLOCK || A || TAB || Q || ESC || 2 || 1
|-
|'''&49''' || DEL || - || - || - || - || - || - || -
|}
== Scanning routine ==
<pre>
ld a, layer ;use the value from the table above
ld bc, &F6C0
out (c), c
ld bc, &F40E
out (c), c
ld bc, &F792
out (c), c
ld b, &F6
out (c), c
ld b, &F4
in a, (c)
ld bc, &F782
out (c), c
ld bc, &F600
out (c), c
;now check for the value from the table
;e.g. with 'cp <value>'
;and a condition
;e.g. 'jp <condition>, xxxx' or 'call <condition>, xxxx'
</pre>