069. Sbc indirect x
Añadir SBC (Indirect,X).
Lección 69 de 356 · tests/chapter_01_cpu/test_069_SBC_indirect_x.py
Archivo a actualizar
emulator/cpu/opcodes.pySímbolos a añadir/actualizar
opcodes.sbc_indirect_x and OPCODE_TABLE[0xE1]Por qué existe este paso
SBC gana acceso indirecto pre-indexado componiendo el resolutor indirect_x existente con el envoltorio estándar de lectura de memoria y delegación de instrucción.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def sbc_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xE1: sbc_indirect_x,
}Invariantes importantes
indirect_xsuma X al operando de página cero antes de leer el puntero- los bytes del puntero y su ajuste dentro de la página cero los gestiona el resolutor
- el envoltorio lee la dirección final y pasa ese byte a
sbc - ejecutar la instrucción de dos bytes avanza PC en dos bytes
Concepto erróneo común
No leas la ubicación del puntero de página cero como el operando de SBC; indirect_x devuelve la dirección de destino final de 16 bits cuyo contenido debe leerse.
Fuera de alcance
- el envoltorio de SBC (Indirect),Y
- cambios en el direccionamiento indirecto o en la aritmética de SBC
- la temporización de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_069_SBC_indirect_x.py -v