亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机

组件与物料清单

组件数量备注
Arduino Mega 25601二选一,不可同时使用
Arduino Due1二选一,不可同时使用
LED(通用)36前面板指示灯
通用 NPN 三极管36驱动 LED 所需
电阻 10kΩ36LED 驱动电路
电阻 150Ω36LED 限流
迷你拨动开关 SPDT On-On1716 个地址开关 + 电源开关
瞬动开关 SPDT (On)-Off-(On)8功能开关(RUN/STOP/EXAMINE 等)
金属板(前面板底板)1用于固定开关和 LED
SparkFun 蓝牙调制解调器 BlueSMiRF Silver1(可选)连接 Arduino TX/RX,使蓝牙设备可作为串口终端
microSD 卡及适配器1(可选)仅磁盘驱动模拟需要

应用与在线服务

项目简介

如果你想制作这个项目但不想从零开始,可以看看 Chris Davis 的 Altair-Duino 套件,它包含所有元件、PCB、外壳和预编程的 Arduino Due。

以下是其他制作者的作品:

如果你也想分享你的作品,请告诉我,我会发布在这里。

我一直想拥有一台 Altair 8800 来把玩。但真正的古董 Altair 稀有且昂贵,轻松要价 1500-2500 美元。还有 altairclone.com 等替代方案,但 600 美元对我来说仍太贵。幸运的是,Altair Clone 的创建者 Mike Douglas 公开了他收集的所有文档和软件,为社区提供了丰富的 Altair 内部工作原理及其热门外设资料。

某天我看着 Arduino Mega 2560 的规格,想知道它是否有足够的 I/O 引脚直接连接 Altair 前面板的 LED 和开关,并编写自己的模拟器软件。结果发现 Arduino Mega 的 I/O 引脚数量 恰好 匹配。于是我决定自制 Altair 克隆。

基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机

使用 Arduino Mega 驱动模拟器运行良好且设置简单,但模拟速度仅为原版 Altair 的约 25%,且只能提供 6KB 模拟内存(当年已算不少)。永久存储容量也受限,Mega 的 EEPROM 仅 4KB。

Arduino Due 拥有充足内存,支持完整 64KB 模拟内存,运行速度远超 Mega。此外,Due 可在运行时将数据保存到闪存,使得模拟器未使用的 512KB 闪存可作为半永久存储,用于在模拟器中加载/保存程序和数据。

使用 Due 后,我得到了一个运行速度接近原版、提供 64KB 模拟内存、包含大量 Altair 软件,并能提供 32KB 半永久存储的 Altair 8800 模拟器。

我的目标是让模拟器在操作体验上尽可能接近“真实”的 Altair 8800,包括前面板指示灯反映真实行为。一个标准是能运行前面板“Kill-the-Bit”游戏——确实可以:

模拟器甚至能运行 Altair 8800 音乐演示。注意:这依赖 AM 收音机接收 Altair 电路产生的电磁干扰!

当年 Processor Technology 发布了一块小型扩展板(仅几个电容和电阻)配合软件,将 Altair 变成了当时不错的音乐系统。同样的扩展也可加到模拟器上(见文档),播放当年的曲目。示例:

另一个历史重要扩展是 Cromemco Dazzler 显卡。通过软件或硬件扩展,模拟器也能模拟该板:

基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机
基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机

另一个软/硬件扩展允许模拟器模拟 Processor Technology VDM-1 视频终端卡:

基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机

当然我没有原版 Altair,所有信息来自文档和视频(见致谢)。可能存在细微差别,但整体复现得很好。一个已知的有意差别是 HLDA 状态灯:原版指示 CPU 确认被外部设备暂停;模拟器中该功能未用,改为指示文件(串口/磁带捕获/重放)当前打开。

主要特性

注意:使用 Due 时,模拟器内捕获或保存的所有数据在上传新草图时会被擦除,因为数据存储在闪存中,烧录新草图会擦除闪存(Due 无 EEPROM)。若连接 SD 卡,数据存储在 SD 卡上,烧录新草图不会丢失数据。

文档

模拟器工作方式与 Altair 8800 完全相同,原版 Altair 文档(Google 可搜到)提供了操作前面板开关所需的所有信息。

但模拟器包含许多额外功能和内置软件,可通过前面板 AUX1/AUX2 开关访问(原版 Altair 包含但未使用)。这些功能在单独文档中解释,我开发模拟器软件时编写了该文档,内容很多,请参考源码仓库中的 Documentation.pdf。

构建说明

目标是尽可能少用辅助电路。Arduino Mega 和 Due 均有足够 I/O 引脚直接连接所有前面板元件。唯一额外电路是驱动 36 个 LED 所需的三极管和电阻(若 LED 直接连接 Arduino 输出引脚,同时点亮过多会超出电流限制)。

