使用 ca65 编译一个简单的程序
Compiling a simple program using ca65
我开始使用 Rodney Zaks 的书 Programming the 6502 学习 6502 汇编。其中有示例代码,我希望能够 运行 它在我的 macbook 上。我希望代码能够 运行 以书中呈现的形式出现,但我不确定。
我已经下载了 ca65 汇编程序,但是 运行我遇到了一些麻烦。命令 ca65 3_1.as
有效,但随后使用 ld65 -o example 3_1.o
(我认为是正确的)导致错误:ld65: Error: Memory configuration missing
文件 3_1.as
中的代码如下。
谁能告诉我如何解决我的问题?
(作为一个小问题,目前我猜 100 美元和 200 美元实际上不包含任何值,所以即使程序可以 运行 也不会进行实际的加法,这是正确的吗?)
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
ADR1 = 0 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = 0
ADR3 = 0
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
要修复 linker 错误,您需要 provide a target system 它将提供内存配置。
例如,这不是默认值有点傻:
ld65 -t none -o example 3_1.o
请注意,您还可以使用一个命令 assemble 和 link。参见 my answer here。
这是一个更完整的程序,可以添加到已经很好的答案中。我注意到作者也没有放置启动程序的地方。不同类型的 assemblers 在处理 ORG 语句等语法方面有细微差别。有些是“.Org”,意思是在这里启动程序,然后 assemble 在内存中。 “*=”也可以表示相同的东西(有时两者都有效)。该程序应该可以在 commodore 64 上运行。通过一些调整,它也可以在 Apple ][ 上运行(将 charout 更改为 ffda 和起始位置)。我肯定会推荐 C64 用于编码增长,因为它具有更多有趣的硬件功能。它还具有庞大的全球编码场景。这里有一个 link 的大量磁盘杂志和超越基础知识的 ML 教程。似乎没有一本书这样做,并且倾向于只坚持句法方法。如果你想用这些东西做任何大事,比如控制室和 运行 飞机部件,这就没有用了。
https://csdb.dk/release/?id=8717
.ORG = 080D ;
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
LDA # ; load accumulator with 94
STA ADR1 ; move 94 into adr1 (both combined is adr1 = 94)
LDA # ; load accumulator with 32
STA ADR2 ; move 32(in Acc.) into adr1 (both lines is adr2 = Acc, or adr2 = 32)
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
JSR CHAROUT; print the result
RTS ; return from the program
; declarations can be in confusing places and still work.
; I just saw a program where the declarations were after the code
; and before the subroutines.
;-------------------------------------------
ADR1 = 0 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = 0
ADR3 = 0
CHAROUT = $ffd2 ; character out routine commodore 64. (prints a byte to screen)
我开始使用 Rodney Zaks 的书 Programming the 6502 学习 6502 汇编。其中有示例代码,我希望能够 运行 它在我的 macbook 上。我希望代码能够 运行 以书中呈现的形式出现,但我不确定。
我已经下载了 ca65 汇编程序,但是 运行我遇到了一些麻烦。命令 ca65 3_1.as
有效,但随后使用 ld65 -o example 3_1.o
(我认为是正确的)导致错误:ld65: Error: Memory configuration missing
文件 3_1.as
中的代码如下。
谁能告诉我如何解决我的问题?
(作为一个小问题,目前我猜 100 美元和 200 美元实际上不包含任何值,所以即使程序可以 运行 也不会进行实际的加法,这是正确的吗?)
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
ADR1 = 0 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = 0
ADR3 = 0
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
要修复 linker 错误,您需要 provide a target system 它将提供内存配置。
例如,这不是默认值有点傻:
ld65 -t none -o example 3_1.o
请注意,您还可以使用一个命令 assemble 和 link。参见 my answer here。
这是一个更完整的程序,可以添加到已经很好的答案中。我注意到作者也没有放置启动程序的地方。不同类型的 assemblers 在处理 ORG 语句等语法方面有细微差别。有些是“.Org”,意思是在这里启动程序,然后 assemble 在内存中。 “*=”也可以表示相同的东西(有时两者都有效)。该程序应该可以在 commodore 64 上运行。通过一些调整,它也可以在 Apple ][ 上运行(将 charout 更改为 ffda 和起始位置)。我肯定会推荐 C64 用于编码增长,因为它具有更多有趣的硬件功能。它还具有庞大的全球编码场景。这里有一个 link 的大量磁盘杂志和超越基础知识的 ML 教程。似乎没有一本书这样做,并且倾向于只坚持句法方法。如果你想用这些东西做任何大事,比如控制室和 运行 飞机部件,这就没有用了。
https://csdb.dk/release/?id=8717
.ORG = 080D ;
CLC ; CLEAR CARRY BIT
CLD ; CLEAR DECIMAL BIT
LDA # ; load accumulator with 94
STA ADR1 ; move 94 into adr1 (both combined is adr1 = 94)
LDA # ; load accumulator with 32
STA ADR2 ; move 32(in Acc.) into adr1 (both lines is adr2 = Acc, or adr2 = 32)
LDA ADR1 ; LOAD CONTENTS OF ADR1 INTO ACCUMULATOR
ADC ADR2 ; ADD CONTENTS OF ADR2 INTO ACCUMULATOR
STA ADR3 ; TRANSFER CONTENT OF ACC TO ADR3
JSR CHAROUT; print the result
RTS ; return from the program
; declarations can be in confusing places and still work.
; I just saw a program where the declarations were after the code
; and before the subroutines.
;-------------------------------------------
ADR1 = 0 ; WHERE IN MEMORY ARE THESE THINGS
ADR2 = 0
ADR3 = 0
CHAROUT = $ffd2 ; character out routine commodore 64. (prints a byte to screen)