Win3x.Org

Windows & DOS Community

European MS-DOS 4.0 : un DOS multitâches

Règles du forum

Pour tout sujet impliquant un système d'exploitation daté de 2000 à nos jours, merci de le publier dans la section intitulée « Informatique moderne ».

Répondre   Page 1 sur 2  [ 12 messages ]
Aller sur la page 1 2 »
Auteur Message
gm86
Sujet du message : European MS-DOS 4.0 : un DOS multitâches
Publié : 27 avr. 2013 20:43
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 625
Inscription : 01 sept. 2008 19:07
 
Depuis quelques temps, une version très particulière est disponible sur Internet. C'est le MS-DOS 4.00 multitâche datant de fin 1985, quasiment contemporain au MS-DOS 3.2 mais ne semblant pas gérer les lecteurs de disquette 3"½.

Une archive est proposée ici [Staff: logiciel mis en interne, merci gm86 !]

En premier lieu, je dois apprendre à utiliser la commande SM, entre autres, pour passer d'un écran de tâche à un autre. Ensuite, à l'aide de la documentation disponible sur Internet, je me mettrai à programmer pour profiter des concepts dignes d'OS/2 tel le partage de code entre applications — oups ! je confonds avec les DLL.

Par curiosité, j'ai utilisé l'aperçu rapide de Windows 98 pour connaître son interprétation de l'en-tête de quelques exécutables non DOS :
attrib.exe
Système d'exploitation : Microsoft Windows
Version de Windows attendue : 176.02 (évidemment bidon)
mode.exe
Système d'exploitation : Microsoft DOS 4.x
Version de Windows attendue (?) : 24.03

assign.exe
Système d'exploitation : IBM OS/2

subst.exe
Système d'exploitation : inconnu
J'ai aussi remarqué que sur cette vieille version, les fichiers système portent les mêmes noms que sous PC/DOS : IBMBIO.COM & IBMDOS.COM.

Dernière modification par gm86 le 08 mai 2013 20:03, modifié 1 fois.

Haut
Profil Citer
LE CONSEIL GRIS
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 28 avr. 2013 12:17
Membre d'honneur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 508
Inscription : 27 avr. 2012 15:15
 
S'est bien ça, car mon ms-dos 4.01 que j'ai retrouvé il y à seulement quelques temps était curieusement incompatible avec certains outils sur la disquette, qu'il fallait présenter à ms-dos comme une autres versions du système pour qu'il l'accepte.

En fait les noms avec IBM indique seulement que cette version de ms-dos était celle que Microsoft produisait pour leurs machines, qui malgré toutes les allégations que certains propageais sur leurs bécanes en faisait quand même les machine les plus compatible du marché, ainsi que les plus solide est durable, comme quoi big blue était pas le monstre à 7 têtes décrit par Steve Jobs, mais juste sont ennemis juré lol.

IBM sont ceux qui ont fait le plus pour l'informatique PC, contrairement aux rumeurs urbaines, car se système était surtout utilisé sur des IBM, des BULL et du DIGITAL, THOMSON et PHILLIPS des société qui ont fait avancer l'informatique, même si cela ne leurs est point attribué ou venté.

Il est d'ailleurs pas vraiment multi-taches, il est plutôt muti-sessions, car il me semble que tu peut passer d'une tache à une autre, mais je ne suis plus très sur que les applications fonctionnait ensembles, d'ailleurs il existe un fichier que j'ai d'ailleurs vue ici et qui donne à ms-dos cette fonction également, s'est d'ailleurs pour ça que j'ai pas donné suite étant donné que l'un des 3xiens avait mis se fichier dans le forum.

Je placerait bientôt la version Datapack de Tandon, sa peut mettre un peut de temps, car je suis en plein déménagement.


Haut
Profil Citer
gm86
Sujet du message : European MS-DOS 4.0 : un DOS multitâche
Publié : 28 avr. 2013 13:33
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 625
Inscription : 01 sept. 2008 19:07
 
