AI Architecture Analysis
This repository is indexed by RepoMind. By analyzing Shim06/Anemoia-ESP32 in our AI interface, you can instantly generate complete architecture diagrams, visualize control flows, and perform automated security audits across the entire codebase.
Our Agentic Context Augmented Generation (Agentic CAG) engine loads full source files into context on-demand, avoiding the fragmentation of traditional RAG systems. Ask questions about the architecture, dependencies, or specific features to see it in action.
Repository Overview (README excerpt)
Crawler viewAnemoia-ESP32 Anemoia-ESP32 is a rewrite and port of the Anemoia Nintendo Entertainment System (NES) emulator running directly on the ESP32. It is written in C++ and is designed to bring classic NES games to the ESP32. This project focuses on performance, being able to run the emulator at native speeds and with full audio emulation implemented. However, games with complex mappers may induce a small speed loss. Anemoia-ESP32 is available on GitHub under the GNU General Public License v3.0 (GPLv3) . --- Sponsor This project is proudly sponsored by NextPCB. Their support helps fund the development and continuation of this project, and I'm very grateful to have them as my first ever sponsor. Want to make a PCB? NextPCB offers PCB fabrication and assembly services with fast turnaround times and affordable pricing to help bring your electronics projects to the next level. --- Table of Contents • Performance • Compatibility • Hardware Overview • Where to Buy • Default Pin Setup • Controls • Menu Access • Controller Button Mappings • Getting Started • Option 1 - Web Flash • Option 2 - Build from Source • After Flashing • How to Build and Upload • Contributing • License --- Performance Anemoia-ESP32 is heavily optimized to achieve native NES speeds on the ESP32, running at ~60.098 FPS (NTSC) with 1 frame skip and full audio emulation enabled. Here are the performance benchmarks for several popular NES games. > [!NOTE] > The following benchmarks show average framerates recorded over 8192 frames (~2 minutes) of emulation time. Some games, such as , which frequently switch banks may experience significant FPS drops in certain sections. | Game | Mapper | Average FPS | |-------------------------|-----------|---------------| | **Super Mario Bros.** | NROM (0) | **60.10 FPS** | | **Contra** | UxROM (2) | **60.10 FPS** | | **The Legend of Zelda** | MMC1 (1) | **60.10 FPS** | | **Mega Man 2** | MMC1 (1) | **60.10 FPS** | | **Castlevania** | UxROM (2) | **60.10 FPS** | | **Metroid** | MMC1 (1) | **60.10 FPS** | | **Kirby’s Adventure** | MMC3 (4) | **59.57 FPS** | | **Donkey Kong** | NROM (0) | **60.10 FPS** | Compatibility As of now, Anemoia-ESP32 has implemented six major memory mappers: • Mapper 0 • Mapper 1 • Mapper 2 • Mapper 3 • Mapper 4 • Mapper 69 Totalling to around 79% of the entire NES game catalogue. If you'd like to check if a certain game is supported, visit NesCartDB and search for the game on the right-hand side of the site. Select the specific game version and look for the number in the cart properties. The game should be supported if the iNES Mapper number is in the list of implemented mappers above. Feel free to open an issue if a game has glitches or fails to boot. --- Hardware Overview Anemoia-ESP32 requires a dual-core ESP32 with a minimum of 1 MB flash memory and NO PSRAM IS REQUIRED . • ESP32 • e.g. ESP32-DevKitC or ESP32-WROOM-32 • A 320x240 SPI TFT screen (no touch needed) • Either an ST7789-based screen as depicted, or • an ILI9341-based screen with 320x240 pixels • Audio Amplifier • e.g. a PAM8403 or PAM8302 • Speaker • MicroSD card module • 8 Tactile push buttons, or • Supported Controller • NES controller • SNES controller • PS1 controller • PS2 controller > [!NOTE] > ST7789-based displays are recommended as they seem to fare better with 80MHz SPI speeds and are the most compatible. ILI9341-based screens may experience screen problems at higher SPI speeds. Where to Buy These are the recommended parts to use for this project. *These are affiliate links. Buying through them helps support me at no extra cost to you. Thank you for your support.* • ESP32 • 240x320 ST7789 Display • PAM8403 Amplifier Module • MicroSD Card Module • TP4056 Charging Module • S09 Buck Converter • SS12F17 Slide Switch • 12×12×7.3mm Tactile Push Buttons • 40mm Speaker Default Pin Setup TFT Display | Signal | ESP32 Pins | |----------|----------------| | MOSI | GPIO23 | | MISO | -1 (N/A) | | SCLK | GPIO18 | | CS | GPIO4 | | DC | GPIO2 | | RST | EN | MicroSD | Signal | ESP32 Pins | |----------|----------------| | MOSI | GPIO13 | | MISO | GPIO12 | | SCLK | GPIO14 | | CS | GND | Audio Amplifier | Signal | ESP32 Pins | |----------|----------------| | Input | GPIO25 | Controller There are currently three input methods: Tactile push buttons, an NES/SNES controller, and a PS1/PS2 controller. Tactile Push Buttons | Signal | ESP32 Pins | |----------|----------------------| | A | GPIO19 & GND | | B | GPIO26 & GND | | Left | GPIO32 & GND | | Right | GPIO33 & GND | | Up | GPIO15 & GND | | Down | GPIO5 & GND | | Start | GPIO27 & GND | | Select | GPIO16 (RX2) & GND | NES/SNES controller | Signal | ESP32 Pins | |----------|----------------| | Clock | GPIO22 | | Latch | GPIO27 | | Data | GPIO35 | PS1/PS2 controller | Signal | ESP32 Pins | |-----------|----------------| | Data | GPIO35 | | Command | GPIO22 | | Attention | GPIO19 | | Clock | GPIO23 | Also connect the power and ground lines if using a controller. Most controllers should work fine from 3.3V power supply. --- Controls Menu Access Press **Start + Select** simultaneously in a game to open the menu. Controller Button Mappings SNES Controller | NES Button | SNES Buttons | |------------|--------------| | A | B, A, R | | B | Y, X, L | | Start | Start | | Select | Select | | Up | D-Pad Up | | Down | D-Pad Down | | Left | D-Pad Left | | Right | D-Pad Right | PS1/PS2 Controller | NES Button | PS1/PS2 Buttons | |------------|------------------------------| | A | R1, R2, R3, X, O | | B | L1, L2, L3, Square, Triangle | | Start | Start | | Select | Select | | Up | D-Pad Up | | Down | D-Pad Down | | Left | D-Pad Left | | Right | D-Pad Right | --- Getting Started Option 1 - Web Flash (Recommended) No software installation required. • Visit the Web Flash website. • Connect your ESP32 via USB. • Click **Flash** and select your ESP32's COM port. > [!NOTE] > Web flashing requires a Chromium-based browser (Chrome, Edge, Opera) with WebSe…