061. Adc indirect y

Añadir ADC (Indirect),Y.

Lección 61 de 356 · tests/chapter_01_cpu/test_061_ADC_indirect_y.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.adc_indirect_y and OPCODE_TABLE[0x71]

Por qué existe este paso

Esta variante de direccionamiento final de ADC conecta el asistente de direcciones indirect_y existente con la instrucción adc basada en valores para el opcode $71.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0x71: adc_indirect_y,
}

Invariantes importantes

  • indirect_y obtiene el operando de un byte y devuelve la dirección final
  • el manejador lee el valor de esa dirección exactamente una vez
  • adc, y no el manejador, actualiza A y las flags aritméticas
  • ejecutar la instrucción de dos bytes avanza PC en dos bytes

Concepto erróneo común

No pases la dirección devuelta por indirect_y directamente a adc; adc acepta el byte almacenado en esa dirección.

Fuera de alcance

  • SBC y sus manejadores de opcode
  • nuevos asistentes de modo de direccionamiento o refactorizaciones
  • temporización de ciclos y penalizaciones por cruce de página

Ejecutar esta lección

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