使用xa65汇编程序创建Commodore 64 .prg

Wax*_*ead 10 assembly c64 commodore 6510

我正在尝试学习6510汇编,因为我正在运行Debian xa65是我想要使用的汇编程序.

到目前为止,我写了一段看起来像这样的代码:

*=$0801
.byte $0c, $08, $0a, $00, $9e, $20
.byte $34, $30, $39, $36, $00, $00
.byte $00

*=$1000
INC 53280
INC 53281
JMP $1000
Run Code Online (Sandbox Code Playgroud)

现在,第一个.byte部分一旦加载就会被"自动启动"程序.这是我从教程中找到的东西,据我所知,它只会运行SYS 4096,使CPU开始执行地址$ 1000的代码

其余的代码应该只是开始闪烁C64的外边框和内边框,并永远重复.

组装时我只需运行以下命令:

xa test.s -o test.prg
Run Code Online (Sandbox Code Playgroud)

然后我尝试将test.prg加载到VICE中进行测试.使用LOAD"TEST.PRG",8,1:即使文件加载它也不会自动启动,如果我键入RUN则没有任何反应:如果我键入LIST则相同: - 唯一的结果是着名的READY.和光标一样快乐地闪烁着.

我试图删除自动启动的东西,只组装从*= $ 1000开始的代码,但我得到了相同的结果.尝试从SYS 4096开始也会导致READY,仅此而已.

我确信我没有正确使用xa汇编程序,但我无法弄清楚我是如何为C64创建一个合适的PRG文件来使用的.我究竟做错了什么?

Jes*_*ter 6

据我所知,$0801basic程序的起始地址,并不会自动启动任何内容.要自动启动,你必须玩弄技巧.

只需使用即可组装$1000并启动程序sys 4096.装配助手的常用区域是$c000(sys 49152),因为它不会干扰正常basic程序.


我不熟悉,xa65但根据我的测试,如果你指定,它不会填充文件*.因此,您期望的代码$1000不会出现在那里,实际上它就在上一个块之后.此外,c64 prg格式需要前两个字节的起始地址,它们xa64似乎也没有填充.我设法让这个工作:

*=$0FFE
.byte $00, $10
INC 53280
INC 53281
JMP $1000
Run Code Online (Sandbox Code Playgroud)

从开始sys 4096.

PS:VICE有内置监视器(机器级调试器).


小智 6

我试图弄清楚当我遇到你的问题时如何让xa65填充它的输出,并且从那时起就知道它是如何工作的.这是我发现的.

正如杰斯特所说,你的代码不会出现,$1000因为设置PC不会执行任何填充.使用指令在xa65 支持填充.dsb,但必须为指令指定一些字节,而不仅仅是像某些汇编程序.org指令允许的地址.由于汇编程序允许简单的算术运算,因此字节数由下式给出<desired address> - PC.

添加缺少的.prg地址头并将第二个PC更改更改为填充指令会导致输出行为符合预期.但是,这仍然不能使其自动启动. LOAD "TEST.PRG",8,1:RUN没有工作,虽然.

.byte $01, $08 ; Load this .prg into $0801

*=$0801
.byte $0c, $08, $0a, $00, $9e, $20
.byte $34, $30, $39, $36, $00, $00
.byte $00

.dsb $1000 - * ; Pad with zeroes from PC to $1000

INC 53280
INC 53281
JMP $1000
Run Code Online (Sandbox Code Playgroud)

FWIW,如何使用填充方法在xa65的文档中并不是很明显(至少对我而言).