069. Sbc indirect x

Añadir SBC (Indirect,X).

Lección 69 de 356 · tests/chapter_01_cpu/test_069_SBC_indirect_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_indirect_x and OPCODE_TABLE[0xE1]

Por qué existe este paso

SBC gana acceso indirecto pre-indexado componiendo el resolutor indirect_x existente con el envoltorio estándar de lectura de memoria y delegación de instrucción.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xE1: sbc_indirect_x,
}

Invariantes importantes

  • indirect_x suma X al operando de página cero antes de leer el puntero
  • los bytes del puntero y su ajuste dentro de la página cero los gestiona el resolutor
  • el envoltorio lee la dirección final y pasa ese byte a sbc
  • ejecutar la instrucción de dos bytes avanza PC en dos bytes

Concepto erróneo común

No leas la ubicación del puntero de página cero como el operando de SBC; indirect_x devuelve la dirección de destino final de 16 bits cuyo contenido debe leerse.

Fuera de alcance

  • el envoltorio de SBC (Indirect),Y
  • cambios en el direccionamiento indirecto o en la aritmética de SBC
  • la temporización de ciclos

Ejecutar esta lección

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