056. Adc zero page x

Conectar ADC zero page,X (opcode $75) al despacho de la CPU.

Lección 56 de 356 · tests/chapter_01_cpu/test_056_ADC_zero_page_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a crear/actualizar

opcodes.adc_zero_page_x
OPCODE_TABLE[$75]

Por qué existe este paso

Este modo reutiliza el resolutor zero_page_x ya establecido, incluido su ajuste circular dentro de la página cero. El manejador de opcode lee entonces la ubicación resuelta y pasa su valor a adc.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ...existing entries...
    0x75: adc_zero_page_x,
}

Invariantes importantes

  • X se suma en zero_page_x, no una segunda vez en el manejador
  • (operand + X) & 0xFF mantiene la dirección efectiva dentro de la página cero
  • se pasa a adc el byte en la dirección efectiva, no la dirección en sí
  • PC avanza dos bytes en total

Concepto erróneo habitual

No uses una suma normal de 16 bits para el índice; $FF + $01 debe resolverse a $0000, no a $0100.

Fuera de alcance

  • los modos absoluto indexado e indirecto de ADC
  • el ajuste de tiempo por cruce de página
  • cambios en el ayudante de direccionamiento existente

Ejecutar esta lección

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