我想运行full 6502 test suite by Klaus Dormann来测试我的Kansas Lava 6502实现。但是,代码使用了自我修改(参见range_adr
的所有用法),虽然在模拟器中实现这一点很简单,但对于硬件实现来说并不是好兆头:程序映像需要存储在ROM,所以回写将被基于寻址ROM或RAM支持的部分的任何路由写入黑洞。
有没有办法运行测试套件而不需要花费很长的时间(在循环方面)暂停CPU的舞蹈,将程序从一些不可寻址的ROM复制到一个全RAM的内存中,然后进行初始化CPU并让它运行?我不喜欢这样做,因为在启动时模拟这些额外的周期会大大减慢测试速度。
答案 0 :(得分:3)
Knee-jerk观察:
尽管作为一个64kb的图像,测试实际上只有14093字节的实际内容,从$ 0000到$ 370d,然后填充$ ffs到$ fffa- $ ffff中的三个向量。因此,您需要复制最多14099个字节,而不是初始值65,536。
我在昨天写的模拟器中设置了非常测试套件(不,真的)全部触摸地址 - 使用[x,y]来表示闭合范围,即包括x和y,是:
从程序的.lst版本开始,这意味着你需要移动的只是带标签的变量:
...并移动或删除以下例程:
chkdadi
和chksbi
); 所有即时测试都会自行修改操作数。如果您对未经测试的那种寻址模式感到高兴,那么它就不会太麻烦。
所以,我想,从原始文件中编辑这些测试,如果我的模拟准确,你可以安全地将range_adr
重新定位到堆栈页面的中间位置。