CODING ★ Vectoriellement votre ★

Bidouilles ACPC n°45 - Les vecteurs system (3/6)

Si les programmes ecrits en assembleur « pur» sont de loin les plus performants, ils sont aussi les plus longs it developper. En revanche, utiliser un vecteur systeme prend 3 secondes. Une pour le trouver dans le bouquin, une pour assimiler son utilisation et une pour l'installer. Si cela n'est pas de l'optimisation, comment qualifier ce procede ?

Comme vous avez du le remarquer, avant les vacances, nous avons travaille sur les vecteurs, Ce sont des richesses developpees par des pros a !'intention de tous les petits programmeurs en herbe desirant griffer notre machine. Plus besoin de jouer avec des temporisations a la microseconde pour piloter tel ou tel peripherique. Il suffit simplement d'affecter quelques valeurs a quelques registres et de faire le bon CALL. Le gain de temps a la programmation s'en fait bien sur sentir, mais cette forme d'ecriture assure deux choses. La premiere est que la ROM est garantie a 9 999 pour 10 000 sans bugs. Cela rassure deja un peu. La seconde est que votre logiciel fonctionnera sur une version future de tout systeme « compatible » avec votre micro. Des pepins dans le genre ont ete signales avec le CPC 464, le 664 et le 128. Certaines routines trop proches d'une machine se sont vu planter lamentablement en changeant d'environnement. Si vous etes sur de votre coup et si vous preterez programmer des versions speciales mais surpuisc santes, laissez tomber les vecteurs. Quoi que... Desassemblez-Ies tout de meme, ils vous en apprendront certainement beaucoup sur l'architecture meme du CPC et de son systeme. Si vous etes pere pantoufle, sans grand amour des routines supremes, ne vous prenez pas la tronche. Passez par la ROM.

LE GESTIONNAIRE D'ECRAN (BIS)

Dans le dernier numéro, nous avons ete coupe alars que nous en etions a la partie des vecteurs charges de travailler sur l'ecran. Je vous conseille fortement de vous y reporter pour obtenir quelques precisions sur les termes employes dans ces pages. Pour ne pas depareiller d'avec les mois precedents, nous vous donnons 4 indications par vecteur passe en revue:

  1. l'adresse d'appel (indispensable voire primordiale) ;
  2. un bref commentaire sur la raison d'etre (ce qu'il fait) ;
  3. les conditions d'appel pasrees dans les registres ;
  4. les conditions finales, soit les resultats de l'action emise, ainsl que les registres ou zones modifies.

Cela dit, réattaquons la ROM et ses points d'entrees.

BC20 : calcule l'adresse nouelle de l'octet situe à droite de celui dont on passe l'adresse
L'offset écran est pris en compte dans ce calcul.

  • CA :
    • HL contient l'adresse courante;
  • CF :
    • HL contient l'adresse suivante;
    • le registre AF est modifie

BC23 : calcule l'adresse reelle de l'octet situe a gauche de celui dant on passe l'adresse
L' offset écran est aussi pris en compte dans ce calcul.

  • CA :
    • HL contient l'adresse courante;
  • CF :
    • HL contient l'adresse suivante;
    • Le registre AF est modifie.

BC26 : calcule l'adresse reelle de l'octet situe sous celui dont on passe l'adresse
L'offset écran est egalement pris en compte dans ce calcul.

  • CA :
    • HL contient l'adresse courante;
  • CF :
    • HL contient l'adresse suivante;
    • Le registre AF est modifie.

BC29 : calcule l'adresse reelle de CF l'octet situe au.dessus de celui dont on passe l'adresse
L'offset écran est toujours en compte dans ce calcul.

  • CA :
    • HL contient l'adresse courante ;
  • CF :
    • HL contient l'adresse suivante;
    • Le registre AF est modifie.

BC2C : remplit un octet avec la couleur demandée
Pour n' en afficher qu'un point, il faudra masquer les pixels indesirables.
Cette routine tient compte du mode en cours.

  • CA :
    • A contient le numéro de couleur ;
  • CF :
    • A contient l'octet rempli de pixels colares ;
    • AF est modifie.

