CODING ★ VECTORISER SANS VEXER ★

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

Enfin, nous allons toucher au but. C'est dans ces pages que la dernière ligne droite d'énumération de vecteurs va prendre fin. En tête, nous trouvons actuellement "interfaçage avec le matériel" qui mène d'une longueur d'avance sur "gestionnaire sonore". Lequel des deux va l'emporter?

Ah, vous vouliez programmer système ! Ah, il vous fallait des informations sur le contenu de la mémoire morte de notre bon vieux CPC ! Eh bien voilà, nous en avons presque fait le tour. J'attends maintenant de vous quelques programmes, utilitaires ou non, qui nous permettront de voir que ces pages n'ont pas été vaines. Le meilleur de vos produits sera publié au sein de ce magazine, alors ne vous faites pas prier. Attaquez extemporanément.

Dans le dernier numéro, nous avions laissé les vecteurs à l'étape du Kernel. Ayant débroussaillé ce noyau, nous voici arrivés à l'interfaçage avec le matériel qui est tout de même assez important. Nous pourrons ainsi entrevoir les capacités de la machine, qu'elles concernent le port imprimante, les interruptions ou encore le contrôleur vidéo. Comme dans les derniers épisodes, CA signifie « conditions d'appel », CF « conditions de fin ». Avec tout ça, vous aurez de quoi faire. Et c'est parti!

INTERFACE MATÉRIELLE

Les programmeurs de la ROM ont classé ainsi tous les gestionnaires de mémoire morte, les compteurs, les points d'entrée d'interruptions... Voici la liste de ces vecteurs:

. BD10: positionne le compteur interne à une valeur précise
BD10 est utilisé à l'allumage de la machine pour mettre l'horloge interne à zéro.
CA: DE contient le poids fort de la valeur; HL contient le poids faible.
CF : AF est modifié.

. BD13 : charge un programme en Ram et le lance
Quoi de plus normal qu'un système se charge de cette tâche.
CA: HL contient l'adresse de la routine à appeler pour charger le programme (le vecteur cassette ou disquette accompagné des paramètres adéquats).
CF : les registres modifiés par le pro gramme appelé.

. BD16 : lance un programme d'une ROM de second plan
Il est agréable de disposer de vecteurs indirects permettant d'appeler des routines stockées en ROM.
CA: HL contient l'adresse de la routine; C représente le numéro de la ROM.
CF: Dis monsieur le programme en
Rom, quels registres modifies-tu?

. BD19 : synchronisation avec le CRTC
Appeler BD19 revient à demander au CPC d'attendre que le balai qui génère l'image écran soit arrivé derrière le moniteur.
CA: aucune.
CF: pas plus, pas moins.

. BD1C : positionnement du mode écran
Vous connaissez l'instruction Basic Mode, alors vous connaissez ce vecteur.
CA: A contient le numéro du mode (0,1 ou 2).
CF: AF est modifié.

. BD1F : positionnement de l'offset de la mémoire vidéo
On peut se servir de ce vecteur pour opérer des scrollings hardwares à l'écran.
CA: A contient la base de l'adresse de la mémoire vidéo (&00, &40, &80 ou &CO selon le segment) ; HL contient l'offset (notez que ce dernier ne progresse que par pas de deux).
CF: AF est modifié.

. BD22 : standardisation de la palette
Toutes les encres sont mises dans la couleur précisée (simulation d'effacement d'écran).
CA: DE contient l'adresse sur un vecteur encre (deux couleurs).
CF: AF est modifié.

. BD25 : la palette modifiée (bis)
Comme pour le vecteur BD22 mais agit aussi sur le border.
CA: DE contient l'adresse sur un vecteur encre.
CF: AF est modifié.

. BD28 : initialisation du détournement vers l'imprimante
Il y a du PRINT #8 dans l'air.
CA: pas de paramètre.
CF: AF BC DE et HL sont modifiés.

. BD2B : envoi d'un caractère à l'imprimante avec retour
Si l'imprimante est occupée, le système fera en sor:e d" attendre un peu et rendra la main 3vec un statut d'erreur si besoin est Attention 1 la donnée envoyée est perdue quoI qu'il arrive.
CA. A contient le code ASCII du caractère a envoyer.
CF: AF est modifié Si la retenue (carry) est vraie. tout s'est bien passé. Si elle est fausse, l'imprimante est restée occupée trop longtemps.

. BD2E : test de l'imprimante
Le signal testé se nomme Busy.
CA : rien à faire.
CF: si la retenue est vraie, l'imprimante est occupée.

. BD31 : envoi d'un caractère à l'imprimante sans retour
Pour l'appel de cette fonction, l'imprimante ne doit pas être occupée.
CA : A contient le caractère à envoyer.
CF: la retenue est toujours vraie; AF toujours modifié.

. BD34 : envoi d'une donnée dans le PSG AY3 W8912
Quel nom barbare pour parler du générateur sonore. Si vous voulez en savoir plus, consultez les anciennes rubriques Bidouilles qui se sont étalées sur ce sujet
CA: A contient le numéro du registre; C contient la donnée.
CF : AF et BC sont modifiés.

LES BLOCS DE SAUT

Tous les vecteurs sont rangés en mémoire selon la grande liste que nous avons parcourue ensemble. Si certains ont étés détournés à des fins plus ou moins douteuses, il est possible de les réinitialiser grâce au vecteur suivant

. BD37 : réinitialise les blocs de saut standard
C'est pas un CALL a mais presque!
CA : rien à faire, cool!
CF: AF, BC, DE et HL modifiés.

EN AVANT LA MUSIQUE

