mirror of
https://github.com/cc65/cc65.git
synced 2024-08-17 19:29:12 +00:00
The BSS segment and the ONCE segment share the same start address. So they need to be placed in two different memory areas. So far BSS was placed in the MAIN memory area and ONCE was placed in an additional memory area. Both memory areas were written to the output file. They just "happened" to be loadable and runnable at a stretch. Now ONCE is placed in the MAIN memory area and BSS is placed in an additional memory area. Only MAIN is written to the output file. It becomes more obvious that BSS is "just" defined to share memory with ONCE.
84 lines
4.5 KiB
INI
84 lines
4.5 KiB
INI
FEATURES {
|
|
STARTADDRESS: default = $0801;
|
|
}
|
|
SYMBOLS {
|
|
__LOADADDR__: type = import;
|
|
__EXEHDR__: type = import;
|
|
__OVERLAYADDR__: type = import;
|
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
|
__OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
|
|
__HIMEM__: type = weak, value = $D000;
|
|
__OVERLAYSTART__: type = export, value = __HIMEM__ - __OVERLAYSIZE__;
|
|
}
|
|
MEMORY {
|
|
ZP: file = "", define = yes, start = $0002, size = $001A;
|
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
|
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
|
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
|
BSS: file = "", start = __ONCE_RUN__, size = __OVERLAYSTART__ - __STACKSIZE__ - __ONCE_RUN__;
|
|
OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL2ADDR: file = "%O.2", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL2: file = "%O.2", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL3ADDR: file = "%O.3", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL3: file = "%O.3", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL4ADDR: file = "%O.4", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL4: file = "%O.4", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL5ADDR: file = "%O.5", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL5: file = "%O.5", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL6ADDR: file = "%O.6", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL6: file = "%O.6", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL7ADDR: file = "%O.7", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL7: file = "%O.7", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL8ADDR: file = "%O.8", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL8: file = "%O.8", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
OVL9ADDR: file = "%O.9", start = __OVERLAYSTART__ - 2, size = $0002;
|
|
OVL9: file = "%O.9", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
|
}
|
|
SEGMENTS {
|
|
ZEROPAGE: load = ZP, type = zp;
|
|
LOADADDR: load = LOADADDR, type = ro;
|
|
EXEHDR: load = HEADER, type = ro;
|
|
STARTUP: load = MAIN, type = ro;
|
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
|
CODE: load = MAIN, type = ro;
|
|
RODATA: load = MAIN, type = ro;
|
|
DATA: load = MAIN, type = rw;
|
|
INIT: load = MAIN, type = rw;
|
|
ONCE: load = MAIN, type = ro, define = yes;
|
|
BSS: load = BSS, type = bss, define = yes;
|
|
OVL1ADDR: load = OVL1ADDR, type = ro;
|
|
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
|
OVL2ADDR: load = OVL2ADDR, type = ro;
|
|
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
|
OVL3ADDR: load = OVL3ADDR, type = ro;
|
|
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
|
OVL4ADDR: load = OVL4ADDR, type = ro;
|
|
OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes;
|
|
OVL5ADDR: load = OVL5ADDR, type = ro;
|
|
OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes;
|
|
OVL6ADDR: load = OVL6ADDR, type = ro;
|
|
OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes;
|
|
OVL7ADDR: load = OVL7ADDR, type = ro;
|
|
OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes;
|
|
OVL8ADDR: load = OVL8ADDR, type = ro;
|
|
OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes;
|
|
OVL9ADDR: load = OVL9ADDR, type = ro;
|
|
OVERLAY9: load = OVL9, type = ro, define = yes, 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__;
|
|
}
|