239. Registros internos de dirección/scroll de la ppu
Introduce los registros internos de scroll/dirección de la PPU.
Lección 239 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_239_ppu_internal_scroll_address_registers.py
Referencia
https://www.nesdev.org/wiki/PPU_registers#Internal_registersArchivo a actualizar
emulator/ppu/ppu.pyCampos a añadir
vram_addr: int = 0
temp_vram_addr: int = 0
fine_x: int = 0
second_write_toggle: bool = FalsePor qué existe este paso
PPUADDR ($2006), PPUSCROLL ($2005), PPUDATA ($2007) y el renderizado no usan únicamente campos de registro simples de un byte. La PPU tiene un estado interno de dirección/scroll.
Nombres habituales en nesdev
v = current VRAM address
t = temporary VRAM address
x = fine X scroll
w = first/second write toggleNombres del tutorial
vram_addr -> v
temp_vram_addr -> t
fine_x -> x
second_write_toggle -> wSignificado breve
- vram_addr es la dirección de memoria actual de la PPU usada por PPUDATA y el renderizado.
- temp_vram_addr se construye mediante escrituras de PPUADDR/PPUSCROLL antes de copiarse.
- fine_x almacena el desplazamiento de scroll horizontal fino, 0-7. (desplazamiento de scroll horizontal a nivel de píxel dentro de un tile)
- second_write_toggle registra si la próxima escritura a $2005/$2006 es la primera o la segunda.
Pseudocódigo de implementación sugerido
@dataclass
class PPU:
...
vram_addr: int = 0
temp_vram_addr: int = 0
fine_x: int = 0
second_write_toggle: bool = FalseFuera de alcance
- comportamiento de PPUSCROLL
- temporización precisa de recarga de scroll en el renderizado
- renderizado de nametables
Ejecutar esta lección
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_239_ppu_internal_scroll_address_registers.py -v