134. Instruction or e

implementar el comportamiento de EOR independiente del direccionamiento.

Lección 134 de 356 · tests/chapter_01_cpu/test_134_instruction_or_e.py

Por qué existe este paso

Centralizar la semántica del OR exclusivo en una primitiva orientada al valor permite que todos los opcodes de EOR posteriores compartan el mismo comportamiento del acumulador y de las flags Zero/Negative.

En este paso, después de todo el trabajo de ORA, añade exactamente este símbolo a `emulator/cpu/instructions.py`:

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

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

    cpu.a = result_8

La firma orientada al valor separa la semántica de EOR del direccionamiento. El XOR se enmascara a ocho bits, se almacena en A, y se usa para derivar Zero y Negative. Carry, Overflow, la memoria, X, Y y PC son invariantes porque `or_e` no los toca.

Concepto erróneo: a pesar del nombre del auxiliar `or_e, EOR es un OR exclusivo (^), no un OR inclusivo, y value no es una dirección. Fuera de alcance: importar or_e en emulator/cpu/opcodes.py`, todos los opcodes de EOR (135-142), y BIT (143-145).

Ejecutar esta lección

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