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

  1. Download of compileer de software.
  2. Voer de snelkoppeling "install" uit of klik met de rechtermuisknop op install.inf en selecteer "Installeren".
  3. 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

  1. Installeer Visual Studio 2017.
  2. Bewerk PropertySheet.props.
  3. 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.