Page 1 sur 1

Les tutos du père Keyser : multi menu MS-DOS

Posté : 14 mai 2023 18:12
par keyser
(précision : captures d'écran faites sur un émulateur que j'utilise et qui fera l'objet d'une présentation en bonne et due forme dans la section dédiée)

Avec le DOS 6.0, Microsoft a introduit une fonctionnalité très pratique, le multi menu dans les fichiers de démarrage CONFIG.SYS et AUTOEXEC.BAT.

L'intérêt de ceci, c'est que ça vous permet de vous faire des configurations de démarrage aux petits oignons, en ne démarrant que ce dont vous avez besoin. En effet, MS-DOS travaillait très différemment des Windows actuels. Déjà, il avait été décidé de façon tout à fait arbitraire que dans toute la mémoire dont disposait votre machine, seuls 640Ko seraient nécessaires au maximum pour faire tourner les programmes. De mémoire, je crois me souvenir que cette aberration vient directement de Bill Gates, mais je ne suis plus trop sûr. C'est ce qu'on appelait la mémoire conventionnelle. Problème : les softs sont vite devenus très gourmands en ressources, avaient parfois besoin d'au moins 600Ko de mémoire libre pour tourner, et cela, en cohabitant avec tous les pilotes chargés au démarrage de votre machine. Une souris ? Besoin de son pilote. Un lecteur de CD ? Idem. Et ainsi de suite pour tous les périphériques qui devaient être initialisés. Et chacun de ces pilotes bouffait de la place dans notre précieuse mémoire conventionnelle.

En plus de tout cela, suivant le soft ou le jeu, on avait besoin des différents types de mémoires disponibles. XMS pour la mémoire étendue, EMS pour la mémoire paginée, etc... Il y avait bien évidemment moyen d'envoyer les pilotes dans ces mémoires supérieures, avec par exemple MEMMAKER.EXE qui faisait partie intégrante de MS-DOS, ou un utilitaire mythique comme Quarterdeck Expanded Memory Manager (QEMM pour les intimes). Mais ça, c'est une autre histoire et ce sera pour une autre tuto.

L'intérêt donc du multi menu, c'est que l'on pouvait customiser au maximum ce qui serait chargé ou pas au démarrage. Style se créer une configuration pour les jeux utilisant le CD-ROM (fichiers OAKCDROM.SYS et MSCDEX.EXE par exemple), et une autre sans ces 2 pilotes pour les jeux qui seraient des jeux disquettes, donc où le CD-ROM serait inutile. Et tout cela se passait simplement dans les fichiers CONFIG.SYS et AUTOEXEC.BAT.

La structure des fichiers et les balises à mettre :

On commence par le fichier CONFIG.SYS, qui sera la 1er chargé des 2 au démarrage. On insère au tout début la ligne qui l'informe qu'il va y avoir un menu, simplement via

Code : Tout sélectionner

[menu]
Ensuite, on insère à chaque fois une ligne qui commence par menuitem= suivi de ce que l'on veut et qui sera la variable de chaque ligne de menu (xms dans l'exemple de la 1ère ligne), variable qui sera récupérée par le fichier AUTOEXEC.BAT pour savoir ce qu'il doit lui-même charger. On insère une virgule, et on fini par ce qui s'affichera à l'écran dans notre menu, ici Configuration XMS à la 1ère ligne. On obtient donc :

Code : Tout sélectionner

 menuitem=xms,Configuration XMS
et on répète pour chaque entrée que l'on veut mettre dans son menu.

Ensuite, on insère

Code : Tout sélectionner

[xms]
qui fait référence à la variable définie précédemment. Et on met les lignes de CONFIG.SYS que l'on veut charger dans cette configuration. Idem, on répète avec un nouveau bloc qui commence par [variable] comme défini avant dans les lignes menuitem=, et on met les commandes désirées. Au final, le CONFIG.SYS ressemble à quelque chose du genre :

Image
Image

Pour l'AUTOEXEC.BAT, on doit récupérer la fameuse variable que l'on a définie au début du CONFIG.SYS, xms dans mon exemple, et la passer à la séquence de démarrage pour continuer. Ça se fait tout simplement en insérant la ligne

Code : Tout sélectionner

GOTO %CONFIG%
où l'on veut dans le fichier. Je dis ça car on peut très bien commencer par des lignes de commande qui seraient communes à chaque config, style la commande PATH, ou les variables d'environnement SET, etc... Mais on peut également mettre tout cela après. C'est justement ma manière de faire, et ce sera détaillé juste après.

Donc, on a récupéré la variable xms via la commande précédente, et on l'insère sous forme de balise dans l'AUTOEXEC.BAT comme ceci :

Code : Tout sélectionner

:xms
Puis comme pour le CONFIG.SYS, on met en-dessous les lignes de commandes que l'on veut voir chargées. Et on répète l'opération en recommençant avec chaque variable définie dans le CONFIG.SYS, précédée d'un :

Image
Image

Vous remarquerez que dans mon exemple, j'ai rajouté systématiquement la ligne

Code : Tout sélectionner

GOTO common1
à chaque fin de bloc et que j'ai regroupé dans un bloc indépendant les commandes communes à toutes les configurations

Code : Tout sélectionner

:common1
C'est une autre façon de faire plutôt que de mettre tout au début. Et je termine par un

