Assembly 自动填充将某些指令组合成预定地址
我想使用CA65来组装一个6502 ROM,它需要自己运行,也就是说,没有其他内核可用。我希望我的计划从$C000开始。但这意味着我还需要将$00$C0放入$FFFC处的重置向量中。有没有办法让CA65在程序结束和重置向量之间用零填充我的程序 i、 我想做的是写一些Assembly 自动填充将某些指令组合成预定地址,assembly,6502,c64,ca65,Assembly,6502,C64,Ca65,我想使用CA65来组装一个6502 ROM,它需要自己运行,也就是说,没有其他内核可用。我希望我的计划从$C000开始。但这意味着我还需要将$00$C0放入$FFFC处的重置向量中。有没有办法让CA65在程序结束和重置向量之间用零填充我的程序 i、 我想做的是写一些 .org $C000 reset: ;; Some code from here NOP irq: ;; more code NOP .org $FFFC
.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
但这意味着每次我更改程序时都必须更新该数字。结果显示,CC65 wiki在试图劝阻我这么做的同时,还显示了一个使用.res和一些PC算法的简洁解决方案:
.org $C000
reset: ;; Some code from here
NOP
irq: ;; more code
NOP
.res $FFFC-*
.org $FFFC
.addr reset
.addr irq
您可以通过在ld65配置中定义另一个段来填充空白空间,直到指定地址: 复位地址: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
如前所述。重复。endrepeat答案,不建议这样做,但您也可以使其更灵活:
.MACRO PadBlock
.LOCAL start
start:
.REPEAT 256-<start
.byte $00
.ENDREP
.ENDMACRO