如何在 6502 (cc65) 上从 C 访问没有前导 _ 的汇编语言符号

How to access assembly language symbols without a leading _ from C on 6502 (cc65)

我正在使用 cc65 用 6502 汇编语言编写一些代码。

因为我生活在 2022 年而不是 1979 年,并且可以使用比目标平台强大一百万倍的开发机器,所以我正在为 C 中的汇编语言代码编写单元测试。

显然 C 语言和汇编语言的调用约定不同,所以我有一堆包装函数,它们接受 C 风格的参数,然后调用汇编语言函数。

但是在调用汇编语言函数后,我想检查用汇编语言定义的各种全局变量的状态,但我做不到,因为 C 期望所有标识符都以下划线开头 '_' 并且我的汇编语言模块中的标识符没有。

我可以将每个符号导出两次,一次带 '_' 前缀,一次不带,但它看起来很笨重,我只是想知道是否有更简单的方法?是否有 #pragma 或我可以用来告诉 C 完全按原样使用符号名称而不添加下划线的东西?

我查看了 cc65 文档,什么也没发现,但这似乎是一个很常见的需求,我想知道其他人是怎么做的。

可能 cc65 编译器只支持访问带有 ABI-specificed 修饰符的符号,即以下划线开头的符号 _.

因此,要访问其他符号,必须将它们重命名以跟随装饰,或者必须创建装饰别名。

_foo    EQU foo

对于函数来说,写包装函数也是值得考虑的。这可能会提高调试代码的能力,因为当两个符号引用同一地址时,调试器往往会感到困惑。