;/*
;    FreeRTOS V6.0.0 - Copyright (C) 2009 Real Time Engineers Ltd.
;
;    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.
;
;
;    ***************************************************************************
;    *                                                                         *
;    * The FreeRTOS eBook and reference manual are available to purchase for a *
;    * small fee. Help yourself get started quickly while also helping the     *
;    * FreeRTOS project! 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.
;*/


;
; This file defines the RegTest tasks as described at the top of main.c
;

;------------------------------------------------------------------------------

#if __CORE__ != __78K0R__
	#error "This file is only for 78K0R 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 configMEMORY_MODE == 1	
	; 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 configMEMORY_MODE == 1	
	; 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 configMEMORY_MODE == 1	
	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 configMEMORY_MODE == 1		
	MOV		A, ES
	CMP		A, #0x04
	BZ		+5
	BR		vRegTestError
#endif
	MOVW	AX, #0x99aa
	BR 		loop2


	END
