跳至主要内容

第一章:神仙打架的 DOS 時代

2025 年,你在 Steam 上買了一款遊戲。按下「安裝」,進度條跑完,按「開始」。畫面出來了,音效出來了,手把震動了。整個過程九十秒。

你不知道你的顯示卡用了哪一條中斷線。你不知道音效走的是哪個記憶體通道。你不知道你的 CPU 把哪幾個核心分配給了這款遊戲、又把哪幾個留給背景的 Discord 和 Spotify。你不需要知道。一切都被藏起來了——藏在驅動程式裡、藏在作業系統的抽象層裡、藏在遊戲引擎替你打理的幾百萬行程式碼裡。

你覺得這件事理所當然。

1993 年,同樣的動作——把一款遊戲裝進電腦、讓它跑起來——需要你親手回答四個問題:你的音效卡是哪一張?它佔用哪一條 IRQ 中斷線?DMA 通道是幾號?I/O 位址是多少?答錯任何一題,遊戲不會當機——它只是沒有聲音,或者整台電腦凍結,逼你按下電源鍵重來。

那個年代,「裝一款遊戲」這個動作本身,就是一場考試。而那場考試的存在不是意外,是整台機器從出生那天起就帶著的胎記。

那場考試後來被取消了。取消它的人,會在第二章出場。但取消的代價,要到三十年後才顯形。

這一章,先回到考試還在的年代。


支撐這場考試的,從來就不是一個被精密設計出來的系統,而是一堆為了完全不同的目的,在十年間拼湊起來的零件。

1981 年 8 月,IBM 在紐約發表了第一台 IBM PC。為了趕在 Apple II 面前守住辦公室桌面這個山頭,IBM 破天荒地放棄了自己一貫的垂直整合傳統,採用市面現成的零件——Intel 的 8088 晶片、一家西雅圖郊外小公司剛剛交付的作業系統 DOS、外加各式各樣能插進擴充槽的擴充卡。這些零件本來沒有要彼此合作;它們只是恰好被插在同一塊主機板上。

8088 晶片的 20 位元定址,意味著一次只能看見 1MB 的記憶體。IBM 工程師把其中 384KB 劃給系統與顯示硬體,留給應用程式的只有 640KB——後來人稱「常規記憶體」。1981 年,這個數字是奢侈。1987 年開始不夠。到了 1993 年,它已經是每一款認真的遊戲必須想辦法繞開的石牆。

繞開的工具叫 HIMEM.SYS 與 EMM386.EXE。前者讓系統觸及 1MB 以外的 RAM;後者在 Intel 386 之後才有的保護模式下,把高位記憶體偽裝成 DOS 看得懂的格式,讓驅動程式和部分遊戲資源偷偷搬到石牆以外的地方。使用這兩樣工具,需要玩家親手編輯一個叫 CONFIG.SYS 的純文字檔——逐行指定載入順序、記憶體配置、裝置驅動。改錯一行,開機失敗。

至於擴充卡這邊,從頭到尾也沒有人統一協調。每一張音效卡、網路卡、顯示卡,都在搶那 16 條 IRQ 中斷線與幾條 DMA 通道。1989 年,新加坡公司 Creative Technology 推出 Sound Blaster,靠的不是音質,而是它率先把 IRQ 5 / DMA 1 / I/O 220 這組預設值賣給了足夠多的使用者。之後每一張新進市場的音效卡,都得「Sound Blaster 相容」——默默把自己的預設值改成那一組,省得玩家抓狂。

這種基於市場慣例而非技術標準的「相容」,把整整一代 PC 玩家訓練成了半個硬體工程師。一旦你內化了那幾組數字,裝遊戲就是「下一步、下一步、開始」。真正的地獄只在兩種時候降臨——你是個剛入門的新手,或者你同時想讓中文系統、CD-ROM 驅動、音效卡與滑鼠在 640KB 裡各自相安。那種對著 CONFIG.SYS 改到凌晨三點的夜晚確實存在。但它是例外,不是日常。

