]> git.sur5r.net Git - cc65/commitdiff
Add two load chunks:
authorChristian Groessler <chris@groessler.org>
Thu, 30 May 2013 00:26:15 +0000 (02:26 +0200)
committerChristian Groessler <chris@groessler.org>
Thu, 30 May 2013 00:26:15 +0000 (02:26 +0200)
 - First chunk checks system (if it's XL and memory is ok).
 - Second chunk contains the contents for the shadow memory beneath the
   ROM and copies the contents to their destination address.
   It also moves the screen memory to low memory in front of the program.

cfg/atarixl.cfg

index 975d162131422bc35925b6c2bea87ce4fffea993..cbd31bfe65ce2b6c0f6865cfc3fd1daf4dbbf88b 100644 (file)
@@ -1,29 +1,67 @@
 FEATURES {
     STARTADDRESS: default = $2E00;
 }
+
 SYMBOLS {
     __STACKSIZE__:       type = weak, value = $0800; # 2k stack
     __RESERVED_MEMORY__: type = weak, value = $0000;
+    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,    size = $BC20 - __STACKSIZE__ - %S;
-    TRAILER: file = %O,               start = $0000, size = $0006;
+    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;
+    SYSCHK:     file = %O,               start = $2E00,                  size = $0E00;
+
+# "shadow RAM preparation" load chunk
+    SRPREPHDR:  file = %O,               start = $0000,                  size = $0004;
+    SRPREP:     file = %O,               start = %S,                     size = $7C20 - %S - $04FF;  # $04FF: space for temp. chargen buffer, page aligned
+    SRPREPTRL:  file = %O,               start = $0000,                  size = $0006;
+
+# "main program" load chunk
+    MAINHDR:    file = %O,               start = $0000,                  size = $0004;
+    RAM:        file = %O,               start = %S + __SAVEAREA_SIZE__, size = $D000 - __STACKSIZE__ - %S - __SAVEAREA_SIZE__;
+
+# address of relocated character generator
+    CHARGEN:    file = "", define = yes, start = $D800, size = $0400;
+
+# memory beneath the ROM
+    SHADOW_RAM: file = "", define = yes, start = $DC00, size = $FFF0 - $DC00;
+
+# defines entry point into program
+    TRAILER:    file = %O,               start = $0000, size = $0006;
 }
+
 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;
+    EXEHDR:     load = HEADER,                   type = ro;
+
+    SYSCHKHDR:  load = SYSCHKHDR,                type = ro,                optional = yes;
+    SYSCHK:     load = SYSCHK,                   type = rw,  define = yes, optional = yes;
+
+    SRPREPHDR:  load = SRPREPHDR,                type = ro;
+    SAVEAREA:   load = SRPREP,                   type = bss, define = yes;  # shared btw. SRPREP and RAM
+    SRPREP:     load = SRPREP,                   type = rw,  define = yes;
+    SHADOW_RAM: load = SRPREP, run = SHADOW_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;
+    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;
 }
 FEATURES {
     CONDES: type    = constructor,