开发者生态
morning
醒醒吧! 16b
2026-05-24
1 阅读
MaximilianEmel
醒醒吧! 16b 于 2026 年 5 月在荷兰奥门举行的 Outline Demoparty 上发布,探索 16 字节 x86 程序集的算法密度。观看视频 Demozoo 条目 大家好。 30 多年前,我小时候在一台配有单色绿色显示器的旧 IBM PC 上学习编程,并且一直想为该系统创建一个程序。在过去 15 年里,我创作了 100 多个小介绍。最近我不太活跃,但 Plex 的精彩“Rainbow Surf”只有 16 个字节,激励我再次挖掘一些旧的布满灰尘的草图并开始工作。这个程序的创建是通过通常的修改进行的。我正在研究图形和声音的元胞自动机,并发现了尺寸编码技巧。实际上:a) 多态asm指令,例如add [bx+si],al,即0x0000 b) 跳转到指令中间以节省字节并重用操作码。在数百个小实验中,这个实验仅凭它的声音就脱颖而出。当我展开剩下的部分并删除“其余部分”时,我很难理解到底发生了什么。我摸不着头脑,看着打了很多字节之后剩下的简单公式。我自己也没想到仅仅这几个字节的解释就会如此深入 xD。我 2014 年的原创“M8trix”已经在屏幕上涂抹了伪随机字母(8 个字节,然后是 7 个字节),我一直想知道如何让它“听起来不错”。但按时间顺序,在《唤醒》的发展中,声音是第一位的。既然你“看到你听到的”,那并不重要,但是“16个字节将谢尔宾斯基声音变成矩阵雨”将是一个很好的副标题 =) TLDR:每个时间步,另一条谢尔宾斯基三角形线 a) 在扬声器上播放 b) 以 56 的步长绘制到屏幕上。你可以感觉到运动,但不能真正看到它,因为它有 8192 个“像素宽”,但一行字符只有 80 个字节。在更大的屏幕上,您可以看到三角形。或者,如果您不“跳过像素”并立即绘制所有内容,您也会看到它。所以,这里是 x86 实模式 DOS 汇编的 16 字节。当你运行它时,它使用视频内存作为计算空间来绘制无限的谢尔宾斯基分形,同时用该几何体敲击扬声器。整数 10 小时; 2 字节 mov bh, 0xb8 ; 2 字节 mov ds, bx ; 2字节L:lodsb; 1 字节子 si,字节 57 ; 3 字节 xor [si], al ; 61h,al 输出 2 个字节; 2 字节 jmp 短 L ; 2 个字节 1. 画布:Primed Void 代码以标准 BIOS 中断开始: int 10h 。这将设置视频模式 0,给出 40x25 文本模式网格。然后数据段( ds )指向 0xb800 ,即 VGA/CGA 文本缓冲区的内存地址。当 BIOS 清除屏幕时,它不会用绝对零填充内存。每个字符空间都是两个字节:ASCII 字符和颜色属性。所有 2,000 个插槽均设置为 0x20(空格)和 0x07(黑底浅灰)。所以屏幕看起来是空的,但内存中已经填满了统一的图案。我创作了很多“噪音”或“CA”声音介绍,但这个脱颖而出。无论过去还是现在都超级出乎意料!这里的具体细节是如何在“清晰的屏幕”上初始化内存以及实际可见内存“之前”和“之后”的内容。 “纯粹”的声音也很可爱(我可以用更多的字节仔细设置所有内容,使其在所有系统上听起来都一样),但我仍然必须完全理解这种辛辣的差异,使它听起来更好,恕我直言=)2.引擎:附加前缀和交织在一起,联觉远远超出了我迄今为止在其他小介绍中发现的。我什至可以说,与在没有 RNG 的情况下使用迭代函数系统进行“混沌游戏”相比,它揭示了更多的数学秘密和关系。不管怎样,这一次我希望你能从根本上理解你所听到的数学原理。不仅仅是“你在这里做了一些操作,然后听起来很有趣”。要将其简化为纯数学:假设归零状态而不是 0x20 ,使用 add 而不是 xor ,并一次前进 16 个字节。假设累加器 al 从 2 开始。一个 DOS 段正好是 65,536 字节。每步移动 16 个字节意味着遍历该段正好需要 4,096 步 (\( 65536 / 16 = 4096 \))。然后 si 干净地换回 0x0000 。将单元格之间的值相加会产生部分和。由于 4,096 是 256(8 位寄存器大小)的倍数,因此当段回绕时,进位会完美对齐,从而在每次扫描开始时将 al 完全重置为 2。该值遵循二项式序列,按 2 缩放: $$A^{(p)}[k] \equiv 2 \binom{k+p}{p-1} \pmod{256}$$ 以下是前 16 个步骤逐行累加的方式: Pass \ Cell 3. 结晶:异或和谢尔宾斯基移位 现在,回到组合学。根据特殊定律,当对 2 求模时,就会出现谢尔宾斯基三角形。这个特定的位是被撞击到扬声器中的,而其他位被忽略。为了分离位平面,位的无进位加法是 XOR,这一事实就是它存在而不是 add 的原因。由于代码