esp32emu / README.md
HelloSun's picture
ESP32 emulator update
a281c6e verified
|
Raw History Blame Contribute Delete
3.46 kB
metadata
title: ESP32 Emulator (VGA32 / FabGL / FreeDOS)
emoji: 🔌
colorFrom: blue
colorTo: green
sdk: static
pinned: false
license: gpl-3.0
short_description: Browser ESP32 emulator - Arduino bins, VGA, PS/2, FreeDOS

ESP32 模擬器 (ESP32 emulator, runs entirely in the browser)

可載入 Arduino-ESP32 / ESP-IDF 編譯出來的二進位檔(完整 flash 映像,或單獨的 bootloader / partitions / app .bin), 用真實 ESP32 ROM 開機(ROM → 第二階段 bootloader → app),並模擬 LilyGO TTGO VGA32 的周邊電路:

週邊 模擬方式
CPU Xtensa LX6 雙核(視窗暫存器、loop、MAC16、FPU、32 位元乘除、S32C1I、XEA2 例外/中斷),WebAssembly 核心(C 編譯)+ JS 參考核心
開機 原廠 ESP32 ROM(Espressif QEMU 發行版附的 esp32-v3-rom*.bin),SPI flash / PSRAM 晶片模型、cache MMU、eFuse、SHA、RTC、TIMG、FRC…
VGA I2S1 LCD 模式 + DMA 描述子鏈 → 依 VGA32 電阻網路(R=22,21 G=19,18 B=5,4 HS=23 VS=15)重建 hsync/vsync 與像素,顯示在 canvas
PS/2 鍵盤/滑鼠 GPIO 33/32、26/27 開集極匯流排 + FabGL 使用的 ULP 協處理器(含 RTC_IO),完整 PS/2 位元協定(可虛擬點擊/實體鍵盤)
UART0 序列埠終端機(可輸入)
GPIO 40 腳狀態、板子示意圖

內建範例(皆為真實 Arduino-ESP32 2.0.17 編譯的二進位):

  1. FreeDOS 1.4(預設)— FabGL 的 8086 PC 模擬器跑在被模擬的 ESP32 上開機,VGA 輸出、PS/2 鍵盤輸入。
  2. FabGL VGA 示範 — 16 色 640×480 VGA + 色塊動畫,PS/2 鍵盤輸入即時回顯(可用虛擬鍵盤)。
  3. 序列埠回音 + LED — Serial、millis()、digitalWrite(2),GPIO 面板可看到腳位閃爍。
  4. Hello(Serial)。

使用

  1. 開啟頁面自動載入 FreeDOS 範例;畫面點一下即可用實體鍵盤,或用下方虛擬鍵盤(Shift/Ctrl/Alt 為鎖定鍵)。
  2. 「載入二進位…」:選擇 .bin(可多個)。位址自動猜測 (bootloader 0x1000、partitions 0x8000、boot_app0 0xE000、app 0x10000、整份 flash 0x0),可手動修改;只給 app 會自動補上預設開機檔。
  3. 「全速」不與實際時間同步;「下載 flash」可取回含寫入結果的 flash。

速度

虛擬 ESP32 為 2×240 MHz,瀏覽器以直譯方式執行,視裝置約為真機的 25–100%(狀態列顯示)。FreeDOS 約需 1–2 分鐘到提示字元,可按 Enter 略過開機選單。

目錄

  • index.html / app.js / js/*.js — 模擬器(soc.js 週邊、xtensa.js JS 核心、cpu_wasm.js+wasm/xtensa.c WASM 核心、i2s.js VGA、ps2.js / ulp.js 鍵盤)
  • assets.js — gzip+base64 內嵌的 ROM、WASM、範例韌體(Space 的二進位檔會被 CDN 重新導向而無 CORS,所以內嵌)
  • firmware/dosvga32/ — 範例韌體原始碼(FabGL PCEmulator 改寫,磁碟映像放在 flash 分區 dosdisk)
  • tools/ — 建置/除錯腳本(build_assets.py、run.mjs、vga.mjs …)

授權

模擬器程式 GPL-3.0-or-later(範例韌體包含 FabGL,GPL-3)。ESP32 ROM 映像取自 Espressif QEMU 發行版;FreeDOS 為 GPL。

開發 / 部署

見 docs/DEVELOPING.md。部署:export HF_TOKEN=hf_...; scripts/deploy.sh(Token 只用環境變數)。整個專案的壓縮原始碼包在 Space 的 downloads/esp32emu-source.tar.gz。