
| Histoire | Hardware | Software | Extensions | Ressources | A propos |
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
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):
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'assembleurAlors 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.
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:
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:
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:
L'exécution immédiate du programme objet est également possible. La commande <CTRL> A permet de corriger une réponse.
L'Assembleur résident est soumis à certaines contraintes de format et directives.
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:
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.
Elles sont relativement limitées en nombre, mais centrées sur celles qui sont essentielles, à savoir:
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 :
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 :
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.
2- Ce programme permet de changer le format d'écran entre 32, 40 et 80 colonnes.
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 |
|||
ANAOBJLP![]() |
v1.5 | Patrice Lapierre | (28 mai 2004) Cet utilitaire écrit entièrement en langage machine permet de visualiser les paramètres de chargement, de lancement, ainsi que le nom et le volume
occupé par un programme objet exécutable inconnu en LM. Il vient en complément indispensable de l'utilitaire CSAVEMLP du même auteur, ainsi que des outils
d'analyses tels que désassembleurs, dumpeurs ou moniteurs hexadécimaux. Il fonctionne uniquement sur Alice 32 avec ou sans extension de RAM ou Alice 90. |
| ASMPARAM | v1.1 | Patrice Lapierre | Programme de démonstration pour Alice 32 ou 90, dont la fonction est de visualiser les paramètres importants de l'éditeur-assembleur résident lors des 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. |
| 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. |
CATALOG5![]() |
v5.0 | Patrice Lapierre | (1988) Cet utilitaire permet d'analyser la composition d'un logiciel sauvegardé sur cassette, à savoir connaître le nombre de
fichiers composant l'application, le nom de ceux-ci et leur type. Celui-ci peut-être Basic, Langage Machine, Tableau numérique,
Source Assembleur. Le programme indique également la taille en octets pour un fichier Basic ainsi que l'adresse d'exécution et de
début de chargement pour un fichier objet exécutable en LM. Pour résumer il permet d'afficher le catalogue d'une cassette.
Le pack contient le mode d'emploi, le programme CATALOG5 en version K7 et WAV, ainsi que le listing du programme au format texte. Compatible avec Alice 32 et 90. |
| 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. |
| CSAVEMPL | v1.0 | Patrice Lapierre | (21 juillet 2004) Cet utilitaire se charge dans la zone magique des Alice 32 ou 90. Il permet de sauvegarder une zone mémoire quelconque ou un programme objet LM sur cassette. |
| DELETE | v1.5 | Patrice Lapierre | (25 septembre 2004) Cet utilitaire en langage machine fait suite aux utilitaires Basic déjà existant (RENUM et MERGE dont l'auteur
est JF. Gallet, ainsi que RECUP-LP de P. Lapierre). Il permet de supprimer des lignes d'un programme Basic dont les numéros sont
consécutifs, dans un but de modifications éventuelles. Il se charge dans l'espace mémoire magique des Alice 32 ou 90 situé entre $3020 et $31FF. |
| 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). |
| 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). |
MERGE![]() |
v1.0 | JF. Gallet | (23 Novembre 1984) Utilitaire Basic écrit en langage machine. Ce programme permet la fusion de deux programmes Basic.
Le premier est chargé dans la mémoire de Alice 32/90 et l'exécution de "MERGE" permet d'ajouter un autre programme à la suite,
avec la condition impérative que ses numéros de lignes soient consécutifs à ceux du programme Basic chargé initialement. Le programme source est inclus dans le pack, ainsi qu'un mode d'emploi succint. Les fichiers sont disponibles aux formats K7 et WAV pour le source et l'objet. |
| 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. |
| RECUP-LP | v1.0 | Patrice Lapierre | (25 juillet 2004) Ce programme s'installe dans la zone magique des Alice 32 ou 90. Il sert à récupérer un programme source assembleur lorsqu'une commande intempestive <SHIFT> <&> a été effectuée ou une commande <NEW> pour un programme Basic. |
RENUM![]() |
v1.0 | JF. Gallet | (23 Novembre 1984) Cet utilitaire permet de renuméroter automatiquement un programme Basic chargé dans la
mémoire de Alice 32/90. Il provient de l'ouvrage "Les Astuces de Alice 32 & 90" de J-F Gallet. Le programme source est inclus dans le pack, ainsi qu'un mode d'emploi succint. Les fichiers sont disponibles aux formats K7 et WAV pour le source et l'objet. |
| 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. |
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 :
13059