如果你觉得现在的科技圈太无聊,那一定是你没见过有人在耳机上玩《毁灭战士》。
不是在连着耳机的手机上玩,也不是在电脑上玩,而是在那颗塞在你耳朵里、比硬币大不了多少的耳机本体上玩。
更魔幻的是,这哥们不仅把游戏跑通了,还把耳机连上了网。现在,全世界的人都能排队,通过远程连接去操控这只耳机里的恶魔猎人。
排队几小时,就为了在一只耳机上玩 1993 年的老游戏?这听起来像个赛博朋克笑话,但它真实发生了。
只有开源耳机能干这种事
这事儿的主角不是 AirPods,也不是任何索尼或bose的高端货。
它叫 Pinebuds Pro,一款极客圈子里才有人知道的开源固件耳机。
为什么必须是它?
因为普通耳机的固件是锁死的黑盒,你想改一行代码都难如登天。而 Pinebuds Pro 开放了控制权,让开发者能够把那颗微小的芯片压榨到极致。
于是,有人真的动手了。## 在针尖上跳舞的硬件极限
把《毁灭战士》塞进耳机,这不仅仅是情怀,这是一场惨烈的硬件资源战争。
首先是屏幕,或者说,根本没有屏幕。
耳机怎么传画面?蓝牙太慢了,那点带宽用来传音频都勉强,想传视频流?想都别想,大概率只有 1mbps 的速度,卡成幻灯片。
开发者只能祭出“物理外挂”——利用耳机上的 UART 触点(串行接口)。这玩意儿硬生生把带宽拉到了 2.4mbps。
但这还不够。《毁灭战士》的一帧原始画面是 320x200 像素,占用 96KB 内存。在 2.4mbps 的带宽下,如果不压缩,帧率只有凄惨的 3 FPS。
这哪是玩游戏,这是在看 PPT。
必须压缩,但又要极省资源。
现代视频编码像 H.264?别逗了,那点 CPU 算力跑不动。最后只能用最古老的 MJPEG,也就是把每一帧都当成 JPEG 图片来传。
经过这一顿操作,理论帧率终于冲到了 22 FPS 以上,实际运行能稳定在 18 FPS。虽然还是有点卡,但至少能玩了。
为了 1MB 内存,把芯片榨干
带宽解决了,CPU 和内存又成了拦路虎。
Pinebuds Pro 默认只有可怜的 768KB RAM,而《毁灭战士》原版需求是 4MB。
这就像试图把一头大象塞进冰箱。
开发者干了什么?他把 CPU 频率从默认的 100MHz 强行超频到 300MHz,直接关掉了低功耗模式。
然后,他开始“杀人放火”:禁用协处理器,硬是抢到了 992KB 的内存空间。还不够。
他开始疯狂修改代码:预生成查找表、把变量变成常量、禁用游戏自带的缓存系统、删掉所有不必要的变量。
每一行代码都在为了省下几个字节而绞尽脑汁。
最后是存储空间。
耳机的闪存只有 4MB,而《毁灭战士》的共享版资源文件(WAD)是 4.2MB。
装不下,绝对装不下。
这时候,社区的力量显现了。一位名叫 fragglet 的《毁灭战士》大神,早就制作了一个精简版的资源文件“Squashware”,只有 1.7MB。靠着这个“瘦身版”游戏,一切终于严丝合缝地塞进了那只小小的耳机里。
全球排队,只为玩个耳机
这不仅仅是一个技术 Demo,它已经变成了一场互联网狂欢。
为了让大家都能体验,开发者搭建了一套复杂的系统:
- 跑在耳机上的游戏客户端;
- 负责转码和传输的串行服务器;
- 管理排队和按键的 Web 服务器;
- 展示画面的前端网页。
你打开网站,能看到一个 Twitch 直播窗口。当你排队排到第 5 名时,画面会自动切换成低延迟的实时流。此时,你敲击键盘,指令飞过互联网,进入那只耳机,控制屏幕里的恶魔开枪射击。
这大概是人类历史上最昂贵的“云游戏”终端之一。
软件的胜利,还是经济的失败?
看着这只发热的耳机,评论区里有人发出了灵魂拷问:
“每当我看到这种把《毁灭战士》塞进廉价设备的壮举,我就想问:这到底是软件战胜硬件的胜利,还是硬件制造业在经济上的失败?”
为什么我们要在听歌的耳机里塞进这种算力?或许,这就是极客的浪漫。
就像有人说的,现在的游戏越来越大、越来越复杂,却唯独失去了那种纯粹的乐趣。而《毁灭战士》就像一把尺子,衡量着每一款芯片的潜力。
从冰箱到微波炉,从智能马桶到现在的耳机,如果它不能跑《毁灭战士》,那它就不算真正的智能设备。
甚至有人已经在展望未来了:
“再过几年,耳机内存再大点,我们就能在上面跑本地 Kubernetes 集群了。”
还有人在等下一个挑战:
“我在等那个把《毁灭战士》移植到一次性电子烟芯片上的帖子。”开发者自己在网站最后写了一句:
“无耻的 LinkedIn 推广?我想你会问的!(请雇佣我)”
把 30 年前的游戏塞进耳机,不仅是为了好玩,或许,这也是一份最硬核的简历。
在这个算力过剩的时代,还有人愿意在 992KB 的内存里精打细算,这种笨拙的执着,反倒显得有点可爱。
下一个被《毁灭战士》征服的,会是什么?
参考链接:
https://doombuds.com