Ce DOS est bien multitâche à en croire l'API (cf. les fonctions du European MS-DOS 4.0 dans la Ralf Brown's Interrupt List, ou ici >>> http://sites.google.com/site/pcdosretr ... askingdos4). Cependant, cela ne fonctionne qu'avec les exécutables au format NE.
J'ai compris le fonctionnement de SM et il ne sert, en effet, qu'à passer d'une tâche DOS à une autre tout en gelant celles en arrière-plan. J'ai testé cela avec une copie de fichier. Pour activer le menu de SM, il suffit d'appuyer sur la touche Alt seule et de la relâcher. En revanche, je ne comprends pas à quoi sert l'option /E qui semble « envahir » la mémoire.


P.S. : c'est vrai que Apple s'était trompé d'ennemi. À l'opposé de ses habitudes, IBM avait créé une machine ouverte dont l'évolution lui échappa après le PC/AT au détriment du PS/2. Le véritable monopoliste fut Microsoft.
Revenant à la programmation d'un exécutable au format NE, il faut respecter trois choses :
- déclarer un segment de données dit automatique DGROUP * ;
- (éventuellement) déclarer comme publiques les segments de code et de données ;
- terminer obligatoirement par la fonction 4Ch disponible depuis la version 2 de DOS.
Les deux programmes suivants en assembleur impriment un message :
;Exécutable MZ pour MS/DOS 1.
;Assemblage de IMP1.ASM:
;	MASM IMP1;
;	LINK IMP1;

eop     EQU     12              ;Ejecte la page


CODE    SEGMENT
        assume cs:code,ds:DATA

