Les articles Amstrad >Les produits Amstrad > Les CPC > Programmation > Assembleur > 6.1 : Les vecteurs systèmes [fr-en] (Amstradeus)

6.1 : Les vecteurs systèmes [fr-en] (Amstradeus)

[fr]

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.

BCOE : 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 Ie "." 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.

 

[/fr] 

  

[en]  

The system vectors are sub programs memorized in the ROM. They're not super fast, nor optimized, but they make programming easier. They allow dealing with the following elements.

- Le clavier
- The text
- The sounds
- The graphical manger
- The screen manager
- Disk, tape and file access
- The Kernel
- The hardware interface

Example: the vector &BC0E in the screen manager

BCOE: mode change
CA: A contains the mode figure;
CF: nothing
: AF, BC, DE and HL registers are modified.

It's the equivalence of the Basic MODE instruction. CA fives the list of the registers whiwh allow to set the vector. Here, it's the accumulator A register which must contain the mode figure, 0, 1 or 2. CF contains the OUT registers or the result of the vector (none here). Another indication indicates that the registers which have been modified. AF, BC, DE and HL in this case. So, a saving of them may be of a good use. Here's a way to switch to mode 2.

Push AF
Push BC
Push DE
Push HL
 

Ld A,2
Call &BC0E
 

Pop HL
Pop DE
Pop BC
Pop AF
 

THE KEYBOARD

BB00 : initializes the keyboard, its pre-definition (KEY, KEYDEF), the keyboard buffer (CLEAR INPUT on the 6128),etc...
CA : None.
CF: the registers AF, BC, DE abnd HL are modified.

BB06 : Waiting the pressing of a key and puts his code in the stack (see also BB18)
CA: none.
CF: the stacker = number of the character (example: 66 for B).

BB09: Test if a key is pressed. This routine does not wait and must be put in a waiting loop.
CA : none.
CF: if a key is pressed, CARRY = 1 and Stacker = number of the character, else CARRY = 0 and the stacker is modified.

BB18: waiting for a key to be pressed.
This routine is different from BB06 because it gives for some keys a different code than BB06. For example the numeric pad. The vector BB18 give the value from 48 to 57 (ASCII code) while BB06 gives the value from 128 to 137 (value which can be used whilst redefining a key). The difference works also with 139 for ENTER (instead of 13 with BB18) and 138 for Ie "." of the numeric pad (instead of 46 with BB18)
CA: None.
CF: the stacker = number of the character.

BB1B: Tests if a key is pressed.
This routine does not wait and must not be placed in a waiting loop.
This routine is different from BB09 because it gives the number of the key corresponding to the indications written on your CPC 6128 (example for an Azerty keyboard, A is 67.)
CA: None.
CF: if a key is pressed, CARRY = 1 and Stacker = number of the character, else CARRY = 0 and stacker is modified.

BB21: asks the state of the CAPS LOCK and SHIFT key.
CA: None.
CF: gives the state of the CAPS key and H the SHIFT key. Note that the value 0 means a non-pressed key and 255 a pressed key.

BB24: tests the state of the joystick.
To know its position, the first 6 bits of the stacker must be tested (BIT 1, A, JR, Z...).
CA: None.
CF: A and H contain the state of the first joystick and L the second. The bits 0 to 5 of these registers will be placed at 1, if the following directions are respected: up, down, left, right, fire 2, fire 1. Example: if it's up and fire button pressed, the stacker will have it bits 0 and 5 put to 1.

BB3F: setting of the answer and repetition time of the keyboard (SPEED KEY in BASIC).
CA: H = time before the first repetition
L = speed of repetition
These speeds are in 1/50 of second (LD H,50 for one second).
CF: AF is modified.

BB48: deactivates the ESC key. In Basic it will be used like this:
10 CALL &BB48
20 GOTO 20
CA: None.
CF: AF and HL are modified.


THE TEXT MODE

BB5A: displays an ASCII character at the current position f the text cursor (LOCATE).
Basically, it's the equivalent of the PRINT function but for one character only. To display a sentence, a reading routine which will display characters one by one must be written. Unlike the Basic, this routine will note execute a RETURN command, therefore avoiding to replace the cursor for the next character. Example in Basic PRINT "A";
CA: the accumulator containe the ASCII code of the character to display (example: 65 for A).

BB60 : reads a character at the current position of the text cursor.
Basic equivalent of COPYCHR$
CA: none
CF: if the routine recognizes a character, CARRY = 1 (JR C,..) and the stack contains the ASCII code of this character, else, CARRY = 0 and A = 0

BB66: fixes the limits of a text window (WINDOW in Basic).
Obviously, this command will react as in Basic. To work with several windows at the same time (WINDOW#1, WINDOW#2...) this new window will have to be redefined each time.
CA: H = one side of the window (right or left)
D = The second side of the window (left or right)
L = The third side of the window (up or down)
E = The last side of the window (down or up)
CF: the registers A,F,H,L,B,C,D and E are modified.

BB69: asks the dimensions of the current text window.
CA: none.
CF: if the window covers the whole screen, CARRY = 0 else CARRY = 1
H: left column
D: right column
L: upper line
E: down line

BB6C: erases what's in the active window and places the text cursor in the upper left position of the latter.
It's the Basic CLS
CA: none
CF: all registers are modified.

 

[/en]

  Voir cet article au format PDF Imprimer cet article

* Donathon 2018 *

340 €

 

 

 

 En savoir plus

RECHERCHE
Chat
 Smiles  Loading...
Connexion
Nom d'utilisateur :

Mot de passe :

Se souvenir de moi



Mot de passe oublié?

Inscrivez-vous!
EN LIGNE
10 utilisateur(s) en ligne (1utilisateur(s) en ligne sur Les articles Amstrad)

Membres: 4
Invités : 6

Golem13, BDCIRON, Moonbeam, phenix, plus...
Musiques CPC

Lecteur MP3
CPC-Scene Radio

 

 

ROLAND RADIO

 

Informations
________________________________

Suivre Amstrad.eu

________________________________

Autres Créations web

________________________________

 

Declaration CNIL : 1005884

Association : 0540200002843

Charte

Avertissements

Plan du site

Carte de France des membres

 

 

 

Facebook.

Twitter.

RSS forum.

RSS News.

Contact.

 

Gaston-Phoebus.com

Amstrad.eu

untour.fr

Cathydeco.com

Higoogle

Harloup.fr

** Faire un don **

 

Conception Phenix © 2000 - 2014