N'oublions pas que le CPC ne serait pas ce qu'il est s'il ne disposait pas de son fabuleux générateur sonore. Si celui-ci est très pratique pour les bruitages, car autonome une fois programmé, il n'en va pas de même pour la musique. Les générateurs d'enveloppes qu'il utilise sont en effet trop peu malléables pour être utilisés dans de bonnes conditions. C'est pour cette raison que la ROM du CPC contient des primitives de gestion de files d'attente de notes, sons et enveloppes. Tout ceci est piloté à partir des interruptions et permet de pratiquer la musique sans avoir à s'arracher les cheveux. Inutile donc d'être un grand programmeur en assembleur pour entendre ses mélodies sous leur plus belle forme. Bien entendu, l'utilisation d'un tel système met en œuvre de nombreux vecteurs que nous allons passer en revue dans ces pages. Les structures de données utiles seront vues au fil des besoins.

. BCA7 : initialisation du gestionnaire sonore
À appeler pour que cela fonctionne.
CA : rien à préciser.
CF : AF, BC, DE et HL modifiés.

. BCAA : ajoute un son à la queue sonore
Les notes sont disposées dans une liste à la queue leu leu, et il faut bien disposer d'un gestionnaire permettant de les y introduire. Voici la structure des données à envoyer: canal (1 octet), enveloppe de volume (1 octet), enveloppe de ton (1 octet), . fréquence initiale (2 octets), bruit initiai (1 octet), volume initial (1 octet), durée (2 octets).
CA: HL contient l'adresse du son (il doit se trouver dans lèS 32 Ko de mémoire centrale).
CF : si la retenue est vrai, le son a pu être ajouté. Si elle est fausse, les queues étaient pleines. Dans tous les cas, HL BC, DE et IX sont modifiés.

. BCAD : teste si une queue sonore est pleine
Pratique pour savoir si on peut insérer des sons.
CA: A contient le numéro du canal à tester (1 pour A, 2 pour B et 4 pour C).
CF : A contient l'état du canal testé (4 si le canal est vide, 1 32 s'il joue). AF, BC, DE et HL sont modifiés.

. BCB0 : prépare l'exécution d'une interruption lorsqu'une queue sonore est vide
Il est bon de pouvoir faire un petit truc lorsqu'une musique est finie.
CA: A contient le numéro du canal à tester; HL contient l'adresse du programme à lancer.
CF : AF, BC, DE et HL modifiés.

. BCB3 : remet les sons en route sur un canal
Il est possible de stopper l'émission de sons à l'aide du vecteur suivant
CA: A contient le numéro de canal à remettre en fonctionnement (1 pour A. 2 pour B et 4 pour C).
CF: AF, BC, DE et HL modifiés.

. BCB6 : arrêt de tous les sons
Chut!
CA: si un son était émis, la retenue est vraie.
CF: AF, BC, DE et HL modifiés.

. BCB9 : remet tous les canaux en marche
Inverse l'action du vecteur précédent
CA: rien à faire.
CF : AF, BC, DE et IX modifiés.

. BCBC : initialisation d'une des 15 enveloppes d'amplitude
Comme sous Basic, avec les mêmes paramètres.
CA: A contient le numéro de l'enveloppe ; HL pointe sur les données définissant les amplitudes; BC contient la longueur des données à prendre en compte.
CF: si la retenue est vraie, l'enveloppe a été initialisée et HL incrémenté 16 fois. Dans tous les cas, HL, BC de et HL modifiés.

. BCBF : initialisation d'une des 15 enveloppes de fréquence
Remarques inutiles.
CA: A contient le numéro d'enveloppe; HL pointe sur les données définissant les fréquences; BC contient la longueur des données à prendre en compte.
CF: mêmes remarques que pour le vecteur précédent

. BCC2 : fournit l'adresse d'une enveloppe d'amplitude
Il est pratique de modifier les enveloppes dynamiquement en mémoire. Pour cela, rien ne vaut l'adresse des données convoitées.
CA: A contient le numéro d'enveloppe. CF: si l'enveloppe a été trouvée, la retenue est vraie. Dans ce cas, HL contient l'adresse de l'enveloppe et BC sa longueur. Sinon, HL est modifié et BC préservé. Dans tous les cas, AF est modifié.

. BCC5 : fournit l'adresse d'une enveloppe de fréquence
Pas de commentaire puisqu'on en parle déjà au-dessus.
CA: A contient le numéro d'enveloppe.
CF: si l'enveloppe a été trouvée, la retenue est vraie. Dans ce cas, HL contient l'adresse de l'enveloppe et BC sa longueur. Sinon, HL est modifié et BC préservé. Dans tous les cas, AF est modifié.

LA FIN DES FINS

Vous ne pourrez pas dire qu'on n'aura pas tout fait pour vous donner des informations concernant les vecteurs. Depuis un paquet de numéros, on vous flatte et vous offre le nécessaire à une programmation en assembleur facilitée. Je relance le mini concours. Envoyez vos produits et en échange, ils passeront dans les pages de votre magazine préféré. C'était le dernier épisode de la saga des vecteurs du CPC. Que leur utilisation vous soit propice. En attendant. bonne programmation !

Sined le Barbare, ACPC n°48, juillet 93, p18-19

Page précédente : Bidouilles ACPC n°47 - Les vecteurs system

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

Lien(s):
» Coding » Bidouilles ACPC n°03 - Catalogue décorés
» Coding » Bidouilles ACPC n°42 - La decompression
» Coding » Bidouilles ACPC n°37 - FDC en mode direct
» Coding » Assembleur ACPC n°26
» Coding » Assembleur ACPC n°14 - AS: ÇA C'EST COOL
» Coding » Bidouilles ACPC n°12 - Création de RSX
Je participe au site:

» 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 269 millisecondes et consultée 2269 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.