MAIN    PROC    FAR             ;Procédure lointaine (a sa propre valeur de CS
        push    ds              ;Dépose sur la pile l'adresse lointaine PSP:0
        xor     ax,ax           ;où se trouve une interruption 20h qui requiert
        push    ax              ;que CS pointe le PSP afin de terminer le prgm


        mov     ax,DATA         ;Initialise le segment de données DS
        mov     ds,ax
        mov     si,offset Texte
        mov     ah,5            ;Imprime le caractère en DL
Boucle:
        lodsb
        mov     dl,al
        int     21h             ;Appel au DOS
        cmp     al,eop          ;Fin de page ?
         jne    Boucle
        ret                     ;Retour lointain terminant le programme
MAIN    ENDP

CODE    ENDS



DATA    SEGMENT                 ;PARA implicite : débute à un paragraphe

Texte DB 'Exécutable pour MS-DOS 1',eop

DATA    ENDS


PILE    SEGMENT STACK

        DB      256 dup(?)      ;Ce segment n'occupe pas d'espace disque

PILE    ENDS

        END     MAIN            ;Pointe la première instruction à exécuter

;Exécutable NE pour MS/DOS 4 multitâche.
;Assemblage de IMP4.ASM :
;	MASM IMP4;
;	LINK4 IMP4;
;LINK4.EXE est fourni avec ce DOS.

DGROUP  GROUP   DATA            ;DGROUP : segment de données auto obligatoire

eop     EQU     12


CODE    SEGMENT PUBLIC
        assume cs:code,ds:DATA


MAIN    PROC    FAR
        mov     ax,DATA
        mov     ds,ax
        mov     si,offset Texte
        mov     ah,5
Boucle:
        lodsb
        mov     dl,al
        int     21h
        cmp     al,eop
         jne    Boucle
        mov     ah,4Ch          ;Un exécutable au format NE ne peut jamais
        int     21h             ;se terminer par une Int 20h
MAIN    ENDP

CODE    ENDS



DATA    SEGMENT PUBLIC

Texte DB 'Programme pour le MS-DOS 4 multitâche européen',eop

DATA    ENDS


PILE    SEGMENT STACK

        DB      256 dup(?)

PILE    ENDS

        END     MAIN

J'ai aussi lancé en tâche de fond via la commande DETACH un new executable qui boucle indéfiniment. L'éditeur de texte a perdu en performances : signe d'une exécution simultanée.

* La définition du double-mot à l'offset 18h de l'en-tête NE rappelle que le segment de pile SS peut équivaloir au segment de données dit, dans cette documentation, automatique :
http://www.delorie.com/djgpp/doc/rbinter/it/96/15.html
Or, pour regrouper le segment de données et la pile en un segment unique, on utilise la directive GROUP :
DGROUP GROUP data,pile
J'en ai déduit que DGROUP, qui est le nom utilisé chez Microsoft, était ce fameux segment de données automatique.

Dernière modification par gm86 le 02 oct. 2013 09:53, modifié 3 fois.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
LE CONSEIL GRIS
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 29 avr. 2013 14:43
Membre d'honneur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 508
Inscription : 27 avr. 2012 15:15
 
Ne faut il pas que tu adresse cette partie de mémoire que tu veut utiliser dans le config.sys pour qu'il la réserve à certaines applications.


Haut
Profil Citer
gm86
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 29 avr. 2013 16:41
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 625
Inscription : 01 sept. 2008 19:07
 
En effet, il y a une commande, mais elle est accessible en ligne de commande. Il s'agit de MEMSET dont l'emploi est illustré dans le fichier SWAPPER.DOC :
memset default=127
C'est une valeur globale. L'utilitaire PIFEDIT permet de personnaliser la configuration à une application. Pour lancer Windows 2 par exemple, il faut augmenter cette valeur sans toutefois dépasser 472 Kio car cela a l'effet inverse : il doit s'agir de la mémoire disponible. Peut-être que le CONFIG.SYS comporte lui aussi un paramètre allouant la mémoire avant de charger COMMAND.COM.
De toute façon, Windows 2 n'est pas compatible avec ce DOS. En revanche, en le démarrant sous DR DOS, j'ai remarqué sans grand étonnement qu'il lance la petite application ci-dessus qui n'utilise que des fonctions DOS standards. La documentation pour OS/2 et surtout Windows 2 m'apportera sans doute une aide à la programmation.

P.S. : le peu de mémoire disponible doit sûrement venir du fait que le système est multitâche et sur disquette. Ainsi, le noyau est assez gros (plus que celui de DOS Plus) et la totalité de COMMAND.COM reste chargée en permanence en mémoire.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
LE CONSEIL GRIS
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 29 avr. 2013 20:05
Membre d'honneur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 508
Inscription : 27 avr. 2012 15:15
 
sa fait aucun doute, car se ms-dos était juste le prémisse au dépassement de la mémoire conventionnel, je me demande si il y aurait pas moyen d'utiliser certains programme des nouveaux ms-dos pour étendre un peut la mémoire, même si cela la place en mémoire expansé plutôt quand mémoire réel.

Ou peut être en utilisant des programmes comme 386max par exemple.


Haut
Profil Citer
gm86
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 30 avr. 2013 00:09
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 625
Inscription : 01 sept. 2008 19:07
 
J'essaierai.

J'ai remarqué d'autres choses ce soir sur les applications NE.
Premièrement, la copie des segments physiques (bloc de 64 Kio maximum pointé par les registres de segment) se fait par blocs de 512 octets sur le disque, quelque soit la directive d'alignement de leur premier segment logique (PARA ou PAGE). Cette taille est modifiable par l'option /ALIGNMENT de LINK avec un paramètre puissance deux :
LINK4 obj /ALIGNMENT:256;
Deuxièmement, une application NE dont l'édition des liens est incomplète ne se charge pas. Je l'ai lancée comme processus fils et elle a renvoyé le code erreur 77 qui fait partie des codes d'erreurs réservés de MS/DOS 3.x allant de 72 à 79.


*** Message corrigé le 8 mai : confusion entre segments logiques et physiques ***

Dernière modification par gm86 le 04 juin 2013 09:58, modifié 5 fois.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
LE CONSEIL GRIS
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 30 avr. 2013 09:45
Membre d'honneur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 508
Inscription : 27 avr. 2012 15:15
 
Alors la, il va falloir que je me penche sur le sujet, car je ne me rappel pas très bien de ça, je vais installer une machine avec un ms-dos 4.xx et en étudier le fonctionnement et ses erreurs, car j'ai besoin de réviser certaines fonctions pour avoir une vue d’ensemble du fonctionnement lol.

En tout cas, sa commence à motiver beaucoup de mon intérêt pour ton sujet et aussi que je regarde sur quel configuration de PC cela fonctionne le mieux.


Haut
Profil Citer
gm86
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 30 avr. 2013 13:19
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 625
Inscription : 01 sept. 2008 19:07
 
Sous DOS, pour qu'une application puisse lancer un programme fils, il faut qu'elle diminue la mémoire qui lui est réservée car elle s'en approprie la totalité. Cela vaut surtout pour les fichiers au format COM car on peut limiter la mémoire supplémentaire allouée à un fichier au format EXE MZ lors du liage (LINK /CPARMAXALLOC:paragraphes). Par contre, vu que le MS-DOS 4 européen est multitâche et que le format NE divise les segments en blocs dont la taille peut différer selon le liage, on est en droit de penser que cette précaution n'est plus valable. Ce qui est vrai.

Voyez le programme fils au format EXE MZ :
; Attention ! programme pour DOS 2 et supérieur.
; Assemblage :  MASM FILS;
;               LINK FILS;


code    segment
        assume  cs:code,ds:data
Debut:
        mov     ax,data                 ;Fait pointer DS sur DATA
        mov     ds,ax
        mov     ah,9                    ;Affiche chaîne ASCII$ en DS:DX
        mov     dx,offset Message$
        int     33                      ;Appel DOS
        mov     ah,4Ch
        int     33
code    ends

data    segment
Message$        db      '* Ne fait rien de spécial *',13,10,'$'
data    ends

pile    segment stack
        db      256 dup(?)
pile    ends

        end     Debut

Comparez ensuite le programme père au format MZ à celui au format NE :
; Attention ! programme pour DOS 2 et supérieur.
; Assemblage :  MASM PERE2;
;               LINK PERE2;

dgroup  group   data,pile


CODE   SEGMENT
        assume  cs:code, ds:dgroup

MAIN    PROC    FAR
        mov     ax,dgroup
        mov     ds,ax

        mov     ah,4Ah                  ;Diminue l'allocation mémoire au minimum
        mov     bx,Taille               ;Nombre de paragraphes à garder
        int     33

        push    ds
        pop     es

        mov     segpile,ss              ;Sauve la pile
        mov     ptrpile,sp

        mov     ax,4b00h                ;Exécute un programme fils
        mov     dx,offset nom           ;ds:dx -> spécification du fils
        mov     bx,offset params        ;es:bx -> bloc de paramètres
        int     33

        cli                             ;Evite un bug des premiers 8088
        mov     ss,segpile              ;Restitue la pile
        mov     sp,ptrpile
        sti
        push    ax                      ;Dépose l'éventuel code d'erreur

        mov     ax,dgroup               ;Restaure DS
        mov     ds,ax

        mov     ah,9                    ;Affiche le message ASCII$ en DS:DX
        mov     dx,offset Echec$
         jc     Message                 ;Echec du chargement
        mov     dx,offset Succes$
Message:
        int     33

        pop     ax                      ;Récupère le code d'erreur
         jc     Fin                     ;Echec du chargement
        xor     al,al                   ;ERRORLEVEL nul si pas d'err.
Fin:
        mov     ah,4Ch                  ;Quitte
        int     33
MAIN    ENDP

Taille1B        equ     $-CODE
CODE    ENDS


DATA    SEGMENT BYTE

nom     db      'FILS.EXE',0
params  dw      envir
        dd      lncmd
        dd      fcb1
        dd      fcb2
lncmd   db      0,13
fcb1    db      0
        db      11 dup(' ')
        db      25 dup(0)
fcb2    db      0
        db      11 dup(' ')
        db      25 dup(0)

segpile dw      (?)
ptrpile dw      (?)
Echec$  db      'Fils non chargé',13,10,'$'
Succes$ db      'Le fils s',39,'est exécuté',13,10,'$'

Taille2         equ     $-DATA
DATA    ENDS


ENVIR   SEGMENT PARA                    ;L'environnement doit débuter un parag.
        db      'PATH=',0
        db      'COMSPEC=A:\COMMAND.COM',0
        db      0

Taille3         equ     $-ENVIR
ENVIR   ENDS


PILE    SEGMENT STACK

        DB      256 dup(?)

Taille4         equ     $-PILE
PILE    ENDS


Taille  equ     (256+ Taille1B +Taille2+15 +Taille3+15 +Taille4+15) / 16


        END     MAIN

; Programme pour MS-DOS 4 multitâche.
; Assemblage :  MASM PERE4;
;               LINK4 PERE4;
; Code source compatible avec MS-DOS 2 avec le liage suivant par exemple.
; Assemblage :  MASM PERE4,PERE;
;               LINK PERE4,PERE /CP:1;


dgroup  group   data,pile


CODE   SEGMENT  PUBLIC
        assume  cs:code, ds:dgroup

MAIN    PROC    FAR
        mov     ax,dgroup
        mov     ds,ax

        push    ds
        pop     es

        mov     segpile,ss              ;Sauve la pile
        mov     ptrpile,sp

        mov     ax,4b00h                ;Exécute un programme fils
        mov     dx,offset nom           ;ds:dx -> spécification du fils
        mov     bx,offset params        ;es:bx -> bloc de paramètres
        int     33

        cli                             ;Evite un bug des premiers 8088
        mov     ss,segpile              ;Restitue la pile
        mov     sp,ptrpile
        sti
        push    ax                      ;Dépose l'éventuel code d'erreur

        mov     ax,dgroup               ;Restaure DS
        mov     ds,ax

        mov     ah,9                    ;Affiche un message
        mov     dx,offset Echec$
         jc     Message                 ;Echec du chargement
        mov     dx,offset Succes$
Message:
        int     33

        pop     ax                      ;Récupère le code d'erreur
         jc     Fin                     ;Echec du chargement
        xor     al,al                   ;ERRORLEVEL nul si pas d'err.
Fin:
        mov     ah,4Ch                  ;Quitte
        int     33
MAIN    ENDP

CODE    ENDS


DATA    SEGMENT BYTE    PUBLIC

nom     db      'FILS.EXE',0
params  dw      envir
        dd      lncmd
        dd      fcb1
        dd      fcb2
lncmd   db      0,13
fcb1    db      0
        db      11 dup(' ')
        db      25 dup(0)
fcb2    db      0
        db      11 dup(' ')
        db      25 dup(0)

segpile dw      (?)
ptrpile dw      (?)
Echec$  db      'Fils non chargé',13,10,'$'
Succes$ db      'Le fils s',39,'est exécuté',13,10,'$'

DATA    ENDS


ENVIR   SEGMENT PARA    PUBLIC

        db      'PATH=',0
        db      'COMSPEC=A:\COMMAND.COM',0
        db      0

ENVIR   ENDS


PILE    SEGMENT STACK

        DB      256 dup('Z')            ;LINK4 ne fait pas Zzz... dans DGROUP

PILE    ENDS


        END     MAIN

Les données PARAMS sont requises pour créer le PSP du fils.


P.S. : j'ai tenté d'installer 386Max... sans succès.
Finalement, ce DOS est compatible avec la version 3.1 (réseau), à quelques exceptions près. Ainsi, comme on peut s'en douter, la fonction d'obtention ou de définition de la stratégie d'allocation mémoire DOS traditionnelle n'existe pas. En outre, j'ai pu déduire l'ossature minimale d'un EXE NE à partir de celle d'un EXE MZ donnée par l'ouvrage MS-DOS avancé, deuxième édition :
; EXE MZ
; Fichier objet obtenu (.OBJ) reconnu par les compilateurs Microsoft.
; MASM /S (segments classés dans l'ordre d'apparition)

DGROUP	_DATA,STACK


module_TEXT SEGMENT	WORD	PUBLIC

(...)

donnees	SEGMENT	PARA	PRIVATE

(...)

_DATA	SEGMENT	BYTE	PUBLIC

(...)

STACK	SEGMENT	STACK
; EXE NE
; MASM /S (segments classés dans l'ordre d'apparition)

DGROUP	_DATA,STACK


_TEXT	SEGMENT	PUBLIC
...

_DATA	SEGMENT	PUBLIC
...

STACK	SEGMENT	STACK
...
J'ajouterais bien dans DGROUP le segment _BBS pour les variables qui n'ont besoin d'être initialisées dans le fichier (gain d'espace disque). Le document suivant donne un tableau instructif avec, en prime, les directives de MASM 5 qui remplacent la désignation complète des segments :
http://web.sau.edu/LillisKevinM/csci240 ... APGAPE.pdf ou .doc


