CODINGDEMONIAK ★ COURS d'ASSEMBLEUR par DEMONIAK (Jeudi 4 Août 2005) ★

Cours d'assembleur par Demoniak - Partie 6 : les vecteurs systèmeCoding Demoniak

Partie 6 : les vecteurs système

Les vecteurs systèmes sont des sous-programmes mémorisés en ROM. Ils ne sont pas forcément ultra rapides ni optimisés, mais ils facilitent souvent la programmation. Ils permettent la gestion des éléments suivants :

- Le clavier
- Le texte
- Les sons
- Le gestionnaire graphique

- Le gestionnaire d'écran
- Les accès disquette, cassette et les fichiers
- Le kernell
- L'interface matérielle

Exemple : le vecteur &BC0E dans le gestionnaire d'écran.

BC0E : changement de mode
CA : A contient le numéro du mode;
CF : rien;
: les registres AF, BC, DE et HL sont modifiés.

C'est l'équivalent de l'instruction MODE en basic. CA donne la liste des registres qui permettent de paramétrer le vecteur. Ici c'est le registre accumulateur A qui doit contenir le numéro de mode, soit 0,1 ou 2. CF contient les registres de sortie ou de résultat du vecteur (ici il n'y en a pas). Une indication supplémentaire indique toutefois les registres qui ont été modifiés, ici ce sont AF, BC, DE et HL. Avant de lancer un tel vecteur, il peut donc être nécessaire de sauvegarder ces derniers. L'exemple suivant permet de passer en mode 2.

Push AF
Push BC
Push DE
Push HL

Ld A,2
Call &BC0E

Pop HL
Pop DE
Pop BC
Pop AF

LE CLAVIER

BB00 : Initialise le clavier, les prédéfinitions (KEY, KEYDEF), le tampon clavier (CLEAR INPUT sur 6128), etc.
CA : Aucune.
CF : Les registres AF,BC,DE et HL sont modifiés.

BB06 : Attente d'une touche du clavier et renvoie son code dans l'accu (voir également BB18)
CA : Aucune.
CF: L'accumulateur = numéro du caractère (exemple : 66 pour la touche B du clavier).

BB09: Teste si une touche est enfoncée. Cette routine n'attend pas et doit être placée dans une boucle d'attente.
CA : Aucune.
CF : Si une touche est pressée, CARRY = 1 et Accumulateur = numéro du caractère, sinon CARRY=0 et l'accumulateur est modifie.

BB18: Attente d'une touche du clavier.
Cette routine se différencie de BB06 par le fait qu'elle renvoie pour quelques touches un code différent de BB06. Entre autres, les touches du pave numérique. Le vecteur BB18 renvoie des valeurs allant de 48 a 57 (codes Ascii) alors que BB06 donne 128 a 137 (valeur utilisable lors de la redéfinition d'une touche). La différence est vraie avec 139 pour ENTER (au lieu de 13 avec BB18) et 138 pour le "." du pave numérique (au lieu de 46 avec BB18).
CA : Aucune.
CF : L'accumulateur = numéro du caractère.

BB1B: Teste si une touche est enfoncée.
Cette routine n' attend pas et doit être placée dans une boucle d'attente.
Cette routine se différencie de BB09 par le fait qu'elle renvoie le numéro de la touche correspondant aux indications gravées sur le boîtier de votre CPC 6128 (exemple pour un clavier Azerty, la touche A correspond a 67).
CA : Aucune.
CF : Si une touche est pressée, CARRY = 1 et Accumulateur = numéro du caractère, sinon CARRY=0 et l'accumulateur est modifie.

BB21: Demande l'état de la touche CAPS LOCK et SHIFT.
CA : Aucune.
CF: L contient l'état de la touche CAPS et H celui de SHIFT. Notons qu'une valeur 0 signifie une touche non enclenchée et 255 une touche pressée.

BB24: Teste l'état du joystick.
Pour connaître la position d'un manche a balai, il faudra tester les 6 premiers bits de l'accumulateur (exemple BIT 1,A, JR Z,...).
CA : Aucune.
CF : A et H contiennent l'état du premier joystick et L l'etat du second. Les bits 0 a 5 de ces registres se placeront a 1 si les directions suivantes sont respectées ; haut, bas, gauche, droite, feu 2, feu 1. Exemple, pour un joy pointe vers le haut avec le bouton de feu enfonce, l'accumulateur aura ses bits 0 et 5 mis a 1.

BB3F: Réglage des temps de réponse et de répétition du clavier (SPEED KEY du Basic).
CA: H = temps avant la première répétition,
L = La vitesse de répétition.
Ces vitesses sont indiquées en cinquantième de seconde (LD H,50 pour une seconde).
CF : AF est modifié.

BB48: Désactive la touche ESC. Sous Basic cet appel sera utilise de la façon suivante :
10 CALL &BB48
20 GOTO 20
CA: Aucune.
CF : AF et HL sont modifies.

LE MODE TEXTE

BB5A: Affiche un caractère Ascii à la position courante du curseur texte (LOCATE).
C'est en somme l'équivalent de PRINT mais pour un seul caractère. Sachez que pour afficher une phrase, il faudra écrire une routine de lecteur qui affichera les caractères un par un. Contrairement au Basic, cette routine n' exécute pas de retour chariot ce qui évite de replacer le curseur pour le caractère suivant. Exemple Basic PRINT "A";
CA : L'accumulateur contient Ie code Ascii du caractère à afficher (exemple : 65 pour A).
CF: Tout reste en place.

BB60: Lit un caractère a la position courante du curseur texte.
Equivalent Basic de COPYCHR$.
CA : Aucune.
CF : Si la routine reconnaît un caractère, CARRY = 1 (JR C,..) et l'accumulateur contient le code Ascii de ce caractère, sinon, CARRY = 0 et A = 0.

BB66: Fixe les limites d'une fenêtre texte (WINDOW du Basic).
II est évident que cette commande réagira exactement comme le Basic. Pour travailler sur plusieurs fenetres en même temps (WINDOW#1, WINDOW#2...), il vous faudra redéfinir à chaque fois cette nouvelle fenêtre.
CA: H = Un côté de la fenêtre (droit ou gauche).
D = Le deuxième côté de la fenêtre (gauche ou droit).
L = Le troisième côté de la fenêtre (haut ou bas).
E = Le dernier côté de la fenêtre (bas ou haut).
CF: les registres A,F,H,L,B,C,D et E sont modifies.

BB69: Demande les dimensions de la fenêtre texte courante.
En somme vous pouvez retrouver les valeurs passées par la routine BB66.
CA: Aucune.
CF : Si la fenêtre couvre tout l'écran, CARRY = 0 sinon CARRY = 1.
H = Colonne à gauche.
D = Colonne à droite.
L = Rangée en haut.
E = Rangée en bas.

BB6C: Efface le contenu de la fenêtre active et place le curseur texte en position haut et gauche de cette dernière.
Cest le CLS du Basic.
CA : Aucune.
CF: Tous les registres sont modifies.

Page précédente : Cours d'assembleur par Demoniak - Partie 5 : Les instructions Z80 / Modes d'Adressage

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 115 millisecondes et consultée 1130 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.