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.pySí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) & 0xFFmantiene la dirección efectiva dentro de la página cero- se pasa a
adcel 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