080. Instrucción inx

añadir la primitiva de instrucción INX.

Lección 80 de 356 · tests/chapter_01_cpu/test_080_instruction_inx.py

En este paso, añade solo emulator/cpu/instructions.py:inx. El opcode 0xE8 es la lección 081, mientras que dex y el opcode 0xCA son las lecciones 082-083.

Por qué existe este paso

INX es un comportamiento de registro implícito, por lo que no necesita ningún auxiliar de direccionamiento ni acceso al bus. La primitiva realiza aritmética de 8 bits y deriva los flags directamente del nuevo valor de X.

Implementación sugerida en emulator/cpu/instructions.py, después de dec:

def inx(cpu: CPU):
    result = cpu.x + 1
    result_8 = result & 0xFF

    # Set flags
    cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)
    cpu.flags.set_zero_flag(result_8 == 0)

    cpu.x = result_8

Invariantes: X permanece en ocho bits ($FF + 1 == $00); Zero y Negative reflejan el resultado enmascarado; A, Y, la memoria, Carry y Overflow permanecen sin cambios; esta primitiva en sí misma no obtiene operandos ni avanza el PC.

Concepto erróneo: INX no es INC de memoria usando X como dirección. Muta el registro X directamente y solo toma cpu.

Fuera de alcance: importar y mapear inx, añadir dex y mapear 0xCA pertenecen a las lecciones 081-083.

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_080_instruction_inx.py -v