;/*
;    FreeRTOS V6.0.1 - Copyright (C) 2009 Real Time Engineers Ltd.
;
;    ***************************************************************************
;    *                                                                         *
;    * If you are:                                                             *
;    *                                                                         *
;    *    + New to FreeRTOS,                                                   *
;    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *
;    *    + Looking for basic training,                                        *
;    *    + Wanting to improve your FreeRTOS skills and productivity           *
;    *                                                                         *
;    * then take a look at the FreeRTOS eBook                                  *
;    *                                                                         *
;    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *
;    *                  http://www.FreeRTOS.org/Documentation                  *
;    *                                                                         *
;    * A pdf reference manual is also available.  Both are usually delivered   *
;    * to your inbox within 20 minutes to two hours when purchased between 8am *
;    * and 8pm GMT (although please allow up to 24 hours in case of            *
;    * exceptional circumstances).  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 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.
;    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__ != __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
