/*      THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU       */
/*      MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR       */
/*      ELIGIBILITY FOR ANY PURPOSES.                                                   */
/*      (C) 2007,2008 Fujitsu Microelectronics Europe GmbH                              */
;=========================================================================================
; 1  Contents
;=========================================================================================
; 1       Contents
; 2       Disclaimer
;
; 3       History
;
; 4       Settings
; 4.1     Controller device
; 4.2     Boot / flash security 
; 4.3     Stack type and stack size
; 4.4     Copy code from flash to I-RAM
; 4.5     C++ start-up 
; 4.6     Low-level library interface
; 4.7     Clock Configuration
; 4.7.1   Clock selection
; 4.7.2   Select Clock Modulator
; 4.8     External bus interface
; 4.8.1   Select chipselect 
; 4.8.2   Set memory addressing for chipselects
; 4.8.3   Configure chipselect area
; 4.8.4   Set wait cycles for chipselects
; 4.8.5   Configure chipselects SDRAM memory only 
; 4.8.6   Referesh control register RCR 
; 4.8.7   Terminal and timing control register
; 4.8.8   Enable / disable I-cache
; 4.8.9   Enable CACHE for chipselect
; 4.8.10  Select external bus mode (data lines)
; 4.8.11  Select external bus mode (address lines)
; 4.8.12  Select external bus mode (control signals)
;
; 5       Definitions of Configurations
;
; 6       Section and data declaration
; 6.1     Define stack size
; 6.2     Define sections
;
; 7.      S T A R T 
; 7.1     Initialise stack pointer and table base register
; 7.2     Check for CSV reset and set CSV
; 7.3     Check clock condition
; 7.4     Restore default settings after reset
; 7.4.2   Disable clock modulator
; 7.4.2   Check if running on sub clock, change to main clock
; 7.4.3   Disable sub clock
; 7.4.4   Check if running on PLL, gear down PLL
; 7.4.5   Disable PLL
; 7.4.6   Set to main clock
; 7.5     Set memory controller
; 7.6     Clock startup
; 7.6.1   Set Voltage Regulator Settings
; 7.6.2   Power on clock modulator - clock modulator part I
; 7.6.3   Set CLKR register w/o clock mode
; 7.6.4   Start PLLs 
; 7.6.5   Wait for PLL oscillation stabilisation
; 7.6.6   Set clocks 
; 7.6.6.1 Set CPU and peripheral clock
; 7.6.6.2 Set external bus interface clock
; 7.6.6.3 Set CAN clock prescaler
; 7.6.6.4 Switch main clock mode
; 7.6.6.5 Switch sub clock mode
; 7.6.6.6 Switch to PLL mode
; 7.6.7   Enable frequncy modulation - clock modulator part II
; 7.7     Set BusInterface
; 7.7.1   Disable all CS
; 7.7.2   Clear TCR register
; 7.7.3   Set CS0 
; 7.7.4   Set CS1 
; 7.7.5   Set CS2  
; 7.7.6   Set CS3
; 7.7.7   Set CS4
; 7.7.8   Set CS5 
; 7.7.9   Set CS6
; 7.7.10  Set CS7  
; 7.7.11  Set special SDRAM config register  
; 7.7.12  set Port function register
; 7.7.13  Set TCR register
; 7.7.14  Enable cache for selected CS
; 7.7.15  Set SDRAM referesh control register
; 7.7.16  Enable used CS
; 7.7.17  I-cache on/off
; 7.7.18  Set port function register to general as I/O-port
; 7.8     Copy code from flash to I-RAM
; 7.9     Fill stacks
; 7.10    Clear data 
; 7.11    Copy Init section from ROM to RAM
; 7.12    C library initialization
; 7.13    Call C++ constructors
; 7.14    Call main routine
; 7.15    Return from main function
;
;=========================================================================================
; 2  Disclaimer
;=========================================================================================
;                    Fujitsu Microelectronics Europe GmbH                       
;                http://emea.fujitsu.com/microelectronics 
;                                                              
;    The  following  software  is for  demonstration  purposes only. It  is not fully  
;    tested, nor  validated  in order to fullfill its task under  all  circumstances.  
;    Therefore,  this software or  any part of it must only  be used in an evaluation 
;    laboratory environment.                        
;    This  software  is  subject to  the  rules of  our  standard DISCLAIMER, that is
;    delivered with our  SW-tools on  the  Fujitsu  Microcontrollers  CD/DVD (V3.4 or 
;    higher "\START.HTM") or on our Internet Pages:                                   
;    http://www.fme.gsdc.de/gsdc.htm
;    http://emea.fujitsu.com/microelectronics 
;
;=========================================================================================
; 3  History
;=========================================================================================
;
;=========================================================================================
;       MB914xx (FR60 CORE ONLY) Series C Compiler's 
;
;       Startup file for memory and basic controller initialisation
;=========================================================================================
;History:
;
; 2005-04-18 V1.0 UMa  Release first version
; 2005-06-17 V1.1 UMa  Added bus interface, modified c++ startup
; 2005-06-28 V1.2 UMa  minor changes
; 2005-07-27 V1.3 UMa  default values changed
; 2005-10-04 V1.4 UMa  changed code 'Call main Routine'
;                      Added secutiy section for MB91F467D  
;                      Added Flash Access Read Timing setting section;
; 2005-10-04 V1.5 UMa  Added Flash Controller Section
; 2005-10-28 V1.6 UMa  Check for CSV reset
; 2005-11.16 V1.7 UMa  Monitor Debugger support added: Copy of intvect Table
;                      Ext. Int 0 as abort function
;                      Changed PLL-Startup, Reset HWWD added
; 2005-11-16 V1.7 UMa  Examples for MUL_G changed
; 2006-02-14 V1.8 UMa  mb91464a added
;                      Settings for Clock Spervisor added
;                      Name of Section SECURITY changed to SECURITY_VECTORS
;                      Example values for gear-up changed
; 2006-03-17 V1.9 UMa  Changed Startup for Monitor Debugger
; 2006-04-24 v2.0 UMa  Added MB91465K and MB91469G
; 2006-05-03 v2.1 UMa  Added MB91461R; removed MB91V460A
;                      Added settings for the external bus-interface
; 2006-07-28 v2.2 UMa  Added I-RAM copy function (ROM -> IRAM)
;                      Added default settings for FLASH Access Read Timing 
;                      Settings 
;                      Changed default settings for FLASH cache configuration 
;                      Register
;                      Changed check for clock startup
; 2006-08-16 v2.3 MVo  Corrected Boot Security Sector Addresses for MB91469G
; 2006-10-06 v2.4 UMa  Added new devices
;                      Corrected typo in I_RAM to flash copy function
;                      Changed default settings for flash cache configuration
;                      Changed comments for SDRAM bus interface configuration
;                      Changed comments and default setting of CAN Prescaler
;                      Added Stack filler
;                      Added Settings for REGSEL Register
; 2007-02-13 v2.5 UMa  Introduction of default configurations
;                      Changed I_RAM to flash copy function                    
;
;
;=========================================================================================
; 4  Settings
;=========================================================================================
;
; CHECK ALL OPTIONS WHETHER THEY FIT TO THE APPLICATION;
;
; Configure this startup file in the "Settings" section. Search for
; comments with leading "; <<<". This points to the items to be set.
;=========================================================================================
;
#set    OFF             0
#set    ON              1
#set    DEFAULT         2
#set    LOW_PRIOR       31
;
;=========================================================================================
; 4.1  Controller Device
;=========================================================================================
#set    MB91464A        2                       ; MB91460 series
;
#set    MB91467B       10                       ; MB91460 series
;
#set    MB91467C       11                       ; MB91460 series
;
#set    MB91467D        4                       ; MB91460 series
;
#set    MB91469G        6                       ; MB91460 series
;
#set    MB91465K        3                       ; MB91460 series
;
#set    MB91463N        8                       ; MB91460 series
;
#set    MB91461R        1                       ; MB91460 series
#set    MB91467R        5                       ; MB91460 series
;
#set    MB91465X        9                       ; MB91460 series
;
#set    others          7                       ; MB91460 series
;
;
;
#set    DEVICE          MB91467D                ; <<< select device
;
;=========================================================================================
; 4.2  Boot / Flash Security 
;=========================================================================================
;
#set    BOOT_FLASH_SEC  OFF                     ; <<< BOOT and Flash Security Vector    
;
; The flash devices have two flash and two boot security vectors.  It is important to set
; the four vectors correctly.  Otherwise it might be possible,  that the flash device is 
; not accessible any more via the bootrom. Please read carefully the hardware manual.
; 
; OFF:  The security feature is switch off. The section SECURITY_VECTORS is reserved and
;       the vectors are set.
; ON:   IMPORTANT! The  security vectors are  not set. But the  section SECURITY_VECTORS 
;       is reserved.  
;
; Note: This feature is not supported by every device. Please check the data sheet. This 
;       feature is not available on MB91461R.
;
;=========================================================================================
; 4.3  Stack Type and Stack Size
;=========================================================================================
;
#set    USRSTACK        0                       ; user stack:   for main program
#set    SYSSTACK        1                       ; system stack: for main program and 
;                                               ;               interrupts
;
;
#set    STACKUSE        SYSSTACK                ; <<< set active stack
;
#set    STACK_RESERVE   ON                      ; <<< reserve stack area in 
;                                               ;     this module
#set    STACK_SYS_SIZE  1000	                ; <<< byte size of System stack
#set    STACK_USR_SIZE  4                       ; <<< byte size of User stack 
;
#set    STACK_FILL      ON                     ; <<< fills the stack area with pattern
#set    STACK_PATTERN   0x55AA55AA              ; <<< the pattern to write to stack
;
; - If the active stack is set to SYSSTACK,  it is used for main program and interrupts. 
;   In this case,  the user stack  could be set to a dummy size.  If the active stack is 
;   set  to  user  stack,  it is  used  for the  main  program  but the  system stack is 
;   automatically activated,  if an interrupt is serviced.  Both stack areas must have a 
;   reasonable size.
; - If STACK_RESERVE is ON,  the sections USTACK and SSTACK are reserved in this module. 
;   Otherwise, they have to be reserved in other modules.  If STACK_RESERVE is OFF,  the 
;   size definitions STACK_SYS_SIZE and STACK_USR_SIZE have no meaning.
; - Even if  they  are reverved  in other modules,  they are  still initialised  in this 
;   start-up file.
;
; Note: Several library functions require quite a big stack (due to ANSI). 
;       Check the stack information files (*.stk) in the LIB\911 directory.
;
;=========================================================================================
; 4.4  Copy code from Flash to I-RAM
;=========================================================================================
;
#set    I_RAM           OFF                     ; <<< select  if  code  in  section IRAM
;                                                     should be copied
;
; If this option is activated code located in the  section IRAM is copied during startup 
; from ROM to the instruction-RAM. The code is linked for the instruction-RAM.
;
;=========================================================================================
; 4.5  Low-Level Library Interface
;=========================================================================================
;
#set    CLIBINIT        OFF                     ; <<< select ext. libray usage
;
; This option has only to be set,  if  stream-IO/standard-IO function  of the C-libraray 
; have to be used (printf(), fopen()...).  This also requires  low-level functions to be 
; defined by the application software.
; For other library functions like (e.g. sprintf()) all this is not necessary.  However, 
; several functions consume a large amount of stack.
;
;=========================================================================================
; 4.6  C++ start-up 
;=========================================================================================
;
#set    CPLUSPLUS       OFF                     ; <<< activate if c++ files are used
;
; In the  C++ specifications,  when external  or static objects are used,  a constructor 
; must be called followed by  the main function.  Because four-byte pointers to the main 
; function are stored in the EXT_CTOR_DTOR section, call a constructor sequentially from
; the  lower  address  of  the four  addresses  in that  section.  If using C++ sources, 
; activate this function to create the section EXT_CTOR_DTOR. 
;
;=========================================================================================
; 4.7  Clock Configuration
;=========================================================================================
;=========================================================================================
; 4.7.1  Clock Selection
;=========================================================================================
;
; No clock settings
#set    NO_CLOCK                                               0x01
;
; Sub-oscillation input: 32 kHz 
#set    SUB_32KHZ_CPU__32KHZ_PER_32KHZ_EXT_32KHZ_CAN__2MHZ     0x11
;
; Oscillation input: 4 MHz 
#set    MAIN_4MHZ_CPU___2MHZ_PER__1MHZ_EXT__1MHZ_CAN__2MHZ     0x21
#set    PLL_4MHZ__CPU__48MHZ_PER_16MHZ_EXT_24MHZ_CAN_16MHZ     0x22
#set    PLL_4MHZ__CPU__64MHZ_PER_16MHZ_EXT_32MHZ_CAN_16MHZ     0x23
#set    PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_27MHZ_CAN_20MHZ     0x24
#set    PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_40MHZ_CAN_20MHZ     0x25
#set    PLL_4MHZ__CPU__96MHZ_PER_16MHZ_EXT_48MHZ_CAN_16MHZ     0x26  ;not MB91V460, ...
#set    PLL_4MHZ__CPU_100MHZ_PER_20MHZ_EXT_50MHZ_CAN_20MHZ     0x27  ;not MB91V460, ...
;
; MB91461R only: Oscillation input: 10 MHz
#set    PLL_10MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ     0x41
;
; MB91461R only: Oscillation input: 20 MHz
#set    PLL_20MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ     0x51
;
; User settings
#set    CLOCK_USER                                             0x61
;
;
;
#set    CLOCKSPEED      PLL_4MHZ__CPU__64MHZ_PER_16MHZ_EXT_32MHZ_CAN_16MHZ
;                                               ; <<< Select clock configuration 
;
; There are different default configurations available, where all necessary settings for 
; clocks and the related  registers are made.  Beside this configurations,  there is the
; possibility   to  define  a  user   configuration   in  the  chapter   "Definition  of 
; Configurations"
; 
; - NO_CLOCK means: 
;   The clock registers are not set by the start-up file.
;
; - PLL_4MHZ__CPU__64MHZ_PER_16MHZ_EXT_32MHZ_CAN_16MHZ means:
;   Main oszillation        =  4 MHz, PLL is activated
;   CPU clock (CLKB)        = 64 MHZ
;   Peripheral clock (CLKP) = 16 MHZ
;   Ext. bus clock (CLKT)   = 32 MHZ
;   CAN clock (CLKCAN)      = 16 MHz, using PLLx 
;
; - CLOCK_USER: 
;   The user configuration definded in the chapter "Definition of Configurations" is set.
;
; Note: Not all  frequencies  are supported  by every device.  Please see  the  hardware 
;       manual.
;
;=========================================================================================
; 4.7.2  Select Clock Modulator  
;=========================================================================================
;
#set    CLOMO           OFF                     ; <<< Enable /disable clock modulator      
;
#set    CMPR            0x026F                  ; <<< Ref. to the data sheet, CMPR
; 
; Please  refer  to the data sheet  of the device  if you  enable clock modulation.  The 
; register CMPR dependant on the PLL-Clock.
;
; Note: If the CLKCAN source is set either to main oscillator or to PLL  output then the
;       clock  for  the CAN  is not influenced by  the clock  modulation.  If the CLKCAN 
;       source is set CPU clock (CLKB) then the clock for the CAN is also modulated  (if 
;       the clock modulator is enabled).
;
; Note: If the clock modulator is enabled,  the wait states  of the  internal flash wait 
;       states  must  be  adapted  to  maximum frequency.  Please check the  wait states 
;       settings.
;
; Note: This feature  is not supported by every device,  e.g. MB91461.  Please check the 
;       data sheet.
;
;=========================================================================================
; 4.8  External Bus Interface
;
;      The rest of the configuration is only applicable for devices with an external bus 
;      interface.
;
;      If the device does not offer an external bus interface,  the configuration can be 
;      stoped at this point.
;
;=========================================================================================
;
#set    EXTBUS          DEFAULT                 ; <<< Ext. Bus on/off
;
;                       ON      - The ext. bus interface is enabled and is configured as
;                                 set below. 
;                             
;                       OFF     - The ext. bus interface is  diabled.  The port function 
;                                 registers  are set to  general I/O.  The registers  of 
;                                 ext. bus interface will not be touched by the start-up 
;                                 file.  
;                                 Be aware, that the device  might be conifgured in ext.
;                                 bus mode by default after reset.
;
;                       DEFAULT - Neither the register nor the respective  port function
;                                 registers are touched by the start-up file.
;                                 Be aware, that the device  might be conifgured in ext. 
;                                 bus mode by default after reset.
;
;
; Note: This feature is not supported by every device. Please check the data sheet.  The 
;       following devices for example do not offer an external bus interface:  MB91464A, 
;       MB91467C, MB91465K, MB91463N, MB91465X.
;
;=========================================================================================
; 4.8.1  Select Chipselect (Only EXTBUS == ON)
;=========================================================================================
;
#set    CS0             OFF                     ; <<< select CS (ON/OFF)
#set    CS1             OFF                     ; <<< select CS (ON/OFF)
#set    CS2             OFF                     ; <<< select CS (ON/OFF)
#set    CS3             OFF                     ; <<< select CS (ON/OFF)
#set    CS4             OFF                     ; <<< select CS (ON/OFF)
#set    CS5             OFF                     ; <<< select CS (ON/OFF)
#set    CS6             OFF                     ; <<< select CS (ON/OFF)
#set    CS7             OFF                     ; <<< select CS (ON/OFF)
#set    SDRAM           OFF                     ; <<< select if a SDRAM is connected 
;
;
#set    ENACSX          B'00000000              ; <<< set CS, ENACSX
;                         ||||||||
;                         ||||||||__ CS0 bit, enable/disable CS0 (1/0)
;                         |||||||___ CS1 bit, enable/disable CS1 (1/0)
;                         ||||||____ CS2 bit, enable/disable CS2 (1/0)
;                         |||||_____ CS3 bit, enable/disable CS3 (1/0)
;                         ||||______ CS4 bit, enable/disable CS4 (1/0)
;                         |||_______ CS5 bit, enable/disable CS5 (1/0) 
;                         ||________ CS6 bit, enable/disable CS6 (1/0)
;                         |_________ CS7 bit, enable/disable CS7 (1/0)
;
; Note: If the SWB Monitor Debugger is used,  set the CS1 (external RAM only) or CS0 and 
;       CS 1 (external RAM and flash) to off.
;
; Note: Not all Chipselects  are supported by  the different devices.  Please check  the 
;       data sheet.
;
;=========================================================================================
; 4.8.2  Set memory addressing for Chipselects (only EXTBUS == ON)
;=========================================================================================
;
#set    AREASEL0        0x0000                  ; <<< set start add. for CS0, ASR0  
#set    AREASEL1        0x0000                  ; <<< set start add. for CS1, ASR1           
#set    AREASEL2        0x0000                  ; <<< set start add. for CS2, ASR2 
#set    AREASEL3        0x0000                  ; <<< set start add. for CS3, ASR3 
#set    AREASEL4        0x0000                  ; <<< set start add. for CS4, ASR4 
#set    AREASEL5        0x0000                  ; <<< set start add. for CS5, ASR5 
#set    AREASEL6        0x0000                  ; <<< set start add. for CS6, ASR6 
#set    AREASEL7        0x0000                  ; <<< set start add. for CS7, ASR7 
;
; Configure the starting address of each used Chipselect. Chipselects which are not used
; (not set to ON in "Select Chipselect") need not be set (setting ignored).
;
; NOTE: Just  the upper 16-bit  of the start address must be set,  e.g. when using start 
;       address 0x00080000 set 0x0008.
;
;=========================================================================================
; 4.8.3  Configure Chipselect Area (only EXTBUS == ON)
;=========================================================================================
;
#set    CONFIGCS0       B'0000000000000000      ; <<< Config. CS0, ACR0
#set    CONFIGCS1       B'0000000000000000      ; <<< Config. CS1, ACR1 
#set    CONFIGCS2       B'0000000000000000      ; <<< Config. CS2, ACR2 
#set    CONFIGCS3       B'0000000000000000      ; <<< Config. CS3, ACR3 
#set    CONFIGCS4       B'0000000000000000      ; <<< Config. CS4, ACR4  
#set    CONFIGCS5       B'0000000000000000      ; <<< Config. CS5, ACR5  
#set    CONFIGCS6       B'0000000000000000      ; <<< Config. CS6, ACR6  
#set    CONFIGCS7       B'0000000000000000      ; <<< Config. CS7, ACR7  
;                         ||||||||||||||||
;                         ||||||||||||||||__ TYP0 bit, TYP0-4 bits select access type
;                         |||||||||||||||___ TYP1 bit
;                         ||||||||||||||____ TYP2 bit
;                         |||||||||||||_____ TYP3 bit
;                         ||||||||||||______ LEND bit, select little '1' or big endian '0'
;                         |||||||||||_______ WREN bit, en-/disable (1/0) Write access
;                         ||||||||||________ PFEN bit, en-/disable (1/0) pre-fetch
;                         |||||||||_________ SREN bit, en-/disable (1/0) share of BRQ & BGRNTX
;                         ||||||||__________ BST0 bit, BSTx bits select burst size
;                         |||||||___________ BST1 bit
;                         ||||||____________ DBW0 bit, DBWx select data bus width
;                         |||||_____________ DBW1 bit
;                         ||||______________ ASZ0 bit, ASZx bits select address size of CS
;                         |||_______________ ASZ1 bit
;                         ||________________ ASZ2 bit
;                         |_________________ ASZ3 bit
;
; Bit description:
;
; TYP3 TYP2 TYP1 TYP0  : Select access type of each CS
; 0    0    X    X     : Normal access (asynchronous SRAM, I/O, 
;                        single/page/busrt-ROM/FLASH) 
; 0    1    X    X     : Address/data multiplexed (8bit / 16bit bus width only)
; 0    X    X    0     : WAIT insertion by RDY disabled
; 0    X    X    1     : WAIT insertion by RDY enabled
; 0    X    0    X     : The WR0X pin to the WR3X pin are used as write strobes 
;                        (WRX is fixed at H-Level)
; 0    X    1    X     : The WRX pin is used as write strobe 
; 1    0    0    0     : Memory type A: SDRAM/FCRAM (Auto pre-charge used)  
; 1    0    0    1     : Memory type B: FCRAM (Auto pre-charge used)  
; 1    0    1    0     : setting not allowed
; 1    0    1    1     : setting not allowed
; 1    1    0    0     : setting not allowed
; 1    1    0    1     : setting not allowed
; 1    1    1    0     : setting not allowed
; 1    1    1    1     : mask area setting
;
;               LEND   : select BYTE ordering 
;                0     : Big endian
;                1     : Little endian
;
;               WREN   : enable or disable write access 
;                0     : disabled 
;                1     : enabled,    
;
;               PFEN   : Enable or disable the pre-fetch
;                0     : disabled 
;                1     : enabled,    
;
;               SREN   : Enable or disable the sharing of BRQ and BGRNTX 
;                0     : disabled 
;                1     : enabled (CSx pin High-Z)
;
;          BST1 BST0   : set burst size of chip select area
;            0   0     : 1 burst (single access)
;            0   1     : 2 bursts (Address boundary 1 bit) 
;            1   0     : 4 bursts (Address boundary 2 bit)
;            1   1     : 8 bursts (Address boundary 3 bit)
;
;          DBW1 DBW0   : Set data bus width
;            0   0     : 8-bit (BYTE access) 
;            0   1     : 16-bit (HALF-WORD access) 
;            1   0     : 32-bit (WORD access) 
;            1   1     : Reserved  
;
; ASZ3 ASZ2 ASZ1 ASZ0  :  Select memory size of each chipselect 
; 0    0    0    0     : 64 Kbyte  (0x01.0000 bytes; use ASR A[31:16] bits) 
; 0    0    0    1     : 128 Kbyte (0x02.0000 bytes; use ASR A[31:17] bits)
; 0    0    1    0     : 256 Kbyte (0x04.0000 bytes; use ASR A[31:18] bits)
; 0    0    1    1     : 512 Kbyte (0x08.0000 bytes; use ASR A[31:19] bits)
; 0    1    0    0     : 1 Mbyte   (0x10.0000 bytes; use ASR A[31:20] bits)
; 0    1    0    1     : 2 Mbyte   (0x20.0000 bytes; use ASR A[31:21] bits)
; 0    1    1    0     : 4 Mbyte   (0x40.0000 bytes; use ASR A[31:22] bits)
; 0    1    1    1     : 8 Mbyte   (0x80.0000 bytes; use ASR A[31:23] bits)
; 1    0    0    0     : 16 Mbyte  (0x100.0000 bytes; use ASR A[31:24] bits)
; 1    0    0    1     : 32 Mbyte  (0x200.0000 bytes; use ASR A[31:25] bits)
; 1    0    1    0     : 64 Mbyte  (0x400.0000 bytes; use ASR A[31:26] bits)
; 1    0    1    1     : 128 Mbyte (0x800.0000 bytes; use ASR A[31:27] bits)
; 1    1    0    0     : 256 Mbyte (0x1000.0000 bytes; use ASR A[31:28] bits)
; 1    1    0    1     : 512 Mbyte (0x2000.0000 bytes; use ASR A[31:29] bits)
; 1    1    1    0     : 1024 Mbyte(0x4000.0000 bytes; use ASR A[31:30] bits)
; 1    1    1    1     : 2048 Mbyte(0x8000.0000 bytes; use ASR A[31] bit)
;
;=========================================================================================
; 4.8.4  Set Wait cycles for Chipselects for ordinary businterface (only EXTBUS == ON)
;=========================================================================================
;
; Ordinary bus interface (w/o SDRAM and FRAM) (ACRx_Type = 0xxx)
;
#set    WAITREG0        B'0000000000000000      ; <<< CS0 Waitstates, AWR0  
#set    WAITREG1        B'0000000000000000      ; <<< CS1 Waitstates, AWR1  
#set    WAITREG2        B'0000000000000000      ; <<< CS2 Waitstates, AWR2 
#set    WAITREG3        B'0000000000000000      ; <<< CS3 Waitstates, AWR3 
#set    WAITREG4        B'0000000000000000      ; <<< CS4 Waitstates, AWR4 
#set    WAITREG5        B'0000000000000000      ; <<< CS5 Waitstates, AWR5 
;                         ||||||||||||||||
;                         ||||||||||||||||__ W00 bit, RDY/WRY-> CSX hold cycle
;                         |||||||||||||||___ W01 bit, CSX->RDX/WRX setup extension cycle
;                         ||||||||||||||____ W02 bit, Address -> CSX Delay selection
;                         |||||||||||||_____ W03 bit, WR0X to WR3X/WRX outout timing 
;                         ||||||||||||______ W04 bit, W04/W05 Write recovery cycle
;                         |||||||||||_______ W05 bit  
;                         ||||||||||________ W06 bit, W06/07 Read -> Write idle cycle 
;                         |||||||||_________ W07 bit          selection
;                         ||||||||__________ W08 bit, W08-W11 Intra-page access cycle 
;                         |||||||___________ W09 bit          select (0-15 cycles)
;                         ||||||____________ W10 bit 
;                         |||||_____________ W11 bit
;                         ||||______________ W12 bit, W12-W15 First access wait cycle  
;                         |||_______________ W13 bit          select (0-15 cycles)
;                         ||________________ W14 bit
;                         |_________________ W15 bit
;
;
; SDRAM and FRAM bus interface (ACRx_Type = 100x) 
;
#set    WAITREG6        B'0000000000000000      ; <<< CS6 Waitstates, AWR6 
#set    WAITREG7        B'0000000000000000      ; <<< CS7 Waitstates, AWR7
;                         ||||||||||||||||
;                         ||||||||||||||||__ W00 bit, W0-W1 RAS precharge cycles
;                         |||||||||||||||___ W01 bit
;                         ||||||||||||||____ W02 bit, W2-W3 RAS active Time
;                         |||||||||||||_____ W03 bit
;                         ||||||||||||______ W04 bit, W4-W5 Write recovery cycle
;                         |||||||||||_______ W05 bit 
;                         ||||||||||________ W06 bit, W6-W7 Read->Write idle cycle
;                         |||||||||_________ W07 bit
;                         ||||||||__________ W08 bit, W8-W10 CAS latency 
;                         |||||||___________ W09 bit
;                         ||||||____________ W10 bit 
;                         |||||_____________ W11 bit, reserved
;                         ||||______________ W12 bit, W12-W16 RAS-CAS delay 
;                         |||_______________ W13 bit
;                         ||________________ W14 bit  
;                         |_________________ W15 bit, reserved
;
;
; The bit meaning depends on the configured bus interface type. The bus interface can be 
; configured for different memory types. Depending on the memory type, the wait register 
; bits have a differnt meaning.  CS0-5 should  be configurable as ordinary bus interface 
; (w/o SDRAM and FRAM)  and CS6-7 should be configurable as  SDRAM and FRAM.  It is also 
; possible and for some devices neccessary to configure  other two chip selects as SDRAM 
; or FRAM interface. In such a case be aware of the bit meanings.
;
;
; Ordinary bus interface (w/o SDRAM and FRAM) (ACRx_Type = 0xxx)
; --------------------------------------------------------------
;
; Bit description:
;
;                W00   : RDY/WRX -> CSX hold extension cycle
;                0     : 0 cycle
;                1     : 1 cycle
;
;                W01   : CSX -> RDX/WRX setup extention cycle
;                0     : 0 cycle
;                1     : 1 cycle
;
;                W02   : Address -> CSX Delay selection
;                0     : no delay selected
;                1     : delay selected
;
;                W03   : WR0X to WR3X/WRX outout timing selection
;                0     : MCLK synchronous write output enable (ASX=L)
;                1     : Asynchronous write strobe output (norma operation)
;
;           W05  W04   : select Write recovery cycle
;           0    0     : 0 cycle
;           0    1     : 1 cycle
;           1    0     : 2 cycles
;           1    1     : 3 cycles
;
;           W07  W06   : Read -> Write idle cycle selection
;           0    0     : 0 cycle
;           0    1     : 1 cycle
;           1    0     : 2 cycles
;           1    1     : 3 cycles
; 
; W11  W10  W09  W08   :  Intra-page access cycle select (0-15 cycles)
; 0    0    0    0     :  0 Wait state
; 0    0    0    1     :  1 Auto-wait cycle
; 0    0    1    0     :  2 Auto-wait cycle
; ....
; 1    1    1    1     :  15 Auto wait cycles
;
; W15  W14  W13  W12   :  First access wait cycle can be set (0-15 cycles)
; 0    0    0    0     :  0 Wait state
; 0    0    0    1     :  1 Auto-wait cycle
; 0    0    1    0     :  2 Auto-wait cycle
; ....
; 1    1    1    1     :  15 Auto wait cycles
;  
;
;
; SDRAM and FRAM bus interface (ACRx_Type = 100x)
; -----------------------------------------------
;
; Bit description:
;
;           W01  W00   : RAS precharge cycles.
;           0    0     : 1 cycle
;           0    1     : 2 cycles
;           1    0     : 5 cycles
;           1    1     : 6 cycles
;
;           W03  W02   : RAS active Time
;           0    0     : 1 cycle
;           0    1     : 2 cycles
;           1    0     : 5 cycles
;           1    1     : 6 cycles
;
;           W05  W04   : set Write recovery cycle (1 - 4 cycles)
;           0    0     : Prohibited
;           0    1     : 2 cycles
;           1    0     : 3 cycles
;           1    1     : 4 cycles
;
;           W07  W06   : set Read -> Write idle Cycle (1 - 4 cycles)
;           0    0     : 1 cycle
;           0    1     : 2 cycles
;           1    0     : 3 cycles
;           1    1     : 4 cycles
;
;      W10  W09  W08   : set CAS latency (1 - 8 cycles)
;      0    0    0     : 1 cycle
;      0    0    1     : 2 cycle
;      ...
;      1    1    1     : 8 cycle
;
;                W11   : RESERVED, ALWAYS WRITE 0 !
;
;      W14  W13  W12   : set RAS-CAS delay (1 - 8 cycles)
;      0    0    0     : 1 cycle
;      0    0    1     : 2 cycle
;      ...
;      1    1    1     : 8 cycle
;
;                W15   : RESERVED, ALWAYS WRITE 0 !
;

