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.pySí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_xo enadc
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_060_ADC_indirect_x.py -v