;/*
;    FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
;    All rights reserved
;	
;
;    ***************************************************************************
;     *                                                                       *
;     *    FreeRTOS tutorial books are available in pdf and paperback.        *
;     *    Complete, revised, and edited pdf reference manuals are also       *
;     *    available.                                                         *
;     *                                                                       *
;     *    Purchasing FreeRTOS documentation will not only help you, by       *
;     *    ensuring you get running as quickly as possible and with an        *
;     *    in-depth knowledge of how to use FreeRTOS, it will also help       *
;     *    the FreeRTOS project to continue with its mission of providing     *
;     *    professional grade, cross platform, de facto standard solutions    *
;     *    for microcontrollers - completely free of charge!                  *
;     *                                                                       *
;     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *
;     *                                                                       *
;     *    Thank you for using FreeRTOS, and thank you for your support!      *
;     *                                                                       *
;    ***************************************************************************
;
;
;    This file is part of the FreeRTOS distribution.
;
;    FreeRTOS is free software; you can redistribute it and/or modify it under
;    the terms of the GNU General Public License (version 2) as published by the
;    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
;    >>>NOTE<<< The modification to the GPL is included to allow you to
;    distribute a combined work that includes FreeRTOS without being obliged to
;    provide the source code for proprietary components outside of the FreeRTOS
;    kernel.  FreeRTOS is distributed in the hope that it will be useful, but
;    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
;    more details. You should have received a copy of the GNU General Public
;    License and the FreeRTOS license exception along with FreeRTOS; if not it
;    can be viewed here: http://www.freertos.org/a00114.html and also obtained
;    by writing to Richard Barry, contact details for whom are available on the
;    FreeRTOS WEB site.
;
;    1 tab == 4 spaces!
;
;    http://www.FreeRTOS.org - Documentation, latest information, license and
;    contact details.
;
;    http://www.SafeRTOS.com - A version that is certified for use in safety
;    critical systems.
;
;    http://www.OpenRTOS.com - Commercial support, development, porting,
;    licensing and training services.
;*/

	.import _pxCurrentTCB
	.import _vTaskSwitchContext
	.import _xTaskIncrementTick

	.export _vPortStartFirstTask
	.export _ulPortGetGBR
	.export _vPortYieldHandler
	.export _vPortPreemptiveTick
	.export _vPortCooperativeTick
	.export _vPortSaveFlopRegisters
	.export _vPortRestoreFlopRegisters

    .section    P

	.INCLUDE "ISR_Support.inc"
	
_vPortStartFirstTask:
		
	portRESTORE_CONTEXT
	
;-----------------------------------------------------------

_vPortYieldHandler:

	portSAVE_CONTEXT

	mov.l	#_vTaskSwitchContext, r0
	jsr		@r0
	nop

	portRESTORE_CONTEXT
	
;-----------------------------------------------------------

_vPortPreemptiveTick

	portSAVE_CONTEXT
	
	mov.l	#_xTaskIncrementTick, r0
	jsr		@r0
	nop

	mov.l	#_vTaskSwitchContext, r0
	jsr		@r0
	nop

	portRESTORE_CONTEXT
	
;-----------------------------------------------------------

_vPortCooperativeTick

	portSAVE_CONTEXT
	
	mov.l	#_xTaskIncrementTick, r0
	jsr		@r0
	nop

	portRESTORE_CONTEXT
	
;-----------------------------------------------------------

_ulPortGetGBR:

	stc.l	gbr, r0
	rts
	nop

;-----------------------------------------------------------

_vPortSaveFlopRegisters:

	fmov.s	fr0, @-r4
	fmov.s	fr1, @-r4
	fmov.s	fr2, @-r4
	fmov.s	fr3, @-r4
	fmov.s	fr4, @-r4
	fmov.s	fr5, @-r4
	fmov.s	fr6, @-r4
	fmov.s	fr7, @-r4
	fmov.s	fr8, @-r4
	fmov.s	fr9, @-r4
	fmov.s	fr10, @-r4
	fmov.s	fr11, @-r4
	fmov.s	fr12, @-r4
	fmov.s	fr13, @-r4
	fmov.s	fr14, @-r4
	fmov.s	fr15, @-r4	
	sts.l   fpul, @-r4
	sts.l   fpscr, @-r4
	
	rts
	nop

;-----------------------------------------------------------
	
_vPortRestoreFlopRegisters:

	add.l  #-72, r4
	lds.l  @r4+, fpscr
	lds.l  @r4+, fpul	
	fmov.s @r4+, fr15
	fmov.s @r4+, fr14
	fmov.s @r4+, fr13
	fmov.s @r4+, fr12
	fmov.s @r4+, fr11
	fmov.s @r4+, fr10
	fmov.s @r4+, fr9
	fmov.s @r4+, fr8
	fmov.s @r4+, fr7
	fmov.s @r4+, fr6
	fmov.s @r4+, fr5
	fmov.s @r4+, fr4
	fmov.s @r4+, fr3
	fmov.s @r4+, fr2
	fmov.s @r4+, fr1
	fmov.s @r4+, fr0
	
	rts
	nop
	
	.end
		