BC2F : renvoie un numéro de couleur en fonction d'un octet rempli de pixels
Elle fait le contraire de la routine precedente.

  • CA :
    •  A contient l'octet a analyser ;
  • CF :
    • A contient le numéro de l'encre;
    • AF est modifie.

BC32 : installe une encre
Si vous connaissez la commande INK du Basic, vous pourrez utiliser ce vecteur sans probleme.

  • CA :
    • A contient le numéro de l'encre ;
    • B est la premiere couleur ;
    • C est la seconde couleur ;
  • CF :
    • les registres AF, BC, DE et HL sont modifies.

BC35 : lecture des couleurs d'une encre
Appeler ce vecteur avec un numéro d'encre permet de lire ses composants prealablement installes avec le call precedent.

  • CA :
    • A contient le numéro d'encre;
  • CF :
    • B et C contiennent respectivement la premiere et la seconde couleur.
    • Les registres AF, BC, DE et HL sont modifies.

BC38 : installation de la couleur du bord
Si tu ne vas pas a BORDER, c'est BORDER qui viendra a toi.

  • CA :
    • B et C contiennent les composants de la couleur du Border;
  • CF :
    • Les registres AF, BC, DE et HL sont modifies.

BC3B : lecture des couleurs du bord Inverse du call precedent

  • CA :
    • Il suffit d'appeler ;
  • CF :
    • B contient la premiere couleur et C la seconde ;
    • les registres AF, BC, DE et HL sont modifies.

BC3E : positionne la duree de clignotements des couleurs du bord
Mon dieu, com me cela est proche du Basic.

  • CA :
    • H et L contiennent les durees sur un octet pour chaque couleur ;
  • CF :
    • HL et AF sont modifies.

BC41 : lecture des durées d'exposition des couleurs du bord

  • CA :
    • ne pas fumer ;
  • CF :
    • H et L contiennent les valeurs programmees avec le call precedent;
    • AF et HL sont modifies.

BC44 : remplissage d'un rectangle
Ce n'est pas un Fill mais juste un Cis de zone rectangle. On peut definir la couleur de cet effacement a l'aide d'un masque cree par l'appel du vecteur BC2C, par exemple. Les coordonnees sont exprimees en caracteres.

  • CA :
    • A contient le masque de couleur ;
    • H est la colonne de gauche;
    • D est la colonne de droite ;
    • L est le numéro de la ligne superieure ;
    • E est le numéro de la ligne inferieure ;
  • CF :
    • HL, BC, DE et AF sont modifies.

BC47 : comme ci-dessus, sauf qu'on passe par une adresse écran au lieu de coordonnees

  • CA :
    • A contient le masque de la couleur a appliquer ;
    • HL contient l'adresse écran du bord haut gauche du rectangle a remplir ;
    • D contient le nombre d'octets;
    • E contient le nombre de lignes ;
  • CF :
    • HL, BC, DE et AF sont modifies.

BC4A : inversion des couleurs d'un caractere
C'est l'action que realise le curseur.

  • CA :
    • B est le masque de la couleur du fond;
    • C est le masque de la couleur de l'encre;
    • H est le numéro de la colonne ;
    • L est le numéro de la ligne ;
  • CF :
    • AF, BC, DE et HL sont modifies.

