从无到有(make something from scratch)一直是工程师的浪漫,例如自行调配出操作系统、自己写系统核心等(如 Linux)。然而在家从无到有打造出“一颗”CPU 就没听过了吧?最近有一位 YouTuber 就在免焊万用电路板(俗称面包板)上,以跳线实做出自己设计的 CPU。
▲ Paulo Constantino 自制的 CPU。(Source:影片截图)
CPU(中央处理器),这么一小颗神奇的高科技黑方块,是现代电脑的核心元件,大多数电脑装置都是 64 位元 CPU,技术层次之深、设计之复杂,要从无到有重新设计、打造出全新的 CPU 谈何容易?1970 年代个人电脑刚萌芽时期的 Intel 8008、Zilog Z80 等 8 位元处理器相对单纯原始,应该比较容易做得到吧?尽管如此,从无到有开发出一个新的 8 位元 CPU 也不是容易事。
不是 AMD、Intel、ARM 等大公司,自己打造 CPU 有可能吗?YouTuber 保罗‧君士坦丁(Paulo Constantino )就向大家证明了这并非办不到的事。他在自己的 Github 进行名为 Dreamcatcher 的完全自行开发电脑计划──把电脑里每个必要元件都重新设计、手工做出来。
对未受过训练的人来说,君士坦丁的 CPU 作品看起来就像板子上一团又一团的电线。他的作品基于 74HC 系列的 CMOS 积体电路,插在面包板上用电线跳接起来,他花了两天时间画电路图、一个星期时间实际制作。目前还很简陋,编写程式需要用 DIP 开关进行,根据影片,目前只运作过简单程式:从 0 记数到 255(用一排 8 个 LED 灯以二进制表示)、演奏音阶、演奏走音的玛莉兄弟主题曲。
简陋归简陋,不过影片拍摄的时候是 8 位元,现在已经进化到 16 位元,一共拥有 256 道指令的指令集(instructions),现在还做好了简单的 BIOS(基本输入输出系统),当然又是另外一团电线乱乱的面包板。谢天谢地,终于可以输出画面到屏幕上了,君士坦丁的下一个目标就是再做好连接键盘的功能,这样写程式就方便多了,最终目标又能运作 MS-DOS 或 Minix 系统。
▲ Paulo Constantino“写”程式的方法。(Source:影片截图)
这样用面包版绕线做 CPU 原型简直就像愚公移山,不过今日我们认为 PCB 印刷电路板印制、硬件描述语言(Verilog VHDL)、FPGA(可程式化的积体电路)技术是理所当然,而 1980 年以前,还没有这些技术,CPU 原型就是如此打造。一位矢志从无到有重造轮子的自造者,自然要用古法来制作 CPU 原型啰。
▲ Z80 CPU 的原型。(Source:By Wikinaut (Self-photographed) [GFDL or CC BY-SA 3.0], via Wikimedia Commons)
更多手工自制 CPU
▲ EASY-4。(Source:影片截图)
看过君士坦丁的作品,我们可能以为全世界就只他一个疯子,其实不然,这种手作 CPU 的非商业专案以前就有了,例如说一位日本老前辈在 1975 年时自制 16 位元 CPU 作品“EASY-4”就是其一,而且现在还在继续改良。
▲ Magic-1 CPU。(Source:影片截图)
看腻了一团又一团电线后,让我们来瞧瞧 Homebrewcpu 自制的 16 位元迷你电脑 Magic-1,这个 CPU 体面多了,有个漂亮的外壳,设计也是采用 74 系列的积体电路,比起起步没多久的 Dreamcatcher,Magic-1 更神了,它靠作者一人独自开发了十年,最后完成完整电脑,系统时脉虽然只有 4.09 Mhz,但执行的系统可是多人多工的 Minix 2,不只会从 0 数到 255,还是一台连上网络的 server,其上运作了网页服务器提供这个网页,还可用以下这个命令登入:
telnet magic-1.org 51515
账号是“guest”、密码为“magic”,假如你会 Unix 指令,可以好好探索一番,里面也有经典程式如 Eliza、Conway’s Life 或 Hunt the Wumpus。如果你不嫌弃这台机器的龟速,上面也有 C 语言的编译器可供开发程式。
更进一步,用积体电路在面包版上绕绕线做 CPU 不算什么,更有趣的,是完全用晶体管做自己的 CPU。巨无霸处理器──詹姆士‧纽曼(James Newman)的 Megaprocessor 专案就是这种计划,该计划目标打造巨大的“微”处理机,足足有一个房间那么大。
它是一“颗”16 位元的 CPU,内含 4 万个晶体管,光是一个 8 位元加法器的元件就有一个大人脚板那么大,运作时脉达 20Khz。这个大家伙看起来就好像 1950 年代的大型电脑还魂,也像一些老派科幻电影里才会出现的电脑。
为何要重新发明轮子?
类似的计划,在 YouTube 搜寻 homebrew CPU 可以找到各式各样作品。然而说回来,这样依古法重造轮子不是很浪费时间跟聪明才智吗?这些人疯了吗?其实不然,比如说现代大大小小电机设备的基础──马达(电动机)我们已司空见惯了,但还记得国小高年级时,自然科学的课程要求每个小朋友用漆包线、铁钉、磁铁手工打造电动机吗?其实大家小时候做的事情跟 19 世纪马达的发明人做的事情没两样。
现代美术的核心已是以电脑绘图为主,然而美术基础教育仍是从铅笔、炭笔素描与水彩静物和户外写生开始,为什么学科要这样安排,是因为透过手作创造早期经典,能最佳掌握一门学问的核心原理,例如说《大人的科学》杂志也是在做类似的事。
今日的 CPU 已发展到内含数十亿晶体管,一个高阶语言程式原码用编译器生成可执行机器码后,CPU 实际执行时的运作细节每每不完全为我们掌握,就像黑盒子,甚至 CPU 有可怕的设计漏洞我们也浑然不知使用许多年。
对资讯科学的教育而言,搞懂 CPU 的运作机制有其必要,以前述 Megaprocessor 专案来说,其实就是英国电算科技历史中心(Centre for Computing History)的展品,由于全面使用晶体管实做,所以可把微处理机放大到每个单元──运算/逻辑单元(ALU)、通用暂存器、特殊暂存器、状态机、IO 输出入等,能分门别类呈现在眼前,辅以满满的 LED 灯显示,得以即时观测 CPU 如何执行程式,而不用跟哆啦 A 梦借缩小灯钻到市售 CPU 里。
Megaprocessor 是非常有教育意义的一台机器,那 Magic-1、Dreamcatcher 等较小型土法炼钢做出的 CPU 呢?探究他们的开发者,不全然只是业余嗜好,许多是软件工程师、资讯科学系所的大学生,为了设计好的编译器或纯粹想搞懂 CPU 运作原理而实际打造。
当我们在说“为什么我们做不出自己的引擎?”“为什么我们做不出自己的 CPU?”抱怨基础科技力低落时,是不是应该要自省:我们是不是问得多、做得少,做得不够深入呢?以后看过教科书的理论,不妨亲手做看看,先不管啥崇高的理念,Just for fun!
- Man Builds Custom 8-Bit CPU From Scratch
(首图来源:shutterstock)