CODING ★ BIDOCHONS BIDOUILLARDS ★

Bidouilles ACPC n°14 - Les secrets du GATE ARRAY (1/2)

Comme on en parle souvent, mais que personne ne le connaît vraiment, nous allons essayer de développer nos connaissances communes portant sur le gai taré. Ce personnage aux modes étranges et aux couleurs pas nettes qui a beaucoup d'ennuis avec sa mémoire. Certains disent qu'il habite parfois à ROM, d'autres racontent qu'il vivait à RAM. A nous d'accaparer ses secrets.

Avant tout, le blabla habituel, les ragots des bas quartiers, sans lequels je ne serais pas ce que je suis mais quelqu'un d'autre. Je tiens à vous présenter personnellement un nouveau fanzine dont Cent Pour Cent est plus ou moins le parrain sans avoir rien à y voir. Envoyé par le grand sachent sur Terre, il s'appelle saint Axéror et est fait par un frère de Mélini ; j'ai nommé Clod. Syntax Error est un des meilleurs fanzines que j'ai jamais connu, et lui au moins, il ne se prend pas au'sérieux. Alors que tous les fan-zineurs fassent claquer le répondeur de Clod au (1) 47 39 12 13. Le numéro 1 était génial, le second sera gigantesque. Que petite poussière d'octet dans la prairie protège tous les créateurs de fanzines sympa et qu'elle dirige leur route vers Cent Pour Cent. Nous attendons vos œuvres, et que les fanzines pleuvent. Hugh !

LE GAI TARE RAME VERS LE KO

Vous avez déjà dû entendre parler du gate-array, ce composant qui fait tout le secret du CPC. C'est le seul chip qu'Amstrad cache et dont les caractéristiques exactes sont enfermées au fin fond d'un abri anti-atomique en plein centre d'un champ de mines dont seul A. M. Sugar en personne a le plan. Bref, lorsqu'on veut savoir ce que cette petite boîte renferme, on se fait gentiment éjecter direction les fraises, de manière relativement peu délicate pour une partie charnue que je ne citerai pas. Si on ne connaît pas la composition intégrale et précise de ce tas de silicium, on sait tout de même plein de choses au niveau du software sur ce tableau-portail. En clair, et avant tout, il génère les interruptions du CPC 300 fois par seconde. Dans un sens, cela veut dire que le zaidka-treuvin se fait casser les bits toutes les 3,3 microsecondes. Vous comprendrez alors facilement que ce petit bonhomme refuse parfois de faire le moindre effort pour vous aider à débugger les programmes récalcitrants. Mais le petit composant dont nous parlons gère aussi la Ram, la Rom, le mode écran, les couleurs, la palette... Et j'en passe, sans quoi il passera en seize bits tant ses chevilles enîleront. Dans le cadre de cet article, nous allons aborder les manipulations en assembleur, parce que le Basic est laissé aux initiations de Poum. On ne va tout de même pas lui ôter le pain de la bouche ! Alors, je vous laisse avec le gai taré et sachez, à titre indicatif, que je quoi que ce soit. Amen !

PAS DE COQUILLES, UN PETIT COUP DANS LES BITS

