我想使用CA65来组装一个6502ROM,它需要自己运行,即没有其他内核可用。我希望我的节目能从$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文件,可以直接作为一个连续的ROM区域从$C000一直到$FFFF。
我想我能做的一件事就是写
.repeat 123
.byte 0
.endrepeat但这意味着每次我更改程序时都要更新这个号码。
发布于 2015-02-20 10:10:19
事实证明,CC65 wiki有.ORG上的一页,它在试图劝阻我不要这样做的同时,也展示了一个使用.res和一些PC算法的简洁解决方案:
.org $C000
reset: ;; Some code from here
NOP
irq: ;; more code
NOP
.res $FFFC-*
.org $FFFC
.addr reset
.addr irq发布于 2015-02-28 23:31:37
通过在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
.ENDMACROhttps://stackoverflow.com/questions/28626160
复制相似问题