展示HN:我编写了一个能在UEFI机器上启动的BASIC解释器
摘要
Thoreau BASIC是一个兼容GW-BASIC的解释器,能在裸机UEFI系统和Windows上运行,具有现代增强功能,如图形功能、文本窗口和改进的性能。
我开始编写Thoreau BASIC是因为我想要一个小型的、老式的BASIC解释器:行号、即时模式、简单图形、字符串、数组,那种计算机以"就绪"提示符启动,你可以立即让它执行任务的环境。<p>然后我想:为什么它需要一个操作系统?<p>所以,我让它通过UEFI在x64机器上直接启动。<p>UEFI版本使用图形输出协议获取帧缓冲区,并直接从固件获取键盘输入。下面没有Windows或Linux。机器启动后直接进入BASIC环境。<p>它支持标准的BASIC功能,加上图形基本操作、32位颜色、浮点数、文件操作和其他我在遇到需要这些功能的程序时添加的功能。现在还有一个Windows版本,这使得尝试它变得相当容易。<p>我的目标之一是兼容旧式Microsoft BASIC的风格和行为,而不是创建一种恰好使用BASIC语法的现代语言。<p>我目前正在将我的文字冒险游戏Pixel Prose移植到Thoreau BASIC。这比人工测试成为了一个更好的测试套件,因为每个缺失的功能或微妙的错误行为最终都会被实际程序暴露出来。<p>该项目故意保持小巧。UEFI版本会以以下内容欢迎你:<p>"I make myself rich by making my wants few."
— Henry David Thoreau<p>随后,在现代PC上有点讽刺地出现类似以下的内容:<p>27,340,685,312 字节可用<p>我有兴趣听到在80年代/90年代编写BASIC的人、解释器/编译器人员,以及任何仍然觉得"就绪"提示符具有吸引力的人。
查看缓存全文
缓存时间: 2026/08/25 04:52
# Tarjan的Thoreau BASIC
来源:https://tarjan.itch.io/thoreaubasic
### ***Thoreau BASIC***
一款兼容GW-BASIC的解释器,可直接运行于裸机环境(同时提供Windows版本)。
数据段大小设置为固件(或Windows)报告的常规内存最大区块,在现代机器上通常为数GB。
**语言特性**
- 基本兼容GW-BASIC。程序以ASCII格式加载和保存。
- 支持数值类型:32位与64位整数(`%`、`&`、`&&`)、单精度与双精度浮点数、字符串。
- 32位宽行号。
- 支持`DEF FN`、`GOSUB`、`ON...GOTO/GOSUB`、`DATA`/`READ`/`RESTORE`及完整控制流。
- 错误处理:`ON ERROR GOTO`、`RESUME`/`RESUME NEXT`/`RESUME n`、`ERL`、`ERR`、`ON BREAK GOTO`
**图形功能**
- `PSET`、`LINE`、`CIRCLE`、`PAINT`等命令工作于原生帧缓冲区分辨率。`PSET`、`LINE`和`PAINT`支持16色EGA或24位RGB语法。
- 支持16色EGA调色板与24位真彩色:`COLOR r,g,b`(含背景三元组)。
- 位图处理:`LOADBMP slot, file$`将24/32位Windows `.BMP`文件加载到数据段槽位;`BITBLT slot, x, y [,key]`进行图像传输,可选透明色键用于精灵图。
- `GRAMAXX`/`GRAMAXY`(图形)和`TXTMAXX`/`TXTMAXY`(文本)为可读变量,存储实际边界值。
- `SCREEN x,y`请求显示模式。`SCREEN 1024,768`在大多数机器上可用且通常为启动模式;可尝试原生分辨率获得更清晰画面。执行`SCREEN`命令后`GRAMAXX`/`GRAMAXY`会自动更新。
**文本处理**
- 采用IBM VGA 8×16字体,支持软滚动控制台。
- 多文本窗口:`WINDOW @n, x1,y1,x2,y2`划分区域;`PRINT @n`、`CLS @n`、`LOCATE @n`和`COLOR @n`在该区域内操作,每个窗口拥有独立光标与画笔/纸色。普通`PRINT`仍控制全屏。
**内存与硬件**
- 三指针内存模型无64KB限制。数组可支持数十亿元素(按需使用)。
- `PEEK`、`POKE`、`VARPTR`及可读指针:`LOMEM`、`HIMEM`、`FREEBOT`、`FREETOP`、`SCRNADR`、`GRAPITCH`。
- 64位`HEX$`/`OCT$`函数。
**磁盘I/O**——直接运行于UEFI简单文件系统的`SAVE`、`LOAD`、`MERGE`、`FILES`、`KILL`。
**编辑功能**——全屏`EDIT`、`AUTO`行号生成及`RENUM`(重新编号并重写所有`GOTO`/`GOSUB`/`THEN`/`ELSE`/`ON...`/`RESTORE`/`RESUME`/`ERL`引用)。
**计时功能**——`TIMER`变量读取CPU不变TSC的高精度时钟。
**v1.2更新内容**
- CHDIR、MKDIR、RMDIR、FIELD、GET#、PUT#、LSET、RSET
- CVI、CVS、CVD、MKI$、MKS$、MKD$
- TAB()、SPC()
- OPTION BASE、ERASE
- NAME old$ AS new$
- MERGE
- DELETE
- CSGN、CDBL
- ERROR n、TRON、TROFF
- SCREEN()函数
**v1.1.3更新内容**
- MID$现可作为赋值目标
- 修复程序出错退出时未存储ERL且不显示错误行的问题
- INPUT:退格键功能修复
**v1.1.2更新内容**
- 修复Windows版本在可用内存低于4GB时退出的问题
- BASIC行现固定为244字符(不含行号)
- 修复EDIT/LIST错误:当行号大于32767时显示空行0
**v1.1.1更新内容**
- 裸机版:修复慢速滚动和帧缓冲区写入问题
- Windows版:新增自动启动功能。现在可通过附加.bas文件名调用ThoreauBASIC实现自动启动
**v1.1更新内容**
- **性能提升约25倍**:采用行级令牌缓存、优先级爬升表达式求值器与变量槽位缓存。计算密集型程序速度提升显著,内置的曼德布罗集程序从约230秒缩短至10秒内,生命游戏现已支持交互运行,月球着陆器以固定100帧/秒运行。
- 新增位图处理(`LOADBMP`/`BITBLT`)、带窗口颜色的文本窗口、`ON ERROR`/`ON BREAK`/`RESUME`、`ERL`/`ERR`、`RENUM`、`PEEK`/`POKE`/`VARPTR`。
- 修正性更新:精确64位整数运算(溢出时转为双精度)、更规范的数字格式、全宽`HEX$`。
## 下载
点击立即下载以获取以下文件:
## 开发日志
- v 1.2 - 新增CHDIR、MKDIR、RMDIR等功能 (https://tarjan.itch.io/thoreaubasic/devlog/1639533/v-12-chdir-mkdir-rmdir-and-more)11小时前
- v 1.1.3 - 修复MID$、ERL和INPUT相关错误 (https://tarjan.itch.io/thoreaubasic/devlog/1638308/v-113-mid-erl-and-input-bugs)1天前
- v1.1.2 - (https://tarjan.itch.io/thoreaubasic/devlog/1638164/v112-)1天前
- v1.1.1 - Windows版自动启动功能与裸机版滚动修复 (https://tarjan.itch.io/thoreaubasic/devlog/1637903/v111-autostart-for-windows-and-scrolling-fix-for-bare-metal)1天前
- Windows版本现已发布!(https://tarjan.itch.io/thoreaubasic/devlog/1637465/windows-version-is-here)2天前
- v1.1 — 性能提升25倍并新增功能 (https://tarjan.itch.io/thoreaubasic/devlog/1636874/v11-25-faster-plus-added-features)2天前
- v1.0 里程碑版本 (https://tarjan.itch.io/thoreaubasic/devlog/1630056/v10-milestone)9天前
- TIMER现已支持高精度计时 (https://tarjan.itch.io/thoreaubasic/devlog/1621566/timer-is-now-high-precision)16天前
查看所有日志 (https://tarjan.itch.io/thoreaubasic/devlog)
相似文章
GPT2-BASIC: 基于BASIC的便携式机器智能
GPT2-BASIC 在 FreeBASIC 中为 DOS 系统实现了 GPT 风格的 Transformer 推理引擎,使用定点算术和本地模型工件,在老旧硬件上运行 AI 辅助任务。
bootai
bootai 是一个开源 UEFI 应用,可直接启动进入 AI 聊天/代码 REPL,在无操作系统的裸机上运行 Qwen2.5 和 SmolLM 模型推理,并配有手写网络驱动和 TCP/IP 协议栈。
如果 EndBASIC 中没有 BASIC 会怎样?—— Julio Merino 著
Julio Merino 探讨了 EndBASIC 的未来,研究是否应移除 BASIC 语言层,以便将底层的 Rust VM 和图形引擎重新用于更现代或更通用的开发需求。
@TrisH0x2A: 每个传统的 x86 BIOS 都会将引导扇区加载到同一地址:0x7C00,一本名为 539kernel 的免费书籍从 t… 开始
一条推文分享了一本名为 539kernel 的免费书籍,该书以地址 0x7C00 的 x86 引导扇区为起点,逐步构建整个操作系统,从第一条指令到可运行的内核。
Theseus,一个静态的Windows模拟器
Theseus是一个新型的静态Windows/x86模拟器,它在编译时翻译程序,而不是在运行时解释或即时编译,代表了一种不同于传统模拟架构的方法。