【问题标题】:How to run Klaus Dormann's 6502 test suite on real hardware with separate ROM and RAM如何在具有独立 ROM 和 RAM 的真实硬件上运行 Klaus Dormann 的 6502 测试套件
【发布时间】:2015-09-24 11:02:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: self-modifying 6502 commodore


    【解决方案1】:

    下意识观察:

    尽管是 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 版本开始,这意味着您只需要移动带有标签的变量:

    • test_case;
    • ada2;
    • sba2;
    • range_adr;

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2011-10-15
      • 2021-03-06
      相关资源
      最近更新 更多