HN 日本語サマリー

← 一覧へ戻る
プログラミング

64ビット版Windows上で16ビットWindows(Windows 1.x、2.x、3.0、3.1など)を実行する

16-bit Windows (Windows 1.x, 2.x, 3.0, 3.1, etc.) on 64-bit Windows (github.com)

33 pointsby doener2 コメント

要約

このプロジェクトは、64ビット版Windows上で古い16ビットWindowsアプリケーションを実行可能にするための、winevdmエミュレータの改変版です。インストール手順やコンパイル方法、そして内部的な動作原理について説明されています。

全文翻訳

winevdm on 64-bit Windows

[画像: screenshot]

安定版をダウンロード

最新版(不安定)をダウンロード

64ビット版Windows上で16ビットWindows(Windows 1.x、2.x、3.0、3.1など)を実行する

16ビットWindowsエミュレータであるwinevdmを64ビット版Windowsに移植した改変版です。

実行方法

インストール方法

  • ダウンロードまたはコンパイル
  • "install"ショートカットを実行するか、install.infを右クリックして"インストール"を選択してください。
  • Win16バイナリを直接実行できるようになります!

レジストリがWindows Updateによって初期化された場合は、上記の手順を再度実行してください。

uninstall.regを実行することでアンインストールできます。

設定

otvdm.iniを参照してください。

コンパイル方法 (Visual Studio)

  • Visual Studio 2017をインストールしてください。
  • PropertySheet.propsを編集してください。
  • コンパイルしてください。

コンパイル方法 (cmake)

git clone https://github.com/otya128/winevdm.git
cd winevdm
mkdir build
cd build
cmake ..
make

動作原理

このプログラムは以下の要素を含んでいます。

  • CPUエミュレータ

    • 64ビット版WindowsではLDTを変更できません (NtSetInformationProcess(,ProcessLdtInformation,,)は常にエラーを返します)
  • wineベースのWin16->Win32変換コード:

    BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )
    {
        return DestroyWindow( WIN_Handle32(hwnd) );
    }
    

    16ビットから32ビットへのリレー処理はconvspecによって自動生成されます。

    53  pascal -ret16 DestroyWindow(word) DestroyWindow16
    
  • Win16用のDOSエミュレーション

  • 16ビット <=> ネイティブHANDLE変換

  • 互換性の問題の修正、互換性の問題の修正

install.inf

64ビット版Windowsは、16ビットインストーラを検出すると、16ビットではない代替インストーラを起動するメカニズムを持っています。このプログラムはそれを利用しています。

WINDOWSディレクトリのリダイレクト

一部のWin16プログラムは、設定を%WINDIR%<filename>.iniに保存しようとします。

最近のWindowsでは%WINDIR%への保存が許可されていないため、リダイレクトが行われます。

winevdm

winevdm.exe [--app-name app.exe] コマンドライン
winevdm.exe CALC.EXE

DOS実行可能ファイル(DOSエミュレータのようなもの)も実行できます。VDMDOSVER環境変数でDOSバージョンを設定できます。

DOSエミュレーションは不完全であり、DOSBoxまたはMS-DOS Playerの使用が推奨されます。