CODING ★ LES AVENTURES DU CRTC OU COMMENT REDEFINIR L'ECRAN DE SON CPC ? ★

Redefinir l'écran de son CPC (Amstar)

Ça commencé avec TEMPEST. Depuis, les choses ont évoluées, principalement avec ARKANOID. Les éditeurs en avaient marre de tout cet espace mort autour d'un ridicule écran parallélépipédique, d'un BORDER monochrome gardant en otage des lutins désireux de savoir ce qui se passe au-delà de leur dimension.
REVOLUTION : pourquoi ne pas couper ce qui est de chaque côté pour le mettre au-dessus et en-dessous ?

Au moins, ça donnerait une nouvelle dimension aux jeux... et à l'écran ! Aussitôt dit, aussitôt cogité, aussitôt fait. Chers lecteurs, tonton Fred va vous faire goûter les fruits de ses recherches dans le domaine de la redéfinition de l'écran, avec en illustration une petite animation continue qui devrait vous rassurer quant au fonctionnement parfait de cette bidouille du tonnerre qui fera de vous des pros. Et pas de risque de rester sur la touche. Il n'y a pas une once de langage machine, c'est du 100% BASIC ! Alors, contents ?

CET AIR. T'ESSAIES ?

Tout d'abord, on va s'Intéresser de plus près à une petite bête appelée HD 6845. Mais appelez-ma CRTC, ça fait plus sympa ! C'est le contrôleur vidéo de notre bécane préférée, c'est-à-dire que ce circuit Intégré produit tous les signaux électriques qui vont commander l'affichage du moniteur. Comme beaucoup de circuits spécialisés, notre CRTC possède des registres dont les contenus peuvent être modifiés directement depuis le BASIC (Merci Mystère SUCRE), Ainsi, les registres qui accapareront notre attention Ici sont au nombre de cinq :

  • R1 : Nombre de .caractères par colonne (40 par défaut)
  • R6 : Nombre de lignes affichées (25 par défaut)
  • R2 : Centrage horizontal de l'écran
  • R7 : Centrage vertical de l'écran
  • R5 : Finesse du centrage vertical

Celui qui a suivi jusque là va Inévitablement poser la question suivante : COMMENT MODIFIER LE CONTENU D'UN REGISTRE ? (A celui qui ne s'est rien posé du tout : non, ru n'es pas en train de lire les petites annonces !), Itizvalrislmmpeul. La manipulation va se dérouler en deux temps :

1 - Je signale le registre que Je veux modifier :
OUT &BC00, Registre

2 - 'y place la nouvelle valeur :
OUT &BD00, Valeur

