问题标签 [chip-8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
87 浏览

c - 如何在不停止 Xlib 中的程序的情况下等待输入

问题是,我正在用 C 编写一个芯片 8 仿真器,我正在使用一个使用 Xlib 的库,用于编写参与输入的精灵等,该库等待输入的方法是这样的:

}

当我调用此方法时,程序停止等待输入,我需要一个仅在我按下或释放按钮时调用的方法。

0 投票
1 回答
82 浏览

c++ - 变量在使用赋值语句赋值后恢复为先前的值

我正在编写一个简单的chip8 模拟器。

我有一个名为 programCounter(PC) 的值。

问题是,一旦我从指令 1(修改 PC)返回,PC 将返回到被该方法修改之前的值。

例子

在指令 1 分配给 PC 之前,PC 的值为 203。

在指令 1 之后,PC 的值为 (0x0NNN & 0xFFFE)。

通过programCounter++,它返回203而不是增量。

对于指令 1NNN("https://en.wikipedia.org/wiki/CHIP-8#Opcode_table"),它是一个简单的无条件跳转。

解码器所做的只是删除 16 位指令的指令的前 4 位。例如,0x1234 被发送到 1NNN 指令/方法,234 代表指令的 NNN 部分。

我反汇编了程序,根据汇编,PC 被存储在内存中,一旦我到达“programCounter++;” 它从记忆中恢复。但是,对于指令 1,它不会将其权限写入寄存器 EAX 的内存。

我应该怎么做才能让编译器知道我希望它在我为其赋值时更新 PC 的内存位置,而不仅仅是更新寄存器?

PS 我尝试过编写内联汇编,但我对 x86 汇编不太熟练。我似乎无法将 register_EAX 移动到值的内存位置,因此我可以强制更新值,因为 EAX 具有正确的值,直到 PC 递增。

0 投票
1 回答
224 浏览

javascript - 指令 0x3000 和跳转指令在 CHIP-8 上的几乎所有游戏中重复

我是仿真新手,想开始编写 CHIP-8 解释器。但是,我面临一个问题。运行游戏时,例如 Brix,它绘制游戏没有问题(桨等),但在完成后,它只是卡在 0x3000 的循环中,然后,跳转指令跳转回0x3000。很明显 0x3000 是错误的,这就是它循环的原因,但我不明白为什么这对我来说是终身的。

游戏和 Chrome devtools 控制台的屏幕截图(游戏是 Brix,取自此处):https ://i.stack.imgur.com/a0wNM.png

在该屏幕截图中,在控制台中,您可以看到 0x3000 失败并进行跳转,然后跳转回到 0x3000,并且循环重复。大多数(如果不是所有)游戏都会发生这种情况。我怀疑这与延迟计时器有关,因为 0x3000 正在检查 v0 === 0,但它失败了,然后转到跳转指令。

这是我的主要 CHIP-8 课程:

0 投票
1 回答
71 浏览

c++ - 我如何传递一个元素以便能够在某个专业领域内进行评估?

我正在尝试制作一个在编译时生成大部分指令的 CHIP-8 仿真器。

所以我有一个像这样的 constexpr 数组:

而且我对数组的每个项目都有一个专业化,如下所示:

我遍历每个元素并以这种方式调用专业化:

我应该如何传递元素(hardCodedROM[p]),以便能够根据特定专业中的每个子掩码进行评估?

0 投票
1 回答
52 浏览

java - 将使用 Files.readAllBytes 加载的字节打印到数组中

我正在尝试用 java 编写一个 Chip8 模拟器,我遇到了一个关于readAllBytesJava 函数的问题Files。当我将用于测试的 ROM 中的字节加载到模拟器的“内存”数组中时,我尝试打印这些字节以查看它们是否正确进入内存。我曾经Integer.toHexString将这些字节视为十六进制值,并将它们与我使用十六进制编辑器加载的实际文件进行比较,但它给我的输出很奇怪:

文件的第一个字节:

测试输出:

代码:

这些值只是Integer.toHexString给出的表示中的一个错误,并且这些值正在正确加载,还是它们真的被错误地加载了?为什么用 f 填充?

0 投票
2 回答
89 浏览

c++ - C ++写入字符串流无法正常工作

这些天我一直在为 CHIP-8 制作汇编程序,今天我尝试实现参数以使操作码正常工作。但是,当我必须编写 2 个参数来完成操作码时,我有以下代码:

最小可重现示例:

正如代码注释所描述的,所持有的值要么是错误的,要么是过时的。可能是什么问题,为什么以及如何解决?

感谢所有帮助,谢谢!

0 投票
0 回答
9 浏览

python - 为什么这个chip8模拟器用ands ors and shifts转换这个操作码?

我正在阅读可以在这里找到的c​​hip8 模拟器的源代码:https ://github.com/maranas/pyChip8Emu/blob/master/chip8.py 。在第 420 行,它是来自 0xF000 二进制文件的操作码。此外,它将操作码和或与内存中的下一个字节一起移动。为什么要进行这些转换?

以上是周围代码的摘录,我希望这是足够的上下文来提供帮助。

0 投票
0 回答
10 浏览

chip-8 - 芯片 8 仿真器 16 位内存,但只有 12 位内存访问?

我正在制作一个 Chip 8 仿真器,但遇到了问题。芯片 8 有 4kb 的 ram(您通常使用 16 位地址访问 ram)。跳转操作用 12 位定义跳转的位置。您应该如何将指令指针设置为例如地址 4016?

如果我理解错了,我正在使用本指南

谢谢帮助

0 投票
0 回答
18 浏览

c - 在chip8模拟器中实现绘图指令时遇到问题

大家好,基本上我正在创建一个chip8模拟器,但我在实现绘图指令时遇到了一些麻烦。芯片 8 的屏幕为 64x32 我有一个大小为 32 的 uint64_t 数组。芯片 8 使用单色显示,其中每个位是该像素是打开还是关闭。所以现在我遍历该数组以获取该 64 位行。问题是我只想对与 xcordinate 及其之后的 8 位进行异或运算。不是整个 64 位行,只是 xcordinate 和它之后的 7 位以及我拥有的精灵字节。

到目前为止,这是我的代码。