Changes

Jump to: navigation, search

Programming:Keyboard scanning

3,620 bytes added, 17 April
/* Hardware scancodes */
== Hardware scancode scancodes ==Joy1 fire3 and Joy2 fire3 only work on Amstrad CPC, not on Amstrad Plus. === English table ===
{|{{Prettytable|width: 700px; font-size: 2em;}}
|'''Bit:<br>Line''' || '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0'''
|'''&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 (Joy2 fire3) || F (Joy2 fire2) || G (Joy2 firefire1) || T (Joy2 right) || R (Joy2 left) || 5 % (Joy2 down)|| 6 & (Joy 2 Joy2 up)
|-
|'''&47''' || X || C || D || S || W || E || 3 # || 4$
|-
|'''&48''' || Z || CAPSLOCK || A || TAB || Q || ESC || 2 " || 1!
|-
|'''&49''' || DEL || - Joy1 fire3 || Joy 1 Fire 2 Joy1 fire2 ||Joy1 Fire 1fire1||Joy1 right||Joy1 left||Joy1 down||Joy1 up
|}
 
=== Danish table ===
{|{{Prettytable|width: 700px; font-size: 2em;}}
|'''Bit:<br>Line''' || '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0'''
|-
|'''&40''' || F Dot || 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 (Joy2 fire3) || F (Joy2 fire2) || G (Joy2 fire1) || T (Joy2 right) || R (Joy2 left) || 5 % (Joy2 down)|| 6 & (Joy2 up)
|-
|'''&47''' || X || C || D || S || W || E || 3 # || 4 $
|-
|'''&48''' || Z || CAPSLOCK || A || TAB || Q || ESC || 2 " || 1 !
|-
|'''&49''' || DEL || Joy1 fire3 || Joy1 fire2 ||Joy1 fire1||Joy1 right||Joy1 left||Joy1 down||Joy1 up
|}
 
=== Spanish table ===
{|{{Prettytable|width: 700px; font-size: 2em;}}
|'''Bit:<br>Line''' || '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0'''
|-
|'''&40''' || F Dot || INTRO || F3 || F6 || F9 || CURDOWN || CURRIGHT || CURUP
|-
|'''&41''' || F0 || F2 || F1 || F5 || F8 || F7 || COPIA || CURLEFT
|-
|'''&42''' || CONTROL || \ ` || MAYS || 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 (Joy2 fire3) || F (Joy2 fire2) || G (Joy2 fire1) || T (Joy2 right) || R (Joy2 left) || 5 % (Joy2 down)|| 6 & (Joy2 up)
|-
|'''&47''' || X || C || D || S || W || E || 3 # || 4 $
|-
|'''&48''' || Z || FIJA MAYS || A || TAB || Q || ESC || 2 " || 1 !
|-
|'''&49''' || BORR || Joy1 fire3 || Joy1 fire2 ||Joy1 fire1||Joy1 right||Joy1 left||Joy1 down||Joy1 up
|}
 
=== French table ===
{|{{Prettytable|width: 700px; font-size: 2em;}}
|'''Bit:<br>Line''' || '''7''' || '''6''' || '''5''' || '''4''' || '''3''' || '''2''' || '''1''' || '''0'''
|-
|'''&40''' || F Dot || ENTER || F3 || F6 || F9 || CURDOWN || CURRIGHT || CURUP
|-
|'''&41''' || F0 || F2 || F1 || F5 || F8 || F7 || COPY || CURLEFT
|-
|'''&42''' || CONTROL || $ @\ || SHIFT || F4 || # > || RETURN || * < || CLR
|-
|'''&43''' || : / || = + || M || ù % || P || ^ ¦ || ) [ || - _
|-
|'''&44''' || ; . || , ? || K || L || I || O || ç 9 || à 0
|-
|'''&45''' || SPACE || N || J || H || Y || U || è 7 || ! 8
|-
|'''&46''' || V || B (Joy2 fire3) || F (Joy2 fire2) || G (Joy2 fire1) || T (Joy2 right) || R (Joy2 left) || ( 5 (Joy2 down)|| ] 6 (Joy2 up)
|-
|'''&47''' || X || C || D || S || Z || E || " 3 || ' 4
|-
|'''&48''' || W || CAPSLOCK || Q || TAB || A || ESC || é 2 || & 1
|-
|'''&49''' || DEL || Joy1 fire3 || Joy1 fire2 ||Joy1 fire1||Joy1 right||Joy1 left||Joy1 down||Joy1 up
|}
 
== Computing key code ==
 
System key codes (codes that are writted on the top of the disc drive on 664/6128 or in the CPC user manual) can be computed with the formula : (Line*8)+bit
 
Example : for key SHIFT , Line = 2 , bit = 5 so (2*8)+5 = 21
== Keyboard clash ==
'''Destroyed:''' BC
<pre>LD A,kbdline ; from 0 &40 to 9 &49 with bdir/bc1=01LD D,0
LD BC,#F782 ; PPI port A out /C out
OUT (C),C
LD BC,#F40E ; Select Ay reg 14 on ppi port A
OUT (C),C
LD BC,#F6CO F6C0 ; This value is an AY index (R14)
OUT (C),C
OUT (C),0 D ; Validate!!out (c),0
LD BC,#F792 ; PPI port A in/C out
OUT (C),C
OUT (C),C
DEC B ; Reset PPI Write
OUT (C),D ; out (c),0 
Register A now holds the value of requested keyboard row
Now check for the value from the table e.g. with''''bit x,A''''and a condition e.g.''''jp z,xxxx''''or''''call z,xxxx''''
</pre>
ld d,b ;1
out (c),c ;4
ld c,0 xor a ;21 out (c),c a ;4
ld bc,#f792 ;3
out (c),c ;4
ld a,#40 ;2
ld c,#4a d ;2 441 (+42)
loop ld b,d ;1
out (c),a ;4 select line
ini ;5 read bits and write into KEYMAP
inc a ;1
cp inc c ;1 jr cnz,loop ;2/3 (9*16+1*15=159)
ld bc,#f782 ;3
out (c),c ;4
ei ;1 (+8 =211 209 microseconds)
ret
</pre>
There are some common keyboard configurations used:
 
* '''Joystick''' - This configuration is compatible with all Amstrad machines, even the GX4000 and you need to scan only one keyboard line (this means you can't be faster)
* '''Cursor keys & SPACE''' - This configuration is often used and is great for the CPC6128 and Plus and playing using emulators. This is '''not''' good for CPC 464 and 664 (which have uncomfortably arranged cursor keys)
4,852
edits