JOUONS AVEC LES ATTRIBUTS D'ÉCRAN HIRES (1)
UN PEU D'ORDRE DANS LES IDÉES
L'écran HIRES se présente comme une matrice de 240 x 200 pixels soit 48000 pixels. A cette matrice visible correspond en mémoire une zone de 8000 octets situés de #A000 à #BF3F. On peut calculer que chaque octet stocke 6 pixels (un sextet). Sous la partie graphique, l'écran HIRES comporte encore trois lignes en mode TEXT qui occupent 120 octets dans une zone située de #BF68 à #BFDF. Il existe donc une zone non utilisée (non documentée) de 40 octets sise de #BF40 à #BF67 ! Pour mémoire, l'écran TEXT, ligne service inclue, occupe la RAM de #BB80 à #BFDF. Notez encore que selon le mode écran en vigueur, la commande ESAVE de SEDORIC sauve la contenu de la RAM de #A000 à #BF3F (mode HIRES) ou de #BB80 à #BFDF (mode TEXT).
Revenons en à notre écran HIRES, parfois décrit comme comportant 200 lignes de 240 pixels, ce qui n'est pas faux, mais quand même un peu abusif. Il serait plus honnête de dire que l'écran HIRES comporte 200 lignes de 40 sextets et que chaque sextet peut contenir soit un attribut d'écran, soit 6 pixels. Pourquoi cette nuance ? Parce que tout attribut d'écran placé dans l'écran "gâche" un sextet, dont les 6 points correspondants deviennent inutilisables pour du dessin. Il est impossible d'afficher une photo couleur sur l'écran : à chaque changement de couleur, il y aurait un trou dans la photo !
Si vous avez bien réalisé ce qu'impliquent les concepts rappelés ci-dessus, vous devez comme nous baver d'admiration pour les concepteurs des magnifiques jeux dont bénéficie notre machine favorite ! Nous vous engageons, si vous le pouvez, à visiter le site web de Jonathan Bristow, section "graphics".
UN PETIT PROGRAMME POUR SITUER LE PROBLÈME DES ATTRIBUTS
|
100 'Initialisation des bits b0 à b5 110 B0=1:B1=2:B2=4:B3=8:B4=16:B5=32 120 'Initialisation des adresses 130 A0=#A002:A1=#A02A:A2=#A052 140 A3=#A07A:A4=#A0A2:A5=#A0CA 200 HIRES:PAPER3:INK4:'JAUNE, BLEU 300 PRINT"Les pixels avec le b6 à 1" 310 C=#40:'Soit 0100 0000 320 GOSUB 1010 330 PRINT"Affichage des pixels nus" 340 C=0:'Les b6 et b7 seront à zéro 350 GOSUB 1010 360 PRINT"Les pixels avec le b7 à 1" 370 C=#80 :'Soit 1000 0000 380 GOSUB 1010 390 PRINT"Les pixels avec b6 et b7 à 1" 400 C=#C0 :'Soit 1100 0000 410 GOSUB 1010 420 PRINT"Idem avec encre BLANCHE" 430 I=0:A=#07 440 GOSUB 2010 |
450 PRINT"Idem avec papier BLEU" 460 I=1:A=#14 470 GOSUB 2010 999 TEXT:END 1000 'Affichage des pixels b0 à b5 1010 POKE A0+2,B0+C:'Pixel b0 1011 POKE A1+2,B1+C:'Pixel b1 1012 POKE A2+2,B2+C:'Pixel b2 1013 POKE A3+2,B3+C:'Pixel b3 1014 POKE A4+2,B4+C:'Pixel b4 1015 POKE A5+2,B5+C:'Pixel b5 1016 GET R$:PRINT:RETURN 2000 'Mise en place d'un attribut A 2010 POKE A0+I,A:'1ere ligne 2011 POKE A1+I,A:'2eme ligne 2012 POKE A2+I,A:'3eme ligne 2013 POKE A3+I,A:'4eme ligne 2014 POKE A4+I,A:'5eme ligne 2015 POKE A5+I,A:'6eme ligne 2016 GET R$:PRINT:RETURN 5000 'SAVEO"ATTRIRES.BAS" |
|
Le programme proposé affiche un carré de 6 x 6 pixels dans lequel une diagonale est tracée. Il s'agit en fait de 6 sextets affichés l'un en dessous de l'autre sur 6 lignes consécutives de l'écran HIRES. Les 6 points de la diagonale sont codés (un par ligne) par les bits b0 à b6 de ces 6 sextets (initialisation réalisée à la ligne 110 du programme). |
Dans le 1er test, les 6 octets correspondant à ces 6 sextets sont POKÉs dans l'écran après que leur b6 ait été forcé à 1 (en ajoutant #40) afin qu'ils soient reconnus comme des pixels et que s'affiche cette diagonale, en bleu sur papier jaune.
Si vous avez bien suivi l'exemple ci-dessus, voici un petit problème à résoudre pour la prochaine fois : comment placer dans l'écran HIRES un attribut papier fonctionnel, sans qu'il soit visible. En d'autres termes, comment éviter qu'un attribut papier prenne effet sur sa propre case, mais seulement sur celles qui sont situées à sa droite ?