Le programme d'installation considère que le PC n'est pas muni de mémoire étendue (> 1 Mo). Par conséquent, soit le logiciel refuse de s'installer, soit il se contente d'afficher un message d'erreur. C'est le cas respectivement de Alien Trilogy et Sim City 2000. Certaines mises à jour des fichiers d'intallation existent ; encore faut-il les avoir.
Si le SETUP du BIOS possède l'option Memory Hole at 15M-16M, activez-là et ignorez les paragraphes qui suivent. Seulement 15 Mo de mémoire en tout seront reconnus par le système, ce qui suffit largement aux applications DOS à moins qu'une table d'ondes soit chargée (cas de certaines cartes son à chipset Ensoniq avec l'émulation Sound Blaster active). A la base, cette option permet à certaines cartes ISA de fonctionner correctement sur les systèmes modernes.
Si le SETUP du BIOS ne la comporte pas, lisez la suite.
En théorie.
Comment la taille de la mémoire étendue est-elle obtenue ?
Il y a la fonction 88h de l'interruption 15h qui retourne la quantité libre qui n'est pas utilisée, en outre, par un gestionnaire XMS (HIMEM.SYS & Cie). Elle-même obtient la taille de la mémoire étendue en lisant les registres 30h et 31h de la RAM CMOS. Leurs valeurs sont le résultat du test de mémoire du POST.
Cette première méthode est utilisée par les anciens gestionnaires XMS. D'ailleurs, l'option OS/2 du paramètre DRAM > 64M dans le SETUP du BIOS bride la valeur à 15 Mo. Cela permet de lancer Concurrent DOS 386 et Multiuser DOS de Digital Research ou OS/2 d'IBM.
Le seconde méthode est la suivante : lire les registres 17h et 18h. Leurs valeurs représentent la taille de la mémoire précédemment configurée par le système.
Pourquoi ces deux méthodes ?
A chaque démarrage, le POST vérifie la présence de RAM et évalue sa quantité au-delà du premier méga-octet. Le résultat est inscrit dans les registres 30h et 31h.
Ces derniers sont ensuite comparés aux registres 17h et 18h. S'ils diffèrent, un RESET CMOS est effectué sur certains systèmes et les registres 17h et 18h reçoivent un contenu identique aux registres 30h et 31h. C'est pourquoi, il faut sauvegarder les paramètres des disques durs avant de rajouter ou enlever de la RAM.
Quelle couple de registres les programmes utilisent-ils ?
C'est selon. Voyons deux exemples.
SimCity 2000 lit les registres 30h et 31h. On peut les modifier sans soucis.
Alien Trilogy consulte les registres 17h et 18h. Pour éviter un éventuel RESET CMOS lors du prochain POST, si on a dû modifié leur contenu, on restitue les valeurs d'origine sitôt qu'on n'en a plus besoin.
Nota : ces deux méthodes étaient utilisées à l'époque de DOS, les PC ne possédant pas, alors, plus de 64 Mo de mémoire vive. D'autres solutions existent pour les programmes modernes et les gestionnaires XMS 3.0 (HIMEM.SYS fournit avec Windows 9x, par exemple) qui fonctionnent sur des machines plus récentes.
Comment faire pour pouvoir utiliser nos programmes ?
Il faut simuler un système avec 16 Mo de mémoire vive, i.e., pourvu de 15 Mo de mémoire étendue.
La valeur des registres 17h et 30h est de poids faible. Vu que la mémoire étendue est un nombre rond en Mo, sa valeur est normalement nulle -- exception faite d'une machine ayant plus de 64 Mo. Le contenu des registres 18h et 31h est de poids forts.
Or 15 Mo = 3C00h Ko, donc il faut inscrire 00h dans le registre 17h ou 30h, et 3Ch dans le registre 18h ou 31h.
En pratique sur un PC ayant 64 Mo.
Exemple1 : installation de SimCity 2000.
1) Lancer DEBUG.
Code : Tout sélectionner C:\DOS>debug -o 70 30 'Préparer le registre 30h de la RAM CMOS à l'E/S via le port 70h. -i 71 'Lire ce registre (sortie) via le port 71h. 00 'FFh si RAM > 64 Mo sinon 00h -o 70 31 -i 71 FC 'FCh * 100h + 00h = FC00h = 63 Mo. -o 70 30 'Préparer le registre 30h de la RAM CMOS à l'E/S via le port 70h. -o 71 00 'Ecrire dans ce registre (entrée) via le port 71h. -o 70 31 -o 71 3c -q |
Exemple2 : installation de Alien Trilogy.
1) Lancer DEBUG.
Code : Tout sélectionner C:\DOS>debug -o 70 17 - i 71 00 'Val.originale à retenir (FFh si RAM > 64 Mo). -o 70 18 -i 71 FC 'Val.originale à retenir (FFh si RAM > 64 Mo). -o 70 17 -o 71 00 -o 70 18 -o 71 3c -q |
3) Restituer l'ancienne valeur du registre 18h.
Code : Tout sélectionner C:\DOS>debug -o 70 17 'Registre 17h de la RAM CMOS. -o 71 00 'o 71 val.originale -o 70 18 'Registre 18h de la RAM CMOS. -o 71 FC 'o 71 val.originale -q |
1) Créer un utilitaire qui modifie les registres 18h & 71h puis redémarre le système sans effectuer de POST.
Code : Tout sélectionner C:\DOS>debug -a 136A:0100 mov al,17 136A:0102 out 70,al 'o 70 17 136A:0104 xor al,al 136A:0106 out 71,al 'o 71 00 136A:0108 mov al,18 136A:010A out 70,al 'o 70 18 136A:010C mov al,3c 136A:010E out 71,al 'o 71 3c 136A:0110 mov al,30 136A:0112 out 70,al 'o 70 30 136A:0114 xor al,al 136A:0116 out 71,al 'o 71 00 136A:0118 mov al,31 136A:011A out 70,al 'o 70 31 136A:011C mov al,3c 136A:011E out 71,al 'o 71 3c 136A:0120 int 19 'Int 19h redémarre sans le POST 136A:0122 'si non intercepté par EMM -r cx CX 0000 :22 '122h - 100h = 22h -n 16M.COM -w Écriture de 00022 octets -q |
3) Noter les valeurs originales des registres 17h et 18h pour l'étape 5.
cf. l'étape 1 de l'exemple 2 cité plus haut.
4) Enlever la disquette.
5) Lancer l'utilitaire 16M pour relancer le système avec les nouvelles valeurs et sans effectuer de POST. En clair, le PC repart directement à la recherche d'un disque de démarrage.
Si la mémoire étendue était utilisé par un gestionnaire émulant l'EMS, le POST serait néanmoins réalisé.
6) Les vieilles applications peuvent être utilisées : seuls 16 Mo seront utilisés par DOS.
7) Restituer les anciennes valeurs des registres 17h et 18h avant tout Ctrl-Alt-Suppr ou RESET ou arrêt du système.
cf. l'étape 3 de l'exemple 2 cité plus haut.
N.B. : tout ce qui est écrit en italique évite un éventuel RESET CMOS provoqué par le POST. De toute façon, sauvegardez sur papier les paramètres importants du SETUP de votre BIOS (paramètres des disques durs...) avant toute manipulation. C'est la méthode la plus sûre.
Pour finir, on remarquera que sur un système ayant plus de 64 Mo, les registres 18h et 31h indiqueront leur valeur maximale FFh .
P.S. : sur les PS d'IBM, il n'est pas impossible que ce soient les registres 35h & 36h qui remplissent le rôle des registres 30h & 31h susnommés.
