{ "docs": { "riscv": { "label": "// risc-v", "heading": "RISC-V 仿真 (ESP32-C3)", "lead": "ESP32-C3、XIAO ESP32-C3 和 C3 SuperMini 开发板运行在 RISC-V RV32IMC 架构上,主频 160 MHz。Velxio 通过与 Xtensa ESP32 系列相同的基于 QEMU 的后端来仿真它们,使用 libqemu-riscv32esp32c3-picsimlab 机器目标。仓库中有一个独立的 TypeScript ISA 实现,用于单元测试 RV32IMC 指令解码,但它不是生产仿真路径。", "boardsHeading": "支持的开发板", "boardEsp32C3": "ESP32-C3 DevKit", "boardXiaoC3": "Seeed XIAO ESP32-C3", "boardC3Super": "ESP32-C3 SuperMini", "altEsp32C3": "ESP32-C3 DevKit", "altXiaoC3": "Seeed XIAO ESP32-C3", "altC3Super": "ESP32-C3 SuperMini", "thBoard": "开发板", "thCpu": "CPU", "thFlash": "闪存", "thRam": "RAM", "boardEsp32C3Name": "ESP32-C3", "boardXiaoC3Name": "XIAO ESP32-C3", "boardC3SuperName": "C3 SuperMini", "cpuValue": "RV32IMC @ 160 MHz", "flashValue": "4 MB", "ramValue": "384 KB DRAM", "memoryHeading": "内存映射", "thRegion": "区域", "thBaseAddr": "基地址", "thSize": "大小", "thDescription": "描述", "regIrom": "IROM (闪存)", "regIromDesc": "存储在闪存中的代码", "regDrom": "DROM (闪存只读)", "regDromDesc": "闪存中的只读数据", "regDram": "DRAM", "regDramDesc": "数据 RAM (栈 + 堆)", "regIram": "IRAM", "regIramDesc": "指令 RAM (从闪存复制)", "regUart": "UART0", "regUartDesc": "串口 0 (GPIO 20/21)", "regGpio": "GPIO", "regGpioDesc": "GPIO 输出/输入/使能", "size4mb": "4 MB", "size384kb": "384 KB", "size1kb": "1 KB", "size512b": "512 B", "isaHeading": "ISA 支持", "isaRv32i": "RV32I: 完整的基础整数指令集 (ALU、加载/存储、分支、JAL/JALR)", "isaRv32m": "RV32M: 乘除法: MUL, MULH, MULHSU, MULHU, DIV, DIVU, REM, REMU", "isaRv32c": "RV32C: 16 位压缩指令: C.LI, C.ADDI, C.LUI, C.J, C.JAL, C.BEQZ, C.BNEZ, C.MV, C.ADD, C.JR, C.JALR, C.LW, C.SW, C.LWSP, C.SWSP, C.SLLI, C.ADDI4SPN", "compileFlowHeading": "编译流程", "compileFlowLead": "当您为 ESP32-C3 开发板点击 编译并运行 时:", "compileStep1": "后端使用 arduino-cliesp32:esp32 核心编译您的草图。", "compileStep2": "生成的二进制文件是一个 合并的 4 MB 闪存映像:引导加载程序位于 0x1000,分区表位于 0x8000,应用程序位于 0x10000。", "compileStep3": "前端的 esp32ImageParser.ts 在偏移量 0x10000 处找到应用程序,读取 24 字节的 ESP32 映像头 (魔术字 0xE9),并提取所有段 (加载地址 + 数据)。", "compileStep4": "每个段被写入 Esp32C3Simulator 的正确内存区域 (IROM、DROM、DRAM 或 IRAM)。", "compileStep5": "CPU 从映像头中指定的入口点开始执行。", "gpioHeading": "GPIO 寄存器", "thRegister": "寄存器", "thOffset": "偏移量", "regOutDesc": "当前输出值", "regW1tsDesc": "置位位 (写 1 置位)", "regW1tcDesc": "清零位 (写 1 清零)", "regEnableDesc": "输出使能", "regInDesc": "输入引脚状态", "uart0Heading": "UART0", "uart0Body": "向 0x60000000 (UART0 FIFO) 写入一个字节会触发 onSerialData 回调,该回调将字符流式传输到串口监视器。从同一地址读取会从接收 FIFO 中弹出 (由 Serial.read() 使用)。UART 状态寄存器始终返回 0 (TX 就绪)。", "sourceFilesHeading": "关键源文件", "thFile": "文件", "thRole": "角色", "fileRiscVCoreDesc": "RV32IMC 解释器 (step, MMIO 钩子)", "fileEsp32C3SimDesc": "ESP32-C3 外设、内存映射、生命周期", "fileImageParserDesc": "解析合并的闪存映像,提取段", "fullDetailsCallout": "完整详情: 仓库中的 docs/RISCV_EMULATION.md。" }, "setup": { "label": "// 项目状态", "heading": "项目状态", "lead": "Velxio 中当前实现的所有功能的全面概述。", "avrHeading": "AVR 仿真 (avr8js)", "thFeature": "功能", "thStatus": "状态", "statWorking": "工作中", "featAtmega": "ATmega328p CPU @ 16 MHz", "featTimers": "Timer0, Timer1, Timer2", "featUsart": "USART (串口)", "featAdc": "ADC (analogRead)", "featGpio": "完整 GPIO (PORTB / PORTC / PORTD)", "feat60fps": "~60 FPS 循环 (267k 周期/帧)", "featSpeed": "速度控制 (0.1x - 10x)", "featPwm": "PWM 监控 (6 通道)", "featInjection": "外部引脚注入 (输入)", "compSysHeading": "组件系统 (48+)", "featAst": "通过 AST 自动发现", "statAstDetected": "检测到 48 个组件", "featPicker": "带搜索的 ComponentPickerModal", "featCategories": "9 个类别,带筛选器", "featDynRender": "通用 DynamicComponent 渲染器", "featDnd": "画布上的拖放", "featRotation": "旋转 (90 度增量)", "featPropsDialog": "属性对话框 (单击)", "featPinOverlay": "引脚覆盖层 (可点击的青色圆点)", "partsHeading": "交互式部件 (16 个已仿真)", "thPart": "部件", "thType": "类型", "partLed": "LED", "partRgb": "RGB LED", "partLedBar": "LED 条形图 (10 个 LED)", "part7Seg": "7 段数码管", "partPushButton": "按钮", "partPushButton6": "6mm 按钮", "partSlide": "滑动开关", "partDipSwitch": "8 位 DIP 开关", "partPot": "电位器", "partSlidePot": "滑动电位器", "partPhoto": "光敏电阻", "partJoystick": "模拟摇杆", "partServo": "舵机", "partBuzzer": "蜂鸣器", "partLcd1602": "LCD 1602", "partLcd2004": "LCD 2004", "typeOutput": "输出", "typeOutputDigPwm": "输出 (数字 + PWM)", "typeInput": "输入", "typeInputAdc": "输入 (ADC)", "typeInputAdcDigital": "输入 (ADC + 数字)", "typeInputOutput": "输入/输出", "typeOutputAudio": "输出 (Web Audio)", "typeOutputHd44780": "输出 (完整 HD44780)", "wireHeading": "导线系统", "featPinClick": "通过点击创建引脚到引脚连接", "featPreview": "实时预览 (绿色虚线)", "featOrtho": "正交布线 (无对角线)", "featSegEdit": "线段编辑 (垂直拖动)", "feat8Colors": "8 种颜色,按信号类型区分", "featAutoUpdate": "移动组件时自动更新", "featSnap": "网格吸附 (20 像素)", "featSelDel": "导线选择和删除", "examplesHeading": "示例项目 (8 个)", "thExample": "示例", "thDifficulty": "难度", "exBlink": "闪烁 LED", "exTraffic": "交通灯", "exButton": "按钮控制", "exFade": "LED 渐亮 (PWM)", "exSerial": "串口 Hello World", "exRgbColors": "RGB LED 颜色", "exSimon": "西蒙游戏", "exLcd": "LCD 20x4 显示屏", "catBasics": "基础", "catComm": "通信", "catGames": "游戏", "catDisplaysCat": "显示", "diffBeginner": "初学者", "diffIntermediate": "中级", "diffAdvanced": "高级", "troubleshootingHeading": "故障排除", "tsModuleProblem": "Cannot find module '@wokwi/elements' / 'avr8js'", "tsLedProblem": "LED 不闪烁", "tsLedSolution": "先编译,然后点击运行。检查组件的属性对话框中的引脚分配。", "tsNewCompProblem": "新组件未出现在选择器中", "tsNewCompSolution": "请参阅上面的“更新 wokwi-elements 后” - 将 wokwi-elements 克隆到 third-party/ 中,然后运行 npm run generate:metadata。", "fullStatusCallout": "完整状态: 请参阅仓库中的 docs/SETUP_COMPLETE.md。" }, "esp32": { "label": "// xtensa", "heading": "ESP32 仿真 (Xtensa)", "lead": "ESP32 和 ESP32-S3 开发板使用 Xtensa LX6 / LX7 架构。由于没有生产质量的纯 JavaScript Xtensa 仿真器,Velxio 为这些开发板使用了一个 基于 QEMU 的后端,即 lcgamboa 分支,带有 libqemu-xtensa,编译为原生二进制文件,并由 FastAPI 后端提供服务。", "noteCallout": "注意: 本节适用于 ESP32ESP32-S3 (Xtensa) 和 ESP32-C3 (RISC-V) - 它们都共享相同的 QEMU lcgamboa 管道,只是使用不同的 libqemu 二进制文件和机器目标。有关 C3 特定的差异,请参阅 RISC-V 仿真 (ESP32-C3)。", "howHeading": "工作原理", "how1": "Arduino 草图由 arduino-cli 编译为 ESP32 .bin 闪存映像。", "how2": "前端通过 WebSocket (Esp32Bridge) 将二进制文件发送到后端。", "how3": "后端使用 lcgamboa Xtensa 插件启动一个 QEMU 进程,加载映像。", "how4": "GPIO 和 UART 事件通过 WebSocket 转发回浏览器。", "how5": "前端实时更新组件状态 (LED、显示屏等)。", "boardsHeading": "支持的开发板", "boardEsp32Devkit": "ESP32 DevKit C V4", "altEsp32Devkit": "ESP32 DevKit C V4", "boardEsp32S3": "ESP32-S3", "altEsp32S3": "ESP32-S3", "boardEsp32Cam": "ESP32-CAM", "altEsp32Cam": "ESP32-CAM", "boardXiaoS3": "Seeed XIAO ESP32-S3", "altXiaoS3": "Seeed XIAO ESP32-S3", "boardNanoEsp32": "Arduino Nano ESP32", "altNanoEsp32": "Arduino Nano ESP32", "thBoard": "开发板", "thCpu": "CPU", "thEmulation": "仿真方式", "boardEsp32": "ESP32", "boardEsp32S3Name": "ESP32-S3", "cpuLx6": "Xtensa LX6 双核 @ 240 MHz", "cpuLx7": "Xtensa LX7 双核 @ 240 MHz", "emuQemu": "QEMU (lcgamboa)", "peripheralsHeading": "外设支持", "perGpio": "GPIO: 数字输出/输入, LED 控制", "perUart": "UART: 通过 Serial.print() 的串口监视器", "perI2cSpi": "I2C / SPI: 外设通信", "perRmt": "RMT / NeoPixel: 可寻址 LED 灯带", "perLedc": "LEDC / PWM: 硬件 PWM 通道", "perWifi": "WiFi: 部分支持 (连接事件转发)", "requirementsHeading": "要求", "requirementsBody": "基于 QEMU 的仿真需要运行 Velxio 后端。这意味着它适用于 托管版本 (位于 velxio.dev) 和 Docker 自托管,但不适用于纯静态前端部署。", "fullDetailsCallout": "完整详情: 仓库中的 docs/ESP32_EMULATION.md。" }, "roadmap": { "label": "// 未来", "heading": "路线图", "lead": "Velxio 已实现、正在进行中和计划在未来版本中实现的功能。", "implementedHeading": "已实现", "impMonaco": "Monaco 编辑器,支持 C++ 语法高亮、自动补全和缩略图", "impMultiFile": "多文件工作区,可创建、重命名、删除和切换文件", "impArduinoCli": "通过 arduino-cli 进行 Arduino 编译 (支持多文件草图)", "impAvr": "通过 avr8js 实现真实的 ATmega328p / ATmega2560 仿真,主频 16 MHz", "impPeripherals": "完整的 GPIO、定时器、USART、ADC、SPI、I2C 支持", "impRp2040": "通过 rp2040js 实现真实的 RP2040 仿真,主频 133 MHz", "impWokwi": "48 个以上的 wokwi-elements 组件,带组件选择器", "impWires": "导线创建、正交布线和基于线段的编辑", "impSerial": "串口监视器,支持自动波特率检测和发送", "impLibMgr": "库管理器 (浏览和安装 Arduino 库)", "impAuth": "电子邮件/密码和 Google OAuth 认证", "impProjects": "项目保存、更新、删除,带永久 URL", "impExamples": "8 个内置示例项目", "impDocker": "单容器 Docker 镜像,发布到 GHCR 和 Docker Hub", "inProgressHeading": "进行中", "ipWires": "功能性导线连接,电气信号路由和验证", "ipWireErrors": "导线连接错误处理,检测短路和无效连接", "nearTermHeading": "计划:近期", "ntUndoRedo": "代码编辑和画布更改的撤销/重做", "ntExport": "将项目导出/导入为 .zip 文件", "ntMoreBoards": "更多开发板,ESP32、Arduino Leonardo", "ntBreadboard": "面包板,放置组件并自动布线", "midTermHeading": "计划:中期", "mtTypeDoc": "TypeDoc API 文档,从源代码自动生成", "mtGhPages": "GitHub Pages 文档站点,推送到 main 时自动部署", "mtSensors": "更多传感器仿真,HC-SR04、DHT22、红外接收器", "mtEeprom": "EEPROM 仿真,仿真重启后持久化读写", "mtScope": "示波器组件,绘制模拟引脚电压随时间变化", "longTermHeading": "计划:长期", "ltMultiplayer": "多人协作,实时共享和协同编辑仿真", "ltTutorials": "嵌入式教程系统,编辑器内逐步指导项目", "ltSdk": "自定义组件 SDK,使用 JSON/TypeScript API 定义新组件", "ltMobile": "移动/平板支持,响应式布局适配触摸设备", "contributeCallout": "想要贡献? 欢迎在 github.com/davidmonterocrespo24/velxio 提交功能请求、错误报告和拉取请求。" }, "emulator": { "label": "// 内部机制", "heading": "仿真器架构", "lead": "Velxio 使用 真实的 CPU 仿真,而不是简化模型。本文档描述了仿真的每一层如何工作。", "dataFlowHeading": "高级数据流", "avr8Heading": "AVR8 仿真 (Arduino Uno / Nano / Mega)", "avr8Body": "AVR 后端使用 avr8js,它实现了一个完整的 ATmega328p / ATmega2560 处理器。", "execLoopHeading": "执行循环", "execLoopBody": "每个动画帧执行大约 267,000 个 CPU 周期 (16 MHz / 60 FPS):", "peripheralsHeading": "支持的外设", "thPeripheral": "外设", "thDetails": "详情", "perGpio": "GPIO", "perGpioDetail": "PORTB (引脚 8-13), PORTC (A0-A5), PORTD (引脚 0-7)", "perTimers": "Timer0 / Timer1 / Timer2", "perTimersDetail": "millis(), delay(), 通过 analogWrite() 的 PWM", "perUsart": "USART", "perUsartDetail": "完整的发送和接收,为串口监视器提供支持", "perAdc": "ADC", "perAdcDetail": "10 位,5 V 参考电压,引脚 A0-A5", "perSpi": "SPI", "perSpiDetail": "硬件 SPI (支持 ILI9341、SD 卡等)", "perI2c": "I2C (TWI)", "perI2cDetail": "硬件 I2C,带虚拟设备总线", "pinMappingHeading": "引脚映射", "thArduinoPin": "Arduino 引脚", "thAvrPort": "AVR 端口", "thBit": "位", "rp2040Heading": "RP2040 仿真 (Raspberry Pi Pico)", "rp2040Body": "RP2040 后端使用 rp2040js。", "rp2040Bullet1": "真实的 RP2040 仿真,主频 133 MHz", "rp2040Bullet2": "UART0 串行输出显示在串口监视器中", "rp2040Bullet3": "GPIO 26-29 (A0-A3) 上的 12 位 ADC,参考电压 3.3 V", "hexHeading": "HEX 文件格式", "hexBody": "Arduino 编译生成 Intel HEX 格式。解析器位于 hexParser.ts:", "hex1": "读取以 : 开头的行", "hex2": "提取地址、记录类型和数据字节", "hex3": "返回程序字节的 Uint8Array", "hex4": "AVRSimulator 将其转换为 Uint16Array (16 位字,小端序)", "sourceFilesHeading": "关键源文件", "thFile": "文件", "thPurpose": "用途", "fileAvrSimDesc": "AVR8 CPU 仿真器封装", "filePinManagerDesc": "将 Arduino 引脚映射到 UI 组件", "fileHexParserDesc": "Intel HEX 解析器", "fileSimCanvasDesc": "画布渲染", "fileArduinoCliDesc": "arduino-cli 封装", "fileCompileRouteDesc": "编译 API 端点" }, "architecture": { "label": "// 系统设计", "heading": "项目架构", "lead": "Velxio 是一个完全本地的 Arduino 仿真器,使用官方的 Wokwi 仓库以获得最大兼容性。它具有真实的 AVR8 CPU 仿真、48 个以上的交互式电子组件、全面的导线系统以及构建时的组件发现管道。", "overviewHeading": "高级概述", "dataFlowsHeading": "数据流", "compilationHeading": "1. 编译", "simLoopHeading": "2. 仿真循环", "inputCompsHeading": "3. 输入组件", "storesHeading": "关键前端存储 (Zustand)", "thStore": "存储", "thKeyState": "关键状态", "storeEditorState": "files[], activeFileId", "storeEditorPurpose": "多文件 Monaco 工作区", "storeSimState": "simulator, components, wires, running", "storeSimPurpose": "仿真 + 画布状态", "storeAuthState": "user, token", "storeAuthPurpose": "认证 (持久化到 localStorage)", "storeProjectState": "projectId, slug", "storeProjectPurpose": "当前打开的项目", "routesHeading": "后端路由", "thRoute": "路由", "routeCompileDesc": "编译草图文件 - Intel HEX / UF2", "routeBoardsDesc": "列出可用开发板", "routeAuthDesc": "电子邮件/密码 + Google OAuth", "routeProjectsDesc": "CRUD 项目持久化 (SQLite)", "routeLibsDesc": "Arduino 库管理器集成", "routeHealthDesc": "健康检查端点", "wireSysHeading": "导线系统", "wireSysLead": "导线存储为对象,其起点/终点端点连接到组件引脚位置:", "wireBullet1": "正交布线,无对角线线段", "wireBullet2": "线段拖动,垂直于线段方向拖动", "wireBullet3": "自动更新,移动组件时重新计算导线位置", "wireBullet4": "网格吸附,所有导线端点使用 20 像素网格", "fullDetailsCallout": "完整详情: 请参阅仓库中的 docs/ARCHITECTURE.md。" }, "intro": { "label": "// 概述", "heading": "简介", "lead": "Velxio 是一个完全本地、开源的 Arduino 仿真器,完全在浏览器中运行。编写 Arduino C++ 代码,使用真实的 arduino-cli 后端编译,并通过真实的 AVR8 / RP2040 CPU 仿真进行仿真,支持 48 个以上的交互式电子组件,无需在您的机器上安装任何软件。", "whyHeading": "为什么选择 Velxio?", "whyNoInstall": "无需安装:一切都在浏览器中运行。", "whyRealEmulation": "真实仿真:不是简化模型,而是精确的 AVR8 / RP2040 CPU 仿真。", "whyInteractive": "交互式组件:LED、按钮、电位器、显示屏、传感器等。", "whyOpenSource": "开源:可以检查、修改和自行托管。", "boardsHeading": "支持的开发板", "thBoard": "开发板", "thCpu": "CPU", "thEmulator": "仿真器", "boardArduinoUno": "Arduino Uno", "boardArduinoNano": "Arduino Nano", "boardArduinoMega": "Arduino Mega", "boardPiPico": "Raspberry Pi Pico", "boardEsp32C3": "ESP32-C3 / XIAO C3 / C3 SuperMini", "boardEsp32": "ESP32 / ESP32-S3", "cpuAtmega328p": "ATmega328p @ 16 MHz", "cpuAtmega2560": "ATmega2560 @ 16 MHz", "cpuRp2040": "RP2040 @ 133 MHz", "cpuRv32imc": "RV32IMC @ 160 MHz", "cpuXtensa": "Xtensa LX6/LX7 @ 240 MHz", "emuAvr8js": "avr8js", "emuRp2040js": "rp2040js", "emuEsp32C3": "Esp32C3Simulator (浏览器)", "emuQemu": "QEMU (lcgamboa)", "liveDemoCallout": "在线演示: velxio.dev,无需安装,打开编辑器即可立即开始仿真。" }, "nav": { "intro": "简介", "gettingStarted": "快速开始", "emulator": "仿真器架构", "riscvEmulation": "RISC-V 仿真 (ESP32-C3)", "esp32Emulation": "ESP32 仿真 (Xtensa)", "rp2040Emulation": "RP2040 仿真 (Raspberry Pi Pico)", "raspberryPi3Emulation": "Raspberry Pi 3 仿真 (QEMU)", "components": "组件参考", "architecture": "项目架构", "thirdParty": "Wokwi 库", "mcp": "MCP 服务器", "setup": "项目状态", "roadmap": "路线图", "buildQemu": "从源码构建 QEMU" } } }