Après avoir vu le point, si nous passions à la ligne ? Ou plus exactement, au segment de droite.
Sur une feuille de papier, tracer un segment de droite entre deux points est une chose
simple : un crayon, un règle, on positionne la règle sur les deux points et l'on trace un
trait en tenant fermement cette dernière.
Le trait a alors une allure continue ; du moment que l'on n'utilise pas un microscope pour
en détailler la composition. Et c'est une représentation suffisante,
dans la plupart des cas, de l'objet mathématique sous-jacent.
Sur un écran d'ordinateur, c'est un tout autre problème. En effet, un écran traditionnel
est constitué d'une matrice de petits carreaux, les pixels. Les pixels des écrans récents
sont très petits et malgré cela, tracer un beau segment de droite n'est pas si simple.
Alors imaginez avec les gros carreaux formant les affichages d'anciens ordinateurs ?
Le BASIC est un langage, dans les versions de l'époque de cette machine, assez limité. Il n'y a entre autre pas de notion de portée lexicale des variables. La portée lexicale d'une variable, c'est l'ensemble des parties d'un code source depuis lesquelles une variable, ou plus généralement un symbole, est accessible. En BASIC sur VG5000µ, comme sur les BASIC d'autres machines de cette période, c'est simple, les variables simples sont accessibles de partout à partir du moment où elles ont été définies.
À cela s'ajoute le fait que seuls les deux premiers caractères d'une variable sont significatifs. ABC et ABD …
Dans l'épisode précédent, j'avais décrit l'arrangement en mémoire vidéo des caractères semi-graphiques et un moyen d'accéder directement en mémoire à celui qui nous intéresse.
Le but est toujours de pouvoir allumer un élément constitutif d'un caractère semi-graphique, que je nomme « gros pixel ». Et l'article précédent s'arrêtait au moment où je pouvais récupérer, via une paire d'appels à commande PEEK, les deux valeurs décrivant le caractère affiché à l'écran.
Premier test, après avoir effacé l'écran avec INIT, j'affiche les deux valeurs correspondantes à la colonne 1, ligne 0.
Les deux valeurs obtenues et visibles sur la capture d'écran sont 79 et 0. Pour comprendre ce qu'ils signifient, je reprends ici un morceau de l'article sur l'arrangement de la mémoire vidéo qui décrit la structure de ces deux valeurs.
On y lit que la première valeur a cette structure :
Après avoir fait un mini tour des commandes graphiques, puis étudié la structure des caractères semi-graphiques du VG5000µ, il est temps d'implémenter la possibilité d'allumer un point particulier de l'écran.
Comme je vais utiliser les caractères semi-graphiques, ce « point » sera sur la grille de résolution de 80 par 75. En effet, il y a 40 caractères par ligne qui ont chacun une largeur de deux éléments, et 25 caractères par colonne qui ont chacun trois éléments en hauteur.
L'idée pour allumer ou éteindre un point est donc d'abord de trouver quelle position de caractère semi-graphique est influencée, puis de modifier le caractère à cette position. Pour modifier le caractère, il faudra lire celui déjà présent, calculer le nouveau, puis écrire le nouveau.
Transformation de coordonnées
Pour visualiser la transformation de coordonnées, voici un tableau.
Cet article est la version française de cet autre que j'ai écrit suite à une demande d'aide dans le forum System.cfg forum. Je me suis dit que c'était le moment de mettre à plat mes notes, même si du coup cela cassait un peu la progression des articles en français sur l'affichage.
Cela donne un article un peu plus austère que d'habitude, et un peu plus dense.
Pour commencer, le processeur vidéo du VG5000µ est un EF9345. On peut y accéder de deux façons, soit en discutant directement, soit à travers la RAM lorsqu'on utilise le BASIC embarqué dans la machine. La manière directe est plus puissante, la seconde est plus simple.
Le signal de début d'affichage (Blank Start) du processeur vidéo est connecté à la broche d'interruption du Z80. Cela provoque une interruption IRQ qui, dans le mode dans lequel le BASIC initialise le Z80, fait un appel …