Also, updates documentation with the new files.
--- /dev/null
+FEATURES {
+ STARTADDRESS: default = $2E00;
+}
+SYMBOLS {
+ __STARTADDRESS__: type = export, value = %S;
+}
+MEMORY {
+ ZP: file = "", define = yes, start = $0082, size = $007E;
+ MAIN: file = %O, define = yes, start = %S, size = $BC20 - %S;
+}
+FILES {
+ %O: format = atari;
+}
+FORMATS {
+ atari: runad = start;
+}
+SEGMENTS {
+ ZEROPAGE: load = ZP, type = zp, optional = yes;
+ EXTZP: load = ZP, type = zp, optional = yes; # to enable modules to be able to link to C and assembler programs
+ CODE: load = MAIN, type = rw, define = yes;
+ RODATA: load = MAIN, type = ro optional = yes;
+ DATA: load = MAIN, type = rw optional = yes;
+ BSS: load = MAIN, type = bss, optional = yes, define = yes;
+}
+++ /dev/null
-# Sample linker configuration for C programs using the Atari binary file support.
-# Use with: cl65 -tatari -Catari-c-xex.cfg prog.c -o prog.xex
-FEATURES {
- STARTADDRESS: default = $2000;
-}
-SYMBOLS {
- __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
- __STACKSIZE__: type = weak, value = $0800; # 2k stack
- __STARTADDRESS__: type = export, value = %S;
- __RESERVED_MEMORY__: type = weak, value = $0000;
- __SYSCHKHDR__: type = export, value = 0; # Disable system check header
- __SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
-}
-MEMORY {
- ZP: file = "", define = yes, start = $0082, size = $007E;
-# "system check" load chunk
- SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
-# "main program" load chunk
- MAIN: file = %O, define = yes, start = %S, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
-}
-FILES {
- %O: format = atari;
-}
-FORMATS {
- atari: runad = start,
- initad = SYSCHKCHNK: __SYSTEM_CHECK__;
-}
-SEGMENTS {
- ZEROPAGE: load = ZP, type = zp;
- EXTZP: load = ZP, type = zp, optional = yes;
- SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
- STARTUP: load = MAIN, type = ro, define = yes;
- LOWBSS: load = MAIN, type = rw, optional = yes; # not zero initialized
- LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;
- ONCE: load = MAIN, type = ro, optional = yes;
- CODE: load = MAIN, type = ro, define = yes;
- RODATA: load = MAIN, type = ro;
- DATA: load = MAIN, type = rw;
- INIT: load = MAIN, type = rw, optional = yes;
- BSS: load = MAIN, type = bss, define = 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__;
-}
+# Sample linker configuration for C programs using the Atari binary file support.
+# Use with: cl65 -tatari -Catari-c-xex.cfg prog.c -o prog.xex
FEATURES {
- STARTADDRESS: default = $2E00;
+ STARTADDRESS: default = $2000;
}
SYMBOLS {
- __STARTADDRESS__: type = export, value = %S;
+ __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
+ __STACKSIZE__: type = weak, value = $0800; # 2k stack
+ __STARTADDRESS__: type = export, value = %S;
+ __RESERVED_MEMORY__: type = weak, value = $0000;
+ __SYSCHKHDR__: type = export, value = 0; # Disable system check header
+ __SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
}
MEMORY {
- ZP: file = "", define = yes, start = $0082, size = $007E;
- MAIN: file = %O, define = yes, start = %S, size = $BC20 - %S;
+ ZP: file = "", define = yes, start = $0082, size = $007E;
+# "system check" load chunk
+ SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
+# "main program" load chunk
+ MAIN: file = %O, define = yes, start = %S, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
}
FILES {
%O: format = atari;
}
FORMATS {
- atari: runad = start;
+ atari: runad = start,
+ initad = SYSCHKCHNK: __SYSTEM_CHECK__;
}
SEGMENTS {
- ZEROPAGE: load = ZP, type = zp, optional = yes;
- EXTZP: load = ZP, type = zp, optional = yes; # to enable modules to be able to link to C and assembler programs
- CODE: load = MAIN, type = rw, define = yes;
- RODATA: load = MAIN, type = ro optional = yes;
- DATA: load = MAIN, type = rw optional = yes;
- BSS: load = MAIN, type = bss, optional = yes, define = yes;
+ ZEROPAGE: load = ZP, type = zp;
+ EXTZP: load = ZP, type = zp, optional = yes;
+ SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
+ STARTUP: load = MAIN, type = ro, define = yes;
+ LOWBSS: load = MAIN, type = rw, optional = yes; # not zero initialized
+ LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;
+ ONCE: load = MAIN, type = ro, optional = yes;
+ CODE: load = MAIN, type = ro, define = yes;
+ RODATA: load = MAIN, type = ro;
+ DATA: load = MAIN, type = rw;
+ INIT: load = MAIN, type = rw, optional = yes;
+ BSS: load = MAIN, type = bss, define = 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__;
}
+++ /dev/null
-# Sample linker configuration for C programs using the Atari binary file support.
-# Use with: cl65 -tatarixl -Catarixl-c-xex.cfg prog.c -o prog.xex
-FEATURES {
- STARTADDRESS: default = $2400;
-}
-SYMBOLS {
- __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
- __STACKSIZE__: type = weak, value = $0800; # 2k stack
- __STARTADDRESS__: type = export, value = %S;
- __SYSCHKHDR__: type = export, value = 0; # Disable system check header
- __SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
-}
-MEMORY {
- ZP: file = "", define = yes, start = $0082, size = $007E;
-
-# "system check" load chunk
- SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
-
-# "shadow RAM preparation" load chunk
- SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
-
-# "main program" load chunk
- MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
-
-# memory beneath the ROM preceeding the character generator
- HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
-
-# address of relocated character generator (same addess as ROM version)
- CHARGEN: file = "", define = yes, start = $E000, size = $0400;
-
-# memory beneath the ROM
- HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400;
-
-# UNUSED - hide
- UNUSED: file = "", start = $0, size = $10;
-}
-FILES {
- %O: format = atari;
-}
-FORMATS {
- atari: runad = start,
- initad = SYSCHKCHNK: __SYSTEM_CHECK__,
- initad = SRPREPCHNK: sramprep;
-}
-SEGMENTS {
- ZEROPAGE: load = ZP, type = zp;
- EXTZP: load = ZP, type = zp, optional = yes;
-
- SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
- LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
- SRPREP: load = SRPREPCHNK, type = rw, define = yes;
- SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
- SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
- STARTUP: load = MAIN, type = ro, define = yes;
- LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;
- ONCE: load = MAIN, type = ro, optional = yes;
- CODE: load = MAIN, type = ro, define = yes;
- RODATA: load = MAIN, type = ro;
- DATA: load = MAIN, type = rw;
- INIT: load = MAIN, type = rw, optional = yes;
- BSS: load = MAIN, type = bss, define = yes;
- SRPREPHDR: load = UNUSED, type = ro;
- SRPREPTRL: load = UNUSED, 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__;
-}
--- /dev/null
+# Sample linker configuration for C programs using the Atari binary file support.
+# Use with: cl65 -tatarixl -Catarixl-c-xex.cfg prog.c -o prog.xex
+FEATURES {
+ STARTADDRESS: default = $2400;
+}
+SYMBOLS {
+ __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
+ __STACKSIZE__: type = weak, value = $0800; # 2k stack
+ __STARTADDRESS__: type = export, value = %S;
+ __SYSCHKHDR__: type = export, value = 0; # Disable system check header
+ __SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
+}
+MEMORY {
+ ZP: file = "", define = yes, start = $0082, size = $007E;
+
+# "system check" load chunk
+ SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
+
+# "shadow RAM preparation" load chunk
+ SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
+
+# "main program" load chunk
+ MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
+
+# memory beneath the ROM preceeding the character generator
+ HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
+
+# address of relocated character generator (same addess as ROM version)
+ CHARGEN: file = "", define = yes, start = $E000, size = $0400;
+
+# memory beneath the ROM
+ HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400;
+
+# UNUSED - hide
+ UNUSED: file = "", start = $0, size = $10;
+}
+FILES {
+ %O: format = atari;
+}
+FORMATS {
+ atari: runad = start,
+ initad = SYSCHKCHNK: __SYSTEM_CHECK__,
+ initad = SRPREPCHNK: sramprep;
+}
+SEGMENTS {
+ ZEROPAGE: load = ZP, type = zp;
+ EXTZP: load = ZP, type = zp, optional = yes;
+
+ SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
+ LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
+ SRPREP: load = SRPREPCHNK, type = rw, define = yes;
+ SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
+ SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
+ STARTUP: load = MAIN, type = ro, define = yes;
+ LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;
+ ONCE: load = MAIN, type = ro, optional = yes;
+ CODE: load = MAIN, type = ro, define = yes;
+ RODATA: load = MAIN, type = ro;
+ DATA: load = MAIN, type = rw;
+ INIT: load = MAIN, type = rw, optional = yes;
+ BSS: load = MAIN, type = bss, define = yes;
+ SRPREPHDR: load = UNUSED, type = ro;
+ SRPREPTRL: load = UNUSED, 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__;
+}
The values you assign to the two symbols <tt/__AUTOSTART__/ and <tt/__EXEHDR__/
don't matter.
-<sect2><tt/atari-xex.cfg/<p>
+<sect2><tt/atari-asm-xex.cfg/<p>
This config file allows writing multi segment binaries easily, without having to
write the header explicitly on each segment.
have the <tt/__AUTOSTART/ nor the <tt/__EXEHDR__/ symbols.
Note that each <tt/MEMORY/ area in the configuration file will have it's own
-segment in the output file with the correct headers.
+segment in the output file with the correct headers, and you can specify and
+init address INITAD) for each memory area.
<sect2><tt/atari-cart.cfg/<p>
To write the generated file to a cassette, a utility (<tt/w2cas.com/) to run
on an Atari is provided in the <tt/util/ directory of <tt/atari/ target dir.
+<sect2><tt/atari-xex.cfg/<p>
+
+This config file shows how to write a binary using the ATARI (xex) file format
+support on LD65, this simplifies the memory areas and allows to add new memory
+areas easily without writing new headers and trailers.
+
+Note that the default C library includes the system-check chunk, so in this
+linker configuration we suppress the importing of the header and trailer for
+this chunk by defining the standard import symbols to a 0 value. For the
+initialization address of the system-check chunk, the INITAD is set directly in
+the configuration.
+
<sect1><tt/atarixl/ config files<p>
<sect2>default config file (<tt/atarixl.cfg/)<p>
<ref name="&dquot;system check&dquot;" id="syschkxl"> load chunk. It can
optionally be left out, see <ref name="Getting rid of the &dquot;system check&dquot; load chunk" id="nosyschk">.
+<sect2><tt/atarixl-xex.cfg/<p>
+
+Similar to the <tt/atari-xex.cfg/ above, this config file shows how to write a
+binary using the ATARI (xex) file format support on LD65.
+
+In addition to the suppressing of the system-check headers and trailers, this
+also suppresses the shadow-ram-preparation headers and trailers, but does this
+by defining an "UNUSED" memory area that is not written to the output file.
+
<sect>Platform specific header files<p>