092. Asl zero page x

Añadir ASL Zero Page,X.

Lección 92 de 356 · tests/chapter_01_cpu/test_092_ASL_zero_page_x.py

En este paso, extiende la forma Zero Page del test 091 con indexación por X.

Archivo y símbolos

emulator/cpu/opcodes.py: asl_zero_page_x, OPCODE_TABLE[0x16]

Por qué existe este paso

Después de que el test 091 conectara el ASL de página cero simple, esta transición reutiliza el resolutor zero_page_x ya establecido para que la indexación y el ajuste dentro de la página cero sigan siendo cuestiones de direccionamiento.

Implementación sugerida para este paso

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x16: asl_zero_page_x,
}

Invariantes importantes

  • la dirección efectiva es (operand + cpu.x) & 0xFF
  • se consume un byte de operando, por lo que PC avanza dos posiciones incluyendo el opcode
  • asl se encarga de la escritura en memoria y de las actualizaciones de Carry, Zero y Negative
  • la indexación cambia el destino, no el valor pasado a asl

Error conceptual habitual

Zero Page,X no se desborda hacia la página uno: la base 0xFE más X=0x03 apunta a $0001.

Fuera de alcance

  • ASL Absolute y Absolute,X en los tests 093-094
  • modificar zero_page_x o asl
  • la precisión de ciclos

Ejecutar esta lección

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