Je flânais sur Adafruit Industries, intrigué par un bricolage transformant un casque audio HD-555 en HD-595. J'y vis alors une annonce plus importante : https://devblogs.microsoft.com/commandl ... -gw-basic/
Microsoft a récemment mis en ligne le code source de GW-BASIC, interpréteur BASIC pour compatible PC qui existait en plusieurs versions OEM. Comme l'OAK de MS-DOS il y a quelques années, c'est encore une bonne nouvelle pour les programmeurs !
j'ai déjà les code source de Qbasic ,Msdos1 ,Msdos2 ,Msdos3 ,Msdos6 ,Turbo Pascal 6 (Unitée ,Compilateur ,et Éditeur)
sa me fera une source en plus .
_________________
Fan des Vieux PC et Vieux Système d'exploitation et Vieux logiciel.
« Là où règne le désespoir, j’apporte l’espoir. Là où règne la tristesse, j’apporte la joie. Permet-moi de consoler plutôt que d’être consolée, de comprendre plutôt que d’être comprise, d’aimer, plutôt que d’être aimée. Car, donner c’est recevoir, c’est en pardonnant que nous sommes pardonnés, c’est en mourant que nous naissons à la vie éternelle. »
J'avais désassemblé le BASIC-86 pour MS-DOS afin de le débogguer. Par la suite, je me suis aidé du code source du BASIC-80 pour peaufiner. À présent, la version 8086 est enfin disponible pour boucler le projet suivant : viewtopic.php?style=&f=14&t=19163
On voit bien que le fichier GWINIT.ASM n'était qu'une traduction du code 8080 en code 16 bits : usage répétitif des registres 8 bits et de la macro INS86 pour l'inclusion d'instructions 8086.
Note : les fichiers .H et ceux sans extension doivent être réenregistrés (WORDPAD puis Ctrl-S). En effet, ils sont au format texte d'Unix. Néanmoins, il est surprenant que seul MASM 2.00 d'IBM (1984) puisse assembler le gros fichier GWMAIN.ASM.
En outre, les fichiers MATH?.ASM sont à concaténer ; leur syntaxe correspond à une version antérieure de MASM.
P.S. : MASM 1.06 reconnaît la même syntaxe de langage que MASM 1.10 sans être à cours de mémoire. On le trouve ici : https://winworldpc.com/download/d882581 ... 163e9022f0
Si toutefois l'erreur *Out Of Memory* voire un plantage se produisait, consultez le site suivant : https://slions.net/threads/debugging-ib ... n-1-00.33/
En effet, les premières versions du macro-assembleur Microsoft ne s'attendaient pas à plus de 512 Ko de mémoire conventionnelle.
Note : les fichiers .H et ceux sans extension doivent être réenregistrés (WORDPAD puis Ctrl-S). En effet, ils sont au format texte d'Unix.
C'est quelque chose qui me paraît tout à fait normal, il semblerait qu'à l'époque une partie du développement se fasse justement depuis des machines sous UNIX.
Peut-être la version Microsoft d'UNIX... Le problème, sous DOS, est que MASM n'arrive pas inclure ce genre de fichier. Existerait-il alors un outil équivalent sous Xenix ? La fin du fichier GWMAIN.ASM mentionne bien ASM86 :
;
; The reserve word tables have dispatch address the could be external.
; ASM86 can only output external declarations during pass 1, so we
; have to construct a chain of possible externals and check each one.
; The following macro runs through the chain and declares any undefined
; addresses as external :NEAR. For more information, see the file
; PS1:<BASIC.ASM86>BINTRP.H
;
L'assembleur d'Intel porte le même nom mais n'arrive pas à assembler les fichiers ASM. Ce nom servirait-il alors à éviter la confusion avec le macro-assembleur 8080 ? Il est vrai aussi que la dénomination PS1:<BASIC.ASM86>BINTRP.H fait penser à un chemin traduisible entre différents OS : PS1 désignerait le périphérique de stockage et <BASIC.ASM86> le répertoire (on retrouve ce genre d'appelation à l'intérieur des exécutables MASM.EXE écrits en Pascal).
Le choix de l'assembleur évite la correction des fichiers ASM. Voyons les différences entre deux générations de MASM grâce à un morceau de code bidon :
The Microsoft MACRO Assembler (...)
0100 C5 16 0006 start: lds dx,dword ptr ds:6
0104 C5 16 0006 lds dx,ds:6 ;Incorrect si MASM 1.10
E r r o r --- 57:Illegal size for item
0108 8B 16 0100 R mov dx,start ;Incorrect si MASM 1.25
010C BA 0100 R mov dx,offset start
010F 80 3E 0115 R FF 90 cmp flag1,-1 ;MASM 1.10 ajoute 1 NOP
0115 C3 ret ;lors de la 2nde passe
?? flag1 db ? ;seulement : trop tard !
E r r o r --- 6:Phase error between passes
0117(...)
The Microsoft MACRO Assembler , Version 1.25 (...)
0100 C5 16 0006 start: lds dx,dword ptr ds:6
0104 C5 16 0006 lds dx,ds:6 ;Incorrect si MASM 1.10
0108 8B 16 0100 R mov dx,start ;Incorrect si MASM 1.25
E r r o r --- 57:Illegal size for item
010C BA 0100 R mov dx,offset start
010F 80 3E 0115 R FF cmp flag1,-1 ;MASM 1.10 ajoute 1 NOP
0114 C3 ret ;lors de la 2nde passe
0115 ?? flag1 db ? ;seulement : trop tard !
0116(...)
La version 1.25 ne râle que lorsqu'il y a une réelle ambiguïté (l'erreur 6 abusive était la bête noire des néophytes). Hélas ! comme précisé avant-hier, le code source date de la version 1.06, moins gourmande que la suivante et surtout que la précédente. L'assemblage est possible sous DOS. Quant au liage, c'est une autre paire de manches.