winevdm is een emulator die het mogelijk maakt om 16-bit Windows-programma's en vroege versies van Windows (1.x t/m 3.1) te draaien op 64-bit Windows-systemen. Vanwege technische beperkingen in de LDT (Local Descriptor Table) van 64-bit Windows maakt de software gebruik van een CPU-emulator en Wine-gebaseerde conversiecodes om 16-bit aanvragen om te zetten naar 32-bit.
De installatie kan eenvoudig via een .inf-bestand of door het project zelf te compileren met Visual Studio 2017 of CMake. Naast de Windows-emulatie biedt het programma ook basis-DOS-emulatie en lost het compatibiliteitsproblemen op, zoals het omleiden van schrijfacties in de %WINDIR% map die in moderne Windows-versies zijn geblokkeerd.
winevdm: 16-bit Windows op 64-bit Windows
Hoe te gebruiken
- Systeemvereisten: Als u een foutmelding krijgt dat
VCRUNTIME140.dll ontbreekt, installeer dan de Microsoft Visual C++ Redistributable for Visual Studio 2017 (32-bit).
- Uitvoeren: Sleep en laat een Win16-uitvoerbaar bestand vallen op
otvdm.exe, of start otvdmw.exe.
Installatie
- Download of compileer de software.
- Voer de snelkoppeling "install" uit of klik met de rechtermuisknop op
install.inf en selecteer "Installeren".
- Na installatie kunnen Win16-binaries direct worden uitgevoerd.
Belangrijke opmerkingen:
- Indien het register is geïnitialiseerd door een Windows Update, dient u bovenstaande procedure opnieuw uit te voeren.
- U kunt de software verwijderen door
uninstall.reg uit te voeren.
Configuratie
Raadpleeg het bestand otvdm.ini voor configuratie-instellingen.
Compileren
Via Visual Studio
- Installeer Visual Studio 2017.
- Bewerk
PropertySheet.props.
- Compileer het project.
Via CMake
Voer de volgende commando's uit in de terminal:
git clone https://github.com/otya128/winevdm.git
cd winevdm
mkdir build
cd build
cmake ..
make
Hoe het werkt
Dit programma bevat de volgende componenten en functionaliteiten:
CPU Emulator
Omdat 64-bit Windows de LDT (Local Descriptor Table) niet kan wijzigen (NtSetInformationProcess met ProcessLdtInformation geeft altijd een fout terug), is een emulator nodig.
Win16 naar Win32 conversie
Er wordt gebruikgemaakt van Wine-gebaseerde conversiecodes. Een voorbeeld hiervan is:
BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )
{
return DestroyWindow( WIN_Handle32(hwnd) );
}
De relay-routines van 16-bit naar 32-bit worden automatisch gegenereerd door convspec. Een voorbeeld uit de specificatie: 53 pascal -ret16 DestroyWindow(word) DestroyWindow16
Overige technische aspecten
- DOS-emulatie: Bevat DOS-emulatie voor Win16.
- Handle-conversie: Verzorgt de conversie tussen 16-bit en native HANDLEs.
- Compatibiliteit: Bevat diverse fixes voor compatibiliteitsproblemen.
- install.inf: Wanneer 64-bit Windows een 16-bit installer detecteert, is er een mechanisme om een alternatieve (niet 16-bit) installer te starten. Dit programma maakt gebruik van dit mechanisme.
- WINDOWS-map omleiding: Sommige Win16-programma's proberen hun instellingen op te slaan in
%WINDIR%<bestandsnaam>.ini. In moderne Windows-versies is opslaan in %WINDIR% niet toegestaan; het programma leidt deze schrijfacties daarom om.
Gebruik via de opdrachtregel
De basisstructuur voor het aanroepen van het programma is: winevdm.exe [--app-name app.exe] command line
Voorbeeld: winevdm.exe CALC.EXE
DOS-programma's
Het programma kan ook DOS-uitvoerbare bestanden draaien (vergelijkbaar met een DOS-emulator). De DOS-versie kan worden ingesteld met de omgevingsvariabele VDMDOSVER.
Let op: De DOS-emulatie is onvolledig. Voor een volledige ervaring wordt aangeraden om DOSBox of MS-DOS Player te gebruiken.
winevdm: 16-bit Windows op 64-bit Windows
Hoe te gebruiken
- Systeemvereisten: Als u een foutmelding krijgt dat
VCRUNTIME140.dll ontbreekt, installeer dan de Microsoft Visual C++ Redistributable for Visual Studio 2017 (32-bit).
- Uitvoeren: Sleep en laat een Win16-uitvoerbaar bestand vallen op
otvdm.exe, of start otvdmw.exe.
Installatie
- Download of compileer de software.
- Voer de snelkoppeling "install" uit of klik met de rechtermuisknop op
install.inf en selecteer "Installeren".
- Na installatie kunnen Win16-binaries direct worden uitgevoerd.
Belangrijke opmerkingen:
- Indien het register is geïnitialiseerd door een Windows Update, dient u bovenstaande procedure opnieuw uit te voeren.
- U kunt de software verwijderen door
uninstall.reg uit te voeren.
Configuratie
Raadpleeg het bestand otvdm.ini voor configuratie-instellingen.
Compileren
Via Visual Studio
- Installeer Visual Studio 2017.
- Bewerk
PropertySheet.props.
- Compileer het project.
Via CMake
Voer de volgende commando's uit in de terminal:
git clone https://github.com/otya128/winevdm.git
cd winevdm
mkdir build
cd build
cmake ..
make
Hoe het werkt
Dit programma bevat de volgende componenten en functionaliteiten:
CPU Emulator
Omdat 64-bit Windows de LDT (Local Descriptor Table) niet kan wijzigen (NtSetInformationProcess met ProcessLdtInformation geeft altijd een fout terug), is een emulator nodig.
Win16 naar Win32 conversie
Er wordt gebruikgemaakt van Wine-gebaseerde conversiecodes. Een voorbeeld hiervan is:
BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )
{
return DestroyWindow( WIN_Handle32(hwnd) );
}
De relay-routines van 16-bit naar 32-bit worden automatisch gegenereerd door convspec. Een voorbeeld uit de specificatie: 53 pascal -ret16 DestroyWindow(word) DestroyWindow16
Overige technische aspecten
- DOS-emulatie: Bevat DOS-emulatie voor Win16.
- Handle-conversie: Verzorgt de conversie tussen 16-bit en native HANDLEs.
- Compatibiliteit: Bevat diverse fixes voor compatibiliteitsproblemen.
- install.inf: Wanneer 64-bit Windows een 16-bit installer detecteert, is er een mechanisme om een alternatieve (niet 16-bit) installer te starten. Dit programma maakt gebruik van dit mechanisme.
- WINDOWS-map omleiding: Sommige Win16-programma's proberen hun instellingen op te slaan in
%WINDIR%<bestandsnaam>.ini. In moderne Windows-versies is opslaan in %WINDIR% niet toegestaan; het programma leidt deze schrijfacties daarom om.
Gebruik via de opdrachtregel
De basisstructuur voor het aanroepen van het programma is: winevdm.exe [--app-name app.exe] command line
Voorbeeld: winevdm.exe CALC.EXE
DOS-programma's
Het programma kan ook DOS-uitvoerbare bestanden draaien (vergelijkbaar met een DOS-emulator). De DOS-versie kan worden ingesteld met de omgevingsvariabele VDMDOSVER.
Let op: De DOS-emulatie is onvolledig. Voor een volledige ervaring wordt aangeraden om DOSBox of MS-DOS Player te gebruiken.