本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 Arduino Mega 2560 的个人电脑 Arduino Altair 8800 模拟器

发布时间:2021-11-09
分享到:

基于 Arduino Mega 2560 的个人电脑 Arduino Altair 8800 模拟器

发布时间:2021-11-09
分享到:

本方案是一个基于 Arduino Mega 2560 的个人电脑 Arduino Altair 8800 模拟器。相信小的时候都有过想拥有一台个人电脑的想法,但没有现金购买 Altair?现在你可以通过制作一个属于你自己的来实现这个儿时梦想!

很长一段时间以来,我一直认为拥有一台 Altair 8800 计算机会很酷。但是工作的老式 Altairs 很少见,因此很昂贵,如果有的话,很容易花费 1500 到 2500 美元。这对我来说太贵了,无法花在一台电脑上——虽然很酷——但用途有限。

幸运的是,Altair Clone 的创建者 Mike Douglas 向社区提供了他在创建克隆时寻找和使用的所有旧文档和软件。感谢 Mike 的工作,提供了大量有关 Altair 内部工作原理的信息,并且可以方便地获取其最流行的外围设备。

在某个时候,我正在查看 Arduino Mega 2560 规格并开始怀疑它是否有足够的 I/O 引脚来连接 Altair 前面板的 LED 和开关并编写我自己的仿真器软件。原来Arduino的巨型具有完全相同的I / O引脚正确的号码。所以我只需要制作我自己的 Altair 克隆。

使用 Arduino Mega 驱动模拟器运行良好,设置简单,但模拟运行速度仅为 Altair 速度的 25% 左右,并且只能提供 6KB 的模拟 RAM(尽管在当时会很多)。永久存储容量(用于保存在模拟器中创建的程序/数据)也受到限制,因为 Mega 的 EEPROM 只能容纳 4KB。

Arduino Due 有足够的内存来支持完整的 64KB 模拟 RAM,并且运行速度比 Mega 快得多。此外,Due 可以在运行时将数据保存到闪存中。这使得可以将模拟器本身未使用的任何 512K 闪存部分用于永久存储。

使用 Due 我现在有一个 Altair 8800 模拟器,它以大约原始速度运行,提供 64K 的模拟 RAM,包括许多 Altair 软件,并且仍然可以提供 32K 的半永久存储空间来加载和保存模拟器中的程序和数据。

我对这个项目的目标是在使用模拟器时尽可能接近“真实”的 Altair 8800 感觉。这包括让前面板灯尽可能地反映真实行为。

Processor Technology 发布了一个用于 Altair 的小型扩展板(只有几个电容器和电阻器),附带的软件将 Altair 变成了一个音乐系统。可以对模拟器进行相同的添加,使其能够播放当时为音乐系统创建的曲调。

Altair 的另一个具有历史意义的重要扩展是Cromemco Dazzler图形板。使用软件或硬件扩展,模拟器还可以模拟该板:

当然,我最终没有拥有原始的 Altair,因此有关其工作原理的所有信息都必须来自文档和视频。可能会有一些细微的差异,但总的来说,我认为它很好地再现了原始行为。一个已知(和有意)的区别是 HLDA 状态灯:在原始状态灯上,它表示 CPU 已确认被外部设备暂停。此功能从未在模拟器中使用过,因此在这里它表示文件(串行/磁带捕获/重放)当前处于打开状态。

