| ;/* | |
| ; * FreeRTOS Kernel V10.3.0 | |
| ; * Copyright (C) 2020 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 | |
| ; | |
| ;------------------------------------------------------------------------------ | |
| #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 |