071. Instrucción inc

añadir la primitiva de instrucción INC.

Lección 71 de 356 · tests/chapter_01_cpu/test_071_instruction_inc.py

En este paso, añade solo emulator/cpu/instructions.py:inc. La importación del opcode, los manejadores y las entradas de la tabla pertenecen a las lecciones 072-075.

Por qué existe este paso

INC es una operación de lectura-modificación-escritura sobre memoria. Mantener la aritmética en una sola primitiva de instrucción permite que cada manejador de modo de direccionamiento posterior resuelva una dirección y delegue el mismo comportamiento de mutación y de flags.

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

def inc(cpu: CPU, address: int):
    value = cpu.bus.read(address)
    result = value + 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)

    # Set value on address
    cpu.bus.write(address, result_8)

Invariantes: address es una dirección efectiva, no un valor de operando; el byte se lee y se escribe a través de cpu.bus; el enmascarado proporciona desbordamiento de 8 bits; Zero y Negative reflejan el resultado enmascarado; Carry, Overflow y A/X/Y permanecen sin cambios.

Concepto erróneo: no incrementes A ni pases cpu.bus.read(address) a inc. INC se encarga de la lectura de memoria y escribe el resultado de vuelta en la misma dirección.

Fuera de alcance: el cableado del opcode no forma parte del paso 071; la integración desde página cero hasta absoluto-X sigue en las lecciones 072-075.

Ejecutar esta lección

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