CODING ★ Callez Sans être colle ★

Bidouilles ACPC n°46 - Les vecteurs system (4/6)

Les quelques mois passés, nous avons commencé à nous taper la liste des vecteurs disponibles dans le système. Nous allons poursuivre cette étude pour que vous disposiez de toutes les informations permettant de programmer en assembleur sans trop vous fatiguer.

Dans le dernier numéro, nous en étions restés au dernier vecteur de gestion d'écran, soit, si je ne m'abuse, &BC62. Nous allons donc attaquer directement le gestionnaire cassette. Notez que lorsqu'on dit cassette, on peut aussi dire disquette puisque les points d'entrée de ces gestionnaires sont strictement identiques. Pourquoi s'étaler sur de longues phrases alors que quelques énumérations suffisent. Comme pour les mois précédents, nous vous donnons 4 indications par vecteur passé en revue:

  1. l'adresse d'appel (indispensable voire primordiale) ;
  2. un bref commentaire sur sa raison d'être (ce qu'il fait) ;
  3. les conditions d'appel passées dans les registres ;
  4. les conditions finales, soit les résultats de l'action émise ainsi que les registres ou zones modifiés.

C'est parti!

BC65 : initialisation du gestionnaire cassette .
Cela permet de remettre en forme toutes les variables système de ce périphérique.

  • CA :
    • Rien à passer.
  • CF :
    • AF, BC, DE et HL modifiés.

BC68 : positionnement de la vitesse d'écriture
Alors là, je ne puis vous en dire plus. A mon avis, il vaut mieux garder la valeur par défaut. Quoi qu'il en soit, je ne pense pas que ce vecteur agisse sur le lecteur de disquette. Je vous refile les commentaires tels que je les ai.

  • CA :
    • HL contient la longueur de la moitié d'un bit à zéro (je ne puis vous dire en quelle unité c'est exprimé) ;
    • A contient la précompensation à appliquer (la précompensation est normalement la valeur à partir de laquelle un réglage doit être effectué. Ici, va savoir...)
  • CF :
    • AF et HL modifiés.

BC6B : affichage des messages
Le gestionnaire donne des messages concernant l'état d'avance de la lecture ou de la sauvegarde d'un fichier en nombre de blocs. Ce vecteur autorise ou inhibe ces messages, comme le fait un point d'exclamation au début du nom d'un fichier.

  • CA :
    • A=0 interdit, dans les autres cas, autorise.
  • CF :
    • AF modifié.

BC6E : mise en route du moteur cassette
Rien à dire sur ce vecteur si ce n'est qu'il n'influence pas le lecteur de disquette.

  • CA :
    • aucune.
  • CF :
    • A contient l'état précédent du moteur. De plus, si le moteur fonctionne, la retenue (Carry) est à un.

BC71 : arrêt du moteur cassette
Voir &BC6E.

  • CA :
    • Aucune.
  • CF :
    • comme le vecteur précédent.

BC74 : restauration de l'état du moteur cassette
Pour remettre le moteur dans l'état dans lequel on l'avait trouvé avant d'intervenir.

  • CA :
    • le contenu de l'accumulateur récupéré par l'un des deux vecteurs précédents.
  • CF :
    • voir &BC6E.

BC77 : lecture du premier bloc d'un fichier avec installation du tampon de transfert
Pour que le système sache quel est le type du fichier à lire, il faut avant tout qu'il en charge le premier enregistrement de 128 octets.
Grâce aux informations qu'il contient, toutes les variables système sont initialisées.

  • CA :
    • B contient la longueur du nom de fichier;
    • HL l'adresse du nom de fichier;
    • DE l'adresse du tampon de 2 Ko servant à recevoir les données en provenance du disque.
  • CF :
    • si tout se passe bien, le carry vaut un et le drapeau de zéro est nul. Dans ce cas:
      • HL pointe sur le tampon contenant l'en-tête du fichier;
      • DE pointe sur les données;
      • BC contient la longueur du fichier;
      • A est le type du fichier.

BC7A : fermeture du fichier
A ce sujet, fermons-la!

  • CA :
    • Réduites à néant.
  • CF :
    • Si tout se passe bien, le carry vaut un. Dans tous les cas, HL, BC, DE et AF sont modifiés.

