099. Lsr zero page x

Añadir LSR Zero Page,X.

Lección 99 de 356 · tests/chapter_01_cpu/test_099_LSR_zero_page_x.py

En este paso, añade indexación por X a la forma Zero Page de LSR del test 098.

Archivo y símbolos

emulator/cpu/opcodes.py: lsr_zero_page_x, OPCODE_TABLE[0x56]

Por qué existe este paso

Esta transición añade LSR indexado en página cero combinando el resolutor zero_page_x ya existente con lsr en memoria; no añade nueva semántica de desplazamiento.

Implementación sugerida para este paso

# emulator/cpu/opcodes.py
def lsr_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    lsr(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x56: lsr_zero_page_x,
}

Invariantes importantes

  • el cálculo de la dirección efectiva se ajusta a ocho bits dentro de la página cero
  • solo se consume un byte de operando, por lo que PC avanza dos posiciones incluyendo el opcode
  • lsr se encarga de la escritura en memoria y de los cambios en C/Z/N
  • X selecciona el destino y no se modifica

Error conceptual habitual

La base 0xFE más X=0x03 apunta a $0001, no a $0101.

Fuera de alcance

  • LSR Absolute y Absolute,X en los tests 100-101
  • cambios en el direccionamiento o en el comportamiento de LSR
  • la precisión de ciclos

Ejecutar esta lección

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