; The bit meaning depends on the configured bus interface type
;
;=========================================================================================
; 4.8.5  Configure Chipselects for SDRAM memory only (only EXTBUS == ON and SDRAM)
;=========================================================================================
;
#set    MEMCON           B'00000111             ; <<< set special SDRAM register, MCRA
;                          ||||||||
;                          ||||||||__ ABS0 bit, set max. active banks (ABS1,0)
;                          |||||||___ ABS1 bit
;                          ||||||____ BANK bit, set number of banks connected to CS
;                          |||||_____ WBST bit, Write burst enable/disable
;                          ||||______ PSZ0 bit, Set page size (PSZ2-0)
;                          |||_______ PSZ1 bit 
;                          ||________ PSZ2 bit
;                          |_________ reserved, always write 0 
;
; When connecting  SDRAM/FCRAM TYP3-0=1000  in ACRx register the following register must  
; be setup.
;
; Bit description:
;
;           ABS1  ABS0 : Set maximum number of bank, active at same time
;            0     0   : 1 bank
;            0     1   : 2 banks
;            1     0   : 3 banks
;            1     1   : 4 banks
;
;                 BANK : Set number of connected SDRAM banks
;                  0   : 2 banks
;                  1   : 4 banks
;
;                 WBST : Write burst enable
;                  0   : Single Write
;                  1   : Busrt Write
;
;      PSZ2  PSZ1  PS0 : Select page size of connected memory
;      0     0     0   : 8-bit column address = A0 to A7 
;      0     0     1   : 9-bit column address = A0 to A8 
;      0     1     0   : 10-bit column address = A0 to A9 
;      0     1     1   : 11-bit column address = A0 to A9, A11 
;      1     X     X   : setting disabled
;
;
;=========================================================================================
; 4.8.6  Referesh Control Register RCR (only EXTBUS == ON and SDRAM)
;=========================================================================================
;
#set    REFRESH         B'1110001001000111      ; <<< set Refresh Control Register, RCR
;                         ||||||||||||||||
;                         ||||||||||||||||__ TRC0 bit, set refresh cycle (TRC2-0)
;                         |||||||||||||||___ TRC1 bit
;                         ||||||||||||||____ TRC2 bit
;                         |||||||||||||_____ PON bit, set power-on control
;                         ||||||||||||______ RFC0 bit, set refresh count (RFC2-0)
;                         |||||||||||_______ RFC1 bit 
;                         ||||||||||________ RFC2 bit 
;                         |||||||||_________ BRST bit, set burst refresh control 
;                         ||||||||__________ RFINT0 bit, set auto refresh interval
;                         |||||||___________ RFINT1 bit, (RFINT5-0)
;                         ||||||____________ RFINT2 bit
;                         |||||_____________ RFINT3 bit
;                         ||||______________ RFINT4 bit
;                         |||_______________ RFINT5 bit
;                         ||________________ RRLD bit, counter refresh strat control
;                         |_________________ SELF bit, self refresh control
;
;
; This register sets various SDRAM refresh controls.  When SDRAM control is not set  for 
; any area, the setting of this register is meaningless,  but do not change the register 
; value  at  initial   state.   When  a  read is  performed   using  a read-modify-write 
; instruction, 0 always returns from the SELF, RRLD, and PON bits.
;
; Bit description:
;
;
;    TRC2  TRC1  TRC0  : Refresh Cycle 
;      0     0     0   : 4
;      0     0     1   : 5
;      0     1     0   : 6
;      0     1     1   : 7
;      1     0     0   : 8
;      1     0     1   : 9
;      1     1     0   : 10
;      1     1     1   : 11
;
;                 PON  : Power-on control
;                  0   : disabled
;                  1   : power-on sequence started
;
;     RFC2  RFC1  RFC0 : Refresh Count
;      0     0     0   : 256
;      0     0     1   : 512
;      0     1     0   : 1024
;      0     1     1   : 2048
;      1     0     0   : 4096
;      1     0     1   : 8192
;      1     1     0   : Setting disabled
;      1     1     1   : Refresh disabled
;
;                 BRST : Burst refresh control
;                  0   : Decentralised refresh 
;                  1   : burst refresh
; 
;           RFINT[5-0] : auto refresh interval
;
;                 RRLD : Refresh counter Activation Control
;                  0   : Disabled,  
;                  1   : Autorefresh performed once, then value of RFINT reloaded
;
;                 SELF : Self refresh control
;                  0   : auto refresh or power down
;                  1   : Transitions to self-refresch mode
;
; NOTE: PON bit is set after the above setting. Do not set PON bit to 1 in the 
;       above setting. Otherwise the settings are not correct set.
;
;=========================================================================================
; 4.8.7  Terminal and Timing Control Register (only EXTBUS == ON)
;=========================================================================================
;
#set    TIMECONTR        B'00000000             ; <<< set TCR register, TCR
;                          ||||||||
;                          ||||||||__ RDW0 bit, set wait cycle reduction (RDW0,1)
;                          |||||||___ RDW1 bit
;                          ||||||____ OHT0 bit, set output hold delay (OHT1,0)
;                          |||||_____ OHT1 bit
;                          ||||______ reserved, always write 0 
;                          |||_______ PCLR bit, prefetch buffer clear 
;                          ||________ PSUS bit, prefetch suspend
;                          |_________ BREN bit, BRQ input enable 
;
; This register controls the general functions  of the external bus interface controller 
; such as the common-pin function setting and timing control.
;
; Bit description:
;
;          RDW1  RDW0  : Wait cycle reduction 
;            0     0   : Normal Wait (AWR0 - 7 setting)
;            0     1   : 1/2 of AWR0 - 7 setting value
;            1     0   : 1/4 of AWR0 - 7 setting value
;            1     1   : 1/8 of AWR0 - 7 setting value
;
;          OHT1  OHT0  : Output hold selection bit
;            0     0   : Output performed at falling edge of SYSCLK/MCLK
;            0     1   : Output performed about 3ns after falling edge of SYSCLK/MCLK
;            1     0   : Output performed about 4ns after falling edge of SYSCLK/MCLK
;            1     1   : Output performed about 5ns after falling edge of SYSCLK/MCLK
;
;                PCLR  : Prefetch buffer all clear
;                  0   : normal state
;                  1   : Prefetch buffer cleared
;
;                PSUS  : prefetch suspension bit 
;                  0   : Prefetch enabled
;                  1   : Prefetch disabled
;
;                BREN  : BRQ input enable
;                  0   : disabled, 
;                  1   : enabled, Bus sharing of BRQ/BGRNTX performed
;
; Note: This function is used to prevent an  excessive access cycle wait while operating 
;       at  a low-speed  clock  (such as  while  base  clock  operating at low  speed or 
;       high frequency division rate for external bus clock).
;
;=========================================================================================
; 4.8.8  Enable/Disable I-CACHE (only EXTBUS == ON)
;=========================================================================================
;
#set    C1024           1                       ; CACHE Size: 1024 BYTE
#set    C2048           2                       ; CACHE Size: 2048 BYTE
#set    C4096           3                       ; CACHE Size: 4096 BYTE
;
;
#set    CACHE           OFF                     ; <<< Select use of cache 
#set    CACHE_SIZE      C4096                   ; <<< Select size of cache, ISIZE
;
; It is possible  to use cache  functionality on  the I-Bus on  several devices.  Please 
; check the  corresponidng data sheet  if this feature is  available on a certain device 
; and for the size of the cache. This is the general cache configuration. It is possible 
; to configure for each CS area, if the cache should be used.
;
; Note: This feature is not supported by every device. Please check the data  sheet. The 
;       feature is for example supported by MB91461R, MB91469G.
;
;=========================================================================================
; 4.8.9  Enable CACHE for chipselect (only EXTBUS == ON)
;=========================================================================================
;
#set    CHEENA          B'11111111              ; <<< en-/disable cache, CHER
;                         ||||||||
;                         ||||||||__ CHE0 bit, CS0 area
;                         |||||||___ CHE1 bit, CS1 area
;                         ||||||____ CHE2 bit, CS2 area
;                         |||||_____ CHE3 bit, CS3 area
;                         ||||______ CHE4 bit, CS4 area 
;                         |||_______ CHE5 bit, CS5 area 
;                         ||________ CHE6 bit, CS6 area
;                         |_________ CHE7 bit, CS7 area 
;
; Additional to  the general cache enable setting,  select which CS  area should be used 
; with cache functionality.
;
; Note: Not all  Chipselects are  supported by the  different devices.  Please check the 
;       data sheet.
;
; Note: This feature is not supported by every device.  Please check the data sheet. The 
;       Feature is supported by MB91461R, MB91469G.
;
;=========================================================================================
; 4.8.10  Select External bus mode (Data lines) (only EXTBUS == ON)
;=========================================================================================
;
#set    PFUNC0          B'11111111              ;<<< Data lines or GIO, PFR00
;                         ||||||||
;                         ||||||||__ D24 / P00_0
;                         |||||||___ D25 / P00_1
;                         ||||||____ D26 / P00_2
;                         |||||_____ D27 / P00_3
;                         ||||______ D28 / P00_4
;                         |||_______ D29 / P00_5
;                         ||________ D30 / P00_6
;                         |_________ D31 / P00_7
;
#set    PFUNC1          B'11111111              ;<<< Data lines or GIO, PFR01
;                         ||||||||
;                         ||||||||__ D16 / P01_0
;                         |||||||___ D17 / P01_1
;                         ||||||____ D18 / P01_2
;                         |||||_____ D19 / P01_3
;                         ||||______ D20 / P01_4
;                         |||_______ D21 / P01_5
;                         ||________ D22 / P01_6
;                         |_________ D23 / P01_7
;
#set    PFUNC2          B'11111111              ;<<< Data lines or GIO, PFR02
;                         ||||||||
;                         ||||||||__ D8 / P02_0
;                         |||||||___ D9 / P02_1
;                         ||||||____ D10 / P02_2
;                         |||||_____ D11 / P02_3
;                         ||||______ D12 / P02_4
;                         |||_______ D13 / P02_5
;                         ||________ D14 / P02_6
;                         |_________ D15 / P02_7
;
#set    PFUNC3          B'11111111              ;<<< Data lines or GIO, PFR03
;                         ||||||||
;                         ||||||||__ D0 / P03_0
;                         |||||||___ D1 / P03_1
;                         ||||||____ D2 / P03_2
;                         |||||_____ D3 / P03_3
;                         ||||______ D4 / P03_4
;                         |||_______ D5 / P03_5
;                         ||________ D6 / P03_6
;                         |_________ D7 / P03_7
;
; Select if the ports are set to
;                  1   : External bus mode, I/O for data lines or
;                  0   : General I/O port (GIO)
;
; Note: Not all data-lines are supported by the different devices. Please check the data
;       sheet.
;
;=========================================================================================
; 4.8.11  Select External bus mode (Address lines) (only EXTBUS == ON)
;=========================================================================================
;
#set    PFUNC4          B'11111111              ;<<< Address lines or GIO, PFR04
;                         ||||||||
;                         ||||||||__ A24 / P04_0
;                         |||||||___ A25 / P04_1
;                         ||||||____ A26 / P04_2
;                         |||||_____ A27 / P04_3
;                         ||||______ A28 / P04_4
;                         |||_______ A29 / P04_5
;                         ||________ A30 / P04_6
;                         |_________ A31 / P04_7
;
#set    PFUNC5          B'11111111              ;<<< Address lines or GIO, PFR05
;                         ||||||||
;                         ||||||||__ A16 / P05_0
;                         |||||||___ A17 / P05_1
;                         ||||||____ A18 / P05_2
;                         |||||_____ A19 / P05_3
;                         ||||______ A20 / P05_4
;                         |||_______ A21 / P05_5
;                         ||________ A22 / P05_6
;                         |_________ A23 / P05_7
;
#set    PFUNC6          B'11111111              ;<<< Address lines or GIO, PFR06
;                         ||||||||
;                         ||||||||__ A8 / P06_0
;                         |||||||___ A9 / P06_1
;                         ||||||____ A10 / P06_2
;                         |||||_____ A11 / P06_3
;                         ||||______ A12 / P06_4
;                         |||_______ A13 / P06_5
;                         ||________ A14 / P06_6
;                         |_________ A15 / P06_7
;
#set    PFUNC7          B'11111111              ;<<< Address lines or GIO, PFR07
;                         ||||||||
;                         ||||||||__ A0 / P07_0
;                         |||||||___ A1 / P07_1
;                         ||||||____ A2 / P07_2
;                         |||||_____ A3 / P07_3
;                         ||||______ A4 / P07_4
;                         |||_______ A5 / P07_5
;                         ||________ A6 / P07_6
;                         |_________ A7 / P07_7
;
; Select if the ports are set to
;                  1   : External bus mode, I/O for address lines or
;                  0   : General I/O port (GIO)
;
; Note: Not all address-lines are supported  by the different devices.  Please check the
;       data sheet.
;
;=========================================================================================
; 4.8.12  Select External bus mode (Control signals) (only EXTBUS == ON)
;=========================================================================================
;
#set    PFUNC8          B'11111111              ;<<< Control signals or GIO, PFR08
;                         ||||||||
;                         ||||||||__ WRX0 / P08_0
;                         |||||||___ WRX1 / P08_1
;                         ||||||____ WRX2 / P08_2
;                         |||||_____ WRX3 / P08_3
;                         ||||______ RDX / P08_4
;                         |||_______ BGRNTX / P08_5
;                         ||________ BRQ / P08_6
;                         |_________ RDY / P08_7
;
#set    PFUNC9          B'11111111              ;<<< Control signals or GIO, PFR09
;                         ||||||||
;                         ||||||||__ CSX0 / P09_0
;                         |||||||___ CSX1 / P09_1
;                         ||||||____ CSX2 / P09_2
;                         |||||_____ CSX3 / P09_3
;                         ||||______ CSX4 / P09_4
;                         |||_______ CSX5 / P09_5
;                         ||________ CSX6 / P09_6
;                         |_________ CSX7 / P09_7
;
#set    PFUNC10         B'01011111              ;<<< Control signals or GIO, PFR10
;                         ||||||||
;                         ||||||||__ SYSCLK or !SYSCLK / P10_0 
;                         |||||||___ ASX / P10_1 
;                         ||||||____ BAAX / P10_2 
;                         |||||_____ WEX / P10_3 
;                         ||||______ MCLKO or !MCLKO / P10_4 
;                         |||_______ MCLKI or !MCLKI/ P10_5 
;                         ||________ MCLKE / P10_6
;                         |_________ - 
;
#set    EPFUNC10        B'00000000              ;<<< Control signals or GIO, EPFR10
;                         ||||||||
;                         ||||||||__ 0:SYSCLK / 1:!SYSCLK
;                         |||||||___ - 
;                         ||||||____ -
;                         |||||_____ -
;                         ||||______ 0:MCLKO / 1:!MCLKO
;                         |||_______ 0:MCLKI / 1:!MCLKI
;                         ||________ 0:MCLKI / 1:!MCLKI
;                         |_________ -
;
;
; Select if the ports are set to
;                  1   : External bus mode, I/O for control lines or
;                  0   : General I/O port (GIO)
;
; Note: Not all control-lines are supported  by the different devices.  Please check the
;       data sheet.
;
;=========================================================================================
; 5  Definition of Configurations
;=========================================================================================
;
#set    NOCLOCK         0                       ; do not touch CKSCR register
#set    MAINCLOCK       1                       ; select main clock 
;                                               ; MB91461R : 1/4 of oscillation input
;                                               ; Others:    1/2 of oscillation input
#set    MAINPLLCLOCK    2                       ; select main clock with PLL
#set    SUBCLOCK        3                       ; select subclock (if available)
;
#set    PSCLOCK_CLKB    0x00                    ; select core clock (initial)
#set    PSCLOCK_PLL     0x10                    ; select PLL output (x)
#set    PSCLOCK_MAIN    0x30                    ; select Main Oscillation
;
;=========================================================================================
; 5.1  CLOCKSPEED == CLOCK_USER <<<
;=========================================================================================
; Must be configured only in the case of CLOCKSPEED is set to CLOCK_USER. Please see the 
; corresponding application note.
;
#if (CLOCKSPEED == CLOCK_USER )
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; <<< Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; <<< Subclock: ON/OFF
  #set  PLLSPEED        0x010F                  ; <<< 0x48Ch, 0x48Dh: PLLDIVM/N ; 64 MHz
  #set  DIV_G           0x0F                    ; <<< 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x0F                    ; <<< 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; <<< 0x486h: DIV0R_B;   => /1  ; 64 MHz       
  #set  PERCLOCK        0x03                    ; <<< 0x486h: DIV0R_P;   => /4  ; 16 MHz 
  #set  EXTBUSCLOCK     0x01                    ; <<< 0x487h: DIV1R_T;   => /2  ; 32 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; <<< 0x4C0h: CANPRE;    => PLLx;128 MHz
  #set  PSDVC           0x07                    ; <<< 0x4C0h: CANPRE_DVC;=> /8  ; 16 MHz
  #set  CANCLOCK        0x00                    ; <<< 0x4C1h: CANCKD;    
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; <<< 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; <<< 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; <<< 0x7002h: FCHCR;
  #set  FLASHREADT      0xC413                  ; <<< 0x7004h: FMWT;
  #set  FLASHMWT2       0x10                    ; <<< 0x7006h: FMWT2;
