;	FreeRTOS.org V5.1.2 - Copyright (C) 2003-2009 Richard Barry.
;
;	This file is part of the FreeRTOS.org distribution.
;
;	FreeRTOS.org is free software; you can redistribute it and/or modify
;	it under the terms of the GNU General Public License as published by
;	the Free Software Foundation; either version 2 of the License, or
;	(at your option) any later version.
;
;	FreeRTOS.org 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.org; if not, write to the Free Software
;	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;
;	A special exception to the GPL can be applied should you wish to distribute
;	a combined work that includes FreeRTOS.org, without being obliged to provide
;	the source code for any proprietary components.  See the licensing section
;	of http://www.FreeRTOS.org for full details of how and when the exception
;	can be applied.
;
;	***************************************************************************
;	See http://www.FreeRTOS.org for documentation, latest information, license
;	and contact details.  Please ensure to read the configuration and relevant
;	port sections of the online documentation.
;	***************************************************************************
;
;------------------------------------------------------------------------------
#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