1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-01 13:41:34 +00:00
cc65/cfg/lunix.cfg
Oliver Schmidt d5092d2d3f Consider the segment attributes 'define' and 'optional' mutually exclusive.
In normal situations it isn't too useful to define symbols for optional segments as those symbols can't be presumed to be always present.

I in fact suspect that most currently present combinations of 'define' and 'optional' aren't useful - apart form the overlay configurations of course.
2016-03-17 21:31:43 +01:00

45 lines
1.7 KiB
INI

# ld65 Linker-configuration for LUnix, Next Generation.
SYMBOLS {
__HEAPSIZE__: type = weak, value = $2000; # 8k heap [temporary, until LUnix malloc() exists]
__STACKSIZE__: type = weak, value = $0400; # 1k stack (do typical LUnix apps. need 2k?)
}
MEMORY {
ZP: start = $0080, size = $0040;
MAIN: start = %S, size = $7600 - __STACKSIZE__;
}
SEGMENTS {
ZEROPAGE: load = ZP, type = zp, define = yes; # Pseudo-registers
STARTUP: load = MAIN, type = ro; # First initialization code
LOWCODE: load = MAIN, type = ro, optional = yes; # Legacy from other platforms
ONCE: load = MAIN, type = ro, optional = yes; # Library initialization code
CODE: load = MAIN, type = ro; # Program
RODATA: load = MAIN, type = ro; # Literals, constants
DATA: load = MAIN, type = rw; # Initialized variables
BSS: load = MAIN, type = bss, define = yes; # Uninitialized variables
}
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__;
}
FILES {
%O: format = o65;
}
FORMATS {
o65: os = lunix,
type = small,
export = main, # Program entry-point
import = LUNIXKERNEL; # Kernel entry-points
}