GW-BASIC sur un ordinateur moderne

Le GW-BASIC était le BASIC des premiers PC, et était livré avec le système d’exploitation MS-DOS. Il est identique d’un point de vue fonctionnel au BASICA (comme BASIC Advanced) d’IBM qui était présent sur les disquettes IBM PC-DOS qui accompagnaient les PC-XT.

Ce langage BASIC est très complet et offre des fonctions graphiques et de gestion du son pour l’IBM PC.

Figurent également des instructions plutôt avancées à l’époque tel que des boucles WHILE… WEND, ou la possibilité de définir des fonctions (avec DEF FN), permettant de faire – un peu – de la programmation structurée (révolutionnaire pour les adeptes chevronnés du GOTO qui rendait les programmes cryptiques). A noter également la commande OPTION BASE servant à définir le premier index des tableau (0 ou 1).

Il existe de nombreux programmes pour GW-BASIC (faciles à trouver sur le Web), et, ce dialecte BASIC étant plutôt riche, adapter des programmes venant d’un autre BASIC est simple.

La dernière version de GW-BASIC est la 3.23 et date de 1988. Il s’agit d’un fichier exe mais n’espérez pas le faire fonctionner sur votre dernier PC équipé de Windows 10 ; ça ne marche pas ! Que faire alors ? Et bien lisez la suite, vous avez deux possibilités !

1ÈRE solution : exécuter le GW-BASIC de l’époque avec un émulateur

L’émulateur le plus populaire est probablement DOSBox qui semble avoir toutes les qualités : open source, multi-plateformes (Windows, Linux, Mac), facile à installer, bien documenté, bon niveau de compatibilité.

Le populaire DOSBox

L’installation de DOSBox ne pose aucun problème, une fois la dernière version récupérée sur https://sourceforge.net/projects/dosbox/

Installez ensuite l’exécutable GW-BASIC dernière version (la 3.23) dans un répertoire de votre choix. Je mets à disposition l’exécutable (dans une archive tar), vous pouvez le télécharger ici :


Je vous conseille ensuite de modifier le fichier de configuration de DOSBox C:\Users\%name%\Data\Local\DOSBox\dosbox-0.74-3.conf de façon à :

  • Créer un point de montage. DOSBox peut accéder à un répertoire de votre choix sur votre disque qui sera vu comme un « lecteur » DOS.
  • Modifier le PATH (variable d’environnement du DOS) pour qu’il contienne le répertoire où se trouve GWBASIC.exe. Le PATH contient la liste des répertoires où le système cherchera la présence des commandes saisies par l’utilisateur, l’on pourra donc ainsi lancer GWBASIC depuis n’importe quel répertoire courant.

Ces modifications se font dans la dernière section du fichier de configuration. Voici le mien, qui permet de monter le répertoire D:\home\dom\IBMPC\DISK qui sera accessible depuis DOSBox par le lecteur C: \ et d’ajouter dans le PATH de DOSBox le répertoire C:\EXE où j’ai placé l’exécutable GW-BASIC :

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
MOUNT C D:\home\dom\IBMPC\DISK
PATH=%PATH%;C:\EXE
2ème solution : utiliser PC-BASIC

PC-BASIC est un logiciel libre et multi-plateforme (Windows, Linux, Mac), et encore plus simple d’installation que la solution précédente, l’exécutable GW-BASIC n’étant pas nécessaire. La documentation en ligne est très complète, détaille les fonctionnalité et l’utilisation de PC-BASIC, et inclut un guide du langage GW-BASIC.

Pour l’installation, téléchargez PC-BASIC sur le site de l’éditeur. La procédure est ultra-simple. Le logiciel disponible en version 2.0.2 lorsque j’écris ces lignes. Après installation, vous pouvez modifier le fichier de configuration :
%AppData%\pcbasic-2.0\PCBASIC.INI (sous Windows)

Vous pouvez ainsi monter un répertoire de votre choix et qui sera vu comme un lecteur (au sens DOS) depuis PC-BASIC. Cet exemple permet de monter le répertoire D:\home\dom\IBMPC\DISK présent sur mon disque Windows, qui sera vu comme le lecteur D: dans PC-BASIC :

