我一直在为MOS 6502开发一个仿真器,现在我几乎完全完成了。不过,它有一个小问题。它似乎通过了我对它进行的所有测试,但由于某种原因,它导致Enhanced Basic以科学记数法输出所有内容,包括字符。
Enhanced Basic is only supposed to put numbers into scientific notation if they are > 999999.4375.
我应该从哪里开始找呢?什么样的仿真问题会导致来自EhBasic的类似响应?我甚至不知道从哪里开始编写这么大的程序,并且考虑到我的模拟器通过了我提供给它的所有测试,我无法准确地找到测试中的问题。
以下是enhanced basic的输出示例。
6502 EhBASIC [C]old/[W]arm ?
Memory size ? $C000
4.8383E+04 Bytes free
Enhanced BASIC 2.22
Ready4.8383实际上应该是48383。
我冒失地重写了the code,并注释掉了看到这个问题所不需要的任何东西。现在它对任何人来说都应该更易读了。
要重现这种情况,请按C键运行EhBASIC Cod键,并输入$C000作为内存大小。
编辑:澄清
累加器为memorymemory_size
一些变量后面有它们,因为我利用javaScript Uint8数组拥有无符号的8位整数和无符号的16位整数。
发布于 2015-03-30 17:49:35
这确实是所有仿真器开发人员的祸根。所有有助于定位错误的测试都通过了,但大型程序失败了。
我假设Basic的源代码是不可用的,否则仔细研究它至少可以找到对值执行检查的代码。
我发现获取指令执行跟踪可能会有所帮助。如果可以隔离用于显示值的内存区域,则可以将跟踪限制在内存的该部分。
跟踪应输出PC,反汇编要执行的指令,并显示所有寄存器内容。它还应该在跟踪中指明输出发生的时间-这有助于识别不同的代码块做了什么。
跟踪可能非常大,需要时间来生成,然后再花更多的时间进行分析。隔离问题的一种方法是使用trace运行您的仿真器,并使用已知良好的仿真器输出相同的跟踪。当跟踪不同时,您可以很好地指向问题的根源。
https://stackoverflow.com/questions/29339468
复制相似问题