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

Arduino Altair 8800 模拟器

组件和用品

Arduino Mega 2560
× 1
Arduino Due
需要 Arduino Mega 或 Due,不能同时使用!
× 1
LED(通用)
× 36
通用晶体管 NPN
× 36
电阻 10k ohm
× 36
电阻 150 欧姆
× 36
迷你拨动开关 SPDT On-On
用于16个地址开关(SW15-0)加电源开关
× 17
瞬时开关 SPDT(开)-关-(开)
用于功能开关(RUN/STOP/EXAMINE...)
× 8
前面板背衬金属板
× 1
SparkFun 蓝牙调制解调器 - BlueSMiRF 银色
可选。将此连接到 Arduino TX/RX 引脚将允许任何支持蓝牙的计算机或手机充当模拟 Altair 的串行终端。
× 1
带有 SD 卡适配器的 microSD 卡
可选。仅用于磁盘驱动器仿真需要,模拟器不需要。
× 1

应用和在线服务

Arduino IDE
Arduino DueFlashStorage 库
Arduino Due 没有用于永久存储的 EEPROM,但使用此库数据可以保存到-芯片闪存。重新刷新 Arduino 时,保存的所有内容都会被删除!
Arduino Due soft_uart 库
允许任何引脚用作串行接口的软件 UART 实现(类似于 SoftwareSerial 库其他 Arduino 平台的)。这个库中的文件包含在模拟器源中,因为我需要做一些小的修改才能将它们集成到模拟器中。

关于这个项目

如果您想构建它但不喜欢完全从头开始的想法,请查看 Chris Davis 的 Altair-Duino 套件 来了 带有所有组件、PCB、外壳和预编程的 Arduino Due!

以下是其他人的一些照片,这些人已经构建了这个项目并将其制作成自己的:

  • 艾伦·洛瑟 找到了一个 漂亮的金属外壳 对于他的版本,并连接了 Raspberry Pi 进行输入/输出和语音合成。
  • Martin Zumr 用木头做了一个非常漂亮的盒子。
  • 克里斯·戴维斯 ( kb0wwp) 做了一个 PCB 和一个 漂亮的案例。
  • 贾斯汀戴维斯制作了一个 用于 Arduino Due 的 Altair 防护罩

如果有人想分享他们的创作,请告诉我,我会在这里发布。我很想看到人们想出的各种版本!

很长一段时间以来,我一直认为拥有一台 Altair 8800 计算机会很酷。但是工作的老式 Altairs 很少见,因此很昂贵,如果有的话,很容易花费 1500 到 2500 美元。还有一些其他选择,例如 altairclone.com,但它仍然需要 600 美元,这对我来说太贵了,无法花在一台电脑上——虽然很酷——但用途有限。幸运的是,Altair Clone 的创建者 Mike Douglas 向社区提供了他在创建克隆时寻找和使用的所有旧文档和软件。感谢 Mike 的工作,提供了大量有关 Altair 内部工作原理及其最流行外围设备的信息。

在某个时候,我正在查看 Arduino Mega 2560 规格并开始怀疑它是否有足够的 I/O 引脚来连接 Altair 前面板的 LED 和开关并编写我自己的仿真器软件。事实证明 Arduino Mega 正是 正确数量的 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 感觉。这包括让前面板灯尽可能地反映真实行为。一个标准是应该可以玩前面板“Kill-the-Bit”游戏 - 它是:

事实证明,模拟对原始版本来说足够真实,即使是 Altair 8800 音乐演示也能正常工作。请注意,这依赖于 AM 无线电接收 Altair 电路产生的电磁干扰!

回到当天,Processor Technology 为 Altair 发布了一个小型扩展板(只有几个电容器和电阻器),附带的软件将 Altair 变成了一个受人尊敬的音乐系统(当时)。可以对模拟器进行相同的添加(请参阅文档),使其能够播放当时为音乐系统创建的曲调。举个例子:

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

另一个软件/硬件扩展允许模拟器模拟处理器技术 VDM-1 显卡:

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

