0

我想运行Klaus Dormann 的完整 6502 测试套件来测试我的 Kansas Lava 6502 实现。然而,代码使用了自我修改(参见 的所有用法range_adr),虽然在仿真器中实现微不足道,但对于硬件实现来说并不是一个好兆头:程序映像需要存储在 ROM 上,因此回写将被基于寻址 ROM 或 RAM 支持的部分写入的任何路由写入黑洞。

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

有没有一种方法可以运行测试套件,而不需要长时间(就周期而言)暂停 CPU,将程序从一些不可寻址的 ROM 逐字节复制到全 RAM 内存中,然后初始化 CPU 和让它运行?我不想这样做,因为在启动时模拟这些额外的周期会大大减慢运行测试的速度。

4

1 回答 1

3

下意识观察:

尽管以 64kb 的图像形式出现,但测试实际上只有 14,093 字节的实际内容,从 $0000 到 $370d,然后填充 $ffs 到 $fffa–$ffff 中的三个向量。因此,您最多需要复制 14,099 个字节,而不是表面上的 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 版本开始,这意味着您只需要移动带有标签的变量:

  • 测试用例;
  • 阿达2;
  • sba2;
  • range_adr;

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

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

所有直接测试都会自行修改操作数。如果您乐于不测试该一种寻址模式,那么它应该不会太麻烦。

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

于 2015-07-07T10:56:43.550 回答