Works for me 
Here's what I tried:
#include <hidef.h>#include "derivative.h"#define CHARS_10 "1234567890"#define CHARS_20 CHARS_10 CHARS_10#define CHARS_40 CHARS_20 CHARS_20#define CHARS_100 CHARS_40 CHARS_40 CHARS_20#define CHARS_200 CHARS_100 CHARS_100#define CHARS_400 CHARS_200 CHARS_200#define CHARS_800 CHARS_400 CHARS_400char Msg_List[1148] @ 0x2E3F =CHARS_800 CHARS_200 CHARS_100 CHARS_40 "1234567";void main(void) { for(;;) { _FEED_COP(); }}
Is the boundary of the incorrect initialization at exact 0x3000?
There is no boundary at that address if the RAM is accessed using its unpaged address, I assume you use the 0x2000 ram unpaged (say not with its 0xFE1000'L or 0xFE000'G alias addresses).
Also have a look at the COPYDOWN SECTION in the map file, it shows what the startup code should be initializing.
*********************************************************************************************COPYDOWN SECTION---------------------------------------------------------------------------------------------------- ROM-ADDRESS: 0xC031 ---- SIZE 4 ---Filling bytes inserted 1F402100------- ROM-ADDRESS: 0xC035 ---- RAM-ADDRESS: 0x2100 ---- SIZE 8000 ---Name of initialized Object : Msg_List1 3132333435 3637383930 3132333435
Anything else special (like using define __FAR_DATA, special prm file, adapted startup code,....)?
Daniel