030. Instrucción ldx

Añadir la instrucción central LDX.

Lección 30 de 356 · tests/chapter_01_cpu/test_030_instruction_ldx.py

Archivo a actualizar

emulator/cpu/instructions.py

Ubicación

instructions.ldx, beside lda and sta

Por qué existe este paso

LDX inicia la siguiente familia de cargas preservando el límite entre instrucción y opcode establecido para LDA. La instrucción central recibe un valor ya resuelto, lo almacena en X y aplica las mismas reglas de Zero/Negative que lda.

Implementación de ejemplo completa

# emulator/cpu/instructions.py
def ldx(cpu, value) -> None:
    cpu.x = value
    cpu._update_zero_and_negative_flags(cpu.x)

Invariantes importantes

  • ldx recibe un valor, no una dirección
  • X recibe el valor mientras A e Y permanecen sin cambios
  • Zero se activa exactamente para $00 y se desactiva en cualquier otro caso
  • Negative refleja el bit 7 y se desactiva cuando el bit 7 es cero

Concepto erróneo habitual

No obtengas un operando ni leas el bus dentro de ldx; los manejadores de opcode realizarán el direccionamiento y el acceso a memoria antes de llamar a esta instrucción.

Fuera de alcance

  • todos los manejadores de opcode de LDX y las entradas de la tabla de opcodes
  • la integración de página cero,Y con un opcode
  • la posterior refactorización de FlagsHandler

Ejecutar esta lección

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