-/*\r
- * FreeRTOS Kernel V10.1.0\r
- * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
- *\r
- * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
- * this software and associated documentation files (the "Software"), to deal in\r
- * the Software without restriction, including without limitation the rights to\r
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
- * the Software, and to permit persons to whom the Software is furnished to do so,\r
- * subject to the following conditions:\r
- *\r
- * The above copyright notice and this permission notice shall be included in all\r
- * copies or substantial portions of the Software.\r
- *\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- *\r
- * http://www.FreeRTOS.org\r
- * http://aws.amazon.com/freertos\r
- *\r
- * 1 tab == 4 spaces!\r
- */\r
-\r
-/*\r
- * This file defines the RegTest tasks as described at the top of main.c\r
- */\r
-\r
- .global _vRegTest1Task\r
- .short _vRegTest1Task\r
- .global _vRegTest2Task\r
- .short _vRegTest2Task\r
-\r
- .extern _vRegTestError\r
- .extern _usRegTest1LoopCounter\r
- .extern _usRegTest2LoopCounter\r
-\r
- .text\r
-/*\r
- * Fill all the registers with known values, then check that the registers\r
- * contain the expected value. An incorrect value being indicative of an\r
- * error in the context switch mechanism.\r
- */\r
-_vRegTest1Task:\r
-\r
- /* First fill the registers. */\r
- SEL RB0\r
- MOVW AX, #0x1122\r
- MOVW BC, #0x3344\r
- MOVW DE, #0x5566\r
- MOVW HL, #0x7788\r
- SEL RB1\r
- MOVW AX, #0x1111\r
- MOVW BC, #0x2222\r
- MOVW DE, #0x3333\r
- MOVW HL, #0x4444\r
- SEL RB2\r
- MOVW AX, #0x5555\r
- MOVW BC, #0x6666\r
- MOVW DE, #0x7777\r
- MOVW HL, #0x8888\r
-\r
- /* Register bank 3 is not used outside of interrupts so is not saved as part\r
- of the task context. */\r
- SEL RB0\r
-\r
-_loop1:\r
-\r
- /* Continuously check that the register values remain at their expected\r
- values. The BRK is to test the yield. This task runs at low priority\r
- so will also regularly get preempted. */\r
- BRK\r
-\r
- /* Compare with the expected value. */\r
- CMPW AX, #0x1122\r
- BZ $.+5\r
-\r
- /* Jump over the branch to vRegTestError() if the register contained the\r
- expected value - otherwise flag an error by executing vRegTestError(). */\r
- BR !!_vRegTestError\r
-\r
- /* Repeat for all the registers. */\r
- MOVW AX, BC\r
- CMPW AX, #0x3344\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0x5566\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0x7788\r
- BZ $.+5\r
- BR !!_vRegTestError\r
-\r
- /* Set AX back to its initial value. */\r
- MOVW AX, #0x1122\r
-\r
- SEL RB1\r
- CMPW AX, #0x1111\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, BC\r
- CMPW AX, #0x2222\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0x3333\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0x4444\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, #0x1111\r
-\r
-\r
- SEL RB2\r
- CMPW AX, #0x5555\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, BC\r
- CMPW AX, #0x6666\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0x7777\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0x8888\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, #0x5555\r
-\r
-\r
- /* Register bank 3 is not used outside of interrupts so is not saved as\r
- part of the task context. */\r
-\r
- SEL RB0\r
-\r
- /* Indicate that this task is still cycling. */\r
- INCW !_usRegTest1LoopCounter\r
-\r
- BR !!_loop1\r
-\r
-\r
-/*\r
- * Fill all the registers with known values, then check that the registers\r
- * contain the expected value. An incorrect value being indicative of an\r
- * error in the context switch mechanism.\r
- */\r
-_vRegTest2Task:\r
-\r
- SEL RB0\r
- MOVW AX, #0x99aa\r
- MOVW BC, #0xbbcc\r
- MOVW DE, #0xddee\r
- MOVW HL, #0xff12\r
- SEL RB1\r
- MOVW AX, #0x0110\r
- MOVW BC, #0x0220\r
- MOVW DE, #0x0330\r
- MOVW HL, #0x0440\r
- SEL RB2\r
- MOVW AX, #0x0550\r
- MOVW BC, #0x0660\r
- MOVW DE, #0x0770\r
- MOVW HL, #0x0880\r
-\r
- /* Register bank 3 is not used outside of interrupts so is not saved as\r
- part of the task context. */\r
- SEL RB0\r
-\r
-_loop2:\r
- CMPW AX, #0x99aa\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, BC\r
- CMPW AX, #0xbbcc\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0xddee\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0xff12\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, #0x99aa\r
-\r
- SEL RB1\r
- CMPW AX, #0x0110\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, BC\r
- CMPW AX, #0x0220\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0x0330\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0x0440\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, #0x0110\r
-\r
- SEL RB2\r
- CMPW AX, #0x0550\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, BC\r
- CMPW AX, #0x0660\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, DE\r
- CMPW AX, #0x0770\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, HL\r
- CMPW AX, #0x0880\r
- BZ $.+5\r
- BR !!_vRegTestError\r
- MOVW AX, #0x0550\r
-\r
- /* Register bank 3 is not used outside of interrupts so is not saved as\r
- part of the task context. */\r
-\r
- SEL RB0\r
-\r
- /* Indicate that this task is still cycling. */\r
- INCW !_usRegTest2LoopCounter\r
-\r
- BR !!_loop2\r
-\r
- .end\r
-\r