what raises eyebrows is when people overuse it :)
Linking and libraries is an interesting topic. Could you explain the benefits of the linker over for example preprocessor includes like in C/C++? I don't know the ca65 linker, are there any disadvantages? Im thinking, when are labels getting their values and is it limiting the memorymanagement in any way?
includes are simply "copy pasted" into your source at compile time (in pretty much any language i know)(*). (*)this is not completely true - modern compilers can also omit code from the same compilation unit if its unused, like from a c++ header or c source. this somewhat breaks/improves the traditional way of doing this.
Now I'am sure there are other equally cool benefits in the assembler you use, why dont you state these instead of assuming people are gonna use the script language in a bad way.
MEMORY { LOADERZP: start = $4c, size = $44, type = rw; # must not overlap STATUS ($90) ZPRAM: start = $fa, size = $06, type = rw; # the C STACK memory area must be defined in the applications's link file # when using the importldr function to dynamically link the loader STACK: start = $0100, size = $80, type = rw, define = yes; RAM: start = $1000, size = $c000, type = rw; # Plus/4 has screen and colours at $0800-$1000 RAM2: start = $1000, size = $f000, type = rw; } SEGMENTS { ZEROPAGE: load = ZPRAM, type = zp; CODE: load = RAM, type = ro; RODATA: load = RAM, type = ro, optional = yes; DATA: load = RAM, type = rw, optional = yes; BSS: load = RAM, type = rw, optional = yes; BITMAP: load = RAM2, type = bss, start = $4000, optional = yes, define = yes; # overlay with DISKIO_INSTALL COLRAM: load = RAM2, type = bss, start = $7000, optional = yes, define = yes; # $1000 on Plus/4 (SPRITES segment not used) SPRITES: load = RAM2, type = bss, start = $7400, optional = yes, define = yes; # no SPRITESHI segment: the sprites are always in this bank VERIFYBUFFER: load = RAM2, type = bss, start = $8000, optional = yes, define = yes; BITMAPHI: load = RAM2, type = bss, start = $c000, optional = yes, define = yes; # also location of IEEE-488 KERNAL extensions with SFD-1001 COLRAMHI: load = RAM2, type = bss, start = $f000, optional = yes, define = yes; # not used on Plus/4 # these three segments must be defined in the application's link file DISKIO_ZP: load = LOADERZP, type = zp, define = yes; DISKIO_INSTALL: load = RAM, start = $4000, define = yes; # fire and forget DISKIO: load = RAM, start = $6500, define = yes; # must not exceed $7000 (COLRAM) in this program # this segment must be defined if the loader links dynamically to the application DISKIO_IMPORT: load = RAM, start = $8000, define = yes, optional = yes; # fire and forget - however, dynlink code is in the CODE segment, too }