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.py

Sí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
  • immediate obtiene 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