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