问题标签 [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.

0 投票
0 回答
57 浏览

6502 - 确保数据不跨越页面边界

我正在尝试创建一个如下所示的 switch 语句,该语句运行良好,直到有东西穿过页面。切换目标是自动生成的,这就是它在另一个文件中的原因。'structure, x' 保存偏移量(大小写开关)。在以下情况下,它将是 00 美元、02 美元、04 美元或 06 美元。

有没有办法确保ret​​urnAddr 不在$xx00?(这在这里真的很重要吗?)并且切换列表没有跨越边界?

在另一个文件中(其中 case_x 是函数标签)

0 投票
0 回答
42 浏览

assembly - “beq [label]”如何产生超出范围的错误?

我正在尝试编译此代码片段,但我一生都无法理解汇编程序错误:

在这段代码提取中,我得到了这个汇编错误:

第 264 行将指:

RW_forced 是在一个库中实现的,实际上他们应该做的就是输出应该可以工作的 sep/rep 指令和 .a8/.a16 宏。但这是他们的实现,对我来说看起来不错:

我的问题是,到底是怎么回事,beq col_d或者它周围的任何东西超出了范围?130在哪里?这是汇编程序中的错误吗?

作为参考,如果我将 EITHER callflag 调用更改为没有 RW_forced 调用的另一个版本,则代码会组装(但错误)。

0 投票
1 回答
97 浏览

6502 - 使用 .align 时 CL65 不调整地址

我正在尝试编写一个使用 .align 指令来确保数据不会跨越页面边界的 asm 程序。

然而,虽然数据在内存中的正确位置,但编译后的代码并没有使用正确的地址。

根据文档(https://www.cc65.org/doc/ld65-5.html

如果请求对齐,链接器将向输出文件添加足够的空间,以便新段从可被给定数字整除的地址开始,没有余数。所有地址都会相应调整。为了填充未使用的空间,使用零字节,或者,如果内存区域具有“fillval”属性,则使用该值。

它的这种调整似乎没有发生。

为了重现,我有以下配置文件:(注意 DATA256 段上的“对齐”)

用 asm 作为

使用以下命令行构建:

这是编译的.prg。您可以看到从 $0816 读取的“lda testdata”,这不是对齐的地址。$01、$02、$03 的填充显示数据对齐。

在此处输入图像描述

这在调试器中得到确认。

在此处输入图像描述

我究竟做错了什么?或者这是链接器中的错误?

0 投票
0 回答
49 浏览

assembly - INY STY 的 CA65 NES 问题

我是 CA65 的新手,正在尝试将 NEASM 项目转移到它。我翻译了所有东西,它建立了。当我跑步时,我什么也得不到。只是黑屏。潜水更深我有一个无限循环。增加 Y (INY) 似乎有问题,然后我设置的任何东西都不需要。 在此处输入图像描述

您可以看到,在 8505 处的 INY 之后,Y 变为 1。将我在 $84A8 处的变量设置为 Y 应该将其更改为 $01,但事实并非如此。因此,我进入了一个无限循环。我在这里做错了吗?自从我编写汇编程序以来已经有一段时间了,但这似乎很容易。

如果我做错了什么或者您需要更多信息,请告诉我。