043. Ldy página cero

Añadir LDY página cero ($A4).

Lección 43 de 356 · tests/chapter_01_cpu/test_043_LDY_zero_page.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes imports of zero_page and ldy
opcodes.ldy_zero_page
opcodes.OPCODE_TABLE[$A4]

Por qué existe este paso

A diferencia de LDY inmediato, LDY en página cero resuelve el operando a una dirección, lee el byte en esa dirección y luego delega el comportamiento del registro y los flags a ldy.

Ejemplo completo de implementación

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


def ldy_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    ldy(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA4: ldy_zero_page,
}

Invariantes importantes

  • $A4 se mapea a ldy_zero_page y consume un byte de operando
  • zero_page devuelve una dirección en $0000-$00FF
  • el handler realiza una lectura de datos y pasa ese valor, no su dirección, a ldy
  • ldy actualiza Zero y Negative

Error frecuente

Pasar addr directamente a ldy cargaría el número de ubicación en página cero en lugar del byte almacenado allí.

Fuera de alcance

  • codificaciones de LDY en página cero,X y absoluto
  • nuevos helpers de modos de direccionamiento
  • temporización de ciclos

Ejecutar esta lección

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