我目前正在编写 GameBoy Classis Emulator。这是 GitHub-repo ( https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator )。
CPU 指令似乎工作正常。我将这些指令与这个 gameboy 调试器 (http://bgb.bircd.org/) 的指令进行了比较。对于俄罗斯方块,我执行相同的指令。
我的问题是关于图形的。我已经实现了一个从正确地址获取图块的函数(取决于使用的图块集)。但是我不知道如何初始化 Video Ram (@地址 0x8000)。我将内存中的 32kB 俄罗斯方块 rom 从地址 0x0000 复制到 0x7FFF。因此,从 0x8000 开始的所有内容都不会在这里初始化。调试工具和我的代码中都没有写入 vram(来自 cpu 操作码指令)。
因此我预计我将不得不初始化 VRAM。但是,当某些内容写入 VRAM 时,我在网上找不到任何资源。
所以我的问题:
gameboy 模拟器的哪个实例负责复制 VRAM 中的图块。
我已经尝试过的:
用另一个模拟器调试 -> 这表明没有 cpu 指令复制到 VRAM。
查看 Github 上的各种游戏机模拟器 -> 找不到任何初始化 VRAM 的人
我有人能够帮助我,我将非常感激。
问候
雪纳瑞
最佳答案
在 Gameboy Classic 上,只有一种初始化 VRAM 的方法——使用 CPU 指令手动复制数据。这是游戏的责任。例如,您可以在 bootstrap ROM 中看到这一点:
XOR A ; $0003 Zero the memory from $8000-$9FFF (VRAM)
LD HL,$9fff ; $0004
Addr_0007:
LD (HL-),A ; $0007
BIT 7,H ; $0008
JR NZ, Addr_0007 ; $000a
在 Gameboy Color 上,还有另一种写入 VRAM 的方法 - DMA。但是,同样,游戏必须明确触发它。 Gameboy 不会自己做任何事情。
关于c++ - GameBoy 经典模拟器 - 如何初始化 VRAM (0x8000),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55307702/