----
Publié : Mercredi 08 Mai 2013 19:56:28


Les segments d'un exécutable NE peuvent être décrits par un fichier de définition. Plusieurs directives sont reconnues par LINK4 :
CLASS CODE CONFORMING
DATA DESCRIPTION DISCARDABLE
EXECUTE-ONLY EXPORTS
FIXED
HEAPSIZE
IMPORTS IMPURE 
LIBRARY LOADONCALL
MOVABLE MOVEABLE MULTIPLE
NAME NODATA NON-CONFORMING NONE
OLD
PRELOAD PURE
RESIDENTNAME
SEGMENTS SINGLE STACKSIZE STUB
Il n'y a pas d'attribut SHARED (partageable) pour le code vu qu'il ne semble être employé que par les routines des fichiers DLL pour Windows et OS/2.


Pour l'instant, je n'ai testé avec succès que la directive STUB. Elle permet d'insérer un exécutable MZ dans l'exécutable NE. Considérons les deux fichiers suivants :

TEST.DEF
STUB 'TESTDOS.EXE'
TEST.ASM
dgroup  group   data,pile



CODE    SEGMENT PUBLIC  'CODE'
        assume  cs:code,ds:dgroup

Debut:
        mov     ax,dgroup
        mov     ds,ax

        mov     ah,9
        mov     dx,offset Phrase
        int     33
        mov     ah,4Ch
        int     33

