277. Таблица имён с палитрой NES
Рендеринг фреймбуфера таблицы имён с использованием палитры NES по умолчанию.
Урок 277 из 356 · tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py
Файл для обновления
emulator/rendering/nametable_renderer.pyПочему этот шаг важен
Универсальный рендерер таблицы имён поддерживает пользовательские палитры
nametable_to_framebuffer(nametable_bytes, pattern_table_bytes, palette)Это полезно для тестов и отладочных палитр. Теперь, когда у нас есть NES_PALETTE_RGB, добавим вспомогательную функцию с палитрой по умолчанию:
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)Это повторяет вспомогательную функцию таблицы шаблонов из предыдущего шага рендеринга.
Что она должна делать
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)
-> nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)Пример возможной реализации
from emulator.rendering.nes_palette import NES_PALETTE_RGB
def nametable_to_nes_framebuffer(
nametable_bytes: bytes,
pattern_table_bytes: bytes,
) -> Framebuffer:
return nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)Важное упрощение
Здесь по-прежнему используется одна общая палитра для каждого тайла. Пока не декодируется 64-байтная таблица атрибутов и не читается палитровая RAM PPU по адресам $3F00-$3F1F. Это полезно как отладочный/простой рендерер. Более поздний рендерер будет использовать таблицу атрибутов для выбора между разными фоновыми палитрами.
Важное правило для фикстур
Используйте только синтетические байты таблицы имён/CHR. Не используйте в этом тесте данные из коммерческих ROM.
Вне рамок этого шага
- выбор палитры по таблице атрибутов
- поиск в палитровой RAM PPU
- скроллинг
- спрайты
- OAMDMA
- отображение через pygame
Запустить этот урок
uv run pytest tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py -v