Et Microsoft vendait la Softcard Z80 pour lancer CP/M sur Apple ][...
L'intérêt de Wordstar est limité en Europe à cause de sa gestion ASCII standard (7 bits). Néanmoins, on peut admirer sa souplesse entre OS.
J'apprécie aussi l'exemple du BASIC 5.22 pour CP/M-86. Comme la version CP/M 8 bits, elle convertit les erreurs d'accès direct du CP/M 2.x en erreurs d'accès séquentiel. 86-DOS et MS-DOS harmonisent d'eux-mêmes ces codes d'erreur. Pourtant, leurs versions BASIC gardent cette conversion car elles ne connaissent guère que deux soucis : une fin de fichier et un disque plein (DOS interceptant toute erreur fatale). Par contre, le code 3 n'est pas une vraie erreur : DOS, à l'inverse de CP/M, sait lorsque le dernier enregistrement lu est incomplet (la FAT note la taille d'un fichier en octets et non en secteurs). Il faut l'éliminer pour
adapter MBASIC.CMD en application DOS.
À propos de cela, comparez
GIODSK.ASM (ACCFL2) à DCPM.MAC qu'on trouve dans les sources du
BASIC Microsoft 5.x pour CP/M.
Une preuve de l'influence de CP/M sur DOS autre que son
prompt ?
DEBUG
A
JMP 0
G
Q
DEBUG
A
RET
G
Q
DEBUG
A
MOV CL,0
CALL 5
RCX
5
NEND.COM
W
Q
END
REM CALL 5 ne fonctionne dans DEBUG que lorsqu'on charge un fichier COM ou EXE.
|
Trois façons obsolètes de terminer un programme sous DOS et Windows 32 bits.
Pour les plus curieux, on peut lancer le Personal CP/M-86 2.0/2 ou 4 en anglais ou allemand sur nos compatibles PC/AT :
http://www.cpm.z80.de/binary.html#operating
J'adore son
format de disquette 720 Ko qui alterne les pistes entre les deux faces.
Le code source de son BDOS 4.1 se trouve ici :
http://www.cpm.z80.de/source.html
P.S. : s'agissant du
bug de CALL 5 sous DEBUG, il s'agit d'une confusion entre le haut et le bas de la pile en l'absence de programme.
John Elliott avait tenté d'y remédier le plus simplement possible (commentaire de fin) :
http://www.os2museum.com/wp/who-needs-t ... nd-anyway/
Néanmoins, il avait oublié une correction des versions suivantes : le préfixe ES: lors de la dépose d'une adresse nulle sur la pile. Je suggère le correctif suivant de
DEBUG.ASM :
SAVSTK:
DEC AH
MOV ES:WORD PTR [6],AX
SUB BX,AX
MOV CL,4
SHR BX,CL
ADD ES:WORD PTR [8],BX
INC AH
DEC AX
DEC AX
MOV SPSAVE,AX
XCHG AX,BX
MOV WORD PTR ES:[BX],0
|
On peut l'effectuer directement dans la première version pour DOS 2.0 (cf.
code source de MS-DOS 1 & 2) :
SID DEBUG.COM
A198
DEC AH
ES:
MOV WORD [6],AX
SUB BX,AX
MOV CL,4
SHR BX,CL
ES:
ADD WORD [8],BX
INC AH
DEC AX
DEC AX
MOV [2ADC],AX
XCHG AX,BX
ES:
MOV WORD [BX],0
WDEBUG.COM,100,2EF3 |
L'ancienne routine est remplacée à l'octet près. Toutefois, seule l'exécution pas-à-pas est stable si on assemble RET.