Rearrange the segments a bit

* put TABLES in the low memory, before the bank switch window
* reserve bank switch window
* put rest of the code after that and before the framebuffer

so TABLES lives just before $4000
and MAIN lives in $8000-$bfff

could split some more code and/or data into low mem

and/or move the tables not used in extended memory mode into
the bank switch window so they take no address space on XE
or expanded memory machines
This commit is contained in:
Brooke Vibber 2025-12-28 12:55:08 -08:00
commit a93dd00e36

View file

@ -1,7 +1,7 @@
# Sample linker configuration for C programs using the Atari binary file support.
# Use with: cl65 -tatari -Catari-xex.cfg prog.c -o prog.xex
FEATURES {
STARTADDRESS: default = $2000;
STARTADDRESS: default = $8000;
}
SYMBOLS {
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
@ -10,19 +10,24 @@ SYMBOLS {
__RESERVED_MEMORY__: type = weak, value = $0000;
__SYSCHKHDR__: type = export, value = 0; # Disable system check header
__SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
__TABLESEG_START__: type = weak, value = $2E00 + $0300;
__TABLESEG_SIZE__: type = weak, value = 6 * $100;
__FRAMEBUFFER_START__: type = weak, value = $a000;
__BANKSY_START__: type = weak, value = $4000;
__BANKSY_SIZE__: type = weak, value = $4000;
__FRAMEBUFFER_START__: type = weak, value = $A000;
}
MEMORY {
# Note -- $80 and $81 (LOMEM) appear to be reserved in ZP.
ZP: file = "", define = yes, start = $0082, size = $007E;
# "system check" load chunk
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
# Note we reserve $4000-7fff for the bank-switch window.
# Note $a000-$bfff is against the BASIC cartridge, may require booting with OPTION.
TABLES: file = %O, define = yes, start = %S, size = __TABLESEG_SIZE__;
TABLES: file = %O, define = yes, start = __TABLESEG_START__, size = __TABLESEG_SIZE__;
# We reserve $4000-7fff for the bank-switch window.
# In theory we could keep data and code here that we only use on 48k/64k systems.
BANKSWITCH: file = "", define = yes, start = __BANKSY_START__, size = __BANKSY_SIZE__;
# "main program" load chunk
MAIN: file = %O, define = yes, start = %S + __TABLESEG_SIZE__, size = __FRAMEBUFFER_START__ - __STACKSIZE__ - __RESERVED_MEMORY__ - __TABLESEG_SIZE__ - %S;
MAIN: file = %O, define = yes, start = %S, size = __FRAMEBUFFER_START__ - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
}
FILES {
%O: format = atari;
@ -36,6 +41,7 @@ SEGMENTS {
EXTZP: load = ZP, type = zp, optional = yes;
SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
TABLES: load = TABLES, type = ro, optional = yes, align = 256;
BANKSWICH: load = BANKSWITCH, type = ro, optional = yes;
STARTUP: load = MAIN, type = ro, define = yes;
LOWBSS: load = MAIN, type = rw, optional = yes; # not zero initialized
LOWCODE: load = MAIN, type = ro, define = yes, optional = yes;