035. Ldx absoluto y

Añadir LDX absoluto,Y ($BE).

Lección 35 de 356 · tests/chapter_01_cpu/test_035_LDX_absolute_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes.ldx_absolute_y
opcodes.OPCODE_TABLE[$BE]

Por qué existe este paso

Esta lección completa la familia de opcodes de LDX disponible hasta este punto reutilizando el helper de absoluto,Y ya existente. Como con las demás formas basadas en memoria, el manejador resuelve y lee el operando antes de pasar su valor a ldx.

Implementación de ejemplo completa

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0xBE: ldx_absolute_y,
}

Invariantes importantes

  • $BE se corresponde con ldx_absolute_y
  • la dirección base little-endian se indexa con Y, no con X
  • el byte en la dirección indexada se pasa a ldx
  • se consumen dos bytes de operando, por lo que la instrucción completa avanza PC en tres

Concepto erróneo habitual

No envuelvas absoluto,Y dentro de la página $00; a diferencia de página cero,Y, su dirección indexada es un resultado de 16 bits.

Fuera de alcance

  • las instrucciones de guardar X y cargar Y
  • cambios en absolute_y o ldx
  • la temporización de ciclos y las penalizaciones por cruce de página

Ejecutar esta lección

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