;/*
; * FreeRTOS Kernel V10.3.1
; * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * http://www.FreeRTOS.org
; * http://aws.amazon.com/freertos
; *
; * 1 tab == 4 spaces!
; */

#include "ISR_Support.h"

#define CS                    0xFFFFC
#define ES                    0xFFFFD

	PUBLIC    vPortYield
	PUBLIC    vPortStartFirstTask
	PUBLIC    vPortTickISR

	EXTERN    vTaskSwitchContext
	EXTERN    xTaskIncrementTick

; FreeRTOS yield handler.  This is installed as the BRK software interrupt
; handler.
    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


; Starts the scheduler by restoring the context of the task that will execute
; first.
    RSEG CODE:CODE
vPortStartFirstTask:
	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.

; FreeRTOS tick handler.  This is installed as the interval timer interrupt
; handler.
	 RSEG CODE:CODE
vPortTickISR:

	portSAVE_CONTEXT		       ; Save the context of the current task.
	call	xTaskIncrementTick     ; Call the timer tick function.
	cmpw	ax, #0x00
	skz
	call	vTaskSwitchContext     ; Call the scheduler to select the next task.
	portRESTORE_CONTEXT		       ; Restore the context of the next task to run.
	reti


; Install the interrupt handlers

	COMMON INTVEC:CODE:ROOT(1)
	ORG configTICK_VECTOR
	DW vPortTickISR

	COMMON INTVEC:CODE:ROOT(1)
	ORG 126
	DW vPortYield


      END