In English: An explanation of how the Sinclair QL's 32K screen memory is organised: where it starts and ends, how to save a screen with SBYTES, and how each 16-bit word encodes 8 pixels in 512×256 four-colour mode or 4 pixels in 256×256 eight-colour mode, including the flash bit. Worked examples show how to build a word and test it with POKE_W, and two SuperBASIC functions, color_l and color_h, return the colour of a screen point like the TS2068/Spectrum POINT function.
Printed title: L'ECRAN du SINCLAIR QL. The article below is in French, as printed in QL_DOC n2 (February-March 1988).
L’écran du QL occupe 32 K-octets de la mémoire RAM. C’est en partie pour cette raison que sur un QL standard de 128K, il n’y a que 80K disponible à la programmation, une partie étant réservée pour les variables systèmes et à la mémoire-écran.
La mémoire-écran débute à l’adresse 131072 décimale (20000 hex) et progresse pendant 32K en mot de 16 bits jusqu’à l’adresse 163840 (28000 hex).
*Pour sauver le contenu d’un écran, nous pouvons faire en SUPERBASIC
SBYTES xxxx_dessin_pic,131072,32768
ou
SBYTES xxxx_dessin_pic,2^17,2^15
Contrairement au 2068/SPRECTRUM, l’écran du QL est continu, c’est-à-dire qu’elle débute dans le coin supérieur gauche et se termine dans le coin inférieur droit.
Il y a deux modes graphiques, 512×256(4 couleurs) et 256×256(8 couleurs).
1- MODE 512×256
Ce mode graphique offre une résolution de 512 pixels horizontales et 256 verticales, avec une possibilité de 4 couleurs. Chaque mot de 16 bits détermine la couleur de 8 pixels à l’écran.
V V V V V V V V_______OCTET HAUT (pair)
R R R R R R R R OCTET BAS
pixel 1 _| | V -> vert
pixel 2 ___| R -> rouge
^ ^
bit7 bit0
.Composition d'un mot
(mode 512x256)
Ainsi si nous voulons le 4ième pixel rouge, la bit 5 de l’octet haut doit être à “0” et celle de l’octet bas à “1”.Voici les combinaisons possibles pour les 4 couleurs.
COULEUR BIT "1" noir aucune rouge rouge vert vert blanc rouge+vert
2- MODE 256×256
Ce mode donne une résolution de 256 pixels horizontales et 256 verticales. Il y a maintenant 8 couleurs disponibles. Un mot de 16 bits de la mémoire-écran affecte 4 pixels.
V F V F V F V F_______OCTET HAUT (pair)
R B R B R B R B OCTET BAS (impair)
--- --- V -> vert
pixel 1 __| | F -> flash
pixel 2 ______| R -> rouge
^ ^ B -> bleu
bit7 bit0
.Composition d'un mot
(mode 256x256)
Voici les combinaisons possibles pour les 8 couleurs.
COULEUR BIT "1" noir aucune bleu bleu rouge rouge vert vert magenta bleu+rouge cyan bleu+vert jaune vert+rouge blanc bleu+vert+rouge
NOTE: Pour chaque pixel, on met la bit FLASH à “1” si on veut qu’il flash! Donc chaque mot contrôle 4 pixels. Si nous voulons le premier pixel bleu, le second rouge, le troisième magenta et le quatrième vert, nous aurons:
Octet haut 00 00 00 10 -> 2 décimale
Octet bas 01 10 11 00 -> 108 décimale
bl ro ma ve
*Pour joindre les 2 octets, on procède de la façon suivante:
Multiplie l'octet haut par 256 -> 2 * 256 = 512 Additionne le résultat avec l'octet bas -> 512 + 108 = 620
Faites POKE_W 2^17,620 pour vérifier les 4 premiers pixels de la mémoire-écran. N’oubliez pas il faut être en mode TV!
3-APPLICATION
Comme application, vous une fonction qui est l’équivalent la fonction POINT du 2068/SPECTRUM. Elle retourne la couleur d’un point à l’écran.
- Il y a une version pour chaque mode vidéo.
- La procédure prend en considération l’écran en entier, la référence étant le coin inférieur gauche (0,0). Içi les WINDOWs ne sont pas pris en considération.
*Fonction pour MODE 256×256
DEFine FuNction color_l (x,y) <- x,y sont les coordonnées
LOCal col,mem,haut,bas
mem = 163712 + (x DIV 8)* 2-y*128 <- trouve l'adresse
haut=PEEK (mem) DIV (4^(3-(x DIV 2)MOD 4)) <- sépare les 2 bits
bas=PEEK (mem+1) DIV (4^(3-x DIV 2)MOD 4)) correspondant au pixel
col=bas && 3 <- vérifie bit BLEU & ROUGE
col=col+(haut && 2) *2 <- vérifie bit VERT
col=col+(haut && 1) *4 <- vérifie bit FLASH
RETurn col <- retourne la couleur
END DEFine
Les valeurs possibles sont : 0 NOIR 1 BLEU
2 ROUGE 3 MAGENTA
4 VERT 5 CYAN
6 JAUNE 7 BLANC
*Fonction pour MODE 512×256
DEFine FuNction color_h (x,y) <- x,y sont les coordonnées
LOCal col,mem,haut,bas
mem=163712+(x DIV 8)*2-y*128 <- trouve l'adresse
haut=PEEK (mem) DIV (2^(7-(x MOD 8))) <- sépare la bit qui représente le
bas=PEEK (mem+1) DIV (2^(7-(x MOD 8))) pixel
col= bas && 1 <- vérifie la bit ROUGE
col= col+(haut && 1)*2 <- vérifie la bit VERT
RETurn col*2 <- retourne la couleur
END DEFine
Les valeurs possibles sont : 0 NOIR 2 ROUGE
4 VERT 6 BLANC
On utilise la fonction de la façon suivante:
-si on veut vérifier le pixel à la position 100,50 nous faisons couleur=col_h(100,50) si nous sommes en mode 512x256, sinon nous faisons couleur=col_l(100,50) pour le mode 256x256.
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.