msx logo

Maire-adjoint du
msx village france

msxosaure banniere

Traducteur sur

msx osaure accueilMSXosaure menu hautMSXosaure menu hautMSXosaure menu hautMSXosaure menu haut
 
 
 
Programmation
  Le X-Basic
 
 

 
MSX-BASIC-KUN est un compilateur  BASIC.Il permet de traduire un programme BASIC en langage machine pour le charger en mémoire. Ce programme s’éxècute alors 15 à 100 fois plus vite !
Il peut compiler la plupart des instructions et des fonctions de MSX-BASIC et peut travailler avec les chaînes de caractères et les nombres en simple précision.

Il vous permettra de vous passer de l’assembleur, vos programmes peuvent être écrits en BASIC avec toutes ses facilités de compréhension tout en bénéficiant de la vitesse du langage machine.



        1.    Arrangements et connaissance générale
   Ce compilateur était vendu au Japon en cartouche pour 4500 Yens. Vous avez juste à la placer dans un slot et c'est parti! En outre, ce compilateur est directement présent dans
la ROM des MSX2+ Sanyo.
  Une fois la cartouche insérée, vous vous trouvez en mode de BASIC comme d'habitude, sauf que deux commandes supplémentaires sont disponibles:

CALL RUN
CALL TURBO ON / OFF


   Le ‘CALL’ peut être écrit comme ‘_’(souligné).

 CALL RUN est la commande qui compile et exécute le programme entier en  mémoire. S'il trouve une erreur il arrêtera et enverra un message.

 CALL TURBO ON est l’instruction pour définir le commencement du bloc turbo.

 CALL TURBO OFF l'extrémité du bloc.

Le bloc turbo est la partie du programme que vous voulez exécuter rapidement. Quand le programme entier contient quelques instructions non compilables, vous pouvez définir le bloc à compiler en utilisant cet ensemble.

 EXEMPLE 1


    100 SCREEN 8:DEFINT A-Z
    110 BLOAD"PICTURE",S
    120 CALL TURBO ON
    130 FOR X=0 TO 255
    140 LINE(X,0)-(X,211),0
    150 NEXT X
    160 CALL TURBO OFF
    170 GOTO 170

 

Ce programme ne peut pas être « CALL RUN », parce que  « BLOAD » est l'une des commandes qui ne peuvent pas être compilées.
Si vous faites « RUN » avec ce programme, les lignes de 130 à 150 seront exécutées rapidement.
Comme on ne peut pas faire CALL RUN , on doit ajouter le CALL TURBO ON et le CALL TURBO OFF au début et à la fin de la partie du programme qu’on veut accélérer  afin bénéficier de l’accélération avec RUN.

EXEMPLE
    100 FOR I=0 TO 999
    110 ...
     .
     .
     .
    890 'END OF THE PROGRAM



 Ainsi, ceci peut être CALL RUN ou on peut ajouter les lignes : 10 CALL TURBO ON et 900  CALL TURBO OFF et faire  RUN.


 Si vous faîtes CALL RUN sur un programme contenant le "CALL TURBO ON/OFF" ce la provoquera une erreur.
Le CALL TURBO ON/OFF  ne peut pas être écrit dans les lignes à plusieurs commandes.

 

(ndt : exemples :  10 CALL TURBO ON :FOR I=1 TO 10 ;… ou 10 PRINT “WAIT”: CALL TURBO ON )

Les blocs turbo CALL TURBO ON/OFF ne peuvent pas être emboîtés. Mais vous pouvez avoir plusieurs blocs fermés dans un programme.

(ndt : en fait un CALL TURBO ON doit être obligatoirement suivi d’un CALL TURBO OFF avant qu’un autre CALL TURBO ON n’apparaisse)
 

Les variables et les chaînes sont manipulées différemment à l'intérieur et à l'extérieur du bloc. Une fois que vous êtes hors du bloc, des variables et les chaînes utilisées dans le bloc sont perdues.

Seuls les nombres entiers peuvent être définis en tant que valeurs communes.

EXEMPLE
    100 DEFINT A-Z:DIM C(2),D(2)
    110 A=1:B=2:C(0)=3:D(0)=4
    120 CALL TURBO ON(A,C())
    130 DIM D(2)
    140 PRINT A,B,C(0),D(0)
    150 A=5:B=6:C(0)=7:D(0)=8
    160 CALL TURBO OFF
    170 PRINT A,B,C(0),D(0)

    RUN
     1 0 3 0
     5 2 7 4
    Ok

Les nombres complexes employés par le compilateur est un format spécial de valeur 3 bytes.l’exactitude est d’environ 4.5 chiffres.
La Double précision n'est pas disponible.
Une chaîne doit être déclarée par une constante au  commencement.

 


Ce compilateur se charge et charge le programme BASIC dans
la RAM. Il crée les objets et les variables dans la RAM restante. Donc il y a une limite de la taille du programme source aux environ de 10Ko.
Grandes chaînes, variables (chacune emploie 256 byte), CLEAR ???,&H????sont à éviter.

 

Les objets compilés ne peuvent pas être sauvés en tant que programmes indépendants.

L’interruption est disponible, tel que (1) ON, OFF etc.  Mais il diminuera l'efficacité de la taille et de la vitesse de l'objet exécuté.


 
Quelques instructions peuvent ne pas fonctionner correctement.

EXEMPLE
    100 GOTO 130
    110 A=3/2
    120 END
    130 DEFINT A-Z
    140 GOTO 110