#endif  
;
;=========================================================================================
; 5.2  CLOCKSPEED == NO_CLOCK
;=========================================================================================
;
#if (CLOCKSPEED == NO_CLOCK )
    #set CLOCKSOURCE       NOCLOCK 
#endif      
;
;=========================================================================================
; 5.2  CLOCKSPEED == SUB_32KHZ_CPU__32KHZ_PER_32KHZ_EXT_32KHZ_CAN__2MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == SUB_32KHZ_CPU__32KHZ_PER_32KHZ_EXT_32KHZ_CAN__2MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91463N) || (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     SUBCLOCK                ; Clocksource
  #set  ENABLE_SUBCLOCK ON                      ; Subclock: ON/OFF
  #set  PLLSPEED        0x010F                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;   n. a.
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x0F                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  32 KHz       
  #set  PERCLOCK        0x00                    ; 0x486h: DIV0R_P;    => /1    ;  32 KHz  
  #set  EXTBUSCLOCK     0x00                    ; 0x487h: DIV1R_T;    => /1    ;  32 KHz  
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_MAIN            ; 0x4C0h: CANPRE;     => MAIN  ;   4 MHz
  #set  PSDVC           0x01                    ; 0x4C0h: CANPRE_DVC; => /2    ;   2 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC100                  ; 0x7004h: FMWT; 
  #set  FLASHMWT2       0x00                    ; 0x7006h: FMWT2;
#endif 
;
;=========================================================================================
; 5.3  CLOCKSPEED == MAIN__4MHZ_CPU___2MHZ_PER__1MHZ_EXT__1MHZ_CAN__2MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == MAIN_4MHZ_CPU___2MHZ_PER__1MHZ_EXT__1MHZ_CAN__2MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINCLOCK               ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x010F                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;   n. a.
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x0F                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;   2 MHz       
  #set  PERCLOCK        0x01                    ; 0x486h: DIV0R_P;    => /2    ;   1 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;   1 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_MAIN            ; 0x4C0h: CANPRE;     => PLLx  ;   4 MHz
  #set  PSDVC           0x01                    ; 0x4C0h: CANPRE_DVC; => /2    ;   2 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC100                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x00                    ; 0x7006h: FMWT2;  
#endif           
;
;=========================================================================================
; 5.4  CLOCKSPEED == PLL_4MHZ__CPU__48MHZ_PER_16MHZ_EXT_24MHZ_CAN_16MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU__48MHZ_PER_16MHZ_EXT_24MHZ_CAN_16MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x010B                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  48 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x0B                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  48 MHz       
  #set  PERCLOCK        0x02                    ; 0x486h: DIV0R_P;    => /3    ;  16 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  24 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ;  96 MHz
  #set  PSDVC           0x05                    ; 0x4C0h: CANPRE_DVC; => /6    ;  16 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #if (DEVICE == MB91469G) 
   #set REGULATORSEL    0x36                    ; 0x4CEh: REGSEL;
  #else
   #set REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #endif    
  #set REGULATORCTRL    0x00                    ; 0x4CFh: REGCTR;    
   ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC201                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x00                    ; 0x7006h: FMWT2;   
#endif        
;
;=========================================================================================
; 5.5  CLOCKSPEED == PLL_4MHZ__CPU__64MHZ_PER_16MHZ_EXT_32MHZ_CAN_16MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU__64MHZ_PER_16MHZ_EXT_32MHZ_CAN_16MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x010F                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  64 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x0F                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  64 MHz       
  #set  PERCLOCK        0x03                    ; 0x486h: DIV0R_P;    => /4    ;  16 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  32 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 128 MHz
  #set  PSDVC           0x07                    ; 0x4C0h: CANPRE_DVC; => /8    ;  16 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC413                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x10                    ; 0x7006h: FMWT2;
#endif  
;
;=========================================================================================
; 5.6  CLOCKSPEED == PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_27MHZ_CAN_20MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_27MHZ_CAN_20MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0113                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  80 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x13                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  80 MHz       
  #set  PERCLOCK        0x03                    ; 0x486h: DIV0R_P;    => /4    ;  20 MHz 
  #set  EXTBUSCLOCK     0x02                    ; 0x487h: DIV1R_T;    => /3    ;  27 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 160 MHz
  #set  PSDVC           0x07                    ; 0x4C0h: CANPRE_DVC; => /8    ;   8 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC413                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x10                    ; 0x7006h: FMWT2;
#endif      
;
;=========================================================================================
; 5.7  CLOCKSPEED == PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_40MHZ_CAN_20MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU__80MHZ_PER_20MHZ_EXT_40MHZ_CAN_20MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91461R) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0113                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  80 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x13                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  80 MHz       
  #set  PERCLOCK        0x03                    ; 0x486h: DIV0R_P;    => /4    ;  20 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  40 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 160 MHz
  #set  PSDVC           0x07                    ; 0x4C0h: CANPRE_DVC; => /8    ;   8 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #set  REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC413                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x10                    ; 0x7006h: FMWT2;
