我想使用CA65来组装需要独立运行的6502 ROM,即没有其他可用的内核。我希望我的程序从$C000
开始。但这意味着我还需要将$00 $C0
放入$FFFC
的重置向量中。有没有办法让CA65在程序结束和复位向量之间用零填充我的程序?
即。我想做的就是写一些像
这样的东西 .org $C000
reset: ;; Some code from here
NOP
irq: ;; more code
NOP
.org $FFFC
;; What do I put here for padding?!?!
.addr reset
.addr irq
并获取一个.prg
文件,该文件可以直接用作从$C000
一直到$FFFF
的连续ROM区域。
我想我能做的一件事就是写
.repeat 123
.byte 0
.endrepeat
但这意味着每次更改程序时都必须更新该号码。
答案 0 :(得分:3)
您可以通过在ld65配置中定义另一个段来填充空格,直到指定地址:
ResetAddress: load=RAM1, type=ro, start=FFFC;
然后在代码中,只需执行:
.segment "ResetAddress"
.addr reset
.addr irq
.code
.proc reset
;Reset code goes here
.endproc
.proc irq
;IRQ code goes here
.endproc
在达到“ResetAddress”段的指定起始地址之前,应该使用零(默认值)填充。如果您只需要对齐100美元,请使用align = $ 100代替。
我能用这种方法看到的唯一缺点是,它可能更像是“特定于cc65”。
至于之前的.repeat ... .endrepeat回答,不建议这样做,但你可以让它更灵活:
.MACRO PadBlock
.LOCAL start
start:
.REPEAT 256-<start
.byte $00
.ENDREP
.ENDMACRO
答案 1 :(得分:1)
原来CC65维基有a page on .ORG,虽然试图阻止我这样做,但也使用.res
和一些PC算法显示了一个简洁的解决方案:
.org $C000
reset: ;; Some code from here
NOP
irq: ;; more code
NOP
.res $FFFC-*
.org $FFFC
.addr reset
.addr irq