BMOW 1(Big Mess of Wires一号)作为一坨(神一样的它已经不能以“枚”或者“颗”为单位了)原创的CPU,与市场上所见的CPU不同,由若干最基本的逻辑芯片构成,并且作者在其基础之上构建了一整套可以支持键盘、声卡、显卡及外设的计算机。
作者最初的目标:
- 在零散的、原始的7400系列基础逻辑芯片基础上构建,不用6502、Z-80等“高档”芯片;
- 做到硬件复杂程度最简——作者本身并非电气工程师;
- 可以运行“真正的”程序,不是那种4位CPU或者玩具上的单片机;
- 提供与PC机通信的接口;
- 速度足以支持好玩的互动类程序的运行。
扩展目标
- 引导进入简单的integer BASIC(Steve Wozniak写出的,运行于Apple I及初版Apple II之上的BASIC 语言解释程序),能够互动编辑及运行其自身程序;
- 通过一个抢先式多任务操作系统支持多个程序同时执行;
- 提供键盘输入,VGA视频和音频输出。
设计开始于2007年11月,最初是CPU内部的高阶设计草图。简化的Verilog硬件仿真为关键细节的设计提供了佐证。真正开工于2008年2月,采用大号插线板实现大约50颗芯片的互连。4月,BMOW 1的半成品第一次启动了,使用一个基于ROM的简单程序计算fibonacci(12) = 144(12阶斐波那契
数列)。接下来,一个个地实现了最初系统目标及扩展目标,包括VGA视频、三声音效、BASIC,以及一套引导加载程序用于与PC机连接并通信。最终BMOW 1拥有了运行用汇编或C编写的复杂程序的能力。2009年2月,主要建设阶段的终结以将所有硬件安置于所订制的机箱内为标志。截至2009年3月,BMOW 1已经实现全部功能,但整个项目可能永远不会“完成”。
架构
BMOW 1借鉴了其他“土法”全手工打造的CPU以及《计算结构》(斯蒂芬·沃德及罗伯特·霍尔斯特德)一书中所展示的MAYBE的设计。数据总线宽度为8位,地址总线宽度为24位。4个8位寄存器用于一般数据,三个24位的寄存器用于存储程序计数器、堆栈指针及一个零/工作地址指针。寄存器和算术逻辑单元由一条数据总线相互连接,而RAM、ROM以及存储器映射的硬件设备使用第二条数据总线。算术逻辑单元还有有专门的左移及右移数据输入总线。
机器语言指令以一系列微指令的形式被实现,存储在三个并行ROM中以创建一个24位的微指令字。每个时钟周期可以执行一个微指令,该微指令字被直接用作使能及输入选择来控制机器中的所有芯片。我们可能需要高达16条微指令来执行一条机器语言指令。
注:一些附加设备并未在此处示出,包括VGA显示电路及实时时钟。
24位地址支持多达16MB的内存,但BMOW 1中仅安装了略多于1MB的RAM/ROM混合存储器。地址的最高有效字节被称为存储体字节,通常对于程序来说不可见。标准指令集提供了一套16位的接口,大多数指令隐含引用当前存储体。跨存储体引用是可能的,但会非常麻烦(想想x86的段寄存器吧)。
512K的ROM中包含一套引导/菜单程序。一个基于FTDI芯片的USB转TTL接口提供了一种与所连接PC进行数据交互的简易方法。使用标准的PC键盘的PS / 2接口用于键盘输入,一块24×2字符LCD用于调试输出显示。自定义的视频电路驱动一台标准VGA显示器,实现512×480的最大分辨率。一个三声可编程声音发生器提供音乐和声音。
BMOW 1是建于一块预置了数千枚绕线桩的AUGAT牌插线板之上。芯片被压入电路板而无需焊接,而且可以很容易地插拔,类似于原型面包板。而与面包板不同的是,它的引脚可以根据电路设计的需要在电路板的底部进行独立连接。电线剥皮之后使用绕线工具绕在绕线桩上。在连接出错的情况下,电线可以很容易地被移除。BMOW 1使用了约2500个这种绕线桩。
规格说明书
- 当前时钟速度为2MHz,理论上可达约3MHz(未经测试);
- 512 KB的RAM,512KB的ROM;
- 功耗10瓦,5V供电,电流2.0A;
- VGA视频输出分辨率为512×480(黑白双色),或128×240(256色);
- 由一个三声音的可编程声音发生器提供音频和音乐;
- 支持一个标准PS / 2接口的PC键盘输入;
- 以24×2字符LCD作为显示器进行调试;
- 组件由约1250根导线进行连接,所以约有2500个绕线桩。
神一样的接线
机箱
整机运行