008. Vector de reinicio de la CPU
Inicializar el estado de la CPU a partir del vector de reinicio.
Lección 8 de 356 · tests/chapter_01_cpu/test_008_cpu_reset_vector.py
Archivo a actualizar
emulator/cpu/cpu.pyUbicación
CPU.resetReferencia
https://www.nesdev.org/wiki/CPU_power_up_statePor qué existe este paso
La CPU no elige directamente su dirección de inicio de programa. Al reiniciarse, lee un vector de 16 bits little-endian desde las direcciones de CPU $FFFC-$FFFD a través de CpuBus.
Implementación de ejemplo completa
class CPU:
# Keep the constructor and fetch helpers from Test 004.
def reset(self) -> None:
low = self.bus.read(0xFFFC)
high = self.bus.read(0xFFFD)
self.pc = low | (high << 8)
self.s = 0xFD
self.p = 0x04Invariantes importantes
- el byte bajo del vector proviene de $FFFC
- el byte alto del vector proviene de $FFFD
- el reinicio lee a través del bus en lugar de indexar FakeROM directamente
Ejemplo mínimo
Los desplazamientos de FakeROM $7FFC=$00 y $7FFD=$80 aparecen en las direcciones de CPU $FFFC-$FFFD y fijan PC en $8000. Por tanto, la siguiente captura lee el desplazamiento $0000 de FakeROM.
Error común
El reinicio no debe incrementar PC mientras lee el vector. Asigna PC a partir de direcciones fijas del bus; la captura de instrucciones comienza después.
Fuera de alcance
- despacho de opcodes
- entrada de interrupciones
- temporización de ciclos
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_008_cpu_reset_vector.py -v