070. Sbc indirect y
Añadir SBC (Indirect),Y.
Lección 70 de 356 · tests/chapter_01_cpu/test_070_SBC_indirect_y.py
Archivo a actualizar
emulator/cpu/opcodes.pySímbolos a añadir/actualizar
opcodes.sbc_indirect_y and OPCODE_TABLE[0xF1]Por qué existe este paso
Esta variante de direccionamiento final de SBC usa el resolutor indirect_y existente para leer un puntero base de la página cero, sumar Y y suministrar el byte de destino a sbc.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def sbc_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xF1: sbc_indirect_y,
}Invariantes importantes
indirect_ylee el puntero de página cero antes de sumar Y- el manejador lee el byte en la dirección final exactamente una vez
- el valor leído se pasa a
sbc, que posee las actualizaciones de A y las flags - ejecutar la instrucción de dos bytes avanza PC en dos bytes
Concepto erróneo común
(Indirect),Y no suma Y a la ubicación del puntero de página cero antes de desreferenciar; ese comportamiento de pre-indexación pertenece a (Indirect,X).
Fuera de alcance
- familias de instrucciones posteriores como INC y otras
- cambios en el direccionamiento indirecto o en la aritmética de SBC
- la temporización de ciclos y las penalizaciones por cruce de página
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_070_SBC_indirect_y.py -v