Macintosh emulator works on ESP32-P4 display devkits from M5Stack and Waveshare
Macintosh emulator works on ESP32-P4 display devkits from M5Stack and Waveshare
Publish Date: 2026-07-05 04:14:00
Source Domain: www.cnx-software.com
ESP32 chips have been used for retro gaming and computing for years, but Austin McChord (Amcchord) adds to that with a Macintosh emulator ported to a couple of ESP32-P4 display devkits.
His project is a full port of the BasiliskII Macintosh 68k emulator, bringing classic Mac OS (System 7.x through Mac OS 8.1) to portable ESP32-P4 embedded devices with touchscreen, USB peripherals, and WiFi support through an ESP32-C6 on the boards.
The main development platform appears to be the M5Stack Tab5 equipped with a 5-inch touchscreen display with 1280×720 resolution. However, if you need something with a larger screen, the Waveshare ESP32-P4-WIFI6-Touch-LCD-10.1 is also supported, and features a 10.1-inch display with 1280×800 resolution and a 10-point capacitive touchscreen. The actual Mac OS resolutions used are 640×360 and 640×400, respectively, then scaled twice to the native resolution of the display.
Highlights of the project:
- CPU – Motorola 68040 emulation with FPU (68881) — 2-3 MIPS
- RAM – Configurable from 4MB to 16MB; allocated from ESP32-P4’s 32MB PSRAM
- Storage – Hard disk and CD-ROM images loaded from microSD card
- Display – 640×360 or 640×400 virtual display (2x scaled to 1280×720/800 physical display); 1/2/4/8-bit color depths at 24 FPS
- Video – Optimized pipeline with write-time dirty tracking, double-buffered DMA, and tile-based rendering
- Audio – Classic Mac sound output via ES8388 codec; toggleable in boot GUI
- Networking – WiFi internet access via NAT router with support for TCP, UDP, ICMP, DHCP…
- Input
- Capacitive touchscreen used as a mouse
- USB keyboard/mouse support


The emulator is compatible with System 7.1, System 7.5.x, Mac OS 8.0, and Mac OS 8.1.
Each task is attached to a specific core of the ESP32-P4:
- CORE 0 – Video & I/O Core
- Video rendering task
- Double-buffered DMA
- 2×2 pixel scaling
- Input task (60Hz)
- USB HID processing
- Audio output (ES8388)
- Network RX polling
- Event-driven @ 24 FPS
- CORE 1 – CPU Emulation…