;/*
; * FreeRTOS Kernel V10.2.1
; * Copyright (C) 2019 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!
; */


;
; This file defines the RegTest tasks as described at the top of main.c
;

;------------------------------------------------------------------------------


; Functions implemented in this file
;------------------------------------------------------------------------------

	PUBLIC    vRegTest1Task
	PUBLIC    vRegTest2Task

; Functions and variables used by this file
;------------------------------------------------------------------------------
	EXTERN    vRegTestError
	EXTERN    usRegTest1LoopCounter
	EXTERN    usRegTest2LoopCounter

;------------------------------------------------------------------------------
;   Fill all the registers with known values, then check that the registers
;   contain the expected value.  An incorrect value being indicative of an
;   error in the context switch mechanism.
;
;   Input:  NONE
;
;   Call:   Created as a task.
;
;   Output: NONE
;
;------------------------------------------------------------------------------
    RSEG CODE:CODE
vRegTest1Task:

	; First fill the registers.
	MOVW	AX, #0x1122
	MOVW	BC, #0x3344
	MOVW	DE, #0x5566
	MOVW	HL, #0x7788
	MOV		CS, #0x01

#if __DATA_MODEL__ == __DATA_MODEL_FAR__

	; ES is not saved or restored when using the near memory model so only
	; test it when using the far model.
	MOV		ES, #0x02

#endif

loop1:

	; Continuously check that the register values remain at their expected
	; values.  The BRK is to test the yield.  This task runs at low priority
	; so will also regularly get preempted.
	BRK

	; Compare with the expected value.
	CMPW	AX, #0x1122
	SKZ

	; Jump over the branch to vRegTestError() if the register contained the
	; expected value - otherwise flag an error by executing vRegTestError().
	BR		vRegTestError

	; Repeat for all the registers.
	MOVW	AX, BC
	CMPW	AX, #0x3344
	SKZ
	BR		vRegTestError
	MOVW	AX, DE
	CMPW	AX, #0x5566
	SKZ
	BR		vRegTestError
	MOVW	AX, HL
	CMPW	AX, #0x7788
	SKZ
	BR		vRegTestError
	MOV		A, CS
	CMP		A, #0x01
	SKZ
	BR		vRegTestError

#if __DATA_MODEL__ == __DATA_MODEL_FAR__

	; ES is not saved or restored when using the near memory model so only
	; test it when using the far model.
	MOV		A, ES
	CMP		A, #0x02
	SKZ
	BR		vRegTestError

#endif

	; Indicate that this task is still cycling.
	INCW	usRegTest1LoopCounter

	MOVW	AX, #0x1122
	BR 		loop1


;------------------------------------------------------------------------------
;   Fill all the registers with known values, then check that the registers
;   contain the expected value.  An incorrect value being indicative of an
;   error in the context switch mechanism.
;
;   Input:  NONE
;
;   Call:   Created as a task.
;
;   Output: NONE
;
;------------------------------------------------------------------------------
    RSEG CODE:CODE
vRegTest2Task:

	MOVW	AX, #0x99aa
	MOVW	BC, #0xbbcc
	MOVW	DE, #0xddee
	MOVW	HL, #0xff12
	MOV		CS, #0x03

#if __DATA_MODEL__ == __DATA_MODEL_FAR__

	MOV		ES, #0x04

#endif

loop2:
	CMPW	AX, #0x99aa
	SKZ
	BR		vRegTestError
	MOVW	AX, BC
	CMPW	AX, #0xbbcc
	SKZ
	BR		vRegTestError
	MOVW	AX, DE
	CMPW	AX, #0xddee
	SKZ
	BR		vRegTestError
	MOVW	AX, HL
	CMPW	AX, #0xff12
	SKZ
	BR		vRegTestError
	MOV		A, CS
	CMP		A, #0x03
	SKZ
	BR		vRegTestError

#if __DATA_MODEL__ == __DATA_MODEL_FAR__

	MOV		A, ES
	CMP		A, #0x04
	SKZ
	BR		vRegTestError

#endif

	; Indicate that this task is still cycling.
	INCW	usRegTest2LoopCounter

	MOVW	AX, #0x99aa
	BR 		loop2


	END
