009. Paso de la CPU
Ejecutar el primer opcode: LDA inmediato ($A9).
Lección 9 de 356 · tests/chapter_01_cpu/test_009_cpu_step.py
Archivo a actualizar
emulator/cpu/cpu.pyUbicación
CPU.stepReferencia
https://www.nesdev.org/wiki/Instruction_reference#LDAPor qué existe este paso
CPU.step introduce el bucle mínimo de captura-decodificación-ejecución. El LDA inmediato lee el byte que sigue directamente al opcode $A9 y lo almacena en el acumulador A.
Implementación de ejemplo completa
class CPU:
# Keep the state, fetch, and reset behavior from earlier tests.
def step(self) -> None:
opcode = self.fetch_byte()
if opcode == 0xA9:
self.a = self.fetch_byte()
return
raise NotImplementedError(
f"Opcode {opcode:02X} not implemented"
)Cronología de ejecución
PC=$8000 -> fetch $A9 -> PC=$8001
PC=$8001 -> fetch operand $42 -> PC=$8002 -> A=$42Invariantes importantes
- un paso ejecuta exactamente una instrucción
- un opcode desconocido falla de forma visible
- el LDA inmediato consume dos bytes en total
Error común
El operando $42 es un valor, no una dirección. El modo inmediato no realiza otra búsqueda en el bus usando $0042.
Fuera de alcance
- actualización de las banderas Zero y Negative, introducida en el Test 010
- otros modos de direccionamiento de LDA
- tablas de opcodes y conteos de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_009_cpu_step.py -v