微型計算機的始祖:Altair 8800 [轉linux.cn]

《大眾電子》的訂閱者是個複雜的群體,雜誌編輯 Arthur Salsberg 不得不在 1974 年 12 月刊 中的前言部分指出這點。此前,雜誌編輯組曾收到了對《如何搭建家庭媒體中心》文章的抱怨,稱這篇文章激勵了許多業餘電視愛好者走出去,削弱了專業修理人員存在的必要性,這對許多人的電視造成了極大傷害。Salsberg 認為,這個擔憂的產生可能是因為大家不清楚《大眾電子》讀者們的真實水平。他解釋道,雜誌內部調查的資料顯示,52 % 的訂閱者都是某方面的電子專家,並且其中的 150,000 人在最近 60 天之內都修過電視。此外,訂閱者們平均在電子產品上花費了 470 美金(2018 年則是 3578 美金),並且他們有對萬用表、真空管伏特計、電子管測試儀、電晶體測試儀、射頻訊號產生器和示波器的需求。“《大眾電子》的讀者們並不全都是新手。”Salsberg 總結道。

熟悉《大眾電子》的人居然會質疑它的訂閱者,這令我十分吃驚。不過最近 60 天我的確沒修過電視。我的電腦對我來說就是一塊鋁,我甚至沒把它拆開看過。1974 年 12 月的《大眾電子》刊登的像《駐波比是什麼以及如何處理它》和《對萬用表的測試》之類的特色文章,甚至連廣告都令人生畏。它們中有個看起來像某種立體聲系統的東西大膽地寫道“除了‘四通道單元(即內建的 SQ、RM 和 CD-4 解碼接收器)’,沒有任何音訊裝置是被期待的”。這也表明了《大眾電子》的訂閱者一定對電子有很多深入的瞭解。

不過在 1975 年 1 月刊 中,雜誌為讀者們帶來了一些他們從沒見過的東西。在標題“發現項目”下面,雜誌的封面是一個黑灰色的盒子,它的前面板上有一組開關和燈。這便是 Altair 8800,“世界上首個有商業競爭力的迷你計算機”,它的售價低於 400 美元。儘管 Altair 作為“迷你計算機”被宣傳,但其實大家都將它稱為“微機”和PC,它是首個商業上成功的新型電腦。Altair 十分小巧而且很便宜,以至於它成為了當時家家戶戶都能用起的電腦。正如 Salsberg 所寫道,它在《大眾電子》上的出現意味著:“家用電腦的時代終於到來了。”

《大眾電子》1975 年 1 月刊的封面

此前,我曾寫過 關於 Altair 的文章,但我覺得 Altair 有讓我再次介紹的價值。它在當時效能並不強(雖然它便宜很多),也不是首個裝載微處理器(由至少三個微處理器組成)的通用計算機。但是 Altair 是一種可供我們所有人使用的計算機。它是歷史上包括我們所擁有的裝置中首臺流行的計算機,早於 Altair 計算機都是完全不同的機器,它們由穿孔卡程式設計並且很少與使用者互動。不過 Altair 也是臺極其簡單的計算機,它不附帶任何作業系統甚至引導載入器。除非你購買其它外設,否則 Altair 就是一臺裝配 RAM 並且只有一組開關和燈泡的機器。由於 Altair 操作簡單,學習計算的基本理論都成了十分簡單的事情,就好像他們在數字世界冒險時遇上了舊世界的居民一樣。

Roberts 和他的公司

Altair 被一家名為 MITS 的公司設計和製造,這家公司位於美國新墨西哥州的阿爾布開克。MITS 由一個叫 H. Edward Roberts 運營。他們起初借 19 世紀 70 年代的熱潮製造模型火箭的遙測系統。積體電路將計算器的成本降低到十分可觀的數字,突然之間它就成了美國教授們的必需品。不幸的是,由於計算器市場競爭過於激烈,到了 1974 年,MITS 便負債累累。

1974 年在計算機界是奇蹟迭出的一年annus mirabilis。一月的時候,惠普公司推出了世界首個可程式設計的手持計算器 HP-65。四月的時候,Intel 釋出了 Intel 8080,他們的第二款 8 位微處理器,它也是首款受歡迎的微處理器。接著,六月的時候,《Radio Electronics》雜誌介紹了 Mark-8 這個自制迷你計算機,它使用了 Intel 在 1972 年推出的 Intel 8008 微處理器。Mark-8 是使用微處理器搭建的第三臺電腦,它的首次登場是在雜誌的封面上。Mark-8 在《Radio Electronics》上的出現促使了《大眾電子》尋找微機項目的出現。

