067. Sbc absolute x
Añadir SBC Absolute,X.
Lección 67 de 356 · tests/chapter_01_cpu/test_067_SBC_absolute_x.py
Archivo a actualizar
emulator/cpu/opcodes.pySímbolos a añadir/actualizar
opcodes.sbc_absolute_x and OPCODE_TABLE[0xFD]Por qué existe este paso
SBC gana acceso absoluto indexado por X reutilizando el resolutor absolute_x existente; el envoltorio de opcode sigue siendo responsable únicamente de leer y delegar.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def sbc_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xFD: sbc_absolute_x,
}Invariantes importantes
absolute_xconsume dos bytes de operando y suma X a la dirección base- el manejador lee el byte en la dirección indexada final
- el valor leído se pasa una sola vez a
sbc - ejecutar la instrucción de tres bytes avanza PC en tres bytes
Concepto erróneo común
No sumes X de nuevo en el envoltorio; absolute_x ya devuelve la dirección indexada final.
Fuera de alcance
- envoltorios de SBC Absolute,Y e indirectos
- penalizaciones de ciclos por cruce de página
- cambios en los asistentes de direccionamiento o en la aritmética de SBC
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_067_SBC_absolute_x.py -v