×

从零开始的AIM65相似计算机

消耗积分:0 | 格式:zip | 大小:0.01 MB | 2022-10-19

洪茗苞

分享资料个

描述

这个想法

Rockwell AIM 65 是 70 年代早期基于 6502 的计算机之一。它有一个 20 个字符的显示屏、一个小型热敏打印机和一个相当大的键盘。标准内存是 1k 或 4k。更多细节可以在“旧电脑”页面找到。ROM上有很多软件可用。我从来没有 AIM 65。实际上,它们比我早一点流行。但我一直喜欢它的准系统外观。

 
原始目标 65。
 

该设计非常适合使用我们今天拥有的标准 Arduino 组件进行重建。

准备原型盾牌

将 PS2 键盘插座焊接在原型屏蔽罩的外侧。然后连接电线。我的布局是使用 Arduino 的引脚 2 作为 PS2 时钟和引脚 3 作为 PS2 数据线。我非常凌乱的实验原型看起来像这样

pYYBAGNOSH-AO5tHAADfzq7rf6U892.png
带 PS2 插座的原型板
 

请确保您得到正确的引脚排列。PS2 键盘用错极性很容易被炸。下载 PS2 库。

Paul Stoffregen 的 PS2 库通过 Arduino IDE 提供以供下载。最新版本是 2.4。这个库在处理带有 altgr 键盘映射(如德语)的键盘映射时存在错误。如果库https://github.com/slviajero/PS2Keyboard ,我修复了我的 fork 中的错误Paul 在他的源代码中也包含了修复程序,但来自 Arduino IDE 的代码仍然可能是旧代码。

安装和连接 LCD 显示器

Stefan 的 BASIC 支持 I2C 和直接连接的 20x4 LCD 显示器。对于我的第一个原型,我使用了一个带有并行接口的显示器,这导致了很多电缆和面包板。I2C 是更好的选择。尽管如此,并行显示代码仍在解释器中,因为它也用于 LCD 屏蔽。

poYBAGNOSIGAQUpkAABG5ANenFM725.png
第一次尝试使用键盘并行访问。
 

将 I2C 和电压线连接到 Arduino。我使用了一个小面包板,因为我想将 I2C 接口不仅用于显示器,还用于其他传感器。

poYBAGNOSIWACxpLAABdDf65vNY576.png
显示器背面
 

上面的两个连接器是接地和 5V。这将用于原型屏蔽和相应的插座。SDA 和 SCL 连接到 Arduino MEGA 的 PIN 20 和 21。

将所有内容放在一起并上传软件。

将原型板放在 Mega 上,插入 PS2 键盘和 USB 数据线。我将所有东西都安装在胶合板上,将 MEGA 拧在板上的小塑料床上。

将 BASIC 解释器加载到 ARDUINO IDE。您需要来自我的仓库https://github.com/slviajero/tinybasic的草图TinybasicArduino/TinybasicArduino.ino ,包括 hardware-arduino.h 和 basic.h。确保在 Arduino 库管理器中加载 PS2 库。我建议使用来自https://github.com/slviajero/PS2Keyboard 的补丁。它添加了 BASIC 解释器的某些功能所需的 keyboard.peek() 方法。

在TinybasicArduino.ino代码的开头设置以下语言设置。控制包含哪些语言功能。

#define	BASICFULL
#undef	BASICINTEGER
#undef	BASICSIMPLE
#undef	BASICMINIMAL
#undef	BASICTINYWITHFLOAT

MEGA 有足够的闪存用于完整的 BASIC 语言集。

在 hardware-arduino.h 中有硬件设置。

#undef USESPICOSERIAL
#define ARDUINOPS2
#define DISPLAYCANSCROLL
#define ARDUINOLCDI2C
#define ARDUINOEEPROM
#define STANDALONE

我们想要一个支持 EEPROM (ARDUINOEEPROM)、PS2 键盘支持 (ARDUINOPS2)、I2C 显示器 (ARDUINOLCDI2C) 和显示器完全滚动支持 (DISPLAYCANSCROLL) 的系统。最后一个设置 STANDALONE 使 BASIC 解释器在启动后使用显示器和键盘作为默认输入和输出设备。

接下来设置 PS2 引脚。这是在更远的地方完成的。根据硬件布局设置值。数据管脚可以是这里的任何管脚。IRQ 引脚需要是 MEGA 的 IRQ 就绪引脚。

#define PS2DATAPIN 3
#define PS2IRQPIN  2 

如果您想使用不同的布局,请修改本节中的代码。该代码具有默认硬连线的德语键盘。相应地搜索并更改行keyboard.begin(PS2DataPin, PS2IRQpin, PS2Keymap_German)

上传你的程序。

pYYBAGNOSIiAEdGOAAC_YN9ZTqg660.png
第一个版本,仍然没有打印机。
 

享受输入您的第一个 BASIC 命令。使用这种语言集的 Arduino MEGA 256 可能有 6k 的 BASIC 内存。对于一些有趣的项目来说已经足够了。阅读 wiki了解有关此 BASIC 方言的详细信息,包括测试和演示程序。

另请查看本教程以获取有关 Arduino 上的 BASIC 的更多信息

添加打印机

