MEMORY {
    BASICHDR: start = $0001, size = $0050, type = rw, fill = yes, fillval = 0, file = %O;
    ZP:       start = $0051, size = $00AD, type = rw, define = yes, fill = yes, fillval = 0, file = %O;
    STARTUP:  start = $00FE, size = $0102, fill = yes, fillval = 0, file = %O;
    PAGE2:    start = $0200, size = $0100, fill = yes, fillval = 0, file = %O;
    PAGE3:    start = $0300, size = $0100, fill = yes, fillval = 0, file = %O;
    RAM:      start = $0400, size = $FAAE, file = %O;
}
SEGMENTS {
    BASICHDR: load = BASICHDR, type = rw;
    STARTUP:  load = STARTUP,  type = rw;
    PAGE2:    load = PAGE2,    type = rw;
    PAGE3:    load = PAGE3,    type = rw;
    LOWCODE:  load = RAM,      type = ro,               optional = yes;
    INIT:     load = RAM,      type = ro, define = yes, optional = yes;
    CODE:     load = RAM,      type = ro;
    RODATA:   load = RAM,      type = ro;
    DATA:     load = RAM,      type = rw;
    BSS:      load = RAM,      type = bss, define = yes;
    HEAP:     load = RAM,      type = bss, optional = yes; # must sit just below stack
    ZEROPAGE: load = ZP,       type = zp;
    EXTZP:    load = ZP,       type = rw,  define = yes;
}
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__ = $800;	# 2K stack
}
