URL
https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk
Subversion Repositories open8_urisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 300 to Rev 301
- ↔ Reverse comparison
Rev 300 → Rev 301
/open8_urisc/trunk/taskmgr/APP.HEX
0,0 → 1,1026
:020000040000FA |
:20000000BC3280BB040008000A8039817F0F02000040000037833A833D8340834383438113 |
:20002000FF0F040000800000468349834C834F83528393FE28BD28C8401028C80200C803B0 |
:2000400000E000E114B1EA0880EB09805272110B73FA0371FA025CB86C2880FA0180FA00DA |
:2000600080288080808080808080E000E102B1EA0480EB05805272110B736CB8D211DA0151 |
:20008000E001E114B1EA0880EB09805272110B73FA0371FA025CB86C2880FA0180FA008019 |
:2000A000288080808080808080E001E102B1EA0480EB05805272110B736CB8D211DA012868 |
:2000C000C84110E0FFC84210C84310E000C84110E0FFBD28C80100E90100C9000001E002D7 |
:2000E000299002E100C90100E80000E102B1EA0480EB05805272110B73FA0171FA005CB873 |
:200100006CE80000E114B1EA0880EB09805272110B73FA04C80010FA05C80110FA06C80234 |
:2001200010FA07C80310FA08C82010E0FAC840108F8E8D8C8B8A8988BABF0090A9BF0B907F |
:2001400093FAA8BF00A0A9BF0BA093FAA828BD28C84010E0FFC80200E80000C80300E00062 |
:20016000E114B1EA0880EB09805272110B73FA08C82010E001E114B1EA0880EB0980527275 |
:20018000110B73FA08C82010BBBC88818081828384858687E80000E102B1EA0480EB0580E0 |
:2001A0005272110B736CB8D211DA01E90100C9000001E002299002E100C90100E80000E145 |
:2001C00002B1EA0480EB05805272110B73FA0171FA005CB86CE80000E114B1EA0880EB0961 |
:2001E000805272110B73FA04C80010FA05C80110FA06C80210FA07C80310FA08C82010E0EE |
:20020000FAC840108F8E8D8C8B8A8988BA808182832873E842107260980613E101197312D8 |
:2002200061980613E10219731262980613E10419731263980613E10819731264980613E104 |
:200240001019731265980613E12019731266980613E14019731267980613E180197312CB83 |
:200260004210CB43108B8A8988BA8081828384858687E80000E114B1EA0880EB09805272DA |
:20028000110B73FA0B80FA0A80B98F8E8D8C8B8A8988BA8081828384858687E80000E114FE |
:2002A000B1EA0880EB09805272110B73FA0D80FA0C80B98F8E8D8C8B8A8988BA8081828372 |
:2002C00084858687E80000E114B1EA0880EB09805272110B73FA0F80FA0E80B98F8E8D8C41 |
:2002E0008B8A8988BA8081828384858687E80000E114B1EA0880EB09805272110B73FA1130 |
:2003000080FA1080B98F8E8D8C8B8A8988BA8081828384858687E80000E114B1EA0880EBFD |
:2003200009805272110B73FA1380FA1280B98F8E8D8C8B8A8988BABC8A82BCB382BCDC8226 |
:20034000BC0583BC2E83BC8A82BCB382BCDC82BC0583BC2E83000000000000000000000068 |
:2003600000000000000000000000000000000000000000000000000000000000000000007D |
:2003800000000000000000000000000000000000000000000000000000000000000000005D |
:2003A00000000000000000000000000000000000000000000000000000000000000000003D |
:2003C00000000000000000000000000000000000000000000000000000000000000000001D |
:2003E0000000000000000000000000000000000000000000000000000000000000000000FD |
:200400000000000000000000000000000000000000000000000000000000000000000000DC |
:200420000000000000000000000000000000000000000000000000000000000000000000BC |
:2004400000000000000000000000000000000000000000000000000000000000000000009C |
:2004600000000000000000000000000000000000000000000000000000000000000000007C |
:2004800000000000000000000000000000000000000000000000000000000000000000005C |
:2004A00000000000000000000000000000000000000000000000000000000000000000003C |
:2004C00000000000000000000000000000000000000000000000000000000000000000001C |
:2004E0000000000000000000000000000000000000000000000000000000000000000000FC |
:200500000000000000000000000000000000000000000000000000000000000000000000DB |
:200520000000000000000000000000000000000000000000000000000000000000000000BB |
:2005400000000000000000000000000000000000000000000000000000000000000000009B |
:2005600000000000000000000000000000000000000000000000000000000000000000007B |
:2005800000000000000000000000000000000000000000000000000000000000000000005B |
:2005A00000000000000000000000000000000000000000000000000000000000000000003B |
:2005C00000000000000000000000000000000000000000000000000000000000000000001B |
:2005E0000000000000000000000000000000000000000000000000000000000000000000FB |
:200600000000000000000000000000000000000000000000000000000000000000000000DA |
:200620000000000000000000000000000000000000000000000000000000000000000000BA |
:2006400000000000000000000000000000000000000000000000000000000000000000009A |
:2006600000000000000000000000000000000000000000000000000000000000000000007A |
:2006800000000000000000000000000000000000000000000000000000000000000000005A |
:2006A00000000000000000000000000000000000000000000000000000000000000000003A |
:2006C00000000000000000000000000000000000000000000000000000000000000000001A |
:2006E0000000000000000000000000000000000000000000000000000000000000000000FA |
:200700000000000000000000000000000000000000000000000000000000000000000000D9 |
:200720000000000000000000000000000000000000000000000000000000000000000000B9 |
:20074000000000000000000000000000000000000000000000000000000000000000000099 |
:20076000000000000000000000000000000000000000000000000000000000000000000079 |
:20078000000000000000000000000000000000000000000000000000000000000000000059 |
:2007A000000000000000000000000000000000000000000000000000000000000000000039 |
:2007C000000000000000000000000000000000000000000000000000000000000000000019 |
:2007E0000000000000000000000000000000000000000000000000000000000000000000F9 |
:200800000000000000000000000000000000000000000000000000000000000000000000D8 |
:200820000000000000000000000000000000000000000000000000000000000000000000B8 |
:20084000000000000000000000000000000000000000000000000000000000000000000098 |
:20086000000000000000000000000000000000000000000000000000000000000000000078 |
:20088000000000000000000000000000000000000000000000000000000000000000000058 |
:2008A000000000000000000000000000000000000000000000000000000000000000000038 |
:2008C000000000000000000000000000000000000000000000000000000000000000000018 |
:2008E0000000000000000000000000000000000000000000000000000000000000000000F8 |
:200900000000000000000000000000000000000000000000000000000000000000000000D7 |
:200920000000000000000000000000000000000000000000000000000000000000000000B7 |
:20094000000000000000000000000000000000000000000000000000000000000000000097 |
:20096000000000000000000000000000000000000000000000000000000000000000000077 |
:20098000000000000000000000000000000000000000000000000000000000000000000057 |
:2009A000000000000000000000000000000000000000000000000000000000000000000037 |
:2009C000000000000000000000000000000000000000000000000000000000000000000017 |
:2009E0000000000000000000000000000000000000000000000000000000000000000000F7 |
:200A00000000000000000000000000000000000000000000000000000000000000000000D6 |
:200A20000000000000000000000000000000000000000000000000000000000000000000B6 |
:200A4000000000000000000000000000000000000000000000000000000000000000000096 |
:200A6000000000000000000000000000000000000000000000000000000000000000000076 |
:200A8000000000000000000000000000000000000000000000000000000000000000000056 |
:200AA000000000000000000000000000000000000000000000000000000000000000000036 |
:200AC000000000000000000000000000000000000000000000000000000000000000000016 |
:200AE0000000000000000000000000000000000000000000000000000000000000000000F6 |
:200B00000000000000000000000000000000000000000000000000000000000000000000D5 |
:200B20000000000000000000000000000000000000000000000000000000000000000000B5 |
:200B4000000000000000000000000000000000000000000000000000000000000000000095 |
:200B6000000000000000000000000000000000000000000000000000000000000000000075 |
:200B8000000000000000000000000000000000000000000000000000000000000000000055 |
:200BA000000000000000000000000000000000000000000000000000000000000000000035 |
:200BC000000000000000000000000000000000000000000000000000000000000000000015 |
:200BE0000000000000000000000000000000000000000000000000000000000000000000F5 |
:200C00000000000000000000000000000000000000000000000000000000000000000000D4 |
:200C20000000000000000000000000000000000000000000000000000000000000000000B4 |
:200C4000000000000000000000000000000000000000000000000000000000000000000094 |
:200C6000000000000000000000000000000000000000000000000000000000000000000074 |
:200C8000000000000000000000000000000000000000000000000000000000000000000054 |
:200CA000000000000000000000000000000000000000000000000000000000000000000034 |
:200CC000000000000000000000000000000000000000000000000000000000000000000014 |
:200CE0000000000000000000000000000000000000000000000000000000000000000000F4 |
:200D00000000000000000000000000000000000000000000000000000000000000000000D3 |
:200D20000000000000000000000000000000000000000000000000000000000000000000B3 |
:200D4000000000000000000000000000000000000000000000000000000000000000000093 |
:200D6000000000000000000000000000000000000000000000000000000000000000000073 |
:200D8000000000000000000000000000000000000000000000000000000000000000000053 |
:200DA000000000000000000000000000000000000000000000000000000000000000000033 |
:200DC000000000000000000000000000000000000000000000000000000000000000000013 |
:200DE0000000000000000000000000000000000000000000000000000000000000000000F3 |
:200E00000000000000000000000000000000000000000000000000000000000000000000D2 |
:200E20000000000000000000000000000000000000000000000000000000000000000000B2 |
:200E4000000000000000000000000000000000000000000000000000000000000000000092 |
:200E6000000000000000000000000000000000000000000000000000000000000000000072 |
:200E8000000000000000000000000000000000000000000000000000000000000000000052 |
:200EA000000000000000000000000000000000000000000000000000000000000000000032 |
:200EC000000000000000000000000000000000000000000000000000000000000000000012 |
:200EE0000000000000000000000000000000000000000000000000000000000000000000F2 |
:200F00000000000000000000000000000000000000000000000000000000000000000000D1 |
:200F20000000000000000000000000000000000000000000000000000000000000000000B1 |
:200F4000000000000000000000000000000000000000000000000000000000000000000091 |
:200F6000000000000000000000000000000000000000000000000000000000000000000071 |
:200F8000000000000000000000000000000000000000000000000000000000000000000051 |
:200FA000000000000000000000000000000000000000000000000000000000000000000031 |
:200FC000000000000000000000000000000000000000000000000000000000000000000011 |
:200FE0000000000000000000000000000000000000000000000000000000000000000000F1 |
:20100000E054C88000E030C88100B9B9000000000000000000000000000000000000000089 |
:201020000000000000000000000000000000000000000000000000000000000000000000B0 |
:20104000000000000000000000000000000000000000000000000000000000000000000090 |
:20106000000000000000000000000000000000000000000000000000000000000000000070 |
:20108000000000000000000000000000000000000000000000000000000000000000000050 |
:2010A000000000000000000000000000000000000000000000000000000000000000000030 |
:2010C000000000000000000000000000000000000000000000000000000000000000000010 |
:2010E0000000000000000000000000000000000000000000000000000000000000000000F0 |
:201100000000000000000000000000000000000000000000000000000000000000000000CF |
:201120000000000000000000000000000000000000000000000000000000000000000000AF |
:2011400000000000000000000000000000000000000000000000000000000000000000008F |
:2011600000000000000000000000000000000000000000000000000000000000000000006F |
:2011800000000000000000000000000000000000000000000000000000000000000000004F |
:2011A00000000000000000000000000000000000000000000000000000000000000000002F |
:2011C00000000000000000000000000000000000000000000000000000000000000000000F |
:2011E0000000000000000000000000000000000000000000000000000000000000000000EF |
:201200000000000000000000000000000000000000000000000000000000000000000000CE |
:201220000000000000000000000000000000000000000000000000000000000000000000AE |
:2012400000000000000000000000000000000000000000000000000000000000000000008E |
:2012600000000000000000000000000000000000000000000000000000000000000000006E |
:2012800000000000000000000000000000000000000000000000000000000000000000004E |
:2012A00000000000000000000000000000000000000000000000000000000000000000002E |
:2012C00000000000000000000000000000000000000000000000000000000000000000000E |
:2012E0000000000000000000000000000000000000000000000000000000000000000000EE |
:201300000000000000000000000000000000000000000000000000000000000000000000CD |
:201320000000000000000000000000000000000000000000000000000000000000000000AD |
:2013400000000000000000000000000000000000000000000000000000000000000000008D |
:2013600000000000000000000000000000000000000000000000000000000000000000006D |
:2013800000000000000000000000000000000000000000000000000000000000000000004D |
:2013A00000000000000000000000000000000000000000000000000000000000000000002D |
:2013C00000000000000000000000000000000000000000000000000000000000000000000D |
:2013E0000000000000000000000000000000000000000000000000000000000000000000ED |
:201400000000000000000000000000000000000000000000000000000000000000000000CC |
:201420000000000000000000000000000000000000000000000000000000000000000000AC |
:2014400000000000000000000000000000000000000000000000000000000000000000008C |
:2014600000000000000000000000000000000000000000000000000000000000000000006C |
:2014800000000000000000000000000000000000000000000000000000000000000000004C |
:2014A00000000000000000000000000000000000000000000000000000000000000000002C |
:2014C00000000000000000000000000000000000000000000000000000000000000000000C |
:2014E0000000000000000000000000000000000000000000000000000000000000000000EC |
:201500000000000000000000000000000000000000000000000000000000000000000000CB |
:201520000000000000000000000000000000000000000000000000000000000000000000AB |
:2015400000000000000000000000000000000000000000000000000000000000000000008B |
:2015600000000000000000000000000000000000000000000000000000000000000000006B |
:2015800000000000000000000000000000000000000000000000000000000000000000004B |
:2015A00000000000000000000000000000000000000000000000000000000000000000002B |
:2015C00000000000000000000000000000000000000000000000000000000000000000000B |
:2015E0000000000000000000000000000000000000000000000000000000000000000000EB |
:201600000000000000000000000000000000000000000000000000000000000000000000CA |
:201620000000000000000000000000000000000000000000000000000000000000000000AA |
:2016400000000000000000000000000000000000000000000000000000000000000000008A |
:2016600000000000000000000000000000000000000000000000000000000000000000006A |
:2016800000000000000000000000000000000000000000000000000000000000000000004A |
:2016A00000000000000000000000000000000000000000000000000000000000000000002A |
:2016C00000000000000000000000000000000000000000000000000000000000000000000A |
:2016E0000000000000000000000000000000000000000000000000000000000000000000EA |
:201700000000000000000000000000000000000000000000000000000000000000000000C9 |
:201720000000000000000000000000000000000000000000000000000000000000000000A9 |
:20174000000000000000000000000000000000000000000000000000000000000000000089 |
:20176000000000000000000000000000000000000000000000000000000000000000000069 |
:20178000000000000000000000000000000000000000000000000000000000000000000049 |
:2017A000000000000000000000000000000000000000000000000000000000000000000029 |
:2017C000000000000000000000000000000000000000000000000000000000000000000009 |
:2017E0000000000000000000000000000000000000000000000000000000000000000000E9 |
:201800000000000000000000000000000000000000000000000000000000000000000000C8 |
:201820000000000000000000000000000000000000000000000000000000000000000000A8 |
:20184000000000000000000000000000000000000000000000000000000000000000000088 |
:20186000000000000000000000000000000000000000000000000000000000000000000068 |
:20188000000000000000000000000000000000000000000000000000000000000000000048 |
:2018A000000000000000000000000000000000000000000000000000000000000000000028 |
:2018C000000000000000000000000000000000000000000000000000000000000000000008 |
:2018E0000000000000000000000000000000000000000000000000000000000000000000E8 |
:201900000000000000000000000000000000000000000000000000000000000000000000C7 |
:201920000000000000000000000000000000000000000000000000000000000000000000A7 |
:20194000000000000000000000000000000000000000000000000000000000000000000087 |
:20196000000000000000000000000000000000000000000000000000000000000000000067 |
:20198000000000000000000000000000000000000000000000000000000000000000000047 |
:2019A000000000000000000000000000000000000000000000000000000000000000000027 |
:2019C000000000000000000000000000000000000000000000000000000000000000000007 |
:2019E0000000000000000000000000000000000000000000000000000000000000000000E7 |
:201A00000000000000000000000000000000000000000000000000000000000000000000C6 |
:201A20000000000000000000000000000000000000000000000000000000000000000000A6 |
:201A4000000000000000000000000000000000000000000000000000000000000000000086 |
:201A6000000000000000000000000000000000000000000000000000000000000000000066 |
:201A8000000000000000000000000000000000000000000000000000000000000000000046 |
:201AA000000000000000000000000000000000000000000000000000000000000000000026 |
:201AC000000000000000000000000000000000000000000000000000000000000000000006 |
:201AE0000000000000000000000000000000000000000000000000000000000000000000E6 |
:201B00000000000000000000000000000000000000000000000000000000000000000000C5 |
:201B20000000000000000000000000000000000000000000000000000000000000000000A5 |
:201B4000000000000000000000000000000000000000000000000000000000000000000085 |
:201B6000000000000000000000000000000000000000000000000000000000000000000065 |
:201B8000000000000000000000000000000000000000000000000000000000000000000045 |
:201BA000000000000000000000000000000000000000000000000000000000000000000025 |
:201BC000000000000000000000000000000000000000000000000000000000000000000005 |
:201BE0000000000000000000000000000000000000000000000000000000000000000000E5 |
:201C00000000000000000000000000000000000000000000000000000000000000000000C4 |
:201C20000000000000000000000000000000000000000000000000000000000000000000A4 |
:201C4000000000000000000000000000000000000000000000000000000000000000000084 |
:201C6000000000000000000000000000000000000000000000000000000000000000000064 |
:201C8000000000000000000000000000000000000000000000000000000000000000000044 |
:201CA000000000000000000000000000000000000000000000000000000000000000000024 |
:201CC000000000000000000000000000000000000000000000000000000000000000000004 |
:201CE0000000000000000000000000000000000000000000000000000000000000000000E4 |
:201D00000000000000000000000000000000000000000000000000000000000000000000C3 |
:201D20000000000000000000000000000000000000000000000000000000000000000000A3 |
:201D4000000000000000000000000000000000000000000000000000000000000000000083 |
:201D6000000000000000000000000000000000000000000000000000000000000000000063 |
:201D8000000000000000000000000000000000000000000000000000000000000000000043 |
:201DA000000000000000000000000000000000000000000000000000000000000000000023 |
:201DC000000000000000000000000000000000000000000000000000000000000000000003 |
:201DE0000000000000000000000000000000000000000000000000000000000000000000E3 |
:201E00000000000000000000000000000000000000000000000000000000000000000000C2 |
:201E20000000000000000000000000000000000000000000000000000000000000000000A2 |
:201E4000000000000000000000000000000000000000000000000000000000000000000082 |
:201E6000000000000000000000000000000000000000000000000000000000000000000062 |
:201E8000000000000000000000000000000000000000000000000000000000000000000042 |
:201EA000000000000000000000000000000000000000000000000000000000000000000022 |
:201EC000000000000000000000000000000000000000000000000000000000000000000002 |
:201EE0000000000000000000000000000000000000000000000000000000000000000000E2 |
:201F00000000000000000000000000000000000000000000000000000000000000000000C1 |
:201F20000000000000000000000000000000000000000000000000000000000000000000A1 |
:201F4000000000000000000000000000000000000000000000000000000000000000000081 |
:201F6000000000000000000000000000000000000000000000000000000000000000000061 |
:201F8000000000000000000000000000000000000000000000000000000000000000000041 |
:201FA000000000000000000000000000000000000000000000000000000000000000000021 |
:201FC000000000000000000000000000000000000000000000000000000000000000000001 |
:201FE0000000000000000000000000000000000000000000000000000000000000000000E1 |
:20200000E054C80001E031C80101B9B9000000000000000000000000000000000000000076 |
:202020000000000000000000000000000000000000000000000000000000000000000000A0 |
:20204000000000000000000000000000000000000000000000000000000000000000000080 |
:20206000000000000000000000000000000000000000000000000000000000000000000060 |
:20208000000000000000000000000000000000000000000000000000000000000000000040 |
:2020A000000000000000000000000000000000000000000000000000000000000000000020 |
:2020C000000000000000000000000000000000000000000000000000000000000000000000 |
:2020E0000000000000000000000000000000000000000000000000000000000000000000E0 |
:202100000000000000000000000000000000000000000000000000000000000000000000BF |
:2021200000000000000000000000000000000000000000000000000000000000000000009F |
:2021400000000000000000000000000000000000000000000000000000000000000000007F |
:2021600000000000000000000000000000000000000000000000000000000000000000005F |
:2021800000000000000000000000000000000000000000000000000000000000000000003F |
:2021A00000000000000000000000000000000000000000000000000000000000000000001F |
:2021C0000000000000000000000000000000000000000000000000000000000000000000FF |
:2021E0000000000000000000000000000000000000000000000000000000000000000000DF |
:202200000000000000000000000000000000000000000000000000000000000000000000BE |
:2022200000000000000000000000000000000000000000000000000000000000000000009E |
:2022400000000000000000000000000000000000000000000000000000000000000000007E |
:2022600000000000000000000000000000000000000000000000000000000000000000005E |
:2022800000000000000000000000000000000000000000000000000000000000000000003E |
:2022A00000000000000000000000000000000000000000000000000000000000000000001E |
:2022C0000000000000000000000000000000000000000000000000000000000000000000FE |
:2022E0000000000000000000000000000000000000000000000000000000000000000000DE |
:202300000000000000000000000000000000000000000000000000000000000000000000BD |
:2023200000000000000000000000000000000000000000000000000000000000000000009D |
:2023400000000000000000000000000000000000000000000000000000000000000000007D |
:2023600000000000000000000000000000000000000000000000000000000000000000005D |
:2023800000000000000000000000000000000000000000000000000000000000000000003D |
:2023A00000000000000000000000000000000000000000000000000000000000000000001D |
:2023C0000000000000000000000000000000000000000000000000000000000000000000FD |
:2023E0000000000000000000000000000000000000000000000000000000000000000000DD |
:202400000000000000000000000000000000000000000000000000000000000000000000BC |
:2024200000000000000000000000000000000000000000000000000000000000000000009C |
:2024400000000000000000000000000000000000000000000000000000000000000000007C |
:2024600000000000000000000000000000000000000000000000000000000000000000005C |
:2024800000000000000000000000000000000000000000000000000000000000000000003C |
:2024A00000000000000000000000000000000000000000000000000000000000000000001C |
:2024C0000000000000000000000000000000000000000000000000000000000000000000FC |
:2024E0000000000000000000000000000000000000000000000000000000000000000000DC |
:202500000000000000000000000000000000000000000000000000000000000000000000BB |
:2025200000000000000000000000000000000000000000000000000000000000000000009B |
:2025400000000000000000000000000000000000000000000000000000000000000000007B |
:2025600000000000000000000000000000000000000000000000000000000000000000005B |
:2025800000000000000000000000000000000000000000000000000000000000000000003B |
:2025A00000000000000000000000000000000000000000000000000000000000000000001B |
:2025C0000000000000000000000000000000000000000000000000000000000000000000FB |
:2025E0000000000000000000000000000000000000000000000000000000000000000000DB |
:202600000000000000000000000000000000000000000000000000000000000000000000BA |
:2026200000000000000000000000000000000000000000000000000000000000000000009A |
:2026400000000000000000000000000000000000000000000000000000000000000000007A |
:2026600000000000000000000000000000000000000000000000000000000000000000005A |
:2026800000000000000000000000000000000000000000000000000000000000000000003A |
:2026A00000000000000000000000000000000000000000000000000000000000000000001A |
:2026C0000000000000000000000000000000000000000000000000000000000000000000FA |
:2026E0000000000000000000000000000000000000000000000000000000000000000000DA |
:202700000000000000000000000000000000000000000000000000000000000000000000B9 |
:20272000000000000000000000000000000000000000000000000000000000000000000099 |
:20274000000000000000000000000000000000000000000000000000000000000000000079 |
:20276000000000000000000000000000000000000000000000000000000000000000000059 |
:20278000000000000000000000000000000000000000000000000000000000000000000039 |
:2027A000000000000000000000000000000000000000000000000000000000000000000019 |
:2027C0000000000000000000000000000000000000000000000000000000000000000000F9 |
:2027E0000000000000000000000000000000000000000000000000000000000000000000D9 |
:202800000000000000000000000000000000000000000000000000000000000000000000B8 |
:20282000000000000000000000000000000000000000000000000000000000000000000098 |
:20284000000000000000000000000000000000000000000000000000000000000000000078 |
:20286000000000000000000000000000000000000000000000000000000000000000000058 |
:20288000000000000000000000000000000000000000000000000000000000000000000038 |
:2028A000000000000000000000000000000000000000000000000000000000000000000018 |
:2028C0000000000000000000000000000000000000000000000000000000000000000000F8 |
:2028E0000000000000000000000000000000000000000000000000000000000000000000D8 |
:202900000000000000000000000000000000000000000000000000000000000000000000B7 |
:20292000000000000000000000000000000000000000000000000000000000000000000097 |
:20294000000000000000000000000000000000000000000000000000000000000000000077 |
:20296000000000000000000000000000000000000000000000000000000000000000000057 |
:20298000000000000000000000000000000000000000000000000000000000000000000037 |
:2029A000000000000000000000000000000000000000000000000000000000000000000017 |
:2029C0000000000000000000000000000000000000000000000000000000000000000000F7 |
:2029E0000000000000000000000000000000000000000000000000000000000000000000D7 |
:202A00000000000000000000000000000000000000000000000000000000000000000000B6 |
:202A2000000000000000000000000000000000000000000000000000000000000000000096 |
:202A4000000000000000000000000000000000000000000000000000000000000000000076 |
:202A6000000000000000000000000000000000000000000000000000000000000000000056 |
:202A8000000000000000000000000000000000000000000000000000000000000000000036 |
:202AA000000000000000000000000000000000000000000000000000000000000000000016 |
:202AC0000000000000000000000000000000000000000000000000000000000000000000F6 |
:202AE0000000000000000000000000000000000000000000000000000000000000000000D6 |
:202B00000000000000000000000000000000000000000000000000000000000000000000B5 |
:202B2000000000000000000000000000000000000000000000000000000000000000000095 |
:202B4000000000000000000000000000000000000000000000000000000000000000000075 |
:202B6000000000000000000000000000000000000000000000000000000000000000000055 |
:202B8000000000000000000000000000000000000000000000000000000000000000000035 |
:202BA000000000000000000000000000000000000000000000000000000000000000000015 |
:202BC0000000000000000000000000000000000000000000000000000000000000000000F5 |
:202BE0000000000000000000000000000000000000000000000000000000000000000000D5 |
:202C00000000000000000000000000000000000000000000000000000000000000000000B4 |
:202C2000000000000000000000000000000000000000000000000000000000000000000094 |
:202C4000000000000000000000000000000000000000000000000000000000000000000074 |
:202C6000000000000000000000000000000000000000000000000000000000000000000054 |
:202C8000000000000000000000000000000000000000000000000000000000000000000034 |
:202CA000000000000000000000000000000000000000000000000000000000000000000014 |
:202CC0000000000000000000000000000000000000000000000000000000000000000000F4 |
:202CE0000000000000000000000000000000000000000000000000000000000000000000D4 |
:202D00000000000000000000000000000000000000000000000000000000000000000000B3 |
:202D2000000000000000000000000000000000000000000000000000000000000000000093 |
:202D4000000000000000000000000000000000000000000000000000000000000000000073 |
:202D6000000000000000000000000000000000000000000000000000000000000000000053 |
:202D8000000000000000000000000000000000000000000000000000000000000000000033 |
:202DA000000000000000000000000000000000000000000000000000000000000000000013 |
:202DC0000000000000000000000000000000000000000000000000000000000000000000F3 |
:202DE0000000000000000000000000000000000000000000000000000000000000000000D3 |
:202E00000000000000000000000000000000000000000000000000000000000000000000B2 |
:202E2000000000000000000000000000000000000000000000000000000000000000000092 |
:202E4000000000000000000000000000000000000000000000000000000000000000000072 |
:202E6000000000000000000000000000000000000000000000000000000000000000000052 |
:202E8000000000000000000000000000000000000000000000000000000000000000000032 |
:202EA000000000000000000000000000000000000000000000000000000000000000000012 |
:202EC0000000000000000000000000000000000000000000000000000000000000000000F2 |
:202EE0000000000000000000000000000000000000000000000000000000000000000000D2 |
:202F00000000000000000000000000000000000000000000000000000000000000000000B1 |
:202F2000000000000000000000000000000000000000000000000000000000000000000091 |
:202F4000000000000000000000000000000000000000000000000000000000000000000071 |
:202F6000000000000000000000000000000000000000000000000000000000000000000051 |
:202F8000000000000000000000000000000000000000000000000000000000000000000031 |
:202FA000000000000000000000000000000000000000000000000000000000000000000011 |
:202FC0000000000000000000000000000000000000000000000000000000000000000000F1 |
:202FE0000000000000000000000000000000000000000000000000000000000000000000D1 |
:203000000000000000000000000000000000000000000000000000000000000000000000B0 |
:20302000000000000000000000000000000000000000000000000000000000000000000090 |
:20304000000000000000000000000000000000000000000000000000000000000000000070 |
:20306000000000000000000000000000000000000000000000000000000000000000000050 |
:20308000000000000000000000000000000000000000000000000000000000000000000030 |
:2030A000000000000000000000000000000000000000000000000000000000000000000010 |
:2030C0000000000000000000000000000000000000000000000000000000000000000000F0 |
:2030E0000000000000000000000000000000000000000000000000000000000000000000D0 |
:203100000000000000000000000000000000000000000000000000000000000000000000AF |
:2031200000000000000000000000000000000000000000000000000000000000000000008F |
:2031400000000000000000000000000000000000000000000000000000000000000000006F |
:2031600000000000000000000000000000000000000000000000000000000000000000004F |
:2031800000000000000000000000000000000000000000000000000000000000000000002F |
:2031A00000000000000000000000000000000000000000000000000000000000000000000F |
:2031C0000000000000000000000000000000000000000000000000000000000000000000EF |
:2031E0000000000000000000000000000000000000000000000000000000000000000000CF |
:203200000000000000000000000000000000000000000000000000000000000000000000AE |
:2032200000000000000000000000000000000000000000000000000000000000000000008E |
:2032400000000000000000000000000000000000000000000000000000000000000000006E |
:2032600000000000000000000000000000000000000000000000000000000000000000004E |
:2032800000000000000000000000000000000000000000000000000000000000000000002E |
:2032A00000000000000000000000000000000000000000000000000000000000000000000E |
:2032C0000000000000000000000000000000000000000000000000000000000000000000EE |
:2032E0000000000000000000000000000000000000000000000000000000000000000000CE |
:203300000000000000000000000000000000000000000000000000000000000000000000AD |
:2033200000000000000000000000000000000000000000000000000000000000000000008D |
:2033400000000000000000000000000000000000000000000000000000000000000000006D |
:2033600000000000000000000000000000000000000000000000000000000000000000004D |
:2033800000000000000000000000000000000000000000000000000000000000000000002D |
:2033A00000000000000000000000000000000000000000000000000000000000000000000D |
:2033C0000000000000000000000000000000000000000000000000000000000000000000ED |
:2033E0000000000000000000000000000000000000000000000000000000000000000000CD |
:203400000000000000000000000000000000000000000000000000000000000000000000AC |
:2034200000000000000000000000000000000000000000000000000000000000000000008C |
:2034400000000000000000000000000000000000000000000000000000000000000000006C |
:2034600000000000000000000000000000000000000000000000000000000000000000004C |
:2034800000000000000000000000000000000000000000000000000000000000000000002C |
:2034A00000000000000000000000000000000000000000000000000000000000000000000C |
:2034C0000000000000000000000000000000000000000000000000000000000000000000EC |
:2034E0000000000000000000000000000000000000000000000000000000000000000000CC |
:203500000000000000000000000000000000000000000000000000000000000000000000AB |
:2035200000000000000000000000000000000000000000000000000000000000000000008B |
:2035400000000000000000000000000000000000000000000000000000000000000000006B |
:2035600000000000000000000000000000000000000000000000000000000000000000004B |
:2035800000000000000000000000000000000000000000000000000000000000000000002B |
:2035A00000000000000000000000000000000000000000000000000000000000000000000B |
:2035C0000000000000000000000000000000000000000000000000000000000000000000EB |
:2035E0000000000000000000000000000000000000000000000000000000000000000000CB |
:203600000000000000000000000000000000000000000000000000000000000000000000AA |
:2036200000000000000000000000000000000000000000000000000000000000000000008A |
:2036400000000000000000000000000000000000000000000000000000000000000000006A |
:2036600000000000000000000000000000000000000000000000000000000000000000004A |
:2036800000000000000000000000000000000000000000000000000000000000000000002A |
:2036A00000000000000000000000000000000000000000000000000000000000000000000A |
:2036C0000000000000000000000000000000000000000000000000000000000000000000EA |
:2036E0000000000000000000000000000000000000000000000000000000000000000000CA |
:203700000000000000000000000000000000000000000000000000000000000000000000A9 |
:20372000000000000000000000000000000000000000000000000000000000000000000089 |
:20374000000000000000000000000000000000000000000000000000000000000000000069 |
:20376000000000000000000000000000000000000000000000000000000000000000000049 |
:20378000000000000000000000000000000000000000000000000000000000000000000029 |
:2037A000000000000000000000000000000000000000000000000000000000000000000009 |
:2037C0000000000000000000000000000000000000000000000000000000000000000000E9 |
:2037E0000000000000000000000000000000000000000000000000000000000000000000C9 |
:203800000000000000000000000000000000000000000000000000000000000000000000A8 |
:20382000000000000000000000000000000000000000000000000000000000000000000088 |
:20384000000000000000000000000000000000000000000000000000000000000000000068 |
:20386000000000000000000000000000000000000000000000000000000000000000000048 |
:20388000000000000000000000000000000000000000000000000000000000000000000028 |
:2038A000000000000000000000000000000000000000000000000000000000000000000008 |
:2038C0000000000000000000000000000000000000000000000000000000000000000000E8 |
:2038E0000000000000000000000000000000000000000000000000000000000000000000C8 |
:203900000000000000000000000000000000000000000000000000000000000000000000A7 |
:20392000000000000000000000000000000000000000000000000000000000000000000087 |
:20394000000000000000000000000000000000000000000000000000000000000000000067 |
:20396000000000000000000000000000000000000000000000000000000000000000000047 |
:20398000000000000000000000000000000000000000000000000000000000000000000027 |
:2039A000000000000000000000000000000000000000000000000000000000000000000007 |
:2039C0000000000000000000000000000000000000000000000000000000000000000000E7 |
:2039E0000000000000000000000000000000000000000000000000000000000000000000C7 |
:203A00000000000000000000000000000000000000000000000000000000000000000000A6 |
:203A2000000000000000000000000000000000000000000000000000000000000000000086 |
:203A4000000000000000000000000000000000000000000000000000000000000000000066 |
:203A6000000000000000000000000000000000000000000000000000000000000000000046 |
:203A8000000000000000000000000000000000000000000000000000000000000000000026 |
:203AA000000000000000000000000000000000000000000000000000000000000000000006 |
:203AC0000000000000000000000000000000000000000000000000000000000000000000E6 |
:203AE0000000000000000000000000000000000000000000000000000000000000000000C6 |
:203B00000000000000000000000000000000000000000000000000000000000000000000A5 |
:203B2000000000000000000000000000000000000000000000000000000000000000000085 |
:203B4000000000000000000000000000000000000000000000000000000000000000000065 |
:203B6000000000000000000000000000000000000000000000000000000000000000000045 |
:203B8000000000000000000000000000000000000000000000000000000000000000000025 |
:203BA000000000000000000000000000000000000000000000000000000000000000000005 |
:203BC0000000000000000000000000000000000000000000000000000000000000000000E5 |
:203BE0000000000000000000000000000000000000000000000000000000000000000000C5 |
:203C00000000000000000000000000000000000000000000000000000000000000000000A4 |
:203C2000000000000000000000000000000000000000000000000000000000000000000084 |
:203C4000000000000000000000000000000000000000000000000000000000000000000064 |
:203C6000000000000000000000000000000000000000000000000000000000000000000044 |
:203C8000000000000000000000000000000000000000000000000000000000000000000024 |
:203CA000000000000000000000000000000000000000000000000000000000000000000004 |
:203CC0000000000000000000000000000000000000000000000000000000000000000000E4 |
:203CE0000000000000000000000000000000000000000000000000000000000000000000C4 |
:203D00000000000000000000000000000000000000000000000000000000000000000000A3 |
:203D2000000000000000000000000000000000000000000000000000000000000000000083 |
:203D4000000000000000000000000000000000000000000000000000000000000000000063 |
:203D6000000000000000000000000000000000000000000000000000000000000000000043 |
:203D8000000000000000000000000000000000000000000000000000000000000000000023 |
:203DA000000000000000000000000000000000000000000000000000000000000000000003 |
:203DC0000000000000000000000000000000000000000000000000000000000000000000E3 |
:203DE0000000000000000000000000000000000000000000000000000000000000000000C3 |
:203E00000000000000000000000000000000000000000000000000000000000000000000A2 |
:203E2000000000000000000000000000000000000000000000000000000000000000000082 |
:203E4000000000000000000000000000000000000000000000000000000000000000000062 |
:203E6000000000000000000000000000000000000000000000000000000000000000000042 |
:203E8000000000000000000000000000000000000000000000000000000000000000000022 |
:203EA000000000000000000000000000000000000000000000000000000000000000000002 |
:203EC0000000000000000000000000000000000000000000000000000000000000000000E2 |
:203EE0000000000000000000000000000000000000000000000000000000000000000000C2 |
:203F00000000000000000000000000000000000000000000000000000000000000000000A1 |
:203F2000000000000000000000000000000000000000000000000000000000000000000081 |
:203F4000000000000000000000000000000000000000000000000000000000000000000061 |
:203F6000000000000000000000000000000000000000000000000000000000000000000041 |
:203F8000000000000000000000000000000000000000000000000000000000000000000021 |
:203FA000000000000000000000000000000000000000000000000000000000000000000001 |
:203FC0000000000000000000000000000000000000000000000000000000000000000000E1 |
:203FE0000000000000000000000000000000000000000000000000000000000000000000C1 |
:204000000000000000000000000000000000000000000000000000000000000000000000A0 |
:20402000000000000000000000000000000000000000000000000000000000000000000080 |
:20404000000000000000000000000000000000000000000000000000000000000000000060 |
:20406000000000000000000000000000000000000000000000000000000000000000000040 |
:20408000000000000000000000000000000000000000000000000000000000000000000020 |
:2040A000000000000000000000000000000000000000000000000000000000000000000000 |
:2040C0000000000000000000000000000000000000000000000000000000000000000000E0 |
:2040E0000000000000000000000000000000000000000000000000000000000000000000C0 |
:2041000000000000000000000000000000000000000000000000000000000000000000009F |
:2041200000000000000000000000000000000000000000000000000000000000000000007F |
:2041400000000000000000000000000000000000000000000000000000000000000000005F |
:2041600000000000000000000000000000000000000000000000000000000000000000003F |
:2041800000000000000000000000000000000000000000000000000000000000000000001F |
:2041A0000000000000000000000000000000000000000000000000000000000000000000FF |
:2041C0000000000000000000000000000000000000000000000000000000000000000000DF |
:2041E0000000000000000000000000000000000000000000000000000000000000000000BF |
:2042000000000000000000000000000000000000000000000000000000000000000000009E |
:2042200000000000000000000000000000000000000000000000000000000000000000007E |
:2042400000000000000000000000000000000000000000000000000000000000000000005E |
:2042600000000000000000000000000000000000000000000000000000000000000000003E |
:2042800000000000000000000000000000000000000000000000000000000000000000001E |
:2042A0000000000000000000000000000000000000000000000000000000000000000000FE |
:2042C0000000000000000000000000000000000000000000000000000000000000000000DE |
:2042E0000000000000000000000000000000000000000000000000000000000000000000BE |
:2043000000000000000000000000000000000000000000000000000000000000000000009D |
:2043200000000000000000000000000000000000000000000000000000000000000000007D |
:2043400000000000000000000000000000000000000000000000000000000000000000005D |
:2043600000000000000000000000000000000000000000000000000000000000000000003D |
:2043800000000000000000000000000000000000000000000000000000000000000000001D |
:2043A0000000000000000000000000000000000000000000000000000000000000000000FD |
:2043C0000000000000000000000000000000000000000000000000000000000000000000DD |
:2043E0000000000000000000000000000000000000000000000000000000000000000000BD |
:2044000000000000000000000000000000000000000000000000000000000000000000009C |
:2044200000000000000000000000000000000000000000000000000000000000000000007C |
:2044400000000000000000000000000000000000000000000000000000000000000000005C |
:2044600000000000000000000000000000000000000000000000000000000000000000003C |
:2044800000000000000000000000000000000000000000000000000000000000000000001C |
:2044A0000000000000000000000000000000000000000000000000000000000000000000FC |
:2044C0000000000000000000000000000000000000000000000000000000000000000000DC |
:2044E0000000000000000000000000000000000000000000000000000000000000000000BC |
:2045000000000000000000000000000000000000000000000000000000000000000000009B |
:2045200000000000000000000000000000000000000000000000000000000000000000007B |
:2045400000000000000000000000000000000000000000000000000000000000000000005B |
:2045600000000000000000000000000000000000000000000000000000000000000000003B |
:2045800000000000000000000000000000000000000000000000000000000000000000001B |
:2045A0000000000000000000000000000000000000000000000000000000000000000000FB |
:2045C0000000000000000000000000000000000000000000000000000000000000000000DB |
:2045E0000000000000000000000000000000000000000000000000000000000000000000BB |
:2046000000000000000000000000000000000000000000000000000000000000000000009A |
:2046200000000000000000000000000000000000000000000000000000000000000000007A |
:2046400000000000000000000000000000000000000000000000000000000000000000005A |
:2046600000000000000000000000000000000000000000000000000000000000000000003A |
:2046800000000000000000000000000000000000000000000000000000000000000000001A |
:2046A0000000000000000000000000000000000000000000000000000000000000000000FA |
:2046C0000000000000000000000000000000000000000000000000000000000000000000DA |
:2046E0000000000000000000000000000000000000000000000000000000000000000000BA |
:20470000000000000000000000000000000000000000000000000000000000000000000099 |
:20472000000000000000000000000000000000000000000000000000000000000000000079 |
:20474000000000000000000000000000000000000000000000000000000000000000000059 |
:20476000000000000000000000000000000000000000000000000000000000000000000039 |
:20478000000000000000000000000000000000000000000000000000000000000000000019 |
:2047A0000000000000000000000000000000000000000000000000000000000000000000F9 |
:2047C0000000000000000000000000000000000000000000000000000000000000000000D9 |
:2047E0000000000000000000000000000000000000000000000000000000000000000000B9 |
:20480000000000000000000000000000000000000000000000000000000000000000000098 |
:20482000000000000000000000000000000000000000000000000000000000000000000078 |
:20484000000000000000000000000000000000000000000000000000000000000000000058 |
:20486000000000000000000000000000000000000000000000000000000000000000000038 |
:20488000000000000000000000000000000000000000000000000000000000000000000018 |
:2048A0000000000000000000000000000000000000000000000000000000000000000000F8 |
:2048C0000000000000000000000000000000000000000000000000000000000000000000D8 |
:2048E0000000000000000000000000000000000000000000000000000000000000000000B8 |
:20490000000000000000000000000000000000000000000000000000000000000000000097 |
:20492000000000000000000000000000000000000000000000000000000000000000000077 |
:20494000000000000000000000000000000000000000000000000000000000000000000057 |
:20496000000000000000000000000000000000000000000000000000000000000000000037 |
:20498000000000000000000000000000000000000000000000000000000000000000000017 |
:2049A0000000000000000000000000000000000000000000000000000000000000000000F7 |
:2049C0000000000000000000000000000000000000000000000000000000000000000000D7 |
:2049E0000000000000000000000000000000000000000000000000000000000000000000B7 |
:204A0000000000000000000000000000000000000000000000000000000000000000000096 |
:204A2000000000000000000000000000000000000000000000000000000000000000000076 |
:204A4000000000000000000000000000000000000000000000000000000000000000000056 |
:204A6000000000000000000000000000000000000000000000000000000000000000000036 |
:204A8000000000000000000000000000000000000000000000000000000000000000000016 |
:204AA0000000000000000000000000000000000000000000000000000000000000000000F6 |
:204AC0000000000000000000000000000000000000000000000000000000000000000000D6 |
:204AE0000000000000000000000000000000000000000000000000000000000000000000B6 |
:204B0000000000000000000000000000000000000000000000000000000000000000000095 |
:204B2000000000000000000000000000000000000000000000000000000000000000000075 |
:204B4000000000000000000000000000000000000000000000000000000000000000000055 |
:204B6000000000000000000000000000000000000000000000000000000000000000000035 |
:204B8000000000000000000000000000000000000000000000000000000000000000000015 |
:204BA0000000000000000000000000000000000000000000000000000000000000000000F5 |
:204BC0000000000000000000000000000000000000000000000000000000000000000000D5 |
:204BE0000000000000000000000000000000000000000000000000000000000000000000B5 |
:204C0000000000000000000000000000000000000000000000000000000000000000000094 |
:204C2000000000000000000000000000000000000000000000000000000000000000000074 |
:204C4000000000000000000000000000000000000000000000000000000000000000000054 |
:204C6000000000000000000000000000000000000000000000000000000000000000000034 |
:204C8000000000000000000000000000000000000000000000000000000000000000000014 |
:204CA0000000000000000000000000000000000000000000000000000000000000000000F4 |
:204CC0000000000000000000000000000000000000000000000000000000000000000000D4 |
:204CE0000000000000000000000000000000000000000000000000000000000000000000B4 |
:204D0000000000000000000000000000000000000000000000000000000000000000000093 |
:204D2000000000000000000000000000000000000000000000000000000000000000000073 |
:204D4000000000000000000000000000000000000000000000000000000000000000000053 |
:204D6000000000000000000000000000000000000000000000000000000000000000000033 |
:204D8000000000000000000000000000000000000000000000000000000000000000000013 |
:204DA0000000000000000000000000000000000000000000000000000000000000000000F3 |
:204DC0000000000000000000000000000000000000000000000000000000000000000000D3 |
:204DE0000000000000000000000000000000000000000000000000000000000000000000B3 |
:204E0000000000000000000000000000000000000000000000000000000000000000000092 |
:204E2000000000000000000000000000000000000000000000000000000000000000000072 |
:204E4000000000000000000000000000000000000000000000000000000000000000000052 |
:204E6000000000000000000000000000000000000000000000000000000000000000000032 |
:204E8000000000000000000000000000000000000000000000000000000000000000000012 |
:204EA0000000000000000000000000000000000000000000000000000000000000000000F2 |
:204EC0000000000000000000000000000000000000000000000000000000000000000000D2 |
:204EE0000000000000000000000000000000000000000000000000000000000000000000B2 |
:204F0000000000000000000000000000000000000000000000000000000000000000000091 |
:204F2000000000000000000000000000000000000000000000000000000000000000000071 |
:204F4000000000000000000000000000000000000000000000000000000000000000000051 |
:204F6000000000000000000000000000000000000000000000000000000000000000000031 |
:204F8000000000000000000000000000000000000000000000000000000000000000000011 |
:204FA0000000000000000000000000000000000000000000000000000000000000000000F1 |
:204FC0000000000000000000000000000000000000000000000000000000000000000000D1 |
:204FE0000000000000000000000000000000000000000000000000000000000000000000B1 |
:20500000000000000000000000000000000000000000000000000000000000000000000090 |
:20502000000000000000000000000000000000000000000000000000000000000000000070 |
:20504000000000000000000000000000000000000000000000000000000000000000000050 |
:20506000000000000000000000000000000000000000000000000000000000000000000030 |
:20508000000000000000000000000000000000000000000000000000000000000000000010 |
:2050A0000000000000000000000000000000000000000000000000000000000000000000F0 |
:2050C0000000000000000000000000000000000000000000000000000000000000000000D0 |
:2050E0000000000000000000000000000000000000000000000000000000000000000000B0 |
:2051000000000000000000000000000000000000000000000000000000000000000000008F |
:2051200000000000000000000000000000000000000000000000000000000000000000006F |
:2051400000000000000000000000000000000000000000000000000000000000000000004F |
:2051600000000000000000000000000000000000000000000000000000000000000000002F |
:2051800000000000000000000000000000000000000000000000000000000000000000000F |
:2051A0000000000000000000000000000000000000000000000000000000000000000000EF |
:2051C0000000000000000000000000000000000000000000000000000000000000000000CF |
:2051E0000000000000000000000000000000000000000000000000000000000000000000AF |
:2052000000000000000000000000000000000000000000000000000000000000000000008E |
:2052200000000000000000000000000000000000000000000000000000000000000000006E |
:2052400000000000000000000000000000000000000000000000000000000000000000004E |
:2052600000000000000000000000000000000000000000000000000000000000000000002E |
:2052800000000000000000000000000000000000000000000000000000000000000000000E |
:2052A0000000000000000000000000000000000000000000000000000000000000000000EE |
:2052C0000000000000000000000000000000000000000000000000000000000000000000CE |
:2052E0000000000000000000000000000000000000000000000000000000000000000000AE |
:2053000000000000000000000000000000000000000000000000000000000000000000008D |
:2053200000000000000000000000000000000000000000000000000000000000000000006D |
:2053400000000000000000000000000000000000000000000000000000000000000000004D |
:2053600000000000000000000000000000000000000000000000000000000000000000002D |
:2053800000000000000000000000000000000000000000000000000000000000000000000D |
:2053A0000000000000000000000000000000000000000000000000000000000000000000ED |
:2053C0000000000000000000000000000000000000000000000000000000000000000000CD |
:2053E0000000000000000000000000000000000000000000000000000000000000000000AD |
:2054000000000000000000000000000000000000000000000000000000000000000000008C |
:2054200000000000000000000000000000000000000000000000000000000000000000006C |
:2054400000000000000000000000000000000000000000000000000000000000000000004C |
:2054600000000000000000000000000000000000000000000000000000000000000000002C |
:2054800000000000000000000000000000000000000000000000000000000000000000000C |
:2054A0000000000000000000000000000000000000000000000000000000000000000000EC |
:2054C0000000000000000000000000000000000000000000000000000000000000000000CC |
:2054E0000000000000000000000000000000000000000000000000000000000000000000AC |
:2055000000000000000000000000000000000000000000000000000000000000000000008B |
:2055200000000000000000000000000000000000000000000000000000000000000000006B |
:2055400000000000000000000000000000000000000000000000000000000000000000004B |
:2055600000000000000000000000000000000000000000000000000000000000000000002B |
:2055800000000000000000000000000000000000000000000000000000000000000000000B |
:2055A0000000000000000000000000000000000000000000000000000000000000000000EB |
:2055C0000000000000000000000000000000000000000000000000000000000000000000CB |
:2055E0000000000000000000000000000000000000000000000000000000000000000000AB |
:2056000000000000000000000000000000000000000000000000000000000000000000008A |
:2056200000000000000000000000000000000000000000000000000000000000000000006A |
:2056400000000000000000000000000000000000000000000000000000000000000000004A |
:2056600000000000000000000000000000000000000000000000000000000000000000002A |
:2056800000000000000000000000000000000000000000000000000000000000000000000A |
:2056A0000000000000000000000000000000000000000000000000000000000000000000EA |
:2056C0000000000000000000000000000000000000000000000000000000000000000000CA |
:2056E0000000000000000000000000000000000000000000000000000000000000000000AA |
:20570000000000000000000000000000000000000000000000000000000000000000000089 |
:20572000000000000000000000000000000000000000000000000000000000000000000069 |
:20574000000000000000000000000000000000000000000000000000000000000000000049 |
:20576000000000000000000000000000000000000000000000000000000000000000000029 |
:20578000000000000000000000000000000000000000000000000000000000000000000009 |
:2057A0000000000000000000000000000000000000000000000000000000000000000000E9 |
:2057C0000000000000000000000000000000000000000000000000000000000000000000C9 |
:2057E0000000000000000000000000000000000000000000000000000000000000000000A9 |
:20580000000000000000000000000000000000000000000000000000000000000000000088 |
:20582000000000000000000000000000000000000000000000000000000000000000000068 |
:20584000000000000000000000000000000000000000000000000000000000000000000048 |
:20586000000000000000000000000000000000000000000000000000000000000000000028 |
:20588000000000000000000000000000000000000000000000000000000000000000000008 |
:2058A0000000000000000000000000000000000000000000000000000000000000000000E8 |
:2058C0000000000000000000000000000000000000000000000000000000000000000000C8 |
:2058E0000000000000000000000000000000000000000000000000000000000000000000A8 |
:20590000000000000000000000000000000000000000000000000000000000000000000087 |
:20592000000000000000000000000000000000000000000000000000000000000000000067 |
:20594000000000000000000000000000000000000000000000000000000000000000000047 |
:20596000000000000000000000000000000000000000000000000000000000000000000027 |
:20598000000000000000000000000000000000000000000000000000000000000000000007 |
:2059A0000000000000000000000000000000000000000000000000000000000000000000E7 |
:2059C0000000000000000000000000000000000000000000000000000000000000000000C7 |
:2059E0000000000000000000000000000000000000000000000000000000000000000000A7 |
:205A0000000000000000000000000000000000000000000000000000000000000000000086 |
:205A2000000000000000000000000000000000000000000000000000000000000000000066 |
:205A4000000000000000000000000000000000000000000000000000000000000000000046 |
:205A6000000000000000000000000000000000000000000000000000000000000000000026 |
:205A8000000000000000000000000000000000000000000000000000000000000000000006 |
:205AA0000000000000000000000000000000000000000000000000000000000000000000E6 |
:205AC0000000000000000000000000000000000000000000000000000000000000000000C6 |
:205AE0000000000000000000000000000000000000000000000000000000000000000000A6 |
:205B0000000000000000000000000000000000000000000000000000000000000000000085 |
:205B2000000000000000000000000000000000000000000000000000000000000000000065 |
:205B4000000000000000000000000000000000000000000000000000000000000000000045 |
:205B6000000000000000000000000000000000000000000000000000000000000000000025 |
:205B8000000000000000000000000000000000000000000000000000000000000000000005 |
:205BA0000000000000000000000000000000000000000000000000000000000000000000E5 |
:205BC0000000000000000000000000000000000000000000000000000000000000000000C5 |
:205BE0000000000000000000000000000000000000000000000000000000000000000000A5 |
:205C0000000000000000000000000000000000000000000000000000000000000000000084 |
:205C2000000000000000000000000000000000000000000000000000000000000000000064 |
:205C4000000000000000000000000000000000000000000000000000000000000000000044 |
:205C6000000000000000000000000000000000000000000000000000000000000000000024 |
:205C8000000000000000000000000000000000000000000000000000000000000000000004 |
:205CA0000000000000000000000000000000000000000000000000000000000000000000E4 |
:205CC0000000000000000000000000000000000000000000000000000000000000000000C4 |
:205CE0000000000000000000000000000000000000000000000000000000000000000000A4 |
:205D0000000000000000000000000000000000000000000000000000000000000000000083 |
:205D2000000000000000000000000000000000000000000000000000000000000000000063 |
:205D4000000000000000000000000000000000000000000000000000000000000000000043 |
:205D6000000000000000000000000000000000000000000000000000000000000000000023 |
:205D8000000000000000000000000000000000000000000000000000000000000000000003 |
:205DA0000000000000000000000000000000000000000000000000000000000000000000E3 |
:205DC0000000000000000000000000000000000000000000000000000000000000000000C3 |
:205DE0000000000000000000000000000000000000000000000000000000000000000000A3 |
:205E0000000000000000000000000000000000000000000000000000000000000000000082 |
:205E2000000000000000000000000000000000000000000000000000000000000000000062 |
:205E4000000000000000000000000000000000000000000000000000000000000000000042 |
:205E6000000000000000000000000000000000000000000000000000000000000000000022 |
:205E8000000000000000000000000000000000000000000000000000000000000000000002 |
:205EA0000000000000000000000000000000000000000000000000000000000000000000E2 |
:205EC0000000000000000000000000000000000000000000000000000000000000000000C2 |
:205EE0000000000000000000000000000000000000000000000000000000000000000000A2 |
:205F0000000000000000000000000000000000000000000000000000000000000000000081 |
:205F2000000000000000000000000000000000000000000000000000000000000000000061 |
:205F4000000000000000000000000000000000000000000000000000000000000000000041 |
:205F6000000000000000000000000000000000000000000000000000000000000000000021 |
:205F8000000000000000000000000000000000000000000000000000000000000000000001 |
:205FA0000000000000000000000000000000000000000000000000000000000000000000E1 |
:205FC0000000000000000000000000000000000000000000000000000000000000000000C1 |
:205FE0000000000000000000000000000000000000000000000000000000000000000000A1 |
:20600000000000000000000000000000000000000000000000000000000000000000000080 |
:20602000000000000000000000000000000000000000000000000000000000000000000060 |
:20604000000000000000000000000000000000000000000000000000000000000000000040 |
:20606000000000000000000000000000000000000000000000000000000000000000000020 |
:20608000000000000000000000000000000000000000000000000000000000000000000000 |
:2060A0000000000000000000000000000000000000000000000000000000000000000000E0 |
:2060C0000000000000000000000000000000000000000000000000000000000000000000C0 |
:2060E0000000000000000000000000000000000000000000000000000000000000000000A0 |
:2061000000000000000000000000000000000000000000000000000000000000000000007F |
:2061200000000000000000000000000000000000000000000000000000000000000000005F |
:2061400000000000000000000000000000000000000000000000000000000000000000003F |
:2061600000000000000000000000000000000000000000000000000000000000000000001F |
:206180000000000000000000000000000000000000000000000000000000000000000000FF |
:2061A0000000000000000000000000000000000000000000000000000000000000000000DF |
:2061C0000000000000000000000000000000000000000000000000000000000000000000BF |
:2061E00000000000000000000000000000000000000000000000000000000000000000009F |
:2062000000000000000000000000000000000000000000000000000000000000000000007E |
:2062200000000000000000000000000000000000000000000000000000000000000000005E |
:2062400000000000000000000000000000000000000000000000000000000000000000003E |
:2062600000000000000000000000000000000000000000000000000000000000000000001E |
:206280000000000000000000000000000000000000000000000000000000000000000000FE |
:2062A0000000000000000000000000000000000000000000000000000000000000000000DE |
:2062C0000000000000000000000000000000000000000000000000000000000000000000BE |
:2062E00000000000000000000000000000000000000000000000000000000000000000009E |
:2063000000000000000000000000000000000000000000000000000000000000000000007D |
:2063200000000000000000000000000000000000000000000000000000000000000000005D |
:2063400000000000000000000000000000000000000000000000000000000000000000003D |
:2063600000000000000000000000000000000000000000000000000000000000000000001D |
:206380000000000000000000000000000000000000000000000000000000000000000000FD |
:2063A0000000000000000000000000000000000000000000000000000000000000000000DD |
:2063C0000000000000000000000000000000000000000000000000000000000000000000BD |
:2063E00000000000000000000000000000000000000000000000000000000000000000009D |
:2064000000000000000000000000000000000000000000000000000000000000000000007C |
:2064200000000000000000000000000000000000000000000000000000000000000000005C |
:2064400000000000000000000000000000000000000000000000000000000000000000003C |
:2064600000000000000000000000000000000000000000000000000000000000000000001C |
:206480000000000000000000000000000000000000000000000000000000000000000000FC |
:2064A0000000000000000000000000000000000000000000000000000000000000000000DC |
:2064C0000000000000000000000000000000000000000000000000000000000000000000BC |
:2064E00000000000000000000000000000000000000000000000000000000000000000009C |
:2065000000000000000000000000000000000000000000000000000000000000000000007B |
:2065200000000000000000000000000000000000000000000000000000000000000000005B |
:2065400000000000000000000000000000000000000000000000000000000000000000003B |
:2065600000000000000000000000000000000000000000000000000000000000000000001B |
:206580000000000000000000000000000000000000000000000000000000000000000000FB |
:2065A0000000000000000000000000000000000000000000000000000000000000000000DB |
:2065C0000000000000000000000000000000000000000000000000000000000000000000BB |
:2065E00000000000000000000000000000000000000000000000000000000000000000009B |
:2066000000000000000000000000000000000000000000000000000000000000000000007A |
:2066200000000000000000000000000000000000000000000000000000000000000000005A |
:2066400000000000000000000000000000000000000000000000000000000000000000003A |
:2066600000000000000000000000000000000000000000000000000000000000000000001A |
:206680000000000000000000000000000000000000000000000000000000000000000000FA |
:2066A0000000000000000000000000000000000000000000000000000000000000000000DA |
:2066C0000000000000000000000000000000000000000000000000000000000000000000BA |
:2066E00000000000000000000000000000000000000000000000000000000000000000009A |
:20670000000000000000000000000000000000000000000000000000000000000000000079 |
:20672000000000000000000000000000000000000000000000000000000000000000000059 |
:20674000000000000000000000000000000000000000000000000000000000000000000039 |
:20676000000000000000000000000000000000000000000000000000000000000000000019 |
:206780000000000000000000000000000000000000000000000000000000000000000000F9 |
:2067A0000000000000000000000000000000000000000000000000000000000000000000D9 |
:2067C0000000000000000000000000000000000000000000000000000000000000000000B9 |
:2067E000000000000000000000000000000000000000000000000000000000000000000099 |
:20680000000000000000000000000000000000000000000000000000000000000000000078 |
:20682000000000000000000000000000000000000000000000000000000000000000000058 |
:20684000000000000000000000000000000000000000000000000000000000000000000038 |
:20686000000000000000000000000000000000000000000000000000000000000000000018 |
:206880000000000000000000000000000000000000000000000000000000000000000000F8 |
:2068A0000000000000000000000000000000000000000000000000000000000000000000D8 |
:2068C0000000000000000000000000000000000000000000000000000000000000000000B8 |
:2068E000000000000000000000000000000000000000000000000000000000000000000098 |
:20690000000000000000000000000000000000000000000000000000000000000000000077 |
:20692000000000000000000000000000000000000000000000000000000000000000000057 |
:20694000000000000000000000000000000000000000000000000000000000000000000037 |
:20696000000000000000000000000000000000000000000000000000000000000000000017 |
:206980000000000000000000000000000000000000000000000000000000000000000000F7 |
:2069A0000000000000000000000000000000000000000000000000000000000000000000D7 |
:2069C0000000000000000000000000000000000000000000000000000000000000000000B7 |
:2069E000000000000000000000000000000000000000000000000000000000000000000097 |
:206A0000000000000000000000000000000000000000000000000000000000000000000076 |
:206A2000000000000000000000000000000000000000000000000000000000000000000056 |
:206A4000000000000000000000000000000000000000000000000000000000000000000036 |
:206A6000000000000000000000000000000000000000000000000000000000000000000016 |
:206A80000000000000000000000000000000000000000000000000000000000000000000F6 |
:206AA0000000000000000000000000000000000000000000000000000000000000000000D6 |
:206AC0000000000000000000000000000000000000000000000000000000000000000000B6 |
:206AE000000000000000000000000000000000000000000000000000000000000000000096 |
:206B0000000000000000000000000000000000000000000000000000000000000000000075 |
:206B2000000000000000000000000000000000000000000000000000000000000000000055 |
:206B4000000000000000000000000000000000000000000000000000000000000000000035 |
:206B6000000000000000000000000000000000000000000000000000000000000000000015 |
:206B80000000000000000000000000000000000000000000000000000000000000000000F5 |
:206BA0000000000000000000000000000000000000000000000000000000000000000000D5 |
:206BC0000000000000000000000000000000000000000000000000000000000000000000B5 |
:206BE000000000000000000000000000000000000000000000000000000000000000000095 |
:206C0000000000000000000000000000000000000000000000000000000000000000000074 |
:206C2000000000000000000000000000000000000000000000000000000000000000000054 |
:206C4000000000000000000000000000000000000000000000000000000000000000000034 |
:206C6000000000000000000000000000000000000000000000000000000000000000000014 |
:206C80000000000000000000000000000000000000000000000000000000000000000000F4 |
:206CA0000000000000000000000000000000000000000000000000000000000000000000D4 |
:206CC0000000000000000000000000000000000000000000000000000000000000000000B4 |
:206CE000000000000000000000000000000000000000000000000000000000000000000094 |
:206D0000000000000000000000000000000000000000000000000000000000000000000073 |
:206D2000000000000000000000000000000000000000000000000000000000000000000053 |
:206D4000000000000000000000000000000000000000000000000000000000000000000033 |
:206D6000000000000000000000000000000000000000000000000000000000000000000013 |
:206D80000000000000000000000000000000000000000000000000000000000000000000F3 |
:206DA0000000000000000000000000000000000000000000000000000000000000000000D3 |
:206DC0000000000000000000000000000000000000000000000000000000000000000000B3 |
:206DE000000000000000000000000000000000000000000000000000000000000000000093 |
:206E0000000000000000000000000000000000000000000000000000000000000000000072 |
:206E2000000000000000000000000000000000000000000000000000000000000000000052 |
:206E4000000000000000000000000000000000000000000000000000000000000000000032 |
:206E6000000000000000000000000000000000000000000000000000000000000000000012 |
:206E80000000000000000000000000000000000000000000000000000000000000000000F2 |
:206EA0000000000000000000000000000000000000000000000000000000000000000000D2 |
:206EC0000000000000000000000000000000000000000000000000000000000000000000B2 |
:206EE000000000000000000000000000000000000000000000000000000000000000000092 |
:206F0000000000000000000000000000000000000000000000000000000000000000000071 |
:206F2000000000000000000000000000000000000000000000000000000000000000000051 |
:206F4000000000000000000000000000000000000000000000000000000000000000000031 |
:206F6000000000000000000000000000000000000000000000000000000000000000000011 |
:206F80000000000000000000000000000000000000000000000000000000000000000000F1 |
:206FA0000000000000000000000000000000000000000000000000000000000000000000D1 |
:206FC0000000000000000000000000000000000000000000000000000000000000000000B1 |
:206FE000000000000000000000000000000000000000000000000000000000000000000091 |
:20700000000000000000000000000000000000000000000000000000000000000000000070 |
:20702000000000000000000000000000000000000000000000000000000000000000000050 |
:20704000000000000000000000000000000000000000000000000000000000000000000030 |
:20706000000000000000000000000000000000000000000000000000000000000000000010 |
:207080000000000000000000000000000000000000000000000000000000000000000000F0 |
:2070A0000000000000000000000000000000000000000000000000000000000000000000D0 |
:2070C0000000000000000000000000000000000000000000000000000000000000000000B0 |
:2070E000000000000000000000000000000000000000000000000000000000000000000090 |
:2071000000000000000000000000000000000000000000000000000000000000000000006F |
:2071200000000000000000000000000000000000000000000000000000000000000000004F |
:2071400000000000000000000000000000000000000000000000000000000000000000002F |
:2071600000000000000000000000000000000000000000000000000000000000000000000F |
:207180000000000000000000000000000000000000000000000000000000000000000000EF |
:2071A0000000000000000000000000000000000000000000000000000000000000000000CF |
:2071C0000000000000000000000000000000000000000000000000000000000000000000AF |
:2071E00000000000000000000000000000000000000000000000000000000000000000008F |
:2072000000000000000000000000000000000000000000000000000000000000000000006E |
:2072200000000000000000000000000000000000000000000000000000000000000000004E |
:2072400000000000000000000000000000000000000000000000000000000000000000002E |
:2072600000000000000000000000000000000000000000000000000000000000000000000E |
:207280000000000000000000000000000000000000000000000000000000000000000000EE |
:2072A0000000000000000000000000000000000000000000000000000000000000000000CE |
:2072C0000000000000000000000000000000000000000000000000000000000000000000AE |
:2072E00000000000000000000000000000000000000000000000000000000000000000008E |
:2073000000000000000000000000000000000000000000000000000000000000000000006D |
:2073200000000000000000000000000000000000000000000000000000000000000000004D |
:2073400000000000000000000000000000000000000000000000000000000000000000002D |
:2073600000000000000000000000000000000000000000000000000000000000000000000D |
:207380000000000000000000000000000000000000000000000000000000000000000000ED |
:2073A0000000000000000000000000000000000000000000000000000000000000000000CD |
:2073C0000000000000000000000000000000000000000000000000000000000000000000AD |
:2073E00000000000000000000000000000000000000000000000000000000000000000008D |
:2074000000000000000000000000000000000000000000000000000000000000000000006C |
:2074200000000000000000000000000000000000000000000000000000000000000000004C |
:2074400000000000000000000000000000000000000000000000000000000000000000002C |
:2074600000000000000000000000000000000000000000000000000000000000000000000C |
:207480000000000000000000000000000000000000000000000000000000000000000000EC |
:2074A0000000000000000000000000000000000000000000000000000000000000000000CC |
:2074C0000000000000000000000000000000000000000000000000000000000000000000AC |
:2074E00000000000000000000000000000000000000000000000000000000000000000008C |
:2075000000000000000000000000000000000000000000000000000000000000000000006B |
:2075200000000000000000000000000000000000000000000000000000000000000000004B |
:2075400000000000000000000000000000000000000000000000000000000000000000002B |
:2075600000000000000000000000000000000000000000000000000000000000000000000B |
:207580000000000000000000000000000000000000000000000000000000000000000000EB |
:2075A0000000000000000000000000000000000000000000000000000000000000000000CB |
:2075C0000000000000000000000000000000000000000000000000000000000000000000AB |
:2075E00000000000000000000000000000000000000000000000000000000000000000008B |
:2076000000000000000000000000000000000000000000000000000000000000000000006A |
:2076200000000000000000000000000000000000000000000000000000000000000000004A |
:2076400000000000000000000000000000000000000000000000000000000000000000002A |
:2076600000000000000000000000000000000000000000000000000000000000000000000A |
:207680000000000000000000000000000000000000000000000000000000000000000000EA |
:2076A0000000000000000000000000000000000000000000000000000000000000000000CA |
:2076C0000000000000000000000000000000000000000000000000000000000000000000AA |
:2076E00000000000000000000000000000000000000000000000000000000000000000008A |
:20770000000000000000000000000000000000000000000000000000000000000000000069 |
:20772000000000000000000000000000000000000000000000000000000000000000000049 |
:20774000000000000000000000000000000000000000000000000000000000000000000029 |
:20776000000000000000000000000000000000000000000000000000000000000000000009 |
:207780000000000000000000000000000000000000000000000000000000000000000000E9 |
:2077A0000000000000000000000000000000000000000000000000000000000000000000C9 |
:2077C0000000000000000000000000000000000000000000000000000000000000000000A9 |
:2077E000000000000000000000000000000000000000000000000000000000000000000089 |
:20780000000000000000000000000000000000000000000000000000000000000000000068 |
:20782000000000000000000000000000000000000000000000000000000000000000000048 |
:20784000000000000000000000000000000000000000000000000000000000000000000028 |
:20786000000000000000000000000000000000000000000000000000000000000000000008 |
:207880000000000000000000000000000000000000000000000000000000000000000000E8 |
:2078A0000000000000000000000000000000000000000000000000000000000000000000C8 |
:2078C0000000000000000000000000000000000000000000000000000000000000000000A8 |
:2078E000000000000000000000000000000000000000000000000000000000000000000088 |
:20790000000000000000000000000000000000000000000000000000000000000000000067 |
:20792000000000000000000000000000000000000000000000000000000000000000000047 |
:20794000000000000000000000000000000000000000000000000000000000000000000027 |
:20796000000000000000000000000000000000000000000000000000000000000000000007 |
:207980000000000000000000000000000000000000000000000000000000000000000000E7 |
:2079A0000000000000000000000000000000000000000000000000000000000000000000C7 |
:2079C0000000000000000000000000000000000000000000000000000000000000000000A7 |
:2079E000000000000000000000000000000000000000000000000000000000000000000087 |
:207A0000000000000000000000000000000000000000000000000000000000000000000066 |
:207A2000000000000000000000000000000000000000000000000000000000000000000046 |
:207A4000000000000000000000000000000000000000000000000000000000000000000026 |
:207A6000000000000000000000000000000000000000000000000000000000000000000006 |
:207A80000000000000000000000000000000000000000000000000000000000000000000E6 |
:207AA0000000000000000000000000000000000000000000000000000000000000000000C6 |
:207AC0000000000000000000000000000000000000000000000000000000000000000000A6 |
:207AE000000000000000000000000000000000000000000000000000000000000000000086 |
:207B0000000000000000000000000000000000000000000000000000000000000000000065 |
:207B2000000000000000000000000000000000000000000000000000000000000000000045 |
:207B4000000000000000000000000000000000000000000000000000000000000000000025 |
:207B6000000000000000000000000000000000000000000000000000000000000000000005 |
:207B80000000000000000000000000000000000000000000000000000000000000000000E5 |
:207BA0000000000000000000000000000000000000000000000000000000000000000000C5 |
:207BC0000000000000000000000000000000000000000000000000000000000000000000A5 |
:207BE000000000000000000000000000000000000000000000000000000000000000000085 |
:207C0000000000000000000000000000000000000000000000000000000000000000000064 |
:207C2000000000000000000000000000000000000000000000000000000000000000000044 |
:207C4000000000000000000000000000000000000000000000000000000000000000000024 |
:207C6000000000000000000000000000000000000000000000000000000000000000000004 |
:207C80000000000000000000000000000000000000000000000000000000000000000000E4 |
:207CA0000000000000000000000000000000000000000000000000000000000000000000C4 |
:207CC0000000000000000000000000000000000000000000000000000000000000000000A4 |
:207CE000000000000000000000000000000000000000000000000000000000000000000084 |
:207D0000000000000000000000000000000000000000000000000000000000000000000063 |
:207D2000000000000000000000000000000000000000000000000000000000000000000043 |
:207D4000000000000000000000000000000000000000000000000000000000000000000023 |
:207D6000000000000000000000000000000000000000000000000000000000000000000003 |
:207D80000000000000000000000000000000000000000000000000000000000000000000E3 |
:207DA0000000000000000000000000000000000000000000000000000000000000000000C3 |
:207DC0000000000000000000000000000000000000000000000000000000000000000000A3 |
:207DE000000000000000000000000000000000000000000000000000000000000000000083 |
:207E0000000000000000000000000000000000000000000000000000000000000000000062 |
:207E2000000000000000000000000000000000000000000000000000000000000000000042 |
:207E4000000000000000000000000000000000000000000000000000000000000000000022 |
:207E6000000000000000000000000000000000000000000000000000000000000000000002 |
:207E80000000000000000000000000000000000000000000000000000000000000000000E2 |
:207EA0000000000000000000000000000000000000000000000000000000000000000000C2 |
:207EC0000000000000000000000000000000000000000000000000000000000000000000A2 |
:207EE000000000000000000000000000000000000000000000000000000000000000000082 |
:207F0000000000000000000000000000000000000000000000000000000000000000000061 |
:207F2000000000000000000000000000000000000000000000000000000000000000000041 |
:207F4000000000000000000000000000000000000000000000000000000000000000000021 |
:207F6000000000000000000000000000000000000000000000000000000000000000000001 |
:207F80000000000000000000000000000000000000000000000000000000000000000000E1 |
:207FA0000000000000000000000000000000000000000000000000000000000000000000C1 |
:207FC0000000000000000000000000000000000000000000000000000000000000000000A1 |
:207FE000000000000000000000000000000000004D818C810D826A829382BC82E5820E83E0 |
:00000001FF |
/open8_urisc/trunk/taskmgr/app.out
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
open8_urisc/trunk/taskmgr/app.out
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: open8_urisc/trunk/taskmgr/app.s
===================================================================
--- open8_urisc/trunk/taskmgr/app.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/app.s (revision 301)
@@ -0,0 +1,89 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; Sample Task Manager application
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;-----------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; This application requires the following build parameters in the Open8 CPU
+; core to function correctly:
+;
+; Allow_Stack_Address_Move => true RSP may relocate/retrieve the SP->R1:R0
+; Enable_Auto_Increment => true Indexed load/store instructions can use
+; auto-increment feature when Rn is odd
+; (or Rn++ is specified).
+; BRK_Implements_WAI => true BRK is interpreted as a WAI
+; Enable_NMI => true Interrupt 0 is not maskable
+; Sequential_Interrupts => true ISRs are NOT interruptable
+; RTI_Ignores_GP_Flags => true RTI restores only lower 4 ALU flags
+; Supervisor_Mode => true I-bit is restrictive
+; Unsigned_Index_Offsets => true LDO/SDO treat offset as UNSIGNED
+; Rotate_Ignores_Carry => true Rotate instrs do not use the carry
+; Default_Int_Mask => x"00" CPU starts with only the NMI active
+;
+; Further note - NOP is mapped to BRK in the assembler. Do NOT use NOP with
+; the BRK_Implements_WAI enabled, as the NOP will instead trigger WAI.
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; BNI is used as a BRA (branch always) in user-mode code, since the I-bit
+; should never be set. There are checks in each task's main loop that verify
+; that this bit is cleared, and will panic the system otherwise.
+; Similarily, in code running in the supervisor context, the I bit should
+; always be set, potentially allowing BRI to be used as a BRA. Note that this
+; isn't inherently safe, as ISR's are allowed to clear the I bit themselves
+; while user-mode code can't affect the I-bit.
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Include block - add all of the other source files here
+;
+; Note that the order of included files is important due to the way the
+; assembler works. Any constant which is used to derive another constant must
+; be defined first. The exception is creating pointer tables, which occurs on
+; a later pass.
+;------------------------------------------------------------------------------
+
+.INCLUDE "sys_hw_map.s" ; System Memory Map (HDL <> ASSY)
+.INCLUDE "sys_const.s" ; System-Wide Constants
+.INCLUDE "sys_version.s" ; System software version
+
+.INCLUDE "taskmgr_config.s" ; Task manager cconfiguration constants
+
+.INCLUDE "taskmgr_const.s" ; Main task scheduler constants
+
+.INCLUDE "task_0_const.s" ; Task 0 Constants & Macros
+.INCLUDE "task_1_const.s" ; Task 1 Constants & Macros
+
+.INCLUDE "taskmgr_func.s" ; Main task scheduler & ISR code
+
+.INCLUDE "task_0_func.s" ; Task 0 Executable
+.INCLUDE "task_1_func.s" ; Task 1 Executable
+
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/make.bat
===================================================================
--- open8_urisc/trunk/taskmgr/make.bat (nonexistent)
+++ open8_urisc/trunk/taskmgr/make.bat (revision 301)
@@ -0,0 +1,9 @@
+echo off
+cls
+cd software
+echo Making Application ROM
+open8_as -o app.s app.obj
+open8_link -vb mk_app app.out
+srec_cat app.out -binary -o APP.HEX -i
+del *.obj
+echo Done!
Index: open8_urisc/trunk/taskmgr/mk_app
===================================================================
--- open8_urisc/trunk/taskmgr/mk_app (nonexistent)
+++ open8_urisc/trunk/taskmgr/mk_app (revision 301)
@@ -0,0 +1,2 @@
+[objects]
+app.obj
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/open8_as.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: open8_urisc/trunk/taskmgr/open8_as.exe
===================================================================
--- open8_urisc/trunk/taskmgr/open8_as.exe (nonexistent)
+++ open8_urisc/trunk/taskmgr/open8_as.exe (revision 301)
open8_urisc/trunk/taskmgr/open8_as.exe
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: open8_urisc/trunk/taskmgr/open8_link.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: open8_urisc/trunk/taskmgr/open8_link.exe
===================================================================
--- open8_urisc/trunk/taskmgr/open8_link.exe (nonexistent)
+++ open8_urisc/trunk/taskmgr/open8_link.exe (revision 301)
open8_urisc/trunk/taskmgr/open8_link.exe
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: open8_urisc/trunk/taskmgr/srec_cat.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: open8_urisc/trunk/taskmgr/srec_cat.exe
===================================================================
--- open8_urisc/trunk/taskmgr/srec_cat.exe (nonexistent)
+++ open8_urisc/trunk/taskmgr/srec_cat.exe (revision 301)
open8_urisc/trunk/taskmgr/srec_cat.exe
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: open8_urisc/trunk/taskmgr/sys_const.s
===================================================================
--- open8_urisc/trunk/taskmgr/sys_const.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/sys_const.s (revision 301)
@@ -0,0 +1,323 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; sys_const.s
+;
+; Common constants & macros for generic hardware or structures used by several
+; tasks
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+;-- Serial Port Constants & Macros
+;------------------------------------------------------------------------------
+.DEFINE UART_DATA 0
+.DEFINE UART_STATUS 1
+
+.DEFINE UART_RX_PERR 3
+.DEFINE UART_RX_EMPTY 4
+.DEFINE UART_RX_FULL 5
+.DEFINE UART_TX_EMPTY 6
+.DEFINE UART_TX_FULL 7
+
+.DEFINE UART_RX_PERR_BIT 2^UART_RX_PERR
+.DEFINE UART_RX_PERR_MASK UART_RX_PERR_BIT ~ $FF
+
+.DEFINE UART_RX_EMPTY_BIT 2^UART_RX_EMPTY
+.DEFINE UART_RX_EMPTY_MASK UART_RX_EMPTY_BIT ~ $FF
+
+.DEFINE UART_RX_FULL_BIT 2^UART_RX_FULL
+.DEFINE UART_RX_FULL_MASK UART_RX_FULL_BIT ~ $FF
+
+.DEFINE UART_TX_EMPTY_BIT 2^UART_TX_EMPTY
+.DEFINE UART_TX_EMPTY_MASK UART_TX_EMPTY_BIT ~ $FF
+
+.DEFINE UART_TX_FULL_BIT 2^UART_TX_FULL
+.DEFINE UART_TX_FULL_MASK UART_TX_FULL_BIT ~ $FF
+
+; Checking the UART flags involves testing bits in the status register
+; The assembler isn't bright enough to use the defined constant, so this macro
+; does the test on the correct bit
+
+.MACRO CHECK_UART_RX_PERR
+ BTT 3
+.ENDM
+
+.MACRO CHECK_UART_RX_EMPTY
+ BTT 4
+.ENDM
+
+.MACRO CHECK_UART_RX_FULL
+ BTT 5
+.ENDM
+
+.MACRO CHECK_UART_TX_EMPTY
+ BTT 6
+.ENDM
+
+.MACRO CHECK_UART_TX_FULL
+ BTT 7
+.ENDM
+
+; Register Map:
+; Offset Bitfield Description Read/Write
+; 0x00 AAAAAAAA TX Data (WR) RX Data (RD) (RW)
+; 0x01 EDCBA--- FIFO Status (RO*)
+; A: RX Parity Error (write to clear)
+; B: RX FIFO Empty
+; C: RX FIFO almost full (922/1024)
+; D: TX FIFO Empty
+; E: TX FIFO almost full (922/1024)
+;
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Macros for setting the return value in Cmd_Error
+;------------------------------------------------------------------------------
+.DEFINE RX_CERR $FB
+.DEFINE RX_TERR $FC
+.DEFINE RX_LERR $FD
+.DEFINE RX_PERR $FE
+.DEFINE RX_OKAY $FF
+
+.MACRO RETURN_RX_CMD_OKAY
+ LDI R0, #RX_OKAY
+.ENDM
+
+.MACRO RETURN_RX_CMD_ERROR
+ LDI R0, #RX_CERR
+.ENDM
+
+.MACRO RETURN_RX_TIMEOUT_ERROR
+ LDI R0, #RX_TERR
+.ENDM
+
+.MACRO RETURN_RX_LENGTH_ERROR
+ LDI R0, #RX_LERR
+.ENDM
+
+.MACRO RETURN_RX_PARITY_ERROR
+ LDI R0, #RX_PERR
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Common buffer/memory copy
+; Uses R3:R2 as source, R5:R4 as destination, and R1 as the counter variable
+;------------------------------------------------------------------------------
+.MACRO MEM_COPY
+__MEM_CP_LP\@:LDX R2++
+ STX R4++
+ DBNZ R1, __MEM_CP_LP\@
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Common buffer/memory fill/flush
+; Uses R5:R4 as destination, and R1 as the counter variable
+;------------------------------------------------------------------------------
+.MACRO MEM_FILL
+__MEM_FL_LP\@:STX R4++
+ DBNZ R1, __MEM_FL_LP\@
+.ENDM
+
+.MACRO MEM_FLUSH
+ CLR R0
+ MEM_FILL
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Compute 16-bit Checksum
+;
+; Uses R3:R2 as source, R5:R4 as destination, and R1 as the counter variable
+; Adds all of the memory locations specified to a 16-bit accumulator, returning
+; the result in R5:R4 (destination)
+;------------------------------------------------------------------------------
+.MACRO CALC_CHECKSUM16
+ CLR R0
+ T0X R4 ; Initialize accumulator R5:R0 to 0
+ T0X R5
+ T0X R7 ; Initialize R7 to 0
+
+__CHK_SM_LP\@:LDX R2++
+ ADD R4
+ T0X R4
+
+ TX0 R5
+ ADC R7
+ T0X R5
+
+ DBNZ R1, __CHK_SM_LP\@
+.ENDM
+
+; These macros assume that the pointer in R3:R2 has been left pointing to the
+; end of the receive buffer by the CALC_CHECKSUM16 macro. Do NOT repoint
+; R3:R2, and be sure to use these macros in the order that the checksum bytes
+; appear in the packet. (THESE ARE ORDER DEPENDENT)
+
+.MACRO CHECK_SUM_LB
+ LDX R2++
+ XOR R4
+.ENDM
+
+.MACRO CHECK_SUM_UB
+ LDX R2++
+ XOR R5
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Convert ASCII to HEX
+;
+; Converts an ASCII value into an integer value from 0x0 to 0xF
+; Assumes incoming data is in R0. Returns a value in R0
+; Returns a value of 0x00 to 0x0F for valid characters, or
+; 0xFF (-1) for invalid characters
+;------------------------------------------------------------------------------
+.MACRO CONVERT_ASC2HEX
+ PSH R1 ; Preserve R1 and R2
+ PSH R2
+
+ T0X R2 ; Make a copy of R0 to R2 for backup
+ LDI R1, #$F0 ; Mask off the lower bits to figure out the range
+ AND R1
+ T0X R1 ; Copy the upper 4-bits to R1 for branching tests
+
+ LDI R0, #$30 ; Is it a decimal char 0-9?
+ XOR R1
+ BRZ _CNV_AH_09_\@
+
+ LDI R0, #$40 ; Is it a hex char A-F?
+ XOR R1
+ BRZ _CNV_AH_AF_\@
+
+ LDI R0, #$60 ; Is it a hex char a-f?
+ XOR R1
+ BRZ _CNV_AH_AF_\@
+
+ BNI _CNV_AH_NV_\@
+
+; Valid HEX characters 0-9 are ASCII codes 0x30 to 0x39. Codes 0x3A to 0x3F are
+; invalid, so check that the value in R0 is LESS than $3A.
+_CNV_AH_09_\@:TX0 R2 ; Restore R0 from backup
+ LDI R1, #$0F ; Mask off the upper bits to check validity
+ AND R1
+ T0X R2 ; Backup the lower 4-bits to R2
+
+; Check for 0x0A to 0x0F
+ LDI R1, #$0A ; Load R1 with 0x0A (:)
+ CMP R1 ; Compare R0 to R1
+ BNN _CNV_AH_NV_\@ ; Branch if not negative (R0 > 9)
+
+ TX0 R2 ; Restore the lower 4-bits to R0
+ BNI _CNV_AH_EX_\@
+
+; Valid HEX characters A-F are 0x41 to 0x46 OR 0x61 to $66. The upper 4-bits
+; have already been checked, so just verify that the lower 4-bits are between
+; 0x01 and 0x06. 0x00 and 0x07 to 0x0F are invalid,
+; so check that the value in R0 is LESS than $3A
+_CNV_AH_AF_\@:TX0 R2 ; Restore R0 from backup
+ LDI R1, #$0F ; Mask off the upper bits to check validity
+ AND R1
+ T0X R2 ; Backup the lower 4-bits to R2
+
+; Check for 0x00
+ BRZ _CNV_AH_NV_\@ ; 0x0 is an invalid code
+
+; Check for 0x07 to 0x0F
+ LDI R1, #$07 ; Load R1 with 0x7 (G or g)
+ CMP R1 ; Compare R0 to R1
+ BNN _CNV_AH_NV_\@ ; Branch of not negative (R0 > 6)
+
+; If this is a valid character, add 9 to the lower 4-bits for the result
+; (0x01 to 0x06 -> 0x0A to 0x0F)
+ TX0 R2 ; Restore lower 4-bits to R0
+ LDI R1, #$09 ; Load R1 with 0x9
+ ADD R1 ; Added 9 to R0 to convert to A-F
+ BNI _CNV_AH_EX_\@
+
+_CNV_AH_NV_\@:LDI R0, #$FF ; Return 0xFF on an invalid character
+
+_CNV_AH_EX_\@:POP R2 ; Restore R1 and R2
+ POP R1
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Convert the lower nibble of R0 into a valid ASCII character
+; Accepts data in R0 and returns the ASCII code in R0
+;------------------------------------------------------------------------------
+.MACRO CONVERT_NIB2ASC
+ PSH R1 ; Preserve R1
+
+ LDI R1, #$0F ; Mask away the upper 4-bits
+ AND R1
+
+ T0X R1 ; Copy to R1
+ LDI R0, #$09 ; Load R0 with 0x09
+ CMP R1 ; Compare R0 to R1
+ BNN _CNV_NA_09_\@
+ ; Fall into _MC_FM_CHA_AF
+
+_CNV_NA_AF_\@:LDI R0, #$37 ; Add 0x37 to the nibble to get the ASCII value
+ ADD R1
+ BNI _CNV_NA_EX_\@
+
+_CNV_NA_09_\@:LDI R0, #$30 ; Add 0x30 to the nibble to get the ASCII value
+ OR R1
+ ; Fall into _MC_FM_CHA_EX
+
+_CNV_NA_EX_\@:POP R1
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Convert the packed BCD value in R0 to its ASCII equivalent in R3:R2
+; $59 -> $35, $39
+;------------------------------------------------------------------------------
+.MACRO CONV_PBCD_TO_ASCII
+ T0X R2 ; Copy R0 -> R2 for re-use
+ LDI R0, #$F0 ; Set the upper nibble mask. BCD is only 3-bit
+ AND R2 ; Mask off the upper 3-bits of value -> R0
+ CLP PSR_C ; Clear the carry (in case CPU options not set)
+ ROR R0 ; Shift the upper nibble down
+ ROR R0
+ ROR R0
+ ROR R0
+ LDI R1, #$30 ; Set the ASCII upper nibble mask of $30
+ OR R1 ; Create an ASCII character
+ T0X R3 ; Transfer the upper character to R3
+
+ LDI R0, #$0F ; Set the lower nibble mask
+ AND R2 ; Mask off the lower bits
+ OR R1 ; Create an ASCII character
+ T0X R2 ; Store the lower character to R1
+ RTS
+.ENDM
+;------------------------------------------------------------------------------
Index: open8_urisc/trunk/taskmgr/sys_hw_map.s
===================================================================
--- open8_urisc/trunk/taskmgr/sys_hw_map.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/sys_hw_map.s (revision 301)
@@ -0,0 +1,73 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; sys_hw_map.s
+;
+; Defines the interface between HDL and assembly, and should be derived from
+; Open8_cfg.vhd (this is a minimal configuration)
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; System Memory Map from Open8_cfg
+;------------------------------------------------------------------------------
+.DEFINE RAM_Address $0000 ; System RAM
+.DEFINE WPR_Address $1000 ; RAM Write Protect Mask
+.DEFINE WQL_Address $1020 ; I/O Write Qual Register
+.DEFINE INT_Address $1040 ; Cascaded Interrupt Manager
+;...
+.DEFINE ROM_Address $8000 ; Application ROM
+.DEFINE ISR_Start_Addr $FFF0 ; ISR vector table
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Interrupt Manager Selection
+;
+; Uncomment the INTMGR16 define if using the 16-bit "complex" interrupt manager
+; firmware. Otherwise, the 8-bit "simple" external interrupt manager is
+; assumed. Note that the interfaces are NOT register compatible, so this will
+; break the system if the wrong manager is selected!
+;
+;.DEFINE INTMGR16
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; RAM Configuration
+;------------------------------------------------------------------------------
+; Define the size of the memory and number of partitions in order to configure
+; the region size constant - which will be used by tasks to assign their
+; write-protection requirements
+.DEFINE RAM_Size 4096
+.DEFINE RAM_Partitions 32
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Write Qualification Groups from Open8_cfg
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/sys_version.s
===================================================================
--- open8_urisc/trunk/taskmgr/sys_version.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/sys_version.s (revision 301)
@@ -0,0 +1,35 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; sys_version.s
+;
+; Defines a software version num for use in telemetry
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+.DEFINE SW_VERSION 0
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/task_0_const.s
===================================================================
--- open8_urisc/trunk/taskmgr/task_0_const.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/task_0_const.s (revision 301)
@@ -0,0 +1,92 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; task_0_consts.s
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Manager Macros & Defines
+;------------------------------------------------------------------------------
+
+; Task supervisory functions (optional, but must be defined)
+
+.MACRO TASK0_PANIC
+.ENDM
+
+.MACRO TASK0_SUPV_FN0
+.ENDM
+
+.MACRO TASK0_SUPV_FN1
+.ENDM
+
+.MACRO TASK0_SUPV_FN2
+.ENDM
+
+.MACRO TASK0_SUPV_FN3
+.ENDM
+
+.MACRO TASK0_SUPV_FN4
+.ENDM
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; I/O Mapping (HDL -> ASSY)
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Pointer Defines and Memory Management
+;------------------------------------------------------------------------------
+
+.MACRO INSTANCE_TASK0_POINTERS
+.ENDM
+
+; Memory Structures and Variable Organization
+
+; Variable Size Description
+; -------- ---- -------------------------------------------------------
+
+; Allocate the variable structures in memory
+.ENUM TASK0_VARMEM
+TSK0_TL INSTANCEOF str_task_label
+.ENDE
+
+.MACRO SET_TASK0_LABEL
+ LDI R0, #$54 ; T
+ STA R0, TSK0_TL.Label+0
+ LDI R0, #$30 ; 0
+ STA R0, TSK0_TL.Label+1
+.ENDM
+
+.MACRO INITIALIZE_TASK0_VARS
+ SET_TASK0_LABEL
+.ENDM
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/task_0_func.s
===================================================================
--- open8_urisc/trunk/taskmgr/task_0_func.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/task_0_func.s (revision 301)
@@ -0,0 +1,51 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; task_0_func.s
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+.ORG TASK0_BLOCK
+
+;------------------------------------------------------------------------------
+; Pointer table
+;------------------------------------------------------------------------------
+ INSTANCE_TASK0_POINTERS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Initialization
+;------------------------------------------------------------------------------
+TASK0_INIT: INITIALIZE_TASK0_VARS
+ RTS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Executive
+;------------------------------------------------------------------------------
+TASK0_EXEC: RTS
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/task_1_const.s
===================================================================
--- open8_urisc/trunk/taskmgr/task_1_const.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/task_1_const.s (revision 301)
@@ -0,0 +1,93 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; task_1_const.s
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Manager Macros & Defines
+;------------------------------------------------------------------------------
+
+; Task supervisory functions (optional, but must be defined)
+
+.MACRO TASK1_PANIC
+.ENDM
+
+.MACRO TASK1_SUPV_FN0
+.ENDM
+
+.MACRO TASK1_SUPV_FN1
+.ENDM
+
+.MACRO TASK1_SUPV_FN2
+.ENDM
+
+.MACRO TASK1_SUPV_FN3
+.ENDM
+
+.MACRO TASK1_SUPV_FN4
+.ENDM
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; I/O Mapping (HDL -> ASSY)
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Pointer Defines and Memory Management
+;------------------------------------------------------------------------------
+
+.MACRO INSTANCE_TASK1_POINTERS
+.ENDM
+
+; Memory Structures and Variable Organization
+
+; Variable Size Description
+; -------- ---- -------------------------------------------------------
+
+; Allocate the variable structures in memory
+.ENUM TASK1_VARMEM
+TSK1_TL INSTANCEOF str_task_label
+.ENDE
+
+.MACRO SET_TASK1_LABEL
+ LDI R0, #$54 ; T
+ STA R0, TSK1_TL.Label+0
+ LDI R0, #$31 ; 1
+ STA R0, TSK1_TL.Label+1
+.ENDM
+
+.MACRO INITIALIZE_TASK1_VARS
+ SET_TASK1_LABEL
+.ENDM
+
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/task_1_func.s
===================================================================
--- open8_urisc/trunk/taskmgr/task_1_func.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/task_1_func.s (revision 301)
@@ -0,0 +1,51 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; task_1_func.s
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+.ORG TASK1_BLOCK
+
+;------------------------------------------------------------------------------
+; Pointer table
+;------------------------------------------------------------------------------
+ INSTANCE_TASK1_POINTERS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Initialization
+;------------------------------------------------------------------------------
+TASK1_INIT: INITIALIZE_TASK1_VARS
+ RTS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Executive
+;------------------------------------------------------------------------------
+TASK1_EXEC: RTS
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/taskmgr_config.s
===================================================================
--- open8_urisc/trunk/taskmgr/taskmgr_config.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/taskmgr_config.s (revision 301)
@@ -0,0 +1,207 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; taskmgr_config.s
+;
+; Main Manager task specific constants (this must precede taskmgr_const.s)
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ----------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Management Constants
+;------------------------------------------------------------------------------
+.DEFINE MAX_TASK_TIMESLICE $FA ; Preemption Time slice is 250uS
+.DEFINE TASK_COUNT 2 ; Number of defined tasks
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task RAM Placement Constants
+;------------------------------------------------------------------------------
+; Low memory regions (15:0)
+; 0 - System Memory
+; 1 - Task 0 Private Memory
+; 2 - Task 1 Private Memory
+; 3-15 - (Unused)
+
+; High memory regions (31:16)
+; 16-20 - (Unused)
+; 30 - Task 0 Stack Memory
+; 31 - Task 1 Stack Memory
+
+; Assign each memory region within the 32 write protect blocks using 31 to 0
+; Note that regions from 15 to 0 are "low" memory (don't need to be adjusted
+; for the mask calculation) while regions from 31 to 16 are "high" memory, and
+; should have 16 subtracted to avoid overflowing a 16-bit value.
+;
+; Note that this implies a maximum task count of 15, as at least one region is
+; required for the task manager itself, unless an additional BRAM is allocated
+; for the task manager.
+
+; Variable Memory regions (15:0)
+.DEFINE SYSTEM_VAR_RGN 0
+.DEFINE TASK0_VAR_RGN 1
+.DEFINE TASK1_VAR_RGN 2
+
+; Stack Memory regions (31:16)
+.DEFINE TASK0_STACK_RGN 30
+.DEFINE TASK1_STACK_RGN 31
+
+; Note that the WPR masks are handled here in order to add flexibility, such as
+; adding a data buffer region in "high" memory or otherwise configuring a
+; task's WPR for its memory needs
+;
+; Note that, because of the nature of the WPR, additional memory regions, such
+; as a while region to handle block transfers, can be added by by logically
+; OR'ing the region masks together. Note that the resultant line does need to
+; be on one line or the assembler won't process it correctly.
+; ie .DEFINE TASK_VAR_MASK (2^TASK2_VAR_RGN) | (2^BUF_RGN0) | (2^BUF_RGN1)
+
+; Note that the assembler can't generate a 32-bit value for the mask, so for values
+; greater than 15, an offset of 16 is subtracted and the mask value. Thus, there
+; is a "low mask" for regions 0-15 and a "high mask" for regions 16-31.
+.DEFINE HIGH_MEM_OFFSET 16
+
+.DEFINE TASK0_WPR_LOW 2^TASK0_VAR_RGN
+.DEFINE TASK1_WPR_LOW 2^TASK1_VAR_RGN
+
+.DEFINE TASK0_WPR_HIGH 2^( TASK0_STACK_RGN - HIGH_MEM_OFFSET )
+.DEFINE TASK1_WPR_HIGH 2^( TASK1_STACK_RGN - HIGH_MEM_OFFSET )
+
+; Allocate the variable structures in memory. Note that WP_Rgn_Size is also
+; used in taskmgr_const.s to compute the address of each task's stack start
+; and end
+.DEFINE WP_Rgn_Size RAM_Size / RAM_Partitions ; From sys_hw_map.s
+
+.DEFINE SYSTEM_VARMEM RAM_Address + ( SYSTEM_VAR_RGN * WP_Rgn_Size )
+.DEFINE TASK0_VARMEM RAM_Address + ( TASK0_VAR_RGN * WP_Rgn_Size )
+.DEFINE TASK1_VARMEM RAM_Address + ( TASK1_VAR_RGN * WP_Rgn_Size )
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task ROM Placement Constants
+; Note that the task blocks define the initial location for each task's code
+; and data. If a region overflows, these constants will need to be adjusted.
+;------------------------------------------------------------------------------
+.DEFINE BOOT_BLOCK $8000 ; Start of ROM
+.DEFINE DATA_BLOCK $8800 ; ROM Data
+.DEFINE TASK0_BLOCK $9000 ; Task 0
+.DEFINE TASK1_BLOCK $A000 ; Task 1
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task I/O Write Qualification Constants
+;------------------------------------------------------------------------------
+.DEFINE TASK0_WQL $00
+.DEFINE TASK1_WQL $00
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; External I/O Interrupt Flag Macros - processed from within
+; CHECK_EXTERNAL_IO_INTS
+;
+; Note that the relevant tasks should define macros allowing access to their
+; ISR flag variables and/or other code that should run in supervisor context
+; when the relevant interrupt is triggered.
+;
+; Note also that only R1 and R0 are safe to use when setting flags. Avoid R7-R2
+; as R3 and R2 are keeping track of flags and R4 through R7 aren't backed up
+;------------------------------------------------------------------------------
+
+; 0 = (unused)
+; 1 = (unused)
+; 2 = (unused)
+; 3 = (unused)
+; 4 = (unused)
+; 5 = (unused)
+; 6 = (unused)
+; 7 = (unused)
+; 8 = (unused)
+; 9 = (unused)
+; 10 = (unused)
+; 11 = (unused)
+; 12 = (unused)
+; 13 = (unused)
+; 14 = (unused)
+; 15 = (unused)
+
+; For 8-bit external interrupt manager, only use the _L constant
+.DEFINE EXT_INTERRUPT_EN_L $00
+.DEFINE EXT_INTERRUPT_EN_H $00
+
+; These macros are valid for both the 8 and 16-bit interrupt managers
+.MACRO SET_INT0_FLAGS
+.ENDM
+
+.MACRO SET_INT1_FLAGS
+.ENDM
+
+.MACRO SET_INT2_FLAGS
+.ENDM
+
+.MACRO SET_INT3_FLAGS
+.ENDM
+
+.MACRO SET_INT4_FLAGS
+.ENDM
+
+.MACRO SET_INT5_FLAGS
+.ENDM
+
+.MACRO SET_INT6_FLAGS
+.ENDM
+
+.MACRO SET_INT7_FLAGS
+.ENDM
+
+; These macros are only valid for the 16-bit interrupt manager
+.MACRO SET_INT8_FLAGS
+.ENDM
+
+.MACRO SET_INT9_FLAGS
+.ENDM
+
+.MACRO SET_INT10_FLAGS
+.ENDM
+
+.MACRO SET_INT11_FLAGS
+.ENDM
+
+.MACRO SET_INT12_FLAGS
+.ENDM
+
+.MACRO SET_INT13_FLAGS
+.ENDM
+
+.MACRO SET_INT14_FLAGS
+.ENDM
+
+.MACRO SET_INT15_FLAGS
+.ENDM
+
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/taskmgr_const.s
===================================================================
--- open8_urisc/trunk/taskmgr/taskmgr_const.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/taskmgr_const.s (revision 301)
@@ -0,0 +1,1019 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; taskmgr_const.s
+;
+; Task Manager constants, tables, and macros
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ----------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Semaphore Value - should always be non-zero
+.DEFINE SEMAPHORE_VAL $FF ; Standard value used to set semaphores
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; I/O Mapping (HDL -> ASSY)
+;------------------------------------------------------------------------------
+
+; System RAM Write-Protect Register
+.DEFINE WPR_MASK_REG WPR_Address
+
+; Write Protect Mask
+.DEFINE WPR_MASK_0 WPR_MASK_REG + 0
+.DEFINE WPR_MASK_1 WPR_MASK_REG + 1
+.DEFINE WPR_MASK_2 WPR_MASK_REG + 2
+.DEFINE WPR_MASK_3 WPR_MASK_REG + 3
+
+; WP Register Map:
+; Offset Bitfield Description Read/Write
+; 0x00 AAAAAAAA Region Enables 7:0 (RW)
+; 0x01 AAAAAAAA Region Enables 15:8 (RW)
+; 0x02 AAAAAAAA Region Enables 23:16 (RW)
+; 0x03 AAAAAAAA Region Enables 31:24 (RW)
+
+; I/O Write Qualification Register
+.DEFINE IO_WRITE_QUAL WQL_Address
+
+; External Interrupt Manager / Task Timer
+.DEFINE INT_MGR_IF INT_Address ; Shared with the main
+.DEFINE TASK_TIMER_PRD INT_MGR_IF + 0
+
+; Defines for the 8-bit interrupt manager
+.DEFINE EXT_INT_MASK INT_MGR_IF + 1
+.DEFINE EXT_INT_PEND INT_MGR_IF + 2
+.DEFINE EXT_INT_ACK INT_MGR_IF + 3
+
+; Defines for the 16-bit interrupt manager
+.DEFINE EXT_INT16_MASK_L INT_MGR_IF + 2
+.DEFINE EXT_INT16_MASK_H INT_MGR_IF + 3
+.DEFINE EXT_INT16_PEND_L INT_MGR_IF + 4
+.DEFINE EXT_INT16_PEND_H INT_MGR_IF + 5
+.DEFINE EXT_INT16_ACK INT_MGR_IF + 7
+
+; Register Map:
+; Offset Bitfield Description Read/Write
+; 0x00 AAAAAAAA PIT Timer Interval (0 = disabled) (RW)
+; 0x01 AAAAAAAA External Interrupt Mask (RW)
+; 0x02 AAAAAAAA Pending External Ints* (RW)
+; 0x02 A------- Interrupt Requested (write to clear) (RW)
+
+; External Interrupt bit & mask definitions
+.DEFINE EXT_INT0_BIT 2^0
+.DEFINE EXT_INT1_BIT 2^1
+.DEFINE EXT_INT2_BIT 2^2
+.DEFINE EXT_INT3_BIT 2^3
+.DEFINE EXT_INT4_BIT 2^4
+.DEFINE EXT_INT5_BIT 2^5
+.DEFINE EXT_INT6_BIT 2^6
+.DEFINE EXT_INT7_BIT 2^7
+
+.DEFINE EXT_INT8_BIT 2^0
+.DEFINE EXT_INT9_BIT 2^1
+.DEFINE EXT_INT10_BIT 2^2
+.DEFINE EXT_INT11_BIT 2^3
+.DEFINE EXT_INT12_BIT 2^4
+.DEFINE EXT_INT13_BIT 2^5
+.DEFINE EXT_INT14_BIT 2^6
+.DEFINE EXT_INT15_BIT 2^7
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Register the interrupt service routines and form the vector address table at
+; the end of the ROM
+;------------------------------------------------------------------------------
+.ORG ISR_Start_Addr
+.DW RAM_FAULT ; (0xFFF1:0xFFF0) ISR 0
+.DW TASK_SW_INT ; (0xFFF3:0xFFF2) ISR 1
+.DW EXT_INT_MGR ; (0xFFF5:0xFFF4) ISR 2
+.DW EXEC_SUPV0 ; (0xFFF7:0xFFF6) ISR 3
+.DW EXEC_SUPV1 ; (0xFFF9:0xFFF8) ISR 4
+.DW EXEC_SUPV2 ; (0xFFFB:0xFFFA) ISR 5
+.DW EXEC_SUPV3 ; (0xFFFD:0xFFFC) ISR 6
+.DW EXEC_SUPV4 ; (0xFFFF:0xFFFE) ISR 7
+
+.DEFINE CPU_INT_ENABLES $FF
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Pointer Defines and Table Organization
+;------------------------------------------------------------------------------
+
+; Create defined constants to pointer table
+; Note that these are offset by 4 to account for the bootstrap JMP and NOP
+.DEFINE STACK_MEMORY_PTR BOOT_BLOCK + 4
+.DEFINE FREE_SYSMEM_PTR BOOT_BLOCK + 6
+.DEFINE TASK_PARAMS_PTR BOOT_BLOCK + 8
+.DEFINE TASK_PARAM_TABLE BOOT_BLOCK + 10
+
+.MACRO INSTANCE_TASK_POINTERS
+
+.DW TaskMgr.Task_Stacks ; ( + 4) First available RAM location for stack data
+.DW TaskMgr.Free_Mem ; ( + 6) First available free RAM location in sysmem
+.DW TASK_PARAM_TABLE ; ( + 8) Start of task parameter table
+.ENDM
+
+;------------------------------------------------------------------------------
+; INSTANCE_TASK_EXPORTS / CREATE_TASK_EXPORTS setup a ROM table for the task
+; switcher with critical entry points and memory & I/O write access
+; permissions. The entry points are created automatically by
+; INSTANCE_MAIN_LOOPS, while the other constants are setup in taskmgr_config.s
+; based on its task configuration and memory needs
+;------------------------------------------------------------------------------
+
+.DEFINE STACK_TABLE_OFFSET 2
+.DEFINE PARAM_TABLE_OFFSET 20
+
+; Define table offsets to allow quick use of LDO to access individual records
+; for each task
+
+.DEFINE PARAM_MAIN_ADDR_LOW 0
+.DEFINE PARAM_MAIN_ADDR_HIGH 1
+
+.DEFINE PARAM_STACK_ADDR_LOW 2
+.DEFINE PARAM_STACK_ADDR_HIGH 3
+
+.DEFINE PARAM_WPR_BYTE0 4
+.DEFINE PARAM_WPR_BYTE1 5
+.DEFINE PARAM_WPR_BYTE2 6
+.DEFINE PARAM_WPR_BYTE3 7
+
+.DEFINE PARAM_WQL_LOW 8
+.DEFINE PARAM_WQL_HIGH 9
+
+.DEFINE SUPV_FN0_ENTRY_LOW 10
+.DEFINE SUPV_FN0_ENTRY_HIGH 11
+
+.DEFINE SUPV_FN1_ENTRY_LOW 12
+.DEFINE SUPV_FN1_ENTRY_HIGH 13
+
+.DEFINE SUPV_FN2_ENTRY_LOW 14
+.DEFINE SUPV_FN2_ENTRY_HIGH 15
+
+.DEFINE SUPV_FN3_ENTRY_LOW 16
+.DEFINE SUPV_FN3_ENTRY_HIGH 17
+
+.DEFINE SUPV_FN4_ENTRY_LOW 18
+.DEFINE SUPV_FN4_ENTRY_HIGH 19
+
+; CREATE_TASK_EXPORTS creates an entry in the TASK_PARAM_TABLE with critical
+; task information. Note that the WPR_LOW, WPR_HIGH, and WQL must be defined
+; in taskmgr_config.s. Everything else is automatically created here, or by
+; the assembler/linker.
+
+.MACRO CREATE_TASK_EXPORTS
+.DEFINE TASK\@_STACK_END RAM_Address + (TASK\@_STACK_RGN * WP_Rgn_Size)
+.DEFINE TASK\@_STACK_START TASK\@_STACK_END + WP_Rgn_Size - 1
+
+.DW TASK\@_MAIN ; 1:0 Entry point created by INSTANCE_MAIN_LOOPS
+.DW TASK\@_STACK_START ; 3:2 Pointer to top of the task stack
+.DW TASK\@_WPR_LOW ; 5:4 Mask for enabling task mem writes for vars
+.DW TASK\@_WPR_HIGH ; 7:6 Mask for enabling task mem writes for stack
+.DW TASK\@_WQL ; 9:8 Mask for enabling task I/O write access
+.DW _F0_EXE_S\@ ; 11:10 Entry point for supervisory function 0
+.DW _F1_EXE_S\@ ; 13:12 Entry point for supervisory function 1
+.DW _F2_EXE_S\@ ; 15:14 Entry point for supervisory function 2
+.DW _F3_EXE_S\@ ; 17:16 Entry point for supervisory function 3
+.DW _F4_EXE_S\@ ; 19:18 Entry point for supervisory function 4
+.ENDM
+
+.MACRO INSTANCE_TASK_EXPORTS
+ .REPEAT TASK_COUNT
+ CREATE_TASK_EXPORTS
+ .ENDR
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Memory Structures and Variable Organization
+;------------------------------------------------------------------------------
+
+; Variable Size Description
+; -------- ---- -------------------------------------------------------
+.STRUCT str_task_label
+Label DW ; 2-byte "header" to allow task RAM to be easily found
+.ENDST
+
+.STRUCT str_isr_flag
+Flag DB ; Single-byte flag variable for returning semaphores
+.ENDST
+
+.DEFINE TSB_SIZE 2 * TASK_COUNT
+.DEFINE FREE_SYS 124 - TSB_SIZE
+
+.STRUCT str_taskman
+This_Task DB ; Holds the task number of the current task
+Next_Task DB ; Specifieds which task to be executed next
+Fault_Flag DB ; Memory write fault flag
+Fault_Task DB ; Task active/responsible for write fault
+Task_Stacks DSB TSB_SIZE ; First location for stack data*
+Free_Mem DSB FREE_SYS ; Unused memory in system region
+.ENDST
+
+; * Note that this location is used to setup a pointer, which the task manager
+; will use to assign each task a backup location for its current stack pointer
+; Thus, this area grows up to 2x the number tasks. The type is intentionally
+; set as DB as a reminder. If attempting to reuse memory in this region, this
+; should be noted
+
+.ENUM SYSTEM_VARMEM
+TaskMgr INSTANCEOF str_taskman
+.ENDE
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Utility macros for booting the system and providing access to internal vars
+;------------------------------------------------------------------------------
+
+; The Open8 supports an optional mode for the RSP instruction that
+; converts it from Reset Stack Pointer to Relocate Stack Pointer.
+; The new form of the instruction takes one of the CPU flags as a
+; direction/mode bit. Setting PSR_S will cause the instruction
+; to write R1:R0 -> SP, while clearing it will cause the instruction
+; to copy the SP -> R1:R0.
+
+.MACRO RETRIEVE_SP
+ CLP PSR_S ; Affirmatively clear PSR_S flag first
+ RSP ; Then execute the RSP instruction
+.ENDM
+
+.MACRO RELOCATE_SP
+ STP PSR_S ; Affirmatively set PSR_S flag first
+ RSP ; Execute the RSP instruction
+ CLP PSR_S ; Reset PSR_GP4 afterward
+.ENDM
+
+; Task initialization, switching time, and init/exec macros
+.MACRO DISABLE_PREEMPTION_TIMER
+ CLR R0 ; Make sure the PIT is disabled
+ STA R0, TASK_TIMER_PRD ; by writing 0 to the PIT period
+.ENDM
+
+.MACRO RESET_PREEMPTION_TIMER
+ LDI R0, #MAX_TASK_TIMESLICE; Turn on the PIT timer at this point
+ STA R0, TASK_TIMER_PRD ; to kick off the task switcher
+.ENDM
+
+; Fault flag macros
+.MACRO INITIALIZE_FAULT_FLAGS
+ CLR R0
+ STA R0, TaskMgr.Fault_Flag
+ STA R0, TaskMgr.Fault_Task
+.ENDM
+
+.MACRO SET_FAULT_FLAGS
+ LDI R0, #SEMAPHORE_VAL
+ STA R0, TaskMgr.Fault_Flag
+ LDA R0, TaskMgr.This_Task
+ STA R0, TaskMgr.Fault_Task;
+.ENDM
+
+; TASK_SETUP is a template used to generate code that sets up a single task's
+; stack and stack pointer for each a task. This macros will temporarily
+; relocate the stack pointer, push the task's initial state to the task's
+; stack. Note that it is important to also ensure that the stack has data to
+; not only restore the return address, but also R7:R0, as well as the flag
+; state.
+.MACRO TASK_SETUP
+
+ ; Setup a pointer in R3:R2 to the beginning of the parameter
+ ; table to load task information from.
+ LDI R0, #\@
+ LDI R1, #PARAM_TABLE_OFFSET
+ MUL R1
+
+ LDA R2, TASK_PARAMS_PTR + 0 ; Load R3:R2 with the start of the
+ LDA R3, TASK_PARAMS_PTR + 1 ; task paramenter region
+
+ ADD R2
+ T0X R2
+ TX0 R1
+ ADC R3
+ T0X R3
+
+ ; Get the task's starting stack address from the table and load
+ ; it into the CPU SP
+ LDO R2, PARAM_STACK_ADDR_HIGH
+ T0X R1
+ LDO R2, PARAM_STACK_ADDR_LOW
+ RELOCATE_SP ; R1:R0 -> CPU SP
+
+ ; From here on out, the CPU SP is pointing to the target task's
+ ; stack region, so we can initialize its stack memory
+
+ ; Write initial flag value
+ CLR R0
+ PSH R0
+
+ ; Initialize the return address to point to the "initialize"
+ ; portion of the task, so that the task can do its one-time
+ ; startup code.
+
+ LDO R2, PARAM_MAIN_ADDR_HIGH ; Write return PC MSB
+ PSH R0
+
+ LDO R2, PARAM_MAIN_ADDR_LOW ; Write return PC LSB
+ PSH R0
+
+ ; Setup the initial reg values
+ CLR R0 ; Initialize all registers to 0
+ PSH R0 ; R0
+ PSH R0 ; R1
+ PSH R0 ; R2
+ PSH R0 ; R3
+ PSH R0 ; R4
+ PSH R0 ; R5
+ PSH R0 ; R6
+ PSH R0 ; R7
+
+ ; Once the task's stack has been initialized, retrieve the new
+ ; stack pointer from the SP and store it in the task's backup
+ ; variable.
+
+ LDI R0, #\@
+ LDI R1, #STACK_TABLE_OFFSET
+ MUL R1
+
+ LDA R2, STACK_MEMORY_PTR + 0
+ LDA R3, STACK_MEMORY_PTR + 1
+
+ ADD R2
+ T0X R2
+ TX0 R1
+ ADC R3
+ T0X R3
+
+ RETRIEVE_SP
+ STX R2
+ TX0 R1
+ STO R2,1
+.ENDM
+
+; INSTANCE_TASK_SETUP expands to create setup code for all of the tasks based
+; on the template above. There should be one setup per task, hence the repeat
+; based on TASK_COUNT
+.MACRO INSTANCE_TASK_SETUP
+ .REPT TASK_COUNT
+ TASK_SETUP
+ .ENDR
+.ENDM
+
+; REINIT_STACK_BUFFER_PTR uses the This_Task variable to configure R3:R2 as a
+; pointer into the system memory where stack pointer backups are stored.
+.MACRO REINIT_STACK_BUFFER_PTR
+ LDA R0, TaskMgr.This_Task ; Get the task number
+ LDI R1, #STACK_TABLE_OFFSET ; Multiply it by 2
+ MUL R1
+
+ LDA R2, STACK_MEMORY_PTR + 0 ; Load R3:R2 with the start of the
+ LDA R3, STACK_MEMORY_PTR + 1 ; stack memory region
+
+ ADD R2 ; Add [R3:R2] + [R1:R0] -> [R3:R2]
+ T0X R2
+ TX0 R1
+ ADC R3
+ T0X R3
+.ENDM
+
+
+; REINIT_TASK_TABLE_PTR uses the This_Task variable to configure R3:R2 as a
+; pointer into the TASK_PARAMS table.
+.MACRO REINIT_TASK_TABLE_PTR
+
+ LDA R0, TaskMgr.This_Task
+ LDI R1, #PARAM_TABLE_OFFSET
+ MUL R1
+
+ LDA R2, TASK_PARAMS_PTR + 0 ; Load R3:R2 with the start of the
+ LDA R3, TASK_PARAMS_PTR + 1 ; task parameter region
+
+ ADD R2 ; Add [R3:R2] + [R1:R0] -> [R3:R2]
+ T0X R2
+ TX0 R1
+ ADC R3
+ T0X R3
+.ENDM
+
+; BACKUP_FULL_CONTEXT pushes all 8 registers to the stack
+.MACRO BACKUP_FULL_CONTEXT
+ PSH R0
+ PSH R1
+ PSH R2
+ PSH R3
+ PSH R4
+ PSH R5
+ PSH R6
+ PSH R7
+.ENDM
+
+; RESTORE_FULL_CONTEXT pops all 8 registers off of the stack
+.MACRO RESTORE_FULL_CONTEXT
+ POP R7
+ POP R6
+ POP R5
+ POP R4
+ POP R3
+ POP R2
+ POP R1
+ POP R0
+.ENDM
+
+; SUSPEND_CURRENT_TASK pushes all of the registers to a task's stack, then
+; backups up the stack pointer to the system memory backup location for that
+; task.
+.MACRO SUSPEND_CURRENT_TASK
+ BACKUP_FULL_CONTEXT
+
+ REINIT_STACK_BUFFER_PTR
+
+ RETRIEVE_SP ; Copy CPU SP -> R1:R0
+ STX R2 ; Push R1:R0 -> [R3:R2]*
+ TX0 R1
+ STO R2,1
+.ENDM
+
+; AWAKEN_NEXT_TASK is responsible for updating the Next_Task variable, then
+; using it to restore the stack pointer from the system memory copy. It then
+; updates the memory write protection parameters and I/O write qualification
+; register for the new task. Finally, it resets the pre-emption timer and
+; restores the register state from the task's stack.
+.MACRO AWAKEN_NEXT_TASK
+ LDA R1, TaskMgr.Next_Task ; Copy Next_Task -> This_Task
+ STA R1, TaskMgr.This_Task
+
+; This is a simple round-robin scheduler, unless an ISR alters the Next_Task
+; variable, so increment the task count, check it against the total task
+; count, and reset it to task 0 if necessary.
+
+ INC R1 ; Increment the task count
+ LDI R0, #TASK_COUNT ; Compare it with the task count
+ XOR R1
+ BNZ _TS_ADV_TN_\@ ; If it matches the task count
+ LDI R1, #$00 ; reset the counter to zero
+_TS_ADV_TN_\@:STA R1, TaskMgr.Next_Task ; Store the new value into Next_Task
+
+ REINIT_STACK_BUFFER_PTR ; Lookup the new task's table pointer
+
+ LDO R2, PARAM_MAIN_ADDR_HIGH ; Push [R3:R2]* -> R1:R0
+ T0X R1
+ LDO R2, PARAM_MAIN_ADDR_LOW
+ RELOCATE_SP ; Update R1:R0 -> CPU SP
+
+ REINIT_TASK_TABLE_PTR ; Setup R3:R2 to point to the task table
+
+ ; Rewrite the RAM WPR register for this task. Note that the WPR
+ ; is a 32-bit register.
+ LDO R2, PARAM_WPR_BYTE0
+ STA R0, WPR_MASK_0
+
+ LDO R2, PARAM_WPR_BYTE1
+ STA R0, WPR_MASK_1
+
+ LDO R2, PARAM_WPR_BYTE2
+ STA R0, WPR_MASK_2
+
+ LDO R2, PARAM_WPR_BYTE3
+ STA R0, WPR_MASK_3
+
+ LDO R2, PARAM_WQL_LOW ; Update the new task's WQL
+ STA R0, IO_WRITE_QUAL
+
+ RESET_PREEMPTION_TIMER ; Reset the PIT timer
+
+ RESTORE_FULL_CONTEXT ; Restore the new task's register state
+ RTI
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; System Start
+;
+; System initialization requires that the CPU start in supervisor mode, as it
+; writes to every active region in memory. Thus, if the CPU is NOT in
+; in supervisor mode, something has gone horribly wrong. This branch locks the
+; main loop if the I bit is not set. This is probably unnecessary now that the
+; panic ISR is in place.
+;------------------------------------------------------------------------------
+
+; INIT_NEXT_TASK forces the Next_Task variable to 0 (Task 0)
+.MACRO INIT_NEXT_TASK
+ CLR R0
+ STA R0, TaskMgr.Next_Task
+.ENDM
+
+.MACRO BOOT_SYSTEM
+; Before beginning, turn off all of the CPU interrupts (The NMI will still be
+; active, but memory write protection is effectively disabled with the I-bit
+; set) Note that this code is running in interrupt context (I-bit is set)
+; so it is "uninterruptible" due to the HDL generic being set. However, this
+; doesn't prevent pending interrupts from being latched by the CPU.
+; Note that this macro is defined in "isr_const.s"
+ DISABLE_CPU_INTS
+
+; Even though interrupts are off, disable the task timer so that there isn't
+; a pending task timer interrupt waiting when interrupts are re-enabled. This
+; avoids the first task missing out on initialization.
+ DISABLE_PREEMPTION_TIMER
+
+; Initialize the system fault flags
+ INITIALIZE_FAULT_FLAGS
+
+; Setup the stack and stack pointer for each of the tasks. (see above)
+ INSTANCE_TASK_SETUP
+
+; Before starting, make sure the external interrupt controller has been
+; initialized. Initialization of the external interrupt controller involves
+; clearing any pending interrupts and setting up the interrupt mask. Finally,
+; the CPU interrupts should be enabled at this point, as the interrupt core is
+; ready.
+.IFDEF INTMGR16
+ INITIALIZE_IO_INTMGR16 ; Setup the 16-bit IF
+.ELSE
+ INITIALIZE_IO_INTMGR ; Setup the 8-bit IF
+.ENDIF
+; Once the external interrupt manager is configured, enable the CPU interrupts
+ ENABLE_CPU_INTS ; Enable the CPU interrupt inputs
+
+; Like the task switcher ISR, restore the full CPU state for the first task
+ INIT_NEXT_TASK
+ AWAKEN_NEXT_TASK
+
+; Create all of the task loops here.
+ INSTANCE_TASK_LOOPS
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Loops
+;------------------------------------------------------------------------------
+
+; INSTANCE_MAIN_LOOP:
+; These loops represent each task's "main()", and should never "exit".
+; Each task's func.s file should declare two required functions, TASKn_INIT and
+; TASKn_EXEC
+;
+; Note that the call to the task switch ISR occurs prior to the task's exec
+; function to allow every task to finish its setup BEFORE any task begins
+; processing.
+;
+; Last, the final branch is only taken if the I bit is still NOT set. If it
+; somehow gets set, the task will trigger a system panic (which never returns)
+
+; There should be one loop per task. Note that the labels are used in to create
+; the table of entry points
+
+.MACRO INSTANCE_TASK_LOOP
+TASK\@_MAIN: JSR TASK\@_INIT
+_TASK\@_LOOP: CALL_TASK_SW
+ JSR TASK\@_EXEC
+ BNI _TASK\@_LOOP
+ CALL_PANIC
+.ENDM
+
+; INSTANCE_MAIN_LOOPS expands to create the stub main loops for all of the
+; tasks based on the template above. There should be one setup per task, hence
+; the repeat based on TASK_COUNT. Note that the output labels will be used to
+; populate fields in the task parameter table.
+.MACRO INSTANCE_TASK_LOOPS
+ .REPEAT TASK_COUNT
+ INSTANCE_TASK_LOOP
+ .ENDR
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Software-callable Interrupts
+;------------------------------------------------------------------------------
+
+; CALL_PANIC executes the same ISR as a memory fault and triggers the shutdown
+; sequence. This requires a hard-reset to recover
+.MACRO CALL_PANIC
+ INT 0
+.ENDM
+
+; CALL_TASK_SW executes the same ISR as the pre-emption timer, and allows tasks
+; to give up any remaining time
+.MACRO CALL_TASK_SW
+ INT 1
+.ENDM
+
+; Interrupt 2 is reserved for the external interrupt manager. Calling it would
+; likely be harmless, but do no real work.
+
+; CALL_SUPV_FNn allow tasks to execute code in an interrupt/supervisor context
+; and should be used with caution.
+.MACRO CALL_SUPV_FN0
+ INT 3
+.ENDM
+
+.MACRO CALL_SUPV_FN1
+ INT 4
+.ENDM
+
+.MACRO CALL_SUPV_FN2
+ INT 5
+.ENDM
+
+.MACRO CALL_SUPV_FN3
+ INT 6
+.ENDM
+
+.MACRO CALL_SUPV_FN4
+ INT 7
+.ENDM
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; CPU Interrupt Control Macros
+;------------------------------------------------------------------------------
+.MACRO DISABLE_CPU_INTS
+ CLR R0
+ SMSK
+.ENDM
+
+.MACRO ENABLE_CPU_INTS
+ LDI R0, #CPU_INT_ENABLES
+ SMSK
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; RAM Access Fault Shutdown (CALL_PANIC)
+; If a task manages to cause a memory fault, sets default conditions and
+; then soft-halts the CPU.
+; Note that DISABLE_PREEMPTION_TIMER, SET_FAULT_FLAGS are defined in
+; "main_const.s", while PANIC_HALT macro calls each task's PANICn_HALT macro
+;------------------------------------------------------------------------------
+
+.MACRO PROCESS_RAM_FAULT
+ DISABLE_CPU_INTS ; Disable interrupts
+ DISABLE_PREEMPTION_TIMER ; Disable the task timer
+ SET_FAULT_FLAGS ; Copy the faulting task info
+ EXEC_PANIC_HALT ; Run any necessary shutdown code
+_RFLT_HALT: WAI ; Soft-Halt the CPU
+ JMP _RFLT_HALT ; This shouldn't happen, but if it does
+.ENDM
+
+.MACRO CREATE_PANIC_TASK_BLOCK
+ LDI R0, #\@
+ LDI R1, #PARAM_TABLE_OFFSET
+ MUL R1
+
+ LDA R2, TASK_PARAMS_PTR + 0 ; Load R3:R2 with the start of the
+ LDA R3, TASK_PARAMS_PTR + 1 ; task parameter region
+
+ ADD R2 ; Add [R3:R2] + [R1:R0] -> [R3:R2]
+ T0X R2
+ TX0 R1
+ ADC R3
+ T0X R3
+
+ ; Update the WQL for the task's panic code so each task isn't
+ ; doing this on its own
+
+ LDO R2, PARAM_WQL_LOW
+ STA R0, IO_WRITE_QUAL
+
+ TASK\@_PANIC
+.ENDM
+
+.MACRO EXEC_PANIC_HALT
+ .REPEAT TASK_COUNT
+ CREATE_PANIC_TASK_BLOCK
+ .ENDR
+.ENDM
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Switcher ISR (CALL_TASK_SW)
+;
+; Handles switching context between tasks when called.
+;------------------------------------------------------------------------------
+
+.MACRO SWITCH_TASKS
+ SUSPEND_CURRENT_TASK
+ AWAKEN_NEXT_TASK
+.ENDM
+
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; External System Interrupt Map & ISR Macros
+; This code configures the external I/O interrupt manager at startup
+;------------------------------------------------------------------------------
+
+; Setup the external I/O Interrupt manager by writing the mask registers and
+; clearing any pending interrupts. Note that the interrupt enable constants
+; are defined in ext_isr_config.s
+
+.MACRO INITIALIZE_IO_INTMGR
+ CLR R0 ; Disable all external interrupts
+ STA R0, EXT_INT_MASK
+
+ LDI R0, #SEMAPHORE_VAL ; Clear any pending interrupts
+ STA R0, EXT_INT_PEND ; and do a master acknowledge
+ STA R0, EXT_INT_ACK
+
+ LDI R0, #EXT_INTERRUPT_EN_L; Re-enable the external interrupts
+ STA R0, EXT_INT_MASK
+.ENDM
+
+.MACRO INITIALIZE_IO_INTMGR16
+ CLR R0 ; Disable all external interrupts
+ STA R0, EXT_INT16_MASK_L
+ STA R0, EXT_INT16_MASK_H
+
+ LDI R0, #SEMAPHORE_VAL ; Clear any pending interrupts
+ STA R0, EXT_INT16_PEND_L ; and do a master acknowledge
+ STA R0, EXT_INT16_PEND_H
+ STA R0, EXT_INT16_ACK
+
+ LDI R0, #EXT_INTERRUPT_EN_L; Re-enable the external interrupts
+ STA R0, EXT_INT16_MASK_L
+
+ LDI R0, #EXT_INTERRUPT_EN_H; Re-enable the external interrupts
+ STA R0, EXT_INT16_MASK_H
+.ENDM
+
+; Sets up an individual external interrupt macro. Note that these refer to
+; macros defined in ext_isr_config.s
+
+.MACRO PROCESS_EXT_ISR
+ SET_INT\@_FLAGS
+
+ TX0 R3 ; When done with the flags, update the
+ LDI R1, #EXT_INT\@_BIT ; mask clear register with the ext bit
+ OR R1 ; and restore it to R3. Then, before
+ T0X R3 ; falling into the next check, make
+ TX0 R2 ; sure to restore the current ints
+.ENDM
+
+; This code checks the external I/O interrupt manager status and processes the
+; flag code for each interrupt source.
+
+.MACRO CHECK_EXTERNAL_IO_INTS
+_EXT_INT_STRT:PSH R0
+ PSH R1
+ PSH R2
+ PSH R3
+
+_EXT_INT_LO: CLR R0 ; R3 will be our pending mask clear reg,
+ T0X R3 ; so clear it here
+
+ LDA R0, EXT_INT_PEND ; R2 will be our current pending reg, so
+ T0X R2 ; load it from the hardware here
+
+_EXT_INT_0: BTT 0
+ BRZ _EXT_INT_1
+ PROCESS_EXT_ISR
+
+_EXT_INT_1: BTT 1
+ BRZ _EXT_INT_2
+ PROCESS_EXT_ISR
+
+_EXT_INT_2: BTT 2
+ BRZ _EXT_INT_3
+ PROCESS_EXT_ISR
+
+_EXT_INT_3: BTT 3
+ BRZ _EXT_INT_4
+ PROCESS_EXT_ISR
+
+_EXT_INT_4: BTT 4
+ BRZ _EXT_INT_5
+ PROCESS_EXT_ISR
+
+_EXT_INT_5: BTT 5
+ BRZ _EXT_INT_6
+ PROCESS_EXT_ISR
+
+_EXT_INT_6: BTT 6
+ BRZ _EXT_INT_7
+ PROCESS_EXT_ISR
+
+_EXT_INT_7: BTT 7
+ BRZ _EXT_INT_CLR
+ PROCESS_EXT_ISR
+
+_EXT_INT_CLR: STA R3, EXT_INT_PEND
+
+ STA R3, EXT_INT_ACK ; pending ints and ack the HW
+
+ POP R3
+ POP R2
+ POP R1
+ POP R0
+ RTI
+.ENDM
+
+.MACRO CHECK_EXTERNAL_IO_INTS16
+_EXT_INT_STRT:PSH R0
+ PSH R1
+ PSH R2
+ PSH R3
+
+_EXT_INT_LO: CLR R0 ; R3 will be our pending mask clear reg,
+ T0X R3 ; so clear it here
+
+ LDA R0, EXT_INT16_PEND_L; R2 will be our current pending reg, so
+ T0X R2 ; load it from the hardware here
+
+_EXT_INT_0: BTT 0
+ BRZ _EXT_INT_1
+ PROCESS_EXT_ISR
+
+_EXT_INT_1: BTT 1
+ BRZ _EXT_INT_2
+ PROCESS_EXT_ISR
+
+_EXT_INT_2: BTT 2
+ BRZ _EXT_INT_3
+ PROCESS_EXT_ISR
+
+_EXT_INT_3: BTT 3
+ BRZ _EXT_INT_4
+ PROCESS_EXT_ISR
+
+_EXT_INT_4: BTT 4
+ BRZ _EXT_INT_5
+ PROCESS_EXT_ISR
+
+_EXT_INT_5: BTT 5
+ BRZ _EXT_INT_6
+ PROCESS_EXT_ISR
+
+_EXT_INT_6: BTT 6
+ BRZ _EXT_INT_7
+ PROCESS_EXT_ISR
+
+_EXT_INT_7: BTT 7
+ BRZ _EXT_INT_CLRL
+ PROCESS_EXT_ISR
+
+_EXT_INT_CLRL:STA R3, EXT_INT16_PEND_L
+
+_EXT_INT_HI: CLR R0
+ T0X R3
+
+ LDA R0, EXT_INT16_PEND_H
+ T0X R2
+
+_EXT_INT_8: BTT 0
+ BRZ _EXT_INT_9
+ PROCESS_EXT_ISR
+
+_EXT_INT_9: BTT 1
+ BRZ _EXT_INT_10
+ PROCESS_EXT_ISR
+
+_EXT_INT_10: BTT 2
+ BRZ _EXT_INT_11
+ PROCESS_EXT_ISR
+
+_EXT_INT_11: BTT 3
+ BRZ _EXT_INT_12
+ PROCESS_EXT_ISR
+
+_EXT_INT_12: BTT 4
+ BRZ _EXT_INT_13
+ PROCESS_EXT_ISR
+
+_EXT_INT_13: BTT 5
+ BRZ _EXT_INT_14
+ PROCESS_EXT_ISR
+
+_EXT_INT_14: BTT 6
+ BRZ _EXT_INT_15
+ PROCESS_EXT_ISR
+
+_EXT_INT_15: BTT 7
+ BRZ _EXT_INT_CLRH
+ PROCESS_EXT_ISR
+
+_EXT_INT_CLRH:STA R3, EXT_INT16_PEND_H
+
+_EXT_ACK_HW: STA R3, EXT_INT16_ACK ; pending ints and ack the HW
+
+ POP R3
+ POP R2
+ POP R1
+ POP R0
+ RTI
+.ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; ISR/Supervisory Mode Functions - Allows tasks to define up to 5 functions
+; that will operate in supervisor mode by calling a soft-int.
+;
+; Note 1: Due to assembler limitations, it is actually necessary for each task
+; to define all 5 sets of these macros, even if not used. These are defined
+; in the pattern of TASKx_SPV_FUNCy, where x is the task number and
+; y is the function 0-4.
+;
+; Note 2: Task code for these functions should NOT use RTS or RTI, as this WILL
+; corrupt their stacks and likely crash the whole system. These are intended
+; for operations that are atomic in nature, or that require supervisor perms
+; due to write access (writing flags/messages to other tasks)
+;
+; Note 3: These functions will run to completion (or hang) regardless of the
+; task timer, as interrupts can't pre-empt each other, so caution should be
+; used with them. However, both the internal and external interrupt managers
+; will latch incoming interrupts while these are running.
+;------------------------------------------------------------------------------
+
+; CREATE_SUPV_FUNC creates an individual supervisory task function, which is
+; referenced in the ISR table. (EXEC_SUPVn is used in the interrupt table)
+
+.MACRO CREATE_SUPV_FUNC
+EXEC_SUPV\@: BACKUP_FULL_CONTEXT
+
+ REINIT_TASK_TABLE_PTR ; Setup R3:R2 to point to the task table
+
+ LDO R2, SUPV_FN\@_ENTRY_HIGH
+ PSH R0
+
+ LDO R2, SUPV_FN\@_ENTRY_LOW
+ PSH R0
+
+ RTS ; Use RTS to "return" to our jump addr
+
+_F\@_EXIT: RESTORE_FULL_CONTEXT
+ RTI
+.ENDM
+
+; CREATE_Fn_FUNCTION_STUB creates an entry point that is referenced in the
+; TASK_PARAM_TABLE, and is "RTS JMP'ed" to by the code from CREATE_SUPV_FUNC.
+; Because RTS was used to reach the code generated in these blocks, a final
+; JMP instruction will return to the calling supervisory function without
+; disrupting the stack. (These aren't technically subroutines)
+
+.MACRO CREATE_F0_FUNCTION_STUB
+_F0_EXE_S\@: TASK\@_SUPV_FN0
+ JMP _F0_EXIT
+.ENDM
+
+.MACRO CREATE_F1_FUNCTION_STUB
+_F1_EXE_S\@: TASK\@_SUPV_FN1
+ JMP _F1_EXIT
+.ENDM
+
+.MACRO CREATE_F2_FUNCTION_STUB
+_F2_EXE_S\@: TASK\@_SUPV_FN2
+ JMP _F2_EXIT
+.ENDM
+
+.MACRO CREATE_F3_FUNCTION_STUB
+_F3_EXE_S\@: TASK\@_SUPV_FN3
+ JMP _F3_EXIT
+.ENDM
+
+.MACRO CREATE_F4_FUNCTION_STUB
+_F4_EXE_S\@: TASK\@_SUPV_FN4
+ JMP _F4_EXIT
+.ENDM
+
+; INSTANCE_SUPV_FUNCS creates all 5 supervisory function entry points and a set
+; of stub functions for each task and is used to place everything in ROM
+.MACRO INSTANCE_SUPV_FUNCS
+ .REPEAT 5
+ CREATE_SUPV_FUNC
+ .ENDR
+
+ .REPEAT TASK_COUNT
+ CREATE_F0_FUNCTION_STUB
+ CREATE_F1_FUNCTION_STUB
+ CREATE_F2_FUNCTION_STUB
+ CREATE_F3_FUNCTION_STUB
+ CREATE_F4_FUNCTION_STUB
+ .ENDR
+.ENDM
+
+;------------------------------------------------------------------------------
\ No newline at end of file
Index: open8_urisc/trunk/taskmgr/taskmgr_func.s
===================================================================
--- open8_urisc/trunk/taskmgr/taskmgr_func.s (nonexistent)
+++ open8_urisc/trunk/taskmgr/taskmgr_func.s (revision 301)
@@ -0,0 +1,93 @@
+; Copyright (c)2022 Jeremy Seth Henry
+; All rights reserved.
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+; * Redistributions of source code must retain the above copyright
+; notice, this list of conditions and the following disclaimer.
+; * Redistributions in binary form must reproduce the above copyright
+; notice, this list of conditions and the following disclaimer in the
+; documentation and/or other materials provided with the distribution,
+; where applicable (as part of a user interface, debugging port, etc.)
+;
+; THIS SOFTWARE IS PROVIDED BY JEREMY SETH HENRY ``AS IS'' AND ANY
+; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+; DISCLAIMED. IN NO EVENT SHALL JEREMY SETH HENRY BE LIABLE FOR ANY
+; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;
+;------------------------------------------------------------------------------
+; taskmgr_func.s
+;
+; Program Start, Task Setup, and Core Interrupt Service
+;
+; Note that the CPU must be in supervisory mode for this code to execute
+; properly, which means the I bit MUST be set at startup. This is controlled
+; by HDL generics - specifically the supervisor mode enable.
+;
+; Revision History
+; Author Date Change
+;---------------- -------- ---------------------------------------------------
+; Seth Henry 7/15/22 Initial Release
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; System Bootstrap / Start of ROM
+;------------------------------------------------------------------------------
+.ORG BOOT_BLOCK
+BOOTSTRAP: JMP INIT_MAIN ; Jump past the pointer block
+ NOP ; Aligns the data block, but not executed
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Pointer table
+;------------------------------------------------------------------------------
+ INSTANCE_TASK_POINTERS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Parameter table
+;------------------------------------------------------------------------------
+ INSTANCE_TASK_EXPORTS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; System start
+;------------------------------------------------------------------------------
+INIT_MAIN: BNI INIT_MAIN ; Trap in a loop if supervisor mode isn't set
+ BOOT_SYSTEM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; RAM Access Fault Shutdown (CALL_PANIC)
+;------------------------------------------------------------------------------
+RAM_FAULT: PROCESS_RAM_FAULT
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; Task Switch ISR (CALL_TASK_SW)
+;------------------------------------------------------------------------------
+TASK_SW_INT: SWITCH_TASKS
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; External Interrupt Handler ISR
+;------------------------------------------------------------------------------
+EXT_INT_MGR:
+.IFDEF INTMGR16
+ CHECK_EXTERNAL_IO_INTS16
+.ELSE
+ CHECK_EXTERNAL_IO_INTS
+.ENDIF
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; ISR Context Function Calls (CALL_SUPV_FN)
+;------------------------------------------------------------------------------
+ INSTANCE_SUPV_FUNCS
+;------------------------------------------------------------------------------