/*
 * File:	mcf5225x_lo.s
 * Purpose:	Low-level routines for the MCF5225x.
 *
 * Notes:	
 * 
 * License:     All software covered by license agreement in -
 *              docs/Freescale_Software_License.pdf
 */

#define mcf5225x_init   _mcf5225x_init
#define common_startup  _common_startup
#define cpu_startup     _cpu_startup
#define main	    	_main
#define __IPSBAR        ___IPSBAR   
#define __SRAM          ___SRAM     
#define __FLASH         ___FLASH    
#define __SP_INIT       ___SP_INIT  
 
	.extern __IPSBAR
	.extern __SRAM
	.extern __FLASH
	.extern __SP_INIT
	.extern mcf5225x_init
    .extern common_startup
    .extern cpu_startup
	.extern main

	.global asm_startmeup
	.global _asm_startmeup
	.global d0_reset
	.global _d0_reset
	.global d1_reset
	.global _d1_reset

    .data
    
d0_reset:
_d0_reset:  .long   0
d1_reset:
_d1_reset:  .long   0

	.text

/********************************************************************
 * 
 * This is the main entry point upon hard reset.  The memory map is
 * setup based on linker file definitions, then the higher level
 * system initialization routine is called.  Finally, we jump to the
 * "main" process. 
 */
asm_startmeup:
_asm_startmeup:

    move.w	#0x2700,sr

    /* Save off reset values of D0 and D1 */
    move.l  d0,d6
    move.l  d1,d7
    
    /* Initialize RAMBAR1: locate SRAM and validate it */
	move.l	#__SRAM,d0
	andi.l	#0xFFFF0000,d0
    add.l   #0x21,d0
    movec   d0,RAMBAR1

	/* Locate Stack Pointer */ 
	move.l	#__SP_INIT,sp

    /* Initialize IPSBAR */
	move.l	#__IPSBAR,d0
    add.l   #0x1,d0
	move.l	d0,0x40000000
	
    /* Initialize FLASHBAR */
    move.l  #__FLASH,d0
    cmp.l   #0x00000000,d0
    bne     change_flashbar
    add.l   #0x61,d0
    movec   d0,RAMBAR0

_continue_startup:

	/* Locate Stack Pointer */ 
	move.l	#__SP_INIT,sp

	/* Initialize the system */
	jsr		mcf5225x_init

    /* Common startup code */
    //jsr     common_startup

    /* Save off intial D0 and D1 to RAM */
    move.l  d6,d0_reset
    move.l  d7,d1_reset
    
    /* CPU specific startup code */
	//jsr     cpu_startup

	/* Jump to the main process */
	jsr		main
	
	bra		.
	nop
	nop
	halt

change_flashbar:
    /* 
     * The following sequence is used to set FLASHBAR. Since we may 
     * be executing from Flash, we must put the routine into SRAM for
     * execution and then jump back to Flash using the new address.
     *
     * The following instructions are coded into the SRAM:
     *
     * move.l	#(__FLASH + 0x21),d0
     * movec	d0, RAMBAR0
     * jmp		_continue_startup
     *
     * An arbitrary SRAM address is chosen until the real address
     * can be loaded.
     *
     * This routine is not necessary if the default Flash address
     * (0x00000000) is used.
     *
     * If running in SRAM, change_flashbar should not be executed 
     */

	move.l  #__SRAM,a0

	/* Code "move.l #(__FLASH + 0x21),d0" into SRAM */
	move.w  #0x203C,d0
	move.w  d0,(a0)+
	move.l  #__FLASH,d0
    add.l   #0x21,d0
    move.l  d0,(a0)+
	
	/* Code "movec d0,FLASHBAR" into SRAM */
	move.l  #0x4e7b0C04,d0
	move.l  d0,(a0)+
		
	/* Code "jmp _continue_startup" into SRAM */
	move.w  #0x4EF9,d0
	move.w  d0,(a0)+
	move.l  #_continue_startup,d0
	move.l  d0,(a0)+

	/* Jump to code segment in internal SRAM */
	jmp	    __SRAM

/********************************************************************/

	.end
