0

我一直在为 MOS 6502 开发一个仿真器,此时我几乎已经完全完成了。不过它有一个小问题。它似乎通过了我通过的所有测试,但由于某种原因,它导致增强型基本以科学计数法输出所有内容,包括字符。

仅当数字 > 999999.4375 时,Enhanced Basic 才应该将数字放入科学记数法中。

我应该从哪里开始看?哪些仿真问题会导致 EhBasic 做出这样的响应?我什至不知道从哪里开始使用这么大的程序,并且考虑到我的模拟器通过了我提供的所有测试,我无法完全找到测试的问题。

这是增强型基础的示例输出。

6502 EhBASIC [C]old/[W]arm ?



Memory size ? $C000



4.8383E+04 Bytes free


Enhanced BASIC 2.22


Ready

4.8383 实际上应该是 48383。

我冒昧地重新编写代码并注释掉任何不需要查看此问题的内容。它现在应该对任何人都更具可读性。

要重现这一点,请按 C 运行 EhBASIC Cold,对于内存大小,输入 $C000。

编辑:澄清

累加器是内存[memory_size]

一些变量后面有 [0],因为我利用 javaScript Uint8 数组具有无符号 8 位整数和无符号 16 位整数。

4

1 回答 1

3

这确实是所有模拟器开发人员的祸根。所有有助于定位错误的测试都通过了,但大型程序失败了。

我假设 Basic 的源代码不可用,否则仔细阅读至少可以找到对值执行检查的代码。

我发现获取指令执行跟踪会有所帮助。如果您可以隔离用于显示值的内存区域,您可以将跟踪限制在内存的那部分。

跟踪应该输出 PC,反汇编要执行的指令,并显示所有寄存器内容。它还应该在输出发生时在跟踪中指示 - 这有助于识别不同代码块的作用。

痕迹可能非常大,需要时间来生成,然后甚至需要更多时间来分析。隔离问题的一种方法是运行带有跟踪的仿真器,并且已知良好的仿真器输出相同的跟踪。当跟踪不同时,您可以很好地指出问题的根源。

于 2015-03-30T09:49:35.413 回答