BC7D : abandon de la lecture et fermeture du fichier actif

  • CA :
    • sans commentaire.
  • CF :
    • AF, BC, DE et HL sont modifiés.

BC80 : lecture d'un octet

  • CA :
    • pas de condition.
  • CF :
    • Si tout se passe bien, le carry vaut un et zéro vaut zéro.
    • A reçoit alors le caractère lu. 
    • Si le carry et zéro sont tous deux nuls, alors la fin de fichier est atteinte.

BC83 : transfert d'un fichier en mémoire

  • CA :
    • HL doit pointer sur l'adresse où devront arriver les données.
  • CF :
    • si le carry vaut un et zéro zéro, HL pointe sur le point d'entrée de la routine chargée.
    • Dans tous les cas, HL, BC, DE, IX et AF sont modifiés.

BC86 : annulation de la lecture d'un octet
Lorsque vous lisez une donnée par l'intermédiaire de la routine &BC80, il vous est possible de la remettre dans le tampon disque en appelant ce vecteur.

  • CA :
    • néant.
  • CF :
    • rien.

BC89 : test de la fin de fichier
Il est toujours bon de savoir où on met les pieds.

  • CA :
    • pas de condition.
  • CF :
    • si le carry et le zéro valent zéro, alors la fin de fichier est atteinte.
    • Si le carry vaut un, alors on peut lire tranquille.

BC8C : ouverture d'un fichier en sortie
Dans ce fichier, nous pourrons écrire à loisir.

  • CA :
    • B contient la longueur du nom de fichier;
    • HL l'adresse du nom de fichier;
    • DE l'adresse du tampon de 2 Ko disponible pour le fichier.
  • CF :
    • Si tout se passe bien, le carry est vrai et le zéro est faux. 
    • Dans ce cas, HL pointe sur une zone mémoire qui sera écrite en début de chaque bloc de données.

BC8F : fermeture propre d'un fichier de sorties
Faire les choses proprement n'est pas forcément mauvais.

  • CA :
    • Pas de conditions.
  • CF :
    • Si tout se passe bien, le carry vaut un et le zéro zéro.
    • Dans le cas où il n'existait pas de fichier ouvert, les deux drapeaux sont nuls.

BC92 : fermeture immédiate de fichier de sorties
Il arrive qu'on n'ait pas envie d'écrire le tampon de données sur bande. Dans ce cas, ce vecteur fait l'affaire.

  • CA :
    • Sans.
  • CF :
    • HL, BC, DE et AF sont modifiés.

BC95 : écriture d'un caractère dans le fichier de sortie
Pourquoi se poser plus de questions?

  • CA :
    • A contient le caractère à écrire.
  • CF :
    • Si l'opération est réussie, alors le carry est à un et le zéro à zéro.
    • Si le fichier n'était pas ouvert, alors les deux drapeaux sont faux.
    • Dans tous les cas, AF et IX sont modifiés.

BC98 : transfert d'une zone mémoire vers la cassette
Il est bon de pouvoir sauver des données.

  • CA :
    • HL contient l'adresse mémoire des données;
    • DE le nombre d'octets à écrire;
    • BC l'adresse du point d'entrée;
    • A est le type du fichier.
  • CF :
    • comme pour le vecteur précédent, mais HL, BC et DE sont aussi altérés

BC9B : génération du catalogue
Mieux vaut savoir de quoi il retourne.

  • CA :
    • DE doit contenir l'adresse du tampon servant à recevoir les informations du catalogue.
  • CF :
    • Si tout se passe bien, le carry vaut un et le zéro zéro.

BC9E : écriture d'un enregistrement sur bande

  • CA :
    • HL contient l'adresse des données à écrire;
    • DE contient le nombre d'octets à écrire;
    • A contient le caractère de synchronisation.
  • CF :
    • Les registres AF, HL, BC, DE et IX sont modifiés.
    • Si tout se passe bien, le carry est vrai.

BCA1 : lecture d'un enregistrement cassette

  • CA :
    • HL contient l'adresse en mémoire où seront transférées les données.
    • DE contient le nombre d'octets à lire;
    • A contient le caractère de synchronisation;
  • CF:
    • Comme pour le vecteur précédent.

