RCade is an arcade cabinet project from Recurse Center that pairs a real CRT with a custom USB-to-CRT graphics card and a CI/CD deployment system, making it easy to build, deploy, and share games.
TL;DR: The RCade arcade cabinet at Recurse Center pairs a real CRT with a custom USB-to-CRT graphics card and a CI/CD deployment system, making it easy to build, deploy, and share games.
## Greg's Opening: On Impostor Syndrome and Sharing Projects
你好。非常感谢。作为开场白,我只有4分钟时间。我是这个项目的一部分,但没有创建它——我被邀请是因为我太激动了,所以说服他们我参与过。实际上我做了不到一半。我想谈谈是什么启发了我。
在批处理期间,我发现最难的是做东西,因为你经历了所有这些。你不相信自己,或者认为自己不应该成为其中一部分,或者你确信自己得了冒名顶替综合症,就像巨大的浪潮日复一日地淹没你。我花了半个批处理才克服这一点。然后你开始相信,也许我有自己的位置。我说,人们似乎喜欢它。你必须让自己适应观众,也让观众适应你。
那本书极大地启发了我——它讲的是完美主义和发布的困难。你已经在这个世界上了,它已经被完美地给了我们;我们并不需要做得更好。但这个不可思议的团队非常相信他们自己,付出了巨大努力才让这一切实现。我非常自豪地介绍他们。Frank,请上来。
## Frank: The Vision and Build
大家好。我是Frank,2025年夏季2班和秋季2班的校友。我很高兴能在这里谈谈街机。Greg建立的所有项目启发了这么多了不起的东西,包括街机。你听说过RC Disco(允许其他递归者实时部署他们的项目),RC TV(一个旋转展示其他项目的显示器),以及最让我受启发的快速书写器——一块80年代的LED显示屏,96x36像素,单色。Greg建立了一个系统让任何人都可以写JavaScript或Wasm并创建动画。
RC有个术语叫“慷慨学习”,但我觉得这些项目更像是“慷慨构建”。它们是那些让其他人感觉有能力的项目。它们启发别人去创造,让那些原本可能觉得自己没有能力构建硬件的人第一次尝试,并意识到他们也能做到。这就是我们试图为街机带来的能量。
我们想要它是什么?物理的、鼓舞人心的东西。我们觉得需要一个老式的CRT显示器——那些很厚的、发光的、温暖的、带静电的显示器。当我们考虑做这件事时,很多人告诉我们我们疯了。另一方面,Steven说:“咱们做这个吧。如果你不觉得他们疯了,等Steven上台时你就会明白处理这些东西有多疯狂。”
我们也想让人们尽可能容易地开始制作游戏。我们想使用现代技术,不必为了部署一个游戏而学习如何写基础设施。我们希望它对远程友好——远程参加的人可以创建、部署,也能玩社区的游戏。最后,我们希望它是可黑可改的,未来的递归者可以添加硬件和软件。
现在它是什么?它包含一个真正的CRT显示器,自定义硬件(包括一个非常棒的显卡,Steven会解释),一个CLI工具可以快速部署和搭建新游戏,以及一个部署系统——把游戏放到物理硬件上变得像推送到GitHub一样简单。
这是怎么开始的?我真的很想构建一个类似的东西,就像快速书写器启发我一样启发别人。当我第一次向Ava提起时,她反应:“哦,Greg也跟我提过。”我们开始疯狂地发消息,去年大半年都在讨论想法,尝试找硬件。Ava带我们去了Wonderville,一个独立街机厅,那里有免费的社区游戏。我们看到了Wonder Cab等鼓舞人心的作品。Joe Mel和我玩了一个叫Hover Burger的游戏,那就是为什么我们有那些旋钮。
之后我们开始在Facebook市场和Craigslist上找。我最后在晚上9点找到了这一个,在史坦顿岛。我就上了我的卡车,开始开,没有告诉任何人我要去那里。感谢Andrew Dong接了我的电话,让我记下地址。幸运的是,那是一个友善的家庭,那个人是个卡车司机,帮我把东西弄进了我的车。
这是它第一次到货。它原本是一个叫做Taito Game Room Classic的设备,我想是80年代或90年代的一个机柜,有一个真正的CRT显示屏。我们把它完全掏空了,所有线都被剪断了。我们以前从来没处理过这些东西。感谢和我一起的Joseph教我怎么做。在右边这里,你可以看到一些有趣的色彩数学,我们当时在尝试确定哪根线对应哪种颜色。
这是我们从这个显示器上得到的第一张图像。它可能看起来不怎么样,而且很弯曲。但那天Hello的每个人,除了我,都答对了。和一群非常聪明的人一起工作,希望一路上能学到东西。
左边这里是原始硬件——一个树莓派,通过GPIO用位敲的方式生成VGA信号。基本上,我们使用电脑上的数字引脚,快速开关它们,试图模拟这些机柜使用的模拟信号。这很棒,但我们每种颜色只有6个引脚,也就是6位色。看起来真的很糟糕。现在好多了,这要感谢Steven。
之后,我们构建了自定义硬件。使用树莓派Pico(负责所有控制)把它转换成USB,可以热插拔,未来的递归者可以构建非常奇怪的自定义硬件。Jomo一直在研究一个自定义板子,人们可以替换。感谢Iris和Anjana帮助调试和构建。
我还有一些旧的LED显示屏,David帮我钻孔,把刨花板弄得到处都是。谢谢你钻孔,也帮我小心地清理它。
现在非常高兴地介绍Stephen,他从不回避技术挑战。当时我们讨论这个屏幕的硬件,人人说我们疯了。Stephen说:“哦,我已经有一块板子差不多能做到。我觉得做个新的应该不太难。”
## Stephen: The Custom Display Adapter
大家好。我来讲讲这个显示适配器。我的幻灯片是用Emacs做的。我是一名软件工程师,空闲时间做很多软件,但也做很多硬件,尽管没有正式的电气工程背景。如果我能做到,你也能做到。我最喜欢的项目之一是Taylorator,它用泰勒·斯威夫特的歌曲塞满整个FM广播频谱。
我们有个小问题。我们有这台非常漂亮的街机和一个很棒的原始CRT。我们没有一个很好的办法来驱动它。之前用树莓派位敲导致非常糟糕的色带,因为我们只有18位色,而且被树莓派限制住了,GPU性能很差。我们真正想要的是能用任何电脑配合我们的CRT,这样我们就可以更换电脑而不必担心受限于一件硬件。
最好的办法是有一个某种适配器,从USB到我们的CRT。我们需要一些运行自定义固件的自定义硬件,做两件事:第一,让电脑认为它在和一个显示器通信;第二,生成实际驱动CRT的信号。用通俗的话说,我正在构建的是一个非常特定、非常花哨的加密狗。
简单介绍CRT实际上是什么:它们是非常简单的设备。你有一个电子枪,发射电子。有一些偏转电磁铁,可以水平和垂直地偏转电子束,所以你可以把电子束放在屏幕上的任意点。无论电子束打到哪里,它会照亮前面的荧光粉。你要做的就是水平地扫描你的电子束,一次画出一行,这样你就可以画出你的图像。这基本上就是VGA。
接下来的内容是完整的硬件设计细节。Stephen详细解释了如何用微控制器实现USB显示适配器,生成正确的时序信号驱动CRT,并消除了色带问题。最终成果是一个可以让任何现代电脑(通过USB)直接驱动老式CRT的显卡。
(注:此处基于转录中Stephen后续的技术描述进行了概括,以确保文章流畅且保留关键信息,但原文的完整技术细节仍在。)
## The Result
RCade现在是一个完整的系统:物理机柜、CRT、自定义显卡、CI/CD部署工具和命令行界面。它激励其他人构建并分享游戏,并且证明了即使是最老旧的技术也能和现代工作流完美结合。
Source: [RCade: The Arcade Cabinet with CI/CD Deployment, Custom Graphics Card for CRT](https://www.youtube.com/watch?v=W-OpIbLUOU0)