执行 VML/VMB 程序的多种运行时环境:C# 运行时、C 跨平台运行时、终端模拟器、GUI 模拟器
多种运行时环境满足不同场景需求
| 运行时 | 语言 | 用途 | 特性 |
|---|---|---|---|
| VMLRuntime | C# (.NET) | 核心指令执行引擎 | 完整 SYSCALL、MMIO 设备、浮点/双精度 |
| VMLRuntimeC | C99 | 跨平台原生运行时 | 无依赖、VGA 渲染、音频录音、~100KB 体积 |
| ConsoleEmulator | C# (.NET) | 终端模拟器 | VGA 文本模式、键盘脚本、多种设备类型 |
| FullDevicesEmulator | C# (Avalonia) | GUI 全设备模拟器 | 图形界面、设备可视化、AI 面板集成 |
| VMLIde | C# (Avalonia) | 桌面 IDE | 代码编辑、编译、运行、AI 辅助 |
C# 实现的 VML 虚拟机,完整支持 92 条指令 + 30+ 系统调用
地址空间 (32-bit)
0x000000 ┌──────────┐
│ 代码段 │ .text
0x000400 ├──────────┤
│ 数据段 │ .data / .rodata
0x008000 ├──────────┤
│ 堆 → │ malloc 向上增长
│ ← 栈 │ 栈向下增长
0xFFFFFF └──────────┘
特殊地址:
0xE000 FFI 函数指针表 (OS 模式)
0xE030 FFI 初始化标志
0xF000 MMIO 设备寄存器
从加载 VMB 到程序结束的完整执行周期
最常用的 VML 程序运行工具,支持多种设备和调试模式
| 命令 | 说明 |
|---|---|
consoleemulator -r file.vml | 运行 VML 程序 |
consoleemulator -r file.vml --debug | 启用调试跟踪 |
consoleemulator -r file.vml --timeout 60 | 60 秒超时 (0=无限制) |
consoleemulator -r file.vml --mode os | OS 模式 (全部 SYSCALL) |
consoleemulator -s file.vml --debug | 单步调试 |
consoleemulator -v | 显示版本 |
| 参数 | 设备 | CPU | 内存 | 显示 |
|---|---|---|---|---|
--device apple2 | Apple II | 6502 @1MHz | 64KB | 280×192 6色 |
--device c64 | Commodore 64 | 6510 @1MHz | 64KB | 320×200 16色 |
--device zxspectrum | ZX Spectrum | Z80 @3.5MHz | 48KB | 256×192 15色 |
--device msx | MSX1 | Z80 @3.58MHz | 64KB | 256×192 16色 |
--device cpc464 | Amstrad CPC | Z80 @4MHz | 64KB | 640×200 27色 |
--device pet2001 | Commodore PET | 6502 @1MHz | 32KB | 40×25 文本 |
# script.txt — 自动输入脚本
wait 1000 # 等待 1 秒
key Space # 按空格
key 4
key 5
key Enter # 确认
# 注释: 支持 a-z, 0-9, Space, Enter, Up, Down, Left, Right, F1-F12
# 组合键: key ctrl+a, key ctrl+shift+a
纯 C99 实现,零依赖,可编译到任何有 C 编译器的平台 (~100KB)
# 编译
cd VMLFast/VMLRuntimeC
make # 标准编译
make release # 发布编译
make static # 静态编译
make install # 安装到 /usr/local/bin
# 运行
./vmlrun program.vml # VML 文本
./vmlrun program.vmb # VMB 二进制
./vmlrun --os program.vml # OS 模式
./vmlrun -d program.vml # 调试模式
./vmlrun --vga program.vml # VGA 渲染
./vmlrun --record-audio out.wav program.vml
VMLFast/VMLRuntimeC/include/vml_opcodes.h 必须与 VMLAssembler/OpCode.cs 值一一对应。C# OpCode.cs 是唯一权威定义。
基于 Avalonia 的跨平台桌面 IDE,集成代码编辑、编译、运行、AI 辅助
语法高亮、代码补全、多标签页、22 种语言支持。集成前端编译器一键编译到 VML。
断点设置、单步执行 (Step/Next/StepOut)、寄存器查看、内存浏览、反汇编视图。
FullDevicesEmulator 集成,VGA 显示输出、键盘输入、设备状态面板实时更新。
代码解释、编译器错误分析、VML 汇编优化建议。
VML 支持硬件中断和软件异常的完整机制
| 指令 | 值 | 说明 |
|---|---|---|
CLI | 78 | 清除中断标志(关中断) |
STI | 79 | 设置中断标志(开中断) |
IRET | 80 | 从中断返回(恢复上下文) |
TRY | 81 | 尝试执行代码块,捕获异常 |
CATCH | — | 异常处理入口标签 |
ENDCATCH | 82 | 异常处理结束 |
SYSCALL #70 | — | 寄存器快照 (调试) |
SYSCALL #71 | — | 寄存器恢复 (调试) |