在卡西欧计算器上跑起一个真正的 Telnet BBS

查看原文 HN 讨论

文章摘要

作者是爱尔兰业余无线电爱好者 EI3LH。这篇 8 月 16 日发的文章记录了一个从「对计算器毫无兴趣」到「彻底着迷」的八周历程,最终成果是在一台 8 KB 内存的卡西欧口袋计算器上架起了一个可以用 telnet 拨入的 BBS。

起因是他在 SOTA Reflector 论坛上看到 Mark(M5TEA)提到有人移植了一个卡西欧口袋电脑模拟器——这类机器能写 BASIC,也支持 C 和卡西欧的 CASL 语言。他抱着玩笑心态点进去按了几下按钮,当天又回去看,从「10 PRINT “HELLO WORLD” / 20 GOTO 10」开始,几分钟变成几小时、几天,然后就上瘾了。真正让他改变看法的只有两件事:BASIC 和 RS232。这机器有一个小接口端口和一个伪装成 RS232 串口输入输出的 2.5 mm 插孔。

在此之前他先用 LLM「vibe code」写了一个便携操作时记录电台通联的日志软件 Jamoncito FX(已发布到 GitHub,仍是 alpha),又用 BASIC 写了一个 CW(莫尔斯电码)键控程序(未完成,还需要计算器和电台之间的桥接电路)。他自称不是软件开发出身,编程知识非常有限。

接着他从日本高价进口了两台卡西欧口袋电脑。主力机 Casio VX-4 到手时近乎全新:原盒、说明书和编程手册几乎没翻过,还带选配的 32 KB RAM 扩展卡(机身自带 8 KB;如果够胆把 8 KB 的 IC 拆焊换成 32 KB 芯片,可以把 VX-4 拉满到 64 KB,与它的兄弟型号 FX-870P 齐平),甚至附赠了一根现成的 2.5 mm 转 USB-C 的 FTDI RS232 线。另一台稀有的 Casio Z-1GR 则是彻底死机,万用表都测不到任何反应——卖家标注的是「junk」所以不算欺骗,但他还是有点心疼,计划试试直流供电,并已备好 LCD 偏光膜准备修复偏光片老化的屏幕。

BBS 项目的两大障碍是让计算器上网和 8 KB 内存。他刻意要求 BBS 能在基线 8 KB 的 VX-4 上跑(VX-4 是 FX-870P 的廉价「教育版」,主要卖给教育和商业部门),所以不靠 RAM 扩展。上网只能走 RS232 加一个桥接,他用了手头闲置的 Raspberry Pi Zero W,并给自己定了规矩:Pi 除了提供连通性之外不能干扰 VX-4,BBS 的宿主和运行逻辑 100% 在计算器上。他承认稍微破了一点自己的规矩——Pi 同时充当消息归档库,VX-4 仍然存留言,但会复制一份到 Pi 上的 txt 文件,这样管理员有备份,也能在有人恶意刷屏时保住计算器的空间。安全方面,目前 BBS 通过 Tailscale 和 funneling 以邀请制方式暴露到互联网,避免暴露家庭网络。

BBS 本体用 BASIC 写成,运行后把板载 COM 口设为监听状态等待 CONNECT 信号,收到后打印欢迎横幅并要求呼号登录(这是为了将来把 BBS 开放到分组无线电给业余无线电社群用,也方便他事后翻日志看「QSO」记录)。登录后是四个菜单项:读当前留言、写留言、关于页、断开连接。写留言被限制在 60 个字符以内,理由是性能和防刷屏。由于处理能力有限且串口速率只有 4800 波特(数据传输本就不太稳),BBS 同时只允许一个连接——波特率其实可以提到 9600,但他为了可靠性保持 4800,反正提速也不足以支持并发。他还给闲置的 Adafruit OLED HAT 找了新用途,做成 BBS 状态显示屏,同时显示 4 行状态中的 2 行,不过目前有点不稳定,还会和 VX-4 屏幕上的「呼叫者已挂断,等待下一位」提示冲突。他也担心计算器屏幕不省电可能烧屏,考虑加个屏保或字符动画。

他用 Minicom(Linux)、Termux 和 TERMinator(Android)测试,还录了一段完整演示视频:通过 5G 蜂窝网络(不是家庭网络)连上计算器、登录、读留言、写留言、看关于页、断开。Mark M5TEA 也帮他测了连通性并留了言。文末他计划把代码整理后发到 GitHub,考虑把软件从 BASIC 迁移到 VX-4 所支持的 C,并预先回应了可能的质疑:「肯定会有一群人扶着眼镜、弹药上膛地跟我争论,说依赖 Pi Zero 做桥接就不算真正的 BBS。你随意。」他的结论是:小众爱好的意义就是学习、分享和乐趣。

HN 评论精华

这条帖子 117 分但只有 12 条评论,讨论很松散,基本没有技术争论,主要是怀旧和对网站可读性的吐槽。

原文页面下另有 2 条站内评论:Notowabun Ikasupato 认为如果把 BBS 移植到 C,速度可能有一个数量级的提升,并分享自己解读 VX-4 说明书封面上那些蓝色点划的乐趣——他读出的日文和文摩尔斯是「awa tewa」,勉强可以翻成「Don’t panic」。作者回复说会尽快移植到 C 并开源,也希望能把那台完全没气的 Z-1GR 救活,「这就是买 junk 标签商品的风险」。