mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
c768de156a
The main chunk load header references __BSS_LOAD__ so BSS must be the first bss type segment. Subsequent changes will move ONCE to share its address with the BSS. Then it'll be necessary to load INIT from disk. Therefore we do it right now.
88 lines
4.4 KiB
INI
88 lines
4.4 KiB
INI
# This config file provides a single big upper memory block (HIDDEN_RAM).
|
|
# To achieve this, it relocates the character generator from $E000 to CHARGEN.
|
|
# The runtime library must be compiled with CHARGEN_RELOC for this config
|
|
# file to work. See libsrc/atari/Makefile.inc.
|
|
|
|
FEATURES {
|
|
STARTADDRESS: default = $2400;
|
|
}
|
|
SYMBOLS {
|
|
__EXEHDR__: type = import;
|
|
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
|
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
|
__STARTADDRESS__: type = export, value = %S;
|
|
}
|
|
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;
|
|
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
|
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
|
|
|
# "shadow RAM preparation" load chunk
|
|
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
|
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
|
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
|
|
|
# "main program" load chunk
|
|
MAINHDR: file = %O, start = $0000, size = $0004;
|
|
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
|
|
|
# defines entry point into program
|
|
TRAILER: file = %O, start = $0000, size = $0006;
|
|
|
|
# address of relocated character generator
|
|
CHARGEN: file = "", define = yes, start = $D800, size = $0400;
|
|
|
|
# memory beneath the ROM
|
|
HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFFA - $DC00;
|
|
}
|
|
SEGMENTS {
|
|
ZEROPAGE: load = ZP, type = zp;
|
|
EXTZP: load = ZP, type = zp, optional = yes;
|
|
|
|
EXEHDR: load = HEADER, type = ro;
|
|
|
|
SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes;
|
|
SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
|
|
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
|
|
|
SRPREPHDR: load = SRPREPHDR, type = ro;
|
|
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
|
|
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
|
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
|
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
|
SRPREPTRL: load = SRPREPTRL, type = ro;
|
|
|
|
MAINHDR: load = MAINHDR, type = ro;
|
|
STARTUP: load = MAIN, type = ro, define = yes;
|
|
LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;
|
|
ONCE: load = MAIN, type = ro, optional = yes;
|
|
CODE: load = MAIN, type = ro, define = yes;
|
|
RODATA: load = MAIN, type = ro;
|
|
DATA: load = MAIN, type = rw;
|
|
INIT: load = MAIN, type = rw, optional = yes;
|
|
BSS: load = MAIN, type = bss, define = yes;
|
|
AUTOSTRT: load = TRAILER, type = ro;
|
|
}
|
|
FEATURES {
|
|
CONDES: type = constructor,
|
|
label = __CONSTRUCTOR_TABLE__,
|
|
count = __CONSTRUCTOR_COUNT__,
|
|
segment = ONCE;
|
|
CONDES: type = destructor,
|
|
label = __DESTRUCTOR_TABLE__,
|
|
count = __DESTRUCTOR_COUNT__,
|
|
segment = RODATA;
|
|
CONDES: type = interruptor,
|
|
label = __INTERRUPTOR_TABLE__,
|
|
count = __INTERRUPTOR_COUNT__,
|
|
segment = RODATA,
|
|
import = __CALLIRQ__;
|
|
}
|