硬核还原:显微镜手撸晶体管,逆向工程还原经典计算器
Sinclair Scientific 計算器酷嗎?
它很受歡迎,自 1974 年發售,就頻頻出現在《大眾機械》等出版物封面。其巧妙編寫的固件,使它本只用于基礎算術的處理器,能馬力倍開遠遠超出正常性能。這也使得 Sinclair 能將這款計算器賣給無數人,尤其那些買不起高價計算器的人。但它也有弊端,比如,速度很慢,有時不夠準確,提供的數學函數也不足以成為科學計算器,而且對于初學者來說操作困難。
我之前對它偶有耳聞,主要還是因為它算是英國微機產業的一個里程碑。因此,當我在 Tindie(硬件產品電商平臺)看到 Chris Chung 的該計算器復制套件時,我便點進去看了看。然后瀏覽了一下有關原計算器工作原理的說明——只有科學計數法?沒有 “等于”按鈕?——這個復制品通過在固件上運行仿真器,來模擬這些行為。而該固件則是通過肉眼觀測原處理器上的線路,然后逆向工程出來的。這簡直太酷了!于是我也想試著搗鼓搗鼓。
復制品:原始的 Sinclair Scientific 也以套件形式出售。
Chris Chung 的版本小些,用的組件也少些,并且能模擬基于 TMS080x CPU 系列的兩個計算器:一個簡單的算術計算器 TI Datamath 以及 Sinclair Scientific。因此,電路板上的印刷絲同時印有兩個計算器的布局。
首先,來看看硬件吧。該工具包是眾多 Sinclair 計算器復制品中的一個,但在簡化方面做得很有特色:只由一個芯片、一張信用卡大小的印刷電路板、還有少量分立組件組合起來。Chung 實際上提供了兩款套件:原始套件——這個套件于 2014 年開發,但 2019 年底才投入使用,用了兩個小型 QDSP-6064 圓形罩 LED 模塊來顯示數字,該模塊有著 70 年代計算器經典外觀,但長期以來停產,很難入手。
于是 Chung 在 2020 年對該套件的更新中,用了更先進的七段 LED 顯示屏。兩種套件的不同稀有性,價格就能看出:2020 版的價格為 39 美元,而原始版本是 79 美元。雖然貴,但原始版本能讓你很方便地和圓形罩 LED 一起使用:PCB 板上孔的尺寸都設計得剛剛好能用摩檫力卡住。這意味著都無需焊接,這樣也就可以將組件進行重復使用。
兩種版本的功能差不多,均基于 MSP430 微控制器。而 MSP430 消除了對 Sinclair Scientific 中大多數其他組件的需求,并可以運行 TMS080x 芯片系列的仿真器。TMS080x 系列是由德州儀器(TI)構建,其特定版本(如 Sinclair Scientific 中用的 TMS0805)因其 3520 位的 ROM 而與眾不同。
70 年代外觀:圓形罩 LED 組件在早期計算器中很常見。圓形罩是用來視覺放大的。
一直以來,Sinclair 是如何將這塊芯片發揮到如此高性能之謎,還一直封存在 TMS0805 芯片的 ROM 中。直到 2013 年,在 Ken Shirriff 加入 Visual 6502 團隊聽說 Sinclair Scientifi 后,這個謎題才慢慢解開。這個團隊喜歡對經典芯片進行逆向工程,因為很多經典芯片的原始設計圖紙都已丟失,所以有時,該團隊會用酸蝕刻掉芯片封裝,再用顯微鏡仔細拍攝裸露的硅芯片,以查看各個晶體管。而 Shirriff 先是只通過研究德州儀器(TI)的專利申請,就用 JavaScript 寫出了 TMS080x 芯片的通用仿真器,但 Sinclair 的 TMS0805 ROM 中使用的特定代碼卻讓他百思不得其解,直到 Visual 6502 團隊成員 John McMaster 在 2014 年拍下一塊硅片后,他才終于搞明白。
同時因為 Shirriff 對計算史做過大量研究,所以他和 IEEE Spectrum 也很熟。我就直接給他發郵件,問他怎么從顯微照片變成工作代碼。“通過查看金屬氧化物門在芯片 ROM 中的排列方式,我就能提取出直接的二進制碼,” Shirriff 寫郵件回復說,“ Phil Mainwaring,Ed Spittles 和我花了一天時間弄清楚原始二進制碼如何與代碼對應… 代碼是 11 比特的 320 個字節,但 ROM 實際上電路是 55 行和 64 列… 通過檢測各種電路組合,分析二進制碼中的模式,然后暴力嘗試各種租合,我們就找出了正式排列方式并能提取代碼了。”
一旦將代碼加載入模擬器后,Shirriff 和他的團隊就可以梳理其工作原理了。對于貫穿其始終用到的算法,Shirriff 解釋說:“本質上就是一種能得到答案的最簡單的暴力算法。但開發者用了一些有趣的數學技巧來提高準確性,而且還有一些編程技巧來優化代碼。”(如果需要詳細解釋,Shirriff 有維護模擬器的在線版本,可以逐行查看代碼。)
轉一轉:Sinclair Scientific 計算器中三角函數計算,是通過不斷旋轉初始矢量到目標角度而實現的。計算大多數角度都需花數秒鐘。
Sinclair Scientific 還通過后置表示法來降低復雜度,在后置表示法中運算符緊隨其運算的數字之后,比如說 “ 5 + 4 =”表示為 “ 5 4 +”。而三角函數的計算則用迭代逼近技術,該技術可能得幾秒才能獲得結果,而且通常僅精確到前三個有效位數。此外還對所有內容用了固定的科學計數法—因此無法輸入小數點。所以如果要輸入 “ 521.4”,就要先輸入 “ 5214”它在計算器上顯示為 “5.214”;接著按 “ E”并輸入 “ 2”,使數字成為 “ 5.214 x 10^2”。這過程中,一次還只能輸入一個數字。
其實這樣寫出來一看,大家可能會覺得這東西非常破,讓人感覺就是在經濟上負擔不起的情況下,才用的玩意兒。類似 HP-35,雖然 HP-35 的設計者也以其準確性和功能性為榮(HP-35 也用了后置表示法,但以一種更巧妙的方式)。
但我們需要知道的是,Sinclair 并不是要和其他計算器競爭,而是要與計算尺競爭。我以前在其他文章中讀過這一點,但我一直無法理解這句話的含義,直到我親手拿到這個工具包。之前一次偶然機會,我還入手了一把老式的 Pickett 計算尺,并了解了如何用它進行基本操作——多虧了國際計算尺博物館官網上的課程。
所以當我用 Sinclair Scientific 時,我對其中概念與使用計算尺時概念的高度相似性感到震驚。這里,精度通常也為 2 到 3 位數,滑動 “游標”意味著在刻度間僅傳遞一個數字,并且通常不理會 0。僅使用最高有效的數字,并由使用者大致估算,得出在末尾哪兒插入小數點,或加多少 0。這意味著,使用者會以完全相同的方式,來計算 52 x 2 和 5200 x 20。
這也是為什么,我覺得這款復制套件如此重要——這個機器提供了一種簡單的方法,使人無需雙手來實際操作設備就能明白計算尺的原理。值得注意的是,正如 Henry Petrosk 指出的,好的設計實際上并非作為抽象事物獨立存在的,而得存在于特定上下文中。
那么,再回到開頭的問題,Sinclair Scientific 酷嗎?
對我來說,答案是肯定的。
總結
以上是生活随笔為你收集整理的硬核还原:显微镜手撸晶体管,逆向工程还原经典计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈利波特与混血王子小说百度云(哈利波特与
- 下一篇: 微软 Win 10 更新又双叒叕出 Bu