SYMBOLS {
    __CARTSIZE__:        type = weak,   value = $4000;   # possible values: $4000 and $8000
    __CART_ENTRY__:      type = import;
    __STACKSIZE__:       type = weak,   value = $0400;   # 4 pages stack
    __RESERVED_MEMORY__: type = export, value = $01E0;   # space for 20x24 screen buffer (default display list is in ROM)
}
MEMORY {
    ZP:        file = "", start = $001D,                size = $00E3,                                               define = yes;
    RAM:       file = "", start = $021C,                size = $4000 - __STACKSIZE__ - __RESERVED_MEMORY__ - $021C, define = yes;
    ROM:       file = %O, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - $18,                                  define = yes, fill = yes, fillval = $FF;
    CARTNAME:  file = %O, start = $BFE8,                size = $0014                                                              fill = yes, fillval = $40;
    CARTYEAR:  file = %O, start = $BFFC,                size = $0002                                                              fill = yes, fillval = $59;
    CARTENTRY: file = %O, start = $BFFE,                size = $0002;
}
SEGMENTS {
    ZEROPAGE:  load = ZP,             type = zp,                optional = yes;
    EXTZP:     load = ZP,             type = zp,                optional = yes;
    DLIST:     load = ROM  ,          type = ro,  define = yes, optional = yes;
    STARTUP:   load = ROM,            type = ro,  define = yes, optional = yes;
    LOWCODE:   load = ROM,            type = ro,  define = yes, optional = yes;
    ONCE:      load = ROM,            type = ro,                optional = yes;
    CODE:      load = ROM,            type = ro,  define = yes;
    RODATA:    load = ROM,            type = ro,                optional = yes;
    DATA:      load = ROM, run = RAM, type = rw,  define = yes, optional = yes;
    BSS:       load = RAM,            type = bss, define = yes, optional = yes;
    CARTNAME:  load = CARTNAME,       type = ro;
    CARTYEAR:  load = CARTYEAR,       type = ro;
    CARTENTRY: load = CARTENTRY,      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__;
}
