【问题标题】:GameBoy Classis Emulator - How to initialise VRAM (0x8000)GameBoy 经典模拟器 - 如何初始化 VRAM (0x8000)
【发布时间】:2019-08-13 22:01:28
【问题描述】:

我目前正在编写一个 GameBoy Classis 模拟器。这是 GitHub-repo (https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator)。

CPU 指令似乎工作正常。我将这些指令与这个 gameboy 调试器 (http://bgb.bircd.org/) 的指令进行了比较。对于俄罗斯方块即时执行相同的指令。

我的问题是关于图形的。我已经实现了一个从正确地址获取图块的函数(取决于使用的图块集)。但是我不知道如何初始化视频 RAM(@地址 0x8000)。我将内存中的 32kB 俄罗斯方块 rom 从地址 0x0000 复制到 0x7FFF。因此,从 0x8000 开始的所有内容都没有在这里初始化。在调试工具和我的代码中都没有写入 vram 的内容(来自 cpu 操作码指令)。

因此,我预计我将不得不初始化 VRAM。但是,当某些内容写入 VRAM 时,我无法在线找到任何资源。

所以我的问题: 哪个 gameboy 模拟器实例负责复制 VRAM 中的图块。

我已经尝试过的:

用另一个模拟器调试 -> 这表明没有 cpu 指令复制到 VRAM。

查看 Github 上的各种 gameboy 模拟器 -> 找不到任何初始化 VRAM 的人

如果有人能帮助我,我将非常感激。

问候 雪纳瑞S

【问题讨论】:

    标签: c++ emulation dmg gameboy


    【解决方案1】:

    在 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 不会自己做任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-22
      • 2021-11-03
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多