210. Verificación de la CPU

verificar el fragmento completo de instrucciones de la CPU.

Lección 210 de 356 · tests/chapter_01_cpu/test_210_CPU_VERIFICATION.py

En este paso, integra `emulator/cpu/cpu.py::CPU.reset/CPU.step, emulator/cpu/opcodes.py::OPCODE_TABLE, los símbolos de instrucción lda, ldx, ldy, sta, stx, sty, adc, sbc, inc, dec, and_a, or_a, or_e, bit, cmp, beq, bne, pha, pla, php, plp, asl_a, lsr_a, rol_a, ror_a, tax, txa, tay, tya, txs, tsx, inx, dex, iny, dey, jsr, rts, clc, sec, cld, sed, clv, cli, sei y nop en emulator/cpu/instructions.py, además de emulator/bus/cpu_bus.py::CpuBus.read/write y emulator/memory/fake_rom.py::FakeROM.read/write`.

La transición completa es soporte de pruebas, añadido a `tests/helpers.py`::

from emulator.memory.fake_rom import FakeROM

def make_cpu_with_rom():
    rom = FakeROM()
    bus = CpuBus(program_rom=rom)
    return CPU(bus), bus, rom

def write_reset_vector(rom, addr: int):
    rom.write(0x7FFC, addr & 0xFF)
    rom.write(0x7FFD, (addr >> 8) & 0xFF)

def load_program(rom, start_addr: int, program: list[int]):
    for offset, byte in enumerate(program):
        rom.write((start_addr - 0x8000) + offset, byte)

Por qué existe este paso

Aunque esta validación no añade implementación de producción, los programas cortos de bytes exponen defectos de integración ocultos por las pruebas directas de operaciones. Los invariantes incluyen la propiedad secuencial de PC por parte de CPU.step, los intercambios equilibrados de pila, los destinos de salto relativos al PC posterior al operando, la preservación de los flags no relacionados y las escrituras en RAM en las ubicaciones direccionadas. El error conceptual es pensar que superar pruebas aisladas de instrucciones demuestra que el despacho, PC, la pila y las interacciones de flags también se combinan correctamente.

Fuera de alcance: el formateador de trazas es el paso 211. El lector de iNES, el mapeo de cartucho/NROM, la PPU, el VBlank y el NMI corresponden a pasos posteriores y no deben anticiparse aquí.

Ejecutar esta lección

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