- 1996年に発売された Quake は、3D アクセラレータ、インターネット、そして MS-DOS から Windows 95 への移行という3つの技術的変化に同時に直面したゲーム
- id Software は DOS と Windows 95 の両方で動作する単一の実行ファイルを作るため、
djgpp コンパイラと DPMI 互換構造を活用
- Mpath の「Chunnel」システムにより、DOS 版 Quake が Windows 95 の Winsock TCP/IP スタックへアクセスできるように実装
- この構造は
quakeudp.dll、genvxd.dll、mgenvxd.vxd などの構成要素から成り、DOS 実行ファイルが Win32 ネットワーク API と通信できるよう中継
- その後、id Software が **Win32 専用実行ファイル(WinQuake、GLQuake)**へ移行したことで、この複雑な構造は姿を消した
Quake と OS 移行期
- 1996〜1997年のあいだに MS-DOS の市場シェアは半減し、Microsoft は Windows 95 と NT への移行を推進
- 一部の開発会社(例: Blizzard North)は Windows 95 専用ゲームを開発したが、id Software は **1つの実行ファイル(quake.exe)**で DOS と Windows の両方をサポート
quake.exe は DJGPP の DPMI クライアントを使い、DOS 用 cwsdpmi.exe または Windows 95 の DPMI サーバーと互換性を持つよう設計された
- Microsoft のエンジニア Raymond Chen はこれを「異質なエクステンダー間でもプログラムが正常に動作する驚くべき事例」と説明
DOS 環境での Quake 実行
- DOS で Quake を実行するには、
quake.exe、config.cfg、pak0.pak、cwsdpmi.exe の4つのファイルだけが必要
- マルチプレイは モデム、NullModem、IPX、TCP/IP の4方式をサポート
- IPX は LAN 用、TCP/IP はインターネット用だが、DOS には TCP/IP スタックが標準搭載されていない
- DOS 用 TCP/IP TSR で唯一の選択肢は Beame & Whiteside の BWNFS で、価格は 395 ドル(1996年当時)と非常に高価だった
Windows 95 環境での実行
- Windows 95 の **仮想 DOS ボックス(dos-box)**で
quake.exe を実行すると、同じ方式で動作
- Windows 95 の DPMI サーバーを使うため、
cwsdpmi.exe は不要
- 動作はスムーズだったが、16MB 以上の RAM が必要で、DOS よりメモリオーバーヘッドが大きい
- VGA へのアクセスが直接許可されるため、フルスクリーンでも性能低下なく実行可能
q95.bat と Mpath の Chunnel
q95.bat は単に Quake を起動するスクリプトではなく、**Mpath の Winsock トンネリングシステム(Chunnel)**を通じて TCP/IP 接続を有効化
- Mpath Interactive は **オンラインゲームサービス(Mplayer)**を運営し、Quake や Unreal を含む複数ゲームのインターネットプレイを支援
- 当時の Mpath エンジニア Larry Hastings は、Quake の初期ビルドで id Software チームとインターネット対戦のデスマッチを行った逸話を紹介
- Mpath は Quake のソースコードを受け取り、Mplayer のネットワークスタックと通信するよう修正し、Chunnel 技術を id にライセンス提供した
Chunnel の技術構造
q95.bat は qlaunch.exe を実行し、これは quakeudp.dll をロードする
quakeudp.dll は Winsock(wsock32.dll)とのブリッジ役を担う
genvxd.dll を通じて 仮想デバイスドライバ mgenvxd.vxd をロードし、割り込み 0x48 を介して Win32 と通信
- Quake の BSD ソケット実装(
mpplc.c)は Mpath 提供コードで、ソフトウェア割り込みを通じてネットワーク呼び出しを渡す
genvxd.dll はこの呼び出しを **アンマーシャリング(unmarshalling)**して Winsock に渡す
mgenvxd.vxd のシンボルには John Cash の名前が含まれている
- この技術は Mpath の独自特許技術であり、ソースコードは公開されていない
- 1996年12月以降、id Software が **Win32 専用実行ファイル(WinQuake、GLQuake、QuakeWorld)**へ移行したことで、Chunnel 構造は廃止された
結論
- Quake の TCP/IP 対応は、DOS 実行ファイルが Windows 95 のネットワークスタックを間接的に呼び出す独創的な構造で実装された
- これは DOS と Windows の境界で動作したハイブリッド技術であり、1990年代半ばのゲームネットワーキングの過渡期を示す事例
- その後 Win32 専用化によって単純化されたが、当時としては OS 移行期における技術的挑戦と革新を象徴する構造だった
4件のコメント
あの頃のジョン・カーマックといえば、天才の中の天才の開発者でした。
とても面白く、楽しく読ませていただきました。
笑、面白いですね。
Hacker News のコメント
昔、DJGPP と DPMI を直接いじって実験していた頃を思い出す
当時は本当に未来的な技術のように感じられた
特に Star Wars: Dark Forces を遊んでいてロードがあまりに遅かったので、DOS/4GW を別のDOS エクステンダに入れ替えてみたら、驚いたことに 3〜5 倍速くなった
おそらく新しいエクステンダがリアルモードに切り替えず、保護モードで直接ディスクハードウェアを呼び出していたからだと思う
Linux 初期の、まだネットワーク機能がなかった時代にはKA9Q TCP/IP スタックを使っていた
KA9Q コードリンク
これは DOS で動いていたが、Linux にも簡単に移植できた
最近でも CWSDPMI クライアントを使ってみたが、32 ビットプログラムを DOS と Windows の両方で動かせるようにしてくれる
CWSDPMI ウィキ
子どもの頃に半田付けを覚えた理由は、ヌルモデムケーブルを自作するためだった
その後で抵抗器の存在を知り、パラレルポート用サウンドカードの Covox Speech Thing を自作してみた
本当に楽しい時代だった
Maplin で大きな抵抗を山ほど買って雑に半田付けしたが、最初から完璧に動いた
友達と OMF2097 を一緒に遊ぶために作ったもので、キーボード 1 台を取り合わなくて済むのが良かった
自作した機器でMod ファイルを再生して携帯スピーカーで聴いたときは本当にすごかった
後になってフラックスを知ってから、半田付けがずっと楽になった
「DJGPP のエンジニアたち」という表現を見て、実質的にはDJ Delorie 一人だったことを思い出した
GCC のツールチェーン全体を DOS/Windows に移植したのは本当にとてつもない偉業だった
彼が id Software の依頼で機能を追加したのか、それとも単なる趣味でやったのかは分からないが、尊敬する
彼は CWSDPMI の作者で、id と直接協業していた
オープンソースプロジェクトに対してこういう言い方は少し変かもしれないが、たぶん事実だと思う
それに、Quake が VM 上で動くことに驚いているのは、おそらくVM86 モードを知らないからだろう
アメリカではそういう体育の授業は一般的なのか気になる
「Chunnel」という名前は、たぶん Channel Tunnel から取ったのだと思う
以前、Quake のTCP/IP マルチプレイを設定しようとして TECHINFO.TXT を読んだ記憶がある
そこには Beame & Whiteside TCP/IP スタックを使うと書かれていた
ftp.cdrom.com でソフトウェアを入手してインストールしたが、当時はネットワークの知識が足りず、設定がとても大変だった
結局、遅延も大きく性能も悪くて、WinQuake で NetQuake をやるほうがずっと良かった
Fabian がQuake 関連のリサーチを始めたように思える
自分も自分の chocolate Doom 3 BFG fork で OpenGL の問題解決を手伝ってほしい
ただ、Quake は Doom よりずっと複雑な世界なので、本 1 冊で扱うのは難しい
90 年代には、友達の電話番号にモデム接続するだけで Quake や Doom を簡単にマルチプレイできたのに、
今ではサーバーなしではほとんど不可能なのが皮肉だ
TCP/IP は当初なかったが、後にiDOOM TCP ドライバで解決された
大学の寮でテストしたときは本当に画期的だった
いわばエンジン内蔵の Hamachiのようなものだ
ただ、最近はゲーム会社がスキン販売の収益のために個人サーバーを塞ぐことが多い
Valve は例外的に TF2 のカスタムサーバーを許可しているし、Minecraft も今なお認証を切って友達と遊べる
Windows 95 が TCP/IP を内蔵したことで、昔のようにTCP を別途インストールしていた時代は終わった
ネットワークカードが一般消費者向けに普及して、世界が変わった
ただし Windows はネットワークカードがないと TCP/IP をインストールせず、ping コマンドすらなかった
今の Windows 11 はネットワークなしでインストールするとどうなるのか気になる
25 年前に自分が書いたDJGPP/NASM チュートリアルが、いまだに Google 検索に引っかかる