gpt4 book ai didi

c++ - GameBoy 经典模拟器 - 如何初始化 VRAM (0x8000)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:26 28 4
gpt4 key购买 nike

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

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

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

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

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

我已经尝试过的:

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

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

如果有人能够帮助我,我将不胜感激。

问候语雪诺巴特S

最佳答案

在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com