CODING ★ UN BIDOUILLEUR VAUT MIEUX QUE DEUX DOUILLEURS ★

Bidouilles ACPC n 04 - Le PSG (1/2)

Salut les potos ! Alors, ça boume depuis le mois dernier ? Je l'espère car qui ne va pas bien ne bidouille pas bien. Comment voulez-vous que nous vous aidions si vous ne posez pas de questions ? Alors suivez mon conseil, vous dormez vingt à trente heures d'affilée et vous me concoctez une petite bafouille, que ce soit pour demander ou pour expliquer un point sombre du CPC. Allez, au dodo (moi, je prends la petite).

QUI VA PIANO VA SONO, QUI VA GUITARE VA PEINARD

Boîte de petits pois et damnation, je crois que je suis le meilleur pour faire les intertitres les plus nuls de la presse mondiale. M'enfin , il  faut bien meubler un peu toutes ces pages que l'on nous donne à écrire tous les mois sous la menace du fouet (ô combien charmant !) de Miss X. Tiens, au passage. tant que je parle de Miss X. je dois signaler à mes potos bidouilleurs préférés que des bidouilles sont éparpillées partout dans les Cent Pour Cent. Si vous désassemblez les Pokes de Spock. gérés par le spécialiste Cent Pour Cent génial Robby. vous trouverez des routines hypercanons en tout genre . Le courrier est lui aussi bourré d'un tas d'astuces diverses et quant à nos sept nains, ils renferment drs trosors dont nul n'oserait imaginer la réelle ampleur. Alors dévorez-le, ce canard, et dans tous ses petits coins. Non mais, sinon, à quoi ça sert que tout le monde se décarcasse ? Mettez du piment dans votre : vie et en avant la musique. Scrogneugneu, j'ai encore oublié de dire un truc dans cette intro. Je liens à remercier tous les lecteurs qui m'ont envoyé des renseignements supplémentaires au sujet des codes de contrôle utilisés par le Basic. C'est sympa de voir que des gens lisent vos articles et qu'ils ont pitié de vous. Merci donc et surtout, comme personne n'est parfait (faut dire que je suis particulièrement tête en l'air), n'hésitez pas à me réprimander si je .fais une erreur. OK, je crois que je n'ai rien oublié, alors passons à la suite.
 

ORG   &A000
DI
LD   B,&F4   ; Port d'acces au bus du PSG
OUT  (c),A   ; Ecrire du numéro de registre
IN   A,(c )  ; Lecture de l'environement
OR   &C0     ; BC et BDIR a 1
OUT  (C),A   ; PSG : va lire , c'est un ordre
AND  &3F     ; BC et BDIR a 0
OUT  (C),A   ; PSG dodo
LD   B,#F4   ; Bus du PSG
OUT  (C ),C  ; La donnee est posee sur le bus
LD   B,#F4   ; Port de controle du PSG
LD   C,A     ; L'environnement est toujours dans A
OR   &80     ; BDIR est force a 1
OUT  (C),A   ; Le PSG va lire la donnee
OUT  (C),C   ; PSG redodo
RET

JOYSTICK, TAC TAC, POUM POUM

Un lecteur sympa nous a envoyé une bidouille tout aussi sympa mais un peu dure pour les doigts. Elle permet simplement d'émuler les joysticks, cela bien sur lorsqu'on a cassé ses bâtons de joie préférés. Eric Candella le dit d'ailleurs très bien, je cite : "Cela nécessite une certaine gymnastique des doigts. Pour le tour de force, il faut appuyer simultanément sur les touches Contrôle et Del. Le plus dur est de les tenir enfoncées tout en actionnant grâce à de simples pressions, les touches suivantes pour obtenir les actions citées." Tu  fait l'essai personnellement et je peux vous dire que cela n'est pas du tout du gâteau (mes doigts s'en souviennent)- Si vous voulez devenir prestidigitateur, je vous conseille ce genre d'exercice. Bonnes crampes a tous.

BORDER DEBORDE

