Эмулятор GameBoy Classis — как инициализировать VRAM (0x8000)

В настоящее время я программирую эмулятор GameBoy Classis. Вот репозиторий GitHub (https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator ).

Инструкции процессора, кажется, работают нормально. Я сравнил инструкции с инструкциями этого отладчика Gameboy (http://bgb.bircd.org/) . Для тетриса я выполняю те же инструкции.

У меня вопрос по графике. Я реализовал функцию, которая извлекает плитки с правильного адреса (в зависимости от того, какой набор плиток используется). Однако я не знаю, как инициализировать Video Ram (@ адрес 0x8000). Я скопировал в память 32-килобайтный тетрис-ром с адреса 0x0000 на 0x7FFF. Поэтому все, начиная с 0x8000, здесь не инициализируется. Ни в инструменте отладки, ни в моем коде ничего не пишется в vram (из инструкции по коду операции процессора).

Поэтому я ожидал, что мне придется инициализировать VRAM. Однако я не смог найти никаких ресурсов в Интернете, когда что-то записывается в VRAM.

Итак, мой вопрос: какой экземпляр эмулятора Gameboy отвечает за копирование тайлов в VRAM.

Что я уже пробовал:

Отладка с другим эмулятором -> это показало мне, что никакие инструкции процессора не копируются в VRAM.

Глядя на различные эмуляторы Gameboy на Github -> не смог найти никого, кто бы инициализировал VRAM

Если кто-то смог помочь мне, я был бы очень благодарен.

Привет шнауцбартС


person schnauzbartS    schedule 22.03.2019    source источник


Ответы (1)


В Gameboy Classic есть только один способ инициализировать VRAM — вручную скопировать данные с инструкциями процессора. Это ответственность игры. Это можно увидеть, например, в загрузочном ПЗУ:

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. Но, опять же, игра должна явно запускать его. Геймбой ничего не делает сам по себе.

person creker    schedule 22.03.2019