114. Ror absoluto

añadir el opcode ROR absoluto ``0x6E``.

Lección 114 de 356 · tests/chapter_01_cpu/test_114_ROR_absolute.py

En este paso, usa las importaciones de instrucción y de direccionamiento de lecciones anteriores y añade solo el handler absoluto y la entrada en la tabla en `emulator/cpu/opcodes.py`.

Por qué existe este paso

ROR necesita una forma de memoria con dirección completa para que los programas puedan rotar bytes fuera de la página cero reutilizando la misma primitiva de instrucción de lectura-modificación-escritura.

Implementación sugerida

def ror_absolute(cpu: CPU):
    addr = absolute(cpu)
    ror(cpu, addr)

OPCODE_TABLE = {
    ...
    0x6E: ror_absolute,
}

`emulator/cpu/addressing_modes.py::absolute llama a CPU.fetch_word y por tanto decodifica el byte bajo antes que el byte alto. 6E 00 02 rota el byte en $0200 a través de Carry mediante instructions.ror`. La memoria se lee/modifica/escribe una vez conceptualmente, A no cambia, C/Z/N siguen el resultado de la rotación y el opcode más el operando de dos bytes avanza PC en tres.

Concepto erróneo: `00 02 no es la dirección $0002 ni es en sí mismo el dato que se va a rotar. Fuera del alcance: añadir X (lección 115), cambiar absolute o reimplementar ror` en el handler.

Ejecutar esta lección

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