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.pySí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_pageobtiene 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