强调

  • 准确再现 Altair 前面板元素的行为。
  • 运行速度与原始 Altair 8800 大致相同(使用 Arduino Due 时)或使用 Arduino Mega 时的 25% 原始速度。
  • 模拟 RAM 大小为 64KB(到期)或 6K(兆)
  • 包含许多 Altair 程序并可轻松加载到模拟器中,包括 Pong、Altair 4K BASIC(第一个 Microsoft 产品)、Altair 扩展 BASIC、MITS 编程系统 II(仅限到期)、Altair Time Sharing BASIC(允许多个用户同时使用 BASIC)。
  • BASIC 和 Assembler 示例程序包含在仿真器软件中,可以轻松加载到 BASIC/Assembler 中。
  • 模拟 1 个 88-SIO、88-2SIO 和 88-ACR(录音机接口)板。每个模拟串行设备都可以映射到 Arduino 的串行接口。默认情况下,最常见的两个(88-SIO 和 88-2SIO 端口 1)以 115200 波特 8n1 映射到 Arduino 的主串行端口,可以通过 USB 电缆访问。我建议将串行转蓝牙加密狗连接到 RX/TX 串行引脚。这样,任何支持蓝牙的设备都可以作为 Altair 的终端。
  • 在 Arduino Due 上,可以同时使用主串行接口 (USB) 和 Serial1 接口(引脚 18/19)。
  • 发送到每个串行设备(包括 ACR 磁带)的数据可以在多达 256 个文件中捕获和重放,这些文件保存在 Arduino 的本地存储(EEPROM 或 FLASH)中。
  • 卡带接口支持在扩展 BASIC 中使用 CSAVE/CLOAD 命令(支持是自动的,无需用户交互)。非常适合开发您自己的 BASIC 程序!
  • 模拟Cromemco Dazzler图形板(需要一些额外的硬件/软件,请参见此处)
  • 模拟处理器技术 VDM1视频终端板(需要一些额外的硬件/软件,请参见此处)
  • 最多模拟 16 个 88-DCDD 磁盘驱动器(默认配置为 4 个)。磁盘驱动器仿真是可选的,但需要将 SD 卡连接到 Arduino 的 SPI 接头。仅在使用 Arduino Due 时支持。
  • 模拟 88-HDSK 硬盘控制器,最多连接 4 个硬盘单元(默认配置中为 1 个)和每个单元 4 个盘片。
  • 仿真具有实时时钟和矢量中断处理功能的 88-RTC-VI 板。这使得运行 Altair Time Sharing Basic 成为可能。
  • 可以将 256 字节的内存页面保存到永久存储器并加载回内存。这提供了一种保存通过前面板开关输入的程序的简单方法。
  • 许多设置可以通过集成配置编辑器轻松更改。
  • 使用 Due 时,请注意,如果您将新版本的草图上传到 Due,则模拟器中捕获或保存的所有内容都会被删除。这是因为保存的数据存储在闪存中,在上传新草图时会被擦除(Due 没有任何用于永久存储的 EEPROM)。如果 SD 卡连接到 Due,则保存的数据将存储在 SD 卡上。在这种情况下,上传新草图时数据不会丢失。

文档
由于模拟器的工作原理与 Altair 8800 完全相同,原始 Altair 的文档(可在 Google 上轻松找到)将提供操作前面板开关所需的所有信息。

但是,模拟器确实包括许多额外的功能和 Altair 的内置软件,可通过前面板上的 AUX1/AUX2 开关访问这些功能(包括但未在原始 Altair 上使用)。

构建说明
一个目标是使用尽可能少的支持电路。Arduino Mega 和 Due 都有足够的 I/O 引脚来直接连接所有前面板元件。唯一需要的附加电路是驱动 36 个 LED 的晶体管和电阻器(如果 LED 直接连接到 Aruino 的输出引脚并且同时打开太多,总电流将超过 Arduino 的限制)。

为这个项目创建完整的原理图将是乏味的、重复的(36 个相同的 LED 驱动器电路,32 个开关的接线)并且不是很有帮助。因此,原理图文档包含有关哪些元件连接到哪些 Arduino 引脚以及各个子电路(如 LED 驱动器)的原理图的详细表格。我还添加了一个 Fritzing 文件来显示条板上 LED 驱动器组件的布局。

为了创建前面板,我首先对 Altair 的前面板进行高质量扫描,然后在复印店将其打印到卡片纸上。对于背衬(实际上将开关和 LED 固定到位),我使用了一块 22 号金属板,使用常规电钻为 LED 和开关打孔。LED 驱动电路焊接在条形板上,条形板直接焊接到 LED 上,而 LED 又由金属板固定到位。

前面板由一个简单的木箱固定并直立。盒子没有原来的 Altair 深(因为它只需要固定前面板和 Arduino)。

为了连接前面板开/关开关,我只是在盒子上添加了一个电源插座(与 Arduino 本身相同),将其连接到前面板开关,然后从那里连接到插入 Arduino 的电源插头。

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

在将草图上传到 Arduino Due 之前,请务必将 Arduino 编译器的优化设置切换为“性能”。默认情况下,它设置为“大小”(不知道为什么,因为 Due 有 512k 闪存)。为此,加载文件

进入文本编辑器并将任何出现的“-Os”更改为“-O3”。您可以跳过此步骤,但模拟器的运行速度会明显变慢。

模拟器软件也可以在没有连接任何前面板控件的情况下在裸机 Arduino(Mega 或 Due)上运行。这确实允许运行很多包含的程序(那些主要使用串行终端而不是前面板元素的程序)。为此,请编辑config.h 源文件并设置#define STANDALONE 1 (而不是 0)。请参阅文档中的“调试功能”部分,了解如何在该设置中操作虚拟前面板元素。但请记住,这不是模拟器的预期用途。如果您不想构建前面板硬件,我建议使用基于 PC 的全软件仿真器。这config.h 源文件包含许多包含/排除模拟器功能的开关。默认设置运行良好,但如果您想调整模拟器,这是开始的地方。

该方案中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论