027. Sta indirecto x
Añadir STA indexado indirecto ($81, escrito `(d,X)`).
Lección 27 de 356 · tests/chapter_01_cpu/test_027_STA_indirect_x.py
Archivo a actualizar
emulator/cpu/opcodes.pyUbicaciones
opcodes.sta_indirect_x
opcodes.OPCODE_TABLE[$81]Por qué existe este paso
El Test 020 estableció la resolución de puntero (d,X) para las cargas. Esta lección reutiliza ese mismo cálculo de dirección final como destino de una escritura, manteniendo la mecánica de punteros fuera de la instrucción sta.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def sta_indirect_x(cpu) -> None:
address = indirect_x(cpu)
sta(cpu, address)
OPCODE_TABLE = {
# Preserve existing entries.
0x81: sta_indirect_x,
}Invariantes importantes
- X indexa la ubicación del puntero de página cero antes de desreferenciarlo
- la selección del puntero y la lectura de su byte alto dan la vuelta dentro de la página cero
- el resultado de 16 bits del puntero es el destino de la escritura
- $81 consume un byte de operando y no actualiza flags
Concepto erróneo habitual
No sumes X al valor final del puntero. En (d,X), X elige dónde se lee el puntero, y sta escribe A en la dirección contenida en ese puntero.
Fuera de alcance
- cambios en indirect_x o sta
- STA indirecto,Y
- el tiempo de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_027_STA_indirect_x.py -v