246. Constantes de bits de PPUCTRL

Define las constantes de bits de PPUCTRL ($2000).

Lección 246 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_246_ppuctrl_bit_constants.py

Referencia

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

Archivo a actualizar

emulator/ppu/ppu.py

Constantes a añadir

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

Por qué existe este paso

PPUCTRL es el registro de control escribible por la CPU en $2000. Ocupa un byte y cada bit o campo de bits controla un comportamiento distinto de la PPU.

La disposición de los bits se suele escribir como

VPHB SINN

Significado

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

Alcance importante

Este test solo requiere constantes con nombre. La mayor parte del comportamiento controlado por estos bits se implementará más adelante, cuando existan el renderizado, VBlank/NMI y los sprites.

Comportamiento ya implementado

CTRL_VRAM_INCREMENT_BY_32 controls whether PPUDATA increments vram_addr by
1 or 32.

Pseudocódigo de implementación sugerido

# 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

Fuera del alcance

  • generación de NMI
  • comportamiento del tamaño de sprite
  • comportamiento de renderizado de pattern table
  • comportamiento de nametable base
  • comportamiento del pin EXT maestro/esclavo

Ejecutar esta lección

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