Windows - 16 bites alkalmazások futtatása

Szükség lehet néha Windows 2000 alatt is futtatni régi 16 bites programokat. Ez nem magától értetődő dolog, tekintettel arra, hogy a Windows 2000 32 bites operációs rendszer. Azonban a legtöbb esetben megoldható a feladat. A 16 bites programok DOS vagy Windows 3.x rendszerek alá készültek és alapvetően más viselkedést igényelnek, mint amit a Windows 2000 lehetővé tesz számukra. Jellemző rájuk, hogy közvetlenül elérhetik a hardver eszközöket és egymás memória területét. Ez rengeteg problémával járt együtt, mert egy „udvariatlan” program könnyen tönkretehetett egy másikat. A másik fő probléma az volt, hogy amikor egy program processzor időt kapott (amikor csak vele foglalkozott a CPU), tulajdonképpen akkor adta át a vezérlést egy másik programnak, amikor akarta. Ennek eredményeként egy végtelen ciklusba kerülő alkalmazás lefagyasztotta az egész rendszert.
A Windows 2000 alapvetően máshogy futtat egy programot, mint tette azt a DOS vagy Windows. Egyrészt a programkód 32 bites, másrészt minden alkalmazás csak a számára kiosztott memória területet használhatja. Véletlenül sem fordulhat elő, hogy egy másik program memória részéhez hozzáférhet. Ezenkívül a processzor időket az operációs rendszer osztja ki és veszi el az alkalmazásoktól, így ha valamelyik végtelen ciklusba kerül nem fagy le minden, csak az adott alkalmazás. A hardver elemek csak az operációs rendszeren keresztül érhetők el, közvetlenül soha.
Amikor Windows 2000 alatt akarunk egy 16 bites programot futtatni ezt a két ellentmondásos rendszert kell összeillesztenünk. Szerencsére kapunk a Windows 2000-től támogatást, de ez nem teljesen kompatibilis egy MS DOS-szal vagy Windows 3.1-el. Hogy miért? Mert a Windows 2000 nem fogja a támogatás ellenére sem megengedni a hardverhez való közvetlen hozzáférést. Ezért az ilyen futásra szakosodott programokkal nem lesz sikerünk.
A 16 bites alkalmazások számára egy virtuális gép keletkezik, neve NTVDM (NT Virtual DOS Machine), amely képes azt „hazudni” az alkalmazás számára, hogy ő tényleg DOS vagy Windows 3.x alatt fut. Az NTVDM tulajdonképpen kapcsot jelent a 16 és 32 bites környezet között: a 16 bites számára úgy mutatja a 32 bites erőforrásokat, mint ha azok 16 bitesek lennének és egy burkot teremt köréjük. Ezen a burkon nem „látnak” át a 16 bites programok, számukra az jelenti a teljes világot. Amikor elindítunk egy régi programot, először az NTVDM indul el és az futtatja a programot. Ahány 16 bites programot indítunk el, annyi NTVDM indul el és minden ami ezen belül fut egy folyamatként látszik a 32 bites környezetben, ennek megfelelően a processzor időt is így kapja meg.
A Windows Intézőben (Explorer) kattintsunk rá a jobb oldali egérgombbal egy 16, majd egy 32 bites alkalmazásra és nézzük meg a tulajdonság lapjaikat. A különbség szembeszökő, teljesen más beállításokkal találkozunk.
Mit lehet tenni, ha nem fut egy 16 bites program Windows 2000 alatt?
Ha az Intézőben megnyitva a programot nem vagy hibásan fut, próbálkozzunk meg az alábbiak alkalmazásával:
DOS környezetben a rendszer elindulásának szakaszában az AUTOEXE.BAT és CONFIG.SYS fájlokból töltődtek be bizonyos eszközillesztők, környezeti változók, stb. Sok program futása ezekhez volt kötve. Windows 2000 alatt nem szerepelnek ezek a fájlok, mert minden beállítás a regisztrációs adatbázisban található meg. Azonban az NTVDM elindulásának szakaszában betöltődik a virtuális gépbe a %systemroot%\system32 mappából az AUTOEXEC.NT és CONFIG.NT állomány, amelyek a DOS-beli társaikat hivatottak helyettesíteni. A Jegyzettömb (Notepad) programmal vagy más szövegszerkesztővel módosíthatók, de vigyázzunk, hogy mindig szöveges állományként mentsünk.
Minden NTVDM elindítás előtt ezen fájlok tartalma töltődik be, de mi van akkor, ha minden 16 bites alkalmazáshoz más AUTOEXE.BAT-ot és CONFIG.SYS-t akarunk használni (pontosabban AUTOEXEC.NT és CONFIG.NT)?

Nem szükséges minden alkalommal átszerkeszteni őket, mert megoldható, hogy minden 16 bites programhoz tartozzon saját AUTOEXEC.NT és CONFIG.NT. Ehhez kattintsunk rá a jobb oldali egérgombbal és a tallózzunk el a következő helyre: Tulajdonságok > Program > Speciális (Properties > Program > Advanced). Itt programonként megadhatunk AUTOEXEC.NT és CONFIG.NT állományokat.
Egyes 16 bites programok érzékenyek a DOS által generált különböző logikai memóriafajták (alapmemória, EMS, XMS, DPMI) mennyiségére. A program tulajdonságlapjának „Memória” („Memory”) oldalán található legördülő menükben ezeket egyenként szabályozhatjuk.
A legkorábbi DOS alatt futó programok működésük során nem vették figyelembe a processzor sebességét, nem tartalmaztak időzítést. Magyarul gyorsabb processzoron gyorsabban futottak. A mai sebességviszonyok mellett ezek a programok gyakorlatilag nem képesek működni. Ezen segíthetünk a Tulajdonságok > Program > Speciális > Kompatibilis hardveróra-emuláció (Properties > Program > Advanced > Compatible timer hardware emulation”) bekapcsolásával. Ezzel visszalassítható a gép, de csak a 16 bites program számára. A módszer csak az időzítési funkciókat figyelmen kívül hagyó programok esetében alkalmazható, egyébként lelassítja a futást.