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#PPUCTRLArchivo a actualizar
emulator/ppu/ppu.pyConstantes 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_ENABLEPor 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 SINNSignificado
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 fieldAlcance 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 << 7Fuera 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