【发布时间】:2015-12-18 16:28:11
【问题描述】:
我在 CA65 中工作一个 6502 项目,但我无法理解某些指令。
我想要做的是将一个段定义为好像它在内存的另一部分,以便该代码的所有寻址都好像它在编译期间已经在该内存段中,但它将是加载了主程序,并且需要在加载后移动到位......对于这些旧机器来说这是一个非常基本的模型,但我无法让段命令中的 DEFINE 指令正常工作。
所以我在 cfg 文件中创建了一个名为 MYMEM 的 MEMORY 定义,作为程序实际加载位置之外的位置,可以这样说:
MEMORY{
.
.
MYMEM start = $1000, size =$0200
.
}
然后我创建一个名为 MYMEMSEG 的段
SEGMENTS{
.
.
MYMEMSEG: load=MYMEM, type =rw, define=yes;
.
.
}
然后我尝试访问它声称创建的 _ _MYMEMSEG_LOAD__ 或 _ _MYMEMSEG_RUN__ 或 _ _MYMEMSEG_SIZE__ 值,但它们都未定义...生成的 MAP 文件不包含任何带有 MYMEM 或 MYMEMSEG 的内容...所以我在这里不明白什么?
【问题讨论】:
-
您可能已经将它创建的那些符号声明为外部符号,就像它们在单独的汇编源代码文件中定义一样。
-
我不太关注这里...这里没有代码告诉.export,以后担心导入/包含... SIZE_ LOAD_ 和 RUN_ 应该是由define = yes 创建的,那我该怎么做呢?
-
cc65.org/doc/ld65-5.html 特别是 SEGMENT 信息 5.2
-
看来,根据 Nick Westgate 的回答,您的汇编程序使用
.import伪指令“导入”其他文件中定义的外部符号。将您定义MYMEMSEG的链接器配置文件视为导出__MYMEMSEG_LOAD__的不同汇编模块可能会有所帮助。 -
不,这似乎不起作用,而导入越过了编译错误,RUN_ LOAD_ 的值SIZE_ 在运行时似乎只是随机的....