GameBoy Classis Emulator - Как инициализировать VRAM (0x8000) - PullRequest
2 голосов
/ 22 марта 2019

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

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

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

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

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

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

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

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

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

Привет schnauzbartS

1 Ответ

1 голос
/ 23 марта 2019

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

...