Как работают таймеры GPU / PPU на Gameboy? - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу эмулятор gameboy и приступил к реализации графики. Однако я не могу понять, как он работает с процессором, когда идут циклы синхронизации. Выполняет ли процессор определенное количество циклов (если так, сколько), а затем передает его в графический процессор? Или gameboy всегда находится в состоянии hblank / vblank и GPU использует процессор между ними? Я не могу найти никакой информации, которая помогает мне в этом, только как использовать контрольные регистры.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Ссылка дает больше общего ответа вместо специфики реализации, поэтому я хочу дать свои 2 цента.

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

Например, некоторые инструкции процессора читают и записывают память как часть одной инструкции. Это означает, что для завершения инструкции потребуется Gameboy CPU 4 (чтение) + 4 (запись). Итак, в эмуляторе вы выполняете чтение, передаете 4 цикла в GPU, делаете запись, передаете 4 цикла в GPU. Вы делаете то же самое для других компонентов, которые работают параллельно с процессором, как таймеры и звук.

На самом деле важно сделать это таким образом, вместо того, чтобы эмулировать всю инструкцию, а затем синхронизировать все остальное. Не знаю о реальных ПЗУ, но есть тестовые ПЗУ, которые проверяют это точное поведение. 8 циклов - это длительное время, и в середине нескольких обращений к памяти некоторые другие компоненты Gameboy могут внести изменения.

0 голосов
/ 05 сентября 2018

На этот вопрос ответили https://forums.nesdev.com/viewtopic.php?f=20&t=17754&p=225009#p225009

Оказывается, я совершенно не прав, и они совершенно разные.

Вот этот пост:

Процессор Game Boy и PPU работают параллельно. Основные тактовые частоты 4,2 МГц также точечные часы. Она делится на 2, чтобы сформировать 2,1 МГц ППУ тактовый сигнал доступа, разделенный на 4 для формирования многофазного тактового сигнала 1,05 МГц используется процессором.

Каждая строка сканирования имеет длину 456 точек (114 циклов ЦП) и состоит из режима 2 (Поиск OAM), режим 3 (активное изображение) и режим 0 (горизонтальный) гашение). Режим 2 имеет длину 80 точек (2 для каждой записи OAM), режим 3 около 168 плюс еще около 10 для каждого спрайта в данной строке, и режим 0 остальное. После прорисовки 144 строк развертки 10 линий режима 1 (вертикальное гашение), всего 154 строки или 70224 точки на экран. Процессор не видит VRAM (записи игнорируются, а чтения - $ FF) в режиме 3, но может и в других режимах. Процессор не видит OAM в режимах 2 и 3, но может в режимах гашения (0 и 1).

...