Le double écran sous DOS… pour le debug

Il y a longtemps, j’étais tombé sur un truc marrant sur un forum : des captures de vieux jeux DOS avec un double écran. Certains vieux jeux proposent en effet d’afficher des données sur l’écran classique, mais aussi sur un écran MDA (monochrome). Et donc je me suis dit que j’allais essayer ça.

D’abord, comment ça marche ? En fait, c’est un truc issu des premiers PC. IBM proposait deux cartes graphiques pour le premier PC : une en couleur (CGA) et une en monochrome, en mode texte (MDA). Le mode MDA affichait 80 x 25 caractères à l’écran et il était parfaitement possible d’installer deux cartes en même temps : les zones mémoire ne sont pas les mêmes (B800:0000 en couleur, B000:0000 en monochrome). Vous trouverez une vidéo YouTube qui montre bien ça, et il y a même une commande DOS (mode) qui permet de passer de l’un à l’autre.

Maintenant, comment tester ? Avec DOSBox. Il existe deux solutions, sous Windows dans les deux cas. La première, c’est un petit programme qui va aller lire directement dans la mémoire de DOSBox et afficher le contenu dans une seconde fenêtre. Il est sur Github et il y a une version compilée . La seconde solution, c’est une version modifiée de DOSBox (documentée) qui peut afficher une fenêtre avec le second écran.

Du coup, c’est le moment de tester, et ça m’a pris un peu la tête. Premier truc à savoir, la version classique de DOSBox n’implémente pas mode, donc il faut passer par la version modifiée. Mais quand on tape mode mono, on passe sur l’écran MDA, quand on retape mode bw80, on revient sur l’écran standard.

mode mono envoie sur l’écran MDA


mode bw80 renvoie sur le VGA

J’ai d’abord testé avec des logiciels adaptés. Le premier est un debugger de chez Borland (Borland Turbo Assembler 5.0). Si vous le lancer avec l’argument -do, il affiche normalement le debugger dans l’écran MDA. Attention, ça ne fonctionne pas avec le premier programme. Ensuite, il y a Mah Jongg -V-G-A-. La documentation explique bien qu’il est possible d’utiliser deux écrans, et ça fonctionne assez bien. Selon la version du jeu, il faut parfois le lancer avec l’argument D. La version 3.1 marche bien et affiche des informations sur le second écran.

Avec un logiciel séparé


Avec une version modifiée


Le debugger de Borland passe sur le second écran

Ensuite, il y a les logiciels où ça doit fonctionner… mais ça ne fonctionne pas. En cherchant, je suis tombé sur Rise of the Triad: Dark War. L’exécutable indique que c’est prévu… mais ça ne marche pas. Il n’affiche rien.

L’exécutable indique que ça existe


Le jeu n’affiche rien

Puis il y a les jeux Westwood. Le post de forum d’origine montre des captures de Dune II, Command and Conquer et The Legend of Kyrandia, mais j’ai essayé les trois sans succès. Il y a même une vidéo pour Command and Conquer.

The Legend of Kyrandia


C&C


Dune II


The Legend of Kyrandia met un message quand on quitte

En fait, il faut visiblement activer un mode debug et personne n’explique comment le faire. J’ai donc cherché un peu, et je me suis rendu compte que Red Alert contenait aussi le même mode debug. Donc j’ai cherché un peu, trouvé la commande magique (c’est l’argument -XM au lancement) et testé avec une version bêta du jeu. Dans les versions commerciales, la commande est en effet désactivée, et seules quelques fonctions de debug restent actives. Et de fait, on peut voir pas mal d’infos pendant le jeu. Attention, ça ne fonctionne qu’avec le programme externe : avec la version DOSBox modifiée, il y a un souci de positionnement sur les données.

Ici, c’est bien rendu


Ici, il y a un problème d’alignement

Enfin, dans ce sujet de forum, encore, il y a quelques logiciels qui supportent ça (AutoCAD, Lotus 1-2-3, etc.) et aussi Mechwarrior 2, que j’ai essayé. Il affiche sur le second écran quelques informations sur l’IA.

Il y a quelques infos sur l’IA

Dans tous les cas, c’est assez intéressant de voir comment les développeurs faisaient pour gérer (un peu) les données dans les jeux. De ce que j’ai vu, c’était assez courant dans les jeux Westwood, mais ce n’est évidemment pas actif dans les versions commerciales, sauf en trichant.