dmcrespo
Joined 8 months ago
Joined 8 months ago
Other than that, everything feels really well done. Building something like this in JavaScript/HTML, especially with a 3D model this detailed, must be quite challenging from an optimization standpoint.
Great work!
AI was used to port to ESP32, and human talent was used to assemble the circuit, hardware, and proprietary knowledge of ESP32 and FreeRTOS optimizations.
Rather than running an emulator, the decompiled C source from mgs_reversing is compiled natively to Xtensa machine code. Everything the original PS1 hardware provided, including the GTE, GPU, BIOS scheduler, and CD drive, is reimplemented in software on top of ESP-IDF and FreeRTOS.
SoC: ESP32-S3, dual-core Xtensa LX7 @ 240 MHz, 512 KB internal SRAM, 8 MB Octal PSRAM.
Display: 320×240 LCD (ST7789 / ILI9341) over SPI at 40 MHz.
Storage: MicroSD card over SPI containing the full game stage assets (STAGE.DIR).
Internal SRAM is fast but limited, while PSRAM provides 8 MB of additional memory but sits behind the same cache subsystem used for external Flash.
Placing FreeRTOS task stacks in PSRAM initially appeared to work, until a task performed file I/O such as fopen().
When external Flash cache was disabled during Flash/PSRAM access, the CPU could no longer safely access task stacks stored in PSRAM, causing an immediate SoC crash.
I’ve been working on getting the real Apple iPod Classic 6G firmware running in QEMU. It currently emulates two clickwheel iPods, including the display ,click wheel input and music player.
https://github.com/davidmonterocrespo24/qemu-ipod-classic
Still a work in progress