《大眾電子》的訂閱者們其實早在 1974 年 12 月就通過電郵獲得了 1975 年 1 月刊的副本。他們公佈的 Altair 為這個奇蹟迭出的一年annus mirabilis畫上了圓滿的句號。Altair 的出現是十分重要的,因為此前從未有過向公眾提供的價格公道而又功能齊全的電腦。當時,作為最受歡迎的迷你計算機之一的 PDP-8 要幾千美金才能買到。不過 Altair 搭載的 Intel 8080 晶片幾乎能與 PDP-8 匹敵;8080 支援更廣泛的指令集,而且 Altair 可以擴充套件到 64 kb 記憶體,顯然強於僅有 4 kb 記憶體的 PDP-8。並且,Mark-8 也不是他的對手,因為它搭載的是隻能處理 16 kb 記憶體的 Intel 8008。在 Mark-8 必須由使用者按照說明書手動拼裝的情況下,Altair 在購買時就已經被組裝好了(不過由於後來 MITS 被大量訂單淹沒,最後真正能獲得 Altair 的方式也只有買零件拼裝了)。

對許多《大眾電子》的讀者來說,Altair 是他們瞭解數字計算的起點。1975 年 1 月刊上那篇介紹 Altair 的文章由 Roberts 和 Altair 的聯合設計師 William Yates 所寫。Roberts 和 Yates 煞費苦心地用電工和無線電狂熱者們所熟悉的詞彙來介紹了數字硬體和計算機程式設計的基本概念。他們寫道:“一臺計算機其實由一堆可變的硬體構成。僅需修改儲存於記憶體之中的為組合形式,便可改變硬體裝置的種類。”同時,Roberts 和 Yates 認為程式設計的基本概念是“足夠簡單並能在較短時間內掌握,但是想要成為一個高效的程式設計師必須經驗豐富且富有創造力。”對此我十分認同。儘管已經組裝好了,文章仍包含了用來講解 Intel 8080 的組成的詳細圖表。文章解釋了 CPU 和計算機記憶體單元的區別,堆棧指針的概念和組合語言以及更高階的語言(例如 FORTRAN 和 BASIC)比起手動輸入機器碼所帶來的巨大優勢。

其實,《大眾電子》在 1975 年 1 月刊之前就出版過 Roberts 撰寫的系列文章。這一系列作為短期課程被收錄在“數字邏輯”專欄中。在 1974 年 12 月刊中,Roberts 為讀者們帶來了關於構建“超低成本計算機終端”的文章,文章中介紹了可以用於 8 位電腦中輸入值的八進位制鍵盤。在介紹這個鍵盤時,Roberts 解釋了電晶體到電晶體的邏輯工作原理,以及關於構建一種可以“記住”數字值的觸發器的方法。Roberts 承諾說,這個鍵盤可以在下個月即將公佈的 Altair 電腦中使用。

有多少《大眾電子》的讀者製作了這個鍵盤我們無從得知,但是那個鍵盤的確是個很有用的東西。如果沒有鍵盤和其它輸入裝置,我們只能通過撥動 Altair 面板上的開關來輸入值。Altair 的面板上有 16 行開關被用來設定地址,而下方的 8 個則是用來操作計算機的。16 行中最右邊的開關是用來指定要儲存在記憶體中的值的。這麼做不無道理,因為 Intel 8080 使用 16 位的值來處理 8 位的資訊。而這 16 個開關每一個都代表了一個位,當開關向上時代表 1,向下則代表 0。用這樣的方式互動是個啟示(一會兒我們就會講到),因為 Altair 的面板是真正的二進位制介面。這使得你可以觸控到裸露的金屬。

