【问题标题】:CA65 Segment Memory Map issueCA65 段内存映射问题
【发布时间】: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_ 在运行时似乎只是随机的....

标签: assembly 8-bit 6502 ca65


【解决方案1】:

我认为链接器会导出它们,但您的代码必须导入它们:

.import __MYMEMSEG_LOAD__, __MYMEMSEG_SIZE__

【讨论】:

  • 我会试试这个,但对我来说似乎有点有趣,让地图文件有一个引用,代码必须在某处包含一个导入指令......我认为定义将是所有需要的至少要在地图文件中创建它。
猜你喜欢
  • 2016-01-14
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多