
640KB,DOS 環境,要一直挪記憶體才能打電動。而現在的玩家插滿 32GB 都嫌不夠,當年的人卻是在幾十 KB 的縫隙裡拼命擠空間。
為什麼卡在640KB

早期 PC 用的 8088 處理器定址能力是 20 條位址線,也就是最多 1MB 的空間。IBM 當年把前面 640KB 劃給程式使用,剩下的 384KB 保留給顯示卡、BIOS 和各種介面卡的韌體。這 640KB 就是所謂的傳統記憶體,也是後來所有麻煩的根源。
問題在於 DOS 程式的本體只能待在傳統記憶體裡。你機器上插了 4MB 還是 16MB 都無所謂,遊戲要的是那 640KB 裡面還剩多少。資料倒是可以往上層擺,但前提是程式自己支援,所以有些遊戲吃擴充記憶體、有些吃延伸記憶體,設定檔常常要為不同遊戲準備不同版本。而驅動程式、滑鼠、光碟機、音效卡、中文系統,每一個常駐程式都在啃傳統記憶體這塊蛋糕。
順帶一提,那句「640KB 對任何人都夠用了」的名言常被算在比爾蓋茲頭上,但他本人多次否認說過這句話。
台灣玩家的額外難題

在台灣還有一層。當年的中文顯示要靠常駐的中文系統撐著,倚天中文系統一掛上去就先吃掉一塊傳統記憶體。於是就出現了很經典的兩難,載入中文系統就看得懂選單但遊戲跑不動,不載入遊戲跑得動但畫面全是亂碼。
留言裡有人提到 8088 只能用到七百多 KB,因為空間都塞了中文系統,講的就是這件事。
config.sys與autoexec.bat的攻防

(CONFIG.SYS 與 AUTOEXEC.BAT 的設定範例示意圖)
解法是把常駐程式趕出傳統記憶體。HIMEM.SYS 負責管理 1MB 以上的延伸記憶體,286 就能使用;EMM386 則要 386 以上才跑得動,因為它得靠虛擬 86 模式,把上層那 384KB 裡沒被佔用的空隙開放出來,變成可以塞驅動程式的上層記憶體區塊。
會這麼拚是因為遊戲不留情面。有些遊戲啟動時會先檢查可用的傳統記憶體,數字不夠就直接拒絕執行,連畫面都不給你看。當年為了仙劍奇俠傳或金庸群俠傳跟自己的設定檔纏鬥一整晚的,應該不只一兩個人。
於是 config.sys 裡的 DEVICE 要一個一個改成 DEVICEHIGH,autoexec.bat 裡的常駐程式前面要加 LOADHIGH。改完打一行 MEM 看剩多少,差幾 KB 就再回去調順序,因為載入順序不同,塞得進去的東西也不同。這個過程可以耗掉一整個晚上,而目的只是為了讓某個遊戲肯開。
多重開機選單這個發明
DOS 6 之後可以在 config.sys 裡寫開機選單,這大概是當年最實用的功能。一個選項載入中文系統和光碟機驅動拿來工作,一個選項什麼都不載入專門打電動,開機時自己選。
會做這件事的人,在當年的班上或辦公室通常就是那個負責幫大家修電腦的。
常見問題
延伸記憶體和擴充記憶體是同一件事嗎?
不是。擴充記憶體是靠分頁的方式,把記憶體切成小塊輪流映射到上層的視窗給程式用,最早得插一張實體的擴充卡才有,386 之後才改由 EMM386 用軟體模擬。延伸記憶體則單純是 1MB 以上的連續空間。有些遊戲只吃其中一種,所以設定檔常常要為不同遊戲準備不同版本。
MEMMAKER 好用嗎?
它會自動嘗試各種載入順序然後挑一組最省空間的,對多數人來說夠用。但真的差幾 KB 進不去的時候,還是得自己手動排。
現在還能重現這個環境嗎?
可以,用 DOSBox 或 86Box 這類模擬器就能跑,設定檔的邏輯跟當年完全一樣。
總結
現在組電腦不會有人為了幾十 KB 熬夜,記憶體的煩惱換成了插四條會不會降頻、時序要不要手動調。麻煩沒有消失,只是換了地方。
不過那個年代訓練出來的東西留了下來。願意為了一個遊戲去讀說明檔、去試不同的載入順序、去理解機器為什麼這樣運作的人,後來多半就是自己組電腦、自己超頻、自己解決問題的那一群。



