# DOOM para ESP32-S3 (Arduino Framework)

Port de DOOM (PrBoom) para ESP32-S3 usando Arduino framework. Optimizado para YD-ESP32-S3 con display ILI9341.

## Hardware

- **MCU:** ESP32-S3-N16R8 (16MB Flash, 8MB PSRAM)
- **Display:** ILI9341 320x240 TFT

### Conexiones de Pines

| Funcion | GPIO |
|---------|------|
| MOSI    | 7    |
| CLK     | 15   |
| CS      | 5    |
| DC      | 6    |
| RST     | 4    |
| BCKL    | 2    |

## Compilacion con PlatformIO

### 1. Instalar PlatformIO

```bash
pip install platformio
```

### 2. Compilar

```bash
cd doom_arduino
pio run
```

### 3. Flashear firmware

```bash
pio run -t upload
```

## Flashear WADs

Los WADs deben flashearse manualmente a las direcciones especificadas en `partitions.csv`:

| WAD             | Direccion  | Tamano Max |
|-----------------|------------|------------|
| doom2.wad       | 0x120000   | ~14.5 MB   |
| prboom-plus.wad | 0xFA0000   | ~384 KB    |

### Comando para flashear WADs

```bash
# Flashear doom2.wad (IWAD principal)
esptool.py --chip esp32s3 --port COM3 write_flash 0x120000 doom2.wad

# Flashear prboom-plus.wad (PWAD de recursos)
esptool.py --chip esp32s3 --port COM3 write_flash 0xFA0000 prboom-plus.wad
```

## Estructura del Proyecto

```
doom_arduino/
├── platformio.ini          # Configuracion de PlatformIO
├── partitions.csv          # Tabla de particiones (16MB)
├── src/
│   ├── main.cpp            # Punto de entrada Arduino
│   ├── spi_lcd_arduino.cpp # Driver de display adaptado
│   ├── i_system_arduino.c  # Acceso a flash adaptado
│   └── i_video_arduino.c   # Sistema de video adaptado
├── prboom/                 # Motor DOOM (sin cambios)
└── prboom-esp32-compat/    # Capa de compatibilidad ESP32
```

## Diferencias con la version ESP-IDF

Este port usa Arduino framework en lugar de ESP-IDF nativo. Los cambios principales son:

1. **Driver de display:** Usa SPI de Arduino en lugar de `spi_master` de ESP-IDF
2. **Acceso a flash:** Usa `spi_flash_mmap()` directamente (disponible en Arduino-ESP32)
3. **Punto de entrada:** Usa `setup()`/`loop()` en lugar de `app_main()`

## Solucion de problemas

### El ESP32 se reinicia constantemente
- Verifica que el bootloader sea compatible con tu placa
- Asegurate de usar `board_build.arduino.memory_type = qio_opi` para PSRAM

### No aparece imagen en el display
- Verifica las conexiones de pines
- Prueba reducir la velocidad SPI en `spi_lcd_arduino.cpp`

### Error "WAD not found"
- Asegurate de flashear los WADs a las direcciones correctas
- Verifica que el tamano del WAD no exceda el espacio de particion