#endif      
;
;=========================================================================================
; 5.8  CLOCKSPEED == PLL_4MHZ__CPU__96MHZ_PER_16MHZ_EXT_48MHZ_CAN_16MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU__96MHZ_PER_16MHZ_EXT_48MHZ_CAN_16MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91464A) || (DEVICE == MB91465K) || (DEVICE == MB91463N) ||\
      (DEVICE == MB91461R) || (DEVICE == MB91467R)
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0117                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  96 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x17                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  64 MHz       
  #set  PERCLOCK        0x05                    ; 0x486h: DIV0R_P;    => /6    ;  16 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  32 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 192 MHz
  #set  PSDVC           0x0B                    ; 0x4C0h: CANPRE_DVC; => /12   ;  16 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #if (DEVICE == MB91469G) 
   #set REGULATORSEL    0x36                    ; 0x4CEh: REGSEL;
  #else
   #set REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #endif    
  #set REGULATORCTRL    0x00                    ; 0x4CFh: REGCTR;    
  ; Memory Controller
  #set FLASHCONTROL     0x032                   ; 0x7002h: FCHCR;
  #set FLASHREADT       0xC413                  ; 0x7004h: FMWT;
  #set FLASHMWT2        0x10                    ; 0x7006h: FMWT2;
#endif        
;
;=========================================================================================
; 5.9  CLOCKSPEED == PLL_4MHZ__CPU_100MHZ_PER_20MHZ_EXT_50MHZ_CAN_20MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_4MHZ__CPU_100MHZ_PER_20MHZ_EXT_50MHZ_CAN_20MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91464A) || (DEVICE == MB91465K) || (DEVICE == MB91463N) ||\
      (DEVICE == MB91461R) || (DEVICE == MB91467R) || (DEVICE == MB91467D)
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0118                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ; 100 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x17                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ; 100 MHz       
  #set  PERCLOCK        0x04                    ; 0x486h: DIV0R_P;    => /5    ;  20 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  50 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 200 MHz
  #set  PSDVC           0x09                    ; 0x4C0h: CANPRE_DVC; => /10   ;  20 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  #if (DEVICE == MB91469G) 
   #set REGULATORSEL    0x36                    ; 0x4CEh: REGSEL;
  #else
   #set REGULATORSEL    0x06                    ; 0x4CEh: REGSEL;
  #endif    
  #set  REGULATORCTRL   0x00                    ; 0x4CFh: REGCTR;    
  ; Memory Controller
  #set  FLASHCONTROL    0x032                   ; 0x7002h: FCHCR;
  #set  FLASHREADT      0xC413                  ; 0x7004h: FMWT;
  #set  FLASHMWT2       0x10                    ; 0x7006h: FMWT2;
