;/*
;	FreeRTOS V5.4.0 - Copyright (C) 2003-2009 Richard Barry.
;
;	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 exception 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.  
;	Alternative commercial license and support terms are also available upon 
;	request.  See the licensing section of http://www.FreeRTOS.org for full 
;	license details.
;
;	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 along
;	with FreeRTOS; if not, write to the Free Software Foundation, Inc., 59
;	Temple Place, Suite 330, Boston, MA  02111-1307  USA.
;
;
;	***************************************************************************
;	*                                                                         *
;	* Looking for a quick start?  Then check out the FreeRTOS eBook!          *
;	* See http://www.FreeRTOS.org/Documentation for details                   *
;	*                                                                         *
;	***************************************************************************
;
;	1 tab == 4 spaces!
;
;	Please ensure to read the configuration and relevant port sections of the
;	online documentation.
;
;	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.
;*/
#include "ISR_Support.h"
;------------------------------------------------------------------------------

#if __CORE__ != __78K0R__
	#error "This file is only for 78K0R Devices"
#endif

#define CS                    0xFFFFC
#define ES                    0xFFFFD

; Functions implemented in this file
;------------------------------------------------------------------------------
	PUBLIC    vPortYield
	PUBLIC    vPortStart

; Functions used by scheduler
;------------------------------------------------------------------------------
	EXTERN    vTaskSwitchContext
	EXTERN    vTaskIncrementTick

; Tick ISR Prototype
;------------------------------------------------------------------------------
;	EXTERN    ?CL78K0R_V2_L00

	PUBWEAK   `??MD_INTTM05??INTVEC 68`
	PUBLIC    MD_INTTM05

MD_INTTM05    SYMBOL "MD_INTTM05"
`??MD_INTTM05??INTVEC 68` SYMBOL "??INTVEC 68", MD_INTTM05



;------------------------------------------------------------------------------
;   Yield to another task.  Implemented as a software interrupt.  The return
;   address and PSW will have been saved to the stack automatically before
;   this code runs.
;
;   Input:  NONE
;
;   Call:   CALL    vPortYield
;
;   Output: NONE
;
;------------------------------------------------------------------------------
    RSEG CODE:CODE
vPortYield:
	portSAVE_CONTEXT		        ; Save the context of the current task.
	call      vTaskSwitchContext    ; Call the scheduler to select the next task.
	portRESTORE_CONTEXT		        ; Restore the context of the next task to run.
	retb

	
;------------------------------------------------------------------------------
;   Restore the context of the first task that is going to run.
;
;   Input:  NONE
;
;   Call:   CALL    vPortStart
;
;   Output: NONE
;
;------------------------------------------------------------------------------	
    RSEG CODE:CODE
vPortStart:
	portRESTORE_CONTEXT	            ; Restore the context of whichever task the ...
	reti					        ; An interrupt stack frame is used so the task
                                    ; is started using a RETI instruction.

;------------------------------------------------------------------------------
;   Perform the necessary steps of the Tick Count Increment and Task Switch
;   depending on the chosen kernel configuration
;
;   Input:  NONE
;
;   Call:   ISR
;
;   Output: NONE
;
;------------------------------------------------------------------------------	

MD_INTTM05:

	portSAVE_CONTEXT		        ; Save the context of the current task.
	call      vTaskIncrementTick    ; Call the timer tick function.
#if configUSE_PREEMPTION == 1
	call      vTaskSwitchContext    ; Call the scheduler to select the next task.
#endif
	portRESTORE_CONTEXT		        ; Restore the context of the next task to run.
	reti



;	REQUIRE ?CL78K0R_V2_L00
	COMMON INTVEC:CODE:ROOT(1)      ; Set ISR location to the Interrupt vector table.
	ORG 68
`??MD_INTTM05??INTVEC 68`:
	DW MD_INTTM05

	COMMON INTVEC:CODE:ROOT(1)      ; Set ISR location to the Interrupt vector table.
	ORG 126
`??vPortYield??INTVEC 126`:
	DW vPortYield

									; Set value for the usCriticalNesting.
	RSEG NEAR_ID:CONST:SORT:NOROOT(1)
`?<Initializer for usCriticalNesting>`:
	DW 10

;#endif

      END