Voici encore un petit listing qui a davantage sa place ici, dans les bidouilles, plutôt que dans les 7 nains (d'abord, dans les 7, il n'y a plus de place, et. en plus, il fera le sujet d'une prochaine étude basée sur les registres du processeur vidéo). C'est que c'est un gros morceau, le 6845, mais à nous tous, nous arriverons à le connaître par coeur, ensemble (n'est-ce pas Léonard ?). Arnaud Christophe (ou le contraire, excuse-moi, mais tu ne l'as pas écrit en assembleur, alors j'ai du mal a comprendre) nous a envoyé ce petit programme pour nous épater. Eh bien figurez-vous qu'il a réussi son coup. Malheureusement, ce mode n'est pas vraiment gérable car vous pourrez remarquer qu'une partie du haut de l'écran est affichée en bas. ou le contraire. Donc, cet essai n'est intéressant que par le fait que le Border s'est fait la jaquette dans le fond du moniteur. Allez, tapez cela et sauvez-le sur votre support bidouilles, car il le mérite bien, le programme.

DES CALLS QUI COLLENT AU POIL

Alors là, bravo. Voici un lecteur (J. Gautier, qui aurait pu mettre son prénom en entier) qui a tout compris et qui nous envoie, par te fait, quelques CALLS très utiles sur CPC. Et paf, on décolle.

CALL &BA10,MODE

Mode est une valeur de 0 à 2. comme l'instruction Basic du même nom. Ce vecteur a. seulement sur 6128 malheureusement, le suprême honneur de changer de mode sans faire de CLS. Géant, non ? Il arrive parfois des choses étranges à l'écran mais cette option peut se révéler utile dans les jeux d aventures, surtout si elle est utilisée avec le Call suivant :

CALL &BC06,PFDAE

PFDAE n'est pas un mot vulgaire mais simplement les initiales de Poids fort de départ de l'adresse écran. Bicôse que ce vecteur-là permet de déplacer l'écran qui pourra être logé à l'adresse &4000 (PFDAE = &40) ou, comme à l'initialisation, en &C000 (PFDAE = &C0). Utilisé avec le Call précédent, cela donnera accès à deux écrans de deux modes différents, sans galipettes ni perte de temps. Là encore, bravo !

LE CPC A COEUR OUVERT

Ah. voilà enfin le moment où nous allons nous mettre réellement au travail. Nous allons essayer de vous expliquer comment fonctionne le CPC. au niveau machine, sans trop parler des composants qui portent des noms à se pendre et oui ne nous intéressent que dans le cadre de leur utilisation au sein CPC. Nous vous prévenons que vous n'aurez pas droit, comme il est de tradition dans la plupart des revues informatiques, à la copie intégrale de Clef pour CPC (que tout le monde devrait posséder) ou à la traduction d'un quelconque carnet technique réservé aux ingénieurs en électronique. Nous allons essayer de vous montrer simplement comment aller droit aux différents composants essentiels qui entourent le Z80. Ils ne sont pas nombreux mais déjà assez

PPI : POUR PERMETTRE
L'INTERFAÇAGE

Le PPI aussi appelé 8255A. est un bon vieux circuit de INTEL, dont la seule raison d'être est de faciliter les entrées-sorties. Qu'est-ce que les entrées-sorties, diront certains ? Eh bien je répondrai simplement que tout ordinateur n'est utilisable que grâce à ces organes qui lui permettent de communiquer avec ['extérieur. Tout passe par ces E-S, du clavier au lecteur de disquette en passant par la vidéo, sans oublier le lecteur de cassette et l'imprimante. Bref, tout n'est que E-S. Pourquoi y a-l-il un PPI dans le CPC ? Je ne suis pas électronicien, donc je ne peux pas répondre à cette question sans dire de sottises (les pros. à vos stylos ; help !). Tout ce dont je suis sûr. c'est que ce truc existe et qu'il faut faire avec, et là, je connais parfaitement la question (chacun son taf),
 

