features { CONDES: segment = RODATA, 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__: type = weak, value = $0200; } memory { HEADER: start = 0, size = $10, type = ro, fill = yes, fillval = 0; PAD: start = 0, size = $3C00, type = ro, fill = yes; PRGROM: start = $FC00, size = $400, type = ro, fill = yes; ZP: start = 0, size = $100, type = rw; # $200-$2FF is reserved for shadow OAM # note that the CC65 stack grows from $7FF downwards and by default # stack overflow checks are not added so currently user variables # might overlap with CC65 stack variables RAM: start = $300, size = $500, type = rw, define = yes; CHR: start = 0, size = $20000, type = ro, fill = yes; } segments { HEADER: load = HEADER, type = ro; STARTUP: load = PRGROM, type = ro, define = yes; INIT: load = PRGROM, type = ro, define = yes, optional = yes; CODE: load = PRGROM, type = ro, align = $100; DATA: load = PRGROM, run = RAM, type = rw, optional = yes, define = yes; RODATA: load = PRGROM, type = ro, optional = yes; ZEROPAGE: load = PRGROM, run = ZP, type = rw, optional = yes, define = yes; VECTORS: load = PRGROM, type = ro, start = $fffa; BSS: load = RAM, type = bss, optional = yes, define = yes; CHR: load = CHR, type = ro, optional = yes; }