From: Christian Groessler (cpg_at_aladdin.de)
Date: 2002-09-25 12:51:06
On 09/24/2002 04:13:20 PM MST "Shawn Jefferson" wrote:
>
>>>> Christian Groessler <cpg_at_aladdin.de> 09/20/02 04:22PM >>>
>
>>So with some linker and segments fiddling, one should be able to make
>>RAM2 a separate chunk in the file. The AUTOSTRT chunk should be last
>>(unless you know what you do), because I think it's address will be
>>called immediately after being loaded, before the remaining chunks get
>>loaded.
>
>Ok, I think I succeeded in setting this up with these files:
>
>atari.cfg:
>
>MEMORY {
> ZP: start = $82, size = $7E, type = rw;
> HEADER: start = $0000, size = $6, file = %O;
> RAM1: start = $2000, size = $2000, file = %O;
> BANK: start = $4000, size = $3FFF, type = ro; # just to show the memory layout, not used
> SECHDR: start = $8000, size = $4, file = %O;
> RAM2: start = $8004, size = $3C1F, file = %O;
>}
>SEGMENTS {
> EXEHDR: load = HEADER, type = wprot;
> CODE: load = RAM1, type = wprot, define = yes;
> BSS: load = RAM1, type = bss, define = yes;
> CHKHDR: load = SECHDR, type = wprot;
> RODATA: load = RAM2, type = wprot, define = yes;
> DATA: load = RAM2, type = rw;
> ZEROPAGE: load = ZP, type = zp;
> AUTOSTRT: load = RAM2, type = wprot, define = yes;
>}
>
>and chunk.s:
>
> .import __RODATA_LOAD__, __AUTOSTRT_LOAD__
>
>; CHUNK HEADER
> .segment "CHKHDR"
> .word __RODATA_LOAD__
> .word __AUTOSTRT_LOAD__ - 1
> .code
> .reloc
>
>From looking at the source code for crt0.s in the atari library, the
>main header uses the values for CODE and BSS - 1 to create the
>header, so you are sort of stuck with putting the code and bss (what
>does that stand for?) in the first memory segment. Unless there is a
>way to override this without recompiling the library. The first
You'll only need to recompile and change crt0.s...
I think you can also free the 4 bytes at $8000, since they're part of
the load file format, but not loaded into memory. The start address of
SECHDR doesn't matter. So you could use
SECHDR: start = $0, size = $4, file = %O;
RAM2: start = $8000, size = $3C1F, file = %O;
I don't know whether the linker complains if HEADER and SECHDR have
the same start address, if yes, you could take some other value for
SECHDR start address.
regards,
chris
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2002-09-25 12:51:24 CEST