Accueil > HX DOS Extender

HX DOS Extender

Article original écrit par Japheth et accessible ici.
Traduction par , publiée le 24 octobre 2013.
Licence : Cette traduction est mise à disposition sous un contrat Creative Commons Creative Commons License

HX DOS Extender

A. À propos de HX DOS-Extender

HX DOS-Extender est un gestionnaire de mémoire étendue DOS gratuit avec support intégré du format de fichier Win32 PE. Généralement, le but d'un gestionnaire de mémoire étendue est de permettre aux applications DOS d'utiliser les caractéristiques du mode protégé. HX remplit pleinement cet objectif, et va même plus loin. Une couche d'émulation de l'API Win32 fait partie de HX et permet à de nombreuses applications Win32 en ligne de commandes de s'exécuter sous DOS. Cette émulation va bien au-delà des approches utilisées par d'autres gestionnaires de mémoire étendue (PowerPack de Borland, WDOSX ou Phar Lab TNT). En outre HX inclut un support - limité - de Windows, DirectDraw, GDI et même d'OpenGL. Cela permet d'exécuter des applications graphiques Win32 "simples" sous DOS.
 
De nombreux environnements de développement prennent en charge la création d'applications Win32 en ligne de commande compatibles avec HX, dont les suivants:
  • Open Watcom C++
  • Digital Mars C++
  • MinGW (utilise GCC)
  • Cygwin (utilise GCC)
  • MS Visual C++, y compris la version gratuite de MS Visual C++ Toolkit 2003
  • Borland C++, y compris la version gratuite de C++ Builder Command Line Tools
  • LADSoft CC386
  • Pelles C
  • LCC-Win32 (compilateur C)
  • Borland Delphi
  • Free Pascal (Win32)
  • Pascal Pro
  • Virtual Pascal (Win32)
  • FreeBasic (Win32)
  • PowerBasic
  • MicroFocus Object Cobol
  • XDS Modula II
  • JWasm, Masm, Tasm, Poasm, Wasm, Fasm, Lzasm, Nasm, Goasm, ...
Comme l'émulation Win32 intégrée à HX a fait ses preuves, la plupart de ces compilateurs/assembleurs pourront tourner avec HX en ligne de commande DOS.
 
D'autres outils appropriés pour créer des binaires HX PE: HX est composé de
  • HXRT, le logiciel d'exécution HX DOS Extender
  • HXGUI, l'extension graphique HX DOS Extender
  • HXDEV, l'o
  • HXSRC, le code source de HX DOS Extender

 

B. Logiciel d'exécution HX

Le logiciel d’exécution du gestionnaire de mémoire étendue inclut tous les fichiers nécessaires à l'exécution des applications DOS 32 bits en mode protégé. Il comprend:
  • Le serveur DPMI HDPMI. Utilisé seulement avec DOS.
  • Le chargeur de fichier PE DPMILD32
  • Les dlls d'émulation de l'API Win32 (DKRNL32, DUSER32, DADVAPI, ...)
  • Les outils d'aide HXLdr32 et PEStub
Si vous voulez juste faire tourner des applications console Win32 sous DOS vous n'avez pas besoin de vous souciez de ces exécutables, car la plupart d'entre eux sont chargés automatiquement lorsque c'est nécessaire. La seule chose que l'on doit faire pour activer le support Win32 de HX pour DOS est d'exécuter HXLdr32, une petite application DOS TSR.

À propos de HDPMI

HDPMI est un serveur DPMI gratuit. Ses caractéristiques sont les suivantes:
  • supporte pleinement DPMI V0.9
  • la plupart des fonctions DPMI V1.0 sont aussi supportées
  • l'espace d'adressage du client peut aller jusqu'à 4088 Mo
  • pas de limite pour l'utilisation de la mémoire physique, 4Go de mémoire supporté
  • API de conversion DOS inclus
  • les clients 32 bits et 16 bits sont tout deux pris en charge
  • L'utilisation de la mémoire DOS du serveur est inférieure à 13 ko, comprenant un tampon de traduction de 8 ko
  • il est compatible avec Bochs, Qemu, DosBox, VMWare et VirtualBox. Virtual PC 2007 nécessite une version HDPMI modifiée, qui peut être téléchargé ici
