CODING ★ Quoi de neuf docteur ★

Bidouilles ACPC n°43 - Les vecteurs system (1/6 : Clavier, mode texte , les sons)

Je vous ai compris ! Vous n'avez rien à faire des compacteurs. Vous voulez du concret. Suite à l'épuisement des livres spécialises, il parait qu'une liste des vecteurs système ferait le bonheur de milliers de lecteurs. Or donc, la voici.

Nous allons, dans cette liste, aborder les vecteurs gérant le clavier, les modes textes, l'écran, le graphisme, les sons et les accès disque (clavier, mode et sons pour ce numéro).

Nous vous indiquerons dans un premier temps l'adresse d'appel du vecteur suivi d'un petit commentaire sur la fonction réalisée ainsi que les conditions d'appel (initialisation de certains registres) et les conditions finales (l'état des registres et les flags).

L'état en sortie des registres vous permet de strocker prealablement ces derniers a l'aide de l'instruction PUSH pour ne pas perdre une valeur placee dans le registre avant l'appel de la routine. Il va de soi que cet empilement sera desactive a 'aide de l'instruction POP juste apres l'appel du vecteur.

A vous de faire votre choix tout en sachant que cette liste n' est pas exhaustive mais qu'elle renferme l'essentiel des vecteurs utilisables en assembleur.

LE CLAVIER

BB00 : Initialise le clavier, les predefinitions (KEY, KEYDEF), le tampon clavier (CLEAR INPUT sur 6128), etc.

  • CA :
    • Aucune.
  • CF :
    • Les registres AF,BC,DE et HL sont modifies.

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 caractere (exemple : 66 pour la touche B du clavier).

BB09: Teste si une touche est enfoncee. Cette routine n'attend pas et doit etre placee dans une boucle d'attente.

  • CA :
    • Aucune.
  • CF :
    • Si une touche est pressee,
    • CARRY = 1 et Accumulateur = numéro du caractere,
    • sinon CARRY=0 et l'accumulateur est modifie.

BB18 : Attente d'une touche du clavier.
Cette routine se differencie de BB06 par le fait qu'elle renvoie pour quelques touches un code different de BB06. Entre autres, les touches du pave numerique. 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 redefinition d'une touche). La difference est vraie avec 139 pour ENTER (au lieu de 13 avec BB18) et 138 pour Ie "." du pave numerique (au lieu de 46 avec BB18).

  • CA :
    • Aucune.
  • CF :
    • L'accumulateur = numéro du caractere.

BB1B : Teste si une touche est enfoncée.
Cette routine n' attend pas et doit être placee dans une boucle d'attente.
Cette routine se differencie de BB09 par le fait qu'elle renvoie le numéro de la touche correspondant aux indications gravees sur le boitier de votre CPC 6128 (exemple pour un clavier Azerty, la touche A correspond a 67).

  • CA :
    • Aucune.
  • CF :
    • Si une touche est pressee,
    • CARRY = 1 et Accumulateur = numéro du caractere,
    • sinon CARRY=0 et l'accumulateur est modifie.

BB21 : Demande l'etat de la touche CAPS LOCK et SHIFT.

  • CA :
    • Aucune.
  • CF:
    • L contient l'etat de la touche CAPS
    • H celui de SHIFT.
    • Notons qu'une valeur 0 signifie une touche non enclenchée et 255 une touche pressee.

BB24 : Teste l'état du joystick.
Pour connaitre 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'etat du premier joystick et L l'état du second.
    • Les bits 0 a 5 de ces registres se placeront a 1 si les directions suivantes sont respectees : 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 repetition du clavier (SPEED KEY du Basic).

  • CA :
    • H = temps avant la premiere repetition,
    • L = La vitesse de repetition.
    • Ces vitesses sont indiquees en cinquantieme de seconde (LD H,50 pour une seconde).
  • CF :
    • AF est modifie.

BB48 : Desactive 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 caractere ASCII à la position courante du curseur texte (LOCATE).
C'est en somme l'équivalent de PRINT mais pour un seul caractere. Sachez que pour afficher une phrase, il faudra écrire une routine de lecteur qui affichera les caracteres un par un. Contrairement au Basic, cette routine n' execute pas de retour chariot ce qui evite de replacer le curseur pour le caractere suivant. Exemple Basic PRINT "A";

  • CA :
    • L'accumulateur contient le code ASCII du caractere à afficher (exemple : 65 pour A).
  • CF :
    • Tout reste en place.