Ce composant, situé sur le port &7Fxx, pilote tant de choses qu'il ne pourrait avoir assez de bits pour contrôler tout ce qu'il a à gérer, Comme les technicos hardos de chez Amstrad ne sont pas des greuloteux, ils ont décidé de se servir de deux bits pour sélectionner plusieurs commandes qui agiront sur des points différents selon la configuration choisie. Ces bits seront donc appelés par moi-même tout seul, les bits de contrôle (voilà un nom qu'il est joli !!!). Donc, les deux bits 6 et 7 de poids fort permettent de choisir quatre possibilités de commandes. Ces quat-res codages nous donnent les configurations suivantes :

1/ Bit 7=0 et 6=0 : sélection du registre contenant le numéro d'encre. Quand en Basic, vous lancez une commande INK, le premier indique le numéro d'encre qui sera utilisé par le PEN. Eh bien là, c'est la même chose, sauf qu'il faudra procéder en deux temps, mais on va en causer plus tard.

2/ Bit 7=0 et 6=1 : sélection de l'encre à mettre dans le registre de palette validé par la commande ci-dessus suscitée. Ici, on peut dire qu'on agit sur le second paramètre de la commande INK. Ainsi, la couleur désirée (de 0 à 27) sera déposée dans le numéro d'encre précédemment validé.

3/ Bit 7=1 et 6=0 : commutations Roms, gestion du diviseur d'interruptions et du mode écran. Z'inquiétez pas, on va en causer plus loin.

4/ Bit 7 = 1 et 6= 1 : encore des commutations, mais de Ram et sur 6128 cette fois.

Pas mal, non ? On en cause plus tard, qu'on a dit, non mais alors.

LES COUPS ET LES DOULEURS

En Basic, pour gérer les couleurs et la palette, il suffit de faire un INK. quelque chose, virgule quelque chose, et le tour est joué. Hep ! Je vois un petit malin dans le fond qui me dit que la commande INK peut prendre plus de deux paramètres. Bien entendu, mon p'tit bonhomme, mais faut pas oublier que c'est le Kernel (grand maître du CPC sans qui rien ne fonctionnerait), qui change les couleurs sous interruptions, et non pas le gai taré qui gère ce clignotement d'encre automatiquement. Donc, si vous voulez exécuter la commande INK 1,2 en assembleur, sans passer par les routines systèmes, il vous faudra procéder en plusieurs étapes, de la manière suivante, par exemple :

ORG #9000 ; programme commencer en 9000
ENT $ ; programme débuter ici
LD BC,#7F01 ; B pointer sur GA et C contient nx encre (6=7=0)
LD A,#41 ; A contient couleur (7=0 et 6=1)
OUT (C),C ; sélection du numéro d'encre
OUT (C),A ; affectation de la couleur à l'encre sélectionnée
RET ; c'est fifi nini.

Bon, à priori, et à posteriori , pas de jaloux, il y en aura pour tout le monde, ce truc marche comme un camion tout neuf. Comment fonctionne cette routine ? Elémentaire mon cher Watson (va ouvrir). On fait pointer B sur le port 7F hexadécimal, qui donne sur le gate-array. Le registre C contient le numéro d'encre à sélectionner, c'est-à-dire que ses bits 6 et 7 sont à zéro, et que ses bits de 0 à 3 contiennent le numéro d'encre. Le registre A est initialisé avec le numéro de couleur à déposer dans l'encre choisie, donc son bit 6 est mis à un et son bit 7 est laissé à zéro. Vient alors le moment de sélectionner l'encre et d'y forcer la couleur par les deux OUT et l'affaire est close.

JE SUIS PAS DE SON BORD

Si vous voulez influencer le border, simple comme bonjour, il suffit de mettre le bit 4 de sélection d'encre à 1. Dans ce cas, et dans ce cas seulement, les bits 0 à 3 seront totalement négligés. Les bits de contrôle ont toujours la même configuration, ce qui évite de se casser la tête en tentant de se rappeler de dix mille manipulations différentes. Ainsi, un BORDER 5 s'écrira en assembleur :

ORG #9000 ; programme toujours commencer en 9000
ENT $ ; programme toujours débuter ici
LD BC,#7F10 ; B pointer sur GA et C contient l'ordre border
LD A,#45 ; A contient couleur (7=0 et 6=1), facile
OUT (C),C ; sélection du numéro d'encre comme d'habitude
OUT (C)A ; affectation de la couleur à l'encre sélectionnée
RET ; c'est fifi nini.

Un petit truc, lorsque vous vous amuserez avec cette routine, essayez de laisser le bit 5 à zéro, parce que je n'ai toujours pas compris à quoi il sert. Pour le coup, c'est un peu frustrant, mais que peut-on faire lorsque la science infuse (tilleul menthe) vous délaisse comme une vieille chaussette trouée ? Dans tous les cas, si des espions du GICAST (groupe d'intervention contre amstrad sugar trading) ont réussi à dérober les plans du gate-array, je vous supplie à genoux de me les envoyer le plus vite possible. Merci ! Le contraire sera puni d'une peine de décapitation précoce.

APUPLASS, L'HOMO-SAPIENS

Eh oui, j'ai encore plein d'aventures à vous raconter sur le brave gai taré, mais je vois que les signes libres dans cette page me manquent, alors je me sens obligé de vous laisser rêver encore un peu à toutes les possibilités qui restent à exploiter de ce composant qui est vraiment le Cœur du CPC. Le mois prochain, nous allons parler des contrôles de modes, de mémoire morte ou vive, et du reste. Alors si vous nous êtes fidèles, vous savez ce qui vous reste à faire par Krom. Pour ne pas vous ennuyer plus avant, je vais retourner derrière mon clavier pour essayer de planter le bit 5.

Sined le gai luron , ACPC n°14

Page précédente : Bidouilles ACPC n°13 - Bidouilles pas bidon - MODE 1 en 13 couleurs

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

Lien(s):
» Coding » Bidouilles ACPC n°47 - Les vecteurs system (5/6)
» Coding » Assembleur ACPC n°44 - La programmation HARD du PSG
» Coding » Bidouilles ACPC n°37 - FDC en mode direct
» Coding » Assembleur ACPC n°35 - Dossier assembleur
» Coding » ASM 48: Quand Elmar fait des siennes
» Coding » Assembleur ACPC n°26
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
Page créée en 015 millisecondes et consultée 2597 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.