10 '   Apuborderviraidelaicran
20 INK 0,0:INK 1,26:MODE 2
30 a=&BC00:b=&BD00:h=HIMEM
40 OUT a,2 : OUT b,50
50 OUT a,6 : OUT b,34
60 OUT a,7 : OUT b,35
70 OUT a,1 : OUT b,0
80 FOR i=1 TO 52:PRINT USING "&";"   Vive Amstrad Cent Pour Cent   ";:NEXT
90 OUT a,1 : OUT b,48
100 FOR i=1 TO 3000:NEXT:CALL &BB06:CLS
110 OUT a,1 : OUT b,40
12B OUT a,2 : OUT b,&2E
130 OUT a,6 : OUT b,&19
140 OUT a,7 : OUT b,&lB
150 IF INP(&F500) AND 10<>0 THEN OUT a,7 : OUT b,&1E

ENCORE DES REGISTRES

Ce PPI possède trois registres distincts. Ils sont normalement appelés A. B et C. mais, personnellement, je trouve que cela embrouille particulièrement la situation. Nous appellerons donc ces différents registres par leur adresse respective, &F4XX &F5XX et &F6XX. J'en vois d'ici qui se marrent en disant que je me suis encore trompé dans mes valeurs hexadécimales. Eh bien Us ne devraient pas. car les XX peuvent être remplacés par n'importe quelle valeur sans que cela change quoi que ce soit aux effets engendrés. Pour plus de simplicité, nous dirons que XX vaut normalement zéro. Il existe un quatrième registre sur le PPI. &F700. mais son cas est un peu particulier. Il est le registre de contrôle et permet différentes opérations sur les modes d'utilisation du PPL ou sur le positionnement des bits de &F600. Dans notre cas. c'est-à-dire si l'on s'en tient à utiliser le PPI dans le cadre du CPC. nous n'avons absolument pas besoin de nous servir de ce registre : le mode de transmission de données est toujours le mode 0 et le positionnement des bits de C se fait plus rapidement directement par un. Out approprié. Si vous tenez tout de marne à connaître le fonctionnement exact de ce registre, écrivez-nous. Après avoir parlé de ce registre inutile sur notre machine préférée, abordons maintenant les ports intéressants du PPI. &F400. le port A. est branché directement sur le bus de données du processeur sonore. Etant donné que le port &F400est bidirectionnel, c'est-à-dire qu'il fonctionne aussi bien en entrée qu'en sortie, il n'est pas difficile de deviner que c'est par là que les données transiteront entre le PSG 'et le Z80. &F500 n'est utilisable qu'en lecture. Il ne servira donc qu'a passer des informations du monde extérieur vers le Z80. Il rend compte de l'état de trois périphériques en accordant un bit à chacun. Le bit 7 est directement en relation avec l'entrée cassette et permettra donc de lire ce bon vieux support magnétique. Le bit 6. lui, est témoin de ce qui se passe sur l'imprimante. Il indiquera si l'imprimante est libre ou non (signal Busy pour les intimes). Enfin, le bit 0 est

 

