065. Sbc zero page x

Añadir SBC Zero Page,X.

Lección 65 de 356 · tests/chapter_01_cpu/test_065_SBC_zero_page_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_zero_page_x and OPCODE_TABLE[0xF5]

Por qué existe este paso

SBC gana ahora acceso indexado a página cero componiendo el resolutor zero_page_x existente con una lectura de memoria y la instrucción sbc existente.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xF5: sbc_zero_page_x,
}

Invariantes importantes

  • zero_page_x obtiene un operando, suma X y se ajusta dentro de la página $00
  • el manejador lee la dirección resuelta exactamente una vez
  • el valor leído, no su dirección, se pasa a sbc
  • ejecutar la instrucción de dos bytes avanza PC en dos bytes

Concepto erróneo común

No reproduzcas la indexación en el envoltorio de opcode ni permitas que $FF + X entre en la página $01; ese ajuste ya es responsabilidad de zero_page_x.

Fuera de alcance

  • envoltorios de SBC absolutos e indirectos
  • cambios en los asistentes de direccionamiento o en la aritmética de SBC
  • la temporización de ciclos

Ejecutar esta lección

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