068. Sbc absolute y

Añadir SBC Absolute,Y.

Lección 68 de 356 · tests/chapter_01_cpu/test_068_SBC_absolute_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_absolute_y and OPCODE_TABLE[0xF9]

Por qué existe este paso

Esta lección hace un paralelismo con Absolute,X usando el resolutor absolute_y existente, de modo que SBC pueda restar un byte de una dirección de 16 bits indexada por Y.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def sbc_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    sbc(cpu, value)

OPCODE_TABLE = {
    # ... existing entries ...
    0xF9: sbc_absolute_y,
}

Invariantes importantes

  • absolute_y consume dos bytes de operando y suma Y, no X
  • el manejador lee de la dirección indexada final exactamente una vez
  • sbc recibe el valor del byte y posee las actualizaciones de las flags aritméticas
  • ejecutar la instrucción de tres bytes avanza PC en tres bytes

Concepto erróneo común

No copies el envoltorio de Absolute,X dejando que siga usando X o absolute_x; el opcode $F9 debe resolverse mediante Y.

Fuera de alcance

  • envoltorios de SBC indirectos
  • penalizaciones de ciclos por cruce de página
  • cambios en los asistentes de direccionamiento o en la aritmética de SBC

Ejecutar esta lección

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