From aaf90c1252a09346deb1ccdab96546368afdbbdd Mon Sep 17 00:00:00 2001
From: "ol.sc"
Date: Sat, 2 Oct 2010 10:20:00 +0000
Subject: [PATCH] Exclude (small) stack from RAM memory area (like on most
other targets) to make explicit that the linker may not use all RAM. If the
cc65 parameter stack isn't used at all the __STACKSIZE__ symbol may be
overridden on the linker command line with -D __STACKSIZE__=0.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4820 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
libsrc/supervision/crt0.s | 5 +++--
src/ld65/cfg/supervision-128k.cfg | 5 ++++-
src/ld65/cfg/supervision-16k.cfg | 7 +++++--
src/ld65/cfg/supervision-64k.cfg | 5 ++++-
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/libsrc/supervision/crt0.s b/libsrc/supervision/crt0.s
index 6a3614476..bb82de3ee 100644
--- a/libsrc/supervision/crt0.s
+++ b/libsrc/supervision/crt0.s
@@ -9,6 +9,7 @@
.import initlib, donelib, copydata
.import zerobss
.import __RAM_START__, __RAM_SIZE__ ; Linker generated
+ .import __STACKSIZE__ ; Linker generated
.include "zeropage.inc"
.include "supervision.inc"
@@ -30,9 +31,9 @@ reset:
; initialize data
jsr copydata
- lda #>(__RAM_START__ + __RAM_SIZE__)
+ lda #>(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
sta sp+1 ; Set argument stack ptr
- stz sp ; #<(__RAM_START__ + __RAM_SIZE__)
+ stz sp ; #<(__RAM_START__ + __RAM_SIZE__ + __STACKSIZE__)
jsr initlib
jsr _main
_exit: jsr donelib
diff --git a/src/ld65/cfg/supervision-128k.cfg b/src/ld65/cfg/supervision-128k.cfg
index 7f3ee51cc..0c2d1b36b 100644
--- a/src/ld65/cfg/supervision-128k.cfg
+++ b/src/ld65/cfg/supervision-128k.cfg
@@ -4,8 +4,11 @@
# ld65 config file
# ld65 --config supervision.cfg -o .bin .o
+SYMBOLS {
+ __STACKSIZE__: value = $0100, weak = yes; # 1 page stack
+}
MEMORY {
- RAM: start = $0000, size = $2000;
+ RAM: start = $0000, size = $2000 - __STACKSIZE__;
VRAM: start = $4000, size = $2000;
BANKROM1: start = $8000, size = $4000, fill = yes, fillval = $FF, file = %O;
BANKROM2: start = $8000, size = $4000, fill = yes, fillval = $FF, file = %O;
diff --git a/src/ld65/cfg/supervision-16k.cfg b/src/ld65/cfg/supervision-16k.cfg
index 5ec5db54e..791133e7b 100644
--- a/src/ld65/cfg/supervision-16k.cfg
+++ b/src/ld65/cfg/supervision-16k.cfg
@@ -2,14 +2,17 @@
# ld65 config file
# ld65 --config supervision16.cfg -o .bin .o
+
+SYMBOLS {
+ __STACKSIZE__: value = $0100, weak = yes; # 1 page stack
+}
MEMORY {
ZP: start = $0000, size = $0100;
CPUSTACK: start = $0100, size = $0100;
- RAM: start = $0200, size = $1E00;
+ RAM: start = $0200, size = $1E00 - __STACKSIZE__;
VRAM: start = $4000, size = $2000;
ROM: start = $C000, size = $4000, fill = yes, fillval = $ff, file=%O, define=yes;
}
-
SEGMENTS {
LOWCODE: load = ROM, type = ro, optional = yes;
INIT: load = ROM, type = ro, define = yes, optional = yes;
diff --git a/src/ld65/cfg/supervision-64k.cfg b/src/ld65/cfg/supervision-64k.cfg
index 4cafdecae..6ae587296 100644
--- a/src/ld65/cfg/supervision-64k.cfg
+++ b/src/ld65/cfg/supervision-64k.cfg
@@ -4,8 +4,11 @@
# ld65 config file
# ld65 --config supervision.cfg -o .bin .o
+SYMBOLS {
+ __STACKSIZE__: value = $0100, weak = yes; # 1 page stack
+}
MEMORY {
- RAM: start = $0000, size = $2000;
+ RAM: start = $0000, size = $2000 - __STACKSIZE__;
VRAM: start = $4000, size = $2000;
BANKROM1: start = $8000, size = $4000, fill = yes, fillval = $FF, file = %O;
BANKROM2: start = $8000, size = $4000, fill = yes, fillval = $FF, file = %O;
--
2.39.5