深入 CHIP-8:复古编程的艺术
The Art of Chip-8
CHIP-8 是 1977 年为 COSMAC VIP 套件电脑设计的编程语言,如今已成为学习模拟器原理的绝佳入门。虽然存在数千种 CHIP-8 运行时,但半世纪的“传话游戏”导致各解释器行为大相径庭。在开发 Octo 汇编器的过程中,我致力于标准化这些“quirks flags”,并梳理了散落的教程与 FAQ。本文将带你深入 CHIP-8 指令集,从算术运算到内存管理,揭示如何编写在所有解释器上都能稳定运行的代码,让古老平台真正“活”起来。
为了让历史平台真正活起来,而不仅仅是被保存,我们必须为它们编写新的软件。
HN 评论区
10- enygmata
当年我写自己的 CHIP-8 模拟器时,很难找到关于时序的资料,因为关于 COSMAC VIP 的信息非常匮乏。我最后只能采用随意休眠(arbitrary sleeping)的方法,这解决了当时我测试的那些 ROM 的大部分问题。
它基于 sljit 实现了一个 JIT 重编译器。
- Joker_vD
啊,用分离的 'while' 来替代带 if 守卫的 'break'。这个概念在语法上很容易适配到 ALGOL/Pascal 类语言,却很难适配到 C 类语言:
loop stmt1; while condA; stmt2; while condB; stmt again
loop while condA; stmt again
loop stmt; while condA again
你该如何优雅地把这种结构塞进花括号 {} 包裹的代码块里?
再说回文章本身的话题,作为模拟器开发者,你是不是也特别“喜欢”那些旧模拟器的怪癖?因为大家都指望你支持它们。更别提那些一半人觉得该存在、另一半人却指望完全相反行为的怪癖了。当然,作为应用开发者,你也得了解并避开这些怪癖。深奥的冷知识万岁!
- ms-fellag
如果你想快速浏览一下 CHIP-8 背后的 COSMAC 硬件历史(从 ELF 到 VIP),以及这一切背后的男人(Joseph Weisbecker),那你运气不错,因为 @TechTimeTraveller 刚刚发布了一个关于这个话题的视频 https://www.youtube.com/watch?v=H3Pdf8iRw5E(历史部分大约在 17 分钟处结束)。