儘管在當下 Altair 的介面對我們來說完全不像是人用的,不過在那個時候這可是不平凡的。比如 PDP-8 的面板上有個類似的但更漂亮的二進位制輸入裝置,而且它被塗上了吸引人的黃色和橙色,不過講真,它應該重新來過。然而 PDP-8 經常與紙帶閱讀器或電傳打字機配合使用,這使得程式輸入更加容易。這些 I/O 裝置價格高昂,這意味著 Altair 的使用者們大都會被面板卡住。正如你所想,通過這一堆開關進入一個大型程式是個繁重的工作。不過幸運的是,Altair 可以與盒式記錄器連線,這樣一來載入程式就不是什麼難事了。Bill Gates 和 Paul Allen 進行了微軟的首次商業合作,為 Altair 編寫了 BASIC 語言,並在 1975 年以 MITS 許可證發行。此後,那些買得起電傳打字機的使用者就能 通過紙帶來將 BASIC 載入 Altair 了,並能使得使用者能夠通過字元介面與 Altair 互動。之後,BASIC 便成為了學生們最愛的入門程式語言,併成了早期微機時代的標準介面。

z80pack

多虧了網路上一些人,特別是 Udo Munk 的努力,你可以在你的電腦上執行 Altair 的模擬器。這個模擬器是在 Zilog Z80 CPU 的虛擬套件上構建的,這個 CPU 可以執行 Intel 8080 的軟體。Altair 模擬器允許你像 Altair 的使用者們一樣調整面板上的開關。儘管點選這些開關的感覺不如撥動真實開關,但是使用 Altair 模擬器仍是一個能讓你知道二進位制人機互動效率有多低的途徑,不過我覺得這同時也很簡明直觀。

z80pack 是 Udo Munk 開發的 Z80 模擬器套件,你可以在 z80pack 的官網上找到它的下載連結。我在 上一篇介紹 Altair 的文章中 寫到過在 macOS 上使用它的詳細過程。如果你能編譯 FrontPanel 庫和 altairsim 可執行程式,你應該能直接執行 altairsim 並看到這個視窗:

模擬器中的 Altair 面板

在新版的 z80pack 中(比如我正在使用的 1.36 版本),你可以使用一個叫 Tarbell boot ROM 的功能,我覺得這是用來載入磁碟映象的。經我測試,它的意思是你不能寫入 RAM 中的前幾個資訊。在編輯 /altairsim/conf/system.conf 之後,你可以構建帶有一個 16 頁 RAM 且沒有 ROM 或引導載入器的 Altair。除此之外,你還可以用這個配置檔案來擴大執行模擬器的視窗,不得不說這還是挺方便的。

Altair 的面板看起來就很嚇人,不過事實上並沒有我們想象中的這麼可怕。Altair 說明書 對解釋開關和指示燈起到了很大的作用,這個 YouTube 視訊 也是。若想執行一個簡易的程式,你只需要瞭解一點點東西。Altair 右上方標籤為 D0 到 D7 的指示燈代表當前處理地址的資訊。標籤為 A0 到 A15 的指示燈標識當前的地址。地址指示燈下的 16 個開關可以用來設定新地址;當 “EXAMINE” 開關被向上推動時,資料指示燈將會更新,並顯示新地址上的內容。用這個功能,你便能觀察到記憶體中所有的資訊了。你也可以將 “EXAMINE” 推下來自動檢查下一個位置上的資訊,這使得檢索資訊更容易了。

要將模式儲存到資訊中,請使用最左邊的 8 個標籤為 0 到 7 的開關。然後,請向上推動 “DEPOSIT” 按鈕。

在《大眾電子》 的 1975 年 2 月刊 中,Roberts 和 Yates 製作了一小段程式來確保使用者們的 Altair 正常工作。這個程式從記憶體中讀取兩個整型資料並新增之後將它們存回記憶體中。這個小程式僅由 6 條指令組成,但是這 6 條指令包含了 14 條在一起的記憶體資訊,所以要正確地輸入它們需要一點時間。這個程式也被寫入了 Altair 的說明書,原文如下:

Address Mnemonic Bit Pattern Octal Equivalent
0 LDA 00 111 010 0 7 2
1 (address) 10 000 000 2 0 0
2 (address) 00 000 000 0 0 0
3 MOV B, A 01 000 111 1 0 7
4 LDA 00 111 010 0 7 2
5 (address) 10 000 001 2 0 1
6 (address) 00 000 000 0 0 0
7 ADD B 10 000 000 2 0 0
8 STA 00 110 010 0 6 2
9 (address) 10 000 010 2 0 2
10 (address) 00 000 000 0 0 0
11 JMP 11 000 011 3 0 3
12 (address) 00 000 000 0 0 0
13 (address) 00 000 000 0 0 0