Action                ;  Joystick  1                    ;   ;Joystick  2
----------------------------------------------------------------------
Droite                ;  J ( > sur azerty )               ;  T
Gauche                ;  Grand Enter                    ;   ;R
Haut                  ;  CLR                              ;  6
Bas                 ;   ;[ ( < sur azerty )               ;  5
feu   1               ;  F4   (pavé numérique)             ; G
Feu   2               ;  TAB                              ;  CLR

CALL  &BA10 , MODE
CALL  &BC06 , PFDAE


 

BDIR BC     Fonction
----------------------------------------------------------------------
0    0      Psg fait dodo
0    1      Le Psg met la donnée du registre courant sur son bus.
1    0      Le Psg lit la donnée située sur son bus
1    1      Changement de registre

directement relié au processeur vidéo et rend compte de l'interruption de fin de balayage écran (l'instruction Frame se sert de ce bit pour connaître la position du faisceau de balayage sur l'écran). Tous les autres bits de ce port du 1 au 5, ne sont pas utilisables, n'étant pas reliés à des organes vitaux de la machine. &F600 est un registre très intéressant, car il contient déjà plus de commandes de périphériques que ses petits frères. Les bits 7 et 6 sont les bits de contrôle du processeur sonore (cool, nous verrons cela un peu plus loin). Le bit 5 est le bit d'écriture cassette et le 4, la télécommande du moteur de cette même mémoire de masse. Les bits 0 à 3 restants servent au scanning du clavier et contiendront le numéro de ligne clavier à scruter. Chacun de ces registres est accessible par un In et, ou. un Out, selon sa direction. Ecrire en &F500 serait, par exemple, une aberration, car ce port ne peut être que lu. Bon, cela vu rapidement, passons maintenant au PSG.

PSG : POUR SIMPLIFIER LES GALIPETTES

Nous avons vu précédemment que ce processeur, en l'occurrence le coprocesseur sonore, c'est-à-dire le PSG AY3 W8912, était accessible par le port &F400 et potables grâce aux deux bits de poids forts du port &F600. "Mais comment ça marche 7 ?", disait le brave petit Toto à son papa qui finissait paisiblement son journal devant la télé, l'oreille collée au poste de radio. "Ben... heu... pfff... bof... t'as fait tes devoirs, toi ? ?", fut la seule réponse que le petit Toto réussit à sortir de la bouche de son papa avant qu'il se mette à ronfler bruyamment C'est pourtant pas compliqué, il suffit de savoir à quoi servent les signaux du port &F600. Le bit 7, appelé couramment BDIR (.bit de direction), doit contenir la direction du PSG. S'il est à un, le PSG devra lire son bus de données (&F400). Sinon, et si on le lui demande, il écrira le contenu du registre en cours sur son bus. Le bit 6 (BC : bit de commande) de &F600 sert à ordonner une action au PSG. Mais voici un tableau récapitulatif.
 

BDIR   BC   Fonction
-----------------------------------------------------------------
0      0    Psg fait dodo
0      1    Le Psg met la donnée du registre courant sur son bus.
1      0    Le Psg lit la donnée située sur son bus
1      1    Changement de registre

Comme vous le voyez, cela parait simple. Mais ce n'est pas tout car le gentil W8912 possède une manière de lire les données assez spéciale. Voici la marche à suivre. D'abord, il faut savoir qu'il n'est possible d'accéder qu'à un seul registre du PSG à la fois. Disons que. à titre d'exemple, nous allons mettre la valeur 12 dans le registre 1. Première étape, mettre le numéro du registre, ici 1, sur le port &F400. Cela fait il faut dire au PSG de lire la donnée en mettant BDIR et BC à 1. Cela ne doit pas être fait n'importe comment, car l'environnement du port &F600 doit être préservé. Une lecture du registre &F600 est obligatoire. Il ne reste plus alors qu'à forcer les deux bits de commande à 1, par un OR &C0 par exemple. L'écriture de la valeur obtenue forcera le PSG à lire le numéro de registre préalablement posé sur le bus. Il faut maintenant dire au PSG d'aller se reposer, en mettant ses bits de commande à 0 par un AND &3F par exemple, et toujours en faisant attention à l'environnement. Voilà, nous avons forcé le registre 1 à être le registre courant. Il suffit maintenant de mettre 12 sur le bus du PSG (&F400) et de dire au PSG de lire la donnée, en mettant simplement BDIR à 1 (attention à l'environnement du port &F600). La petite routine assembleur qui suit permet de mettre dans le PSG une valeur dans un registre précisé. Les conditions d'entrée sont les mêmes que celles du CALL &BD34. c'est-à-dire que A contient le numéro de registre et C la donnée.

PEUT MIEUX FAIRE

Je suis absolument désolé de ne pas avoir pu parler ici de tout ce que j'aurais souhaité, mais il faut dire qu'il y aurait de quoi écrire plusieurs livres. Le mois prochain, nous verrons ensemble les différents registres du 8912 et comment faire sa propre scrutation clavier. Bon, eh bien salut et surtout j'insiste, bon courrier. Tchao. Sined le Barbare

Sibar le Barbare , A100% n°4 , p72-73-74

Page précédente : Bidouilles ACPC n°03 - Catalogue decores

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