我正在写一个gameboy模拟器,并努力确保opcode正确地模拟。某些操作会设置标志寄存器,并且可能很难追踪标志设置是否正确以及在哪里。Gameboy模拟器测试策略?
我想写某种测试框架,但认为这将会是值得一问这里的一些帮助。目前我看到几个选项:
单位每个测试,并与多组测试每个操作码。问题是有256个8位操作码和50+(不能记住确切的数字)16位操作码。这需要很长时间才能正确执行。
写某种日志框架,在每个动作日志堆栈跟踪,并将其与其他已建立的仿真器。这个过程非常快,并且可以快速了解到底发生了什么问题。日志文件看起来有点像这样:
...
PC = 212 Just executed opcode 7c - Register: AF: 5 30 BC: 0 13 HL: 5 ce DE: 1 cd SP: ffad
PC = 213 Just executed opcode 12 - Register: AF: 5 30 BC: 0 13 HL: 5 ce DE: 1 cd SP: ffad
...
缺点是我需要修改另一个模拟器的来源输出相同的形式。并且不能保证操作码是正确的,因为它假定其他仿真器是。
我还应该考虑什么?
这里是我的代码,如果有帮助:https://github.com/dbousamra/scalagb
我喜欢在某些时间点比较内存映射的想法。 –
好吧我已经添加了一些测试来比较另一个模拟器(JavaBoy)的堆栈跟踪。效果很好。 –
与其他仿真器相比,一个问题是很多仿真器不是很准确。我建议用专用的测试ROM进行测试。 – nijoakim