050. Instrucciones de transferencia

Añadir las instrucciones principales TAX, TXA, TAY y TYA.

Lección 50 de 356 · tests/chapter_01_cpu/test_050_transfer_instructions.py

Archivo a actualizar

emulator/cpu/instructions.py

Ubicaciones

instructions.tax
instructions.txa
instructions.tay
instructions.tya

Por qué existe este paso

Estas operaciones de direccionamiento implícito copian entre A, X e Y sin obtener un operando. Cada valor de destino utiliza luego la misma actualización de Zero/Negative ya empleada por las instrucciones de carga.

Ejemplo completo de implementación

# emulator/cpu/instructions.py
def tax(cpu: CPU):
    cpu.x = cpu.a
    cpu._update_zero_and_negative_flags(cpu.x)


def txa(cpu: CPU):
    cpu.a = cpu.x
    cpu._update_zero_and_negative_flags(cpu.a)


def tay(cpu: CPU):
    cpu.y = cpu.a
    cpu._update_zero_and_negative_flags(cpu.y)


def tya(cpu: CPU):
    cpu.a = cpu.y
    cpu._update_zero_and_negative_flags(cpu.a)

Invariantes importantes

  • TAX copia A en X, TXA copia X en A, TAY copia A en Y y TYA copia Y en A
  • el registro fuente permanece sin cambios
  • Zero se activa exactamente para $00 y Negative refleja el bit 7 del destino
  • ambos flags también se desactivan cuando el valor copiado ya no los satisface
  • estas funciones no obtienen bytes y no realizan acceso al bus

Error frecuente

Actualizar solo los flags que se activan deja estado obsoleto. Reutilizar cpu._update_zero_and_negative_flags con el registro de destino después de cada copia.

Fuera de alcance

  • importaciones de opcodes de transferencia y entradas en OPCODE_TABLE, introducidas en Test 051
  • transferencias del puntero de pila
  • temporización de ciclos

Ejecutar esta lección

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