068. Sbc absolute y
Añadir SBC Absolute,Y.
Lección 68 de 356 · tests/chapter_01_cpu/test_068_SBC_absolute_y.py
Archivo a actualizar
emulator/cpu/opcodes.pySímbolos a añadir/actualizar
opcodes.sbc_absolute_y and OPCODE_TABLE[0xF9]Por qué existe este paso
Esta lección hace un paralelismo con Absolute,X usando el resolutor absolute_y existente, de modo que SBC pueda restar un byte de una dirección de 16 bits indexada por Y.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
def sbc_absolute_y(cpu: CPU):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xF9: sbc_absolute_y,
}Invariantes importantes
absolute_yconsume dos bytes de operando y suma Y, no X- el manejador lee de la dirección indexada final exactamente una vez
sbcrecibe el valor del byte y posee las actualizaciones de las flags aritméticas- ejecutar la instrucción de tres bytes avanza PC en tres bytes
Concepto erróneo común
No copies el envoltorio de Absolute,X dejando que siga usando X o absolute_x; el opcode $F9 debe resolverse mediante Y.
Fuera de alcance
- envoltorios de SBC 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_068_SBC_absolute_y.py -v