BB60 : Lit un caractere a la position courante du curseur texte.
Equivalent Basic de COPYCHR$.

  • CA :
    • Aucune.
  • CF :
    • Si la routine reconnait un caractere,
    • CARRY = 1 (JR C,..) et l'accumulateur-contient le code ASCII de ce caractere,
    • sinon CARRY = 0 et A = 0.

BB66 : Fixe les limites d'une fenetre texte (WINDOW du Basic).
Il est evident que cette commande reagira exactement comme le Basic. Pour travailler sur plusieurs fenetres en me 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ôtde la fenêtre (gauche ou droit).
    • L = Le troisieme cote de la fenêtre (haut ou bas).
    • E = Le dernier cote de la fenetre (bas ou haut).
  • CF :
    • Les registres A,F,H,L,B,C,D et E sont modifies.

BB69 : Demande les dimensions de la fenetre texte courante.
En somme vous pouvez retrouver les valeurs passees par la routine BB66.

  • CA: Aucune.
  • CF : Si la fenetre couvre tout l'ecran, 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 fenetre active et place le curseur texte en position haut et gauche de cette derniere.
Cest le CLS du Basic.

  • CA :
    • Aucune.
  • CF:
    • Tous les registres sont modifies.

BB6F : Déplace la position du curseur texte horizontalement.

  • CA :
    • L'accumulateur = nouvelle position de la colonne.
  • CF :
    • AF et HL sont modifies.

BB72 : Déplace la position du curseur texte verticalement.

  • CA :
    • L'accumulateur = nouvelle position de la rangée.
  • CF :
    • AF et HL sont modifies.

BB75 : Déplace la position du curseur texte (LOCATE du Basic).

  • CA :
    • H = Position de la colonne (X).
    • L = Position de la rangée (Y).
  • CF :
    • AF et HL sont modifies.

BB78 : Demande la position courante du curseur texte.
Cette routine vous indiquera en sortie le nombre de rotation (scrolling) effectues sur cette fenetre. Ce compteur est incremente si la rotation se fait vers le bas et decremente si la rotation se fait vers le haut.

  • CA:
    • Aucune.
  • CF :
    • H = Position de la colonne (X).
    • L = Position de la rangee (Y).
    • A = nombre de rotations.

BB90 : Determine le stylo utilise pour l'ecriture texte (l'instruction PEN de notre cher Basic)

  • CA :
    • A = Numero du stylo.
  • CF :
    • AF et HL sont modifies.

BB93 : Demande le numéro du stylo utilise pour l'ecriture texte.

  • CA :
    • Aucune.
  • CF :
    • A = Numéro du stylo utilise.

