033. Ldx página cero y

Añadir LDX página cero,Y ($B6).

Lección 33 de 356 · tests/chapter_01_cpu/test_033_LDX_zero_page_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes.ldx_zero_page_y
opcodes.OPCODE_TABLE[$B6]

Por qué existe este paso

El test 029 introdujo el helper de dirección de página cero,Y con envoltura. Esta lección le da a ese helper su primer uso como opcode, combinándolo con una lectura de memoria y la instrucción ldx ya existente.

Implementación de ejemplo completa

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0xB6: ldx_zero_page_y,
}

Invariantes importantes

  • $B6 se corresponde con ldx_zero_page_y
  • el índice es Y, no X
  • la base más Y envuelve a ocho bits antes de la lectura del bus
  • se consume un byte de operando, y ldx es responsable de X y de las actualizaciones de flags

Concepto erróneo habitual

El registro de destino de LDX no determina el registro de índice: esta codificación usa Y, y $FF,Y con Y=$01 lee $0000 en lugar de $0100.

Fuera de alcance

  • cambiar zero_page_y o ldx
  • las codificaciones de LDX en modo absoluto
  • la temporización de ciclos

Ejecutar esta lección

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