2 ポイント 投稿者 GN⁺ 2025-01-06 | 1件のコメント | WhatsAppで共有

One Dog vs. Windows 3.1 グラフィックススタック

はじめに

  • VGAハードウェアを学習し、古いビデオドライバーの修正中に発生した問題を解決しようと試みた。
  • Asus Eee PC 1000HにWindows 3.11をインストールして、適切なビデオ出力を得ることを目指した。

Windows 3.xのデフォルトのビデオ出力

  • Windows 3.xは標準でVGA 640x480解像度、16色でレンダリングする。
  • Eee PCの1024x600画面では、この解像度は適切ではない。

Super VGAドライバーの問題

  • Windows 3.11には古いビデオアダプター用のドライバーが含まれているが、Intel GMA 950はサポートしていない。
  • Super VGAドライバーは1024x768解像度と256色をサポートするが、実際には動作しない。

IBM PCビデオの問題点

  • VGAは1980年代にIBMが設計した、非常に特殊なビデオコントローラーである。
  • SVGAはVGAより進化した技術を意味するが、標準化されたものではない。

VBE(VESA BIOS Extensions)

  • VBEは、ソフトウェアがビデオアダプターとやり取りできるようにするインターフェースである。
  • BearWindowsのVBE9xとVBEMPは、Windows 9xとNTでVBEを利用できるようにする。
  • SVGAPatchは、Microsoftの256色Super VGAドライバーをVBEを使って動作するようにパッチする。

SVGAPatchの問題点

  • SVGAPatchは、DOSソフトウェアとの互換性の問題を引き起こす。
  • DOSプロンプトを開くと画面が崩れる。

Windows 3.xの構造

  • Enhanced Modeでは3つのオペレーティングシステムが同時に実行される。
  • 仮想マシンマネージャーが仮想マシンを作成し、最初の仮想マシン内で標準モードのWindowsが実行される。

ディスプレイドライバーの構造

  • Windows Setupでビデオアダプターを選択すると、複数のドライバーがインストールされる。
  • Grabber、Display Driver、Virtual Display Device(VDD)で構成される。

SVGAPatchの動作原理

  • SVGAPatchは特定のビデオモードを設定し、VBEを使用してビデオメモリを管理する。
  • 特定のビデオアダプターに対する機能を置き換え、VBEをサポートするようにする。

VDDの役割

  • DOSプログラムは、ハードウェアへの直接アクセスを前提としている。
  • Windowsは仮想化された実装を通じてこれを処理する。

結論

  • SVGAPatchはVBEを使ってより良いビデオ出力を実現するが、DOSプログラムとの互換性問題を解決する必要がある。
  • VDDの複雑な状態管理が問題の原因である可能性がある。

1件のコメント

 
GN⁺ 2025-01-06
Hacker Newsのコメント
  • 現代のPCでWindows 3.xを起動し、標準のVGAを即座に使える点には驚きがある。しかし、現代のLinux/BSDでは、適切なドライバと設定ファイルがなければ、標準のソフトウェアアクセラレーション対応VGAフレームバッファをサポートするのが難しい

    • XFree86プロジェクトはこの問題を解決しようとしたが、Xorgフォークではそのアプローチが維持されなかった
  • Windows 3.1のGUIは、現在のものよりも直感的で効率的、使いやすく見える

  • Win11のスタートメニューは、キーワードを入力して祈る以外はほとんど使えないほど不便

  • Windows NTと2kが最も最適だった時代で、その後製品マネージャーたちが変更を始めた

  • KDEとGNOMEは時間が経つにつれて、ますます魅力的に見えてくる

  • DOSプロンプトをウィンドウモードで開くと画面が壊れる問題は、DOSプロンプトが別個のVM上で実行されているため

    • VGA ROM BIOSはVBEのラッパーである可能性があり、VBE I/Oポートと通信するIN/OUT命令を含むことがある
  • Windows 3.x/9xのディスプレイドライバー作者は、I/Oポートトラップを設定してハードウェアアクセスを仮想化する方法を使っていた

  • 仮想ディスプレイデバイス(VDD)はビデオハードウェアのマルチプレクサとして機能し、DOSアプリがフルスクリーンのときはコマンドを実際のVGAアダプターへ直接送る

  • Windows 3.xのGUIはDOS VMで動作し、ハイパーバイザカーネルVMM32がこれを他のDOSプロセスVMとマルチプレクシングする

  • Win9xのVESAフレームバッファドライバーを作成する中で、GPU状態の保存と復元方法はベンダーごとに異なることがあると分かった

  • DOSBoxでテキストモードが文字化けし、Eee PCではGUIの一部の色が消える

  • Eee PCで32ビットDebianを実行しており、Firefoxは重いがmpvは動画ストリーミングには十分使える

  • 古いDOSベースのWindowsがどのように動作していたかを読むたびに、常に畏敬の念を覚える

  • ET4000HがWindows 3.1でサポートされていなかったとき、MSのサポート窓口に連絡してドライバーディスクを受け取った経験がある

  • EEEPC 207gを所有しており、それを使ってレトロゲームを試してみるのが楽しそう

  • GUIとDOSモードの状態遷移を比較し、パターンを分析している

  • このWebサイトのデザインは、インターネットの黄金期を思い出させてくれ、さわやかな気分になる