Plan du site Plan du site
"Le [wiki] d'Alice" est un projet collaboratif dont le but est de rassembler, en un lieu unique, le maximum d'informations disponibles sur les micro-ordinateurs Matra-Hachette des années 80. Vous vous souvenez ? L'une des plus extravagantes réalisations de l'industrie française, dans un joli petit boîtier rouge...

Chapitre 3 - Le software :

Contenu : Tout sur le soft, le Basic, le Langage Machine, des trucs et astuces, des bouts de code, des démos, des listings...

Le Basic

Basic Alice est doté en résident d'un langage Basic interprété signé Microsoft, gage d'une certaine universalité.

La consultation du manuel d'accompagnement intitulé "Découvrez le Basic" nous apprend, au travers de ses 70 instructions, qu'il s'agit d'une version d'initiation dans la parfaite lignée de la machine qui l'héberge. Spécialement en ce qui concerne les instructions consacrées au graphisme, au traitement des chaînes, des effets sonores, le traitement des boucles.

La possibilité d'utiliser des routines en Langage Machine, en association avec le Basic permettant ainsi d'augmenter ses performances, n'est mise en évidence par aucune instruction Basic, hormis PEEK et POKE.

L'éditeur Basic est rudimentaire, et donc peu pratique à exploiter. Pour modifier une ligne de programme, la seule possibilité existante est de refrapper entièrement cette ligne. L'absence de possibilité de renuméroter les lignes automatiquement, augmente encore les difficultés d'édition, lorsqu'il faut insérer une ou plusieurs lignes entre 2 lignes dont les numéros sont consécutifs. Ce Basic est, malgré tout, doté d'une possibilité de contrôle d'erreur au travers de 19 types de messages différents, facilitant ainsi la localisation des erreurs éventuelles.

