143. Instruction bit

implementar el comportamiento de BIT independiente del direccionamiento.

Lección 143 de 356 · tests/chapter_01_cpu/test_143_instruction_bit.py

Por qué existe este paso

BIT tiene una semántica de flags inusual: Z proviene de A AND value, mientras que N y V copian bits del operando, por lo que una primitiva compartida evita que los manejadores de direccionamiento diverjan.

En este paso, tras las lecciones de EOR, añade exactamente este símbolo a `emulator/cpu/instructions.py`:

def bit(cpu: CPU, value: int):
    result_8 = (cpu.a & value) & 0xFF

    # Flags:
    cpu.flags.set_zero_flag(result_8 == 0)
    cpu.flags.set_negative_flag((value & 0b1000_0000) != 0)
    cpu.flags.set_overflow_flag((value & 0b0100_0000) != 0)

BIT separa la prueba de cero de los dos bits de operando copiados: Z refleja `A & value`, mientras que N y V reflejan los bits 7 y 6 del valor. A, Carry, memoria, X, Y y PC son invariantes; solo se reescriben Z/N/V.

Concepto erróneo: BIT ni almacena `A & value en A ni deriva N/V de ese resultado AND. Fuera de alcance: importar bit en emulator/cpu/opcodes.py` y conectar los opcodes de página cero y absoluto son las lecciones 144-145.

Ejecutar esta lección

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