195. Instrucción pla
implementar el comportamiento de PLA.
Lección 195 de 356 · tests/chapter_01_cpu/test_195_instruction_pla.py
En este paso, modifica únicamente `emulator/cpu/instructions.py añadiendo pla(cpu). Requisitos previos: STACK_BASE` y los métodos que fijan los flags cero/negativo ya existen.
Por qué existe este paso
Un pull primero avanza S hasta la posición ocupada de la pila, carga ese byte en A y deriva Z y N a partir del acumulador recién cargado.
Implementación sugerida
cpu.s = (cpu.s + 1) & 0xFF
cpu.a = cpu.bus.read(0x0100 | cpu.s)
cpu.flags.set_zero_flag(cpu.a == 0)
cpu.flags.set_negative_flag((cpu.a & 0x80) != 0)Coloca esas sentencias en `def pla(cpu: CPU). Pueden usarse STACK_BASE y la máscara binaria equivalente del bit 7 0b1000_0000`.
Invariantes: incrementa y ajusta S antes de leer; lee la página de pila $0100; sustituye A por el byte extraído; actualiza solo Z y N, usando el bit 7 para N; conserva el resto de bits de estado.
Concepto erróneo: PLA no es simplemente PHA a la inversa. A diferencia de PHA, actualiza Z y N a partir de A, pero no sustituye todo el registro de estado.
Fuera de alcance: el registro del opcode $68 corresponde al paso 196. PHP y PLP empiezan en los pasos 197 y 199; no añadas sus API ni su comportamiento aquí.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_195_instruction_pla.py -v