Toutes les limitations énumérées ci-avant sont certainement dues au fait que la ROM utilisée dispose de, seulement, 8 Ko de volume de stockage et son listage indique qu'elle est totalement utilisée par l'interpréteur Basic (pas un octet n'est disponible).

En ce qui concerne les performances de calcul, les variables numériques utilisent uniquement le format en virgule flottante; les formats entier, simple et double précision ne sont pas autorisés. Ce format nécessite 5 octets pour stocker la valeur numérique et 2 octets pour l'identification de la variable.

La lecture du livret d'accompagnement de l'extension mémoire 16 Ko, intitulé "Aller plus loin avec Alice" (celui-ci est entièrement dédié à Alice première génération avec 4 Ko de RAM de base), nous révèle l'existence d'instructions cachées du Basic dans la ROM et non mentionnées dans le guide d'Alice. Il s'agit des fonctions EXEC, CLEAR valeur,adresse et CLOADM. Ces 3 instructions permettent l'association du Langage Machine au Basic. L'étude de la ROM permet la découverte de 2 instructions supplémentaires USR(n) et VARPTR(nom de variable):

  • USR(n) délivre un résultat au Basic à partir d'une routine rédigée en Langage Machine.
  • VARPTR(nom de variable) fournit l'adresse à laquelle la variable est stockée si elle est numérique et celle du descripteur si la variable est alphanumérique.

Le premier octet de la table des instructions de programme Basic est placé dans un pointeur sur 2 octets aux adresses $0093 et $0094. Le système initialise ce dernier à $4346.

L'arrivée sur le marché des nouvelles versions d'Alice a permis une légère amélioration du Basic (74 instructions) essentiellement due à l'emploi d'un générateur vidéo plus performant.

Du côté de l'éditeur Basic, la commande <SHIFT> * n° de ligne <ENTER> permet une souplesse de modification, les commandes <CTRL> Q et <CTRL> S déplacent le curseur respectivement à gauche ou à droite dans la ligne de programme éditée, <CTRL> W supprime le caractère au dessus du curseur, <SHIFT> <SPACE> provoque la répétition des touches, <CTRL> <SPACE> met fin à la répétition et pour finir <ENTER> valide la ligne ainsi modifiée et fait sortir du mode édition.

Le pointeur du premier octet de la table des instructions de programme Basic est initialisé par le système avec la valeur $3346.

L'assembleur

Alors qu'avec la première série de micro-ordinateur Alice, l'accès au "Langage Machine" était compliqué à mettre en oeuvre, cela devient presque un jeu d'enfant avec les nouvelles générations Alice 32 ou Alice 90. En effet, ces dernières machines disposent d'un Editeur-Assembleur résident en ROM situé dans l'espace compris entre $C000 et $DFFF.

La prise en main de ce programme est facilitée par l'accompagnement d'un manuel d'emploi intitulé "Guide d'Instructions de l'Editeur Assembleur". La lecture de ce dernier nous renseigne sur sa mise en oeuvre. La configuration idéale nécessaire, pour Alice 32 implique qu'il est vivement recommandé de posséder l'extension RAM 16 Ko.

L'Edition d'un programme source

Assembleur

La procédure normale pour activer le mode Editeur-Assembleur, passe obligatoirement par la détermination précise de l'espace de travail utilisé en RAM pour la rédaction des fichiers source, objet, objet exécutable éventuel et la pile étiquettes. Dans l'interpréteur Basic, la commande directe qui fixe cet espace est:

CLEAR LN,AD <ENTER>
La valeur usuelle recommandée est:
CLEAR 100,13488 <ENTER>

L'espace RAM de travail débute à l'adresse 13488 ($34B0), ce qui laisse suffisamment de place pour le tampon (100 octets) des chaînes de caractères affichées à l'écran et la pile system (261 octets).

La commande & <ENTER> permet d'activer l'Editeur-Assembleur. L'appui sur la touche <BREAK> une fois permet d'annuler une action en cours, deux fois fait ressortir de l'Editeur-Assembleur vers le Basic. Enfin la touche % suivie de <ENTER> permet de revenir dans l'Editeur-Assembleur depuis le Basic sans perdre le texte déjà saisi.
L'Editeur-Assembleur et l'Editeur-Basic sont complètement étanchent l'un part rapport à l'autre, il n'y a donc aucune possibilité d'utiliser les instructions Basic dans l'Editeur-Assembleur.

L'Editeur est pleine page, hormis la dernière ligne utilisée pour le dialogue homme/machine. Cette facilité améliore la saisie et les corrections.
Des fonctions annexes viennent renforcer l'amélioration comme:

  • Effacer une ligne ou des caractères
  • Insérer une ligne ou des caractères
  • La répétition automatique ou non des touches du clavier
  • La recherche d'une ligne ou d'une chaîne de caractères
  • Le choix, à tout instant, du format d'écran (40/80 colonnes)
  • L'utilisation possible des caractères minuscules
  • La sauvegarde et la vérification d'un fichier source sur cassette
  • Le chargement d'un fichier source sauvegardé sur cassette
  • La copie imprimante soit d'une page, soit de la totalité du listing

L'Assemblage du programme source

Assembleur

Cette opération s'effectue très simplement, en exécutant dans l'Editeur la commande <CTRL> 1, puis en choisissant l'une des 3 options:

  • E <ENTER> pour visualiser le listing d'assemblage à l'écran
  • I <ENTER> pour copier le listing d'assemblage sur imprimante
  • <ENTER> pour visualiser à l'écran les seuls messages d'erreur
Ensuite il est possible de sauvegarder sur cassette le programme objet exécutable (L.M.) produit par l'assembleur en tapant:
Nom de fichier <ENTER>
ou
<BREAK> sans sauvegarde

L'exécution immédiate du programme objet est également possible. La commande <CTRL> A permet de corriger une réponse.

Format et Directives d'assemblage

L'Assembleur résident est soumis à certaines contraintes de format et directives.

Assembleur

L'assemblage

Il s'agit d'un Assembleur simple à 3 phases d'assemblage en mode absolu, c'est à dire à l'endroit où il doit être exécuté en mémoire.
Ces 3 phases sont les suivantes:

  1. l'analyse lexicographique, syntaxique, sémantique et constitution de la table des symboles
  2. La traduction en codes objets (création de l'adresse d'implantation, code opération, adresse effective de l'opération)
  3. Elaboration du listing du programme assemblé vers l'écran ou l'imprimante

Le Format

Les étiquettes (LABEL) ont une longueur maxi de 5 caractères et doivent commencer au bord gauche de l'écran (1ère colonne).

Les valeurs numériques et adresses doivent être exprimées en hexadécimal et commencer par le signe "$".

Toutes les composantes d'une ligne doivent être séparées par 1 espace au minimum.

Les Directives d'assemblage

Assembleur

Elles sont relativement limitées en nombre, mais centrées sur celles qui sont essentielles, à savoir:

  • Affecter une valeur à une étiquette
  • Introduire une chaîne de texte ASCII
  • Réserver un espace en mémoire
  • Stocker un ou deux octets
  • Définir l'adresse d'implantation du code machine en mémoire
  • Définir le point d'entrée du programme

En conclusion, cet outil, développé par Matra, est bien adapté aux 2 machines qui l'hébergent. Doté de routines de détection d'erreurs intégrées (8 types pour l'Editeur et 16 types pour l'Assembleur), il permet de dépasser facilement le stade de l'initiation à la programmation informatique. La seule ombre au tableau concerne le manque de visibilité pour connaître avec précision, la position et le volume occupés par les programmes sources, objets, objets exécutables éventuels et pile Labels, ainsi que de pouvoir vérifier le non recouvrement du fichier source par le programme objet exécutable.

Les trucs et astuces

Nota : sauf pécision contraire, les trucs et astuces suivants ne fonctionnent que sur Alice 32 et 90.

 

Astuce n° 1 : Lorsque l'on charge en mémoire un programme Basic, la table des instructions Basic se charge à partir de l'adresse RAM contenue dans le pointeur situé à l'adresse $0093 sur 2 octets. Le contenu du registre est imposé, à l'initialisation, par le système et égal à $3346 (13126). Pour charger cette table à une autre adresse RAM, il suffit en commande directe, de modifier cette adresse par 2 POKE comme suit :

Par exemple, pour charger la table à partir de l'adresse RAM $5000 (20480), il faut décomposer cette adresse en 2 octets.
Le premier situé à l'adresse $0093 (147) contient l'octet de poids fort (MSB) ici $50 (80), le deuxième situé à l'adresse $0094 (148) contient l'octet de poids faible (LSB) ici $00 (0).

Ce qui donne :

POKE 147,80:POKE 148,0 <ENTER>

Ensuite, il suffit de charger le programme Basic par <CLOAD "nomfichier"> <ENTER>, puis de lancer le magnétophone en lecture.Une fois chargé, le programme Basic est exécutable par la commande habituelle <RUN> <ENTER>, la seule diffèrence est qu'il est chargé à partir de l'adresse RAM $5000 (20480). La zone RAM comprise entre $3346 (13126) et $4FFF (20479), dans cet exemple, est toujours accessible pour l'écriture de routines en langage machine.

La détermination de l'adresse de chargement la plus haute possible du programme Basic doit tenir compte de la zone des variables Basic et de la zone réservée à la pile système.

Patrice


 

Astuce n° 2 : Comment empêcher le listage d'un programme Basic, à l'écran ou sur l'imprimante ?

Il y a 2 possibilités:
1- En commande directe taper :

POKE 12966,126:POKE 12967,247:POKE 12968,46 <ENTER>

2- Dans un programme Basic taper en mode édition:

10 POKE 12966,126:POKE 12967,247:POKE 12968,46 <ENTER>

Pour retrouver le listage

- En mode direct : POKE 12966,57 <ENTER>
- En mode édition remplacer dans la ligne 10 par POKE 12966,57 <ENTER>

Programme de démo : NOLIST-A32.zip

Patrice


 

Astuce n° 3 : Comment masquer des instructions dans une ligne d'un programme Basic ?

En insérant le code $08 (back space) juste après le dernier caractère de l'instruction à cacher, le nombre de codes $08 à insérer doit être égal au nombre de caractères à masquer.

Programmes de démo : CACHE_B2_BAS.K7 et NoLST32C.K7

Patrice


 

Astuce n° 4 : Dans Alice 32/90, il existe plusieurs zones RAM intéressantes et utilisables pour y installer des routines en langage machine (avec des restrictions pour certaines d'entre elles).

Ces zones sont les suivantes :

  • Zone 1 : de $3020 à $303F - disponible
  • Zone 2 : de $3040 à $30CF - à la condition de ne pas utiliser l'éditeur-assembleur résident de Alice 32/90
  • Zone 3 : de $30D0 à $30EF - disponible
  • Zone 4 : de $30F0 à $3103 - à la condition de ne pas utiliser la routine de sauvegarde (de $DF90 à $DFAB)
  • Zone 5 : de $3104 à $31FF - disponible
Programme de démo : ASMPARAM.K7 est chargé dans cette zone.

Patrice


 

Astuce n° 5 : Comment changer le format d'écran dans un programme Basic, les commandes CLS 32, CLS 40, CLS 80 et CLS 81 n'étant utilisables qu'en mode direct.

1- Ce programme permet de changer le format d'écran entre 40 et 80 colonnes uniquement.

10 REM CLS 80
20 POKE 12314,0:EXEC 54316
30 REM CLS 40
40 POKE 12314,1:EXEC 54316

2- Ce programme permet de changer le format d'écran entre 32, 40 et 80 colonnes.

5 REM PROGRAMME DE DEMO "MODECLS2"
10 REM MODE CLS 32
15 POKE 12314,2:EXEC 54958
20 REM MODE CLS 40
25 POKE 12314,1:EXEC 54958
30 REM MODE CLS 80
35 POKE 249,136:POKE 12314,0:EXEC 54958
40 REM MODE CLS 81
45 POKE 249,0:POKE 12314,0:EXEC 54958

Programme de démo : ModeCLS.K7

Patrice


 

Truc n° 1 : La sauvegarde du patrimoine nécessite de conserver les programmes, tant ceux provenant du commerce que ceux issus du monde amateur, sur un support plus fiable que celui d'origine sur cassette. Le principe étant admis, voici une méthode permettant de réaliser cette tâche d'une façon simple. L'archive comporte les explications, le programme utilisé (CDex dans sa version 1.51) et des captures d'écran :

Fichiers : Dossier_Wav_Programmes.zip

Patrice

 

Les démos

Utilitaires
ASMPARAM v1.1 Patrice Lapierre Programme de démonstration Alice 32 ou 90 dont la fonction est de visualiser les paramètres importants de l'éditeur-assembleur résident en phases d'écriture et d'assemblage d'un programme source rédigé en langage d'assemblage avec Alice ou DCAlice. Ce programme comporte un mode d'emploi inclus dans l'archive, il est intitulé ASMPARAM et il occupe 296 octets dans la zone RAM système de $30D0 à $31F7.
DESASSEM v1.0 Inconnu Cet utilitaire est un désassembleur immédiat rédigé en Basic, son auteur est inconnu. Il est présent sur le site de Daniel en version originale. Il comportait de nombreux bugs que j'ai corrigés, je l'ai également adapté à la syntaxe de l'éditeur-assembleur résident d'Alice 32/90 et j'y ai rajouté un mode d'emploi succint (Patrice Lapierre).
MONITEUR v1.0 JF. Gallet (23 novembre 1984) Ce programme utilitaire, dont le listing provient de l'ouvrage "Les Astuces D'Alice 32 et 90", est un outil indispensable pour tout programmeur souhaitant écrire des routines en langage machine. L'archive contient le fichier source, le programme objet exécutable, un mode d'emploi qui est extrait de l'ouvrage cité en référence et le listing source sous forme d'un fichier texte.
CATALOGUES v1.0 Patrice Lapierre (03 février 2008) Deux programmes utilitaires écrits en basic qui permettent de visualiser à l'écran l'ensemble des noms de programme contenus sur une cassette. Ils ne fonctionnent qu'avec Alice 32/90.
RESTORBAS v1.0 Patrice Lapierre (22 juillet 2004) Cette routine en langage machine fonctionne avec les modèles Alice 32 et 90, elle se charge à partir de l'adresse $3020 (12320) jusqu'à $3029 soit un volume de 10 octets (zone RAM système d' Alice). La fonction réalisée permet de récupérer un programme Basic après un <NEW> effectué par erreur.
Desas4Ko v1.0 Patrice Lapierre (01 novembre 2004) Ce programme entièrement rédigé en langage machine fonctionne avec Alice 4 Ko ou MC-10 uniquement. Il désassemble un programme en langage machine avec la même syntaxe que celle utilisée par l'éditeur-assembleur des Alice 32/90 (fichier WAV inclu dans l'archive).
BEEPCLAV v1.0 Patrice Lapierre (19 avril 2008) Cette routine en langage machine ne fonctionne qu'avec les versions Alice 32/90. Elle s'installe dans la zone système de ces derniers et génère un beep à chaque appui sur une touche du clavier en mode éditeur Basic uniquement.

Histoire - Hardware - Software - Extensions - Ressources - A propos

Le [wiki] d'Alice - Conception et co-réalisation © 2008
Hardware, software & extensions : Patrice LAPIERRE - Le [wiki] d'Alice
Software, documentation & émulateur : Daniel COULOM - DCAlice
Histoire, documents associés & graphismes : Carl HERVIER - Retro Computing
Site web, design, coordination du projet & photographies : Fabien NECK - System.cfg
Visiteurs : 1342