1977年12月,《BYTE》杂志刊出Gerry Wheeler的《Undocumented M6800 Instructions》。文中有两个字节很扎眼:$9D和$DD。Wheeler把它们命名为HCF,Halt and Catch Fire。

这不是后来AMC剧集造出来的流行语。剧集晚得多。HCF先是程序员式玩笑,后来被拿来指代一类真实现象:某段机器码、非法操作码或未公开状态,会让CPU停止正常执行,系统通常只能reset,严重时要power-cycle。

我更在意的是后半句。HCF不是“芯片里藏了恶意后门”的故事。它更像早期处理器设计留下的边角:手册写的是秩序,硅片上还有没被写进手册的路径。

HCF说的不是起火,而是CPU进入不可恢复状态

HCF这个名字本来就带玩笑味。

汇编指令常用三字母助记符,比如ADD、CMP、JMP。工程师也会编一些黑色幽默式名字,HCF里的“Catch Fire”多半也在这个语境里。

但玩笑之所以留下来,是因为它碰到了硬件事实。

早期CPU并不会为每个未使用的操作码都设计干净出口。晶体管预算有限,译码逻辑也要省。于是,256种字节模式里,官方手册只解释其中一部分,剩下的位模式不一定会被安全地当成NOP。

有的非法操作码会像无害空指令。有的会改寄存器。有的会进入半测试状态。有的会把CPU锁住。

这就是HCF真正指向的东西:不是火焰,而是失控。

需要划清一个边界。IBM System/360相关传闻里,“catch fire”常被联系到磁芯存储反复访问、局部过热这类物理风险。但到Motorola 6800这里,重点不是芯片真的烧起来,而是CPU不再执行正常程序。

这个区别很要紧。把HCF理解成“所有CPU都会物理起火”,是误读;把未公开指令理解成“厂商故意埋后门”,也证据不足。

M6800的$9D和$DD:地址线在跑,CPU已经不处理数据

Wheeler那篇文章的核心,是Motorola 6800的未公开操作码。

他统计M6800官方文档中有197个操作码,另有59个字节模式没有公开说明。在这些未公开操作码里,$9D和$DD被他命名为HCF。这个助记符是Wheeler给的,不是Motorola官方指令名。

触发后,M6800的表现很怪。

程序计数器继续递增。地址总线像16位计数器一样扫过内存。CPU持续发起读操作,却不处理读到的数据。中断也救不回来,恢复通常只剩复位或断电。

换成板级调试视角,这反而有用。David J. Agans在《Debugging》中提到,工程人员把DD叫作“Drop Dead”指令,因为它能让地址线和时钟线上出现适合示波器观察的规则方波。

用户看到的是死机。硬件工程师看到的,可能是一个便宜的测试信号源。

案例发生了什么关键限制对读者的意义
IBM System/360传闻非法操作可能反复访问磁芯存储位置并导致过热这里涉及磁芯存储的物理特性“catch fire”有历史影子,但不能套到所有CPU上
Motorola 6800 $9D/$DD程序计数器递增,地址线连续计数,CPU不处理读数HCF是Wheeler命名,不是官方指令复古硬件调试和模拟器实现不能只看手册
6502非法操作码部分未公开操作码会锁住CPU或产生非文档行为不同芯片、批次和兼容实现可能不同模拟器作者要决定是否复现真实硅片行为
Pentium F00F bug特定非法指令序列可使早期Pentium挂起已进入现代CPU漏洞与补丁语境非法路径仍是验证难点

这张表背后的判断很简单:非法操作码不是同一种东西。

它们可能来自译码副作用,可能来自测试需求,也可能只是设计取舍。没有证据时,不该把它们一概说成恶意后门。疑罪从无,在芯片史里同样适用。

对复古开发者和验证团队,HCF不是段子,是决策成本

最受影响的不是普通消费者,而是两类人。

一类是复古计算、汇编和模拟器开发者。对他们来说,问题不是“官方手册有没有写”,而是“真实机器是不是这么跑”。

如果要做游戏机模拟器、老式单板机修复、教学CPU板,开发者至少要多做一个选择:默认按官方指令集实现,还是增加“真实硅片兼容”选项。更稳的做法,是把未公开操作码单独列成测试项,并在文档里说明哪些行为可复现,哪些只在特定芯片上观察到。

另一类是芯片验证和安全研究人员。

Pentium F00F bug就是后来的提醒。这个问题常被写作字节序列F0 0F C7 C8,特定非法指令会让早期Pentium挂起。它不属于复古冷知识,而是说明一件事:异常路径比正常路径更难测干净。

现代x86复杂得多。厂商有形式化验证、微码更新、内部测试套件,外部研究者也会做fuzzing,把随机或边界输入喂给处理器,寻找异常状态。

这里的现实约束也很硬。公开指令越多,兼容包袱越重,微架构越复杂,非法状态越不可能只靠人工审查扫完。真正该看的,不是哪颗芯片会不会“起火”,而是三件事:厂商是否把异常行为写进勘误,是否能用微码或系统补丁隔离问题,修补时会不会破坏旧软件兼容性。

这也是HCF留下来的技术史价值。

它把一个冷笑话拉回了工程现场:手册之外不是虚无,那里有译码逻辑、测试模式、兼容债,也有会把系统拖死的缝。