chip-8 - Chip-8程序可以跳转到奇数地址吗?

标签 chip-8

我正在编写一个chip-8 解释器。我有我的模拟硬件、指令执行、UI 等。一切都准备好了,所以我开始实际加载和执行真正的 Chip8 程序。

在我在网上发现的 zip 存档中,有几个游戏似乎存在非法跳转调用。

来自CowGod's specification它说:

All instructions are 2 bytes long and are stored most-significant-byte first. In memory, the first byte of each instruction should be located at an even addresses. If a program includes sprite data, it should be padded so any instructions following it will be properly situated in RAM.

这似乎非常坚决,不可能有一条从奇数内存地址执行的指令,因此我对解释器进行了编码,结果是我们最终尝试去到奇数内存地址(主要是因为我假设我“如果发生这种情况,我读到的内容有误)。

然而,我包中的两个游戏(INVADERSBLITZ)似乎立即以跳转调用开始(他们用自己的ascii名字签署了ROM,所以第一条指令是调用签名后的跳转。

前者以0x12 0x25开头,第二个以0x12 0x17开头。这两个都指向跳转调用到奇数地址(分别为 0x225 和 0x217),然后在我的模拟器中失败。查看它们指向的那些地址,它们看起来包含有效指令(前者的字节 25 包含 0x6000 (LD V0, 00),后者的字节 17 指向 0xA341 (LD我,341)。

我是否对规范的解释过于严格,并且预计实际应用程序不会被填充并且可以在奇数地址上运行?

最佳答案

问题的答案是(基于评论):Chip-8 规范显然打算包含指令从偶数地址开始的要求,但是,由于它没有被非常严格地指定(规范仅提到它)顺便使用术语“应该”而不是“必须”),并且指令集可以很好地处理不在偶数地址的指令(例如,跳转指令可以跳转到任何地址,而不仅仅是偶数地址) ,模拟器开发人员往往会忽略这一要求。因此,Chip-8 存在许多在奇数地址具有指令的二进制文件,因此 future 的仿真器不太可能强制执行此要求。

关于chip-8 - Chip-8程序可以跳转到奇数地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433033/

相关文章:

c++ - 词法分析器不断跳过最终标记

c - 如何在 Xlib 中等待输入而不停止程序

javascript - 我根据规范进行的chip8实现与互联网上的开源代码不同。需要澄清

opcode - 在chip-8操作码FX65中增加I

c - 使用 GLUT 和 C 的闪烁 2D 纹理

c++ - 如何通过某个元素可以在特定专业范围内进行评估?

javascript - Chip8 仿真器上的碰撞检测

CHIP-8 SDL 渲染问题