From b153ec88965943a0124b3a658cacc2291faceda5 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Fri, 18 Oct 2013 03:07:01 +0200 Subject: [PATCH] atari-asm.cfg linker config file --- cfg/atari-asm.cfg | 30 ++++++++++++++++++++++++++++++ cfg/atari-overlay.cfg | 5 ++++- cfg/atari.cfg | 5 ++++- cfg/atarixl-largehimem.cfg | 5 ++++- cfg/atarixl-overlay.cfg | 5 ++++- cfg/atarixl.cfg | 5 ++++- libsrc/atari/crt0.s | 22 +--------------------- libsrc/atari/exehdr.s | 8 ++++++++ libsrc/atari/exetrailer.s | 12 ++++++++++++ libsrc/atari/mainhdr.s | 9 +++++++++ 10 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 cfg/atari-asm.cfg create mode 100644 libsrc/atari/exehdr.s create mode 100644 libsrc/atari/exetrailer.s create mode 100644 libsrc/atari/mainhdr.s diff --git a/cfg/atari-asm.cfg b/cfg/atari-asm.cfg new file mode 100644 index 000000000..203521352 --- /dev/null +++ b/cfg/atari-asm.cfg @@ -0,0 +1,30 @@ +FEATURES { + STARTADDRESS: default = $2E00; +} +SYMBOLS { + __EXEHDR__: type = import; + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" + __STARTADDRESS__: type = export, value = %S; +} +MEMORY { + ZP: file = "", define = yes, start = $0082, size = $007E; + +# file header, just $FFFF + HEADER: file = %O, start = $0000, size = $0002; + +# "main program" load chunk + MAINHDR: file = %O, start = $0000, size = $0004; + RAM: file = %O, define = yes, start = %S, size = $BC20 - %S; + TRAILER: file = %O, start = $0000, size = $0006; +} +SEGMENTS { + EXEHDR: load = HEADER, type = ro, optional = yes; + MAINHDR: load = MAINHDR, type = ro, optional = yes; + CODE: load = RAM, type = ro, define = yes, optional = yes; + RODATA: load = RAM, type = ro optional = yes; + DATA: load = RAM, type = rw optional = yes; + BSS: load = RAM, type = bss, define = yes, optional = yes; + ZEROPAGE: load = ZP, type = zp; + AUTOSTRT: load = TRAILER, type = ro, optional = yes; +} diff --git a/cfg/atari-overlay.cfg b/cfg/atari-overlay.cfg index 1cc0eb725..d5a73531b 100644 --- a/cfg/atari-overlay.cfg +++ b/cfg/atari-overlay.cfg @@ -2,11 +2,14 @@ FEATURES { STARTADDRESS: default = $2000; } SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay __STARTADDRESS__: type = export, value = %S; __RESERVED_MEMORY__: type = weak, value = $0000; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk } MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; diff --git a/cfg/atari.cfg b/cfg/atari.cfg index 7555bb4a1..ef57c3e52 100644 --- a/cfg/atari.cfg +++ b/cfg/atari.cfg @@ -2,10 +2,13 @@ FEATURES { STARTADDRESS: default = $2000; } SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; __RESERVED_MEMORY__: type = weak, value = $0000; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk } MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg index 5217597ac..17874b600 100644 --- a/cfg/atarixl-largehimem.cfg +++ b/cfg/atarixl-largehimem.cfg @@ -8,9 +8,12 @@ FEATURES { } SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk sramprep: type = import; # force inclusion of SRPREP } diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 6f5ccbd2c..2f5595c0b 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -3,10 +3,13 @@ FEATURES { } SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay __STARTADDRESS__: type = export, value = %S; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk sramprep: type = import; # force inclusion of SRPREP } diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index 430c7fb5f..f217c308f 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -3,9 +3,12 @@ FEATURES { } SYMBOLS { + __EXEHDR__: type = import; + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __MAINCHNKHDR__: type = import; + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk sramprep: type = import; # force inclusion of SRPREP } diff --git a/libsrc/atari/crt0.s b/libsrc/atari/crt0.s index de72c1eb8..464557fa7 100644 --- a/libsrc/atari/crt0.s +++ b/libsrc/atari/crt0.s @@ -8,12 +8,11 @@ ; Stefan Haubenthal ; - .export _exit .export __STARTUP__ : absolute = 1 ; Mark as startup + .export _exit, start .import initlib, donelib .import callmain, zerobss - .import __STARTUP_LOAD__, __BSS_LOAD__ .import __RESERVED_MEMORY__ .import __RAM_START__, __RAM_SIZE__ .ifdef __ATARIXL__ @@ -28,19 +27,6 @@ .include "atari.inc" ; ------------------------------------------------------------------------ -; EXE header - -.segment "EXEHDR" - - .word $FFFF - -.segment "MAINHDR" - - .word __STARTUP_LOAD__ - .word __BSS_LOAD__ - 1 - -; ------------------------------------------------------------------------ -; Actual code .segment "STARTUP" @@ -212,9 +198,3 @@ LMARGN_save: .res 1 .ifndef __ATARIXL__ APPMHI_save: .res 2 .endif - - -.segment "AUTOSTRT" - .word RUNAD ; defined in atari.inc - .word RUNAD+1 - .word start diff --git a/libsrc/atari/exehdr.s b/libsrc/atari/exehdr.s new file mode 100644 index 000000000..f2f77501d --- /dev/null +++ b/libsrc/atari/exehdr.s @@ -0,0 +1,8 @@ +; This file defines the EXE header for Atari executables + + .export __EXEHDR__: absolute = 1 + +.segment "EXEHDR" + + .word $FFFF + diff --git a/libsrc/atari/exetrailer.s b/libsrc/atari/exetrailer.s new file mode 100644 index 000000000..8cae0bdf0 --- /dev/null +++ b/libsrc/atari/exetrailer.s @@ -0,0 +1,12 @@ +; This file defines the EXE file "trailer" which sets the entry point + + .export __AUTOSTART__: absolute = 1 + .import start + + .include "atari.inc" + +.segment "AUTOSTRT" + .word RUNAD ; defined in atari.inc + .word RUNAD+1 + .word start + diff --git a/libsrc/atari/mainhdr.s b/libsrc/atari/mainhdr.s new file mode 100644 index 000000000..31b339b45 --- /dev/null +++ b/libsrc/atari/mainhdr.s @@ -0,0 +1,9 @@ +; This file defines the chunk header for the main program load chunk + + .export __MAINCHNKHDR__: absolute = 1 + .import __RAM_START__, __BSS_LOAD__ + +.segment "MAINHDR" + + .word __RAM_START__ + .word __BSS_LOAD__ - 1 -- 2.39.5