组装8位计算机:如何将芯片数减少到6


将旧技巧与NTSC颜色编码和现代熨斗相结合,可以组装出令人惊讶的高效机器

8位系统具有永久性的吸引力:您可以构建功能强大的自主系统,以支持足够的用户交互,但要足够简单,自己组装和编程。业余爱好者创造的大多数现代8位计算机都与经典处理器相关联,这些经典处理器生活在1980年代家用计算机黄金时代,当时数百万台电视被用作显示器。最初的想法是基于 Motorola 6809处理器制造我的汽车来自同一时代。我尝试使用尽可能少的芯片,但是尽管我付出了很多努力,但我仍然需要13个额外的芯片来处理RAM和串行数据传输。然后我想:如果我使用更现代的8位处理器怎么办?我可以减少多少芯片数量?


结果,我在上面组装了一辆叫做紫水晶的汽车。与任何家用计算机一样,它具有内置键盘并可以输出音频和视频。它还具有高级的内置编程语言,因此用户可以在其上编写自己的程序。我设法将微电路的数量减少到六个:ATMEGA1284P CPU,USB接口和四个简单的集成电路。

2008 ATMEGA1284P(或1284P)具有128 KB的闪存和16 KB的RAM。它可以以高达20兆赫的频率运行。它具有板载集成串行控制器和32个数字输入/输出。



由于内置存储器和串行接口,对许多辅助芯片的需求消失了。我可以直接生成音频,中断并以不同的频率将信号施加到输入/输出。因此,我学会了发出一种具有方波特有清晰度的音调。但是如何生成模拟视频信号呢?这真的需要特殊的设备吗?

标准把戏


在2018年底,我看到了史蒂夫·沃兹尼亚克(Steve Wozniak)在1970年代用来在Apple II中实现彩色图形支持的技巧。在美国,该技巧在1950年代用于NTSC系统中的彩色广播。

最初,美国电视只是黑白电视,并使用相当简单的NTSC标准(由国家电视系统委员会开发)。为了在屏幕上形成图像,电子束逐行跟踪其表面上的点。接收到的视频信号的幅度决定了沿行的任何给定位置的光束亮度。然后在1953年,NTSC 进行了升级,以支持彩色电视,同时保持与现有黑白电视的兼容性。

工程师决定以高频正弦信号的形式显示颜色信息。为此,将子载波分为两个相移为90°的分量,每个分量都经过调制。结果是在幅度和相位上都调制了信号。信号的幅度决定了颜色应达到的饱和度。然后,将该高频色度信号添加到低频亮度信号中,以创建所谓的复合视频信号。这种方法仍用于许多电视和较便宜的显示器。



« »: , [ ], - , [ ]. . [ ] , : . [ ], .


黑白电视将彩色信号感知为噪声,而将其忽略。但是彩色电视可以使用滤波器环路将彩色信号与亮度信号分开。

在1970年代,工程师意识到这种滤波方案对于家用计算机可能非常有用,因为它允许数字矩形信号模拟大多数复合模拟信号。由计算机发送到电视的零流将被视为恒定的低频模拟电压,即黑色。单位流量将被视为恒定的高频电压,即白色。但是如果具有足够高的比特率,将出现更复杂的二进制结构,高通滤波方案会将其识别为彩色信号。此技巧使Apple II最多可以显示16种颜色。

起初,我认为我需要非常快速地切换输入/输出引脚,以便直接生成视频信号。但是,我很快意识到,我的1284P以14.318 MHz运行时,我不能足够快地切换它以显示四种以上的颜色。事实是它的内置串行接口需要两个时钟周期来发送一位,这将我的时钟频率限制为7.159 MHz。 Apple II使用快速直接内存访问将其外部芯片连接到视频输出,而CPU忙于内部处理。但是,由于计算机的RAM已集成到芯片中,因此无法使用这种方法。

因此,我看着抽屉,抽出四个7400系列微电路-两个多路复用器和两个并行-串行移位寄存器。我能够并行安装八个1284P引脚,并同时将数据从它们发送到多路复用器和移位寄存器,后者将它们转换为高速串行位流。因此,我学会了如何快速生成位以在屏幕上显示大约215种不同的颜色。但是,我必须以自己的计算能力为此付出代价:视频处理不断消耗掉处理器资源的75%。



小型电脑


紫水晶是单板计算机。它仅由六个集成电路(一个处理器,一个USB接口和四个7400系列微电路)组装而成,用于创建215色图像。键盘开关直接焊接到板上,它还支持音频和四个外设(例如游戏控制器和存储设备)的串行I / O连接。借助内置的虚拟机Forth,您可以编写程序并运行它们。

我需要为用户提供轻量级的编程环境,这使我选择了Forth而不是传统的Basic。 Forth是嵌入式系统的一种古老编程语言,它支持交互性并能够有效地编译代码。有了它,您可以使用最少的资源做很多事情。由于1284P不允许直接从其RAM执行已编译的机器代码,因此将用户代码编译为中间字节代码。然后将此字节码作为输入提供给从1284P闪存运行的虚拟机。虚拟机代码是用汇编器编写的,并进行了手动优化以使其尽可能快。

作为在一家生产3D激光打印机的公司工作的工程师,我可以使用先进的激光切割机。因此,我很容易设计和制造了一个木箱(我在Atari 2600上监视了木质表面)。机械键盘开关直接焊接到单个Amethyst电路板上。该键盘具有一个奇怪的功能-没有通常的大间隙。相反,仅是一个按钮,适度位于Enter键上方。

完整的原理图,电路板的PCB文件和源代码可在我的GitHub存储库中找到因此,您可以创建自己的紫水晶,甚至可以改善我的项目。如果您能弄清楚如何节省更多芯片怎么办?


All Articles