Code : Tout sélectionner

GOTO fin
ainsi qu'une balise

Code : Tout sélectionner

:fin
pour forcer l'exécution à arriver à la fin du fichier et sortir de la boucle, et des fichiers de démarrage. Ça donne donc ceci, et on arrive au DOS PROMPT :

Image
Image

Pour les curieux, j'ai personnalisé une ligne de mon AUTOEXEC.BAT pour que soit affichée la configuration dans laquelle je me trouve. C'est la ligne PROMPT $e[32;41m $e[ XMS $e[30;46m $p$g $e[0m du fichier. On avait l'habitude de mettre la commande PROMPT $p$g qui affichait tout simplement le C:\> avec le curseur qui clignote attendant vos commandes. En rajoutant des paramètres, des codes de couleurs, et du texte, on obtient cette invite bien pratique. Attention cependant : ça ne fonctionnera que si vous avez chargé le fichier ANSI.SYS dans votre CONFIG.SYS. Maintenant, je dois bien avouer que c'est des fichiers que j'utilise depuis les années 90, donc je ne me souviens plus trop des codes correspondants à telle ou telle couleur. Je pense que ça vient d'un bouquin édité chez Marabout à l'époque, et qui doit malheureusement être introuvable actuellement, ou alors en occase. C'était une véritable mine d'informations et je l'avais quasi étudié par cœur :

Image

Si parmi nous il y a quelques tarés du code, il y a moyen de jouer de différentes manières avec les variables. On peut imaginer des commandes qui utiliseraient une structure IF "%CONFIG%"== et jouer avec des conditions, ce qui peut aussi être fun. Et je ne l'ai jamais utilisé, mais il doit aussi y avoir moyen de jouer avec une balise COMMON dans le CONFIG.SYS pour regrouper des choses qui seraient communes. Mais alors, ces lignes seraient ignorées par la commande MEMMAKER pour optimiser la mémoire utilisée. C'est donc bien pour regrouper des lignes comme FILES=40 qui ne chargent pas de programme en mémoire, mais c'est à éviter pour les autres style DEVICE=C:\quelquechose.

Voilà le code complet des fichiers de mon exemple si vous voulez tester. Amusez-vous bien ;) (et étant de Belgique, ma ligne COUNTRY.SYS utilise le code 032 de la Belgique, alors que j'utilise depuis toujours des AZERTY FR et pas BE comme claviers. Vieille habitude d'avoir appris sur ces claviers, dont je connais le layout par cœur)

Contenu du fichier CONFIG.SYS :

Code : Tout sélectionner

[menu]
menuitem=xms,Configuration XMS
menuitem=ems,Configuration EMS
menuitem=cdxms,Configuration CD-ROM XMS
menuitem=cdems,Configuration CD-ROM EMS

[xms]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512

[ems]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512

[cdxms]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DOS\VIDE-CDD.SYS /D:MSCD001
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512

[cdems]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DOS\VIDE-CDD.SYS /D:MSCD001
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512
Contenu du fichier AUTOEXEC.BAT :

Code : Tout sélectionner

@ECHO OFF
GOTO %CONFIG%

:xms
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ XMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1

:ems
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ EMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1

:cdxms
C:\DOS\MSCDEX.EXE /D:MSCD001
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT p$e[32;41m $e[ CD XMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1

:cdems
C:\DOS\MSCDEX.EXE /D:MSCD001
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ CD EMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1

:common1
PATH C:\;C:\DOS;C:\NC
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
GOTO fin

:fin

Re: Les tutos du père Keyser : multi menu MS-DOS

Posté : 14 mai 2023 18:31
par xkaider
Ho cool !

Re: Les tutos du père Keyser : multi menu MS-DOS

Posté : 14 mai 2023 20:42
par DrDestroy
Que de souvenirs remontent à la surface ! On a eu le 1er PC à la maison vers 1993/1994, DOS et W3.1.

Et j'ai passé des heures à peaufiner mes menus de démarrage pour les bonnes raisons évoquées par Keyser.
C'te bonne époque où en plus de se taper la config des IRQ et les DMA à coup de cavaliers, fallait en plus se creuser le cerveau pour faire tourner un jeu.

Super contribution !

Re: Les tutos du père Keyser : multi menu MS-DOS

Posté : 14 mai 2023 21:17
par xkaider
Les cavalier j'ai pas connu sa moi ils étaient déjà placés plus qu'à boot xD

Re: Les tutos du père Keyser : multi menu MS-DOS

Posté : 14 mai 2023 22:17
par keyser
C'est bien pour ça que des dinosaures comme le doc et moi sommes indispensables à votre éducation mes enfants. S'il est comme moi (et il l'est, j'en suis sûr), nous sommes un peu des Obélix de l'informatique de papa, tombés dedans quand nous étions petits.

Ce tuto n'est que le 1er d'une longue série, je l'espère. J'ai tellement de choses dans ma tête que ce serait dommage que ça se perde un jour. Donc autant contribuer de la manière la plus adéquate à ce que j'appellerai sobrement "notre héritage"....

Et au passage, encore une fois merci Gianni de ton initiative. On est des grands malades, certes, mais des grands malades qui vont s'autogérer et t'aider au mieux dans ta vision :) (ça y est, voilà que je le traite de visionnaire maintenant... :lol:)