Les fondements d'Altair BASIC
Voici les fondements d'Altair BASIC.
Commandes
Une commande est généralement donnée après que BASIC ait affiché OK. C'est ce qu'on appelle le "niveau de commande". Les commandes peuvent être utilisées comme instructions de programme. Certaines commandes, telles que LIST, NEW et CLOAD termineront l'exécution du programme lorsqu'elles seront terminées.
Nom | Exemple | Objectif/utilisation | |
---|---|---|---|
CLEAR | CLEAR | Supprime toutes les variables et les tableaux sont réinitialiser à zéro. | |
LIST | LIST LIST 100 |
Répertorie le programme en cours en commençant éventuellement à la ligne spécifiée. La liste peut être arrêter avec Control+C (BASIC finira de lister la ligne actuelle) | |
NULL | NULL 3 | Commande Null uniquement dans la version 8K, mais paragraphe applicable également à la version 4K. Définit le nombre de caractères nuls (ASCII 0) affichés après un retour chariot/saut de ligne. Le nombre de nuls affichés peut être réglé de 0 à 71. C'est un plus pour les terminaux papier nécessitant un délai après un CRLP : Il est nécessaire de régler le nombre de nuls tapés sur CRLF (Carriage return/line feed) à 0 avant qu'une bande papier d'un programme ne soit lire à partir d'un télétype (TELETYPE est une marque déposée de Teletype Corporation). Dans la version 8K, utilisez la commande Null pour définir le nombre de valeurs nulles sur zéro. Dans la version 4K, cela est accompli en corrigeant l'emplacement 46 octal pour contenir le nombre de nuls à taper plus 1. (Déposer un 1 à l'emplacement 46 définirait le nombre de nuls tapés à zéro.) Lorsque vous perforez une bande de papier de un programme utilisant la commande LIST, NULL doit être défini >=3 pour 10 terminaux CPS, >=6 pour 30 terminaux CPS. Lorsque vous ne réalisez pas de bande magnétique, il est recommandez d'utiliser un réglage nul de 0 ou 1 pour les télétypes et de 2 ou 3 pour les terminaux 30 CPS à copie papier. Un réglage de 0 fonctionnera avec les CRT compatibles avec le téléscripteur. | |
RUN | RUN | Démarre l'exécution du programme actuellement en mémoire à l'instruction numérotée la plus basse. Run supprime toutes les variables (fait un CLEAR) et restaure DATA. Si vous avez arrêté votre programme et souhaitez poursuivre l'exécution à un moment donné du programme, utilisez une instruction GOTO directe pour démarrer l'exécution de votre programme à la ligne souhaitée. | |
RUN 200 | (version 8K uniquement) commençant éventuellement au numéro de ligne spécifié. | ||
NEW | NEW | Supprime le programme en cours et toutes les variables. | |
Les commandes suivantes sont uniquement dans la version 8K | |||
CONT | CONT | Continue l'exécution du programme après la frappe d'un Control+C ou l'exécution d'une instruction STOP. Vous ne pouvez pas continuer après une erreur, après avoir modifié votre programme ou avant que votre programme ait été exécuté. L'un des principaux objectifs de CONT est le débogage. Supposons qu'à un moment donné après l'exécution de votre programme, rien ne soit affiché. C'est peut-être parce que votre programme effectue des calculs prenant du temps, mais c'est peut-être parce que vous êtes tombé dans une "boucle infinie". Une boucle infinie est une série d'instructions BASIC dont il n'y a pas d'échappatoire. L'Altair continuera d'exécuter la série d'instructions encore et encore, jusqu'à ce que vous interveniez ou jusqu'à ce que l'alimentation de l'Altair soit coupée. Si vous pensez que votre programme est dans une boucle infinie, tapez un Control+C. Dans la version 8K, le numéro de ligne de l'instruction BASIC était en cours d'exécution sera affiché. Une fois que BASIC a affiché OK, vous pouvez utiliser PRINT pour taper certaines des valeurs de vos variables. Après avoir examiné ces valeurs, vous serez peut-être convaincu que votre programme fonctionne correctement. Vous devez ensuite taper CONT pour continuer l'exécution de votre programme là où il s'est arrêté, ou taper une instruction directe GOTO pour reprendre l'exécution du programme sur une ligne différente. Vous pouvez également utiliser des instructions d'affectation (LET) pour définir certaines de vos variables sur des valeurs différentes. N'oubliez pas que si vous contrôlez un programme et que vous prévoyez de le continuer plus tard, vous ne devez pas obtenir d'erreur ni saisir de nouvelles lignes de programme. Si vous le faites, vous ne pourrez pas continuer et vous obtiendrez une erreur "CN" (Continue Not). Il est impossible de poursuivre une commande directe. CONT reprend toujours l'exécution à la prochaine instruction à exécuter dans votre programme lorsque Control+C a été tapé. | |
Les deux commandes suivantes sont disponibles uniquement dans la version cassette 8K | |||
CLOAD | CLOAD C | Charge le programme nommé P à partir de la cassette. Une commande NEW est automatiquement effectuée avant l'exécution de la commande CLOAD. Lorsque vous avez terminé; le CLOAD affiche OK comme d'habitude. L'indicatif de programme à un caractère peut être n'importe quel caractère d'affichage. CSAVE et CLOAD utilisent les ports d'entrées/sorties 6 et 7. | |
CSAVE | CSAVE P | Sauvegarde sur cassette le programme en cours dans la mémoire de l'Altair. Le programme en mémoire reste inchangé. Plusieurs programmes peuvent être enregistrés sur la cassette à l'aide de cette commande. CSAVE et CLOAD utilisent les ports d'entrées/sorties 6 et 7. |
Les opérateurs
Symbole | Exemple d'instruction | But/utilisation |
---|---|---|
= | A=100 LET Z=2.5 |
Affecte une valeur à une variable. Le LET est facultatif. |
- | B=-A | Négation. Notez que 0-A est une soustraction, tandis que -A est une négation. |
↑ (habituellement un Shift+N) | 130 PRINT X↑3 | Exponentation (version 8K) (égal à X*X*X dans l'exemple d'instruction) 0↑0=1 0 à toute autre puissance = 0 A↑B, avec A négatif et B non entier donne une erreur FC. |
* | 140 X=R*(8*D) | Multiplication |
Règles d'évaluation des expressions :
- Les opérations de priorité supérieure sont exécutées avant les opérations de priorité inférieure. Cela signifie que la multiplication et les divisions sont effectuées avant les additions et les soustractions. Par exemple, 2+10/5 égale 4, pas 2,4. Lorsque des opérations d'égale priorité se trouvent dans une formule, celle de gauche est exécutée en premier : 6-3+5=8, et non -2.
- L'ordre dans lequel les opérations sont effectuées peut toujours être spécifié explicitement par l'utilisation de parenthèses. Par exemple, pour ajouter 5 à 3 puis diviser par 4, nous utiliserions (5+3)/4, ce qui équivaut à 2. Si à la place nous avions utilisé 5+3/4, nous obtiendrions 5,75 comme résultat (5 plus 3/4).
La priorité des opérateurs utilisés dans l'évaluation des expressions est la suivante, dans l'ordre commençant par la priorité la plus élevée (Remarque : les opérateurs répertoriés sur la même ligne ont la même priorité) :
- Les formules entre parenthèses sont toujours évaluées en premier
- ↑ : Exponentiation (Version 8K seulement)
- Négation : -X où X peut être une formule
- * / : Multiplication et division
- + - : Addition et soustraction
- Opérateurs relationnels (égalité de priorité pour tous les opérateurs relationnels) :
- NOT : Logique et binaire "NOT" comme la négation, NOT prend seulement la formule à sa droite comme paramètre
- AND : "ET" logique et binaire
- OR : "OU" logique et binaire
Opérateurs relationnels | Description |
---|---|
= | Égale |
<> | Inégal |
< | Moins que |
> | Plus grand que |
<= | Inférieur ou égal |
>= | Meilleur que ou égal |
(Version 8K uniquement) (Ces 3 ci-dessous sont des opérateurs logiques)
Dans la version 4K de BASIC, les opérateurs relationnels ne peuvent être utilisés qu'une seule fois dans une instruction IF. Cependant, dans la version 8K, une expression relationnelle peut être utilisée dans le cadre de n'importe quelle expression.
Les expressions d'opérateur relationnel auront toujours une valeur de vrai (-1) ou une valeur de fausse (0). Par conséquent, (5=4)=0, (5=5)=-1, (4>5)=0, (4<5)=-1,... La clause THEN d'une instruction IF est exécutée chaque fois que la formule après le IF n'est pas égal à 0. C'est-à-dire que IF X THEN... est équivalent à IF X<>0 THEN...
Symbole | Exemple de déclaration | Objectif/utilisation |
---|---|---|
= | 10 IF A=15 THEN 40 | L'expression est égale à l'expression |
<> | 70 IF A<>0 THEN 5 | L'expression n'est pas égale à l'expression |
> | 30 IF B>100 THEN 8 | Expression est supérieure à l'expression |
< | 160 IF 8<2 THEN 10 | Expression inférieure à l'expression |
<=, =< | 180 IF 100<=8+C THEN 10 | Expression inférieure ou égale à Expression |
>=, => | 190 IF Q=>R THEN 50 | Expression supérieure ou égale à l'expression |
AND | 2 IF A<5 AND B<2 THEN 7 | (Version 8K uniquement) Si l'expression 1 (A<5) ET l'expression 2 (B<2) sont toutes les deux vraies, alors passez à la ligne 7 |
OR | IF A<1 OR B<2 THEN 2 | (Version 8K uniquement) Si l'expression 1 (A<1) OU l'expression 2 (B<2) est vraie, alors passez à la ligne 2 |
NOT | IF NOT Q3 THEN 4 | (Version 8K uniquement) Si l'expression "NOT Q.3" est vraie (parce que Q.3 est fausse), alors passez à la ligne 4. Remarque : NOT -1=0 (NOT vrai=faux) |
AND, OR et NOT peuvent être utilisés pour la manipulation de bits et pour effectuer des opérations booléennes.
Ces trois opérateurs convertissent leurs paramètres en 16 bits, signés à deux, compléments entiers compris entre -32768 et +32767. Ils exécutent ensuite l'opération logique spécifiée sur eux et renvoient un résultat dans le même intervalle. Si les paramètres ne sont pas dans cet intervalle, une erreur "FC" se produit.
Les opérations sont effectuées au niveau du bit, cela signifie que chaque bit du résultat est obtenu en examinant le bit à la même position pour chaque paramètre.
La table de vérité suivante montre la relation logique entre les bits :
Opérateur | Paramètre 1 | Paramètre 2 | Résultat |
---|---|---|---|
AND | 1 | 1 | 1 |
0 | 1 | 0 | |
1 | 0 | 0 | |
0 | 0 | 0 | |
OR | 1 | 1 | 1 |
1 | 0 | 1 | |
0 | 1 | 1 | |
0 | 0 | 0 | |
NOT | 1 | - | 0 |
0 | - | 1 |
Exemples
Dans tous les exemples ci-dessous, les zéros non significatifs sur les nombres binaires ne sont pas affichés :
Exemples | Explication |
---|---|
63 AND 16=16 | Puisque 63 est égal à 111111 binaire et 16 est égal à 10000 binaire, le résultat de l'AND est 10000 ou 16 binaire. |
15 AND 14=14 | 15 est égal au binaire 1111 et 14 est égal au binaire 1110, donc 15 AND 14 est égal au binaire 1110 ou 14. |
-1 AND 8=8 | -1 est égal à binaire 1111111111111111 et 8 est égal à binaire 1000, donc le résultat est binaire 1000 ou 8 décimal. |
4 AND 2=0 | 4 est égal à 100 binaire et 2 est égal à 10 binaire, donc le résultat est 0 binaire car aucun des bits de l'un ou l'autre des arguments ne correspond pour donner un bit 1 dans le résultat. |
4 OR 2=6 | Le binaire 100 OR avec le binaire 10 est égal au binaire 110 ou 6 décimal. |
10 OR 10=10 | Le binaire 1010 OR avec le binaire 1010 est égal au binaire 1010 ou 10 décimal. |
-1 OR -2=-1 | Binaire 111111111111111 (-1) OR avec binaire 1111111111111110 (-2) est égal à binaire 1111111111111111, ou -1. |
NOT 0=-1 | Le complément binaire des chiffres binaires 0 à 16 est de seize unités (1111111111111111) ou -1. |
NOT X | NOT X est égal à -(X+1). En effet, pour former le complément à deux de seize bits du nombre, vous prenez le complément de bit (à un) et ajoutez un. |
NOT 1=-2 | Le complément de seize bits de 1 est 1111111111111110, étant égal à -(1+1) ou -2. |
Une utilisation typique des opérateurs au niveau du bit consiste à tester les bits définis dans les ports d'entrée de l'Altair reflétant l'état d'un périphérique externe. La position de bit 7 est le bit le plus significatif d'un octet, tandis que la position 0 est la moins significative.
Par exemple, supposons que le bit 1 du port d'entrée/sortie 5 soit 0 lorsque la porte de la salle X est fermée et 1 si la porte est ouverte. Le programme suivant affichera "ALERTE D'INTRUSION" si la porte est ouverte :
Cependant, nous pouvons remplacer l'instruction 10 par une instruction WAIT, ayant exactement le même effet :
- 10 WAIT 5,2
Cette ligne retarde l'exécution de l'instruction suivante dans le programme jusqu'à ce que le bit 1 du port d'entrée/sortie 5 devienne 1. WAIT est beaucoup plus rapide que l'instruction IF équivalente et prend également moins d'octets d'entreposage de programme.
Les commutateurs de détection de l'Altair peuvent également être utilisés comme périphérique d'entrée par la fonction INP. Le programme ci-dessous affiche tous les changements dans les commutateurs de détection.
Voici une autre manière utile d'utiliser les opérateurs relationnels :
- 125 A=-(B>C)*B-(B<=C)*C
Cette instruction définira la variable A sur MAX(B,C) = la plus grande des deux variables B et C.
Instructions
Remarque : Dans la description suivante des instructions, un paramètre de V ou W indique une variable numérique, X indique une expression numérique, X$ indique une expression de chaîne de caractères et un I ou J indique une expression tronquée à un entier avant l'instruction est exécuté. La troncature signifie que toute partie fractionnaire du nombre est perdue, par exemple 3,9 devient 3, 4,01 devient 4.
Une expression est une série de variables, d'opérateurs, d'appels de fonction et de constantes qui, après que les opérations et les appels de fonction sont effectués en utilisant les règles de priorité, sont évaluées à une valeur numérique ou de chaîne de caractères. Une constante est soit un nombre (3.14), soit une chaîne de caractères littérale ("CHAINE").
Nom | Exemple | Objectif/utilisation |
---|---|---|
DATA | 10 DATA 1,3,-1E3,.04 | Spécifie les données, lues de gauche à droite. Les informations apparaissent dans les relevés de données dans le même ordre qu'elles seront lues dans le programme. Dans la version 4K de BASIC, les instructions de données doivent être les premières instructions sur une ligne. Des expressions peuvent également apparaître dans les déclarations de données de la version 4K. |
20 DATA "CHAINE",ZOO | (Version 8K) Les chaînes peuvent être lues à partir des instructions DATA. Si vous souhaitez que la chaîne de caractères contienne des espaces (espaces), des deux-points (:) ou des virgules (,), vous devez placer la chaîne de caractères entre guillemets doubles. Il est impossible d'avoir un guillemet double dans des données de chaîne ou un littéral de chaîne de caractères. (""MITS"" est illégal). | |
DEF | 100 DEF FNA(V)=V/B+C | (Version 8K) L'utilisateur peut définir des fonctions telles que les fonctions intégrées (SQR, SGN, ABS,...) grâce à l'utilisation de l'instruction DEF. Le nom de la fonction est "FN" suivi de n'importe quel nom de variable légal, par exemple : FNX, FNJ7, FNKO, FNR2. Les fonctions définies par l'utilisateur sont limitées à une seule ligne. Une fonction peut être définie comme étant n'importe quelle expression, mais ne peut avoir qu'un seul paramètre. Dans l'exemple B et C sont des variables étant utilisées dans le programme. L'exécution de l'instruction DEF définit la fonction. Les fonctions définies par l'utilisateur peuvent être redéfinies en exécutant une autre instruction DEF pour la même fonction. Les fonctions de chaîne de caractères définies par l'utilisateur ne sont pas autorisées. "V" est appelé la variable factice. |
110 Z=FNA(3) | L'exécution de cette instruction suivant ce qui précède entraînerait le réglage de Z sur 3/B+C, mais la valeur de V serait inchangée. | |
DIM | 113 DIM A(3),8(10) | Alloue de l'espace pour les matrices. Tous les éléments de la matrice sont mis à zéro par l'instruction DIM. |
114 DIM R3(5,5),D$(2,2,2) | (Version 8K) Les matrices peuvent avoir plusieurs dimensions. Jusqu'à 255 dimensions sont autorisées, mais en raison de la restriction de 72 caractères par ligne, le maximum pratique est d'environ 34 dimensions. | |
15 DIM Q1(N),Z(2*I) | Les matrices peuvent être dimensionnées dynamiquement pendant l'exécution du programme. Si une matrice n'est pas explicitement dimensionnée avec une instruction DIM, on suppose qu'il s'agit d'une matrice unidimensionnelle dont l'index unique peut aller de 0 à 10 (onze éléments). | |
117 A(8)=4 | Si cette instruction était rencontrée avant qu'une instruction DIM pour A ne soit trouvée dans le programme, ce serait comme si un DIM A(10) avait été exécuté avant l'exécution de la ligne 117. Tous les index commencent à zéro (0), ce qui signifie que DIM X(100) alloue en réalité 101 éléments de matrice. | |
END | 999 END | Termine l'exécution du programme sans afficher de message BREAK (voir STOP). CONT après une instruction END entraîne la reprise de l'exécution à l'instruction après l'instruction END. END peut être utilisé n'importe où dans le programme et est facultatif. |
FOR | 300 FOR V=1 TO 9.3 STEP .6 | (voir l'instruction NEXT) V est mis égal à la valeur de l'expression suivant le signe égal, dans ce cas 1. Cette valeur est appelée la valeur initiale. Ensuite, les instructions entre FOR et NEXT sont exécutées. La valeur finale est la valeur de l'expression suivant le TO. Le saut est la valeur de l'expression suivant STEP. Lorsque l'instruction NEXT est rencontrée, l'étape est ajoutée à la variable. |
310 FOR V=1 TO 9.3 | Si aucune STEP n'a été spécifiée, elle est supposée être une. Si le pas est positif et la nouvelle valeur de la variable est <= la valeur finale (9.3 dans cet exemple), ou la valeur du pas est négative et la nouvelle valeur de la variable est => la valeur finale, alors la première instruction suivant l'instruction FOR est exécutée. Sinon, l'instruction suivant l'instruction NEXT est exécutée. Toutes les boucles FOR exécutent les instructions entre le FOR et le NEXT au moins une fois, même dans des cas comme FOR V=1 TO 0. | |
315 FOR V=10*N TO 3.4/Q STEP SQR(R) | Notez que des expressions (formules) peuvent être utilisées pour les valeurs initiales, finales et d'étape dans une boucle FOR. Les valeurs des expressions ne sont calculées qu'une seule fois, avant l'exécution du corps de la boucle FOR .... NEXT. | |
320 FOR V=9 TO 1 STEP -1 | Lorsque l'instruction suivant NEXT est exécutée, la variable de boucle n'est jamais égale à la valeur finale, mais est égale à la valeur ayant provoqué l'arrêt de la boucle FOR ... NEXT. Les instructions entre FOR et son NEXT correspondant dans les deux exemples ci-dessus (310 et 320) seraient exécutées 9 fois. | |
330 FOR W=1 TO 10: FOR W=1 TO:NEXT W:NEXT W | Erreur : ne pas utiliser de boucles FOR...NEXT imbriquées avec la même variable d'index. L'imbrication des boucles FOR n'est limitée que par la mémoire disponible. | |
GOTO | 50 GOTO 100 | Branche sur l'instruction spécifiée. |
GOSUB | 10 GOSUB 910 | Se branche sur l'instruction spécifiée (910) jusqu'à ce qu'un RETURN soit rencontré ; lorsqu'une branche est ensuite faite à l'instruction après le GOSUB. L'imbrication GOSUB n'est limitée que par la mémoire disponible. |
IF...GOTO | 32 IF X<=Y+23.4 GOTO 92 | (Version 8K) Équivalent à IF ... THEN, sauf que IF ... GOTO doit être suivi d'un numéro de ligne, tandis que IF ... THEN peut être suivi soit d'un numéro de ligne, soit d'une autre instruction. |
IF...THEN | IF X<10 THEN 5 | Branche sur l'instruction spécifiée si la relation est vrai. |
20 IF X<0 THEN PRINT "X EST INFERIEUR A 0" | Exécute toutes les instructions sur le reste de la ligne après THEN si la relation est vrai. | |
25 IF X=5 THEN 50:Z=A | Avertissement : Le "2=A" ne sera jamais exécuté car si la relation est vraie, BASIC passera à la ligne 50. Si la relation est fausse, BASIC passera à la ligne après la ligne 25. | |
26 IF X<0 THEN PRINT "ERREUR, X EST NEGATIF": GOTO 350 | Dans cet exemple, si X est inférieur à 0, l'instruction PRINT sera exécutée, puis l'instruction GOTO passera à la ligne 350. Si X était 0 ou positive, BASIC procédera à l'exécution des lignes après la ligne 26. | |
INPUT | 3 INPUT V,W,W2 | Demande des données au terminal (à saisir). Chaque valeur doit être séparée de la valeur précédente par une virgule (,). La dernière valeur saisie doit être suivie d'un retour chariot. Un "?" est saisi comme caractère de prompt. Dans la version 4K, une valeur saisie en réponse à une instruction INPUT peut être une formule, telle que 2*SIN(.16)-3. Cependant, dans la version 8K, seules les constantes peuvent être saisies en tant que réponse à une instruction INPUT, telle que 4.5E-3 ou "CAT". Si plus de données ont été demandées dans une instruction INPUT que ce qui a été tapé, un "??" est affiché et le reste des données doit être saisi. Si plus de données ont été saisies que ce qui a été demandé, les données supplémentaires seront ignorées. La version 8K affichera l'avertissement "EXTRA IGNORED" lorsque cela se produit. La version 4K n'affichera pas de message d'avertissement. (Version 8K) Les chaînes doivent être saisies dans le même format que celui spécifié dans les instructions DATA. |
5 INPUT "VALEUR";V | (Version 8K) Tape éventuellement une chaîne de caractères de prompt ("VALEUR") avant de demander des données au terminal. Si un retour chariot est tapé dans une instruction d'entrée, BASIC revient en mode commande. Si vous tapez CONT après l'interruption d'une commande INPUT, l'exécution reprendra à l'instruction INPUT. | |
LET | 300 LETW=X 310 V=5.1 |
Affecte une valeur à une variable. LET est facultatif. |
NEXT | 340 NEXT V 345 NEXT |
Marque la fin d'une boucle FOR. (Version 8K) Si aucune variable n'est donnée, correspond à la boucle FOR la plus récente. |
50 NEXT V,W | (Version 8K) Un seul NEXT peut être utilisé pour faire correspondre plusieurs instructions FOR. Équivalent à NEXT V : NEXT W. | |
ON...GOTO | 100 ON I GOTO 10,20,30,40 | (Version 8K) Branche sur la ligne indiquée par le Ième chiffre après le GOTO. C'est-à-dire : SI 1=1, ALORS PASSER A LA LIGNE 10 SI 1=2, ALORS PASSEZ À LA LIGNE 20 SI 1=3, ALORS PASSEZ À LA LIGNE 30 SI 1=4, ALORS PASSEZ À LA LIGNE 40. Si I=0 ou I tente de sélectionner une ligne inexistante (>=5 dans ce cas), l'instruction suivant l'instruction ON est exécutée. Cependant, si I est >255 ou <0, un message d'erreur FC en résultera. Autant de numéros de ligne pouvant tenir sur une ligne peuvent suivre un ON ... GOTO. |
105 ON SGN(X)+2 GOTO 40,50,60 | Cette instruction passera à la ligne 40 si l'expression X est inférieure à zéro, à la ligne 50 si elle est égale à zéro et à la ligne 60 si elle est supérieure à zéro. | |
ON...GOSUB | 110 ON I GOSU8 50,60 | (Version 8K) Identique à "ON...GOTO", sauf qu'un appel de sous-programme (GOSUB) est exécuté à la place d'un GOTO. RETURN des branches GOSUB à l'instruction après ON...GOSUB. |
OUT | 355 OUT I,J | (Version 8K) Envoie l'octet J au port de sortie I. I et J doivent être >=0 et <=255. |
POKE | 357 POKE I,J | (Version 8K) L'instruction POKE entrepose l'octet spécifié par son deuxième paramètre (J) à l'emplacement indiqué par son premier paramètre (I). L'octet à entreposer doit être =>0 et <=255, sinon une erreur FC se produira. L'adresse (I) doit être =>0 et <=32767, sinon une erreur FC se produira. L'utilisation négligente de l'instruction POKE vous fera probablement "piquer" BASIC à mort ; c'est-à-dire que la machine se bloquera, et vous devrez recharger BASIC et perdrez tout programme que vous avez tapé. Un POKE vers un emplacement mémoire inexistant est inoffensif. L'une des principales utilisations de POKE est de transmettre des paramètres à des sous-programmes en langage machine. Vous pouvez également utiliser PEEK et POKE pour écrire un diagnostic mémoire ou un assembleur en BASIC. |
360 PRINT X,Y;Z 370 PRINT 380 PRINT X,Y; 390 PRINT "VALEUR EST ";A 400 PRINT A2,B, |
Affiche la valeur des expressions sur le terminal. Si la liste des valeurs à afficher ne se termine pas par une virgule (,) ou un point-virgule (;), alors un retour chariot/saut de ligne est exécuté après l'affichage de toutes les valeurs. Les chaînes de caractères entre guillemets (") peuvent également être affichées. Si un point-virgule sépare deux expressions dans la liste, leurs valeurs sont affichées l'une à côté de l'autre. Si une virgule apparaît après l'expression dans la liste et que la tête d'affichage est à la position d'affichage 56 alors alors un retour chariot/saut de ligne est exécuté. Si la tête d'affichage est avant la position d'affichage 56, des espaces sont affichés jusqu'à ce que le chariot soit au début du champ de 14 colonnes suivant (jusqu'à ce que le chariot soit à la colonne 14, 28 , 42 ou 56...) S'il n'y a pas de liste d'expressions à afficher, comme à la ligne 370 des exemples, alors un retour chariot/saut de ligne est exécuté. | |
410 PRINT MID$(A$,2); | (Version 8K) Les expressions de chaîne de caractères peuvent être affichées. | |
READ | 490 READ V,W | Lit les données dans des variables spécifiées à partir d'une instruction DATA. La première donnée lue sera la première donnée répertoriée dans la première instruction DATA du programme. Le deuxième élément de données lu sera le deuxième élément répertorié dans la première instruction DATA, et ainsi de suite. Lorsque toutes les données ont été lues à partir de la première instruction DATA, la prochaine donnée à lire sera la première donnée répertoriée dans la deuxième instruction DATA du programme. Tenter de lire plus de données qu'il n'y en a dans toutes les instructions DATA d'un programme provoquera une erreur OD (Out of Data). Dans la version 4K, une erreur SN provenant d'une instruction READ peut signifier que les données qu'il tentait de lire à partir d'une instruction DATA n'étaient pas correctement formatées. Dans la version 8K, le numéro de ligne indiqué dans l'erreur SN fera référence au numéro de ligne où se trouve réellement l'erreur. |
REM | 500 REM MAINTENANT FIXE A V=0 | Permet au programmeur de mettre des commentaires dans son programme. Les instructions REM ne sont pas exécutées, mais peuvent être reliées à branchement. Une instruction REM se termine par une fin de ligne, mais pas par un ":". |
505 REM FIXE V=0: V=0 | Dans ce cas, le V=0 ne sera jamais exécuté par BASIC. | |
506 V=0: REM FIXE V=0 | Dans ce cas V=0 sera exécuté. | |
RESTORE | 510 RESTORE | Permet la relecture des instructions DATA. Après un RESTORE, la prochaine donnée lue sera la première donnée répertoriée dans la première instruction DATA du programme. La deuxième donnée lue sera la deuxième donnée répertoriée dans la première instruction DATA, et ainsi de suite comme dans une opération READ normale. |
RETURN | 50 RETURN | Provoque le retour d'un sous-programme à l'instruction après le dernier GOSUB exécuté. |
STOP | 9000 STOP | Provoque l'arrêt de l'exécution d'un programme et le passage en mode commande. (Version 8K) Affiche BREAK IN LINE 9000. (selon cet exemple) CONT après un STOP se branche sur l'instruction suivant le STOP. |
WAIT | 805 WAIT I,J,K 806 WAIT I,J |
(Version 8K) Cette instruction lit l'état du port d'entrée I, les OU exclusifs K avec l'état, puis les ET avec le résultat avec J jusqu'à ce qu'un résultat différent de zéro soit obtenu. L'exécution du programme se poursuit à l'instruction suivant l'instruction WAIT. Si l'instruction WAIT n'a que deux paramètres, K est supposé égal à zéro. Si vous attendez qu'un bit devienne zéro, il devrait y avoir un un dans la position correspondante de K. I, J et K doivent être =>0 et <=255. |
Fonctions intrinsèques 4K
Syntaxe | Exemple | Objectif/utilisation |
---|---|---|
ABS(X) | 120 PRINT ABS(X) | Donne la valeur absolue de l'expression X. ABS renvoie X si X>=0, -X sinon. |
INT(X) | 140 PRINT INT(X) | Renvoie le plus grand entier inférieur ou égal à son paramètre X. Par exemple : INT(.23)=O, INT(7)=7, INT(-.1)=-1, INT(-2)=-2, INT(1.1)=1. Ce qui suit arrondirait X à D décimales : INT(X*10↑D+.5)/10↑D |
RND(X) | 170 PRINT RND(X) | Génère un nombre aléatoire entre 0 et 1. Le paramètre X contrôle la génération de nombres aléatoires comme suit : X<0 démarre une nouvelle séquence de nombres aléatoires en utilisant X. L'appel de RND avec le même X démarre la même séquence de nombres aléatoires. X=0 donne le dernier nombre aléatoire généré. Des appels répétés à RND(0) renverront toujours le même nombre aléatoire. X>0 génère un nouveau nombre aléatoire entre 0 et 1. Notez que (B-A)*RND(1)+A générera un nombre aléatoire entre A et B. |
SGN(X) | 230 PRINT SGN(X) | Donne 1 si X>0, 0 si X=0 et -1 si X<0. |
SIN(X) | 190 PRINT SIN(X) | Donne le sinus de l'expression X. X s'interprète comme étant en radians. Remarque : COS(X)=SIN(X+3.14159/2) et que 1 Radian=180/PI degrés=57.2958 degrés ; de sorte que le sinus de X degrés=SIN(X/57.2958). |
SQR(X) | 180 PRINT SQR(X) | Donne la racine carrée du paramètre X. Une erreur FC se produit si X est inférieur à zéro. |
TAB(I) | 240 PRINT TAB(I) | Indique les espaces à la position d'affichage spécifiée (colonne) sur le terminal. Ne peut être utilisé que dans les instructions PRINT. Zéro est la colonne la plus à gauche du terminal, 71 la plus à droite. Si le chariot est au-delà de la position I, aucun affichage n'est effectuée. Il dois être =>0 et <=255. |
USR(I) | 200 PRINT USR(I) | Appelle le sous-programme de langage machine de l'utilisateur avec le paramètre I. Voir POKE et PEEK. |
Fonctions 8K
(Comprend tous ceux répertoriés sous Fonctions intrinsèques 4K plus les suivants en plus.)
Syntaxe | Exemple | Objectif/utilisation |
---|---|---|
ATN(X) | 210 PRINT ATN(X) | Donne l'arc tangente du paramètre X. Le résultat est renvoyé en radians et est compris entre -PI/2 et PI/2. (PI/2=1,5708). |
COS(X) | 200 PRINT COS(X) | Donne le cosinus de l'expression X. X s'interprète comme étant en radians. |
EXP(X) | 150 PRINT EXP(X) | Donne la constante "E" (2.71828) élevée à la puissance X. (E↑X) Le paramètre maximum pouvant être passé à EXP sans débordement est 87.3365. |
FRE(X) | 270 PRINT FRE(0) | Donne le nombre d'octets de mémoire actuellement inutilisés par BASIC. La mémoire allouée pour l'espace STRING n'est pas incluse dans le nombre renvoyé par FRE. Pour trouver le nombre d'octets libres dans l'espace STRING, appelez FRE avec un paramètre STRING. |
INP(I) | 265 PRINT INP(I) | Donne l'état de (lit un octet depuis) le port d'entrée I. Le résultat est =>0 et <=255. |
LOG(X) | 160 PRINT LOG(X) | Donne le logarithme naturel (Base E) de son paramètre X. Pour obtenir le logarithme en base Y de X, utilisez la formule LOG(X)/LOG(Y). Exemple : Le logarithme de base 10 (commun) de 7 = LOG(7)/ LOG(10). |
PEEK | 356 PRINT PEEK(I) | La fonction PEEK renvoie le contenu de l'adresse mémoire I. La valeur renvoyée sera =>0 et <=255. Si I est >32767 ou <0, une erreur FC se produira. Une tentative de lecture d'une adresse mémoire inexistante renverra 255. (voir instruction POKE). |
POS(I) | 260 PRINT POS(I) | Donne la position actuelle de la tête d'affichage du terminal (ou du curseur sur les CRT). La position de caractère la plus à gauche sur le terminal est la position zéro et la plus à droite est 71. |
SPC(I) | 250 PRINT SPC(I) | Affiche des caractères d'espacement (ou blancs) sur le terminal. Ne peut être utilisé que dans une instruction PRINT. X doit être =>0 et <=255 ou une erreur FC se produira. |
TAN(X) | 200 PRINT TAN(X) | Donne la tangente de l'expression X. X s'interprète comme étant en radians. |
Chaînes de caractères (version 8K uniquement)
- Une chaîne de caractères peut comporter de 0 à 255 caractères. Toutes les variables de chaîne de caractères se terminent par un signe dollar ($); par exemple, A$, B9$, K$, BONJOUR$.
- Les matrices de chaînes de caractères peuvent être dimensionnées exactement comme les matrices numériques. Par exemple, DIM A$(10,10) crée une matrice de chaînes de caractères de 121 éléments, onze lignes sur onze colonnes (lignes 0 à 10 et colonnes 0 à 10). Chaque élément de matrice de chaîne de caractères est une chaîne de caractères complète, pouvant comporter jusqu'à 255 caractères.
- Le nombre total de caractères utilisés dans les chaînes de caractères à tout moment pendant l'exécution du programme ne peut pas dépasser la quantité d'espace de chaîne de caractères, sinon une erreur du système d'exploitation se produira. Lors de l'initialisation, vous devez configurer l'espace de chaîne afin qu'il puisse contenir le nombre maximum de caractères pouvant être utilisés par les chaînes à tout moment pendant l'exécution du programme.
Nom | Exemple | Objectif/utilisation |
---|---|---|
DIM | 25 DIM A$(10,10) | Alloue de l'espace pour un pointeur et une longueur pour chaque élément d'une matrice de chaînes de caractères. Aucun espace de chaîne n'est alloué. |
LET | 27 LET A$="CHAINE"+V$ | Affecte la valeur d'une expression de chaîne de caractères à une variable de chaîne de caractères. LET est facultatif. |
= > < <= >= <> |
Opérateurs de comparaison de chaînes de caractères. La comparaison est faite sur la base des codes ASCII, un caractère à la fois jusqu'à ce qu'une différence soit trouvée. Si lors de la comparaison de deux chaînes de caractères, la fin de l'une est atteinte, la chaîne de caractères la plus courte est considérée comme la plus petite. Notez que "A " est supérieur à "A" car les espaces de fin sont significatifs. | |
+ | 30 LET Z$=R$+Q$ | Concaténation de chaînes de caractères. La chaîne de caractères résultante doit comporter moins de 256 caractères, sinon une erreur LS se produira. |
INPUT | 40 INPUT X$ | Lit une chaîne de caractères à partir du terminal de l'utilisateur. La chaîne de caractères n'a pas besoin d'être entre guillemets ; mais si ce n'est pas le cas, les blancs en tête seront ignorés et la chaîne de caractères se terminera par un caractère "," ou ":". |
READ | 50 READ X$ | Lit une chaîne de caractères à partir d'instructions DATA dans le programme. Les chaînes de caractères n'ont pas besoin d'être entre guillemets ; mais s'ils ne le sont pas, ils se terminent par un caractère "," ou ":" ou une fin de ligne et les espaces de début sont ignorés. Voir DATA pour le format des données de chaîne de caractères. |
60 PRINT X$ 70 PRINT "CHAINE"+A$ |
Affiche l'expression de chaîne de caractères sur le terminal de l'utilisateur. |
Fonctions de chaîne de caractères (version 8K uniquement)
Syntaxe | Exemple | Objectif/utilisation |
---|---|---|
ASC(X$) | 300 PRINT ASC(X$) | Renvoie la valeur numérique ASCII du premier caractère de l'expression de chaîne de caractères X$. Une erreur FC se produira si X$ est la chaîne de caractères vide. |
CHR$(I) | 275 PRINT CHR$(I) | Renvoie une chaîne d'un caractère dont l'unique caractère est l'équivalent ASCII de la valeur du paramètre (I) qui doit être => 0 et <=255. |
FRE(X$) | 272 PRINT FRE("") | Lorsqu'il est appelé avec un paramètre de chaîne de caractères, FRE donne le nombre d'octets libres dans l'espace de chaîne de caractères. |
LEFT$(X$,I) | 310 PRINT LEFT$(X$,I) | Donne les caractères I les plus à gauche de l'expression de chaîne de caractères X$. Si 1<=0 ou >255 une erreur FC se produit. |
LEN(X$) | 220 PRINT LEN(X$) | Donne la longueur de l'expression de chaîne de caractères X$ en caractères (octets). Les caractères non affichables et les blancs sont comptés dans la longueur. |
MID$(X$,I) | 330 PRINT MID$(X$,I) | MID$ appelé avec deux paramètres renvoie les caractères de l'expression de chaîne de caractères X$ à partir de la position de caractère I. Si I>LEN(I$), alors MID$ renvoie une chaîne de caractères nulle (de longueur zéro). Si 1<=0 ou >255, une erreur FC se produit. |
MID$(X$,I,J) | 340 PRINT MID$(X$,I,J) | MID$ appelé avec trois paramètres renvoie une expression de chaîne de caractères composée des caractères de l'expression de chaîne de caractères X$ commençant au Ième caractère pour J caractères. Si I>LEN(X$), MID$ renvoie une chaîne de caractères nulle. Si I ou J <=0 ou >255, une erreur FC se produit. Si J spécifie plus de caractères qu'il n'en reste dans la chaîne de caractères, tous les caractères à partir du Ième sont renvoyés. |
RIGHT$(X$,I) | 320 PRINT RIGHT$(X$,I) | Donne les caractères I les plus à droite de l'expression de chaîne de caractères X$. Lorsque 1<=0 ou >255, une erreur FC se produit. Si I>=LEN(X$) alors RIGHT$ renvoie tout X$. |
STR$(X) | 290 PRINT STR$(X) | Donne une chaîne de caractères étant la représentation en caractères de l'expression numérique X. Par exemple, STR$(3.1)=" 3.1". |
VAL(X$) | 280 PRINT VAL(X$) | Renvoie l'expression de chaîne de caractères X$ convertie en nombre. Par exemple, VAL("3.1")=3.1. Si le premier caractère non-espace de la chaîne n'est pas un signe plus (+) ou moins (-), un chiffre ou un point décimal (.), alors zéro sera renvoyé. |
Caractères spéciaux
Caractère | Utilisation |
---|---|
@ | Efface la ligne en cours de saisie et tape un retour chariot/saut de ligne. Un "@" est généralement un Shift+P. |
← | (flèche de retour ou soulignement) Efface le dernier caractère tapé. S'il ne reste plus de caractères sur la ligne, tape un retour chariot/saut de ligne. "+" est généralement un Shift+C. |
Carriage Return | Un retour chariot doit terminer chaque ligne saisie. Ramène la tête d'affichage ou le curseur CRT à la première position (la plus à gauche) sur la ligne. Un saut de ligne est toujours exécuté après un retour chariot. |
Control+C | Interrompt l'exécution d'un programme ou d'une commande de liste. Control+C a un effet lorsqu'une instruction termine son exécution, ou dans le cas de l'interruption d'une commande LIST, lorsqu'une ligne complète a fini d'être affichée. Dans les deux cas, un retour est effectué au niveau de commande de BASIC et OK est affiché. (Version 8X) Affiche "BREAK IN LINE XXXX", où XXXX est le numéro de ligne de la prochaine instruction à exécuter. |
: | Un deux-points est utilisé pour séparer les instructions sur une ligne. Les deux-points peuvent être utilisés dans les instructions directes et indirectes. La seule limite au nombre d'instructions par ligne est la longueur de la ligne. Il n'est pas possible pour GOTO ou GOSUB d'être au milieu d'une ligne. |
(Version 8K seulement) | |
Control+O | Taper un Control+O une fois fait que BASIC supprime toute sortie jusqu'à ce qu'un retour soit effectué au niveau de la commande, qu'une instruction d'entrée soit rencontrée, qu'un autre Control+O soit tapé ou qu'une erreur se produise. |
? | Les points d'interrogation sont équivalents à PRINT. Par exemple, ? 2+2 est équivalent à PRINT 2+2. Les points d'interrogation peuvent également être utilisés dans les déclarations indirectes. 10? X, lorsqu'il est tapé, sera saisi sous la forme 10 PRINT X. |
Divers
- Pour lire une bande papier contenant un programme (version 8K), tapez un Control+O et insérez la bande. Il n'y aura pas d'affichage pendant la lecture de la bande. Tapez à nouveau Control+O lorsque la bande est terminée. Sinon, définissez NULL=0 et introduisez la bande de papier, et lorsque vous avez terminé, réinitialisez les valeurs nulles au paramètre approprié pour votre terminal. Chaque ligne doit être suivie de deux effacements ou de tout autre caractère non affichable. S'il y a des lignes sans numéro de ligne (commandes directes), l'Altair tombera derrière l'entrée provenant de la bande papier, donc ce n'est pas recommandé.
- Pour perforer une bande papier d'un programme, réglez le nombre de zéros sur 3 pour les terminaux 110 BAUD (Télétypes) et 6 pour les terminaux 300 BAUD. Ensuite, tapez LISTE ; mais ne tapez pas de retour chariot. Maintenant, allumez le perforateur de ruban papier du terminal. Mettez le terminal en local et maintenez les touches Repeat, Control, Shift et P enfoncées en même temps. Arrêtez-vous après avoir frappé environ un leader de 6 à 8 pouces de zéros. Ces valeurs nulles seront ignorées par BASIC lors de la lecture de la bande papier. Remettez le terminal en ligne. Appuyez maintenant sur le retour chariot. Une fois le programme terminé, placez une bande-annonce sur la bande de papier en maintenant enfoncées les mêmes quatre touches qu'auparavant, avec le terminal sur local. Après avoir écrit une piste d'environ six pouces, déchirez le ruban de papier et conservez-le pour une utilisation ultérieure si vous le souhaitez.
- Le redémarrage de BASIC à l'emplacement zéro (en basculant STOP, examiner l'emplacement 0 et RUN) fera revenir BASIC au niveau de commande et tapera "OK". Cependant, taper Control+C est préférable car Control+C est garanti de ne pas laisser de déchets sur la pile et dans les variables, et un programme Control+C peut être poursuivi. (voir commande CONT).
- La longueur de ligne maximale est de 72 caractères (pour la saisie uniquement). Si vous essayez de taper trop de caractères dans une ligne, un bip (ASCII 7) est exécutée et le caractère que vous avez tapé ne sera pas affiché. À ce stade, vous pouvez soit taper un retour en arrière pour supprimer une partie de la ligne, soit arobase pour supprimer toute la ligne. Le caractère que vous avez tapé et ayant poussé BASIC à taper le bip n'est pas inséré dans la ligne car il occupe la position de caractère un au-delà de la fin de la ligne.
L'utilisation de NULL de cette manière produira une liste de votre bande dans la version 8K (utilisez la méthode Control+O si vous ne voulez pas de liste). La méthode NULL est le seul moyen de lire une bande dans la version 4K.
Pour lire une bande papier d'un programme dans la version 4K, réglez le nombre de valeurs nulles tapées sur le retour chariot/l'alimentation en ligne sur zéro en affectant l'emplacement 46 (octal) à une alimentation L dans la bande papier. Lorsque la bande a fini de lire, arrêtez le microprocesseur et repatchez l'emplacement 46 pour qu'il soit le nombre approprié de caractères nuls (généralement 0, donc déposez un 1). Lorsque la bande est terminée, BASIC affichera SN ERROR à cause du "OK" à la fin de la bande.
Nom | Exemple | Objectif/utilisation |
---|---|---|
CLEAR | CLEAR | Supprime toutes les variables. |
CLEAR X | (Version 8K) Supprime toutes les variables. Lorsqu'il est utilisé avec un argument "X", définit la quantité d'espace à allouer pour être utilisée par les variables de chaîne de caractères au nombre indiqué par son paramètre "X". | |
10 CLEAR 50 | (Version 8K) Comme ci-dessus ; mais, peut être utilisé au début d'un programme pour définir la quantité exacte d'espace de chaîne de caractères nécessaire,
laissant une quantité maximale de mémoire pour le programme lui-même. Remarque : Si aucun paramètre n'est fourni, l'espace de chaîne de caractères est défini sur 200 par défaut. Une erreur OM se produit si une tentative est faite pour allouer plus d'espace de chaîne de caractères qu'il n'y a de mémoire disponible. |