098. Lsr zero page

Añadir LSR Zero Page.

Lección 98 de 356 · tests/chapter_01_cpu/test_098_LSR_zero_page.py

En este paso, expone lsr en memoria del test 095 a través de su primer opcode direccionado.

Archivo y símbolos

emulator/cpu/opcodes.py: imported lsr, lsr_zero_page, OPCODE_TABLE[0x46]

Por qué existe este paso

Con lsr en memoria ya definido por el test 095, esta transición introduce su primer opcode direccionado y mantiene la decodificación del operando separada del comportamiento de la instrucción.

Implementación sugerida para este paso

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lsr

def lsr_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    lsr(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x46: lsr_zero_page,
}

Invariantes importantes

  • zero_page(cpu) consume un operando y produce una dirección en $0000-$00FF
  • lsr realiza la lectura/modificación/escritura y reemplaza C/Z/N
  • la instrucción de dos bytes avanza PC en dos posiciones
  • A no cambia

Error conceptual habitual

Para 46 10, el operando 0x10 identifica RAM[$0010]; no es el valor desplazado.

Fuera de alcance

  • las formas indexadas y absolutas de LSR en los tests 099-101
  • cambios en zero_page o en lsr
  • el comportamiento preciso por ciclos del bus

Ejecutar esta lección

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