我一直在为MOS 6502设计模拟器,此时我几乎完全完成了它。但它有一个小问题。它似乎通过了我通过的所有测试,但由于某种原因,它导致Enhanced Basic以科学记数法输出所有内容,包括字符。
Enhanced Basic is only supposed to put numbers into scientific notation if they are > 999999.4375.
我应该从哪里开始看?什么仿真问题可能导致EhBasic这样的回应?我不知道从哪里开始这么大的程序,并且考虑到我的模拟器通过了我所提供的所有测试,我无法准确地发现测试问题。
以下是增强型基本的输出示例。
6502 EhBASIC [C]old/[W]arm ?
Memory size ? $C000
4.8383E+04 Bytes free
Enhanced BASIC 2.22
Ready
4.8383实际上应该是48383。
我冒昧地重写了the code并评论了任何不需要查看此问题的内容。它现在应该对任何人都更具可读性。
要重现此操作,请按C键运行EhBASIC Cold,对于内存大小,输入$ C000。
编辑:澄清
累加器是内存[memory_size]
有些变量后面有[0],因为我利用javaScript Uint8数组来获得无符号8位整数和无符号16位整数。
答案 0 :(得分:3)
这确实是所有模拟器开发人员的祸根。所有测试都有助于定位错误,但是大型程序失败了。
我假设Basic的源代码不可用,否则仔细阅读至少可以找到执行值检查的代码。
我发现获取指令执行跟踪可以提供帮助。如果您可以隔离用于显示值的内存区域,则可以将跟踪限制为仅占用内存的那一部分。
跟踪应该输出PC,反汇编要执行的指令,并显示所有寄存器内容。它还应在跟踪中指示输出何时发生 - 这有助于识别不同代码块的作用。
痕迹可能非常大并且需要时间来生成,然后需要更多时间来分析。隔离问题的一种方法是运行带有跟踪的仿真器和输出相同跟踪的已知良好仿真器。当迹线不同时,您可以很好地指向问题的来源。