224. Atributos de registro de la dataclass PPU
Crear la dataclass PPU con atributos de registro explícitos.
Lección 224 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_224_ppu_dataclass_register_attributes.py
Archivo a crear
emulator/ppu/ppu.pyClase a implementar
PPUPor qué existe este paso
La CPU se comunica con la Unidad de Procesamiento de Imagen (PPU) de la NES mediante registros hardware visibles para la CPU en las direcciones $2000-$2007. No son bytes normales de RAM; son registros hardware con nombre y significados específicos.
Para este primer paso de la PPU, solo creamos el estado de los registros. Todavía no implementamos lecturas, escrituras, renderizado, VBlank, scroll, VRAM ni DMA.
Esta prueba verifica que existen los campos originales de registro de PPU visibles para la CPU. No exige que estos sean los únicos campos para siempre. Pasos posteriores pueden añadir estado interno de la PPU como ppu_bus, vram_addr o addr_latch.
Ventana de registros de PPU visibles para la CPU
$2000 PPUCTRL -> ctrl
$2001 PPUMASK -> mask
$2002 PPUSTATUS -> status
$2003 OAMADDR -> oam_addr
$2004 OAMDATA -> oam_data
$2005 PPUSCROLL -> scroll
$2006 PPUADDR -> addr
$2007 PPUDATA -> dataDecisión de diseño importante
Usa campos enteros explícitos, de forma similar a los registros de la CPU. Esto mantiene sencilla la depuración y hace visible el modelo hardware:
assert ppu.ctrl == 0x80No añadas OAMDMA aquí. OAMDMA se accede en la dirección de CPU $4014 y dispara una copia DMA de 256 bytes a la memoria de sprites. Está relacionado con la PPU, pero no forma parte de la ventana normal de registros de PPU $2000-$2007.
Pseudocódigo de implementación sugerido
from dataclasses import dataclass
@dataclass
class PPU:
ctrl: int = 0
mask: int = 0
status: int = 0
oam_addr: int = 0
oam_data: int = 0
scroll: int = 0
addr: int = 0
data: int = 0Ejecutar esta lección
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_224_ppu_dataclass_register_attributes.py -v