Metal Gear Solid ESP32 received a public demonstration of a native port for the ESP32-S3 microcontroller on September 28, 2026. David Montero Crespo's project starts from the C code reconstructed by the mgs_reversing decompilation and compiles it directly for Xtensa, without running the game inside a PlayStation emulator. The result already runs on real hardware, although it still has important limitations and a performance of approximately 8 to 15 FPS depending on the scene.
The proposal draws attention due to the hardware. The ESP32-S3 used in the project has two Xtensa LX7 cores at 240 MHz and only 512 KB of internal SRAM. The tested boards add 8 MB of PSRAM, while the game data is stored on a microSD card.
Metal Gear Solid ESP32 uses decompiled code
The port does not directly recompile the original PlayStation MIPS executable. Instead, it uses the C code reconstructed by the FoxdieTeam/mgs_reversing project. This code is compiled with GCC 14.2 for the ESP32-S3's Xtensa architecture.
Therefore, the most accurate technical classification is that of a native port based on decompilation. The work also relies on psyz, a C reimplementation of parts of the PlayStation SDK. Additionally, the project replaces in software components that the original console provided via hardware or system.
Among them are GPU, GTE geometric coprocessor, CD unit, vertical blank interrupt, controller input, and parts of the runtime environment. The developer states that he needed to add 41 GTE macros that were still missing in psyz.
Port replaces PlayStation hardware
The architecture has three main layers. The decompiled code of Metal Gear Solid forms the first. The second uses psyz to reproduce the SDK and GTE in C, in addition to rasterizing the graphics via software. Finally, a layer over FreeRTOS implements the scheduler, VBlank, virtual CD, screen, and controls.
This adaptation required changes because the original game assumes specific behaviors from MIPS and the PlayStation. One example involves Konami's cooperative scheduler. In the port, the game tasks reside on core 0, while the LCD update uses core 1.
Storage also required a custom solution. The system creates a virtual CD over FAT and reads game data from the microSD. The complete STAGE.DIR file is about 71.9 MB and stays on the card so as not to consume the limited PSRAM.
Performance reaches around 15 FPS in heavy scenes
The tests published by the developer himself show that the bottleneck changes according to the scene. In a small room, rasterization dropped from 7.69 to 6.18 ms per frame after three optimizations. Meanwhile, the dock area is much heavier.
In this scene, the profile recorded 40.9 ms just for rasterization, in addition to approximately 25 ms of logic and GTE calculations. In practice, this results in about 15 FPS. The status document points to an approximate range of 8 to 15 FPS depending on the scene, against the target of 30 FPS.
In addition, loading is still slow. The developer measured approximately 11.5 seconds to read 1.1 MB from the card, equivalent to about 95 KB/s. The screen works at 320 × 240 pixels, the native resolution of the ILI9341 panel used in the handcrafted handheld.
Metal Gear Solid ESP32 still does not run the full game
Despite the functional demo, the project still does not represent a complete version of Metal Gear Solid. Codec calls do not work correctly. The introduction, streaming cutscenes, voices, FMV videos, audio, and memory card saves also remain pending.
There is another structural limitation: 28 stages still have actor code in MIPS assembly. According to the documentation, 65 of the 93 stage files already have fully symbolic actor tables, but these remaining parts still prevent a complete conversion.
Therefore, the current achievement should be interpreted as an advanced technical proof, and not as a release ready to play from start to finish. The development roadmap itself includes fixing the Codec, implementing streaming, adding audio via a software SPU, and improving memory usage.
Port also became a handcrafted handheld
To demonstrate the project, Crespo built a handheld with a Seeed Studio XIAO ESP32S3 Sense, a 320 × 240 ILI9341 screen, an analog stick repurposed from a drone controller, and eight buttons. The board's microSD stores the necessary data.
The project code does not include the commercial files of Metal Gear Solid. Anyone reproducing the experiment needs to use their own legally acquired copy of the game to extract the necessary data.
The demonstration expands the reach of preservation initiatives based on reverse engineering. In this case, however, the goal is not just to bring a classic to modern PCs: the Metal Gear Solid ESP32 shows that the reconstructed game code can also be adapted to a microcontroller much more limited than the hardware normally associated with 3D game ports.
Sources: technical documentation by David Montero Crespo/Velxio, official project page on Hackaday.io and Hackaday.