# 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
}
