032. Ldx página cero

Añadir LDX página cero ($A6).

Lección 32 de 356 · tests/chapter_01_cpu/test_032_LDX_zero_page.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes.ldx_zero_page
opcodes.OPCODE_TABLE[$A6]

Por qué existe este paso

Tras el LDX inmediato, esta lección añade la primera codificación de LDX respaldada por memoria. El manejador combina el cálculo de dirección de página cero ya existente, una lectura del bus y la operación de valor ldx ya existente.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def ldx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    ldx(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA6: ldx_zero_page,
}

Invariantes importantes

  • $A6 se corresponde con ldx_zero_page
  • zero_page obtiene un byte de operando y devuelve una dirección en la página $00
  • el manejador lee esa dirección y pasa el valor resultante a ldx
  • la instrucción completa avanza PC en dos bytes y ldx actualiza los flags

Concepto erróneo habitual

No pases la dirección de página cero directamente a ldx; LDX carga el byte almacenado en esa dirección.

Fuera de alcance

  • las codificaciones de LDX indexadas y en modo absoluto
  • cambios en zero_page o ldx
  • la temporización de ciclos

Ejecutar esta lección

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