;/*
;    FreeRTOS V8.0.0:rc1 - Copyright (C) 2014 Real Time Engineers Ltd.
;	
;
;    ***************************************************************************
;     *                                                                       *
;     *    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.
;*/


;
; This file defines the RegTest tasks as described at the top of main.c
;

;------------------------------------------------------------------------------

#if __CORE__ != __RL78_1__
	#error "This file is only for RL78 Devices"
#endif

; Functions implemented in this file
;------------------------------------------------------------------------------

	PUBLIC    vRegTest1
	PUBLIC    vRegTest2

; Functions used by this file
;------------------------------------------------------------------------------
	EXTERN    vRegTestError

;------------------------------------------------------------------------------
;   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
vRegTest1:

	; 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
	BZ		+5

	; 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
	BZ		+5
	BR		vRegTestError	
	MOVW	AX, DE
	CMPW	AX, #0x5566
	BZ		+5
	BR		vRegTestError	
	MOVW	AX, HL	
	CMPW	AX, #0x7788
	BZ		+5
	BR		vRegTestError
	MOV		A, CS
	CMP		A, #0x01
	BZ		+5
	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
	BZ		+5
	BR		vRegTestError

#endif

	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
vRegTest2:

	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
	BZ		+5
	BR		vRegTestError	
	MOVW	AX, BC
	CMPW	AX, #0xbbcc
	BZ		+5
	BR		vRegTestError	
	MOVW	AX, DE
	CMPW	AX, #0xddee
	BZ		+5
	BR		vRegTestError	
	MOVW	AX, HL	
	CMPW	AX, #0xff12
	BZ		+5
	BR		vRegTestError
	MOV		A, CS
	CMP		A, #0x03
	BZ		+5
	BR		vRegTestError

#if __DATA_MODEL__ == __DATA_MODEL_FAR__

	MOV		A, ES
	CMP		A, #0x04
	BZ		+5
	BR		vRegTestError

#endif

	MOVW	AX, #0x99aa
	BR 		loop2


	END
