031. Ldx inmediato

Añadir LDX inmediato ($A2).

Lección 31 de 356 · tests/chapter_01_cpu/test_031_LDX_immediate.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes import of ldx
opcodes.ldx_immediate
opcodes.OPCODE_TABLE[$A2]

Por qué existe este paso

El test 030 introdujo la instrucción ldx a nivel de valor. Esta lección conecta su primera codificación en código máquina obteniendo el operando literal y delegando el comportamiento del registro y los flags en esa instrucción ya existente.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx


def ldx_immediate(cpu: CPU):
    ldx(cpu, immediate(cpu))


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA2: ldx_immediate,
}

Invariantes importantes

  • $A2 se corresponde con ldx_immediate
  • el modo inmediato obtiene exactamente un byte, por lo que la instrucción completa avanza PC en dos
  • el propio byte de operando se carga en X; no se utiliza como dirección
  • ldx sigue siendo responsable de actualizar Zero y Negative

Concepto erróneo habitual

No leas memoria en el valor numérico del operando. A2 42 carga el propio $42 en X.

Fuera de alcance

  • las codificaciones de LDX en modo página cero, página cero,Y y absoluto
  • cambios en immediate o ldx
  • la temporización de ciclos

Ejecutar esta lección

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