我正在使用cc65开发我的第一个内斯游戏,以及其他工具。我创建了一个原始代码,以便在Assembly中对其进行快速测试。设法使它的对象,但使用ld65作为链接器,一条消息说“内存和配置错误”,它只是关闭。这是我正在使用的代码:
.segment "HEADER"
.byte $4e, $45, $53, $1a, $02, $01, $00, $00
.segment "CODE"
.proc irq_handler
RTI
.endproc
.proc nmi_handler
RTI
.endproc
.proc reset_handler
SEI
CLD
LDX #$00
STX $2000
STX $2001
vblankwait:
BIT $2002
BPL vblankwait
JMP main
.endproc
.proc main
LDX $2002
LDX #$3f
STX $2006
LDX #$00
STX $2006
LDA #$29
STA $2007
LDA #%00011110
STA $2001
forever:
JMP forever
.endproc
.segment "VECTORS"
.addr nmi_handler, reset_handler, irq_handler
.segment "CHARS"
.res 8192
.segment "STARTUP"
有谁知道是什么问题吗?
1条答案
按热度按时间9bfwbjaz1#
问题不在于你的汇编代码,而在于你给链接器的东西。
链接器的工作是获取目标文件,并根据内存配置对它们的数据进行布局。
您可以使用
-t
选择预先存在的平台配置,例如-t nes
。或者,您可以进行自定义配置并为其提供
-C
。对于内斯项目,我认为大多数人使用自定义配置,因为cc65提供的配置主要适合编写带文本输出的C程序。面向游戏的程序可能需要特定的内存自定义,特别是如果您想使用扩展墨盒内存大小和功能的墨盒Map器类型之一。
您的
ld65
命令行应该类似于:ld65 -o game.nes -C nrom.cfg myassembly.o
下面是一个示例程序,包括链接器配置:NES ca65 example
如果你想参考,官方文档在这里:ld65 documentation