063. Sbc immediate
Añadir SBC Immediate.
Lección 63 de 356 · tests/chapter_01_cpu/test_063_SBC_immediate.py
Archivo a actualizar
emulator/cpu/opcodes.pySímbolos a añadir/actualizar
the `sbc` import, opcodes.sbc_immediate, and OPCODE_TABLE[0xE9]Por qué existe este paso
Este es el primer envoltorio de opcode para la instrucción central sbc. El modo inmediato ya devuelve el valor del operando, así que el envoltorio solo resuelve y delega.
Implementación de ejemplo completa
# emulator/cpu/opcodes.py
from emulator.cpu.instructions import (
lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya, adc, sbc,
)
def sbc_immediate(cpu: CPU):
value = immediate(cpu)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xE9: sbc_immediate,
}Invariantes importantes
- el opcode $E9 se asigna a
sbc_immediate immediateobtiene y devuelve exactamente un byte de operando- ese valor devuelto se pasa directamente a
sbc - ejecutar la instrucción de dos bytes avanza PC en dos bytes
Concepto erróneo común
No leas el bus usando el resultado de immediate; a diferencia de los asistentes de direccionamiento de memoria, este devuelve el valor del operando en lugar de una dirección.
Fuera de alcance
- todos los envoltorios de opcode de SBC direccionados a memoria
- cambios en la aritmética o las flags centrales de SBC
- la temporización de ciclos y el modo decimal
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_063_SBC_immediate.py -v