mount=D:D:\home\dom\IBMPC\DISK

Vous pourrez ensuite accéder aux fichiers contenus dans ce répertoire en utilisant les commandes :

CHDIR "D:"             (change de répertoire courant)
FILES                  (liste les fichier du répertoire en cours)
LOAD "TEST.BAS"        (charge le programme TEST.BAS)

Quelques astuces :

  • Vous pouvez copier/coller du texte depuis votre système hôte vers PC-BASIC en utilisant le bouton central (molette) de la souris pour coller. Très pratique si vous utilisez un éditeur sous votre système hôte pour modifier votre programme BASIC et coller le code dans PC-BASIC pour l’exécuter.
  • PC-BASIC peut charger des fichiers BASIC sous format « Tokenised » (format utilisé par GW-BASIC) ou texte. Vous pouvez ainsi utiliser un éditeur dans votre environnement « hôte » (Notepad++ sous Windows par exemple) pour modifier votre programme puis le charger directement dans PC-BASIC grâce à la commande LOAD (puis RUN…).
Comparatif des deux solutionS

DosBOX et PC-BASIC sont tous deux multi-plateformes et open source.

Cependant je recommande l’utilisation de PC-BASIC lors du développement de programmes car il est possible de faire des copier / coller depuis le système hôte (éditeur de texte par exemple) vers PC-BASIC. Je n’ai pas encore trouvé de moyen de faire la même chose dans DOSBox.

L’utilisation du couple DosBox + GWBASIC.exe permet en revanche d’utiliser le « vrai » GW-BASIC de l’époque et donc d’être plus proche de la machine d’origine.

exemple de programme : La maison du fou

Cet exemple est petit jeu d’aventure sympathique, la maison du fou, que j’ai déjà porté sur Apple II (voir ici). Il s’agit d’un jeu d’aventure textuel publié dans le magazine MICRO-7, le programme d’origine étant en BASIC standard. L’adaptation pour GW-BASIC est par conséquence extrêmement simple. Voici le programme :

  • Ajout d’une petite intro en ASCII art avec des étoiles clignotantes :
Un intro en couleur pour la maison du fou
  • Colorisation du texte. J’utilise pour ce faire la commande COLOR qui permet de choisir parmi les couleurs suivantes :
Couleurs disponibles sous GW-BASIC avec code correspondant

Voici un exemple de page du jeu après colorisation :

Encore plus fou en couleurs…
  • Affichage des accents. L’encodage des accents sous GW-BASIC est spécifique et n’a rien à voir avec celui du système hôte. Pour pouvoir éditer un programme sur le système hôte puis ensuite le charger dans GW-BASIC grâce à la commande LOAD, on ne peut pas saisir les caractère accentués dans l’éditeur de texte. Ceux-ci ne seraient pas chargés correctement par GW-BASIC. Je les ai donc codés en utilisant l’instruction CHR$ , en utilisant le code ASCII suivant (étendu et spécifique à l’IBM PC de l’époque ) :
129 ü      130 é      131 â      133 à      135 ç      136 ê
137 ë      138 è      139 ï      140 î      147 ô      148 ö
150 û      151 ù

Par exemple :

PRINT "Dans l'entr"+CHR$(130);"e,il y a une porte ";CHR$(133);" l'est et ";CHR$(133);" l'ouest."

Dans l'entrée,il y a une porte à l'est et à l'ouest.
  • Meilleure gestion des temporisations. Dans le programme d’origine, les temporisations se font par des boucles FOR et dépendent donc de la vitesse d’exécution de la machine. Sur un émulateur fonctionnant sur un PC moderne, ces boucles se terminent en quelques millièmes de secondes. Je les ai remplacées par une subroutine qui utilise la fonction TIMER (qui renvoie le nombre de secondes écoulées depuis 00h00h00s) et une boucle WHILE … WEND :
11100 REM Attente de TEMPO secondes
11110 T = TIMER
11120 WHILE TIMER < T + TEMPO
11130 WEND
11140 RETURN