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;
aslrealiza 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