市场上有大量小型热敏打印机,都与最初用于 AIM65 的热敏打印机非常相似。这些打印机具有串行 TTL 和 RS232 接口。它们需要大量电力,不能连接到 Arduino 5V 线路。需要一个电流至少为 2A 的额外 9V 电源。这些打印机的规格通常如下所示https://github.com/slviajero/tinybasic/blob/main/misc/ThermalprinterSpecs.pdf 确定正确的引脚排列可能有点麻烦。

poYBAGNOSIqAGNkeAADHJfrMBm4032.png
打印机安装在一块单独的胶合板上,带有 2A 电源。
 

将打印机串口的 TX 线连接到 Arduino 上 Serial1 的 RX。这是针脚 19。将打印机的 RX 连接到针脚 18。还将打印机的地线连接到 Arduino 上的地线。打印机的电源通过单独的电源线连接到外部电源。

重新编译 BASIC 解释器添加设置

#define ARDUINOPRT

在代码的硬件部分。这将激活 Arduino 的 Serial1 接口并为其分配 BASIC 设备编号 &4。标准波特率为 9600,这对于这些打印机来说很常见。

PRINT &4, "Hello World"

现在应该可以工作了。可以使用 PUT 将单个字节发送到打印机

PUT &4, 10

I/O 通道双向工作。

GET &4, A

从打印机收集一个字节。这会很有帮助,因为打印机具有双向通信协议。

添加 SD 卡存储

在 BASIC 解释器中,SD 卡支持在编译时激活

#define ARDUINOSD

连接小型SD卡接口

pYYBAGNOSIyAApnIAACh9mMqLqo814.png
 

到 Arduino 的 SPI 端口。对于 ATMEGA 2560 MOSI 是引脚 51、MISO 引脚 50 和 CLK 引脚 52。我使用引脚 53(SPI 端口的默认从属选择)来激活 SD 卡读卡器。添加一个带有 FAT12 文件系统的小型预格式化 SD 卡,您就可以开始使用了。

这是整个系统现在的样子:

pYYBAGNOSI-AQ62UAADBs6e9dVk031.png
AIM 65 像电脑 - 胶合板和胶水......
 

请注意,启动后它只报告 4096 字节的可用 BASIC 内存。SD 卡接口的缓冲区使用 900 字节。这并不奇怪,因为 SD 卡的块大小为 512 字节。

插入预格式化的 SD 卡后,像CATALOG, LOAD,这样的命令SAVE现在应该可以工作了。有关文件命令的详细信息,请参见SD 卡命令

添加实时时钟

市场上有许多用于 Arduino 项目的时钟模块。我已将带有 EEPROM 的 DS3231 库集成到 BASIC 解释器中。这些设备看起来像这样

poYBAGNOSJKAV20fAADazYe--yE811.png
基于 DS3231 的实时时钟
 

它们可以连接到也用于显示器的 I2C 端口。我的原型将时钟直接安装在显示器后面

poYBAGNOSJSAdaDwAADj7ace_6I709.png
安装在显示器后面的时钟
 

我不使用 Adafruit 的标准 RTC 库,因为它们带来了 BASIC 解释器所具有的许多功能。代替 BASIC 使用 uRTCLib 和 uEEPROMLib。两者都可以在 Arduino IDE 中下载,也可以直接从下面的 github repos 下载。

编译 BASIC 解释器

#define ARDUINORTC

并将其加载到 Arduino 中。

现在在 BASIC 中提供了一个特殊的数组 @T():@T(0) - 秒,@T(1) - 分钟,@T(2) - 小时,@T(3) - 天,@T(4) - 月,@T(5) - 年,@T(6) - 工作日,@T(7) - 温度。除了温度,所有数组元素都是读/写的。

使用数组的小时钟程序如下所示

10 CLS 
20 PRINT @T(2);":";@T(1);":";@T(0)
30 PRINT @T(3);"/";@T(4);"/";@T(5)
40 PRINT "Temp:",@T(7)/100
50 DELAY 1000
60 GOTO 10

时钟的 4k EEPROM 模块作为内置 EEPROM 的扩展出现。Arduino MEGA256 启动后应显示 8k EEPROM 空间。第一个 4k 是微控制器的内置 EEPROM,第二个块是时钟的 EEROM。时钟 EEPROM 非常慢,因为所有访问都需要通过有线接口。

更多的东西来

我集成了 RF2401 无线电,我正在为这个系统开发以太网,使其成为物联网的小型基站。

使用的库

https://github.com/PaulStoffregen/PS2Keyboard

来自 Arduino IDE 的 uRTClib

费用

这个项目成本真的很低。最昂贵的组件是 35 欧元的 MEGA 256。包括 I2C 适配器的显示器是 10 欧元。SD 卡、SD 接口和时钟需要另外 10 欧元。一个 PS2 键盘可以在 Ebay 上以 10 欧元的价格购买。总共花费 75 欧元,您就拥有了一台可以正常工作的计算机。

最后的话

为什么选择基于 BASIC 的 Arduino 家用电脑?因为建造它很有趣。而口译语言有很多优点。人们可以用它测试电路和物联网,而无需为每次更改重新刷新 Arduino。

BASIC 的发展远远超出了本项目中描述的功能。与此同时,它拥有 Wire、许多不同的显示器、网络,并且可以为更大的计算机供电。我还为它移植了大部分 Arduino 示例库。

如果您对此感兴趣,请点击这些链接中的任何一个

Arduino 库中的所有标准示例都在我的仓库中。

 


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

评论(0)
发评论

下载排行榜

全部0条评论

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