#endif        
;
;=========================================================================================
; 5.10  CLOCKSPEED == PLL_10MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_10MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91464A) || (DEVICE == MB91467B) || (DEVICE == MB91467C) ||\
      (DEVICE == MB91467D) || (DEVICE == MB91469G) || (DEVICE == MB91465K) ||\
      (DEVICE == MB91463N) || (DEVICE == MB91467R) || (DEVICE == MB91465X) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0105                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ;  60 MHz
  #set  DIV_G           0x0B                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x1F                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  60 MHz       
  #set  PERCLOCK        0x02                    ; 0x486h: DIV0R_P;    => /3    ;  20 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  30 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 120 MHz
  #set  PSDVC           0x05                    ; 0x4C0h: CANPRE_DVC; => /6    ;  20 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  ; -
  ; Memory Controller
  ; -
#endif        
;
;=========================================================================================
; 5.11  CLOCKSPEED == PLL_20MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ 
;=========================================================================================
;
#if (CLOCKSPEED == PLL_20MHZ_CPU__60MHZ_PER_20MHZ_EXT_30MHZ_CAN_20MHZ )
;
; Start restriction; Maximum frequency
  #if (DEVICE == MB91464A) || (DEVICE == MB91467B) || (DEVICE == MB91467C) ||\
      (DEVICE == MB91467D) || (DEVICE == MB91469G) || (DEVICE == MB91465K) ||\
      (DEVICE == MB91463N) || (DEVICE == MB91467R) || (DEVICE == MB91465X) 
     #error: Frequency is not supported by this device.
  #endif 
; End restriction
;
  #set  CLOCKSOURCE     MAINPLLCLOCK            ; Clocksource
  #set  ENABLE_SUBCLOCK OFF                     ; Subclock: ON/OFF
  #set  PLLSPEED        0x0102                  ; 0x48Ch, 0x48Dh: PLLDIVM/N    ; 60 MHz
  #set  DIV_G           0x0F                    ; 0x48Eh: PLLDIVG; 
  #set  MUL_G           0x1F                    ; 0x48Fh: PLLMULG;     
  ; Clock Divider
  #set  CPUCLOCK        0x00                    ; 0x486h: DIV0R_B;    => /1    ;  60 MHz       
  #set  PERCLOCK        0x02                    ; 0x486h: DIV0R_P;    => /3    ;  20 MHz 
  #set  EXTBUSCLOCK     0x01                    ; 0x487h: DIV1R_T;    => /2    ;  30 MHz 
  ; CAN Clock
  #set  PSCLOCKSOURCE   PSCLOCK_PLL             ; 0x4C0h: CANPRE;     => PLLx  ; 120 MHz
  #set  PSDVC           0x05                    ; 0x4C0h: CANPRE_DVC; => /6    ;  20 MHz
  #set  CANCLOCK        0x00                    ; 0x4C1h: CANCKD; all CAN Clocks enabled
  ; Voltage Regulator 
  ; -
  ; Memory Controller
  ; -
