NES TDD

246. Битовые константы PPUCTRL

Определить битовые константы PPUCTRL ($2000).

Урок 246 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_246_ppuctrl_bit_constants.py

Ссылка

https://www.nesdev.org/wiki/PPU_registers#PPUCTRL

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

emulator/ppu/ppu.py

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

CTRL_BASE_NAMETABLE_MASK
CTRL_VRAM_INCREMENT_BY_32
CTRL_SPRITE_PATTERN_TABLE
CTRL_BACKGROUND_PATTERN_TABLE
CTRL_SPRITE_SIZE_8X16
CTRL_MASTER_SLAVE_SELECT
CTRL_NMI_ENABLE

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

PPUCTRL — это доступный для записи CPU регистр управления по адресу $2000. Это один байт, и каждый бит или битовое поле управляет отдельным поведением PPU.

Раскладка битов обычно записывается как

VPHB SINN

Значение

V = NMI enable at VBlank
P = master/slave select, mostly unused on normal NES
H = sprite size, 8x8 or 8x16
B = background pattern table address
S = sprite pattern table address
I = PPUDATA VRAM address increment, +1 or +32
NN = base nametable select, two-bit field

Важные рамки

Этот тест требует только именованных констант. Большая часть поведения, управляемого этими битами, будет реализована позже, когда появятся рендеринг, VBlank/NMI и спрайты.

Уже реализованное поведение

CTRL_VRAM_INCREMENT_BY_32 controls whether PPUDATA increments vram_addr by
1 or 32.

Предлагаемый псевдокод реализации

# PPUCTRL ($2000) bits: VPHB SINN
CTRL_BASE_NAMETABLE_MASK = 0b0000_0011
CTRL_VRAM_INCREMENT_BY_32 = 1 << 2
CTRL_SPRITE_PATTERN_TABLE = 1 << 3
CTRL_BACKGROUND_PATTERN_TABLE = 1 << 4
CTRL_SPRITE_SIZE_8X16 = 1 << 5
CTRL_MASTER_SLAVE_SELECT = 1 << 6
CTRL_NMI_ENABLE = 1 << 7

Вне рамок

  • генерация NMI
  • поведение размера спрайтов
  • поведение рендеринга таблицы шаблонов
  • поведение базовой таблицы имён
  • поведение вывода master/slave EXT

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

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