日常,是五分鐘裝好、關燈、開打。


五分鐘奇蹟的另一半,由一群更孤僻、更偏執、願意親手跟晶片暫存器對話的人承擔。他們承擔的方式,正在替整個 DOS 時代的落幕寫下倒數。

1990 年,一位從密蘇里大學休學的 19 歲年輕人 John Carmack,進了路易斯安那州一間叫 Softdisk 的小公司,替每月磁碟訂閱寫小遊戲。不到一年後,他和幾位同事辭職,成立了 id Software。

Carmack 對 DOS 有一個近乎神學的觀點:DOS 不是作業系統,DOS 是啟動器。 當程式被載入記憶體之後,DOS 就應該徹底讓開,把整台機器——每一個時鐘週期、每一個 bit 的記憶體頻寬、每一個 I/O 埠——交給遊戲。任何試圖在 DOS 之上再疊一層抽象的東西,在他眼裡都是敵人。

這種哲學在 1992 年的《Wolfenstein 3D》身上第一次展現威力——第一款在 IBM 相容機上跑出流暢第一人稱 3D 畫面的遊戲。Carmack 做到這件事的方法,是把 VGA 晶片當作一張沒有說明書的白紙重新使用。VGA 的預設顯示模式只用了 64KB 視訊記憶體,但晶片實際上配備 256KB——多出來的 192KB,在 IBM 的官方文件裡沒有提。Carmack 挖出了這塊被遺忘的空間,寫出所謂的 Mode X:多畫面緩衝、快速頁面切換、硬體卷軸,全部同時做到。IBM 的工程師沒有預期會有人這樣用那塊記憶體;Carmack 用起來就像它本來就是為這個目的存在的。

一年半後的《Doom》把這種哲學推到極致。320×200 解析度、每秒 35 幀、256 色貼圖、偽 3D 迷宮,全部在一顆 486 CPU 上跑出來,沒有任何硬體加速,純粹靠 CPU 逐格計算每一個畫素應該是什麼顏色。Carmack 為此設計了一套叫 BSP 的渲染演算法——把一整層迷宮預先切成樹狀結構,讓 CPU 在每一幀只需要處理玩家視野內那幾個房間。這個技巧,在今天所有 3D 引擎裡都還看得到它的影子。

但 Carmack 的魔術有一個他從不對外人大聲講的前提:他必須親手記得住 VGA 晶片的每一個暫存器、486 CPU 的每一條流水線、Sound Blaster 的每一組 I/O 埠——還有 1990 年代市場上幾十款「Sound Blaster 相容」音效卡,各自偏離標準的程度。他的程式碼不經過任何作業系統中介,但代價是,他必須把整個 PC 硬體生態的所有例外情況,親手寫進自己的程式碼裡。

id Software 付得起這個代價——它只有十幾個人,每一個都是同等偏執的工程師。

但整個產業付不起。

每一家規模稍大的遊戲公司,都在替硬體碎片化繳稅。每一款遊戲出廠,要支援幾十張音效卡、十幾種顯示模式;每一種都得在遊戲裡寫對應的補丁。工程師花在硬體相容的時間,經常是花在遊戲本身的兩倍。而這筆稅不會隨著遊戲賣得更好而減輕——只會隨著遊戲賣得更好,顧客基數更雜,加倍。


1993 年 12 月 10 日深夜,這筆稅的帳單到了。寄出帳單的,是整個 DOS 時代自己最引以為傲的那款遊戲。

《Doom》,就是讓問題加倍的那個時刻。

1993 年 12 月 10 日深夜,id Software 把《Doom》的共享版本上傳到威斯康辛大學 Parkside 分校的 FTP 伺服器。檔案一上線,伺服器擠爆、當機、重啟、再當機,校方管理員半夜打電話給 id,要求把檔案搬走。接下來一年,《Doom》被下載超過 1500 萬次。

這是 PC 遊戲第一次真正跨出科技愛好者的圈子,觸及一般消費者。