CODE    ENDS


DATA    SEGMENT BYTE    PUBLIC  'DATA'

Phrase  db      'Salut',13,10,'$'

DATA    ENDS


PILE    SEGMENT STACK

        db      256 dup(?)

PILE    ENDS


        END     Debut

Entrons les commandes suivantes :
masm test;
link test,testdos;
link4 test,,,,test
On obtient un hybride TEXTE.EXE pour MS-DOS 4 multitâche contenant une version DOS traditionnelle.


N.B. : correction de l'avant-dernier message. Le fait que l'option ALIGNMENT de LINK4 ait la valeur 512 par défaut doit être lié à la taille des secteurs d'un disque.

Dernière modification par gm86 le 04 juin 2013 09:46, modifié 3 fois.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
redstone02
Sujet du message : Re: Europeen MS-DOS 4.0 : un DOS multitâches
Publié : 18 avr. 2020 14:40
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 111
Inscription : 21 déc. 2018 18:08
PC Rétro : coming soon
 
chelou :o_O: :o_O: Pour un Dos

_________________

C:\>win
:tada:win 3.11:tada:


Haut
Profil Citer
Afficher : Trier par : Ordre :
Répondre   Page 1 sur 2  [ 12 messages ]
Revenir à « Informatique des vieux systèmes » | Aller sur la page 1 2 »
Aller :