如果你通過開關來輸入上面這些值,最終會得到一個程式,它會讀取記憶體 128 中的值,並將其新增至 129 中,最終將其儲存至 130 中。每條指令都會佔用一個地址,它們最開始會被給予最低有效位,這便是第二個位元組總會被清零(沒有高於 255 的地址)的原因了。在輸入這個程式並在 128 和 129 中輸入了一些值之後,你可以向下推動 “RUN” ,之後再將它推到 “STOP” 位置。因為程式迴圈執行,以一秒內執行上千次的速度反覆地新增並儲存那些值。並且最後得到的值總是相同的,如果你暫停程式並檢查 130,你應該能找到正確答案。

我不知道普通的 Altair 使用者是否使用過,不過 z80pack 包括了一個彙編程式 —— z80asm,意思是適用於 Z80 的彙編程式Z80 assembly,所以它使用了不同的助記符。不過因為 Z80 是被設計來適配為 Intel 8080 寫的軟體的,所以即使助記符不一樣,它們的操作碼也是相同的。你可以直接將 z80asm 裝載進 Altair:

1
2
3
4
5
6
7
 ORG 0000H
START: LD A,(80H) ;Load from address 128.
LD B,A ;Move loaded value from accumulator (A) to reg B.
LD A,(81H) ;Load from address 129.
ADD A,B ;Add A and B.
LD (82H),A ;Store A at address 130.
JP START ;Jump to start.

編譯之後,你可以調用匯程式設計序來將其轉換為 Intel HEX 檔案:

1
$ ./z80asm -fh -oadd.hex add.asm

我們用帶有 h 參數的 -f 標識來定義輸出的 HEX 檔案。你可以用 -x 標識來傳遞 HEX 檔案,從而使得 Altair 能夠載入程式:

1
$ ./altairsim -x add.hex

這會在記憶體中自動設定前 14 個資訊,就和你通過開關手動輸入這些值一樣。你可以直接使用 “RUN” 按鈕來替代以前那些繁瑣的步驟,這是如此的簡單!

我不覺得有很多 Altair 使用者以這種方式來編寫軟體。Altair BASIC 釋出後,使得 BASIC 成為了 Altair 程式設計最簡單的方法。z80pack 同時也包括了一些包含不同版本 Altair BASIC 的 HEX 檔案;在模擬器中,你可以用這個方式載入 4.0 版本的 4K BASIC:

1
$ ./altairsim -x basic4k40.hex

當你開啟模擬器並按下 “RUN” 按鈕之後,你就會看到 BASIC 開始執行了,同時它會在終端中與你互動。它首先會提示你輸入你記憶體的可用量,我們輸入 4000 位元組。隨後,在顯示 “OK” 提示符之前,它會問你幾個問題,Gates 和 Allen 用這個來代替標準的 “READY” 並以此節省記憶體。在這之後,你便可以使用 BASIC 了:

1
2
3
OK
PRINT 3 + 4
7

儘管只有極小的 4 kb 空間來執行 BASIC,不過你仍邁出了使用面板操控電腦的重要一步。

很顯然,Altair 遠不及如今的家用電腦,並且比它晚十多年釋出的 Mac 電腦看上去也是對 Altair 電腦的巨大飛躍。但是對親手組裝了 Altair 的《大眾電子》的讀者們來說,只用了低於 400 美金和一半的書櫃空間的 Altair 才是第一個它們真正能擁有的全功能電腦。對那時只能用 一疊卡片 或一卷磁帶來與計算機互動的人們來說,Altair 是個令人眼前一亮的玩意。這之後的微機基本都是在對 Altair 改進,使得它更易用。從某種意義上來說,我們甚至可以把它們看成更復雜的 Altair。Altair,一個野獸派的極簡作品,卻為之後的許多微機打下了鋪墊。

如果你覺得這篇文章寫的不錯,你可以在推特上關注 @TwoBitHistory 或訂閱 RSS feed 來獲得我們文章的更新提醒。文章每兩週就會更新一次!

TwoBitHistory 的上一篇文章是…………

“跟我一起來進行這振奮人心的冒險吧!只需要十分鐘,你就能瞭解到 10 年都沒人用過的軟體。” https://t.co/R9zA5ibFMs

— TwoBitHistory (@TwoBitHistory) 寫於 2018 年 7 月 7 日


via: https://twobithistory.org/2018/07/22/dawn-of-the-microcomputer.html

作者:Two-Bit History
選題:lujun9972
譯者:zhs852
校對:校對者ID

本文由 LCTT 原創編譯,Linux中國 榮譽推出

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×