BC4D : fait scroller verticalement l'ecran de 8 pixels
Comme cela se passe en mode caractere, cette routine utilise le CRTC au niveau hardware.

  • CA :
    • B different de 0 pour un scrolling normal (l'ecran monte);
    • Si B=0, l'écran descend dans un scrolling inverse;
  • CF :
    • AF, BC, DE et HL modifies.

BC50 : fait scroller verticalement une fenetre de 8 pixels
Contrairement a la precedente, cette routine travaille obligatoirement en soft, ce qui explique les saccades.

  • CA :
    • B different de 0 pour un scrolling normal;
    • si B=0, l'ecran descend dans un scrolling inverse;
    • A contient le masque de couleur de l'encre ;
    • H contient le numéro de la colonne de gauche;
    • D contient le numéro de la colonne de droite ;
    • L contient le numéro de la ligne du haut ;
    • E contient le numéro de la ligne du bas;
  • CF :
    • AF, BC, DE et HL modifies.

BC53 : conversion de la matrice d'un caractere standard en une autre compatible avec le mode courant
Comme le CPC dispose de modes dont les affichages des caracteres et des pixels sont differents, cette routine se charge de convertir les images binaires des caracteres en masques de points a afficher.

  • CA :
    • HL contient l'adresse de la matrice du caractere de deépart ;
    • DE contient l'adresse d'une zone de memoire libre capable de recevoir la matrice generee (max 32 octets en mode 0) ;
  • CF : AF, BC, DE et HL sont modifies.

BC56 : conversion d'un caractere écran en une matrice binaire de huit octets
Realisation de l'operation inverse de celie du vecteur precedent. Est utile lors des changements de modes si le caractere n' est pas encore stocke sous forme de matrice.

  • CA :
    • A contient le masque de l'encre d'ecriture du caractere ;
    • H contient la colonne ou il est;
    • L contient la ligne ;
  • CF :
    • BC, DE, HL et AF modifies.

BC59 : positionne le mode graphique
Il est possible de preciser la maniere dont seront affiches les pixels.
Quatre modes differents existent: l'affichage avec ecrasement du fond (0) ; le OU logique exclusif avec Ie fond (1) ; le ET logique (2) ; et le OU logique inclusif (3). Ces opérations logiques sont binaires et correspondent à l'algèbre de Boule.

  • CA :
    • A contient le mode d'affichage des points (opération logique de 0 à 3);
  • CF :
    • AF, BC, DE et HL modifies.

BC5C : affichage d'un point sur l'écran
Pas de mode, le fond est ecrase.

  • CA :
    • B contient le masque de l'encre;
    • C contient Ie masque du point;
    • HL contient l'adresse memoire du point;
  • CF :
    • AF est modifie.

BC5F : traçage d'une ligne horizontale
Quoi de plus bete qu'un trait?

  • CA :
    • A contient le masque de l'encre ;
    • DE contient l'abscisse de départ;
    • BC contient l'abscisse d'arrivée;
    • HL contient la ligne ;
  • CF :
    • AF, BC, DE et HL modifies.

BC62 : traçage d'une ligne verticale
Avec les deux derniers vecteurs, on peut faire des croix.

  • CA :
    • A contient le masque de l'encre;
    • DE contient l'abscisse (coordonnee horizontale) ;
    • HL contient l'ordonnee de départ ;
    • BC contient l'ordonnee d'arrivée ;
  • CF :
    • AF, BC, DE et HL modifies.

D'UN TRAIT

Avec tous les composants de la ROM que nous vous avons refiles, vous devez deja pouvoir vous faire de bons petits progs. Dans le prochain numéro, nous attaquerons le gestionnaire cassette. Notez qu'il est aussi compatible avec le lecteur de disquette. C'est ce qui a fait la force du CPC, car lorsque le CPC 6128 est arrive, tous les logiciels 464 passaient sans probleme. Ce n'est pas sans peine que je vous quitte, mais il est maintenant l'heure d'aller me mettre au lit.

Sined, ACPC n°45, oct/nov 92, p26-27

Page précédente : Bidouilles ACPC n°44 - Les vecteurs system
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» firmwareMANUALDATE: 2002-12-03
DL: 694 fois
TYPE: ZIP
SIZE: 60Ko
NOTE:
.HFE: NON

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Assembleur ACPC n°45 - Le directeur rit ( Modification du catalogue AMSDOS )
» Coding » Bidouilles ACPC n°32 - Bip, son and sound
» Coding » Assembleur ACPC n°37 - Les transferts
» Coding » Assembleur ACPC n°41 - Les flags, grands délires
» Coding » Bidouilles ACPC n°47 - Les vecteurs system (5/6)
» Coding » Bidouilles ACPC n°40 - Gestion d'erreurs des routines disques

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 865 millisecondes et consultée 1209 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.