FEATURES {
    STARTADDRESS: default = $4000;
}
SYMBOLS {
    __BACKBUFSIZE__: type = weak, value = $2000;
    __HIMEM__:       type = weak, value = $C000 - __BACKBUFSIZE__;
    __OVERLAYSIZE__: type = weak, value = $0000;
    __OVERLAYADDR__: type = weak, value = __HIMEM__ - __OVERLAYSIZE__;
    __STACKSIZE__:   type = weak, value = $0400; # 1k stack
    __STACKADDR__:   type = weak, value = $2000 - __STACKSIZE__;
}
MEMORY {
    CVT:    file   = %O,  start = $0,              size = $20000;
    ZP:     define = yes, start = $80,             size = $1A + $06;
    EXT:    define = yes, start = $0C00,           size = __STACKADDR__ - __EXT_START__;
    VLIR0:  define = yes, start = %S,              size = __OVERLAYADDR__ - %S;
    VLIR1:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR2:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR3:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR4:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR5:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR6:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR7:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR8:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR9:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR10: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
    VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
}
SEGMENTS {
    ZEROPAGE:  type = zp,  load = ZP;
    EXTZP:     type = zp,  load = ZP,                                    optional = yes;
    EXTBSS:    type = bss, load = EXT,                define     = yes,  optional = yes;
    FILEINFO:  type = ro,                 load = CVT, offset     = $002;
    RECORDS:   type = ro,                 load = CVT, offset     = $100, optional = yes;
    DIRENTRY:  type = ro,                 load = CVT, offset     = $180;
    VLIRIDX0:  type = ro,                 load = CVT, align      = $200, optional = yes;
    STARTUP:   type = ro,  run  = VLIR0,  load = CVT, align_load = $200, define   = yes;
    LOWCODE:   type = ro,  run  = VLIR0,  load = CVT,                    optional = yes;
    ONCE:      type = ro,  run  = VLIR0,  load = CVT,                    optional = yes;
    CODE:      type = ro,  run  = VLIR0,  load = CVT;
    RODATA:    type = ro,  run  = VLIR0,  load = CVT;
    DATA:      type = rw,  run  = VLIR0,  load = CVT;
    INIT:      type = bss, load = VLIR0,                                 optional = yes;
    BSS:       type = bss, load = VLIR0,                                 define   = yes;
    VLIRIDX1:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY1:  type = ro,  run  = VLIR1,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX2:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY2:  type = ro,  run  = VLIR2,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX3:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY3:  type = ro,  run  = VLIR3,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX4:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY4:  type = ro,  run  = VLIR4,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX5:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY5:  type = ro,  run  = VLIR5,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX6:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY6:  type = ro,  run  = VLIR6,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX7:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY7:  type = ro,  run  = VLIR7,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX8:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY8:  type = ro,  run  = VLIR8,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX9:  type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY9:  type = ro,  run  = VLIR9,  load = CVT, align_load = $200, optional = yes;
    VLIRIDX10: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY10: type = ro,  run  = VLIR10, load = CVT, align_load = $200, optional = yes;
    VLIRIDX11: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY11: type = ro,  run  = VLIR11, load = CVT, align_load = $200, optional = yes;
    VLIRIDX12: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY12: type = ro,  run  = VLIR12, load = CVT, align_load = $200, optional = yes;
    VLIRIDX13: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY13: type = ro,  run  = VLIR13, load = CVT, align_load = $200, optional = yes;
    VLIRIDX14: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY14: type = ro,  run  = VLIR14, load = CVT, align_load = $200, optional = yes;
    VLIRIDX15: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY15: type = ro,  run  = VLIR15, load = CVT, align_load = $200, optional = yes;
    VLIRIDX16: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY16: type = ro,  run  = VLIR16, load = CVT, align_load = $200, optional = yes;
    VLIRIDX17: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY17: type = ro,  run  = VLIR17, load = CVT, align_load = $200, optional = yes;
    VLIRIDX18: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY18: type = ro,  run  = VLIR18, load = CVT, align_load = $200, optional = yes;
    VLIRIDX19: type = ro,                 load = CVT, align      = $200, optional = yes;
    OVERLAY19: type = ro,  run  = VLIR19, load = CVT, align_load = $200, optional = yes;
}
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__;
}