mirror of
https://github.com/cc65/cc65.git
synced 2024-09-29 02:55:20 +00:00
34cf7657e8
- First chunk checks system (if it's XL and memory is ok). - Second chunk contains the contents for the shadow memory beneath the ROM and copies the contents to their destination address. It also moves the screen memory to low memory in front of the program.
81 lines
3.6 KiB
INI
81 lines
3.6 KiB
INI
FEATURES {
|
|
STARTADDRESS: default = $2E00;
|
|
}
|
|
|
|
SYMBOLS {
|
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
|
__RESERVED_MEMORY__: type = weak, value = $0000;
|
|
syschk: type = import; # force inclusion of SYSCHK
|
|
sramprep: type = import; # force inclusion of SRPREP
|
|
}
|
|
|
|
MEMORY {
|
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
|
|
|
# just $FFFF
|
|
HEADER: file = %O, start = $0000, size = $0002;
|
|
|
|
# "system check" load chunk
|
|
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
|
SYSCHK: file = %O, start = $2E00, size = $0E00;
|
|
|
|
# "shadow RAM preparation" load chunk
|
|
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
|
SRPREP: file = %O, start = %S, size = $7C20 - %S - $04FF; # $04FF: space for temp. chargen buffer, page aligned
|
|
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
|
|
|
# "main program" load chunk
|
|
MAINHDR: file = %O, start = $0000, size = $0004;
|
|
RAM: file = %O, start = %S + __SAVEAREA_SIZE__, size = $D000 - __STACKSIZE__ - %S - __SAVEAREA_SIZE__;
|
|
|
|
# address of relocated character generator
|
|
CHARGEN: file = "", define = yes, start = $D800, size = $0400;
|
|
|
|
# memory beneath the ROM
|
|
SHADOW_RAM: file = "", define = yes, start = $DC00, size = $FFF0 - $DC00;
|
|
|
|
# defines entry point into program
|
|
TRAILER: file = %O, start = $0000, size = $0006;
|
|
}
|
|
|
|
SEGMENTS {
|
|
EXEHDR: load = HEADER, type = ro;
|
|
|
|
SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes;
|
|
SYSCHK: load = SYSCHK, type = rw, define = yes, optional = yes;
|
|
|
|
SRPREPHDR: load = SRPREPHDR, type = ro;
|
|
SAVEAREA: load = SRPREP, type = bss, define = yes; # shared btw. SRPREP and RAM
|
|
SRPREP: load = SRPREP, type = rw, define = yes;
|
|
SHADOW_RAM: load = SRPREP, run = SHADOW_RAM, type = rw, define = yes, optional = yes;
|
|
SRPREPTRL: load = SRPREPTRL, type = ro;
|
|
|
|
MAINHDR: load = MAINHDR, type = ro;
|
|
STARTUP: load = RAM, type = ro, define = yes;
|
|
LOWCODE: load = RAM, type = ro, define = yes, optional = yes;
|
|
INIT: load = RAM, type = ro, optional = yes;
|
|
CODE: load = RAM, type = ro, define = yes;
|
|
RODATA: load = RAM, type = ro;
|
|
DATA: load = RAM, type = rw;
|
|
ZPSAVE: load = RAM, type = bss, define = yes;
|
|
BSS: load = RAM, type = bss, define = yes;
|
|
ZEROPAGE: load = ZP, type = zp;
|
|
EXTZP: load = ZP, type = zp, optional = yes;
|
|
AUTOSTRT: load = TRAILER, type = ro;
|
|
}
|
|
FEATURES {
|
|
CONDES: type = constructor,
|
|
label = __CONSTRUCTOR_TABLE__,
|
|
count = __CONSTRUCTOR_COUNT__,
|
|
segment = INIT;
|
|
CONDES: type = destructor,
|
|
label = __DESTRUCTOR_TABLE__,
|
|
count = __DESTRUCTOR_COUNT__,
|
|
segment = RODATA;
|
|
CONDES: type = interruptor,
|
|
label = __INTERRUPTOR_TABLE__,
|
|
count = __INTERRUPTOR_COUNT__,
|
|
segment = RODATA,
|
|
import = __CALLIRQ__;
|
|
}
|