OpenCores
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
    /open8_urisc/trunk
    from Rev 300 to Rev 301
    Reverse comparison

Rev 300 → Rev 301

/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
/taskmgr/app.out Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
taskmgr/app.out Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: taskmgr/app.s =================================================================== --- taskmgr/app.s (nonexistent) +++ 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: taskmgr/make.bat =================================================================== --- taskmgr/make.bat (nonexistent) +++ 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: taskmgr/mk_app =================================================================== --- taskmgr/mk_app (nonexistent) +++ taskmgr/mk_app (revision 301) @@ -0,0 +1,2 @@ +[objects] +app.obj \ No newline at end of file Index: taskmgr/open8_as.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: taskmgr/open8_as.exe =================================================================== --- taskmgr/open8_as.exe (nonexistent) +++ taskmgr/open8_as.exe (revision 301)
taskmgr/open8_as.exe Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: taskmgr/open8_link.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: taskmgr/open8_link.exe =================================================================== --- taskmgr/open8_link.exe (nonexistent) +++ taskmgr/open8_link.exe (revision 301)
taskmgr/open8_link.exe Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: taskmgr/srec_cat.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: taskmgr/srec_cat.exe =================================================================== --- taskmgr/srec_cat.exe (nonexistent) +++ taskmgr/srec_cat.exe (revision 301)
taskmgr/srec_cat.exe Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: taskmgr/sys_const.s =================================================================== --- taskmgr/sys_const.s (nonexistent) +++ 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: taskmgr/sys_hw_map.s =================================================================== --- taskmgr/sys_hw_map.s (nonexistent) +++ 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: taskmgr/sys_version.s =================================================================== --- taskmgr/sys_version.s (nonexistent) +++ 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: taskmgr/task_0_const.s =================================================================== --- taskmgr/task_0_const.s (nonexistent) +++ 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: taskmgr/task_0_func.s =================================================================== --- taskmgr/task_0_func.s (nonexistent) +++ 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: taskmgr/task_1_const.s =================================================================== --- taskmgr/task_1_const.s (nonexistent) +++ 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: taskmgr/task_1_func.s =================================================================== --- taskmgr/task_1_func.s (nonexistent) +++ 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: taskmgr/taskmgr_config.s =================================================================== --- taskmgr/taskmgr_config.s (nonexistent) +++ 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: taskmgr/taskmgr_const.s =================================================================== --- taskmgr/taskmgr_const.s (nonexistent) +++ 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: taskmgr/taskmgr_func.s =================================================================== --- taskmgr/taskmgr_func.s (nonexistent) +++ 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 +;------------------------------------------------------------------------------

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.