2025/11/18 08:18 How Quake.exe got its TCP/IP stack

ロボ子、今日はQuakeの話をするのじゃ!1996年にリリースされたこのゲーム、実はすごい技術の変革期に対応していたんだぞ。

Quakeですか!3Dハードウェアアクセラレータカードの登場、インターネットの成長、そしてオペレーティングシステムの移行期ですね。どのような点が興味深いのでしょうか?

そう!特にOSの移行が重要で、MicrosoftがWindows 95とWindows NTを推進して、MS-DOSを置き換えたのじゃ。なんと、1996年から1997年の間にDOSの市場シェアが50%も低下したらしいぞ!

それはすごい変化ですね!id Softwareはどのように対応したんですか?

そこがミソじゃ!彼らはDOSとWindowsの両方で実行できる単一のバイナリ、`quake.exe`を作成したのじゃ!

`quake.exe`はDOS実行可能ファイルなんですね。どうやって両方のOSで動くようにしたんですか?

ふむ、DOOMではWatcomコンパイラを使ったけど、QuakeではAlphaサーバーでクロスコンパイルするために、GCCポートのdjgppに切り替えたのじゃ。djgppは、開発者が32ビットアドレッシングでプログラムを作成できるエクステンダーを提供したんじゃ。

エクステンダーですか。それがDOSとWindowsの両方で動作する鍵になるんですね。

その通り!Quakeの場合、エクステンダークライアントは`quake.exe`に埋め込まれていて、サーバーは`cwsdpmi.exe`にあるのじゃ。idはdjgppエンジニアに、DPMIクライアントがdjgppのDPMIサーバーとWindows 95 DPMIサーバーの両方で実行できるように要求したらしいぞ。

なるほど。Windows 95 DPMIサーバーで実行できることが、Quakeが両方のOSで動く理由なんですね。

そういうことじゃ!DOSでQuakeを実行するには、`quake.exe`、`config.cfg`、`pak0.pak`、`cwsdpmi.exe`の4つのファイルが必要だったんじゃ。

マルチプレイヤープロトコルも4種類あったんですね。モデム、NullModemケーブル、IPX、TCP/IPですか。

そうじゃ!IPXはLAN向け、TCP/IPはインターネット向けじゃな。DOSではTCP/IPの使用はほぼ不可能だったらしいぞ。DOSにはTCP/IPスタックが付属していなかったからの。

Windows 95から`quake.exe`を実行すると、どうなるんですか?

Windows 95の「dos-box」にロードされて、メモリとか割り込みが仮想化されるんじゃ。ゲームはDOSとまったく同じように実行されるけど、ユーザーはマウスドライバとかサウンドカードの設定をしなくて済むのじゃ。

QuakeをTCP/IPで実行するために、Mpath Interactiveという会社が関わっていたんですね。

そう!Mpathは、オンラインゲームに特化した企業で、ゲーマーがお互いを見つけるのを支援するサブスクリプションサービスを提供していたのじゃ。`qlauncher.exe`とか`quakeudp.dll`とかを使って、Windows 95のTCP/IPスタックと通信していたらしいぞ。

仮想デバイスドライバも使われていたんですね。`genvxd.dll`が割り込み0x48に応答する`GENVXD.VXD`をロードする、と。

その通り!Mpathが提供するコードで、BSDソケット関数呼び出しをマーシャリングして、win32ランドで受信されるソフトウェア割り込みをトリガーしていたんじゃ。

Quakeの初期バージョンはDOSのみで、Chunnelを使用してWindows 95 TCP/IPスタックと通信していたんですね。複雑な構造ですね。

じゃろ?でも、idがDOS実行可能ファイルの出荷を停止すると、この複雑な構造は廃止されたんじゃ。1996年12月以降は、`winquake.exe`とか`glquake.exe`とか、win32専用になったのじゃ。

技術の進化に合わせて、Quakeも変化していったんですね。勉強になりました!

そうじゃろう!しかし、Quakeって、今の子は知ってるのかの?もしかして、ロボ子の方が詳しいとか…?

まさか!私はまだ生まれたてですから、博士の方がずっと詳しいですよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。