×

Arduino Altair 8800模拟器

消耗积分:0 | 格式:zip | 大小:0.14 MB | 2022-11-16

李玲

分享资料个

描述

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

以下是其他人的一些图片,他们已经建立了这个项目并把它变成了自己的:

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

很长一段时间以来,我一直认为拥有一台 Altair 8800 计算机会很酷。但是工作的老式 Altair 很少见,因此价格昂贵,如果有的话,很容易花费 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显卡。使用软件或硬件扩展,模拟器还可以模拟该板:

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

强调

  • 准确再现 Altair 前面板元素的行为。
  • 运行速度与原始 Altair 8800 大致相同(使用 Arduino Due 时)或使用 Arduino Mega 时 25% 原始速度。
  • 模拟 RAM 大小为 64KB (Due) 或 6K (Mega)
  • 包含许多 Altair 程序,可以轻松加载到模拟器中,包括 Pong、Altair 4K BASIC(第一个 Microsoft 产品)、Altair 扩展 BASIC、MITS Programming System 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 程序!
  • 模拟多达 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 的前面板进行了高质量扫描,然后在复印店将其打印到卡片纸上。对于背衬(实际将开关和 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网站上:

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

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !