CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 2.05.07 Keyboard manager (KM)

Ce pack a pour fonction la surveillance du clavier et la conversion en codes de caractères utilisables.

Pour l'interrogation cyclique des touches, il utilise le mécanisme d'EVENT.

1B5C ************************************** KM INITIALISE

Initialisation complète de la gestion clavier. L'état de la gestion clavier avant appel de cette routine est perdu.

1B5F KM SET DELA Y
1B68 (Shift Lock State)
1B80 Key Translation Table
1B8A Key State Map
1B8D touches enfoncées pendant examen

1B98 ******************************************* KM RESET

La gestion clavier est placé dans son état de départ. La table de saut indirect et les buffers de la gestion clavier sont neutralisés.

1BA4 Exp Buffer Cont'd
1BA7 Restore KM Indirection
1BAA Move (hl+3) vers ((hl+1)), cnt=(hl)
1BB0 KM DIS ARM BREAK
1BB3 db 03 3 octets
1BB4 dw BDEE adresse objet
1BB6 Test Break

1BBF ************************************* KM WAIT CHAR

KM WAIT CHAR va chercher un caractère dans le buffer clavier, dans
la chaîne d'extension ou dans le buffer Put Back. Si aucun
caractère n'est disponible, la routine ne revient pas. Elle attend
obligatoirement.
a contient s'il y a lieu le caractère qui a été entré au clavier.

1BBF KM RE AD CHAR 1BC2 KM WAIT CHAR

1BC5 ************************************ KM READ CHAR

KM READ CHAR transmet également un caractère dans a, s'il y en avait un, mais cette routine n'attend pas qu'il y ait un résultat positif.

Si au retour de la routine, le carry est mis, c'est qu'il n'y avait pas de caractère à aller chercher.

1BC6 Put Back Buffer
1BC9 aller chercher caractère
1BCA vider buffer
1BCC y avait-il un caractère?
1BCD si oui sauter
1BCF (Exp. String Pointer)
1BD2 octet fort vers accu
1BD3 existe-t-il une chaîne d'extension?
1BD4 si oui sauter
1BD6 KM READ KEY
1BD9 sauter si aucun caractère
1BDB le caractère est-il < 128?
1BDD si < 128 alors sauter
1BE8 KM GET EXPAND
1BF0 (Exp. String Pointer)
1BF8 accu=&FF

1BFA ********************************* KM CHAR RETURN

Placer un caractère dans le buffer clavier pour le prochain accès (KM READ CHAR ou KM WAIT CHAR).

