You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CC65将C64程序重定位至更高内存段?

CC65 调整C64程序内存段的方法

当前你的程序CODE段起始于$0840、结束于$4ED3,确实会和C64$3000开始的字符RAM重叠。CC65没有直接的#pragma指令调整内存段,但可以通过以下两种方式修改代码的加载地址:

1. 修改链接配置文件

C64默认使用c64.cfg配置文件,复制一份自定义配置(比如命名为my_c64.cfg),找到段定义部分,修改CODE段的起始地址:

SEGMENTS {
    ZEROPAGE:    load = $0002, type = zp,  define = yes;
    LOADADDR:    load = $07FF, type = ro;
    EXEHDR:      load = $0801, type = ro;
    STARTUP:     load = $080D, type = ro;
    CODE:        load = $C000, type = ro;  // 替换为更高的目标地址,比如$C000
    RODATA:      load = *,      type = ro;
    DATA:        load = *,      type = rw;
    INIT:        load = *,      type = ro;
    BSS:         load = *,      type = bss, define = yes;
    ONCE:        load = *,      type = bss;
}

编译时指定该配置文件:

cl65 -o program.prg -C my_c64.cfg program.c

2. 使用编译链接参数直接指定

无需修改配置文件,用--start-addr参数覆盖CODE段的起始地址:

cl65 -o program.prg --start-addr $C000 program.c

注意事项

  • 选择地址时避开C64硬件占用区域:$D000-$DFFF是I/O寄存器,$E000-$FFFF是ROM(无RAM扩展时不可用)。常用安全地址如$C000、$8000(需确认是否与图形RAM/扩展冲突)。
  • 修改后重新查看映射文件,确认所有段的地址范围不再与字符RAM重叠。
  • 若程序中有直接访问低地址RAM的硬编码,需同步调整。

你的当前映射文件:

Segment list:
-------------
Name                   Start     End    Size  Align
----------------------------------------------------
ZEROPAGE              000002  00001B  00001A  00001
LOADADDR              0007FF  000800  000002  00001
EXEHDR                000801  00080C  00000C  00001
STARTUP               00080D  00083F  000033  00001
CODE                  000840  004ED3  004694  00001 <---
RODATA                004ED4  004ED9  000006  00001
DATA                  004EDA  004F1D  000044  00001
INIT                  004F1E  004F39  00001C  00001
BSS                   004F3A  004F44  00000B  00001
ONCE                  004F3A  004F5F  000026  00001

内容的提问来源于stack exchange,提问作者KungPhoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:40