070. Sbc indirect y

Añadir SBC (Indirect),Y.

Lección 70 de 356 · tests/chapter_01_cpu/test_070_SBC_indirect_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_indirect_y and OPCODE_TABLE[0xF1]

Por qué existe este paso

Esta variante de direccionamiento final de SBC usa el resolutor indirect_y existente para leer un puntero base de la página cero, sumar Y y suministrar el byte de destino a sbc.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xF1: sbc_indirect_y,
}

Invariantes importantes

  • indirect_y lee el puntero de página cero antes de sumar Y
  • el manejador lee el byte en la dirección final exactamente una vez
  • el valor leído se pasa a sbc, que posee las actualizaciones de A y las flags
  • ejecutar la instrucción de dos bytes avanza PC en dos bytes

Concepto erróneo común

(Indirect),Y no suma Y a la ubicación del puntero de página cero antes de desreferenciar; ese comportamiento de pre-indexación pertenece a (Indirect,X).

Fuera de alcance

  • familias de instrucciones posteriores como INC y otras
  • cambios en el direccionamiento indirecto o en la aritmética de SBC
  • la temporización de ciclos y las penalizaciones por cruce de página

Ejecutar esta lección

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