绘制完整原理图既繁琐又重复(36 个相同 LED 驱动电路,32 个开关接线),帮助不大。因此原理图文档改为详细表格,列出各元件连接到哪个 Arduino 引脚,并给出子电路原理图(如 LED 驱动)。还添加了 Fritzing 文件展示条形板上 LED 驱动元件布局。

制作前面板:从 vintage-computer.com 找到高质量 Altair 前面板扫描图,在复印店打印到卡纸上。底板用 22 号规格金属板,用普通电钻钻 LED 和开关孔。LED 驱动电路焊在条形板上,直接焊接到 LED,LED 由金属板固定。

前面板由简单木箱支撑竖立。箱子深度不如原版 Altair(仅需容纳前面板和 Arduino)。

基于 Arduino 的 Altair 8800 模拟器套件 —— 构建并编程复古计算机

前面板电源开关接线:在箱子上加一个电源插座(同 Arduino 自带),接到前面板开关,再接电源插头插入 Arduino。

使用 Arduino Due 时,可通过将 SD 卡连接到 Due 的 SPI 端口启用多达 16 个 88-DCDD 磁盘驱动器模拟。原理图文档最后一页详细显示所需接线。

上传草图到 Arduino Due 前,请将 Arduino 编译器优化设置改为“performance”。默认是“size”(不确定为什么,Due 有 512KB 闪存)。方法:用文本编辑器打开文件

c:\Users\[user]\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\platform.txt

将所有“-Os”改为“-O3”。可跳过此步,但模拟器会明显变慢。

模拟器软件也可在无前面板控制的裸机 Arduino(Mega 或 Due)上运行。这允许运行许多内置程序(主要使用串口终端而非前面板元件)。方法:编辑 config.h 源文件,设置 #define STANDALONE 1(默认 0)。参考文档“调试能力”部分了解如何操作虚拟前面板元件。但这不是模拟器预期用法;若不想制作前面板硬件,建议使用基于 PC 的全软件模拟器。config.h 包含多个开关控制功能启用/禁用,默认设置效果良好,若想调整可从此入手。

致谢

因无原版 Altair,我依赖网络资料。Mike Douglas (deramp5113) 制作的 Altair 8800 教学视频(altairclone.com)帮助极大,且非常有趣。此外,Mike 收集了大量 Altair 相关硬件和软件手册并公开在其网站。

(注:Mike 的视频对构建模拟器后的玩法很有启发)

Martin Eberhard 的 ADEXER 工具对硬盘支持的底层调试至关重要。他还编写了模拟器使用的两个引导加载程序:组合磁盘引导加载程序(CDBL)用于引导磁盘和迷你磁盘,以及硬盘引导加载程序(HDBL),比原版更短更稳定。

CPU 模拟代码我自己编写,但在半进位计算和 DAA 指令高效实现上参考了 i8080 核心模型项目。

模拟器包含一些原版 Altair 8800 软件。再次感谢 Mike Douglas 花费无数小时搜集、整理并使这些软件运行,最后公开在 altairclone.com:

磁盘和硬盘镜像(源码压缩包中 disks 子目录)也来自 altairclone.com 和 deramp.com(Mike Douglas 个人网站)。包含 CP/M、各种磁盘 BASIC、Altair DOS(含 Fortran)等。Mike 在寻找软件和制作可用磁盘镜像上做了惊人工作。我只选用了一部分,建议去 altairclone.com 或 deramp.com 看看更多。

讨论论坛

Altairduino.com 的 Chris Davis 建立了 Google Group 讨论 Altair-Duino 相关问题:

https://groups.google.com/forum/#!forum/altair-duino

欢迎访问并参与讨论!

代码

Arduino Altair 8800 模拟器代码

https://github.com/dhansel/Altair8800

原理图

不提供完整原理图(太重复),而是描述各前面板元件连接哪些 Arduino 引脚,并给出子电路原理图(如 LED 驱动电路)。

尝试展示连接 LED 的条形板布局。虽然拥挤,但足以看出连接方式。关键是每个 LED 的元件在条形板上不超过 5 个孔位,这样 LED 间距足够小,前面板可保持原版尺寸。

ledstrip_4OVCpRyKQS.fzz

制造工艺

  1. Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
  2. DIY 蓝牙控制 Arduino 间谍小车
  3. FlickMote:基于手势的智能家居红外遥控器
  4. DIY Arduino TV-B-Gone:万能关机遥控器
  5. 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
  6. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  7. Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
  8. Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
  9. 从零构建智能 Arduino 四足机器人:完整指南
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. 利用 Arduino Nano R3 自制全功能 CNC 雕刻机
  12. Earth Analyzer:面向精准农业的多模态物联网环境监测巡检车