Si vous exécutez ceci avec RUN, A vaut 1. Si vous exécutez ceci avec CALL RUN, A vaut 1.5,
DEF ? ? ? est efficace quand il est rencontré pendant l'exécution dans le cas de l'interprète, alors qu'elle dépend de l'ordre dans le programme (n° de ligne) dans l'autre cas.

Une opération un peu compliquée peut causer facilement une erreur dans une formule trop complexe.
car ce compilateur a seulement un niveau d’empilement pour ça. Casser une  formule longue en plusieurs petites.

 Si vous faites  CALL RUN sur un programme sans fin, vous ne pouvez pas l'arrêter. Créez une instruction pour vérifier le clavier pour y remédier.

EXEMPLE
    100 GOTO 100 'Reset or power off to stop

    100 IF INKEY$="" THEN 100
    110 END

    is better.



        2.    Différence avec le MSX-BASIC

   Liste de instructions, de commandes et de fonctions qui ne peuvent pas être compilés:

AUTO,(ndt: pas important)
BASE, BLOAD, BSAVE,
CALL, CDBL, CINT, CLEAR, CLOAD, CLOAD?, CLOSE,CONT, CSAVE, CSNG, CVD, CVI, CVS, DEFFN, DELETE, DRAW, DSKF,
EOF, ERASE, ERL,ERR, ERROR, EQV,
FIELD, FILES, FPOS, FRE,
GET,
IMP, INPUT#,
KEY LIST,
LFILES,LINEINPUT#, LIST, LLIST, LOAD, LOC, LOF, LPRINT USING, LSET,
MAXFILES, MERGE,MOTOR, MKD$, MKI$, MKS$,
NAME, NEW,
ON ERROR GOTO, ON INTERVAL GOSUB (du à un bug), OPEN,
PLAY, PRINT#, PRINT USING, PUT KANJI,
RENUM, RESUME, RSET,
SAVE, SPC,
TAB, TRON, TROFF,
WIDTH.


  
Liste des instructions limitées.

CIRCLE: les angles de début et de fin et l'aplatissement ne peuvent pas être indiqués.
COPY: Seulement le copy de graphique est disponible.
DEFDBL: Mêmes que DEFSNG.
DIM: Doit venir en premier dans le bloc turbo.
INPUT: Peut manipuler seulement une variable à la fois.
KEY: ON KEY GOSUB, KEY(n) ON/OFF seulement.
LOCATE: x, y doit être donné dedans comme ensemble. Aucun paramètre de bouton de curseur.
NEXT: Les variables après NEXT ne peuvent pas être omises.
ON STOP GOSUB, ON INTERVAL GOSUB non disponible.
PRINT: les virgules travaillent d'une manière différente. Aucun emballage pour des chiffres.
PUT: PUT SPRITE seulement.
RUN: Les variables ne seront pas initialisées.
SCREEN: Mode d'écran et taille de sprite seulement.
SET: SET PAGE seulement.
STOP: Mêmes que END.
USR : Le type de paramètre doit être un nombre entier.
VARPTR : Le nombre de dossier ne peut pas être donné comme paramètre.

Autrement il n'y a aucune différence significative.
Généralement des commandes et les fonctions d'entrée-sortie, et l'édition des commandes ne peuvent pas être compilées.
Naturellement elles sont disponibles dans le mode direct, et à l'extérieur du bloc turbo. Vous pouvez éditer, corriger et économiser un programme dans MSX-BASIC et l'exécuter par le CALL RUN.

Si vous voulez employer PRINT# pour écrire des caractères sur GRP : il faut l'employer en dehors du bloc turbo. Autrement étudier l'échantillon, « PRINT.TRB ».

Si vous voulez employer PLAY, employer le compilateur de BGM, et obtenir le son par USR (n). (ndt : sinon utiliser SOUND)



       3. De nouveaux dispositifs se sont ajoutés

 Trois commandes spéciales sont disponibles en commençant une ligne de remarque avec quelques caractères spécifiques.

    #I
 Remplace INLINE. Vous pouvez écrire une routine de langage machine courte.

    100 DEFINT A-Z
    110 K=1
    120 '#I &H2A,K
    130 '#I &HF3,&HCD,@150,&HFB
    140 END
    150 'SUB
    160 RETURN



 120 signifie LD HL,(K) ; K doit être une variable simple de type nombre entier.
 130 signifie DI
                  CALL @150; Faire attention, cette ligne ne sera pas RENUMed.
                  EI


    # C- et #C+
 Remplace CLIP. En modes d'écran 5 à 8 (excepté pour PAINT, et CIRCLE), Affichage ON ou OFF.

    
10 SCREEN 8
    20 '#C-
    30 LINE(0,0)-(255,255) 'Y CLIPPED
    40 IF INKEY$="" THEN 40
    50 '#C+
    60 LINE(0,0)-(255,255) 'NOT CLIPPED
    70 IF INKEY$="" THEN 70


    #
N
 Vérifie
si NEXT "déborde".

    
10 FOR I%=0 TO &H7FFF
    20 NEXT I%


 Ce programme finira vers le haut dans une "Overflow error" dans MSX-BASIC. Et si il est exécuté avec le CALL RUN, ce sera une boucle sans fin.
 Si #N+ est spécifié, il finira normalement. Ce code diminuera l'efficacité de l'objet, aussi ne pas l’utiliser à moins qu'il ne soit vraiment nécessaire.
 Pour libérer de l’espace faites #N-.

 NOTE : Dans MSX2+ Sanyo vous pouvez trouver une nouvelle commande :
 CALL BC Cette commande active les options du COMPILATEUR BASIC.

 

 
 
 
 
 
 
 
 
 

 



Créer un site
Créer un site