但一般消費者不會自己改 CONFIG.SYS,也不懂什麼叫 IRQ 衝突。《Doom》上市兩週內,id 的技術支援信箱收到超過一萬封信——大部分不是遊戲 bug,是玩家的記憶體設定、音效卡的中斷線、他們第一次在家用 PC 上嘗試一款需要 4MB RAM 的 3D 遊戲時撞上的每一面石牆。Carmack 親自回信到深夜,一行一行教陌生人改系統。那些寫信的人,很多從來就不應該需要知道 HIMEM.SYS 是什麼。他們只想玩一個遊戲。

這時候,每一家規模大一點的遊戲公司心裡都明白了同一件事:靠 Carmack 那套寫法——每個程式設計師親手跟每一塊晶片對話——永遠不可能支撐一個面向普通人的遊戲市場。 必須有人把硬體藏起來、把設定自動化、把驅動程式做成作業系統的責任,而不是遊戲程式設計師的責任。

但那個「有人」,不會是 id。

它只能是——作業系統本身。


問題在於,正準備接管 PC 的那個新作業系統,恰好是 Carmack 整個職業生涯最不信任的那種東西。

1995 年 8 月 24 日,Microsoft 在 Redmond 總部辦了全球矚目的 Windows 95 發表會。新作業系統自豪地宣告:32 位元、記憶體保護、統一 API、再也不用改 CONFIG.SYS。

但有一個細節,微軟在發表會上沒有提——

Windows 95 上,跑不動《Doom》。

不只《Doom》。它跑不動當時市面上任何一款認真的 PC 遊戲。當微軟內部工程師把《Wolfenstein 3D》裝到 Windows 95 上測試時,畫面變成了幻燈片。Windows 95 的抽象層,把 Carmack 辛辛苦苦榨乾的每一個時鐘週期,重新吃掉了一大半。

那一刻微軟才意識到問題的嚴重性。如果這件事不解決,Windows 帝國會在遊戲——這個最大、最黏、最年輕的消費應用市場——拱手讓給 DOS。而 DOS 正在死去。遊戲不能跟 DOS 一起陪葬,否則微軟剛剛建好的作業系統護城河,會被一個簡單得令人難堪的理由從旁挖開:

因為我兒子要玩《Doom》。


回到 2025 年那個按下「安裝」的你。

你今日享受的那九十秒體驗——不用改設定檔、不用背中斷線號碼、不用知道任何硬體細節——是 1993 年那場危機的直接產物。《Doom》證明了 PC 遊戲有巨大的大眾市場;同時也證明了,DOS 時代的裸機生態無法服務那個市場。

這裡藏著一個本書之後每一章都會反覆出現的 pattern 的起源。

DOS 時代沒有平台鎖定。硬體是裸露的,軟體是自由的,任何一個程式設計師都可以直接跟機器的每一個暫存器對話。沒有中間人抽成、沒有平台商審核、沒有 API 准入門檻。這是自由。

但自由的代價,是混亂——每一款遊戲要替自己解決所有硬體相容問題,每一個玩家要替自己做半個系統管理員。當市場只有科技愛好者時,這個代價可以接受。當《Doom》讓遊戲觸及普通人,代價就變得不可承受。

而每一次「自由的代價變得不可承受」,就會有人站出來,用便利交換控制權。表面上是幫你解決問題;骨子裡,是用你對便利的感激,換取你對平台的依賴。

提供便利的人,拿走自由。這筆交易一旦完成,就不可逆。

1993 年的 DOS 時代,正是這筆交易的前夜。而即將站出來提供便利的那個人,已經在 Redmond 某棟不起眼的辦公樓裡,被分派了一項看似不可能完成的任務——

把 John Carmack,以及他背後那一整個「不信任抽象層」的派系,連哄帶騙地拉進 Windows。

他的名字叫 Alex St. John。他即將發動的那場戰役,不只會改寫 PC 遊戲的命運——它會在不經意間,為整個科技產業接下來三十年最深的一道鎖,釘下第一根樁。