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