首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动填充将某些指令组装成预定地址

自动填充将某些指令组装成预定地址
EN

Stack Overflow用户
提问于 2015-02-20 09:59:56
回答 2查看 311关注 0票数 2

我想使用CA65来组装一个6502ROM,它需要自己运行,即没有其他内核可用。我希望我的节目能从$C000开始。但这意味着我还需要将$00 $C0放在$FFFC的重置向量中。有办法让CA65衬垫我的程序与零之间的程序结束和重置向量?

也就是说,我想做的是写一些类似的东西

代码语言:javascript
复制
        .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

我想我能做的一件事就是写

代码语言:javascript
复制
        .repeat 123
        .byte 0
        .endrepeat

但这意味着每次我更改程序时都要更新这个号码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-20 10:10:19

事实证明,CC65 wiki有.ORG上的一页,它在试图劝阻我不要这样做的同时,也展示了一个使用.res和一些PC算法的简洁解决方案:

代码语言:javascript
复制
  .org $C000

reset:  ;; Some code from here
        NOP

irq:    ;; more code
        NOP

        .res $FFFC-*
        .org $FFFC

        .addr reset
        .addr irq
票数 1
EN

Stack Overflow用户

发布于 2015-02-28 23:31:37

通过在ld65配置中定义另一个段,可以在指定地址之前填充空空间:

ResetAddress: load=RAM1, type=ro, start=FFFC;

然后在代码中,只需做:

代码语言:javascript
复制
.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的答案,不建议这样做,但是您也可以使它更加灵活:

代码语言:javascript
复制
.MACRO  PadBlock
.LOCAL start
start:
.REPEAT 256-<start
        .byte $00
.ENDREP
.ENDMACRO
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28626160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档