较旧的 CPU 和一些相当现代的微控制器无法轻松支持 C 编译器。其中包括 1802、一些 8 位 PIC 以及 Commodore 64 核心的 6502。这并不是说您不能为其中任何一个创建 C 编译器,而是说处理奇数字长所需的技巧、缺乏堆栈操作或 C 不适合的任何其他原因往往会使编译后的代码变得臃肿并且可能更慢。 [博士。凡人袋熊]采取了不同的方法。 oscar64 编译器采用 C 源代码并将其编译为虚拟机代码或本机机器代码(在性能可能很重要的情况下)。
事实证明,使用本机代码的损失并不像预测的那么严重,至少在某些情况下是这样。然而,在许多常见情况下,使用解释器的性能损失可能会很大。 6502 的堆栈很小,很难寻址,并且索引到用户维护的堆栈的速度很慢。字长问题还会产生大量代码,因为您必须将 16 位操作分解为多个 8 位操作。该编译器的目标是兼容 C99,包括浮点、递归、数组的多维以及结构指针。
还有一些事情需要敲定。链接器不支持外部库,并且浮点代码不理解 NaN。另一方面,许多 C++ 功能都可用,例如命名空间、引用类型、模板等等。该编译器可以针对从 C128 到 PET 的多种 Commodore 机器。它还可以与一些任天堂和雅达利系统配合使用,并可以创建各种卡带格式。
如果您正在为任何类型的 6502 编写代码,那么它可能值得一看。为 6502 编译 C 并不是一件小事,但是,它的目标是PowerPoint 。没有 C64 吗? 建造一个.
图片:[MOS6502], CC-BY-SA 3.0