"BASIC 1501" 32 new instructions for SHARP PC-1500 + CE-155
 Sharpentiers.
Published in "Sharpentier" #6, 1983.

Binary program - 2428 bytes.
(&3800 - &4183)

Loading:
NEW &4184
CLOAD M"BASIC 1501"
POKE &79D1,&20 (type that also when the PC-1500 is turned ON after being OFF)

DEF P : PAGE

PAGE 1
  I:  IF#     ELSE#  ENDIF#  TEST    TRUE   FALSE
 II:  STACK   BEGIN  UNTIL   RESUME  OFF
III:  DELETE  RENUM  ERN     ERL     MOVE   REMOVE

PAGE 2
  I:  DUMP$   MOKE   HEX$    HVAL    LOW    HIGH
 II:  STRING$ CAP$   INSTR           OFF
III:  DISP    SET    RESET   ASK     INV    NUMTBL

----------------
BASIC 1501: 32 nouvelles instructions. 

Pour sauvegarder ce programme, faites CSAVE M "BASIC 1501";&3808,&4183. Ce programme ne fonctionne qu'avec l'extension 8 Ko CE155.

Utilisation: NEW &4184.
Charger le programme et  chaque allumage de la machine, POKE &79D1,&20.
Tous les nouveaux mots cls sont assigns en mode RESERVE sauf PAGE (DEF L).
On a deux pages de mode RESERVE, on passe de l'une  l'autre par l'instruction PAGE (DEF "L", ENTER). Les mots cls sont rpartis ainsi:

PAGE 1
  I:  IF#     ELSE#  ENDIF#  TEST    TRUE   FALSE
 II:  STACK   BEGIN  UNTIL   RESUME  OFF
III:  DELETE  RENUM  ERN     ERL     MOVE   REMOVE

PAGE 2
  I:  DUMP$   MOKE   HEX$    HVAL    LOW    HIGH
 II:  STRING$ CAP$   INSTR           OFF
III:  DISP    SET    RESET   ASK     INV    NUMTBL

La machine ne reconnait pas les mots cls directement taps au clavier.

Syntaxe et explication.

. Traitement alphanumrique:

- STRING$ (n,a), renvoie n caractres de code ASCII a.
Exemple: A$=STRING$ (10,65), A$="AAAAAAAAAA".

- CAP$ chane, traduit les minuscules de la chane en majuscules.

- INSTR (chane 1, chane 2, n) renvoie la position de la chane 2 dans la chane 1  partir de la position n.
Exemple:
A=INSTR("PASCAL","S",0)  A=3
A=INSTR("COUCOU","0",3)  A=5
A=INSTR("BONJOUR","B",2) A=0

. Affichage:

- DISP n
 utiliser aprs un PRINT; permet l'affichage de plus de 26 caractres (dcalage automatique de la chane  l'cran).
n=temporisation (comme WAIT).
Tout appui sur SPACE:
. stoppe le dcalage
. acclre le dcalage
. arrte le dfilement

- SET L,C : affiche un point ligne L (0  6), colonne C (0  155).

- RESET L,C : teint le point ligne L, colonne C.

- ASK L,C : renvoie 1 si le point est allum, 0 sinon.

- INV : inversion vido de tout l'cran.

. Commande systme:

- RENUM : renumrotation des lignes de 10 en 10.

- DELETE argument : efface les lignes:
si argument=n,p : de n  p inclus;
           =n   :  partir de n;
           =,p  : jusqu' p.

- PAGE : commutation des 2 pages de mode RESERVE.

- MOVE, REMOVE : permet de merger des programmes avec possibilit de modifier le 1er programme.
MOVE
MERGE "2e programme"
REMOVE

. Langage machine:

- MOKE : multipoke, MOKE add, entier, "HEXA"; "ALPHA"
Exemple: MOKE &3800,41,&10,"011064";"PASCAL",10

- HEX$ n : renvoie une chane, n en hexadcimal

- HVAL chane : fait l'inverse de HEX$

- DUMP$ argument
si argument=add, renvoie une chane reprsentant la valeur de 8 octets en hxadcimal.
si argument=(add,n), mme chose mais sur n octets.

. Utilitaires:

- ERN, numro de la dernire erreur.

- ERL, signe de la dernire erreur.

- LOW, HIGH, renvoient le poids faible et le poids fort d'un entier de 0000  FFFF (HEXA).

. Macro de structure:

- RESUME : ignore une erreur.
Exemple:
   10 ON ERROR GOTO 100
   20 A=1/0+10:BEEP 1 
   30 END
  100 RESUME (reprend au BEEP 1)
L'erreur ne doit pas se situer  la fin d'une ligne.

- STACK, BEGIN, UNTIL
STACK remet la pile  zro, obligatoire en dbut de programme, sinon l'on peut planter la machine.
BEGIN : instructions ... : UNTIL condition
revient aprs le BEGIN tant que la condition est fausse ou <>0

- IF #, ELSE #, ENDIF #
IF # cd: instructions1 :ENDIF #
si condition cd=VRAI<>0, execute 'instructions1'

IF # cd: instructions1 :ELSE # : instructions2 :ENDIF #
si condition cd=VRAI<>0, execute 'instructions1'
si condition cd=FAUX=0, execute 'instructions2'

Exemple:
   10 INPUT "A=";A
   20 IF # A=5:PAUSE "5":ELSE # :PAUSE "NON"
   30 BEEP 1: ENDIF # 
Le ENDIF # est obligatoire  la fin de chaque test.

- TEST, TRUE, FALSE :
TEST capte une valeur logique. 
TEST A$="OUI". Cette valeur est aussi stocke lors d'un IF # .
TRUE et FALSE renvoie 1 ou 0 selon la table de vrit:
  TEST au IF = 0  1
  TRUE         0  1
  FALSE        1  0
