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