整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
「都說天才和瘋子之間只有一線之隔,這話一點不假。因為你馬上要看到的這個項目,真的很難判斷它屬于哪一邊。」
這是一位名為Majsterkowanie i nie tylko(簡稱MINT,意為“DIY and more”) YouTuber 的自述,也是這個項目的開發(fā)者。
他于近日在 YouTube 上展示了一個令人瞠目結(jié)舌的項目——EPROMINT:靠著一把烙鐵、一堆老舊的存儲芯片和 8 位邏輯器件,從零打造出了一整顆處理器——是的,不是開發(fā)板,也不是微控制器,而是一顆完整的、具有指令執(zhí)行和內(nèi)存尋址能力的 CPU。
不僅如此,這顆自制 CPU 還成功接上了 VFD 屏幕,跑起了他親手寫的代碼,甚至可以播放低分辨率版的《黑客帝國》....
此外,MINT 還將整個項目的代碼在 GitHub 上開源出來:https://github.com/majsterkowanieinietylko/EPROMINT,其表示,“它花了我整整三個月的時間,無數(shù)個日夜,我手持烙鐵,敲擊鍵盤幾百個小時,只為了給自己,也給你們,開辟一條新路——一條可以走得很遠的路。”
瘋狂想法的誕生,源于一堆舍不得丟掉的舊芯片
開發(fā)這個芯片,其背后沒有一整個龐大團隊支撐,也沒有數(shù)百萬美元預(yù)算的支持,靠的只是 MINT 一個人。
根據(jù)MINT 在視頻中透露,之所以萌生自制處理器的想法,一切都始于一堆舊內(nèi)存芯片。
“我收集了很多,然后開始實驗。很快我意識到,這些看似過時的零件,其實可以拼出很酷的東西。加上一些外圍電路后,我做出了一個基于單個內(nèi)存芯片的開發(fā)板,可以執(zhí)行任意相對簡單的操作。比如控制電機轉(zhuǎn)得快一點、慢一點——這用的是所謂的 PWM,也就是通過快速切換電源開關(guān),來調(diào)節(jié)電機的實際輸出效果;又比如在屏幕上顯示一條消息”,MINT 說道。
在某個實驗項目中,MINT 還基于單一內(nèi)存芯片開發(fā)了一個可編程模塊,并為其設(shè)計了簡單的編程環(huán)境。基于此,MINT 能夠更好更容易地更改程序、生成固件、寫入芯片,一套流程幾乎像在做現(xiàn)代開發(fā)。
正是這次體驗,讓他萌生了一個大膽的設(shè)想:如果將多個此類模塊組合,是否就能構(gòu)建出一整套運算邏輯?甚至造出一個完整的處理器?
作為復(fù)古電子學的愛好者,MINT決定打造一款致敬“計算機起源時代”的處理器——正是那一代的處理器,推動了計算機技術(shù)的普及。他曾親手用經(jīng)典的 Z80 處理器組裝過一臺電腦,因此對處理器架構(gòu)有著較為深入的理解。
在此次項目中,他選擇了一條“極簡主義”但極具挑戰(zhàn)的路線:完全摒棄現(xiàn)代集成電路,僅使用舊款內(nèi)存芯片與 8 位計算黃金時代流行的邏輯元件,嘗試以最原始的方式構(gòu)建出一顆 CPU。
歷時三個月,從 ALU 到完整的模塊體系
在設(shè)計時,MINT從最基礎(chǔ)的組件——算術(shù)邏輯單元(ALU)著手。
起初,他研發(fā)的第一版原型 ALU 僅支持簡單的加法運算,功能還不太穩(wěn)定,也有些簡陋。MINT 表示,“我不是在造玩具,而是要做一個完整的處理器。于是我重新設(shè)計了一個更強大的ALU”,于是,其舍棄了這一版重新進行了開發(fā)。
隨后,MINT重新設(shè)計了插槽式結(jié)構(gòu)的 ALU。
接下來的工作是重復(fù)的體力活:設(shè)計電路布局、插座焊接、走線、電容、電源、電線,一次次調(diào)試。「每一個模塊都花了我好幾天時間,但這很值得——我可以隨時修改,避免后期返工。」
新的版本不僅更強大,也為后續(xù)功能擴展打下了基礎(chǔ)。
在 ALU 的基礎(chǔ)上,MINT 又陸續(xù)實現(xiàn)了三個核心模塊:
內(nèi)存控制模塊:用于數(shù)據(jù)存儲和地址尋址。通過手動將 ALU 輸出寫入特定地址,并設(shè)計地址控制邏輯,實現(xiàn)了數(shù)據(jù)的讀寫流程。
IO 接口與程序存儲模塊:為處理器提供與外部交互的能力,程序指令也儲存在這一區(qū)域。處理器可執(zhí)行指令如“讀取地址 A 和 B 的值并相加,存入 C”。
控制模塊(指令調(diào)度中心):負責從程序存儲器讀取指令,并協(xié)調(diào) ALU、內(nèi)存和 IO 的運行。
組裝完成后,這個處理器的總重超過 500 克。
不過,光有硬件還不夠,這里還得有定義它的指令集,也就是處理器能執(zhí)行哪些操作。
MINT 指出,這些指令看起來簡單,比如“把內(nèi)存地址 X 的值讀到寄存器 A”,但實現(xiàn)起來卻涉及內(nèi)存控制、地址解碼、寄存器寫入等多個步驟。
于是,他給每條指令分配了一個操作碼(opcode),控制模塊就根據(jù)這個碼來決定電路該怎么工作。整個流程復(fù)雜但清晰。
此外,MINT 表示,「ALU 也不只支持加減,甚至可以做乘法、除法、對數(shù)、三角函數(shù)等。這是我刻意擴展的功能——畢竟 Z80 沒有這些。我一邊測試一邊優(yōu)化,有時會刪掉原本的設(shè)計,加入更好的思路。」
最終經(jīng)過設(shè)計,MINT 為處理器手寫了超過 1800 行匯編代碼,總計約為 120KB,覆蓋從數(shù)學函數(shù)到邏輯位運算等豐富功能。
當然,這個過程中也有不少 bug。有些 bug 的解決方式甚至有點像“電子版現(xiàn)代藝術(shù)”。為了調(diào)試這些程序,MINT 還打印了整套紙質(zhì)文檔。紙質(zhì)的優(yōu)點是可隨時翻閱、便于標注、無需依賴設(shè)備,非常適合在復(fù)雜系統(tǒng)調(diào)試中使用。
中斷系統(tǒng)、函數(shù)調(diào)用與堆棧支持:一步步接近“真實CPU”
到了這一步,CPU 已經(jīng)基本成型。接下來,MINT 著手寫了以第一個正式程序用以測試——讓處理器不斷閃爍一個LED,并在接收到中斷時點亮另一個LED。
這就引出了另一個關(guān)鍵話題——中斷機制。
處理器通常一條一條地順序執(zhí)行指令,但有時候我們希望它能對某些外部事件(比如按鈕按下)立刻響應(yīng)。這就需要中斷。
在架構(gòu)設(shè)計方面,EPROMINT 實現(xiàn)了完整的中斷處理邏輯。當外部事件觸發(fā)中斷時,處理器會將當前的程序計數(shù)器(PC)壓入堆棧,跳轉(zhuǎn)至中斷服務(wù)程序;執(zhí)行完畢后,再從堆棧中恢復(fù) PC,繼續(xù)原本的程序流程。這一機制使得它能夠即時響應(yīng)按鈕等外部輸入,具備了現(xiàn)代處理器的基本交互能力。
除了基礎(chǔ)指令,MINT 還為處理器編寫了一系列復(fù)雜程序。例如,將數(shù)字結(jié)果顯示在 LCD 屏幕上,或?qū)?shù)字轉(zhuǎn)換為 ASCII 字符串,再輸出到高分辨率的 VFD 顯示屏。這一過程涉及手動實現(xiàn)除法運算、堆棧操作以及字符編碼轉(zhuǎn)換,全部以匯編語言完成。
在一次測試中,他甚至挑戰(zhàn)處理 256 位長度的大整數(shù)。實驗中,他讓處理器嘗試對一個由 Chat 工具生成的 100 位十進制數(shù)執(zhí)行除法計算,結(jié)果系統(tǒng)崩潰。為了查明問題,他利用掉電不丟失數(shù)據(jù)的 RAM 保存下內(nèi)存內(nèi)容,逐條追蹤、排查邏輯,最終找出故障根源。
更令人驚訝的是,EPROMINT 這個項目不僅能跑代碼,還能播放視頻。
MINT 手動實現(xiàn)了一個用于精確控制幀率的除法循環(huán),使其能穩(wěn)定輸出 24 幀/秒的視頻信號。在接入高分辨率 VFD 顯示屏后,他還播放了一段《黑客帝國》的片段——雖然是極簡像素風,但效果完整,令人震撼。
開源與后續(xù)計劃:為它寫一個 C 編譯器
EPROMINT 目前已完全開源。所有電路圖、固件、設(shè)計文檔和指令集說明均可在 GitHub(https://github.com/majsterkowanieinietylko/EPROMINT)和 Google Drive(https://drive.google.com/drive/folders/11-RFmGcRUevfkHXVt-ET09YOgsZoN3Ui)上獲取。
MINT 表示,下一階段計劃為其開發(fā)一個 C 語言編譯器,讓更多人能夠用高級語言為這顆自制處理器編寫程序。
他希望通過這一項目,讓人們重新理解處理器的本質(zhì)。我們每天使用的手機、電腦、智能設(shè)備,其實都是在運行類似的底層邏輯。只不過,在當代技術(shù)高度集成的背景下,這些復(fù)雜性被完美隱藏了。
“這個項目讓我重新敬畏這些基本構(gòu)件的力量,也希望能讓更多人看到:不用現(xiàn)代 IC,不用現(xiàn)成平臺,只要理解和努力,計算機依然可以被從零‘拼’出來。”
EPROMINT 發(fā)布后,立即引發(fā)社區(qū)熱議。不少網(wǎng)友評論道:
“太棒了!終于不用 Arduino 或樹莓派,這一切完全建立在老式芯片之上。”
“這才是 DIY 精神的極致。”
也有人打趣說:“我們需要這個人去負責 Intel 的 18A 工藝。”
不可否認,EPROMINT 并不以實用性取勝,它的運行速度、集成度甚至功耗表現(xiàn)都無法與現(xiàn)代芯片相提并論。但正是這樣一個由舊零件拼接而成、用匯編驅(qū)動計算的“復(fù)古處理器”,卻以一種極具個人風格的方式,重新演示了“計算”這一概念的本質(zhì)。
而這場實驗的發(fā)起者,只是一個手持電烙鐵、熱愛動手的普通創(chuàng)作者。不得不說,高手,往往就在民間。
參考:
https://www.youtube.com/watch?v=xBB1nAUvuqU
https://www.tomshardware.com/pc-components/cpus/passionate-enthusiast-builds-a-fully-functional-processor-out-of-old-memory-chips-hand-solders-every-wire-writes-1800-lines-of-assembler-code-and-makes-it-play-the-matrix-on-a-vfd-display-comments-3883038
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.