BCA4 : comparaison de données entre la mémoire et le fichier
Mieux vaut être sûr!

  • CA :
    • HL contient l'adresse des données à comparer;
    • DE contient le nombre d'octets à comparer;
    • A contient le caractère de synchronisation.
  • CF :
    • Comme pour le vecteur précédent.

C'en est fini pour le vecteur cassette. Nous allons poursuivre par les adresses croissantes pour arriver maintenant au gestionnaire sonore. Il faut s'en méfier, car c'est un des plus énervants à manipuler. Seul le grand Poum manie ces adresses avec grâce et précision. Je vais donc lui laisser l'honneur et la joie de vous en parler dans un prochain numéro. Je me contenterai de poursuivre par les vecteurs du kernel. Si ces dernières sont moins bruyantes, elles n'en sont pas pour autant moins importantes.

PAS DE PÉPINS DANS LE NOYAU

Le kernel est le centre de  gestion du CPC. Il contient tous les vecteurs d'interruption ainsi que la gestion des plans mémoire, surtout en ce qui concerne les ROM. Les RSX sont aussi pris en charge par cette partie du système. Sur CPC, les interruptions gèrent de nombreuses et diverses temporisations. La couleur ainsi que la musique sont prises en charge par ces files d'événements. Cette partie est donc très intéressante à utiliser.

BCC8 : remise en forme et nettoyage de toutes les files d'interruption ainsi que des chronomètres
Il faut bien pouvoir faire le ménage dans tout ce fouillis.

  • CA :
    • pas de condition.
  • CF :
    • DE contient l'adresse du vecteur d'interruption appelé par défaut.
    • B la ROM sélectionnée, si c'est le cas.
    • Si le programme est en RAM, C contient l'adresse de la ROM à sélectionner.
    • AF et HL sont modifiés.

BCCB : recherche et initialisation de toutes les ROM de second plan
Mieux vaut savoir où trouver ses petits.

  • CA :
    • DE-HL forment la plage dans laquelle doit se faire la recherche de ROM.
  • CF :
    • DE-HL contient la nouvelle plage de gestion des ROM.
    • AL et BC sont modifiés.

BCCE : initialisation d'une ROM de second plan
Il peut y avoir deux ROM sur un même plan.

  • CA :
    • C contient l'adresse de sélection de ROM à tester;
    • DE-HL contient la plage dans laquelle la ROM doit être recherchée.
  • CF :
    • DE-HL contient la plage de mémoire dans laquelle se trouve la ROM installée. 
    • AL et BC sont modifiés.

BCD1 : installation d'un RSX
Pratique les nouvelles commandes.

  • CA :
    • BC contient l'adresse de la table des commandes RSX ;
    • HL pointe sur une zone libre de quatre octets pour la gestion par le système.
  • CF :
    • DE est modifié.

BCD4 : recherche d'un RSX dans les rom

  • CA :
    • HL pointe sur le nom du RSX.
  • CF :
    • Si le RSX existe, HL contient l'adresse en mémoire,
    • C le plan mémoire visé et Carry vaut un.
    • Dans tous les cas, AF, BC et DE sont modifiés.

AU SUIVANT

Dans le prochain numéro, nous passerons en revue le reste du kernel ainsi que le gestionnaire sonore que beaucoup d'entre vous attendent certainement. En attendant, je vous conseille fortement de relire ces caractéristiques et d'essayer d'utiliser les vecteurs cités dans de petits programmes.

C'est la meilleure manière de ne pas se retrouver planté lorsqu'on les intègre à de grosses applications plus difficiles à debugger.
A bon programmeur, salut...

Sined le barbare à frites, ACPC n°46 Jan93, p24-25

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

Other platform tool:
» firmwareMANUALDATE: 2002-12-03
DL: 721 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 » Bidouilles ACPC n°03 - Catalogue decores
» Coding » Assembleur ACPC n°14 - AS: ÇA C'EST COOL
» Coding » Bidouilles ACPC n 03 - Les Instructions supplemetaires du Z80
» Coding » Assembleur ACPC n°40 - Le CARRY
» Coding » Assembleur ACPC n°48 : Compresse des Compress
» Coding » Assembleur ACPC n°41 - Les flags, grands délires

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

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