177. Bmi relativo

conectar BMI con su opcode relativo.

Lección 177 de 356 · tests/chapter_01_cpu/test_177_BMI_relative.py

Requisito previo: el paso 176 conectó BPL. En este paso, añade estas piezas a `emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import bmi

def bmi_relative(cpu: CPU):
    offset = relative(cpu)
    bmi(cpu, offset)

OPCODE_TABLE[0x30] = bmi_relative

Fusiona la importación y la asignación en las formas agrupadas ya existentes del archivo.

Por qué existe este paso

`relative se encarga de decodificar el operando, mientras que el instructions.bmi` del paso 169 interpreta "minus" como Negative activado y aplica el desplazamiento.

Invariantes: `0x30` consume su operando tanto si se toma el salto como si no; con Negative activado se salta relativo al PC posterior al operando, y con Negative desactivado se queda ahí. No cambia ninguna flag ni memoria. Idea errónea habitual: BMI comprueba el bit de estado Negative, no la negatividad del entero de Python del desplazamiento ni de ningún registro.

Fuera de alcance: la conexión de opcodes de BVC y BVS son los pasos 178 y 179. El direccionamiento JMP indirecto empieza en el paso 180.

Ejecutar esta lección

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