Je me remets au projet 1560 et du coup je deterre mon logiciel MACBAS car je suis en train de "merger" MACBAS95 et MACBAS-3.0.
MACBAS est un macro-assembleur symbolique/desassembleur/debuggueur LM et sourceur integre dans l'environnement BASIC. Tout est accessible directement dans le BASIC, sans besoin d'un programme particulier. On profite ainsi de la puissance de l'editeur, de l'evaluateur d'expressions,... MACBAS etant discretement "enfoui" dans le BASIC.
Il y a eu 3 versions:
- 1.0 : Premiere mouture, peu optimisee et apportant son debuggueur sous forme d'une commande specifique DBGS.
- 95 : La version disponible aujourd'hui.
- 3.0 : La derniere version, malheureusement pas mal bugguee et pas assez testee ni stable pour etre diffusee.
- Les versions 1.0 et 3.0 utilisent les registres "a la mode SHARP" c'est a dire A F P S X Y U XH YH UH XL YL UL
- La version 95 utilise les registres "Z80-like" c'est a dire A F PC SP BC DE HL B D H C E L
Seulement, MACBAS souffre de plusieurs erreurs d'implementation:
- Les directives IF et END se superposent avec celles du BASIC.
- Les mnemoniques AND OR CALL OFF se superposent avec les fonctions/instructions BASIC.
- Les mnemoniques STA et RET perturbent la recherches des instructions BASIC STATUS et RETURN.
Bon, a l'origine, c'etait absolument pour la bonne cause: la "chasse a l'octet". MACBAS devant rentrer dans les 8Ko (&00C5-&1FFF) afin de laisser le plus de memoire disponible pour l'utiliser.
A le relecture du code, je me rends compte que le codage de ces artifices prend plus de place que la dizaine de . necessaires.
Oui mais, si on met les . cela est aussi illisible. De plus, certaines mnemoniques ont des . d'autres pas... etc...
Dans le cas des directives et autres pseudo-instructions, MACBAS-1.0 utilisait un truc que je viens de redecouvrir: tout commencait par un !. Par exemple, le programme structure suivant:
Code : Tout sélectionner
10 !INLINE &2000,&20FF,&2100,&21FF
20 BIT &80
30 !IF NZ:LDA 01:!ENDIF
40 RET
50 !ENDCode : Tout sélectionner
10 ASSEMBLE &2000,&20FF,&2100,&21FF
20 BIT &80
30 IF NZ:LDA 01:ENDIF
40 RET
50 ENDCeci est valable pour IF END AND OR OFF et CALL.
Le cas de RET et STA est different. Comme les mots cles de MACBAS sont recherches avant ceux du BASIC, il sera impossible d'entrer RETURN et STATUS, car RET et STA capteront les instructions de MACBAS.
Il existe plusieurs pistes pour ces derniers:
- RET est forcement suivi par : ou &0D. Il faudrait que la routine de recherche des mots cles capte RET et verifie si : ou &0D suit, et dans ce cas, on aurait RET sinon une instruction comme RETURN. Oui mais que dire d'un RET (suivi de 3 espaces) ?
- Pour STA, on pourrait ici verifier qu'un T ou un . suit STA et dans ce cas, on utiliserait STATUS. Mais meme probleme: ST A TUS ne sera pas encode en STATUS mais en STA TUS !
De meme, MACBAS95 ne possede pas (c'est arrive avec 3.0) d'instruction BKPT qui "assemble" un CALL direct sur le vecteur de break-point du debuggueur LM. C'est tres utile pour le debogage en assembleur. C'est l'equivalent du STOP BASIC.
Enfin, il n'y a pas d'instruction CLA (code &34 = LDA N). Une optimisation tres interessante et tres utilisee, d'autant que MACBAS ne supporte pas le registre non documente MN.
Pourquoi ce fil ?
L'interet de ce fil est de faire participer "tous les interesses" aux choix d'implementations du futur MACBAS. Mon but etant bien sur de le perenniser et de l'inclure dans le projet 1560.
Enfin, c'est aussi sur le choix de certaines fonctionnalites et instructions de MACBAS que je souhaiterais recueillir votre avis.
1/ Registres Z80-like vs SHARP ? Comme explique plus haut, ma preference va aux registres Z80. En plus du mode compatibilite XMON/lhTools, je trouve mieux d'avoir les registres 8-bits sur 1 lettres (A F B C D E H L) et les registres 16-bits sur 2 lettres (PC SP BC DE HL). Par contre, ce n'est pas le cas de PockEmul, ni de PC-MACRO...
2/ Nommage des directives: Je pencherais assez pour la methode MACBAS-1.0, c'est a dire un ! en debut ou en fin.
Cela concerne ASSEMBLE END IF ELSE ENDIF BEGIN WHILE REPEAT UNTIL. Les fonctions THIS et PASS resteraient sans !, de meme que toutes les instructions/fonctions sur les symboles DEFS GETS SYMBOL , ainsi que le sourceur SRCS.
3/ Mnemoniques dupliquees ou capturant les instructions BASIC: CALL AND OR OFF STA RET. Je souhaiterais conserver une certaine "uniformite" dans les nommage.
a) XMON et mon assembleur exigent qu'une mnemonique soit precedee d'un /. On pourrait utiliser le meme principe:
Code : Tout sélectionner
10 !INLINE &2000,&20FF,&2100,&21FF
20 /BIT &80
30 !IF NZ:/LDA 01:!ENDIF
40 /RET
50 !ENDb) Il serait aussi possible d'utiliser les minuscules pour les mnemoniques. Dans ce cas, les conditions et les registres seraient eux aussi en minuscules. Et cela apporte un avantage:
Actuellement, LDA H sera compris par MACBAS comme le chargement du registre CPU H dans l'accumulateur. Mais si H reference la variable BASIC H, il faut donc ecrire LDA 0+H. En effet, l'evaluateur de MACBAS doit savoir quand il s'agit d'un registre CPU ou d'une variable BASIC: il peut s'averer necessaire de prefixer une expression immediate par 0+.
Dans le cas des minuscules, lda h sera bien compris comme le chargement du registre CPU h dans l'accumulateur et lda H lui reference la variable BASIC H.
Code : Tout sélectionner
10 !INLINE &2000,&20FF,&2100,&21FF
20 bit &80
30 !IF nz:lda 01:!ENDIF
40 ret
50 !END- LOW value16 et HIGH value16 (quasi-identiques a LOW et HIGH du BASIC1501)
- HEX$ value16
- RENUM [ligne][,incr]
- LINK et UNLINK
4b/ BKPT et CLA. Utilite ou pas ?
5/ MACBAS n'accepte que certains caracteres pour les symboles: majuscules, chiffres et caracteres compris en &20 .. &40. Pourquoi pas les minuscules ????
Je tiens a preciser que j'aimerais rester au plus proche de l'assembleur XMON et des lhTools. Cela ne fera qu'un style d'assembleur.
Ensuite, il faut vraiment peser une decision en fonction de la taille d'implementation requise. Le but reste de faire rentrer ABSOLUMENT MACBAS20xx dans ses 8Ko initiaux (&00C5 a &1FFF).
Bien sur, si vous avez d'autres idees ou des remarques, suggestions, n'hesitez pas en faire part sur le fil. Tout est bon a prendre pour en discuter
Que le PC-1500 soit avec vous !
PS: La nouvelle version de MACBAS sera releogable et donc pourra etre utilisee avec un CE-155 ou un CE-159. Aujourd'hui, le CE-161 (ou CE-163) est obligatoire.
Edit: Modification du titre du fil.