1BFA (Put Back Bufferj
1BFE KM READ CHAR

1C04 ************************************ KM EXP BUFFER

Affecter mémoire pour chaîne d'extension (adresse, longueur). Initialiser buffer

1C04 Exp Buffer Cont'd
ICO A ************************************ Exp Buffer Confd
ICI3 (Pointer fin Exp Buffer)
ICI7 (Pointer Start Exp Buffer)
ICI A ASCII
IC1D 0
ICI F jusqu'à
1C20 9
1C21 vers
1C22 Expansion
1C23 Buffer
1C25 Restore
1C26 Default Exp String
1C35 (pointeur buffer d'extension libre)

1C3C ************************************* Default Exp String

1C3C 01 2E 01 0D 05 52 55 4E .....RUN
1C44 22 0D

1C46 ************************************ KM SET EXPAND

créer chaîne d'extension.

1C47 adresse Exp String vers de
1C4A sauter si Token incorrect
1C4E vider buffer d'extension

1C6A ********************************* vider buffer d'extension

1C79 place pour une nouvelle chaîne d'extension?
1C85 (pointeur buffer d'extension libre)
1C8A (Pointer fin Exp Buffer)
1C93 place pour une nouvelle chaîne d'extension?
1C96 (pointeur buffer d'extension libre)
1CA1 (pointeur buffer d'extension libre)

1CA7 **************************** place pour une nouvelle chaîne d'extension?

1CA7 (pointeur buffer d'extension libre)

1CB3 *********************************** KM GET EXPAND

Aller chercher un caractère d'une chaîne d'extension. Les caractères de la chaîne de caractères sont numérotés par ordre croissant en commençant par 0.

1CB3 adresse Exp String vers de

1CC3 **************************** adresse Exp String vers de

1CC3 Token dans zone
1CC5 valable?
1CC7 retour si pas
1CC9 (Pointer Start Exp Buffer)
1CD0 augmenter hl
1CD1 de la longueur
1CD2 de la chaîne d'extension

1CDB ************************************** KM WAIT KEY

Les routines KM WAIT KEY et KM READ KEY travaillent de façon
similaire à KM WAIT CHAR, mais seul le buffer clavier est
interrogé.

La chaîne d'extension et le buffer Put Back ne sont pas pris en
compte.

1CDB KM READ KEY 1CDE KMWAITKEY

1CE1 ************************************** KM READ KEY

Voir KM WAIT KEY.

1CFB Caps Lock State
1D12 Shift Lock State
1D17 caps lock?
1D1A si pas sauter
1D1D toggle caps lock
1D27 KM GET CONTROLS
1D2B (Shift Lock State)
1D32 KM GET SHIFT
1D35 KM GET TRANSLATE

1D38 ************************************** KM GET STATE

examiner si touches CAPS-LOCK et SHIFT-LOCK ont été actionnées.

1D38 (Shift Lock State)

1D3C ********************************************** Set State

1D3C (Shift Lock State)

1D40 *********************** KM UPDATE KEY STATE MAP

1D40 Mulitihit contr. à B63F
1D43 touches enfoncées pendant examen
1D46 Scan Keyboard
1D4C isoler SHIFT/CTRL
1D4F Key 16...23
1D54 Mulitihit contr. à B63F
1D57 Key State Map
1D74 Test Break
1D86 Key State Map
1D8B (adresse de la table de répétition)
1D9E (KMDelay)

1DB8 ************************************ KM TEST BREAK

1DC1 KM BREAK EVENT
1DCE KM BREAK EVENT

1DE5 ********************************** KM GET JOYSTICK

L'état du joystick au moment du test est déterminé à l'aide de la Key State Map.

1DE5 (Joystick 1)
1DEB (Joystick 0)

1DF2 ************************************* KM GET DELAY

aller chercher paramètres pour emploi et vitesse de la répétition de touches.

1DF2 (KMDelay)

1DF6 ************************************* KM SET DELAY

fixer emploi et vitesse de répétition de touches.

1DF6 (KM Delay)

1DFA *********************************** KM ARM BREAK

autoriser la touche Break.
1DFA KM DISARM BREAK
1DFD Break Event Block
1E02 KL INIT EVENT

1E0B ********************************* KM DISARM BREAK

la touche Break est verrouillée.

1E13 KL DEL SYNCHRONOUS

1E19 ********************************** KM BREAK EVENT

exécuter routines lorsque la touche Break est actionnée.

1E24 KL EVENT
1E2F ************************************ KM GET REPEAT

Tester, pour une touche déterminée, s'il s'agit d'une touche avec fonction de répétition activée.

1E2F (adresse de la table de répétition)
1E32 fixer Z en fonction du bit touche

1E34 ************************************* KM SET REPEAT

KM SET REPEAT vous permet de déterminer quelles touches doivent être dotées de la fonction de répétition.

Il faut placer en a le numéro de touche, b doit contenir &FF si la touche doit avoir une fonction de répétition et 0 s'il s'agit d'annuler la fonction de répétition de cette touche.

1E34 Key > 80?
1E36 oui alors incorrect
1E37 (adresse de la table de répétition)
1E3A aller chercher bit correspondant à la touche

1E45 *************************************** KM TEST KEY

L'état de la Key State Map permet d'examiner si une touche ou un joystick a été activé.

1E46 (Key 16...23)
1E49 isoler SHIFT/CTRL
1E4D Key State Map
1E50 aller chercher bit correspondant à la touche
1E53 masquer bit touche

1E55 ***************************** aller chercher bit correspondant à la touche

1E57 Key#
1E59 /8
1E5F adresser Key Map
1E62 masques bits
1E65 charger
1E67 bit
1E68 correspondant
1E69 à la touche

1E6D ******************************************* masques bits

1E6D 01 02 04 08 10 20 40 80

1EC4 ******************************* km GET TRANSLATE

aller chercher entrée du premier niveau de la table clavier (Key State Map).

1EC4 (adresse table traduction touche)
1EC7 Get Key Table

1EC9 ************************************** KM GET SHIFT

aller chercher entrée du second niveau de la table clavier.

1EC9 (Adresse Key SHIFT Table)
1ECC Get Key Table

1ECE ********************************** KM GET CONTROL

aller chercher entrée du troisième niveau de la table clavier.
1ECE (Adresse Key CTRL Table)

1ED1 **************************************** Qet Key Table

1ED8 ******************************** KM SET TRANSLATE

effectuer une entrée dans le premier niveau de la table clavier.

1ED8 (adresse table traduction touche)
1EDB Set Key Table

1EDD ************************************** KM SET SHIFT

effectuer une entrée dans le second niveau de la table clavier.

1EDD (Adresse Key SHIFT Table) 1EE0 Set Key Table
1EE2 *********************************** KM SET CONTROL

effectuer une entrée dans le troisième niveau de la table clavier.
1EE2 (Adresse Key CTRL Table)

1EE5 ***************************************** set Kev Table

1EEF ********************************* Key Translation Table

1EEF F0 F3 F1 89 86 83 8B 8A
1EF7 F2 E0 87 88 85 81 82 80
1EFF 10 5B 0D 5D 84 FF 5C FF
1F07 5E 2D 40 70 3B 3A 2F 2E
1F0F 30 39 6F 69 6C 6B 6D 2C
1F17 38 37 75 79 68 6A 6E 20
1F1F 36 35 72 74 67 66 62 76
1F27 34 33 65 77 73 64 63 78
1F2F 31 32 FC 71 09 61 FD 7A
1F37 0B 0A 08 09 58 5A FF 7F

1F3F ************************************** Key SHIFT Table

1F3F F4 F7 F5 89 86 83 8B 8A
1F47 F6 E0 87 88 85 81 82 80
1F4F 10 7B 0D 7D 84 FF 60 FF
1F57 A3 3D 7C 50 2B 2A 3F 3E
1F5F 5F 29 4F 49 4C 4B 4D 3C
1F67 28 27 55 59 48 4A 4E 20
1F6F 26 25 52 54 47 46 42 56
1F77 24 23 45 57 53 44 43 58
1F7F 21 22 FC51 09 41 FD 5A
1F87 0B 0A 08 09 58 5A FF 7F

1F8F ************************************** Key CTRL Table

1F8F F8 FB F9 89 86 83 8C 8A
1F97 FA E0 87 88 85 81 82 80
IF9F 10 1B 0D 1D 84 FF C FF
1FA7 1E FF 00 10 FF FF FF FF
1FAF 1F FF 0F 09 0C 0B 0D FF
1FB7 FF FF 15 19 08 0A 0E FF
1FBF FF FF 12 14 07 06 02 16
1FC7 FF FF 05 17 13 04 03 18
1FCF FF 7E FC 11 E1 01 FE 1A
1FD7 FF FF FF FF FF FF FF 7F
1FDF 07 03 4B FF FF FF FF FF
1FE7 AB 8F

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 2.05.06 Graphics screen (GRA)
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 074 millisecondes et consultée 1707 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.