150. Cmp absolute
añadir el opcode CMP absoluto ``0xCD``.
Lección 150 de 356 · tests/chapter_01_cpu/test_150_CMP_absolute.py
Por qué existe este paso
El CMP absoluto permite comparar A con un byte en cualquier parte de la memoria de la CPU, manteniendo la decodificación de dirección efectiva little-endian separada de la semántica de flags.
En este paso, las lecciones 146-149 ya proporcionan la semántica de CMP, su importación y los modos inmediato/página cero. Añade exactamente lo siguiente a `emulator/cpu/opcodes.py`:
def cmp_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xCD: cmp_absolute,
}`emulator/cpu/addressing_modes.py::absolute obtiene una palabra little-endian mediante CPU.fetch_word; por tanto, CD 00 02 compara A con el valor leído en $0200`. C/Z/N pueden cambiar; A, Overflow, X, Y y la memoria permanecen invariantes; el opcode más la palabra avanza el PC tres bytes.
Concepto erróneo: la palabra del operando es una dirección, no un valor de comparación inmediato, y sus bytes no son big-endian. Fuera de alcance: CMP absoluto,X, absoluto,Y, (indirect,X) e (indirect),Y son las lecciones 151-154; CPX/CPY vienen a continuación.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_150_CMP_absolute.py -v