256 字节画出 DOS 风景:用振荡器与 x87 写成的 640x400
来源:onirom.fr — 2026-11
📋 概述
作者把 2021 年的一组 p5.js 草图,最终压成了 256 字节的 386 实模式 x86 + x87 程序,在 VESA 2 的 640x400 32bpp 屏上画出一幅用振荡器生成的荒凉风景,投稿 Outline 2026。过程分四步:先把 p5.js 代码搬到类似 x87 的栈式写法(顺手用 Gforth 试了试,发现 Forth 到 x87 的映射意外自然);再做灰度 DOS 移植(约 320 字节);然后优化 FPU 指令与常量腾出空间上色;最后加上按像素平均亮度递增的抖动上色。收尾是兼容性与渲染:默认 3000 周期的 DOSBox 要 13 分钟才渲完,2 万周期约 2 分 30 秒;Bochs 上暴露的黑方块来自分段初始化与 VESA 分页,靠复用调色板数据当浮点常量、压缩初始化代码挤出几个字节修掉。
🔑 核心要点
- 整幅画是两个振荡器方程在 256 字节里迭代出来的,没有贴图也没有随机数。
- VESA 640x400 32bpp,为了省字节,浮点常量与调色板数据共用同一段内存。
- 默认 DOSBox 周期下渲染 约 13 分钟,2 万周期降到 2 分 30 秒。
- 兼容版把两个主循环合并成一个,用 ECX 的高低半分别做帧计数与振荡器索引。
- 为了守住 386 时代,作者刻意避开 fcomi 指令。
- Bochs 上明显、DOSBox 上几乎看不见的黑方块,根因是分段初始化与 VESA 分页。
💡 金句
默认 3000 周期(286 时代)的 DOSBox 要跑 13 分钟才渲完一帧,这数字本身就说明问题。
👍 0
👎 0
← 返回 Lobsters 首页