BB96: Determine le stylo utilise pour le fond des caracteres texte (l'instruction PAPER du Basic)

  • CA :
    • A = Numéro de fond.
  • CF :
    • AF et HL sont modifies.

BB99 : Demande le numéro du stylo utilise pour le fond des caracteres.

  • CA :
    • Aucune.
  • CF :
    • A = Numéro du stylo utilise.

BB9C : Echange les encres du stylo et du fond.
Sous Basic, vous pouvez appeler cette routine pour une inversion video ou utiliser l'instruction, PRINT CHR$(24)

  • CA :
    • Aucune.
  • CF :
    • AF et HL sont modifies.

BB9F: Place le mode d'ecriture opaque ou transparent pour le fond des caracteres affichables.

  • CA:
    • A = 0 pour fond opaque.
    • A<>0 pour fond transparent.
  • CF :
    • AF et HL sont modifies.

BBA8 : Redéfinit la matrice des caracteres ASCII affichables (au-dessus de 31).
L'equivalent Basic est la commande SYMBOL. Vous pensez bien qu'en travaillant en assembleur, vous n'aurez plus it reserver de place en memoire avec l'instruction SYMBOL AFTER.

  • CA :
    • A = numéro du caractere à redéfinir.
    • HL pointe sur la matrice (8 octets)
  • CF :
    • Si le caractère est défini CARRY = 1 sinon CARRY = 0.

Tous les registres sont modifies Exemple pour l'utilisation de ce vecteur:

LD A,240
LD HL,ASCII
JP &BBA8
ASCII DEFB 1,2,3.4.5,6,7,8

LES SONS

BCA7 : Initialise le gestionnaire sonore.
Ce vecteur coupe tous les sons joues ou en attente et reinitialise les differentes enveloppes (volume, frequence).

  • CA :
    • Aucune.
  • CF :
    • Les registres AF,HL,BC et DE sont modifies.

BCAA: Place un son sur le canal demande (l'instruction SOUND du Basic)

  • CA :
    • HL pointe sur une table de donnees sonores de 9 octets qui doit se trouver dans la zone Ram entre &4000 et &C000.
  • CF :
    • Si le canal n'est pas sature (cinq sons en attente) le son est place sur le canal et CARRY = 1, HL est modifie sinon, CARRY = 0.
    • En tout cas, les registres AF, BC, DE et IX sont modifies.
    • La table des donnees n'est pas organisee comme la commande SOUND du Basic. Voici l'ordre de placement des parametres:

ORG 40000
LD HL,SONS
JP &BCAA
SONS DEFB 1 ;CANAL
DEFB 2 ;ENVELOPPE DE VOLUME
DEFB 3 ;ENVELOPPE DE TON
DEFW 1000 ;FREOUENCE
DEFB 31 ;BRUIT
DEFB 15 ;VOLUME
DEFW 300 ;DUREE

Cet exemple equivaut à la commande SOUND 1,1000,300,15,2,3,31. Vous constatez que la frequence tout comme la durée du son sont placées sur deux octets.

Notez enfin que les valeurs négatives remplissent les mêmes roles qu'en Basic .

BCAD : Teste l'etat des canaux sonores (l'instruction SQ du Basic).
La valeur d'entree pour les trois canaux sonores sont 1 pour le canal A, 2 pour le canal B et 4 pour le canal C.
Le mélange des canaux n'est pas realisable par ce vecteur.

  • CA :
    • A = Numéro du canal à tester.
  • CF :
    • A = l'état du canal.
    • Les registre F, BC, DE et HL sont modifies.

BCB6 : Arrete momentanement tous les sons.

  • CA:
    • Aucune.
  • CF :
    • Les registres AF, BC et HL sont modifies.

BCB9 : Libere les sons arretes avec la routine BCB6.

  • CA :
    • Aucune (si ce n'est l'utilisation de la routine precedente).
  • CF :
    • Les registres AF, BC, DE et IX sont modifies.

BCBC : Création d'une enveloppe de volume (ENV).

  • CA :
    • A = numéro de l'enveloppe (1 à 15).
    • HL pointe sur les donnees de l'enveloppe (15 octets).
  • CF :
    • HL est augmente de 16, AF, HL et BC sont modifies.

BCBF : Creation d'une enveloppe de frequence (ENT).

  • CA :
    • A = numéro de l'enveloppe (1 à 15).
    • HL pointe sur les données de l'enveloppe (15 octets).
  • CF:
    • HL est augmente de 16, AF, HL et BC sont modifies.

BCC2 : Donne l'adresse des données d'une enveloppe de volume.

  • CA :
    • A = numéro de l'enveloppe (1 à 15).
  • CF :
    • Si OK, CARRY = 1,
      • HL pointe sur les donnees
      • BC = la longueur de l'enveloppe.
      • Les registres F et DE sont modifies.

BCC5: Donne l'adresse des données d'une enveloppe de frequence.

  • CA :
    • A = numéro de l'enveloppe (1 à 15).
  • CF :
    • Si OK, CARRY = 1,
      • HL pointe sur les donnees
      • BC = la longueur de l'enveloppe.
      • Les registres F et DE sont modifies.

Nous verrons, des le prochain numéro, la suite des vecteurs utilises pour les accès disque, le mode graphique sans oublier le gestionnaire écran.

Sined le vecteur, ACPC n°43, avr/mai 92, p42-43

Page précédente : Bidouilles ACPC n°42 - La decompression
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» firmwareMANUALDATE: 2002-12-03
DL: 1459
TYPE: ZIP
SiZE: 60Ko
NOTE:
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Bidouilles ACPC n°38 - Lecture sans AMSDOS
» Coding » Bidouilles ACPC n°12 - Création de RSX
» Coding » Bidouilles ACPC n°37 - FDC en mode direct
» Coding » Assembleur ACPC n°38 - Assembleur
» Coding » Assembleur ACPC n°44 - La programmation HARD du PSG
» Coding » Assembleur ACPC n°30 - L'homme du scroll mignon
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 298 millisecondes et consultée 4522 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.