GameBoy Classis Emulator-如何初始化VRAM(0x8000)

时间:2019-03-22 20:59:25

标签: c++ emulation dmg gameboy

我目前正在编程GameBoy Classis Emulator。这是GitHub仓库(https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator)。

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

我的问题是关于图形的。我实现了一个从正确的地址中获取图块的功能(取决于所使用的图块集)。但是我不知道如何初始化Video Ram(@地址0x8000)。我将内存中的32kB Tetris rom从地址0x0000复制到0x7FFF。因此,从0x8000开始的所有内容都不会在此处初始化。在Debugging工具中或在我的代码中,都没有将任何内容写入vram(根据cpu opcode指令)。

因此,我希望必须初始化VRAM。但是,当某些内容写入VRAM时,我无法在线找到任何资源。

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

我已经尝试过的:

使用其他仿真器进行调试->这表明没有cpu指令复制到VRAM。

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

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

问候 schnauzbartS

1 个答案:

答案 0 :(得分: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不会自己做任何事情。