From: Daniel Serpell Date: Thu, 21 Feb 2019 21:55:08 +0000 (-0300) Subject: Change XEX configuration file names to better reflect original names. X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=824e30934e43b5cc3de9202bf246c96f66f692b6;p=cc65 Change XEX configuration file names to better reflect original names. Also, updates documentation with the new files. --- diff --git a/cfg/atari-asm-xex.cfg b/cfg/atari-asm-xex.cfg new file mode 100644 index 000000000..f0a6291db --- /dev/null +++ b/cfg/atari-asm-xex.cfg @@ -0,0 +1,24 @@ +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; +} diff --git a/cfg/atari-c-xex.cfg b/cfg/atari-c-xex.cfg deleted file mode 100644 index 5f390e12c..000000000 --- a/cfg/atari-c-xex.cfg +++ /dev/null @@ -1,56 +0,0 @@ -# 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__; -} diff --git a/cfg/atari-xex.cfg b/cfg/atari-xex.cfg index f0a6291db..5f390e12c 100644 --- a/cfg/atari-xex.cfg +++ b/cfg/atari-xex.cfg @@ -1,24 +1,56 @@ +# 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__; } diff --git a/cfg/atarixl-c-xex.cfg b/cfg/atarixl-c-xex.cfg deleted file mode 100644 index 0b1fe9ca1..000000000 --- a/cfg/atarixl-c-xex.cfg +++ /dev/null @@ -1,79 +0,0 @@ -# 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__; -} diff --git a/cfg/atarixl-xex.cfg b/cfg/atarixl-xex.cfg new file mode 100644 index 000000000..0b1fe9ca1 --- /dev/null +++ b/cfg/atarixl-xex.cfg @@ -0,0 +1,79 @@ +# 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__; +} diff --git a/doc/atari.sgml b/doc/atari.sgml index 346377b36..42b06d83e 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -203,7 +203,7 @@ is + This config file allows writing multi segment binaries easily, without having to write the header explicitly on each segment. @@ -213,7 +213,8 @@ format support on LD65 instead of the standard binary output, so it does not have the @@ -242,6 +243,18 @@ would need to be split in more parts and the parts to be loaded manually. To write the generated file to a cassette, a utility ( + +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. + default config file ( @@ -265,6 +278,15 @@ The files generated by this config file include the load chunk. It can optionally be left out, see . + + +Similar to the Platform specific header files