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.pySímbolos a actualizar
the instruction import and OPCODE_TABLEPor 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.stepconsume 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