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