#endif  
;      
;=========================================================================================
; 6  Section and Data Declaration
;=========================================================================================

        .export __start             
        .import _main
        .import _RAM_INIT
        .import _ROM_INIT
        
#if CLIBINIT == ON    
        .export __exit 
        .import _exit
        .import __stream_init
#endif

#if CPLUSPLUS == ON
        .export __abort
        .import ___call_dtors
        .import _atexit
#endif
;=========================================================================================
; 6.1  Define Stack Size
;=========================================================================================
 .SECTION  SSTACK, STACK, ALIGN=4
#if STACK_RESERVE == ON
        .EXPORT         __systemstack, __systemstack_top
 __systemstack:
        .RES.B          STACK_SYS_SIZE
 __systemstack_top: 
#endif
 
        .SECTION  USTACK, STACK, ALIGN=4
#if STACK_RESERVE == ON
         .EXPORT        __userstack, __userstack_top
 __userstack:
        .RES.B          STACK_USR_SIZE
 __userstack_top:
 
#endif
;=========================================================================================
; 6.2  Define Sections
;=========================================================================================
        .section        DATA,  data,  align=4
        .section        INIT,  data,  align=4
        .section        IRAM,  code,  align=4
        .section        CONST, const, align=4
        .section        INTVECT, const, align=4 
        
#if I_RAM 
        .import _RAM_IRAM
        .import _ROM_IRAM
#endif
                    
#if (DEVICE != MB91461R)
    #if (DEVICE == MB91469G)
        .section        SECURITY_VECTORS, code, locate = 0x248000
    #else 
        .section        SECURITY_VECTORS, code, locate = 0x148000
    #endif
    
    #if (BOOT_FLASH_SEC == OFF)        
        .data.w 0xFFFFFFFF
        .data.w 0xFFFFFFFF
        .data.w 0xFFFFFFFF
        .data.w 0xFFFFFFFF       
    #else
        .res.w          4
    #endif         
#endif     
   
#if CPLUSPLUS == ON
        .section        EXT_CTOR_DTOR, const, align=4  ; C++ constructors
#endif        
       
;-----------------------------------------------------------------------------------------
; MACRO Clear RC Watchdog
;-----------------------------------------------------------------------------------------
#macro  ClearRCwatchdog
        LDI             #0x4C7,R7               ; clear RC watchdog
        BANDL           #0x7,@R7
#endm
;-----------------------------------------------------------------------------------------
; MACRO WAIT_LOOP
;-----------------------------------------------------------------------------------------
#macro wait_loop loop_number
#local _wait64_loop
        LDI             #loop_number, R0
_wait64_loop:
        ADD             #-1, R0
        BNE             _wait64_loop
#endm
        .section        CODE, code, align=4
        .section        CODE_START, code, align=4


;=========================================================================================
; 7.  S T A R T 
;=========================================================================================
__start:                                        ; start point   
startnop: 
        NOP       
;   
        ANDCCR          #0xEF                   ; disable interrupts   
        STILM           #LOW_PRIOR              ; set interrupt level to low prior
        ClearRCwatchdog                         ; clear harware watchdog

;=========================================================================================
; 7.1  Initialise Stack Pointer and Table Base Register
;=========================================================================================
#if STACKUSE == SYSSTACK       
        ORCCR           #0x20
        LDI             #__userstack_top, SP    ; initialize SP
        ANDCCR          #0xDF
        LDI             #__systemstack_top, SP  ; initialize SP
#endif

#if STACKUSE == USRSTACK
        ANDCCR          #0xDF
        LDI             #__systemstack_top, SP  ; initialize SP
        ORCCR           #0x20
        LDI             #__userstack_top, SP    ; initialize SP
#endif

        LDI             #INTVECT, R0            ; set Table Base
smd_tbr: 
        MOV             R0, TBR         

#if (CLOCKSOURCE != NOCLOCK)                                          
;=========================================================================================
; 7.2  Check for CSV reset and set CSV
;=========================================================================================
; Start restriction; No clock supervisor (CSV)
#if (DEVICE != MB91461R) && (DEVICE != MB91467R) && (DEVICE != MB91463N)
; End restriction
        LDI:20          #0x04AD, R0             ; CSVCR
        BORL            #0x8, @R0               ; Enable Main Osc CSV
        BTSTH           #0x4, @R0               ; Check for Main Osc missing
        BEQ             NoMAINCSVreset          ; Main osc available -> branch 
                                                ;   to NoCSVreset
        BANDL           #0x7, @R0               ; Disable Main Osc CSV
        
        LDI             #noClockStartup, R0     ; Main Clock missing -> no
        JMP             @R0                     ; clock startup
                                                
NoMAINCSVreset: 


        BORL            #0x4, @R0               ; Enable Sub Osc CSV
        BTSTH           #0x2, @R0               ; Check for Sub Osc missing
        BEQ             NoSUBCSVreset           ; Sub osc available -> branch 
                                                ;   to NoCSVreset
        BANDL           #0xB, @R0               ; Disable Sub Osc SCSV
#if (CLOCKSOURCE == SUBCLOCK)
        LDI             #noClockStartup, R0     ; Sub Clock missing -> no
        JMP             @R0                     ; clock startup
#endif                                                
NoSUBCSVreset:       
#endif        
;=========================================================================================
; 7.3  Check Clock Condition
;=========================================================================================
        LDI             #0x484, R0              ; Check for Default Values
        LDI             #0x0F, R1               
        ANDB            R1, @R0
        BEQ             clock_startup 

;=========================================================================================
; 7.4  Restore Default Settings after Reset
;=========================================================================================
;=========================================================================================
; 7.4.2  Disable Clock Modulator
;=========================================================================================
        LDI             #0x04BB, R0             ; Clock Modulator Control Reg
        BANDL           #0xD, @R0               ; Disable Frequency modulation
FMODwait:        
        BTSTL           #8, @R0                 ; Wait until Frequency modulation
        BNE             FMODwait                ; is disabled
        
        BANDL           #0xE, @R0               ; Power down clock modulator

;=========================================================================================
; 7.4.2  Check if running on Sub Clock, change to Main Clock
;=========================================================================================
        LDI:20          #0x0484,R12             ; Check if running on sub clock
        LDUB            @R12,R0
        LDI:8           #0x3,R1
        AND             R1,R0
        CMP             #0x3,R0
        BNE             notOnSubClock
        
        LDI:20          #0x04CC,R12             ; Check if Main Clock is stopped
        BTSTL           #1, @R12
        BEQ             mainNotStopped

        BANDL           #0xE, @R12              ; Start Main Oscillation
                        
        LDI             #0x4C8, R0              ; Main Stabilisation Wait Time
        LDI             #0x04, R1               ; 32.7 ms
        AND             R1, @R0  
        BORH            #0x02, @R0      
        
        mainStabTime:                           ; Wait for stabilisation time
        ClearRCwatchdog                         ; clear harware watchdog
        BTSTH           #8, @R0
        BEQ             mainStabTime
        LDI             #0x0, R1
        STB             R1, @R0

mainNotStopped:        
        LDI:20          #0x0484, R12            ; disable sub clock as source
        BANDL           #0xD, @R12              ; Clock source = 0x01 (Main/2)  
                                                       
notOnSubClock:
;=========================================================================================
; 7.4.3  Disable Sub Clock
;=========================================================================================
#if ENABLE_SUBCLOCK != ON
        LDI             #0x0484, R0             ; Clock source control reg CLKR
        BANDL           #0x7, @R0               ; Disable PLL
#endif       

;=========================================================================================
; 7.4.4  Check if running on PLL, Gear Down PLL
;=========================================================================================
        LDI:20          #0x0484,R12             ; Check if running on PLL
        LDUB            @R12,R0
        LDI:8           #0x3,R1
        AND             R1,R0
        CMP             #0x2,R0
        BNE             notOnPll
                    
        LDI:20          #0x0490, R11            ; clear flags  
        LDI:8           #0x0,R1        
        STB             R1, @R11
        LDI             #0x04,R1
        STB             R1, @R11                ; Set Flag for Simulator; no Effekt on
                                                ; Emulator      

        BANDL           #0xC, @R12              ; disable PLL as clock source  
                                                ; Clock Source = 0x00 (Main/2)
                                                    
        LDI:20          #0x048E,R12             ; check if DivG != 0
        LDUB            @R12, R0
        LDI:8           #0xFF,R1
        AND             R1,R0
        BEQ             notOnPll
                                                                                          
gearDownLoop:    
        ClearRCwatchdog                         ; clear harware watchdog
        BTSTL           #4, @R11                ; Gear Down
        BEQ             gearDownLoop            ; 
 
        LDI             #0x00,R1                ; Clear Flags
        STB             R1, @R11                ;       
        
notOnPll:
;=========================================================================================
; 7.4.5  Disable PLL
;=========================================================================================
        LDI             #0x0484, R0             ; Clock source control reg CLKR
        BANDL           #0xB, @R0               ; Disable PLL
        
;=========================================================================================
; 7.4.6  Set to Main Clock
;=========================================================================================
        LDI:20          #0x0484,R12             ; Check if running on PLL
        BANDL           #0xC, @R12              ; disable PLL as clock source  
                                                ; Clock Source = 0x00 (Main/2)

clock_startup:
;=========================================================================================
; 7.5  Set Memory Controller
;=========================================================================================
; Start restriction; No embedded flash
#if DEVICE != MB91461R
; End restriction
        LDI             #0x7002, R1             ; FLASH Controller Reg.
        LDI             #FLASHCONTROL, R2       ; Flash Controller Settings
        STH             R2, @R1                 ; set register
        LDI             #0x7004, R1             ; FLASH Memory Wait Timing Reg.
        LDI             #FLASHREADT, R2         ; wait settings
        STH             R2, @R1                 ; set register
        LDI             #0x7006, R1             ; FLASH Memory Wait Timing Reg.
        LDI             #FLASHMWT2, R2          ; wait settings
        STB             R2, @R1                 ; set register               
#endif                
        ClearRCwatchdog   
                                                       
;=========================================================================================
; 7.6  Clock startup
;=========================================================================================
;=========================================================================================
; 7.6.1  Set Voltage Regulator Settings
;=========================================================================================
; Start restriction; No regulator settings
#if DEVICE != MB91461R
; End restriction
        LDI             #0x04CF, R0             ; REGCTR
        LDI             #REGULATORCTRL, R1
        STB             R1, @R0

        LDI             #0x04CE, R0             ; REGSEL
        LDI             #REGULATORSEL, R1
        STB             R1, @R0
#endif

;=========================================================================================
; 7.6.2  Power on Clock Modulator - Clock Modulator Part I
;=========================================================================================
#if CLOMO == ON 
        LDI             #0x04BB, R0             ; Clock Modulator Control Reg
        LDI             #0x11, R1               ; Load value to Power on CM
        ORB             R1, @R0                 ; Power on clock modulaor
#endif

;=========================================================================================
; 7.6.3  Set CLKR Register w/o Clock Mode
;=========================================================================================
; Set Clock source (Base Clock) for the three clock tree selections
; This select Base clock is used to select afterwards the 3
; Clocks for the diffenrent internal trees.
; When PLL is used, first pll multiplication ratio is set and PLL is
; enabled. After waiting the PLL stabilisation time via timebase
; timer, PLL clock is selected as clock source. 
        LDI             #0x048C, R0             ; PLL Cntl Reg. PLLDIVM/N
        LDI:20          #PLLSPEED, R1
        STH             R1, @R0

        LDI             #0x048E, R0             ; PLL Cntl Reg. PLLDIVG
        LDI             #DIV_G, R1
        STB             R1, @R0

        LDI             #0x048F, R0             ; PLL Cntl Reg. PLLMULG
        LDI             #MUL_G, R1
        STB             R1, @R0

