NES TDD

258. Построение сетки отладки таблицы шаблонов

Реализуйте сетку отладки таблицы шаблонов.

Урок 258 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_258_build_pattern_table_debug_grid.py

Справка

https://www.nesdev.org/wiki/PPU_pattern_tables

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

emulator/ppu/chr_decoder.py

Функция для реализации

build_pattern_table_debug_grid(decoded_tiles: PatternTable) -> PatternTableDebugGrid

Константы для добавления

PATTERN_TABLE_TILES_PER_ROW = 16
CHR_TILE_WIDTH = 8
CHR_TILE_HEIGHT = 8
PATTERN_TABLE_DEBUG_GRID_SIZE = 128

Что делает этот шаг

Предыдущие тесты декодировали одну таблицу шаблонов в 256 отдельных плиток размером 8x8. Этот шаг располагает эти плитки в одну сетку размером 128x128 индексов цветов.

Макет

16 tiles across
16 tiles down
each tile is 8x8 pixels
16 * 8 = 128 pixels

Примеры

tile 0   -> top-left,     x=0,   y=0
tile 1   -> right of it,  x=8,   y=0
tile 16  -> next row,     x=0,   y=8
tile 255 -> bottom-right, x=120, y=120

Предлагаемый пример реализации

def build_pattern_table_debug_grid(decoded_tiles: PatternTable) -> PatternTableDebugGrid:
    if len(decoded_tiles) != PATTERN_TABLE_TILE_COUNT:
        raise ValueError("Pattern table debug grid requires 256 decoded tiles")

    grid = [
        [0 for _ in range(PATTERN_TABLE_DEBUG_GRID_SIZE)]
        for _ in range(PATTERN_TABLE_DEBUG_GRID_SIZE)
    ]

    for tile_index, tile in enumerate(decoded_tiles):
        tile_x = (tile_index % PATTERN_TABLE_TILES_PER_ROW) * CHR_TILE_WIDTH
        tile_y = (tile_index // PATTERN_TABLE_TILES_PER_ROW) * CHR_TILE_HEIGHT

        for row in range(CHR_TILE_HEIGHT):
            for col in range(CHR_TILE_WIDTH):
                grid[tile_y + row][tile_x + col] = tile[row][col]

    return grid

Примечание о синтетических данных

Этот тест использует крошечную синтетическую таблицу шаблонов, созданную внутри файла теста.

Вне области действия

  • генерация файлов
  • вывод изображения
  • цвета палитры RGB/NES
  • рендеринг фона таблицы имён
  • синхронизация PPU

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

uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_258_build_pattern_table_debug_grid.py -v