055. Adc zero page

Conectar ADC zero page (opcode $65) al despacho de la CPU.

Lección 55 de 356 · tests/chapter_01_cpu/test_055_ADC_zero_page.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a crear/actualizar

opcodes.adc_zero_page
OPCODE_TABLE[$65]

Por qué existe este paso

A diferencia del modo immediate, zero_page(cpu) resuelve el byte de operando a una dirección. El manejador debe leer el valor en esa dirección antes de pasarlo a la instrucción adc existente.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ...existing entries...
    0x65: adc_zero_page,
}

Invariantes importantes

  • el operando de un byte es una dirección en $0000-$00FF
  • se lee exactamente un valor de datos y se pasa a adc
  • PC avanza dos bytes en total
  • la resolución de direcciones permanece en la capa de opcodes

Concepto erróneo habitual

No pases la propia dirección de zero page a adc; ADC suma el byte almacenado en esa dirección.

Fuera de alcance

  • los modos indexado, absoluto e indirecto de ADC
  • cambios en zero_page o en adc
  • la contabilidad de ciclos

Ejecutar esta lección

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