Voir le fichier lisezmoi HDPMI pour plus de détails.
 

À propos de DPMILD32

DPMILD32 est un chargeur de fichier PE requis pour charger les fichiers binaires dans la mémoire. Il n'est pas limité aux applications étendues HX, mais peut également être utilisé pour charger des applications standards console Win32 en tant que clients DPMI, à condition que toutes les fonctions Win32 appelées par l'application soient inclues dans la couche d'émulation.
 
Voir dpmild32.txt pour plus de détails.
 

API d'émulation Win32

L'API d'émulation Win32 inclus dans le package d'exécution HX se compose de:
  • DKRNL32.DLL: émule KERNEL32.DLL
  • DADVAPI.DLL: émule ADVAPI32.DLL
  • DUSER32.DLL: émule USER32.DLL
  • DGDI32.DLL: émule GDI32.DLL
  • DDDRAW.DLL: émule DDRAW.dll
  • OLE32.DLL et OLEAUT32.DLL
DPMILD32 permettra la traduction des noms de modules, donc si un exécutable PE a des références à KERNEL32.DLL, DPMILD32 va essayer de résoudre ces dépendances en chargeant DKRNL32.DLL, par exemple. Cela signifie que n'importe quel outil de développement capable de créer des applications console Win32 sera probablement compatible avec le gestionnaire de mémoire étendue DOS HX. Bien que fonctionnant sous un système d'exploitation Win32 comme Windows 9x ou Windows XP, les applications console sont exécutées comme de véritables applications Win32 et ni DPMILD32 ni les DLLs d'émulation de l'API Win32 ne seront chargés. Ceux-ci ne seront nécessaires que dans les environnements non Win32 (c'est-à-dire DOS, DOSEmu, Windows 3.1 ou OS/2 DOS) et il existe 2 façons d'activer l'émulation Win32:
 
  • HXLdr32: il s'agit d'un programme TSR qui va accrocher l'interruption 21h et vérifier tous les programmes lancés pour vérifier si ce sont des exécutables PE. Si c'est le cas, DPMILD32 sera lancé pour exécuter le programme. Cette approche est celle qui est recommandée car aucun binaire ne doit être modifié. HXLdr32 refusera de s'installer si il y a déjà un support pour le chargement des fichiers, comme c'est le cas pour le DOS sous win9x/winxp.
  • PEStub: cet outil peut être utilisé pour changer le stub MZ des applications PE qui sous DOS affiche un message du type «Ce programme nécessite Windows" ou un message similaire. Le nouveau stub, qui prendra le contrôle en session DOS seulement, va charger DPMILD32 pour exécuter le binaire comme client DPMI. La taille du stub est de 512 octets, la taille totale du fichier binaire ne sera pas trop augmentée.
Comme déjà mentionné HX supporte les applications graphiques simples (GUI). Celles-ci peuvent utiliser Win32 GDI ou DirectDraw pour leur sortie, les deux sont possibles avec HX. Comme pour les applications console Win32 les applications GUI seront exécutés dans des processus Win32 dans les environnements Win32, uniquement sous DOS ils seront lancés comme des clients DPMI et les DLLs d'émulation GDI / DirectDraw seront utilisées. L'émulation nécessite un BIOS VESA 2.0 pour fonctionner. L'émulation peut être un peu lente car il n'y a pas d'accélération disponible dans DOS. Certaines applications peuvent fonctionner suffisamment vite, et donc, cela peut être un moyen de surmonter le support inexistant de VESA LFB dans Windows NT/2K/XP.
 
Voir compat.txt pour une liste des applications console Win32 testées et fonctionnant avec l'émulation Win32.
 

C. Extension graphique HX

Exécuter des applications graphiques

Avec l'extension HXGUI il est possible d'exécuter des applications graphiques simples avec HX DOS. "Simple" dans ce contexte signifie des applications qui utilisent une seule fenêtre d'interface utilisateur. Ces applications sont généralement basées sur SDL, DirectDraw et / ou OpenGL. Pour utiliser HXGUI un BIOS VESA V2.0 avec support de l'accès à la mémoire tampon de trame linéaire (LFB) est nécessaire.
 
L'émulation API Win32 est étendue par HX GUI et se compose de:
  • DINPUT.DLL: émule DINPUT.DLL
  • DSOUND.DLL: émule DSOUND.DLL
  • WINMM.DLL: émule WINMM.DLL
  • DCIMAN32.DLL: émule DCIMAN32.DLL
  • WSOCK32.DLL: émule WSOCK32.DLL
Certaines autres DLLs sont inclus comme exemples:
  • IPHLPAPI.DLL
  • MSACM32.DLL
  • SHELL32.DLL

Exécuter des applications OpenGL

Avec l'aide des binaires Windows 9x OPENGL32.DLL et GLU32.DLL il est possible d'exécuter des applications OpenGL sous DOS avec HXGUI. Cependant, cette implémentation OpenGL est une implémentation logicielle uniquement sans accélération matérielle, donc ne vous attendez pas à ce qu'elle soit trop rapide.
 

Capture d'écran à partir d'un exemple Win32 OpenGL écrit par Frank Charlet, fonctionnant sous DOS, 256 couleurs.
 
Si vous ne possédez pas une copie de Windows 9x: il devrait y avoir une version redistribuable de OpenGL pour Windows 95 disponible. Rechercher OPENGL95.EXE dans le Web. Ou télécharger les binaires provenant soit depuis le serveur FTP MS soit ici .
 

À propos de SDL

SDL (Simple Directmedia Layer) est un effort de l'Open Source pour fournir une API multi-plateforme pour les jeux, émulateurs, .... Il y a des portages pour diverses plates-formes disponibles. En ce qui concerne HXGUI le support pour la vidéo, l'audio (wave), le clavier, la souris, les timers et les threads est présent. Veuillez noter qu'il n'existe pas de version spéciale de SDL pour HX (ou DOS) disponible. Il s'agit de la version Win32 de SDL qui peut être utilisé avec HX. Le site SDL http://www.libsdl.org/index.php, permet de trouver le code source de tous les portages.
 

Exécuter QEMU avec HX

QEMU est une application d'émulation de PC disponibles pour de nombreuses plates-formes. Les portages Win32 de QEMU 0.7, 0.8 et 0.9, qui sont basés sur SDL, ont été testés avec succès avec HXGUI. Le principal avantage de QEMU fonctionnant sous DOS avec HX est que l'on peut essayer toutes sortes de systèmes d'exploitation sans avoir besoin de les installer sur le disque dur physique. Ci dessous FreeDOS qui démarre dans une session MS-DOS:
 

 
Quelques notes sur l'exécution de QEMU sous HX
  • Veuillez noter que QEMU nécessite d'énormes quantités de mémoire virtuelle. Comme HX ne supporte pas de fichier swap, la mémoire virtuelle est identique à la mémoire physique. Par exemple, exécuter QEMU avec un un programme de 128Mo nécessite environ 170 Mo de RAM.
  • Ne vous attendez pas à une hausse de performance en exécutant QEMU sous HX / DOS. Si il y a un gain en évitant la surcharge d'un environnement multitâche comme windows, ce gain est - plus que - perdu par le simple fait que DOS ne gère pas l'accélération graphique 2D.

Exécuter DOSBox avec HX

Une autre application SDL intéressante est DOSBox . Exécuter DOSBox sous DOS avec HX n'est pas si absurde que cela puisse paraître à première vue. Il y a beaucoup de vieux jeux DOS qui ne fonctionne pas sur les machines modernes, ou qui vont fonctionner trop vite. Il y a aussi quelques vieux jeux connus pour avoir beaucoup de problèmes, même sur des machines plus anciennes, et qui s'exécute maintenant parfaitement dans DOSBox. Voici l'un de ceux:
 

 

D. Support pour le développement d'applications HX 32 bits

L'archive de support pour les développeurs HXDEV contient tous les fichiers nécessaires pour créer des applications 32 bits DOS étendue. Deux formats de fichiers sont pris en charge par l'extension:
  • Format de fichier PE
  • Format de fichier MZ

Applications DOS 32 bits au format Win32-PE

C'est le format standard pour le gestionnaire de mémoire étendue HX DOS Étant donné que ces binaires sont en fait de véritables applications Win32, tout le travail pour créer ces applications sera effectué par votre outil de développement standard. Pour HX il n'y a pas grand-chose à faire. Donc, les seules choses fournies sont
  • PatchPE, utilisé pour convertir les fichiers binaires depuis le format Win32-PE vers le format DOS-PE ("PX")
  • Vesa32(s).lib, pour simplifier l'utilisation des fonctions VESA dans les applications DOS étendues
  • CrtDll.lib, une bibliothèque statique à lier à CRTDLL.DLL (format COFF)
  • DCrt32s.lib, une simple bibliothèque d'exécution statique C (format COFF)
  • OWSupp, certains fichiers aidant à créer et déboguer des applications HX étendues avec Open Watcom
  • Des échantillons en assembleur, C, Pascal, (Power)Basic et Cobol
Les bibliothèques d'exécution C sont destinés à être utilisés par des programmes en assembleur mais peuvent, bien sûr, être utilisés par des applications C/C++ si aucun autre exécuteur C n'est disponible.
 

Applications DOS 32 bits au format DOS-PE

Avec l'outil PatchPE, on peut modifier un fichier Win32-PE en un fichier DOS-PE. Cela peut être nécessaire si l'application utilise des fonctionnalités habituellement non disponibles pour les applications Win32, c'est à dire qu'elle appelle DOS INT 21h ou qu'elle accède directement aux ports d'entrée/sortie. L'outil va changer un seul octet, ce qui assure que le binaire ne sera pas chargé dans le sous-système Win32 lors de son lancement dans Windows.
 

Applications DOS 32 bits au format MZ

Ce format est également supporté par HX et se compose de
  • JMPPM32.OBJ pour préparer une application à l'exécution en mode protégé 32bit
  • certaines fonctions utiles dans la bibliothèque JMPPM32.LIB
  • certaines bibliothèques au format OMF pour l'émulation Win32 (voir ci-dessous pour plus de détails)
  • Libc32.lib, une simple bibliothèque d'exécution statique C (format OMF)
  • TestOMF, un programme visant à tester le support du format de MZ 32bits par divers linkers OMF.
  • Des exemples en assembleur et en C
  • .
L'émulation Win32 est prévue pour ce format aussi, mais existe au niveau du code source uniquement. Pour cela les bibliothèques OMF (DKRNL32S.LIB, DUSER32S.LIB et DADVAPIS.LIB) sont fournies. Le format MZ a quelques limitations par rapport au format PE. Les avantages/inconvénients sont les suivants:
  • + consomme moins et se charge assez rapidement
  • - les applications ne peuvent pas fonctionner dans un modèle de mémoire "true flat" (=zero-based)
  • - ne prend pas en charge le support du chargement dynamique des dll
  • - laaille de l'image est limitée à la mémoire DOS disponible
  • - Certains linkers OMF populaires ont des problèmes avec les segments 32bit> 64 kB. Je recommande d'utiliser soit LINK.EXE de Digital Mars(fourni avec leur compilateur C++) soit VALX.EXE de LADSoft. Les deux linkers n'ont pas de problèmes avec le format HX MZ.
  • - Pas de support pour les applications 32 bits au format MZ par la plupart des outils de développement. Le compilateur C++ de Digital Mars et C++ de Watcom prend en charge ce format. Bien évidememnt les assembleurs n'ont pas de problèmes avec ce format.

E. Support pour le développement d'applications HX 16 bits

Bien que la plupart du code de HX soit 32 bits, il supporte encore les applications en mode protégé 16 bits. Le support est composé de
  • HDPMI16, le serveur DPMI pour exécuter des clients DPMI 16 bits. Il est inclus à l'exécution de HX.
  • DPMILD16, Le chargeur pour 16-Bit NE . Il est inclus à l'exécution de HX.
  • HXD16, paquet développeur. Normalement les outils suivants sont capables de créer des binaires HX compatibles 16 bits :
    • Open Watcom C
    • Digital Mars C++ v8.4
    • MS C 6.0 et MS VC++ v1.52
    • Borland C++ v3.1 and v4
    • JWasm, Masm, Tasm, Wasm, Nasm, Yasm, Fasm
    • Borland Pascal 7.0
    • MS Cobol v4.5
    Des exemples en assembleur, C, Pascal et Cobol sont inclus et expliquent comment créer, exécuter et déboguer des binaires.

F. Code Source de HX

Le paquet HXSRC contient le code source du gestionnaire de mémoire étendue DOS HX. Il est composé de:
  • L'hôte DPMI HDPMI32.EXE / HDPMI16 (MASM)
  • Le chargeur DPMI DPMILD32.EXE / DPMILD16.EXE (MASM)
  • Les DLLs d'émulation Win32 DKRNL32, DADVAPI, DGDI32, DUSER32, OLE32, OLEAUT32, WINMM, DDDRAW, DINPUT, DSOUND (MASM)
  • GUI helper dll HXGuiHlp.dll
  • Les outils HXLdr32.exe, PEStub.exe, PatchPE.exe, PatchNE.exe(MASM)
  • MZ stubs DPMIST32.BIN / DPMIST16.BIN (MASM)
  • Le support du format de fichier HX MZ/NE (MASM)
  • Le débogeur WD et trap helper files HXHELP.EXE / HXHP16.EXE (MASM)
  • La dll de support VESA VESA32 (MASM)
Le code source de HX est d'environ 100 000 lignes de code.
 

G. débogage d'applications HX DOS étendues

1. Débogage d'applications DPMI 32 bits

  • WD: débogueur standard fourni par Open Watcom. Il s'agit d'un débogueur plein écran qui permet le débogage au niveau du code source. Le support pour Open Watcom et WD est inclus dans HX. WD sera en mesure de déboguer tous les types de binaires HX.
    Si vous ne souhaitez pas télécharger et installer le paquet Open Watcom, voici juste la version DOS de WD (légèrement améliorée).
  • DEB32F : Un débogueur avec une interface orientée ligne de commande comme le bon vieux debug de DOS, destiné à être utilisé par de vrais hommes seulement.
  • GRDB : Les dernières versions du GRDB de LadSoft sont capables de déboguerles clients DPMI, et ce débogueur peut également être utilisé pour déboguer les applications HX. Cependant, il semble y avoir un gros problème avec GRDB tournant sur des systèmes Windows 9x, mieux ne pas essayer cette combinaison.
  • 386SWAT : Un débogueur libre de Qualitas Inc. Il fonctionne au niveau de privilège le plus élevé et peut donc déboguer les clients DPMI et VCPI. Comme HDPMI fonctionne comme un client VCPI si un gestionnaire de mémoire a été chargé, 386SWAT peut déboguer n'importe quelle partie de HX. Mais il y a aussi quelques inconvénients:
    • ne peut pas déboguer au niveau du code source (le support pour l'utilisation de tables de symboles est implémenté)
    • possède une interface utilisateur étrange
    • n'est pas toujours aussi stable que cela devrait être
    • pour déboguer les applications graphiques, il a besoin d'un second moniteur
    • ne peut être chargé en ligne de commande, doit être installé en tant que pilote d'appareil (device driver)
  • WDEB386/WDEB98/DEBUGGER: ce sont les différentes versions du débogueur de Microsoft d'anneau 0 qui est inclus dans les DDKs de Win9x (et les SDKs, si je me souviens bien). L'interface utilisateur de ce débogueur - comme celui de DEB32F - n'est pas pour les cardiaques. Vous pouvez l'obtenir gratuitement, ou au si vous avez les DDKs de Win9x. L'hôte DPMI HDPMI de HX supporte les APIs de débogage int 68h (mode réel) et int 41h (mode protégé) et donc prend en charge le débogage avec WDEB386, au niveau de l'utilisateur (anneau 3) et au niveau du système (anneau 0). Vous aurez besoin d'un deuxième ordinateur et un programme de terminal pour le débogage (voir WDEB386 aide pour plus de détails).

2. Débogage d'applications DPMI 16 bits

  • WD: Le débogueur Open Watcom peut maintenant être utilisé pour déboguer des applications 16 bits DPMI dans n'importe quel format. Tous les fichiers nécessaires sont inclus dans HXD16.ZIP.
  • DEB16F : Un débogueur en ligne de commandes similaire à DEB32F.
  • TD/TDX: un débogeur 16bits fourni par Borland. Le support de DPMI est implémenté dans les versions plus récentes de TD.EXE (version> 4). Auparavant, il existait une version spéciale pour DPMI, TDX.EXE, qui est inclus dans Borland Pascal 7.0. Ce débogueur acceptera le format binaire Borland seulement, mais l'archive de support développeur 16-bit de HX comprend des exemples pour créer un format compatible NE. TD n'est pas libre, mais peut-être vous avez une ancienne version de BP ou BC disponible.

H. Exécuter HX sous Linux / Unix

Exécuter HX avec des émulateurs

Les émulateurs de PC virtuel (VMWare, Qemu, Bochs, ...) ne devrait avoir aucun problème pour faire tourner HX. Le serveur DPMI HDPMI de HX, qui doit fonctionner en anneau 0, a été testé et il est compatible avec les versions actuelles de VMware, Qemu et Bochs. Comme le débogage de registres matériels 80386 ne sont habituellement pas supportés par les émulateurs, les débogueurs qui voudraient les utiliser peuvent ne pas fonctionner comme prévu. C'est le cas pour DEB32F, DEB16F et DEB16FW.

Exécuter HX avec DOSEmu (Linux x86 uniquement)

DOSEmu ne permet pas à une application d'anneau 0 comme HDPMI de s'exécuter sous son contrôle. Ce n'est pas si grave que ça, carDOSEmu installe son propre hôte DPMI, et la plupart des fonctionnalités requises par HX sont implémentées. Si vous utilisez une version DOSEmu <1.3.1, vous devrez mettre à jour votre version (la version actuelle est 1.4.0).
Pour les développeurs, il pourrait également être intéressant que DOSEmu supporte le débogage de registres matériels 80386.
 
Certaines problèmes concernant Dosemu restent présents
  • L'hôte DPMI de DosEmu est pour le moment incapable de supporter plusieurs espaces d'adressage, une fonctionnalité qui peut être nécessaire pour certaines applications Win32 commerciales.
  • Certaines distributions (RedHat) ont un dispositif très sophistiqué que l'on appelle "l'espace d'adressage aléatoire", IIRC. Cela peut rentrer en conflit avec l'implémentation DPMI V1.0 de DosEmu et provoquer des erreurs lors de l'exécution de DPMILD32.

 

I. Feuille de route

Voici les fonctionnalités qui manquent actuellement dans HX.
  • Le support de ASPI nécessite actuellement WNASPI32.DLL de Windows 9x pour fonctionner. Il faudrait modifier pour que cette dll externe (et non libre) ne soit plus nécessaire.
  • L'accélération graphique sous DOS 2D (et OpenGL) . Je ne sais pas si quelque chose comme SNAP de SciTech pourrait être utilisé pour mettre en œuvre ces fonctionnalités. Les conseils sont les bienvenus.
  • un VDD qui pourrait être chargé quand HX est en marche dans les boîtes DOS WinXP et qui émule VESA LFB en utilisant DirectDraw plein écran.
  • Le support du son lors de l'exécution dans une fenêtre DOS WinXP. Actuellement, une fenêtre DOS WinXP fournit une émulation SB 2 seulement, mais HX nécessite au moins une SB Pro pour une sortie stéréo. Installer VDMSound permet d'émuler une SB 16, mais ce logiciel a ses propres problèmes et peut ne pas fonctionner comme prévu. Il existe d'autres émulateurs qui fonctionnent mieux, mais ils ne sont libres pour autant que je sache.
  • Le support de AC97 sous DOS.
  • Le support d'une bibliothèque GUI/widget, éventuellement FLTK ou GTK + .
N'hésitez pas à me contacter si vous pensez qu'il manque quelque chose ou si vous voulez contribuer à HX en aucune façon.
 

K. Soutenir

Le Forum DOSX est permet de poser des questions concernant HX.
 

L. Télécharger

Logiciel d'exécution Extension graphique Support pour le dev. 32bits Support pour le dev. 16bits Code source
v2.16, version stable 11/16/2009 HXRT HXGUI HXDEV HXD16 HXSRC
v2.17, release candidate 25/07/2013 HXRT
Mot de passe: japheth
HXGUI HXDEV HXD16 HXSRC

Remarque importante: HXRT217.zip est protégée par un mot de passe, car certains anti-virus n'aiment pas le fichier DKRNL32.DLL (DLL d'émulation Win32), qui est contenue dans l'archive.

Liste de toutes les versions disponibles au téléchargement
 
EXTRSECT v1.3 binaire (Win32)

Voir aussi: JWasm , JWlink .

Des erreurs ? Merci de me les signaler : | Accueil du site traduction.cc