022. Sta página cero

Añadir la instrucción STA y el opcode de página cero ($85).

Lección 22 de 356 · tests/chapter_01_cpu/test_022_STA_zero_page.py

Archivos a actualizar

emulator/cpu/instructions.py
emulator/cpu/opcodes.py

Ubicaciones

instructions.sta
opcodes imports of sta and zero_page
opcodes.sta_zero_page
opcodes.OPCODE_TABLE[$85]

Por qué existe este paso

Las lecciones de carga pasaban valores a lda. STA establece el límite complementario de escritura: un modo de direccionamiento proporciona una dirección de destino, mientras que la instrucción escribe A a través del bus de la CPU sin modificar los flags del procesador.

Implementación de ejemplo completa

# emulator/cpu/instructions.py
def sta(cpu, address: int) -> None:
    value = cpu.a
    cpu.bus.write(address, value)


# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import zero_page
from emulator.cpu.instructions import sta


def sta_zero_page(cpu) -> None:
    address = zero_page(cpu)
    sta(cpu, address)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x85: sta_zero_page,
}

Invariantes importantes

  • sta recibe una dirección, no un valor leído de esa dirección
  • la escritura pasa por cpu.bus.write
  • $85 consume un byte de operando y almacena A en $00nn
  • STA deja Zero y Negative sin cambios, incluso cuando A es $00 o tiene el bit 7 activado

Concepto erróneo habitual

No copies el cpu.bus.read(address) de un manejador de LDA: STA escribe A en la dirección resuelta y no deriva flags del byte almacenado.

Fuera de alcance

  • otros modos de direccionamiento de STA
  • añadir nuevos ayudantes de modo de direccionamiento
  • el tiempo de ciclos y los efectos de hardware del lado de escritura

Ejecutar esta lección

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