028. Sta indirecto y

Añadir STA indexado indirecto ($91, escrito `(d),Y`).

Lección 28 de 356 · tests/chapter_01_cpu/test_028_STA_indirect_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes.sta_indirect_y
opcodes.OPCODE_TABLE[$91]

Por qué existe este paso

Esto completa los modos de STA de esta secuencia reutilizando la resolución de dirección indirect_y del Test 021. El manejador obtiene el destino final indexado con Y y delega la escritura en sta.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def sta_indirect_y(cpu) -> None:
    address = indirect_y(cpu)
    sta(cpu, address)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x91: sta_indirect_y,
}

Invariantes importantes

  • el puntero de página cero se lee antes de sumar Y
  • la lectura del byte alto del puntero da la vuelta de $00FF a $0000
  • Y indexa el destino de 16 bits ensamblado
  • $91 almacena A sin cambiar los flags

Concepto erróneo habitual

(d),Y no indexa la ubicación del puntero de página cero. Lee primero el puntero en d y después suma Y a la dirección resultante.

Fuera de alcance

  • cambios en indirect_y o sta
  • el comportamiento de ciclos por cruce de página
  • refactorizar los manejadores de STA en un ayudante genérico

Ejecutar esta lección

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