/* This is a linker parameter file for the MC9S12XHY128 */

/*
This file is setup to use the HCS12X core only.
If you plan to also use the XGATE in your project, best create a new project with the
'New Project Wizard' (File|New... menu in the CodeWarrior IDE) and choose the appropriate
project parameters.
*/

NAMES
    /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your additional files */
END

SEGMENTS /* here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. All addresses are 'logical' */
/* Register space  */
/*    IO_SEG        = PAGED                            0x0000 TO   0x07FF; intentionally not defined */

/* non-paged RAM */
      RAM           = READ_WRITE  DATA_NEAR            0x2000 TO   0x3FFF; 

/* non-banked FLASH */
      ROM_4000      = READ_ONLY   DATA_NEAR IBCC_NEAR  0x4000 TO   0x7FFF;  //16K
      //ROM_C000    = READ_ONLY   DATA_NEAR IBCC_NEAR  0xC000 TO   0xFEFF;  //15.75K
      ROM_C000      = READ_ONLY   DATA_NEAR IBCC_NEAR  0xC000 TO   0xFAFF;  //14.75K
    //VECTORS       = READ_ONLY                        0xFF00 TO   0xFFFF;  /*intentionally not defined: used for VECTOR commands below */
    //OSVECTORS     = READ_ONLY                        0xFF10 TO   0xFFFF;  /* OSEK interrupt vectors (use your vector.o) */

/* paged EEPROM                                        0x0800 TO   0x0BFF; addressed through EPAGE */
      EEPROM_00     = READ_ONLY   DATA_FAR IBCC_FAR  0x000800 TO 0x000BFF; //1K
      EEPROM_01     = READ_ONLY   DATA_FAR IBCC_FAR  0x010800 TO 0x010BFF; //1K
      EEPROM_02     = READ_ONLY   DATA_FAR IBCC_FAR  0x020800 TO 0x020BFF; //1K
      EEPROM_03     = READ_ONLY   DATA_FAR IBCC_FAR  0x030800 TO 0x030BFF; //1K
      EEPROM_04     = READ_ONLY   DATA_FAR IBCC_FAR  0x040800 TO 0x040BFF; //1K
      EEPROM_05     = READ_ONLY   DATA_FAR IBCC_FAR  0x050800 TO 0x050BFF; //1K
      EEPROM_06     = READ_ONLY   DATA_FAR IBCC_FAR  0x060800 TO 0x060BFF; //1K
      EEPROM_07     = READ_ONLY   DATA_FAR IBCC_FAR  0x070800 TO 0x070BFF; //1K

/* paged RAM:                                          0x1000 TO   0x1FFF; addressed through RPAGE */
/*    RAM_FE        = READ_WRITE                     0xFE1000 TO 0xFE1FFF; intentionally not defined: equivalent to RAM: 0x2000..0x2FFF */
/*    RAM_FF        = READ_WRITE                     0xFF1000 TO 0xFF1FFF; intentionally not defined: equivalent to RAM: 0x3000..0x3FFF */
      RAM_FD        = READ_WRITE  DATA_FAR           0xFD1000 TO 0xFD1FFF;
/* paged FLASH:                                        0x8000 TO   0xBFFF; addressed through PPAGE */
      PAGE_F0       = READ_ONLY   DATA_FAR IBCC_FAR  0xF08000 TO 0xF0BFFF; 
      PAGE_F1       = READ_ONLY   DATA_FAR IBCC_FAR  0xF18000 TO 0xF1BFFF; 
      PAGE_F2       = READ_ONLY   DATA_FAR IBCC_FAR  0xF28000 TO 0xF2BFFF; 
      PAGE_F3       = READ_ONLY   DATA_FAR IBCC_FAR  0xF38000 TO 0xF3BFFF; 
      PAGE_F4       = READ_ONLY   DATA_FAR IBCC_FAR  0xF48000 TO 0xF4BFFF; 
      PAGE_F5       = READ_ONLY   DATA_FAR IBCC_FAR  0xF58000 TO 0xF5BFFF; 
      PAGE_F6       = READ_ONLY   DATA_FAR IBCC_FAR  0xF68000 TO 0xF6BFFF; 
      PAGE_F7       = READ_ONLY   DATA_FAR IBCC_FAR  0xF78000 TO 0xF7BFFF;
      
     //PAGE_F8     = READ_ONLY   DATA_FAR IBCC_FAR  0xF88000 TO 0xF8BFFF; //16K 
      PAGE_F8       = READ_ONLY   DATA_FAR IBCC_FAR  0xF88000 TO 0xF89FFF; //8K
    //BOOT_PAGE_F8  = READ_ONLY   DATA_FAR IBCC_FAR  0xF8A000 TO 0xF8BFFF; //8K   (Resvered for Bootloader)
    
     //PAGE_F9       = READ_ONLY   DATA_FAR IBCC_FAR  0xF98000 TO 0xF9BFFF; //16K
     //PAGE_FA       = READ_ONLY   DATA_FAR IBCC_FAR  0xFA8000 TO 0xFABFFF; //16K
      
      GLOBOL_40K    = READ_ONLY                      0x7E4000'G TO 0x7EDFFF'G; 
      /* 40 kByte global address range covering PAGE_F9..PAGE_FB */ 
      PAGE_FB       = READ_ONLY   DATA_FAR IBCC_FAR  0xFBA000 TO 0xFBBFFF; //8K
      PAGE_FC       = READ_ONLY   DATA_FAR IBCC_FAR  0xFC8000 TO 0xFCBFFF; //16K
