如何在具有单独ROM和RAM的真实硬件上运行Klaus Dormann的6502测试套件

时间:2015-07-07 05:29:09

标签: self-modifying 6502 commodore

我想运行full 6502 test suite by Klaus Dormann来测试我的Kansas Lava 6502实现。但是,代码使用了自我修改(参见range_adr的所有用法),虽然在模拟器中实现这一点很简单,但对于硬件实现来说并不是好兆头:程序映像需要存储在ROM,所以回写将被基于寻址ROM或RAM支持的部分的任何路由写入黑洞。

当然,同样的问题既适用于将其合成到真实的FPGA,也适用于在模拟器(低级VHDL或高级堪萨斯熔岩)中运行。

有没有办法运行测试套件而不需要花费很长的时间(在循环方面)暂停CPU的舞蹈,将程序从一些不可寻址的ROM复制到一个全RAM的内存中,然后进行初始化CPU并让它运行?我不喜欢这样做,因为在启动时模拟这些额外的周期会大大减慢测试速度。

1 个答案:

答案 0 :(得分:3)

Knee-jerk观察:

尽管作为一个64kb的图像,测试实际上只有14093字节的实际内容,从$ 0000到$ 370d,然后填充$ ffs到$ fffa- $ ffff中的三个向量。因此,您需要复制最多14099个字节,而不是初始值65,536。

我在昨天写的模拟器中设置了非常测试套件(不,真的)全部触摸地址 - 使用[x,y]来表示闭合范围,即包括x和y,是:

  • [000a,0012],[0100,0101],[01f9,01ff](即堆栈和零页);
  • 0200;
  • [0203,0207];
  • 04a8;
  • 2cbb;
  • 2cdc;
  • 2eb1;
  • 2ed2;
  • 30a7;
  • 30c8;
  • 33f2;
  • 3409;
  • 353B;和
  • 3552

从程序的.lst版本开始,这意味着你需要移动的只是带标签的变量:

  • test_case;
  • ADA2;
  • sba2;
  • range_adr;

...并移动或删除以下例程:

  • 测试并立即从2cac下降到2cec;
  • 从2ea2到2ee2立即测试EOR;
  • 从3098到30d8立即测试ORA;
  • 测试十进制ADC / SBC立即从33e7下降到3414(特别是包括chkdadichksbi);
  • 测试二进制ADC / SBC立即从3531下降到355d。

所有即时测试都会自行修改操作数。如果您对未经测试的那种寻址模式感到高兴,那么它就不会太麻烦。

所以,我想,从原始文件中编辑这些测试,如果我的模拟准确,你可以安全地将range_adr重新定位到堆栈页面的中间位置。