045. Ldy absoluto

Añadir LDY absoluto ($AC).

Lección 45 de 356 · tests/chapter_01_cpu/test_045_LDY_absolute.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes imports of absolute and ldy
opcodes.ldy_absolute
opcodes.OPCODE_TABLE[$AC]

Por qué existe este paso

El direccionamiento absoluto extiende LDY más allá de la página cero. El handler decodifica el operando little-endian de 16 bits ya existente, lee esa dirección y delega el valor cargado a ldy.

Ejemplo completo de implementación

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


def ldy_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    ldy(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xAC: ldy_absolute,
}

Invariantes importantes

  • $AC se mapea a ldy_absolute y consume dos bytes de operando
  • absoluto combina primero el byte bajo y luego el byte alto
  • el handler lee la dirección efectiva y pasa el valor resultante a ldy
  • la ejecución avanza tres bytes en total, incluyendo el opcode

Error frecuente

No se debe invertir AC 00 02; el helper absoluto establecido resuelve esos bytes de operando a $0200, no a $0002.

Fuera de alcance

  • LDY absoluto,X
  • modificar el helper de direccionamiento absoluto
  • temporización de ciclos

Ejecutar esta lección

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