;=========================================================================================
; 7.6.4  Start PLL 
;=========================================================================================
#if ( ( CLOCKSOURCE == MAINPLLCLOCK ) || ( PSCLOCKSOURCE == PSCLOCK_PLL ) )
        LDI             #0x0484, R0             ; Clock source control reg CLKR
        LDI             #0x04, R1               ; Use PLL x1, enable PLL 
        ORB             R1, @R0                 ; store data to CLKR register
#endif
       
       
#if ENABLE_SUBCLOCK == ON
        LDI             #0x0484, R0             ; Clock source control reg CLKR
        LDI             #0x08, R1               ; enable subclock operation
        ORB             R1, @R0                 ; store data to CLKR register
        LDI             #0x4CA, R0              ; Sub Clock oszilation 
        LDI             #0x00, R1               ; stabilitsation time = 32 ms
        AND             R1, @R0  
        BORH            #0x02, @R0      
#endif      
      
;=========================================================================================
; 7.6.5  Wait for PLL oscillation stabilisation
;=========================================================================================
#if ((CLOCKSOURCE==MAINPLLCLOCK)||(PSCLOCKSOURCE==PSCLOCK_PLL))
        LDI             #0x0482, R12            ; TimeBaseTimer TBCR
        LDI             #0x00, R1               ; set 1024 us @ 2 MHz 
        STB             R1, @R12

        BANDH           #7, @R12                ; clear interrupt flag
        
        LDI             #0x0483, R0             ; clearTimeBaseTimer CTBR
        LDI             #0xA5, R1                 
        STB             R1, @R0
        LDI             #0x5A, R1                 
        STB             R1, @R0
        
        BANDH           #7, @R12                ; clear interrupt flag
        BORH            #8, @R12                ; set interrupt flag for simulator

PLLwait:        
        ClearRCwatchdog                         ; clear harware watchdog
        BTSTH           #8, @R12
        BEQ             PLLwait
#endif

;=========================================================================================
; 7.6.6  Set clocks 
;=========================================================================================
;=========================================================================================
; 7.6.6.1  Set CPU and peripheral clock 
;=========================================================================================
; CPU and peripheral clock are set in one register
        LDI             #0x0486, R2             ; Set DIVR0 (CPU-clock (CLKB)  
        LDI             #((CPUCLOCK << 4) + PERCLOCK), R3 ; Load CPU clock setting
        STB             R3, @R2               
;=========================================================================================
; 7.6.6.2  Set External Bus interface clock
;=========================================================================================
; set External Bus clock
; Be aware to do smooth clock setting, to avoid wrong clock setting
; Take care, always write 0 to the lower 4 bits of DIVR1 register
        LDI             #0x0487, R2             ; Set DIVR1  
        LDI             #(EXTBUSCLOCK << 4), R3 ; Load Peripheral clock setting
        STB             R3, @R2 
        
;=========================================================================================
; 7.6.6.3  Set CAN clock prescaler
;=========================================================================================
; Set CAN Prescaler, only clock relevant parameter 
        LDI             #0x04C0, R0             ; Set CAN ClockParameter Register
        LDI             #(PSCLOCKSOURCE + PSDVC), R1     ; Load Divider
        STB             R1, @R0                          ; Set Divider
; enable CAN clocks
        LDI             #0x04c1, R0             ; Set CAN Clock enable Register
        LDI             #CANCLOCK, R1           ; Load CANCLOCK
        STB             R1, @R0                 ; set CANCLOCK

;=========================================================================================
; 7.6.6.4  Switch Main Clock Mode
;=========================================================================================
#if CLOCKSOURCE == MAINCLOCK

;=========================================================================================
; 7.6.6.5  Switch Subclock Mode
;=========================================================================================
#elif ( (CLOCKSOURCE == SUBCLOCK) )
    #if ENABLE_SUBCLOCK == ON
        LDI             #0x4CA, R12
subStabTime:        
        ClearRCwatchdog                         ; clear harware watchdog
        BTSTH           #8, @R12                ; wait until sub clock stabilisation
        BEQ             subStabTime             ; time is over
        LDI             #0x0, R1
        STB             R1, @R12

        LDI             #0x0484, R0             ; Clock source control reg CLKR
        LDI             #0x01, R1               ; load value to select main clock
        ORB             R1, @R0                 ; enable main clock (1/2 external)        
        LDI             #0x03, R1               ; load value to select subclock
        ORB             R1, @R0                 ; enable subclock as clock source       
    #else
        #error: Wrong setting! The clock source is subclock, but the subclock is disabled.
    #endif

;=========================================================================================
; 7.6.7  Switch to PLL Mode
;=========================================================================================
#elif ( (CLOCKSOURCE == MAINPLLCLOCK) )

#if (DIV_G != 0x00)
        LDI             #0x0490, R0             ; PLL Ctrl Register   
        LDI             #0x00,R1
        STB             R1, @R0                 ; Clear Flag
        LDI             #0x01,R1
        STB             R1, @R0                 ; Set Flag for Simulator; no Effekt on
#endif                                                ; Emulator
 
        LDI             #0x0484, R3             ; Clock source control reg CLKR
        BORL            #0x2, @R3               ; enable PLL as clock source                                               
                                                
#if (DIV_G != 0x00)                                                
gearUpLoop:    
        ClearRCwatchdog                         ; clear harware watchdog
        LDUB            @R0, R2                 ; LOAD PLLCTR to R2
        AND             R1, R2                  ; GRUP, counter reach 0
        BEQ             gearUpLoop

        LDI             #0x00,R1
        STB             R1, @R0                 ; Clear Gear-Up Flag
#endif         
     
#endif

;=========================================================================================
; 7.6.8  Enable Frequncy Modulation - Clock Modulator Part II
;=========================================================================================
#if CLOMO == ON                                 ; Only applicable if Modulator is on
        LDI             #0x04B8, R0             ; Clock Modulation Parameter Reg
        LDI             #CMPR, R1               ; Load CMP value
        STH             R1, @R0                 ; Store CMP value in CMPR

        LDI             #0x04BB, R0             ; Clock Modulator Control Reg
        LDI             #0x13, R1               ; Load value to FM on CM
        ORB             R1, @R0                 ; FM on 
#endif

#endif
noClockStartup:

;=========================================================================================
; 7.7  Set BusInterface
;=========================================================================================
; Start restriction; No ext. bus interface
#if (DEVICE != MB91464A) && (DEVICE != MB91467C) && (DEVICE != MB91465K) &&  \
    (DEVICE != MB91463N) && (DEVICE != MB91465X)
; End restriction
#if (EXTBUS == ON) 
;=========================================================================================
; 7.7.1  Disable all CS
;=========================================================================================
; Start restriction; Flashless device
#if(DEVICE != MB91461R)
; End restriction
        LDI             #0x0680, R3             ; chip select enable register CSER
        LDI             #(0x00), R2             ; load disable settings                                                    
smd_cs:                                                    
        ANDB            R2, @R3                 ; set register          
#endif        

;=========================================================================================
; 7.7.2  Clear TCR Register
;=========================================================================================
        LDI             #0x0683, R1             ; Pin/Timing Control Register TCR
        BORH            #0x6,@R1                ; load timing settings 

;=========================================================================================
; 7.7.3  Set CS0
;=========================================================================================
#if CS0
        LDI             #0x0640, R1             ; area select reg ASR0, ACR0      
        LDI             #(AREASEL0<<16)+CONFIGCS0, R0  ; load settings
        ST              R0, @R1                 ; set registers
 
        LDI             #0x660, R1              ; area wait register awr0
        LDI             #WAITREG0, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif

;=========================================================================================
; 7.7.4  Set CS1  
;=========================================================================================
#if CS1  
        LDI             #0x0644, R1             ; area select reg ASR1, ACR1      
        LDI             #(AREASEL1<<16)+CONFIGCS1, R0  ; load settings
        ST              R0, @R1                 ; set registers

        LDI             #0x662, R1              ; area wait register awr1
        LDI             #WAITREG1, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
smd_cs_mb91461r:
;=========================================================================================
; 7.7.5  Set CS2  
;=========================================================================================
#if CS2
        LDI             #0x0648, R1             ; area select reg ASR2, ACR2      
        LDI             #(AREASEL2<<16)+CONFIGCS2, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x664, R1              ; area wait register awr2
        LDI             #WAITREG2, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;=========================================================================================
; 7.7.6  Set CS3  
;=========================================================================================
#if CS3
        LDI             #0x064C, R1             ; area select reg ASR3, ACR3      
        LDI             #(AREASEL3<<16)+CONFIGCS3, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x666, R1              ; area wait register awr3
        LDI             #WAITREG3, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;=========================================================================================
; 7.7.7  Set CS4  
;=========================================================================================
#if CS4
        LDI             #0x0650, R1             ; area select reg ASR4, ACR4      
        LDI             #(AREASEL4<<16)+CONFIGCS4, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x668, R1              ; area wait register awr4
        LDI             #WAITREG4, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;=========================================================================================
; 7.7.8  Set CS5  
;=========================================================================================
#if CS5
        LDI             #0x0654, R1             ; area select reg ASR5, ACR5      
        LDI             #(AREASEL5<<16)+CONFIGCS5, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x66A, R1              ; area wait register awr5
        LDI             #WAITREG5, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;=========================================================================================
; 7.7.9  Set CS6
;=========================================================================================
#if (CS6)  
        LDI             #0x0658, R1             ; area select reg ASR6, ACR6      
        LDI             #(AREASEL6<<16)+CONFIGCS6, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x66C, R1              ; area wait register awr6
        LDI             #WAITREG6, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;=========================================================================================
; 7.7.10  Set CS7  
;=========================================================================================
#if CS7
        LDI             #0x065C, R1             ; area select reg ASR7, ACR7     
        LDI             #(AREASEL7<<16)+CONFIGCS7, R0  ; load settings
        ST              R0, @R1                 ; set registers
        LDI             #0x66E, R1              ; area wait register awr7
        LDI             #WAITREG7, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif             
;=========================================================================================
; 7.7.11  Set special SDRAM config register  
;=========================================================================================
#if (SDRAM)
        LDI             #0x670, R1              ; SDRAM memory config register
        LDI             #MEMCON, R2             ; wait settings
        STB             R2, @R1                 ; set register
#endif

;=========================================================================================
; 7.7.12  set Port Function Register
;=========================================================================================
;=========================================================================================
; 7.7.12.1  set PFR00 Register. External bus mode (D[24-31]) or General purpose port
;=========================================================================================
        LDI             #0x0D80, R1             ; Port Function Register 0, (PFR00)
        LDI             #PFUNC0, R0             ; load port settings 
        STB             R0, @R1                 ; set register    
;=========================================================================================
; 7.7.12.2  set PFR01 Register. External bus mode (D[16-23]) or General purpose port
;=========================================================================================
        LDI             #0x0D81, R1             ; Port Function Register 1, (PFR01)
        LDI             #PFUNC1, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.3  set PFR02 Register. External bus mode (D[8-15]) or General purpose port
;=========================================================================================
        LDI             #0x0D82, R1             ; Port Function Register 2, (PFR02)
        LDI             #PFUNC2, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.4  set PFR03 Register. External bus mode (D[0-7]) or General purpose port
;=========================================================================================
        LDI             #0x0D83, R1             ; Port Function Register 3, (PFR03)
        LDI             #PFUNC3, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.5  set PFR04 Register. External bus mode (Adr[24-31]) or General purpose port
;=========================================================================================
        LDI             #0x0D84, R1             ; Port Function Register 4, (PFR04)
        LDI             #PFUNC4, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.6  set PFR05 Register. External bus mode (Adr[16-23]) or General purpose port
;=========================================================================================
        LDI             #0x0D85, R1             ; Port Function Register 5, (PFR05)
        LDI             #PFUNC5, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.7  set PFR06 Register. External bus mode (Adr[8-15]) or General purpose port
