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