/*    PAGE_FD       = READ_ONLY                      0xFD8000 TO 0xFDBFFF; intentionally not defined: equivalent to ROM_4000 */
      PAGE_FE       = READ_ONLY   DATA_FAR IBCC_FAR  0xFE8000 TO 0xFEBFFF; //16K
/*    PAGE_FF       = READ_ONLY                      0xFF8000 TO 0xFFBFFF; intentionally not defined: equivalent to ROM_C000 */
END

PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
      _PRESTART,              /* Used in HIWARE format: jump to _Startup at the code start */
      STARTUP,                /* startup data structures */
      ROM_VAR,                /* constant variables */
      STRINGS,                /* string literals */
      VIRTUAL_TABLE_SEGMENT,  /* C++ virtual table segment */
    //.ostext,                /* eventually OSEK code  */
      NON_BANKED,             /* runtime routines which must not be banked */
      COPY                    /* copy down information: how to initialize variables */
                              /* in case you want to use ROM_4000 here as well, make sure
                                 that all files (incl. library files) are compiled with the
                                 option: -OnB=b */
                        INTO  ROM_C000, ROM_4000;
                        
      MAPDATA_ROM       INTO  GLOBOL_40K;
                        
      DEFAULT_ROM       INTO           PAGE_FE,          PAGE_FC,
                              PAGE_F7, PAGE_F6, PAGE_F5, PAGE_F4, PAGE_F3, PAGE_F2, PAGE_F1, PAGE_F0;
     
    //.stackstart,            /* eventually used for OSEK kernel awareness: Main-Stack Start */
      SSTACK,                 /* allocate stack first to avoid overwriting variables on overflow */
    //.stackend,              /* eventually used for OSEK kernel awareness: Main-Stack End */
      DEFAULT_RAM             /* all variables, the default RAM location */
                        INTO  RAM;

      PAGED_RAM         INTO  /* when using banked addressing for variable data, make sure to specify
                                 the option -D__FAR_DATA on the compiler command line */
                              RAM_FD;


      DISTRIBUTE        DISTRIBUTE_INTO
                              ROM_4000, PAGE_FE, PAGE_FC, PAGE_F7, 
                              PAGE_F6, PAGE_F5, PAGE_F4, PAGE_F3, PAGE_F2, PAGE_F1, PAGE_F0;
                              
      CONST_DISTRIBUTE  DISTRIBUTE_INTO
                              ROM_4000, PAGE_FE, PAGE_FC, PAGE_F7, 
                              PAGE_F6, PAGE_F5, PAGE_F4, PAGE_F3, PAGE_F2, PAGE_F1, PAGE_F0;
                              
      DATA_DISTRIBUTE   DISTRIBUTE_INTO
                              RAM, RAM_FD;
    //.vectors          INTO  OSVECTORS; /* OSEK vector table */
END


ENTRIES /* keep the following unreferenced variables */
    /* OSEK: always allocate the vector table and all dependent objects */
  //_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
END

STACKSIZE 0x200   /* 0x100   size of the stack (will be allocated in DEFAULT_RAM) */       

/* use these definitions in plane of the vector table ('vectors') above */
VECTOR 0 _Startup /* reset vector: this is the default entry point for a C/C++ application. */  
VECTOR 1 _Startup /* COP reset entry*/ 
VECTOR 2 _Startup /* COP reset entry*/ 
VECTOR 3 _Startup /* COP reset entry*/ 



//VECTOR 0 Entry  /* reset vector: this is the default entry point for an Assembly application. */
//INIT Entry      /* for assembly applications: that this is as well the initialization entry point */


VECTOR ADDRESS  0xFB78  NONUSE1_ISR
VECTOR ADDRESS  0xFB7A  NONUSE2_ISR
VECTOR ADDRESS  0xFB7C  NONUSE3_ISR
VECTOR ADDRESS  0xFB7E  API_ISR             // relocated interrupt table to 0xFB00 in initial routine within main();  

VECTOR ADDRESS  0xFBB0  MSCAN0_TX_ISR       // relocated interrupt table to 0xFB00 in initial routine within main(); 
VECTOR ADDRESS  0xFBB2  MSCAN0_RX_ISR       // relocated interrupt table to 0xFB00 in initial routine within main(); 
//VECTOR ADDRESS  0xFBB4  NONUSE5_ISR
VECTOR ADDRESS  0xFBB6  MSCAN0_WAKEUP_ISR   // relocated interrupt table to 0xFB00 in initial routine within main(); 

              

VECTOR ADDRESS  0xFBD6  SCI0_ISR            // relocated interrupt table to 0xFB00 in initial routine within main(); ; 
VECTOR ADDRESS  0xFBF0  RTI_ISR             // relocated interrupt table to 0xFB00 in initial routine within main(); 
VECTOR ADDRESS  0xFBA0  Timer0_ONPUT