060. Adc indirect x

Conectar ADC (indirect,X) (opcode $61) al despacho de la CPU.

Lección 60 de 356 · tests/chapter_01_cpu/test_060_ADC_indirect_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a crear/actualizar

opcodes.adc_indirect_x
OPCODE_TABLE[$61]

Por qué existe este paso

indirect_x primero suma X al operando de zero page, lee un puntero en little-endian de la página cero y devuelve la dirección efectiva final. El manejador debe entonces leer el valor de ADC en esa dirección final.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def adc_indirect_x(cpu):
    addr = indirect_x(cpu)
    value = cpu.bus.read(addr)
    adc(cpu, value)

OPCODE_TABLE = {
    # ...existing entries...
    0x61: adc_indirect_x,
}

Invariantes importantes

  • X indexa la ubicación del puntero en zero page antes de la desreferencia
  • las lecturas de los bytes del puntero se ajustan circularmente dentro de la página cero
  • el destino del puntero es una dirección, así que el manejador realiza la lectura final
  • PC avanza dos bytes en total

Concepto erróneo habitual

No sumes X al destino final de 16 bits. Eso describe una operación distinta; para (indirect,X), X selecciona el puntero de zero page antes de que se desreferencie.

Fuera de alcance

  • ADC (indirect),Y, introducido por el siguiente test numerado
  • la contabilidad de ciclos
  • cambios en indirect_x o en adc

Ejecutar esta lección

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