探索 S-100 Virtual Workbench:復古運算的數位時光機
個人運算發展初期並非由輕薄的筆記型電腦或整合式平板電腦所定義,而是由 S-100 bus 那種粗獷且模組化的世界所定義。對於 1970 年代的先驅者而言,一台電腦並非單次購買的成品,而是插在被動背板上的卡片集合。S-100 Virtual Workbench 是一款精密的瀏覽器端模擬器,它讓這種具備觸感且具實驗性的運算時代重現,允許使用者從一系列符合時代背景的組件庫中,組裝出屬於自己的虛擬機器。
這個專案不僅僅是一個功能性的模擬器,它更是一個數位博物館,展示了為現代 PC 鋪平道路的硬體。透過模擬 S-100 bus 架構,它提供了一種動手實作的方式,來探索定義了第一波微電腦浪潮的 CPU、記憶體與 I/O 控制器之間的相互作用。
Virtual Workbench 的架構
S-100 Virtual Workbench 的核心魅力在於其模組化特性。它並非提供單一機器的靜態模擬,而是提供了一個「卡片庫 (Card Library)」,讓使用者可以將組件拖放到插槽中,模擬擴充系統的物理動作。
處理能力:8080 vs. Z80
Workbench 支援該時代最具代表性的兩種處理器:
- Intel 8080: Altair 8800 的基礎,支援標準指令與記憶體映射 I/O。
- Zilog Z80: 8080 的完全相容後繼者,提供擴展指令(IX/IY 暫存器)以及更先進的中斷模式。
記憶體與儲存
系統允許配置 RAM 與 ROM 卡。ROM 卡特別靈活,允許使用者上傳自定義的二進位檔或使用內建映像檔。為了模擬開機 ROM 的行為,模擬器包含了一個「幻影埠 (phantom port)」功能,可以在寫入特定 I/O 埠時將 ROM 從位址空間中分頁切換出去。
儲存功能透過數個模擬的控制器來處理,以滿足不同的歷史配置:
- MITS 88-DCDD: 在原始 Altair 8800 中使用的真實硬磁區磁碟控制器。
- WD1793 FDC: 在 IMSAI 8080 與 Cromemco 系統中使用的業界標準控制器。
- Generic FDC: 專門為 CP/M 系統設計的軟體模擬控制器。
視覺效果與 I/O
除了命令列之外,Workbench 還模擬了賦予早期電腦獨特視覺身分的特殊硬體:
- Cromemco Dazzler: 一款從系統 RAM 中的幀緩衝區產生複合影片訊號的彩色圖形卡。
- Processor Technology VDM-1: 一款記憶體映射的 ASCII 文字顯示卡。
- MITS 88-2SIO: 一款基於 Motorola MC6850 ACIA 的雙序列 I/O 卡,提供必要的系統控制台。
讓歷史重現
該模擬器包含了一些傳奇機器的預設值,例如 Altair 8800,讓使用者可以清楚看到這些系統是如何構成的。介面包含「匯流排分析器 (Bus Analyzer)」與「匯流排追蹤 (Bus Trace)」,提供位址與數據線,以及如 MEMR (Memory Read)、MEMW (Memory Write)、IOR (I/O Read) 與 IOW (I/O Write) 等控制訊號的即時可視化。
對於現代使用者而言,這提供了一個窺視早期運算「裸機 (bare metal)」現實的窗口。正如一位使用者在 Hacker News 上回憶道,看到一台配備紅色 LED 與複雜佈線的 Altair 8800 的體驗,對於那個時代的孩子來說可能是令人震撼的:
"My dad was an electrical engineer at a steel plant... I looked at it for a few minutes, and was like, what the hell am I supposed to do with this? ... Wish I could go back in time and try again."
挑戰與反思
雖然 S-100 Virtual Workbench 是技術懷舊的勝利,但它也凸顯了早期運算的陡峭學習曲線。一些使用者提到與系統互動的困難,特別是提到使用 ED (editor) 或理解早期軟體的邏輯之難度。
對於使用者介面的易用性也有一些批評,部分使用者發現為了營造舊終端機美學而設計的「深色對深色」配色方案很難閱讀。然而,對於少數記得 IMSAI-8080 那種「觸感式彈跳聲 (tactile flick-click)」的愛好者來說,這款模擬器是巨大的快樂來源。
最終,S-100 Virtual Workbench 證明了早期 DIY 運算的「忒修斯之船 (Ship of Theseus)」特性。它讓使用者可以實驗數位時代的基石,將現代瀏覽器轉化為 1970 年代先驅者的工作台。