293. Validación: la CPU lee el mando en 4016
PRUEBA DE VALIDACIÓN: un programa de CPU lee bits del mando desde $4016.
Lección 293 de 356 · tests/chapter_07_controller_input/test_293_VALIDATION_cpu_reads_controller_4016.py
Este no es un paso de implementación para el estudiante.
No hay nada nuevo que construir en este archivo. Esta prueba valida que las piezas ya construidas funcionan juntas:
CPU instructions
-> CpuBus.write($4016, value)
-> Controller.write_strobe(value)
-> CpuBus.read($4016)
-> Controller.read_bit()
-> CPU stores observed bits into RAMPor qué existe esta validación
Las pruebas anteriores demostraron el objeto Controller y el enrutamiento de $4016 en CpuBus de forma aislada. Esta prueba demuestra que una secuencia real de instrucciones de la CPU puede usar esa ruta.
Referencias
https://www.nesdev.org/wiki/Standard_controller
https://www.nesdev.org/wiki/Controller_reading_codeForma del sondeo del mando de la NES
write 1 to $4016
write 0 to $4016
read $4016 eight timesLas ocho lecturas devuelven
A, B, Select, Start, Up, Down, Left, RightPrograma mínimo usado aquí
LDA #$01
STA $4016 ; strobe high, capture live buttons
LDA #$00
STA $4016 ; strobe low, serial reads advance
LDA $4016
STA $0000 ; A bit
LDA $4016
STA $0001 ; B bit
... repeated through Right bit ...Distinción importante
Esta validación almacena cada bit serie en un byte de RAM independiente por claridad. Muchos ejemplos de ensamblador de la NES desplazan los bits hacia un único byte resultado. Eso es política del código del juego, no comportamiento del hardware del mando.
Fuera de alcance
- Mapeo de teclado de pygame
- Bucle de main.py
- Puerto de mando 2
- Mandos de expansión de Famicom
- Comportamiento de glitch de lectura de DMC/mando
- Fixtures de ROM comerciales
Ejecutar esta lección
uv run pytest tests/chapter_07_controller_input/test_293_VALIDATION_cpu_reads_controller_4016.py -v