MOS 6502 仿真器导致增强型基本以科学计数法输出

Posted

技术标签:

【中文标题】MOS 6502 仿真器导致增强型基本以科学计数法输出【英文标题】:MOS 6502 Emulator Causing Enhanced Basic to Output in Scientific Notation 【发布时间】:2015-03-30 06:12:39 【问题描述】:

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

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 位整数。

【问题讨论】:

首先,检查明显的,模拟器上运行的二进制图像是正确的。然后 - 也许您的模拟指令之一没有正确设置进位或零标志。也许正在使用 BIT 指令并且没有正确模拟(这很奇怪)。一个标志位可能正在被一条指令清除,而它应该被单独留下。您应该在 EhBASIC 中找到显示数字的例程,将其反汇编,然后开始寻找线索。 【参考方案1】:

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

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

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

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

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

【讨论】:

当我在 FPGA 上创建 6502 克隆时,我发现在已建立的 6502 仿真器(在我的案例中为 VICE)中运行相同的代码非常有帮助,该仿真器充满了自定义仪器,然后将跟踪输出与在我的设计上运行 HDL 模拟器的跟踪进行比较。如果操作正确,您会看到类似“啊,前 74214 次操作的内部状态都相同,但我们偏离 VICE”之类的内容,这使您能够快速将问题部分归零。 Lee Davison 的增强型 6502 BASIC 的代码可从 6502.org 获得,但我没有看到主页上的直接链接,the forum says 作者去世了,有人询问许可状态。所以这还不清楚。

以上是关于MOS 6502 仿真器导致增强型基本以科学计数法输出的主要内容,如果未能解决你的问题,请参考以下文章

jchdl - RTL实例 - MOS6502 ALU

将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]

Python入门-2编程基本概念:09浮点数-自动转换-强制转换-增强赋值运算符

如何选择最适合的MOS管驱动电路?

硬件电机-MOS管驱动电路详解

电路中的pmos,nmos管是啥?有啥作用