DOOM en ESP32-S3

DOOM en ESP32-S3 - Imagen 1

Descripción

Este proyecto demuestra cómo ejecutar el legendario DOOM en un ESP32-S3 usando Arduino Framework en lugar de ESP-IDF, solucionando problemas de compatibilidad con módulos como el YD-ESP32-S3. ¿POR QUÉ ARDUINO EN LUGAR DE ESP-IDF? El proyecto original usa ESP-IDF, pero algunos módulos ESP32-S3 tienen problemas de compatibilidad con el bootloader, causando reinicios constantes (ets_loader.c 78, TG0WDT_SYS_RST). Solución: Port a Arduino framework con mejor compatibilidad. CARACTERÍSTICAS PRINCIPALES: ✅ DOOM completo ejecutándose en ESP32-S3 ✅ Pantalla ILI9341 320x240 con SPI a 40MHz ✅ 8 botones físicos para control total ✅ Arduino Framework para máxima compatibilidad ✅ Soporte para módulos con 16MB Flash ✅ Código completamente documentado HARDWARE NECESARIO: • ESP32-S3 con mínimo 16MB Flash (ej: ESP32-S3-N16R8, YD-ESP32-S3) • Pantalla ILI9341 320x240 (SPI) • 6-8 botones push button • Cables dupont • Protoboard CONEXIONES DEL DISPLAY ILI9341: ILI9341 ESP32-S3 ------- -------- VCC -> 3.3V GND -> GND CS -> GPIO 10 RESET -> GPIO 9 DC/RS -> GPIO 8 MOSI/SDA -> GPIO 11 SCK/CLK -> GPIO 12 LED/BLK -> GPIO 2 (o directo a 3.3V) BOTONES (conectar entre GPIO y GND): Función GPIO Descripción ------- ---- ----------- UP 1 Avanzar DOWN 3 Retroceder LEFT 14 Girar izquierda RIGHT 21 Girar derecha FIRE 47 Disparar USE 48 Abrir puertas/Usar ENTER 45 Menú/Iniciar juego STRAFE 13 Movimiento lateral (opcional) IMPORTANTE: Los botones usan pull-up interno, conectan GPIO a GND al presionar. SOFTWARE NECESARIO: • Visual Studio Code • PlatformIO (extensión de VS Code) • Git (opcional) ARCHIVOS WAD REQUERIDOS: • doom2.wad (~14MB) - Copia legal de DOOM 2 • prboom-plus.wad (~350KB) - Incluido en el proyecto ESTRUCTURA DEL PROYECTO: doom_arduino/ ├── platformio.ini # Configuración PlatformIO ├── partitions.csv # Tabla de particiones (16MB) ├── src/ │ ├── main.cpp # Punto de entrada Arduino │ ├── spi_lcd_arduino.cpp # Driver display adaptado │ ├── i_system_arduino.c # Sistema de archivos flash │ └── i_video_arduino.c # Video y control de botones ├── lib/ │ ├── prboom/ # Motor DOOM original │ └── prboom-esp32-compat/ # Capa de compatibilidad CONFIGURACIÓN DE MEMORIA: El proyecto usa una tabla de particiones personalizada para ESP32-S3 con 16MB: • app0: Firmware (1MB) • iwad: doom2.wad (14.5MB) • pwad: prboom-plus.wad (384KB) COMPILACIÓN Y CARGA: 1. Abrir proyecto en VS Code con PlatformIO 2. Compilar: pio run 3. Subir firmware: pio run --target upload --upload-port COM10 4. Subir doom2.wad a dirección 0x120000 en flash 5. Subir prboom-plus.wad a dirección 0xFA0000 en flash 6. Presionar RESET y jugar! OPTIMIZACIONES IMPLEMENTADAS: • Hardware SPI a 40MHz para máxima velocidad de pantalla • Conversión de paleta RGB565 optimizada • Buffer de línea para transferencias más rápidas • Stack de 32KB para carga de texturas • PSRAM habilitada para gestión de memoria SOLUCIÓN DE PROBLEMAS COMUNES: • Pantalla negra: Verificar conexiones y voltaje LED/BLK • Colores incorrectos: Verificar paleta sin byte-swap • Juego lento: Confirmar Hardware SPI a 40MHz • Bootloop: Aumentar stack a 32KB • Botones no funcionan: Verificar que conectan GPIO a GND CRÉDITOS: • id Software - Creadores de DOOM • PrBoom - Port open source de DOOM • esp32-doom - Proyecto original para ESP-IDF • Arduino-ESP32 - Framework Arduino para ESP32 El archivo descargable incluye todo el código fuente, configuración de PlatformIO, drivers adaptados y documentación completa para replicar el proyecto.

Tecnologías Utilizadas

ESP32-S3ArduinoC++PlatformIOILI9341SPIPSRAM