之前我在 GitHub 上的 ViudiraTech / Sim6502 项目中,找到了已经编译好的 WozMon 和 Enhanced 6502 BASIC 固件。
这个 Sim6502 确实是个实用工具。它在个人电脑上仿真了一整套 6502 CPU / 6850 ACIA 环境,与我自制的 6502 单板机硬件环境非常接近。这样一来,在开发或移植针对 6502 的程序时,我就可以先在 模拟器 里运行测试,确认逻辑和功能都没问题后,再烧写到单板机的 ROM 中,极大地简化了开发和调试流程,提升了效率。
今天,我就来简单试用体验一下。
下载源码后,在我的 Ubuntu 系统里直接运行 make 命令就可以成功编译。看起来只要系统里安装了 gcc 工具链 和 GNU Make 工具 就能顺利编译通过。
在 6502.h 这个头文件中,定义了 CPU_FREQ(CPU频率)参数,默认值是 4e6,也就是 4MHz。
为了更贴近我的硬件环境,我把这个值改成了 3686400,因为我的单板机主频是 3.6864MHz。修改完毕后,再重新执行一次 make 进行编译。
接着,使用下面的命令让 Sim6502 加载并运行 Enhanced 6502 BASIC:
./Sim6502 -i roms/ehbasic.bin
这里的 -i 参数是关键,它会把宿主机的标准输入/输出连接到模拟器中。加上这个参数后,我们终端的输入输出就完全模拟了 6850 ACIA 的串口输入输出。
运行命令后,Sim6502 成功启动了 ROM 中的 BASIC 解释器:

我把之前在单板机上运行过的那个 Mandelbrot 集绘制程序(一段 BASIC 代码)粘贴到模拟器的终端里,然后执行了一遍:

整个程序运行完毕,耗时正好 2 分钟。
对比我那台真实的单板机,模拟器环境下的运行时间多了大约 9 秒,这个速度差异已经相当小了。考虑到仿真本身的开销,这个结果令人满意。看来以后可以放心地使用 Sim6502 作为 6502 CPU 程序开发和移植的前期仿真测试环境了,这能有效减少对实体硬件的依赖和反复烧写的麻烦。
如果你也对这类复古硬件仿真或底层开发感兴趣,欢迎到 云栈社区 交流探讨。
|