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.pyUbicaciones
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