]> git.sur5r.net Git - cc65/commitdiff
Apple GEOS reserves beside the main app area at $4000-$C000 a secondary app area...
authorol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 8 Jun 2012 21:46:51 +0000 (21:46 +0000)
committerol.sc <ol.sc@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 8 Jun 2012 21:46:51 +0000 (21:46 +0000)
However the stack (usually 1 kB) can be securely placed in the secondary area without effort from the side of the developer. The rest of the secondary area (usually 4 kB) is made available to the developer as (uninitialized) 'EXTBSS'.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5696 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/geos-common/system/crt0.s
src/grc65/main.c
src/ld65/cfg/geos-apple.cfg
src/ld65/cfg/geos-cbm.cfg

index 8dba46f6d5a839d2fa7e69cc2cadbbb880dd5aa4..aed4b72a5a6e5727b416a40f6cd809b799b68cf9 100644 (file)
@@ -6,8 +6,8 @@
 
            .export _exit
            .export __STARTUP__ : absolute = 1          ; Mark as startup
-           .import __VLIR0_START__, __VLIR0_SIZE__     ; Linker generated
-           .import __STACKSIZE__, __BACKBUFSIZE__      ; Linker generated
+           .import __STACKADDR__, __STACKSIZE__        ; Linker generated
+           .import __BACKBUFSIZE__                     ; Linker generated
            .import initlib, donelib
            .import callmain
            .import zerobss
@@ -46,8 +46,8 @@
 
 ; Setup stack.
 
-       lda #<(__VLIR0_START__ + __VLIR0_SIZE__ + __STACKSIZE__)
-       ldx #>(__VLIR0_START__ + __VLIR0_SIZE__ + __STACKSIZE__)
+       lda #<(__STACKADDR__ + __STACKSIZE__)
+       ldx #>(__STACKADDR__ + __STACKSIZE__)
        sta sp
        stx sp+1
 
index 83dda479a138ebc0a5f4c10a499518334a2643fd..c22e85b4d3f43499946b6b542521c2b0e858f9d9 100644 (file)
@@ -828,7 +828,7 @@ static void DoMemory (void)
             stacksize);
     }
 
-    if (overlaysize != -1 && apple == 0) {
+    if (overlaysize != -1) {
         fprintf (outputSFile,
             "\t.export __OVERLAYSIZE__ : absolute = $%04x\n\n",
             overlaysize);
index c7006d2f371ee0d5351bce617b77a7ca7183cb8d..caf97a92f24df672994473ebd60e698dc53570a0 100644 (file)
@@ -1,14 +1,15 @@
 SYMBOLS {
-    __STACKSIZE__:   type = weak, value = $0400;
     __BACKBUFSIZE__: type = weak, value = $2000;
-    __OVERLAYSIZE__: type = weak, value = $2000 - $0C00;
-    __OVERLAYADDR__: type = weak, value = $0C00;
-    __VLIR0END__:    type = weak, value = $C000 - __BACKBUFSIZE__ - __STACKSIZE__;
+    __OVERLAYSIZE__: type = weak, value = $0000;
+    __OVERLAYADDR__: type = weak, value = $C000 - __BACKBUFSIZE__ - __OVERLAYSIZE__;
+    __STACKSIZE__:   type = weak, value = $0400;
+    __STACKADDR__:   type = weak, value = $2000 - __STACKSIZE__;
 }
 MEMORY {
     CVT:    file   = %O,  start = $0,              size = $20000;
     ZP:     define = yes, start = $80,             size = $1A + $06;
-    VLIR0:  define = yes, start = $4000,           size = __VLIR0END__ - $4000;
+    EXT:    define = yes, start = $0C00,           size = __STACKADDR__ - $0C00;
+    VLIR0:  define = yes, start = $4000,           size = __OVERLAYADDR__ - $4000;
     VLIR1:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
     VLIR2:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
     VLIR3:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
@@ -32,6 +33,7 @@ MEMORY {
 SEGMENTS {
     ZEROPAGE:  type = zp,  load = ZP;
     EXTZP:     type = zp,  load = ZP;
+    EXTBSS:    type = bss, load = EXT                                    optional = yes;
     FILEINFO:  type = ro,                 load = CVT, offset     = $002;
     RECORDS:   type = ro,                 load = CVT, offset     = $100, optional = yes;
     DIRENTRY:  type = ro,                 load = CVT, offset     = $180;
index a58b57c6cde663e58cbffd89f5dc7daf28573591..ef0f2a08e06bcb63fc722204cb25c6bed0036960 100644 (file)
@@ -1,14 +1,14 @@
 SYMBOLS {
-    __STACKSIZE__:   type = weak, value = $0400;
     __BACKBUFSIZE__: type = weak, value = $2000;
     __OVERLAYSIZE__: type = weak, value = $0000;
     __OVERLAYADDR__: type = weak, value = $8000 - __BACKBUFSIZE__ - __OVERLAYSIZE__;
-    __VLIR0END__:    type = weak, value = __OVERLAYADDR__ - __STACKSIZE__;
+    __STACKSIZE__:   type = weak, value = $0400;
+    __STACKADDR__:   type = weak, value = __OVERLAYADDR__ - __STACKSIZE__;
 }
 MEMORY {
     CVT:    file   = %O,  start = $0,              size = $40000;
     ZP:     define = yes, start = $58,             size = $1A + $06;
-    VLIR0:  define = yes, start = $0400,           size = __VLIR0END__ - $0400;
+    VLIR0:  define = yes, start = $0400,           size = __STACKADDR__ - $0400;
     VLIR1:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
     VLIR2:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;
     VLIR3:  define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__;