203. Instrucción tsx
implementar la operación TSX.
Lección 203 de 356 · tests/chapter_01_cpu/test_203_instruction_tsx.py
Por qué existe este paso
En este paso, añade `emulator/cpu/instructions.py::tsx`. TSX complementa al paso 201 copiando el byte del puntero de pila en X y derivando los dos flags de resultado a partir del valor copiado.
Implementación sugerida
def tsx(cpu: CPU):
cpu.x = cpu.s
cpu.flags.set_zero_flag(cpu.x == 0)
cpu.flags.set_negative_flag((cpu.x & 0b1000_0000) != 0)Invariantes: S, A, Y, PC, la memoria y los bits de estado distintos de Zero y Negative no cambian. Zero se activa exactamente para $00; Negative sigue el bit 7, no el bit 6. El error conceptual habitual es tratar TSX como TXS y preservar todos los flags, o calcular los flags a partir de X antes de copiar S.
Fuera de alcance: importar TSX y mapear el opcode implícito $BA en `emulator/cpu/opcodes.py` corresponde al paso 204; no se añade ninguna otra API de pila.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_203_instruction_tsx.py -v