问题标签 [ca65]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
6502 - 确保数据不跨越页面边界
我正在尝试创建一个如下所示的 switch 语句,该语句运行良好,直到有东西穿过页面。切换目标是自动生成的,这就是它在另一个文件中的原因。'structure, x' 保存偏移量(大小写开关)。在以下情况下,它将是 00 美元、02 美元、04 美元或 06 美元。
有没有办法确保returnAddr 不在$xx00?(这在这里真的很重要吗?)并且切换列表没有跨越边界?
在另一个文件中(其中 case_x 是函数标签)
assembly - “beq [label]”如何产生超出范围的错误?
我正在尝试编译此代码片段,但我一生都无法理解汇编程序错误:
在这段代码提取中,我得到了这个汇编错误:
第 264 行将指:
RW_forced 是在一个库中实现的,实际上他们应该做的就是输出应该可以工作的 sep/rep 指令和 .a8/.a16 宏。但这是他们的实现,对我来说看起来不错:
我的问题是,到底是怎么回事,beq col_d
或者它周围的任何东西超出了范围?130在哪里?这是汇编程序中的错误吗?
作为参考,如果我将 EITHER callflag 调用更改为没有 RW_forced 调用的另一个版本,则代码会组装(但错误)。
6502 - 使用 .align 时 CL65 不调整地址
我正在尝试编写一个使用 .align 指令来确保数据不会跨越页面边界的 asm 程序。
然而,虽然数据在内存中的正确位置,但编译后的代码并没有使用正确的地址。
根据文档(https://www.cc65.org/doc/ld65-5.html)
如果请求对齐,链接器将向输出文件添加足够的空间,以便新段从可被给定数字整除的地址开始,没有余数。所有地址都会相应调整。为了填充未使用的空间,使用零字节,或者,如果内存区域具有“fillval”属性,则使用该值。
它的这种调整似乎没有发生。
为了重现,我有以下配置文件:(注意 DATA256 段上的“对齐”)
用 asm 作为
使用以下命令行构建:
这是编译的.prg。您可以看到从 $0816 读取的“lda testdata”,这不是对齐的地址。$01、$02、$03 的填充显示数据对齐。
这在调试器中得到确认。
我究竟做错了什么?或者这是链接器中的错误?