GameBoy Classic模拟器 - 如何初始化VRAM(0x8000)

3
我正在编写GameBoy Classic模拟器。这是GitHub存储库 (https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator)。
CPU指令似乎工作正常。我将指令与此gameboy调试器 (http://bgb.bircd.org/) 中的指令进行了比较。对于Tetris,我执行相同的指令。
我的问题是关于图形方面的。我已经实现了一个从正确地址获取瓷砖的函数(取决于使用的瓷砖集)。然而,我不知道如何初始化Video Ram (@地址0x8000)。我将32kB Tetris rom从地址0x0000复制到0x7FFF的内存中。因此,从0x8000开始的所有内容都没有在此处初始化。无论在调试工具中还是在我的代码中,都没有任何东西被写入vram(从cpu opcode指令)。
因此,我期望我将不得不初始化VRAM。但是我找不到任何在线资源,当写入VRAM时会发生什么。
所以我的问题是: 哪个游戏机模拟器实例负责将瓷砖复制到VRAM中。
我已经尝试过的事情: 使用另一个模拟器进行调试 -> 这向我展示了没有CPU指令复制到VRAM。 查看GitHub上的各种GameBoy模拟器 -> 找不到任何一个初始化VRAM的。
如果有人能帮助我,我将非常感激。
问候 schnauzbartS
1个回答

3
在Gameboy Classic上,只有一种方式可以手动使用CPU指令复制数据来初始化VRAM。这是游戏的责任。例如,在引导程序ROM中可以看到此操作: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不会自动执行任何操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接