199. Instrucción plp
implementar el comportamiento de PLP.
Lección 199 de 356 · tests/chapter_01_cpu/test_199_instruction_plp.py
En este paso, modifica únicamente `emulator/cpu/instructions.py añadiendo plp(cpu). Requisitos previos: STACK_BASE` y la convención de máscara de estado de RTI ya existen.
Por qué existe este paso
PLP avanza S hasta el byte de estado guardado y sustituye P por ese byte tras eliminar los bits 4 y 5, no persistentes en este modelo del emulador.
Implementación sugerida
cpu.s = (cpu.s + 1) & 0xFF
flags = cpu.bus.read(0x0100 | cpu.s)
cpu.p = flags & 0b1100_1111Coloca esas sentencias en `def plp(cpu: CPU); la dirección equivalente STACK_BASE + cpu.s` también selecciona la página de pila $0100.
Invariantes: incrementa y ajusta S antes de leer; sustituye P en lugar de fusionarlo; borra los bits 4 y 5; restaura exactamente el resto de bits de flags guardados; no calcules Z ni N a partir del byte numérico como hace PLA.
Concepto erróneo: PLP no combina selectivamente flags mediante OR con el P anterior. Hacerlo deja flags obsoletos que el estado apilado había borrado explícitamente.
Fuera de alcance: el registro del opcode $28 corresponde al paso 200. No deben añadirse API de flags posteriores a esta implementación.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_199_instruction_plp.py -v