summaryrefslogtreecommitdiff
path: root/Demo/NEC_78K0R_IAR/RegTest.s26
blob: 93ec7c5c3160a84405420ae665eedcd57946abf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
;	FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
;
;	This file is part of the FreeRTOS.org distribution.
;
;	FreeRTOS.org is free software; you can redistribute it and/or modify
;	it under the terms of the GNU General Public License as published by
;	the Free Software Foundation; either version 2 of the License, or
;	(at your option) any later version.
;
;	FreeRTOS.org 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.org; if not, write to the Free Software
;	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;
;	A special exception to the GPL can be applied should you wish to distribute
;	a combined work that includes FreeRTOS.org, without being obliged to provide
;	the source code for any proprietary components.  See the licensing section
;	of http://www.FreeRTOS.org for full details of how and when the exception
;	can be applied.
;
;	***************************************************************************
;	See http://www.FreeRTOS.org for documentation, latest information, license
;	and contact details.  Please ensure to read the configuration and relevant
;	port sections of the online documentation.
;	***************************************************************************
;
;------------------------------------------------------------------------------


;
; 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