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-$00FFlsrrealiza 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_pageo enlsr - 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