;=========================================================================================
        LDI             #0x0D86, R1             ; Port Function Register 6, (PFR06)
        LDI             #PFUNC6, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.8  set PFR07 Register. External bus mode (Adr[0-7]) or General purpose port
;=========================================================================================
        LDI             #0x0D87, R1             ; Port Function Register 7, (PFR07)
        LDI             #PFUNC7, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.9  set PFR08 Register. External bus mode (Control Signals) or GIO port
;=========================================================================================
        LDI             #0x0D88, R1             ; Port Function Register 8, (PFR08)
        LDI             #PFUNC8, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.10  set PFR09 Register. External bus mode (Control Signals) or GIO port
;=========================================================================================
        LDI             #0x0D89, R1             ; Port Function Register 9, (PFR09)
        LDI             #PFUNC9, R0             ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.11  set PFR10 Register. External bus mode (Control Signals) or GIO port
;=========================================================================================
        LDI             #0x0D8A, R1             ; Port Function Register 10, (PFR10)
        LDI             #PFUNC10, R0            ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.12.12  set EPFR10 Register. External bus mode (Control Signals) or GIO port
;=========================================================================================
        LDI             #0x0DCA, R1             ; Extended PFR 10, (EPFR10)
        LDI             #EPFUNC10, R0           ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.13  Set TCR Register
;=========================================================================================
        LDI             #0x0683, R1             ; Pin/Timing Control Register TCR
        LDI             #TIMECONTR, R0          ; load timing settings 
        STB             R0, @R1                 ; set register
;=========================================================================================
; 7.7.14  Enable CACHE for selected CS
;=========================================================================================
        LDI             #0x0681, R3             ; chip select enable register CSER
        LDI             #CHEENA, R2 
        ORB             R2, @R3      
;=========================================================================================
; 7.7.15 set SDRAM  Referesh Control Register
;=========================================================================================
#if (SDRAM)
        LDI             #0x0684, R1             ; Refresh Control Register RCR
        LDI             #REFRESH, R0            ; load refresh settings 
        STH             R0, @R1                 ; set register    
        LDI             #0x0008, R2
        OR              R2, R0                  ; Set PON bit to 1     
        STH             R0, @R1                 ; set register 
#endif
;=========================================================================================
; 7.7.16  Enable used CS
;=========================================================================================
        LDI             #0x0680, R3             ; chip select enable register CSER
        LDI             #ENACSX, R2 
; Start restriction; Flashless device
#if (DEVICE == MB91461R)
; End restriction
emu_sram_cs_mb91461r:    
        ANDB            R2, @R3                 ; set register
#else    
        ORB             R2, @R3
#endif   
;=========================================================================================
; 7.7.17  I-cache on/off
;=========================================================================================
; Start restriction; No cache
#if (DEVICE == MB91461R) || (DEVICE == MB91469G) || (DEVICE == others)         
; End restriction
    #if CACHE
        #if CACHE_SIZE  == C1024
        LDI             #0x03C7, R1             ; Cache size register ISIZE
        LDI             #0x00, R2
        STB             R2, @R1
        LDI             #0x03E7, R1             ; Cache control reg   ICHCR
        LDI             #0x07, R2               ; Release entry locks, flush and enable 
        STB             R2, @R1                 ; cache  
        #elif CACHE_SIZE  == C2048
        LDI             #0x03C7, R1             ; Cache size register ISIZE
        LDI             #0x01, R2
        STB             R2, @R1
        LDI             #0x03E7, R1             ; Cache control reg   ICHCR
        LDI             #0x07, R2               ; Release entry locks, flush and enable 
        STB             R2, @R1                 ; cache
        #elif CACHE_SIZE  == C4096
        LDI             #0x03C7, R1             ; Cache size register ISIZE
        LDI             #0x02, R2
        STB             R2, @R1
        LDI             #0x03E7, R1             ; Cache control reg   ICHCR
        LDI             #0x07, R2               ; Release entry locks, flush and enable 
        STB             R2, @R1                 ; cache
        #else    
        #error: Wrong Cache size selected!
        #endif          
     #else
        LDI             #0x03E7, R1             ; Cache control reg   ICHCR
        LDI             #0x06, R2               ; Release entry locks, flush and disable
        STB             R2, @R1                 ; cache
    #endif
#endif
#elif (EXTBUS == OFF) 
;=========================================================================================
; 7.7.18  set Port Function Register to general as I/O-Port
;=========================================================================================
;=========================================================================================
; 7.7.18.1  set PFR00 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D80, R1             ; Port Function Register 0, (PFR00)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register    
;=========================================================================================
; 7.7.18.2  set PFR01 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D81, R1             ; Port Function Register 1, (PFR01)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.3  set PFR02 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D82, R1             ; Port Function Register 2, (PFR02)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.4  set PFR03 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D83, R1             ; Port Function Register 3, (PFR03)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.5  set PFR04 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D84, R1             ; Port Function Register 4, (PFR04)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.6  set PFR05 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D85, R1             ; Port Function Register 5, (PFR05)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.7  set PFR06 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D86, R1             ; Port Function Register 6, (PFR06)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.8  set PFR07 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D87, R1             ; Port Function Register 7, (PFR07)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.9  set PFR08 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D88, R1             ; Port Function Register 8, (PFR08)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.10  set PFR09 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D89, R1             ; Port Function Register 9, (PFR09)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.11  set PFR10 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0D8A, R1             ; Port Function Register 10, (PFR10)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================
; 7.7.18.12  set EPFR10 Register. External bus mode as General purpose port
;=========================================================================================
        LDI             #0x0DCA, R1             ; Extended PFR10, (EPFR10)
        LDI             #0x00, R0               ; load port settings 
        STB             R0, @R1                 ; set register 
;=========================================================================================

#elif (EXTBUS == DEFAULT)
        NOP
smd_cs_mb91461r:
emu_sram_cs_mb91461r:
smd_cs:
#endif                                          ; #endif (EXTBUS)
#endif                                          ; #endif (excl. devices)
        ClearRCwatchdog

;=========================================================================================
; 7.8  Copy code from Flash to I-RAM 
;=========================================================================================
#if I_RAM == ON
        LDI             #_RAM_IRAM, R0
        LDI             #_ROM_IRAM, R1
        LDI             #sizeof(IRAM), R13
        CMP             #0, R13
        BEQ             copy_iram_end
copy_iram1: 
        ADD             #-1, R13
        LDUB            @(R13, R1), R12
        BNE:D           copy_iram1
        STB             R12, @(R13, R0)
copy_iram_end: 
        ClearRCwatchdog
#endif

;=========================================================================================
; 7.9  Fill stacks
;=========================================================================================
#if STACK_FILL == ON
        LDI             #STACK_PATTERN, R0
        LDI             #SSTACK, R1
        LDI             #sizeof(SSTACK), R2
        CMP             #0, R2
        BEQ:D           fill_sstack_end
        MOV             R2, R13
        LDI             #3, R12
        AND             R2, R12
        BEQ:D           fill_sstack2
        MOV             R2, R3
        SUB             R12, R3
        LDI             #0x3, R4
        SUB             R12, R4
        LSL             #0x3, R4 
        LDI             #STACK_PATTERN, R5
        LSR             R4, R5 
        LDI             #0x8, R4
fill_sstack1:
        ADD             #-1, R13
        LSR             R4, R5 
        CMP             R3, R13
        BHI:D           fill_sstack1
        STB             R5, @(R13, R1)
        CMP             #0, R3
        BEQ:D           fill_sstack_end
fill_sstack2:
        ADD             #-4, R13
        BGT:D           fill_sstack2
        ST              R0, @(R13, R1)
fill_sstack_end:

        LDI             #STACK_PATTERN, R0
        LDI             #USTACK, R1
        LDI             #sizeof(USTACK), R2
        CMP             #0, R2
        BEQ:D           fill_ustack_end
        MOV             R2, R13
        LDI             #3, R12
        AND             R2, R12
        BEQ:D           fill_ustack2
        MOV             R2, R3
        SUB             R12, R3
        LDI             #0x3, R4
        SUB             R12, R4
        LSL             #0x3, R4 
        LDI             #STACK_PATTERN, R5
        LSR             R4, R5 
        LDI             #0x8, R4
fill_ustack1:
        ADD             #-1, R13
        LSR             R4, R5 
        CMP             R3, R13
        BHI:D           fill_ustack1
        STB             R5, @(R13, R1)
        CMP             #0, R3
        BEQ:D           fill_ustack_end
fill_ustack2:
        ADD             #-4, R13
        BGT:D           fill_ustack2
        ST              R0, @(R13, R1)
fill_ustack_end:
        ClearRCwatchdog
#endif 

;=========================================================================================
; Standard C startup
;=========================================================================================
;=========================================================================================
; 7.10  Clear data 
;=========================================================================================
; clear DATA section
; According to ANSI, the DATA section must be cleared during start-up
        LDI:8           #0, R0
        LDI             #sizeof DATA &~0x3, R1
        LDI             #DATA, R13
        CMP             #0, R1
        BEQ             data_clr1
data_clr0:
        ADD2            #-4, R1
        BNE:D           data_clr0
        ST              R0, @(R13, R1)
data_clr1:
        LDI:8           #sizeof DATA & 0x3, R1
        LDI             #DATA + (sizeof DATA & ~0x3), R13

        CMP             #0, R1
        BEQ             data_clr_end
data_clr2:
        ADD2            #-1, R1
        BNE:D           data_clr2
        STB             R0, @(R13, R1)
data_clr_end:
        ClearRCwatchdog
        
;=========================================================================================
; 7.11  Copy Init section from ROM to RAM
;=========================================================================================
; copy rom
; All initialised data's (e.g. int i=1) must be stored in ROM/FLASH area. 
; (start value)
; The Application must copy the Section (Init) into the RAM area.
        LDI             #_RAM_INIT, R0
        LDI             #_ROM_INIT, R1
        LDI             #sizeof(INIT), R2
        CMP             #0, R2
        BEQ:D           copy_rom_end
        LDI             #3, R12
        AND             R2, R12
        BEQ:D           copy_rom2
        MOV             R2, R13
        MOV             R2, R3
        SUB             R12, R3
copy_rom1:
        ADD             #-1, R13
        LDUB            @(R13, R1), R12
        CMP             R3, R13
        BHI:D           copy_rom1
        STB             R12, @(R13, R0)
        CMP             #0, R3
        BEQ:D           copy_rom_end
copy_rom2:
        ADD             #-4, R13
        LD              @(R13, R1), R12
        BGT:D           copy_rom2
        ST              R12, @(R13, R0)
copy_rom_end:
        ClearRCwatchdog

;=========================================================================================
; 7.12 C library initialization
;=========================================================================================
#if CLIBINIT == ON
       CALL32          __stream_init, r12         ; initialise library 
#endif
;=========================================================================================
; 7.13  call C++ constructors
;=========================================================================================
#if CPLUSPLUS == ON
       LDI              #___call_dtors, r4
       CALL32           _atexit, r12

       LDI              #EXT_CTOR_DTOR, r8
       LDI              #EXT_CTOR_DTOR + sizeof(EXT_CTOR_DTOR), r9
       CMP              r9, r8
       BEQ              L1
L0:
       LD               @r8, r10
       CALL:D           @r10
       ADD              #4, r8
       CMP              r9, r8
       BC               L0
L1:
#endif

start_main:
;=========================================================================================
; 7.14  call main routine
;=========================================================================================
       ClearRCwatchdog                            ; clear harware watchdog
       LDI:8            #0, r4                    ; Set the 1st parameter for main to 0.
       CALL32:d         _main, r12
       LDI:8            #0, r5                    ; Set the 2nd parameter for main to 0.
#if CLIBINIT == ON
       CALL32           _exit, r12
       __exit:
#endif

#if CPLUSPLUS == ON
       __abort:
#endif

;=========================================================================================
; 7.15  Return from main function
;=========================================================================================
end: 
        BRA            end  
        .end            __start
        
