064. Sbc zero page

Añadir SBC Zero Page.

Lección 64 de 356 · tests/chapter_01_cpu/test_064_SBC_zero_page.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_zero_page and OPCODE_TABLE[0xE5]

Por qué existe este paso

Esta lección añade el primer envoltorio de SBC direccionado a memoria, reutilizando el resolutor de direcciones de página cero ya establecido y la operación sbc central basada en valores.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def sbc_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    sbc(cpu, value)

OPCODE_TABLE = {
    # ... existing entries ...
    0xE5: sbc_zero_page,
}

Invariantes importantes

  • zero_page obtiene un operando y devuelve una dirección en la página $00
  • el manejador lee un byte de esa dirección y pasa el valor a sbc
  • el comportamiento aritmético y de flags de SBC permanece centralizado en sbc
  • ejecutar la instrucción de dos bytes avanza PC en dos bytes

Concepto erróneo común

zero_page devuelve una dirección, no el byte a restar; el manejador debe realizar la lectura del bus antes de llamar a sbc.

Fuera de alcance

  • envoltorios de SBC indexados, absolutos e indirectos
  • cambios en el direccionamiento de página cero o en la aritmética de SBC
  • la temporización de ciclos

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_064_SBC_zero_page.py -v