From 85170998ad45cadb2064fa68349bb3a8975efd89 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Fri, 13 Sep 2013 21:47:39 +0200 Subject: [PATCH] more atarixl linker cfg file cleanups; adapt atarixl-overlay.cfg --- cfg/atarixl-overlay.cfg | 122 +++++++++++++++++++++--------- cfg/atarixl.cfg | 17 +++-- libsrc/atari/shadow_ram_prepare.s | 2 +- libsrc/atari/system_check.s | 3 +- libsrc/atari/xlmemchk.inc | 8 +- 5 files changed, 104 insertions(+), 48 deletions(-) diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 02becd29b..8b408c3a4 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -1,48 +1,100 @@ FEATURES { - STARTADDRESS: default = $2E00; + STARTADDRESS: default = $2400; } + SYMBOLS { __STACKSIZE__: type = weak, value = $0800; # 2k stack __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay __RESERVED_MEMORY__: type = weak, value = $0000; + __STARTADDRESS__: type = export, value = %S; + syschk: type = import; # force inclusion of SYSCHK + sramprep: type = import; # force inclusion of SRPREP } + MEMORY { - ZP: file = "", define = yes, start = $0082, size = $007E; - HEADER: file = %O, start = $0000, size = $0006; - RAM: file = %O, start = %S + __OVERLAYSIZE__, size = $BC20 - __STACKSIZE__ - __OVERLAYSIZE__ - %S; - TRAILER: file = %O, start = $0000, size = $0006; - OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; - OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__; - OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__; - OVL4: file = "%O.4", start = %S, size = __OVERLAYSIZE__; - OVL5: file = "%O.5", start = %S, size = __OVERLAYSIZE__; - OVL6: file = "%O.6", start = %S, size = __OVERLAYSIZE__; - OVL7: file = "%O.7", start = %S, size = __OVERLAYSIZE__; - OVL8: file = "%O.8", start = %S, size = __OVERLAYSIZE__; - OVL9: file = "%O.9", start = %S, size = __OVERLAYSIZE__; + ZP: file = "", define = yes, start = $0082, size = $007E; + +# just $FFFF + HEADER: file = %O, start = $0000, size = $0002; + +# "system check" load chunk + SYSCHKHDR: file = %O, start = $0000, size = $0004; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKTRL: file = %O, start = $0000, size = $0006; + +# "shadow RAM preparation" load chunk + SRPREPHDR: file = %O, start = $0000, size = $0004; + SRPREPCHNK: file = %O, start = %S + __OVERLAYSIZE__, size = $7C20 - %S - __OVERLAYSIZE__ - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPTRL: file = %O, start = $0000, size = $0006; + +# "main program" load chunk + MAINHDR: file = %O, start = $0000, size = $0004; + RAM: file = %O, define = yes, start = %S + + __OVERLAYSIZE__ + + __SAVEAREA_SIZE__ + + __LOWDATA_SIZE__, size = $D000 - + __STACKSIZE__ - + %S - + __OVERLAYSIZE__ - + __SAVEAREA_SIZE__ - + __LOWDATA_SIZE__; + +# defines entry point into program + TRAILER: file = %O, start = $0000, size = $0006; + +# address of relocated character generator + CHARGEN: file = "", define = yes, start = $D800, size = $0400; + +# memory beneath the ROM + HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFF0 - $DC00; + +# overlays + OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; + OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__; + OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__; + OVL4: file = "%O.4", start = %S, size = __OVERLAYSIZE__; + OVL5: file = "%O.5", start = %S, size = __OVERLAYSIZE__; + OVL6: file = "%O.6", start = %S, size = __OVERLAYSIZE__; + OVL7: file = "%O.7", start = %S, size = __OVERLAYSIZE__; + OVL8: file = "%O.8", start = %S, size = __OVERLAYSIZE__; + OVL9: file = "%O.9", start = %S, size = __OVERLAYSIZE__; } + SEGMENTS { - EXEHDR: load = HEADER, type = ro; - STARTUP: load = RAM, type = ro, define = yes; - LOWCODE: load = RAM, type = ro, define = yes, optional = yes; - INIT: load = RAM, type = ro, optional = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro; - DATA: load = RAM, type = rw; - ZPSAVE: load = RAM, type = bss, define = yes; - BSS: load = RAM, type = bss, define = yes; - ZEROPAGE: load = ZP, type = zp; - EXTZP: load = ZP, type = zp, optional = yes; - AUTOSTRT: load = TRAILER, type = ro; - OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; - OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; - OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; - OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes; - OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes; - OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes; - OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes; - OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes; - OVERLAY9: load = OVL9, type = ro, define = yes, optional = yes; + EXEHDR: load = HEADER, type = ro; + + SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; + SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; + SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; + + SRPREPHDR: load = SRPREPHDR, type = ro; + SAVEAREA: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREP and RAM + LOWDATA: load = SRPREPCHNK, type = bss, define = yes; # " " " " " " " " + SRPREP: load = SRPREPCHNK, type = rw, define = yes; + SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; + SRPREPTRL: load = SRPREPTRL, type = ro; + + MAINHDR: load = MAINHDR, type = ro; + STARTUP: load = RAM, type = ro, define = yes; + LOWCODE: load = RAM, type = ro, define = yes, optional = yes; + INIT: load = RAM, type = ro, optional = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro; + DATA: load = RAM, type = rw; + BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp, optional = yes; + AUTOSTRT: load = TRAILER, type = ro; + + OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; + OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; + OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; + OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes; + OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes; + OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes; + OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes; + OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes; + OVERLAY9: load = OVL9, type = ro, define = yes, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index 551aa4433..dd49d421d 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -5,6 +5,7 @@ FEATURES { SYMBOLS { __STACKSIZE__: type = weak, value = $0800; # 2k stack __RESERVED_MEMORY__: type = weak, value = $0000; + __STARTADDRESS__: type = export, value = %S; syschk: type = import; # force inclusion of SYSCHK sramprep: type = import; # force inclusion of SRPREP } @@ -17,12 +18,12 @@ MEMORY { # "system check" load chunk SYSCHKHDR: file = %O, start = $0000, size = $0004; - SYSCHK: file = %O, start = $2E00, size = $0300; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; SYSCHKTRL: file = %O, start = $0000, size = $0006; # "shadow RAM preparation" load chunk SRPREPHDR: file = %O, start = $0000, size = $0004; - SRPREP: file = %O, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned SRPREPTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk @@ -42,21 +43,21 @@ MEMORY { CHARGEN: file = "", define = yes, start = $D800, size = $0400; # memory beneath the ROM - RAM_BELOW_ROM: file = "", define = yes, start = $DC00, size = $FFF0 - $DC00; + HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFF0 - $DC00; } SEGMENTS { EXEHDR: load = HEADER, type = ro; SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; - SYSCHK: load = SYSCHK, type = rw, define = yes, optional = yes; + SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; SRPREPHDR: load = SRPREPHDR, type = ro; - SAVEAREA: load = SRPREP, type = bss, define = yes; # shared btw. SRPREP and RAM - LOWDATA: load = SRPREP, type = bss, define = yes; # " " " " " " " " - SRPREP: load = SRPREP, type = rw, define = yes; - SHADOW_RAM: load = SRPREP, run = RAM_BELOW_ROM, type = rw, define = yes, optional = yes; + SAVEAREA: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREP and RAM + LOWDATA: load = SRPREPCHNK, type = bss, define = yes; # " " " " " " " " + SRPREP: load = SRPREPCHNK, type = rw, define = yes; + SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SRPREPTRL: load = SRPREPTRL, type = ro; MAINHDR: load = MAINHDR, type = ro; diff --git a/libsrc/atari/shadow_ram_prepare.s b/libsrc/atari/shadow_ram_prepare.s index 78e7ba4f0..e0dc23f77 100644 --- a/libsrc/atari/shadow_ram_prepare.s +++ b/libsrc/atari/shadow_ram_prepare.s @@ -18,7 +18,7 @@ DEBUG = 1 .import __SHADOW_RAM_LOAD__, __SHADOW_RAM_SIZE__ .import __SHADOW_RAM_RUN__ .import __CHARGEN_START__, __CHARGEN_SIZE__ - .import __SAVEAREA_LOAD__ + .import __STARTADDRESS__ ; needed by xlmemchk.inc .include "zeropage.inc" .include "atari.inc" diff --git a/libsrc/atari/system_check.s b/libsrc/atari/system_check.s index b0abc0dc8..b1d80b0c2 100644 --- a/libsrc/atari/system_check.s +++ b/libsrc/atari/system_check.s @@ -17,7 +17,7 @@ DEBUG = 1 .export syschk .import __SYSCHK_LOAD__ - .import __SAVEAREA_LOAD__ ; needed by xlmemchk.inc + .import __STARTADDRESS__ ; needed by xlmemchk.inc .include "zeropage.inc" .include "atari.inc" @@ -75,6 +75,7 @@ cont: ldx #0 ; channel 0 no_xl: print_string "This program needs an XL machine." jmp fail +; entry point syschk: lda $fcd8 ; from ostype.s cmp #$a2 diff --git a/libsrc/atari/xlmemchk.inc b/libsrc/atari/xlmemchk.inc index 81e09ba90..d2a079557 100644 --- a/libsrc/atari/xlmemchk.inc +++ b/libsrc/atari/xlmemchk.inc @@ -9,7 +9,7 @@ ; by the screen memory afterwards. ; ; inputs: -; __SAVEAREA_LOAD__ - load address of the program +; __STARTADDRESS__ - load address of the program ; outputs: ; lodadr - (high byte only) value to ; write into RAMTOP @@ -75,8 +75,10 @@ al4k: lda lodadr+1 bne scrmemtst ; not reached - -lodadr: .word __SAVEAREA_LOAD__ & $FF00 ; our program's load address, rounded down to page boundary +.ifdef DEBUG +.byte "XLMEMCHK:>" +.endif +lodadr: .word __STARTADDRESS__ & $FF00 ; our program's load address, rounded down to page boundary tstadr: .res 2 lowadr: .res 2 tmp: .res 1 -- 2.39.5