我目前正在编写 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/

10-11 16:17