Tutorial paso a paso · Test Driven Development
Emulador NES por TDD
Construye un emulador de Nintendo Entertainment System desde cero en Python siguiendo 356 lecciones guiadas por tests.
Autor: linkfy · 14 capítulos · 356 lecciones
Qué es este tutorial
Este es un proyecto inicial que contiene únicamente los tests. No incluye a propósito el emulador terminado: el directorio tests/ es el currículo. Cada test numerado explica por qué importa el siguiente comportamiento, qué archivo de producción crear o actualizar y la implementación mínima esperada en ese punto.
Este tutorial toma la ruta deliberada, no la rápida.
Los primeros capítulos construyen y verifican la CPU, la memoria, el cartucho y las bases de la PPU. Los gráficos del juego y el frontend interactivo llegan más tarde, cuando los componentes que los soportan se han ganado su lugar mediante tests. No esperes un juego en pantalla en las primeras lecciones; espera entender por qué funciona cuando finalmente aparece.
Puesta en marcha
1. Clona el repositorio
git clone https://github.com/linkfy/nes-emulator-tutorial-tdd cd nes-emulator-tutorial-tdd2. Instala uv y crea el entorno bloqueado
No ejecutes uv init dentro del repositorio: el proyecto ya está inicializado. Desde la raíz del proyecto, instala las dependencias fijadas en uv.lock.
uv --version uv sync3. Abre la lección 001 y ejecuta solo ese test
Lee la documentación del módulo de principio a fin antes de escribir código de producción. Después ejecuta únicamente esa lección:
uv run pytest tests/chapter_01_cpu/test_001_initial_files.py -v4. Repite el ciclo Rojo → Verde → Refactor
Avanza un test numerado a la vez. Cada lección completada debe permanecer verde antes de seguir. Ejecuta solo los tests completados; no ejecutes capítulos futuros todavía.
Cuando termines la lección 356, ejecuta la suite completa:
uv run pytest
El ciclo TDD
Rojo
Ejecuta el test de la lección y observa cómo falla.
Verde
Escribe la implementación más pequeña que lo hace pasar.
Refactor
Limpia el código manteniendo verdes todos los tests anteriores.
Marcadores en el código
Los ejemplos de las lecciones pueden usar NEW LINE / NEW BLOCK para código nuevo, UPDATED LINE / UPDATED BLOCK para cambios, DELETED LINE / DELETED BLOCK para código obsoleto y ... donde el código existente permanece igual.
Índice de capítulos
Catorce capítulos y 356 lecciones ordenadas. Usa los rangos para saber dónde estás y qué viene después.
ROMs manuales
Algunas lecciones avanzadas incluyen comprobaciones manuales con ROMs reales obtenidas legalmente (por ejemplo Super Mario Bros. o Mario Bros.). Solo se necesitan cuando una lección llega a un punto de control manual.