091. Asl zero page

Añadir ASL Zero Page.

Lección 91 de 356 · tests/chapter_01_cpu/test_091_ASL_zero_page.py

En este paso, añade la primera forma direccionada de ASL. Los tests 088-090 son prerrequisitos para el comportamiento en memoria, el comportamiento con el acumulador y el despacho del acumulador.

Archivo y símbolos

emulator/cpu/opcodes.py: asl_zero_page, OPCODE_TABLE[0x06]

Por qué existe este paso

Los tests 088-090 ya establecieron instructions.asl, instructions.asl_a y el opcode de acumulador. Esta transición expone la implementación en memoria a través de la primera forma direccionada sin duplicar el comportamiento de desplazamiento o de flags en el manejador.

Implementación sugerida para este paso

# emulator/cpu/opcodes.py
def asl_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    asl(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x06: asl_zero_page,
}

Invariantes importantes

  • zero_page(cpu) consume un byte de operando, por lo que la instrucción completa ocupa dos bytes
  • el operando es una dirección; asl realiza la lectura/modificación/escritura en esa dirección
  • el antiguo bit 7 fija Carry; Zero y Negative provienen del resultado enmascarado
  • A no cambia

Error conceptual habitual

Para 06 10, 0x10 no se desplaza directamente. Selecciona RAM[$0010].

Fuera de alcance

  • ASL Zero Page,X y las formas absolutas en los tests 092-094
  • LSR a partir del test 095
  • la precisión de ciclos y de los ciclos de bus de lectura/modificación/escritura

Ejecutar esta lección

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