将 assemble 某些指令自动填充到预定地址
Automatic padding to assemble certain instructions into predetermined addresses
我想使用 CA65 来 assemble 需要 运行 自己的 6502 ROM,即没有其他内核可用。我希望我的程序从 $C000
开始。但这意味着我还需要将 [=14=] $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
但这意味着我每次更改程序时都必须更新该数字。
原来 CC65 wiki 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
您可以通过在 ld65 配置中定义另一个段来填充空 space 直到指定地址:
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-specific"。
至于之前的 .repeat ... .endrepeat 答案,不推荐,但你也可以让它更灵活:
.MACRO PadBlock
.LOCAL start
start:
.REPEAT 256-<start
.byte [=11=]
.ENDREP
.ENDMACRO
我想使用 CA65 来 assemble 需要 运行 自己的 6502 ROM,即没有其他内核可用。我希望我的程序从 $C000
开始。但这意味着我还需要将 [=14=] $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
.
我想我能做的一件事就是写
.repeat 123
.byte 0
.endrepeat
但这意味着我每次更改程序时都必须更新该数字。
原来 CC65 wiki 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
您可以通过在 ld65 配置中定义另一个段来填充空 space 直到指定地址:
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-specific"。
至于之前的 .repeat ... .endrepeat 答案,不推荐,但你也可以让它更灵活:
.MACRO PadBlock
.LOCAL start
start:
.REPEAT 256-<start
.byte [=11=]
.ENDREP
.ENDMACRO