# On the C64 the overlays are placed above the main program

SYMBOLS {
    OVERLAYSIZE: value = $1000, weak = yes;
}
MEMORY {
    ZP:   start = $0002,               size = $001A,               type = rw, define = yes;
    RAM:  start = $07FF,               size = $C801 - OVERLAYSIZE, file = %O, define = yes;
    OVL1: start = $D000 - OVERLAYSIZE, size = OVERLAYSIZE,         file = "overlaydemo.1";
    OVL2: start = $D000 - OVERLAYSIZE, size = OVERLAYSIZE,         file = "overlaydemo.2";
    OVL3: start = $D000 - OVERLAYSIZE, size = OVERLAYSIZE,         file = "overlaydemo.3";
}
SEGMENTS {
    STARTUP:  load = RAM,  type = ro;
    LOWCODE:  load = RAM,  type = ro,               optional = yes;
    INIT:     load = RAM,  type = ro, define = yes, optional = yes;
    CODE:     load = RAM,  type = ro;
    OVL1CODE: load = OVL1, type = ro,  define   = yes;
    OVL2CODE: load = OVL2, type = ro,  define   = yes;
    OVL3CODE: load = OVL3, type = ro,  define   = yes;
    RODATA:   load = RAM,  type = ro;
    DATA:     load = RAM,  type = rw;
    ZPSAVE:   load = RAM,  type = bss;
    BSS:      load = RAM,  type = bss, define = yes;
    HEAP:     load = RAM,  type = bss, optional = yes; # must sit just below stack
    ZEROPAGE: load = ZP,   type = zp;
}
FEATURES {
    CONDES: segment = INIT,
	    type = constructor,
	    label = __CONSTRUCTOR_TABLE__,
	    count = __CONSTRUCTOR_COUNT__;
    CONDES: segment = RODATA,
	    type = destructor,
	    label = __DESTRUCTOR_TABLE__,
	    count = __DESTRUCTOR_COUNT__;
    CONDES: segment = RODATA,
	    type = interruptor,
	    label = __INTERRUPTOR_TABLE__,
	    count = __INTERRUPTOR_COUNT__;
}
SYMBOLS {
    __STACKSIZE__: value = $0800, weak = yes; # 2k stack
}
