046. Ldy absoluto x

Añadir LDY absoluto,X ($BC).

Lección 46 de 356 · tests/chapter_01_cpu/test_046_LDY_absolute_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes imports of absolute_x and ldy
opcodes.ldy_absolute_x
opcodes.OPCODE_TABLE[$BC]

Por qué existe este paso

Esta lección completa la familia de opcodes de LDY reutilizando la resolución de dirección absoluto,X, luego leyendo la dirección efectiva y aplicando el comportamiento existente de ldy.

Ejemplo completo de implementación

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import absolute_x
from emulator.cpu.instructions import ldy


def ldy_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    ldy(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xBC: ldy_absolute_x,
}

Invariantes importantes

  • $BC se mapea a ldy_absolute_x y consume dos bytes de operando
  • X, no Y, se suma a la dirección base decodificada de 16 bits
  • la dirección efectiva se lee antes de pasar su valor a ldy
  • ldy actualiza Zero y Negative a partir del byte cargado

Error frecuente

LDY absoluto,X no indexa con el registro de destino Y; la codificación utiliza explícitamente X.

Fuera de alcance

  • handlers de opcode de STY
  • penalizaciones de ciclo por cruce de página
  • cambios en absolute_x

Ejecutar esta lección

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