Site logo

Triceraprog
La programmation depuis le Crétacé

  • Livre - Commodore VIC-20, a Visual History ()

    Après une première campagne Kickstarter manquée, Giacomo M. Vernoni n'a pas baissé les bras et lancé une nouvelle campagne pour l'édition d'un livre entièrement consacré au VIC-20 de Commodore.

    Le VIC-20, c'est un peu le grand frêre du beaucoup plus connu Commodore 64, un grand frêre aux capacités bien plus limitées. Mais c'est avant tout pour moi le premier de mes ordinateurs. Pas le premier que j'ai utilisé, ni celui sur lequel j'ai commencé la programmation, mais le premier qui était vraiment à moi.

    Alors forcément, la promesse d'un livre consacré à la machine m'a fait de l'oeil, et j'ai embarqué dans ce projet. Quelques mois après, je peux parcourir ce livre compact mais très fourni en détails et illustrations. C'est une très belle édition et je félicite son auteur pour le boulot accompli. Le livre respire le travail bien fait mêlé à la passion.

    Comme je ne suis pas toujours dans le détail les campagnes Kickstarter, j'ai été agréablement surpris de voir joint au livre des mini-posters, disons de grandes illustrations, d'un schéma de la machine, de photos des différentes cartes mère, et même un aimant aux couleurs de la marque.

    Je ne sais pas si mon VIC-20 fonctionne toujours, cela fait bien longtemps qu'il n'a pas été allumé. Je l'espère, et j'espère pouvoir ainsi en parler plus longement ici dans le futur.

    En attendant, je vous laisse avec une photo de la couverture du livre et d'un des posters.

    Image de la couverture du livre et d'un poster


  • Les caractères semi-graphiques du VG5000µ ()

    Lorsque l'on regarde de près la structure des caractères semi-graphiques du VG5000µ, on voit qu'elle a été réfléchie pour être facile à manipuler. Voici quelques observations :

    1. les caractères sont divisés en deux plages, l'une numérotée de 0 à 63, l'autre de 64 à 127.
    2. si on prend un caractère de la première plage, contenant les caractères « quadrillés » et que l'on ajoute 64 à son numéro, on obtient le même caractère en format « plein »
    3. de manière similaire, si on soustrait 64 au numéro d'un caractère plein, on obtient sa forme quadrillée.

    Le caractère 127, par exemple, est le caractère complètement rempli. Le caractère 127 - 64, c'est-à-dire 63, est le caractère rempli, quadrillé.

    Tous les caractères semi-graphiques du VG5000µ

    Une observation supplémentaire est plus visible si l'on réarrange les blocs de chaque caractère semi-graphique sur une seule ligne. Pour cela, je prends les deux blocs du haut, puis j'y ajoute les deux blocs du milieu, et enfin les deux blocs du bas.

    En remplaçant les blocs noirs par des « X » et les blocs blancs par des « . », voici ce que cela donne :

    ......
    X.....
    .X....
    XX....
    ..X...
    X.X...
    .XX...
    XXX...
    ...X..
    X..X..
    .X.X..
    XX.X..
    ..XX..
    X.XX..
    .XXX..
    XXXX..
    ....X.
    Et ainsi de suite pour les 64 possibilités.
    

    Ceux qui sont à l'aise avec le comptage en base binaire auront probablement déjà repéré la structure. Pour les autres, essayez ceci :

    1. À partir d'un caractère donné regardez la position la plus à gauche
    2. Si la position contient un point, placez un X, puis allez à l'étape 5
    3. Sinon, c'est que la position contient un X. Remplacez le par un point
    4. Considérez à présent la position juste à droite du point que vous venez de placer, et retournez à l'étape 2.
    5. Terminé.

    Au passage, cette série d'instructions donnant des étapes à suivre pour effectuer une opération s'appelle un algorithme, un terme que nous croiserons à nouveau.

    Félicitations, vous savez compter en binaire ! Plus traditionnellement, les « X » sont notés « 1 » et les « . » sont notés « 0 », mais le principe est le même.

    Le grand avantage d'utiliser cette structure, où des nombres binaires forment les motifs des caractères semi-graphiques, c'est qu'il est assez facile de trouver le numéro d'ordre d'un caractère en fonction du ou des blocs que l'on veut allumer.

    Pour cela, il suffit d'associer à chaque position un numéro, suivant ce schéma :

    Position 0 1 2 3 4 5
    Numéro associé 1 2 4 8 16 32

    L'association est la suivante : multipliez le chiffre 2 par 2 autant de fois que la position de la colonne. On considère que multiplier 0 fois donne 1. Par exemple, pour la position 5, cela donne : 2 * 2 * 2 * 2 * 2 = 32. Je vous laisse vérifier les autres colonnes.

    Je laisse la partie mathématique de l'histoire de côté, il y a de quoi faire un article complet dessus, et il y en a déjà beaucoup sur Internet.

    Essayons maintenant. Je voudrais le caractère avec le bloc du milieu à droite allumé. Ce bloc, si on réarrange le caractère en ligne, est à la position 3 (rappelez-vous qu'on commence à numéroter à zéro) :

    ..
    .X donne ...X..
    ..
    

    En se référant au tableau ci-dessus, on trouve que la colonne 3 est associée au nombre 8. Je cherche le caractère dans sa forme pleine, j'ajoute donc 64 à 8 pour obtenir 72. Je vérifie dans le tableau du manuel... gagné !

    Comment faire maintenant si l'on veut un caractère semi-graphique avec plusieurs blocs allumé ? Simple, il suffit de faire la somme de tous les numéros associés aux colonnes. Par exemple :

    X.
    .X donne X..XX.
    X.
    

    Les blocs allumés sont donc aux positions 0, 3 et 4. Les nombres associés à ces positions sont 1, 8 et 16. Je fais la somme 1 + 8 + 16 = 25. Je veux les caractères pleins, j'ajoute donc 64. 64 + 25 = 89. Je vérifie dans le manuel le caractère 89. Encore gagné !

    Nous voilà donc avec un algorithme très simple pour trouver un caractère semi-graphique en fonction d'un ensemble de points que l'on veut allumer. Il reste à afficher ce caractère au bon endroit à l'écran, et nous pourrons obtenir de quoi allumer et éteindre des blocs de pixels individuellement.


  • Les commandes graphiques en BASIC du VG5000µ ()

    Une fois le VG5000µ démarré, on pourrait imaginer afficher des formes à l'écran en allumant des pixels avec des couleurs prises dans une palette donnée. Au même moment, c'est ce que font d'autres ordinateurs sur le marché. Avec de grandes limitations, certes, mais des commandes en BASIC sont fournies à l'utilisateur pour afficher des points, voires même tracer des lignes.

    Il n'en est rien.

    Les commandes en BASIC méritent d'être étudiées avant de se lancer. La manuel d'utilisation consacre quatre pages d'explications à l'affichage graphique et auront pu, je pense, décourager tous ceux qui ne cherchaient pas un minimum à conduire quelques expériences. Par chance, avoir un ordinateur à cette époque, c'est avoir un peu l'esprit curieux.

    Deux commandes, CURSORX et CURSORY, suivies d'une nombre, permettent de placer la position courante d'affichage sur l'espace à l'écran, divisé en 25 lignes de 40 colonnes. Les caractères affichés avec PRINT qui suivent une changement de coordonnée commenceront à l'endroit indiqué. Tout va bien.

    La commande d'effacement d'écran, qui s'occupe aussi de choisir une couleur de fond et une couleur d'encre, se nomme INIT. C'est l'équivalent d'un CLS sur d'autres machines.

    Une commande permet de geler le défilement d'écran et une autre de le reprendre (PAGE et SCROLL). L'une permet d'empêcher le rafraichissement de l'écran et l'autre de le reprendre (STORE et SCREEN). Une autre permet de contrôler le taux de rafraichissement de l'écran (DISPLAY). Ça fait beaucoup de commandes de contrôle de la surface d'affichage. Ce sont de toutes petites commandes qui ne prennent pas beaucoup de place dans le système, mais était-ce bien utile d'avoir tout ce monde ?

    À vrai dire, la seule commande d'affichage est PRINT. PRINT est implémentée de manière assez simple : une fois les paramètres évalués, chaque caractère à traiter est pris un par un et affiché à l'emplacement du CURSOR. Puis le curseur est avancé d'une position.

    L'implémentation vérifie au préalable passage que le caractère est bien affichable, ou bien s'il mérite un traitement spécial, ou bien si le caractère n'est pas affichable ; auquel cas ce dernier est remplacé par le caractère d'espacement.

    Les caractères affichables de PRINT peuvent être séléctionnés dans quatre fontes différentes. La première contient les lettres, chiffres, ponctuations et autre caractères textuels. La seconde contient des caractères semi-graphique. Les deux autres fontes sont entièrement modifiables par l'utilisateur.

    Ces caractères semi-graphiques sont une première solution pour tracer des images. Les pixels sont grossiers et arrangés sur une grille de 2 par 3, ce qui amène une résolution d'écran de 80 par 75. Pas fameux.

    Caractères semi-graphiques du VG5000µ

    L'utilisation des caractères programmables est la seconde manière d'afficher des pixels à ĺ'écran. Cette méthode est présentée rapidement dans le manuel et est similaire à celle que l'on retrouve sur l'Amstrad CPC par exemple. Grace à un encodage d'une grille de 8 pixels par 10, un caractère peut être redéfini, puis affiché avec PRINT, après sélection de la bonne fonte.

    Ce type d'encodage sort du cadre de cet article, mais voilà ce que cela donne :

      XXXX   4+8+16+32  =  60 = 3C
     X    X  2+64       =  66 = 42
    X X  X X 1+4+32+128 = 165 = A5
    X      X 1+128      = 129 = 81
    X  XX  X 1+8+16+128 = 153 - 99
    X X  X X 1+4+32+128 = 165 = A5
    X      X 1+128      = 129 = 81
     X    X  2+64       =  66 = 42
      XXXX   4+8+16+32  =  60 = 3C
             0          =   0 = 00
    
    SETEG 65,"3C54A58199A581423C00"
    EG 0,6,0:PRINT"A";
    
      XXXX   4+8+16+32  =  60 = 3C
     X    X  2+64       =  66 = 42
    X X  X X 1+4+32+128 = 165 = A5
    X      X 1+128      = 129 = 81
    X X  X X 1+4+32+128 = 165 = A5
    X X  X X 1+4+32+128 = 165 = A5
    X  XX  X 1+8+16+128 = 153 = 99
     X    X  2+64       =  66 = 42
      XXXX   4+8+16+32  =  60 = 3C
             0          =   0 = 00
    
    SETEG 66,"3C42A581A5A599423C00"
    EG 0,6,0:PRINT"B";
    

    Smileys avec le VG5000µ

    Voilà avec quoi devait jouer un utilisateur du VG5000µ n'ayant sous les yeux que le seul manuel fourni avec l'ordinateur. Avec des caractères de 8 pixels par 10, on atteint une résolution potentielle de 320 par 250... mais avec de grosses limitations.

    Est-ce qu'il serait néanmoins possible de tracer des lignes ? Oui, surement, nous verrons ça plus tard.


  • Les bases du BASIC ()

    Le BASIC est LE langage de programmation phare de l’époque de l'informatique personnelle des années 1980. Quasi tous les ordinateurs de la génération dite « 8 bits » démarrent sous un environnement immédiatement programmable en BASIC. Les magasines spécialisés enseignent le BASIC et la majorité des programmes diffusés par ce moyen sont en BASIC, au moins dans un premier temps et lorsqu'il y a une dimension pédagogique. On trouve aussi de nombreux livres ayant pour contenu des programmes en BASIC à recopier sur sa machine.

    Au moment de cette diffusion massive (toute proportion gardée, la micro informatique reste un objet de curiosité), le BASIC à déjà quelques années d'activité, sa création datant du milieu des années 60.

    À sa création, le BASIC se situe dans la classe des langages de programmation à vocation mathématiques. C'est un langage destiné à résoudre des problèmes numériques. L'autre grande classe de langages de programmation à cette époque étant ceux plutôt destinés au données d'entreprises : gestion de stock, gestion de personnel,...

    C'est aussi un langage interactif : il est possible d'entrer des commandes pour les voir s'exécuter immédiatement, ainsi que des programmes pour stocker des suites d'instructions à exécuter plus tard. Cela peut sembler naturel en 2017, mais à cette époque, beaucoup d'ordinateurs exécutent exclusivement des programmes stockés, sur des cartes perforées par exemple (BASIC peut d'ailleurs être aussi utilisé de cette manière, mais perd alors son côté interactif).

    Dernier point de contexte : le BASIC est crée 10 ans avant l'émergence de la micro informatique personnelle.

    Couverture du livre 40 Programmes de Jeux en BASIC

    À quoi ça ressemble ?

    Voici un programme tiré du manuel de BASIC de 1964

    10 PRINT "A", "B", "C", "GCD"
    20 READ A, B, C
    30 LET X = A
    40 LET Y = B
    50 GOSUB 200
    60 LET X = G
    70 LET Y = C
    80 GOSUB 200
    90 PRINT A, B, C, G
    100 GO TO 20
    110 DATA 60, 90, 120
    120 DATA 38456, 64872, 98765
    130 DATA 32, 384, 72
    200 LET Q = INT(X/Y)
    210 LET R = X - Q*Y
    220 IF R = 0 THEN 300
    230 LET X = Y
    240 LET Y = R
    250 GO TO 200
    300 LET G = Y
    310 RETURN
    999 END
    

    Qui affiche le plus grand commun diviseur (PGCD) d'une série de nombres, groupés par trois.

    A              B              C              GCD
     60             90             120            30
     38456          64872          98765          1
     32             384            72             8
    

    Un programme en BASIC est exécuté par numéro de ligne croissante, en débutant par le numéro le plus bas. Il est donc assez aisé, lorsque l'on connaît la signification des instructions, de suivre le déroulement.

    C'est une des forces du BASIC, l'écriture et la lecture d'un programme est très simple. L'exécution séquentielle permet de comprendre les programmes et de la mettre au point sans de grandes connaissances.

    Devenant un standard de fait, les programmes en BASIC sont assez faciles à porter d'une machine à une autre. Le programme ci-dessus, par exemple, fonctionne tel quel sur un VG5000µ. L'affichage 40 colonnes fait que la sortie texte devrait être un peu adaptée, mais ça fonctionne. Sur un MO5, le même programme demande une retouche mineure : enlever le mot clé LET.

    Dans sa forme de 1964, le BASIC est très limité. Il n'y a pas par exemple pas d'instruction pour accéder au matériel de la machine, ni à son environnement. Les commandes pour sauver et rappeler un programme ne peuvent être entrées qu'en mode direct. Le scénario typique est celui d'un étudiant qui s'installe sur un des 35 terminaux de la machine, reprend un travail en cours ou en débute un autre, note ses résultats puis laisse la place à quelqu'un d'autre.

    D'autres limitations : les sous-programmes, appelés par GOSUB, ne peuvent pas eux-même appeler d'autres sous-programmes. Cela limite fortement la structuration des programmes. Le nombre de données introduites par DATA est assez limité, ainsi que le nombre de boucles FOR, d'éléments de tableaux...

    L'évolution de BASIC lui enlèvera peu à peu ces limitations. Sur les ordinateurs des années 80, le BASIC s'est enrichi d'instructions pour accéder au matériel, dessiner à l'écran, jouer de la musique, demander des données à l'utilisateur,... Il restera cependant notoirement lent, extrêmement lent.

    La descendance

    L'offre des ordinateurs a évolué et ceux-ci n'ont plus été livré de base avec un environnement en BASIC. D'ailleurs de plus en plus sans environnement de programmation du tout.

    Mais du fait de sa simplicité et du nombre de personnes qui ont été exposé à ce langage de programmation, il est resté très longtemps populaire et a évolué en intégrant de nouveaux concepts, comme la programmation objet, les exceptions. Il a servi et sert toujours dans le Web, ou pour étendre des applications comme LibreOffice.

    Quelques mots-clé d'un BASIC IBM


  • Le BASIC du VG5000µ, démarrage ()

    Lorsqu'on allume un ordinateur personnel dans les années 80, il y a de bonnes chances de se retrouver dans un environnement BASIC. La machine présente, après quelques lignes d'introduction, une invite de commande à partir de laquelle l'utilisateur peut diriger les opérations. Ces opérations sont alors de deux types : lancer un programme, ou bien programmer (voire lancer un programme pour programmer).

    Il y a plusieurs exceptions à ce schéma. Le TO7, par exemple, a besoin d'une cartouche pour démarrer son environnement ; celui livré avec la machine est cependant un BASIC. Le Jupiter Ace quant à lui démarre avec un environnement en FORTH.

    Le VG5000µ fait parti de la catégorie des ordinateurs avec BASIC intégré. Dès l'allumage, on peut se lancer dans de l'expérimentation ou de la programmation.

    Démarrage du VG5000µ avec extention mémoire

    Dire qu'un ordinateur fonctionne avec BASIC n'est qu'une partie de la définition. Il n'y a pas un BASIC, mais plusieurs dialectes du même langage. Si les instructions principales restent les mêmes et fidèles au BASIC tel que créé en 1964, chaque machine possède ses particularités, même sur des versions produites par la même entreprise.

    Le dialecte du VG 5000 BASIC est assez classique. Les structures de contrôles IF/FOR/GOTO/GOSUB sont là, ainsi que les plus avancées ON GOTO et ON GOSUB. Des fonctions mathématiques classiques ainsi que de manipulations de chaînes de caractères sont présentes. Les fonctions d'éditions AUTO, mais surtout RENUM, sont toujours les bienvenues.

    Question périphériques, des commandes sont disponibles pour la manipulation des fichiers sur K7 (le VG 5000 n'a pas eu droit à son lecteur de disquette), le son, deux manettes et l'affichage. Nous verrons cela plus en détails plus tard.

    La manuel du VG5000µ est assez court avec sa centaine de pages. Comme il se doit pour un manuel d'époque, la partie programmation occupe la majeure partie de l'ouvrage en commençant dès la page 13 et continuant jusqu'à la presque fin. La programmation y est envisagé en BASIC, et seules quelques références à l'assembleur sont présentes.

    Je vous laisse avec le début du Chapitre 11, long de deux pages, expliquant la démarche d'écriture d'un programme.

    Extrait du manuel VG5000µ


« (précédent) Page 23 / 24 (suivant) »

Tous les tags

3d (15), 6809 (1), 8bits (1), Affichage (24), AgonLight (2), Altaïr (1), Amstrad CPC (1), Apple (1), Aquarius (2), ASM (30), Atari (1), Atari 800 (1), Atari ST (2), Automatisation (4), BASIC (31), BASIC-80 (4), C (3), Calculs (1), CDC (1), Clion (1), cmake (1), Commodore (1), Commodore PET (1), Compression (3), CPU (1), Debug (5), Dithering (2), Divers (1), EF9345 (1), Émulation (7), Famicom (2), Forth (3), Game Jam (1), Hector (3), Histoire (1), Hooks (4), i8008 (1), Image (17), Jeu (15), Jeu Vidéo (4), Livre (1), Logo (2), LZ (1), Machine virtuelle (2), Magazine (1), MAME (1), Matra Alice (3), MDLC (7), Micral (2), Motorola (1), MSX (1), Musée (2), Nintendo Switch (1), Nombres (3), Optimisation (1), Outils (3), Pascaline (1), Peertube (1), PHC-25 (2), Photo (2), Programmation (5), Python (1), RLE (1), ROM (15), RPUfOS (6), Salon (1), SC-3000 (1), Schéma (5), Synthèse (15), Tortue (1), Triceraprog (1), VG5000 (62), VIC-20 (1), Vidéo (1), Z80 (21), z88dk (1), ZX0 (1)

Les derniers articles

Compression de données, le format ZX0
Compression de données, référencer les répétitions
Briques Stellaires, jeu pour PHC-25
Compression de données, compter les répétitions
PHC-25, et Z80 en IM 2
Récréation Famicom
Family BASIC, le BASIC sur Famicom
Instance Peertube pour Triceraprog
Environnement de développement pour Picthorix
Un jeu en Forth pour Hector HRX : Picthorix

Atom Feed

Réseaux