Certaines valeurs peuvent planter le CPC, mais rassurez-vous, sans aucun dommage matériel. Autant vous donner de suite un petit listing qui devrait vous amuser comme le belge à qui on donne une feuille dont les deux côtés supportent ce message philosophique : «Tournez la page...». (La rédaction décline toute responsabilité quand à l'insertion de cette histoire dans l'article ! NDLR). En haut à gauche s'inscrivent les valeurs des registres. Sinon, pour l'utilisation, il suffit de savoir lire (ce qui n'est déjà pas mal ! ). J'Insiste lourdement sur la saisie COMPLETE. INSTRUCTION POUR INSTRUCTION. ESPACE POUR ESPACE, de ce listing. Vous comprendrez pourquoi après, Un conseil d'ami : si vous vous plantez en plein milieu d'un écran Illisible, un RUN suivi d'un arrêt du programme par ESC remettra de l'ordre. Mais si, au cours de vos essais, l'écran devient tout noir. Il faut réinitialiser le CPC et relancer le programme, II est donc Inutile de tordre l'écran dans tous les sens d'une façon aberrante.

Un petit détail aussi, qui en fin de compte ne me paraît pas si minime que ça : lorsque la valeur du registre 5 dépasse 34, Il devient impossible de changer la couleur du BORDER (sauf lors d'un changement de MODE en cours de programme ou en commande directe), ainsi que de faire clignoter une encre quelconque. Mate comme on ne se sert pas de son CPC pour bronzer,,. (Message personnel à Maman : c'est combien de temps déjà pour faire cuire un œuf dur).

ÇA SE CORSE (AIR. T'ES SCIE !)

Bon, vous pouvez revenir Ici. c'est fini toujours sur CPC. Vous avez donc compris ce qui se passe dès que les registres 1 et à sont altérés. Les caractères se baladent su tout l'écran et parfois sont dédoublés ou ne sont pas affichés ( libre à vous de centrer l'écran où vous le souhaitez). On imagine facilement la difficulté d'emploi des Instructions PRINT et autres LOCATE qui deviennent de véritables opérations de haute voltige sans filet. Mais tonton est là : reprenez votre CPC et amenez-moi les cinq registres aux valeurs suivantes :

  • R1=20
  • R2=37
  • R6=33
  • R7=35
  • R5=41

Si les choses se sont bien passées, en haut de l'écran devraient être superposées la valeur de chaque registre et sa signification. Tout doit être correctement aligné, si. bien sûr, le listing a été correctement saisi comme demandé.
Question : ouatkanioussi innpitcheuroane ? You kan si les choses suivantes : l'écran comporte désormais 20 colonnes au lieu de 40 (10 au Heu de 20 en MODE 0 et 40 à la place de 80 en MODE 2), soit moitié moins si les plies de ma calculette sont toujours bonnes. Ainsi, une ligne d'écran normal prend Ici deux lignes sur noire écran reconfiguré. En raisonnant de cette façon, on devrait avoir 2 fols plus de lignes affichées, soit 25 x 2=50. Ce n'est pas faux, mais j'ai beau regarder sous le bureau, elles ont disparues, alors autant se contenter du maximum visible : 33 !

Question : pourquoi reconfigurer l'écran aussi minusculement. Réponse : par souci de simplification des calculs, seul le principe est le plus Important à retenir. Et puis t'es de la peau lisse ?

Si jamais vous arrêtez votre programme une fois l'écran reconfiguré comme ci-dessus, un LIST vous aidera encore à comprendre ce qui se passe. Il est évident que les dernières lignes de bas d'écran sont invisibles, et un CLS en mode direct ramènera le curseur en haut, à moins que vous ne préfériez utiliser la touche fléchée haute pour le faire remonter. Et bien voilà, tout le monde II est content, ou presque, puisque le plus gros de l'affaire est encore à venir. A savoir le calcul des nouvelles coordonnées de notre super-écran.

MAX Y EST GRAND

Bon, raisonnons un peu. Reprenons les choses au début. Une ligne normale est maintenant partagée en deux. Donc, la ligne 1 d'origine comportant 40 colonnes (restons dans le MODE 1. Les calculs sont les mômes pour les autres modes) est transformée en ligne 1 de 20 colonnes (1 à 20) et ligne 2 de 20 colonnes (21 à 40). Ce " qui en toute logique revient à dire que chaque nouvelle ligne PAIRE est constituée des 20 dernières colonnes d'une ligne normale. Afin de ne pas trop s'embrouiller dans les termes. Je propose la petite codification suivante : désormais, les coordonnées NORMALES du CPC. telles qu'elles existent quelque soit la configuration de l'écran, seront appelées X et Y. Elles pourront donc s'étendre de 1 à 40 pour X et de 1 à 25 pour Y, En revanche, les paramètres de localisation de notre écran bâtard se verront affublés des noms NX et NY, avec NX allant de 1 à 20 et NY de 1 à 33.

Revenons â nos moutons. Le problème va donc consister à miraculeusement transformer nos NX et NY en X et Y, et non l'inverse, car on fait la gestion de localisation sur notre super écran pour en faire un affichage que notre bécane comprenne correctement (et en plus je fais des vers sans en avoir l'air !.

Premier problème : Je veux faire de NY un Y. «Ouais l'autre, H suffit d'enlever le N I». Alle2, va coucher ... Comme il y a en fait deux fols plus de NY que de Y (même si on ne peut en voir que 33), Il suffit de diviser NY par 2. Ainsi, en prenant quelques exemples, si NY=1 ,Y=1 , si NY=2 , Y=1 (et oui, on reste sur une ligne normale, comme on l'a vu un peu plus haut). Si NY=3 , Y=2 , si NY=4 , Y=2 , si NY=5 , Y=3 et ainsi de suite jusqu'à: si NY=33 ,Y=17. La petite formule de relativité (et alors, c'est bien relatif tout ça non ?) pourrait se traduire par :

Z=(NY+1)/2:Y = INT(Z)

Si l'opération s'est faite en deux temps en utilisant une variable 2 (si le 2 vous dérange, vous pouvez l'appeler GLUPS ou PMMF) .c'est parce qu'on s'en resservira dans ce qui va être notre...

Deuxième problème : faire du NX un X digne de ce nom. SI votre matière corticale grise suit toujours, elle va vous rappeler qu'une ligne est partagée en exactement deux parties. Par vole de conséquence, si X s'échelonne de 1 à 20, NX fera de même, mais si X s'amuse du côté des 21 â 40, alors II faudra retrancher 20 â X pour avoir notre NX, Mais comment savoir si on est sûr la deuxième ou la première partie de la ligne ? Simple comme bonjour : il suffit de tester la parité de Z. SI est un nombre rond, sans virgule, cela signifie que NY fait partie de la première partie d'une ligne normale. X reste donc inchangé. Dans le cas contraire, on rajoute 20 à NX pour obtenir notre X. Tout ça nous donne ta petite recette suivante :

NX = X + 20 * ABS ( (Z – INT ( Z )) <> 0 )

Ou si vous préférez :

IF(2 – INT (Z) )<> 0 THEN X = NX + 20 ELSE X = NX

DE L'AIR. DE L'AIR. TSE TSE

Nous voilà arrivés au bout de nos peines ! Le plus Important reste maintenant â utiliser cette astuce dans vos propres réalisations afin d'épater les copains et les copines. Rien ne vous empêche aussi de chercher comment redéfinir des positions bizarres si l'écran se retrouve avec 17 ou 29 colonnes, car les calculs sont tout à fait différents. Et pub pourquoi ne pas nous préparer un Jeu au scrolling horizontal avec un écran reconfiguré de telle manière qu'il ne représente qu'un fin bandeau prenant TOUTE ta largeur du moniteur ?

De toute façon, tonton Fred pense à vous et présentera un jour ta manière de calculer les nouvelles coordonnées d'un écran dilaté d'une manière plus complexe. En attendant, amusez-vous à contempler la petite animation (listing DEMO) qui devrait laisser vos ami(e)s Cépéciens et Cépéciennes sur le derrière quand vous leur direz fièrement tout en lustrant vos ongles : " Mouals, c'est moi qu'à fait ça !!! "

1 '-----------------------
2 'REDEFINITION DE L'ECRAN
3 '-----------------------
4 MODE 1: BORDER 3:INK 0,13:INK 1,23: INK 2,0
5 DATA 1,40,2,46,5,32,6,25,7,30
6 FOR n=l TO 5:READ r,y:OUT &BC00,r:0UT &BD00,y:NEXT
7 PEN 2:L0CATE 1,9:PRINT « UTILISER TOUCHES ENTRE PARENTHESES» :P£N t
8 col=40:lig =25ph=46:pv=30:fin=32:G0T0 21
9 i$=inkey$ : if I$="" THEN 9
10 IF i$=CHR$(242)THEH r=2:ph=ph+l:v=ph:GOT0 20
11 IF i$=CHR$(243)THEN r=2:ph=ph-t:v=ph:GOT0 20
12 IF i$=CHR$(240)THEN r=7:pv=pv+l:v=pv:GOT0 20
13 IF i$=CHR$(241) THEN r=7:pv=pv-1:v=pv:G0T0 20
14 IF i$="4" THEN r=l : col=col-l : v=col : GOTO 20
15 IF i$="6" THEN r=l : col=col+l : v=col : GOTO 20
16 IF i$="8" THEN r=6 : lig=lig-l : v=lig : G0T0 20
17 IF i$="2" THEN r=6 : lig=lig+l : v=lig : G0T0 20
18 IF i$="7" THEN r=5 : fin=fin-l : : v=fln : G0T0 20
19 IF i$="1" THEN r=5 : fin=fin+l : : v=fln : G0T0 20
20 OUT &BC00,r:OUT &BD00,v
21 LOCATE 2,2:PRINT USING"Registre 1(4-6): ## (colonnes )";col
22 LOCATE 2,3:PR1NT "Registre 2{"CHR$(242)" "CHR$(243)USING"):## (centrage horizont)";ph
23 LOCATE 2,4:PRINT USING"Registre 6(8-2):## (llgnes)";lig
24 LOCATE 2,5:PRINT "Registre 7("CHR$(240)" "CHR$(241)USING"):## (centrage wertical)";pv
25 LOCATE 2,7:PRINT USING"Registre 5(7-1):## (finesse verticale)";fin
26 GOTO 9

10 '-------------
20 ' PETITE DEMO
30 '-------------
40 ' AMSTAR n°40 page 71

( La disquette illustrant cet article n'est pas encore numérisée : Deviens riche et célébre en participant TOI aussi au site et complete cette article !! )

AMSTAR n°40, p68-69-70-71

★ ANNÉE: ???
★ AUTEUR: Frédéric BELLEC

★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» coding  redefinir  l  ecran  de  son  CPC  AMSTAR40DATE: 2011-07-18
DL: 238
TYPE: image
SiZE: 143Ko
NOTE: w1136*h638

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

Lien(s):
» Coding » CRTC Registres Crt 6845
» Coding » Sdcc - 11 - Attaquer le Crtc
» Coding Src's » Quasar Test CRTC v2.0 (OffseT)
» Coding » AMSLIVE n°20 - CRTC bien Digérer
» Coding Src's » RICHARD FAIRHURST SourceCode Collection
» Coding Src's » Smooth CRTC Register 3 scrolling test (Odiesoft)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 722 millisecondes et consultée 2092 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.