NES TDD

275. Таблица шаблонов с палитрой NES

Рендеринг фреймбуфера таблицы шаблонов с использованием палитры NES по умолчанию.

Урок 275 из 356 · tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py

Файл для обновления

emulator/rendering/pattern_table_renderer.py

Почему этот шаг важен

Универсальный рендерер таблицы шаблонов уже поддерживает пользовательские палитры

pattern_table_to_framebuffer(pattern_table_bytes, palette)

Это полезно для тестов и отладочных палитр. Теперь, когда у нас есть RGB-аппроксимация палитры NES по умолчанию, добавим удобную вспомогательную функцию:

pattern_table_to_nes_framebuffer(pattern_table_bytes)

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

Что она должна делать

pattern_table_to_nes_framebuffer(pattern_table_bytes)
    -> pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)

Пример возможной реализации

from emulator.rendering.nes_palette import NES_PALETTE_RGB


def pattern_table_to_nes_framebuffer(
    pattern_table_bytes: bytes,
) -> Framebuffer:
    return pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)

Почему бы не сделать NES_PALETTE_RGB аргументом по умолчанию?

Это тоже сработало бы

def pattern_table_to_framebuffer(pattern_table_bytes, palette=NES_PALETTE_RGB):
    ...

Но отдельная вспомогательная функция понятнее для курса

pattern_table_to_framebuffer(..., palette)
    custom palette path

pattern_table_to_nes_framebuffer(...)
    default NES palette path

Примечание: этот тест использует только синтетические байты CHR. Не используйте в этом тесте данные CHR из коммерческих ROM.

Вне рамок этого шага

  • отображение через pygame
  • запись файлов изображений
  • рендеринг таблицы имён/фона
  • поиск в палитровой RAM PPU
  • акцентированные цвета PPUMASK
  • спрайты

Запустить этот урок

uv run pytest tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py -v