亮点

  • 准确再现 Altair 前面板元素的行为。
  • 运行速度与原始 Altair 8800 大致相同(使用 Arduino Due 时)或 25% 的原始速度(使用 Arduino Mega 时)。
  • 模拟 RAM 大小为 64KB(到期)或 6K(兆)
  • 包含许多 Altair 程序并且可以轻松加载到模拟器中,包括 Pong、Altair 4K BASIC(第一个 Microsoft 产品)、Altair 扩展 BASIC、MITS 编程系统 II(仅限到期)、Altair Time Sharing BASIC(允许多个用户同时使用 BASIC)。
  • BASIC 和 Assembler 示例程序包含在仿真器软件中,可以轻松加载到 BASIC/Assembler 中。
  • 模拟一个 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 或闪存)中。
  • 卡带接口支持在扩展 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 上使用)。该功能在我为模拟器开发软件时编写的单独文档中进行了解释。该文档有很多页,其中包含的信息会淹没本页,因此请参阅源代码库中的 Documentation.pdf 文件。

构建说明

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

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

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

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

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

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

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

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,我不得不依靠从互联网上获取信息。 altairclone.com 的 Mike Douglas (deramp5113) 制作的 Altair 8800 教学视频有很大帮助,非常有趣。除了制作视频外,Mike 还收集了大量与 Altair 相关的硬件和软件手册,并在他的网站上提供。

(请注意,Mike 的视频非常有助于了解构建模拟器后如何处理它)

Martin Eberhard 的 ADEXER 工具对于硬盘驱动器支持的低级调试非常有用。他还编写了模拟器使用的两个引导加载程序:用于引导磁盘和迷你磁盘的组合磁盘引导加载程序(CDBL)以及比原始更短、更稳定的硬盘引导加载程序(HDBL)。

虽然我自己编写了包括 CPU 仿真在内的所有代码,但在有效实现半进位计算和 DAA 指令方面,我确实从 i8080 核心模型项目中获得了一些灵感。

该模拟器包括一些 Altair 8800 的原始软件。另一个非常感谢 Mike Douglas,他花了无数个小时寻找、收集并让该软件运行,然后在他的 altairclone.com 网站上提供所有这些软件:

  • Altair 4K BASIC(MITS 1975)
  • Altair 扩展 ROM 基础版 (MITS 1975)
  • Altair Time Sharing Basic (MITS 1977)
  • Kill-the-Bit 游戏(Dean McDaniel,1975 年)
  • 使用前面板的乒乓球游戏 (Mike Douglas)
  • 'Daisy, Daisy...' 音乐(Steve Dompier,1975 年)
  • 音乐系统(处理器技术 1977)
  • MITS 编程系统 II(MITS 1976)
  • Altair Turnkey Monitor (MITS 1977)
  • i8080 CPU 诊断(Microcosm Associates,1980 年)
  • i8080 CPU 训练器(Frank D. Cringle 1994,Ian Bartholomew 2009)

磁盘和硬盘映像(包含在源存档的“磁盘”子目录中)也从 altairclone.com 和 deramp.com(Mike Douglas 的个人网站)获取。其中包括 CP/M、各种版本的磁盘 BASIC、Altair DOS(包括 Fortran)等等。同样,Mike 完成了一项了不起的工作,找到了所有这些软件,然后创建了可供 Altair 社区使用的正常运行的磁盘映像。我只使用了一部分软件,因此您可能需要访问 altairclone.com 或 deramp.com 并查看更多。

论坛

Altairduino.com 的 Chris Davis 成立了一个 Google 群组来讨论 Altair-Duino 相关问题:

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

欢迎访问并参与讨论!

代码

Arduino Altair 8800 模拟器代码
https://github.com/dhansel/Altair8800

示意图

本文档没有提供完整的原理图(非常重复),而是描述了哪些引脚连接到哪些前面板元件,并提供了子电路(例如 LED 驱动器电路)的原理图尝试显示 LED 连接的条形板的布局到。它有点拥挤,但应该足以看到事物是如何连接在一起的。重要的是,每个 LED 的组件在条板上占用的空间不超过 5 个。这样 LED 就可以靠得足够近,使前面板保持原始尺寸。 ledstrip_4OVCpRyKQS.fzz

制造工艺

  1. 带有 Arduino 的用于飞行模拟器的 LCD 面板
  2. Arduino Spybot
  3. FlickMote
  4. 自制电视 B-Gone
  5. 主时钟
  6. 找到我
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Quadruped
  10. Arduino Joystick
  11. 数控机床
  12. Earth_Analyzer