051. Opcodes de transferencia

Registrar las cuatro instrucciones de transferencia como opcodes implícitos.

Lección 51 de 356 · tests/chapter_01_cpu/test_051_transfer_opcodes.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a actualizar

the instruction import and OPCODE_TABLE

Por qué existe este paso

Las operaciones de transferencia del test 050 ya tienen la misma forma de un argumento que CPU.step espera de una entrada de la tabla de opcodes. Las instrucciones implícitas no tienen operando que decodificar, así que un manejador de opcode intermedio no añadiría ningún comportamiento.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import (
    lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya,
)

OPCODE_TABLE = {
    # ...the existing load/store entries...
    0xAA: tax,
    0x8A: txa,
    0xA8: tay,
    0x98: tya,
}

Invariantes importantes

  • cada opcode se asigna directamente a su función de instrucción
  • CPU.step consume solo el opcode, dejando PC avanzado un byte
  • el comportamiento de transferencia y de las banderas Zero/Negative permanece en la capa de instrucciones

Concepto erróneo habitual

No crees envoltorios al estilo tax_implied ni obtengas un operando; estas cuatro instrucciones usan direccionamiento implícito y ya coinciden con el contrato de despacho.

Fuera de alcance

  • la refactorización de FlagsHandler introducida en el test 052
  • ADC y sus manejadores de opcode
  • la contabilidad de ciclos

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_051_transfer_opcodes.py -v