当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]你应该在LCD屏幕顶部中间看到“11”,表示计算机已准备好接收你的指令(“命令”)。你可以随时按下右键重置计算机,返回此模式。

快速入门

要制作一台UT-88的复刻版——一款8位苏联自制计算机:

•获取上述列出的五个硬件组件。

•从GitHub下载Arduino代码文件(mega)。

•使用Arduino IDE将代码上传到你的Arduino Mega 2560。

•按照上图所示组装计算机。4×4键盘应连接至A8至A15引脚。

完成!请注意,Arduino Mega 2560可能需要大约五秒钟才能完全唤醒。你可能还需要用螺丝刀调整LCD屏幕的亮度。

你应该在LCD屏幕顶部中间看到“11”,表示计算机已准备好接收你的指令(“命令”)。你可以随时按下右键重置计算机,返回此模式。

你可以通过按下3(S4键)来测试显示屏,或按下4(S5键)来测试RAM(从地址C000开始),它应该显示C400作为第一个不属于其RAM的地址。

技术规格

•Z80 CPU平均运行频率约为0.5至0.6 MHz(无固定时钟)。

•地址0000至0FFF共4KB ROM,用于存储显示器和辅助子程序。

•1 kB RAM,地址范围为 C000 至 C3FF,可扩展(在示例中)至约 7 kB,因为 Arduino Mega 2560 配备了 8 kB 的 SRAM。

•4 kB EEPROM,分为四个部分(“磁带”),用于永久存储用户代码——相当于卡带录音机的替代方案。

•键盘:16 个数字,从 0 到 F(按键 S1 到 S16),Select(“后退”)用于编辑当前查看的内存字节,Left(左键)用于选择当前“磁带”,Up(上键)用于将 RAM 中的数据上传到当前“磁带”,Down(下键)用于将当前“磁带”中的数据下载到 RAM,Right(右键)重置 UT-88,Reset(重置键)重置 Arduino Mega 2560(并清空 RAM)。

•显示:16x2 LCD 显示屏,模拟六个十六进制数字,分为两组各四位和两位。

监控指令

(从这里开始)。

抬头提示:不要使用卡带磁带指令 9 和 A。应分别使用 EEPROM 的“磁带”按钮 Up 和 Down。

编程技巧

•要在 LCD 左端位置显示一个字节(十六进制形式),请将该字节存储在内存位置 9002。若要更改其余两个 LCD 指示器,请分别将字节存储在内存位置 9001 和 9000。

•若要将键盘输入的字节存入累加器 A,请使用 RST 2 指令(操作码 D7)。

•要查询键盘状态,可使用 IN A0 指令(操作码 DB A0)或 RST 4(操作码 E7)。如果按下对应的按键(从 S2 到 S16),则会将值 01 至 0F 存入累加器 A;若按下“0”键(S1),则为 10;若按下“后退”键,则为 80;若未按下这 17 个按键中的任意一个,则为 00。

•要延迟一秒,可使用 RST 3(操作码 DF)指令。

•要显示寄存器 HL 和 A 的内容,可使用 RST 5 指令(操作码 EF)。

•要将两个字节写入寄存器 DE,可使用 RST 6 指令(操作码 F8)。

•要结束程序,可使用 RST 0 指令(操作码 C8)。

我为何这么做

不久前,我突然萌生了组装一台1988年苏联自制的DIY电脑UT-88的想法。该电脑基于Intel 8080 CPU,外观如下所示:

但我不想再寻找复古集成电路、编程老旧的ROM,也不再亲自焊接所有部件。于是,我决定采用更现代的方法。我保留了CPU(好吧,几乎保留——我用Zilog Z80取代了Intel 8080),但其余部分全部更换为Arduino Mega 2560、一个16x2 LCD扩展板以及一个预先制作好的4x4键盘。这不仅大幅减少了元件数量,还省去了焊接的步骤。

为什么选择Arduino Mega 2560

Arduino Mega 2560是本项目的一个理想选择,因为它结合了易于编程的微控制器(MCU),并拥有足够的引脚来与40针Z80 CPU进行交互,且工作电压为5V,因此无需使用电平转换器即可直接与Z80通信。

此外,还有两个类似的项目也使用了Arduino Mega 2560,而本项目在很大程度上借鉴了它们:

•“使用Arduino Mega和Z80处理器实现复古计算”项目展示了如何将Z80直接连接到Arduino Mega 2560,并由MCU驱动CPU。

•RetroShield Z80以及相关的实用示例(基础测试、BASIC程序、显示器)则清晰地演示了如何实际驱动Z80。

无显著CPU性能下降

上述两个项目均使用0.1 MHz的定时器为Z80提供时钟信号,其速度比Z80的标准时钟频率慢了几十倍。

而我完全不使用定时器为Z80提供时钟。

我只需将Z80时钟信号设为高电平,然后在Z80和Arduino Mega 2560之间传输一个字节,再将时钟信号设为低电平约一微秒,重复此过程。结果平均时钟频率约为0.5至0.6 MHz——相比原来的0.1 MHz已不算差,与原始UT-88的Intel 8080主频2 MHz相比,也未出现显著下降。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