Home » Archimedes archive » Acorn User » AU 1996-08.adf » Regulars » StarInfo/Kemp/TaskEnsure/TaskEnsSrc

StarInfo/Kemp/TaskEnsure/TaskEnsSrc

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1996-08.adf » Regulars
Filename: StarInfo/Kemp/TaskEnsure/TaskEnsSrc
Read OK:
File size: 2366 bytes
Load address: 0000
Exec address: 0000
File contents
    1REM --------------------------------------------------------------------------
    2REM
    3REM     TaskEnsure (source)
    4REM
    5REM     Task name equivalent of 'RMEnsure'
    6REM
    7REM     by KCE Software (Andrew Kemp)
    8REM
    9REM     LEN March 1996
   10REM
   11REM --------------------------------------------------------------------------
   12
   13ON ERROR VDU 7:PRINT REPORT$;" at line ";STR$(ERL):END
   14
   15REM --------------------------------------------------------------------------
   16REM     Define some handy constants
   17REM --------------------------------------------------------------------------
   18
   19arm_V                   = 1<<28
   20workspace_size          = 1024
   21os_file_save            = 10
   22file$                   = "%.TaskEnsure"
   23filetype_utility        = &ffc
   24
   25REM --------------------------------------------------------------------------
   26REM     Define register name aliases
   27REM --------------------------------------------------------------------------
   28
   29workspace_pointer       = 12
   30link                    = 14
   31pc                      = 15
   32
   33REM --------------------------------------------------------------------------
   34REM     Build the utility
   35REM --------------------------------------------------------------------------
   36
   37DIM code% 500
   38PROCassemble
   39SYS "OS_File", os_file_save, file$, filetype_utility,, code%, O%
   40END
   41
   42:
   43
   44REM --------------------------------------------------------------------------
   45REM     Assemble utility code
   46REM --------------------------------------------------------------------------
   47
   48DEF PROCassemble
   49LOCAL pass%
   50FOR pass%=4 TO 6 STEP 2
   51P%=0: O%=code%
   52
   53[       OPT pass%
   54
   55; ----------------------------------------------------------------------------
   56;       Code is entered here
   57;
   58;       r1  = pointer to command line tail
   59;       r12 = address of 1024 bytes of workspace
   60; ----------------------------------------------------------------------------
   61
   62        LDRB    r0, [r1]
   63        CMP     r0, #ASC("""")          ; if command tail begins with '"',
   64        BEQ     quoted_taskname         ; the task name is in quotes
   65
   66; ----------------------------------------------------------------------------
   67;       r1 points to the start of a single word task name (or the end of the
   68;       command tail if there were no parameters given)
   69;
   70;       Terminate this name with a zero byte, and point r2 to the next
   71;       character
   72; ----------------------------------------------------------------------------
   73
   74        MOV     r2, r1
   75.taskname_loop
   76        LDRB    r0, [r2], #1            ; find the space after the task name
   77        CMP     r0, #ASC(" ")
   78        BLT     syntax_error            ; error if command line ends too early
   79        BNE     taskname_loop
   80
   81.taskname_skipped
   82        MOV     r0, #0
   83        STRB    r0, [r2, #-1]           ; terminate task name with zero byte
   84                                        ; r1 points to task name
   85                                        ; r2 points to rest of command line tail
   86
   87; ----------------------------------------------------------------------------
   88;       Now r2 points to the first space after the task name (or possibly the
   89;       end of the command line if the second parameter is missing)
   90;
   91;       Skip over the spaces so that r2 points to the start of the second
   92;       parameter
   93; ----------------------------------------------------------------------------
   94
   95.space_loop
   96        LDRB    r0, [r2], #1
   97        CMP     r0, #ASC(" ")
   98        BLT     syntax_error            ; error if second parameter missing
   99        BEQ     space_loop
  100
  101        SUB     r4, r2, #1              ; r4 points to output command
  102
  103; ----------------------------------------------------------------------------
  104;       At this point, r1 points to a zero terminated task name
  105;                      r4 points to a ctrl-char terminated *command
  106; ----------------------------------------------------------------------------
  107
  108        MOV     r3, r1                  ; now r3 points to task name
  109
  110        MOV     r0, #0                  ; zero => first call
  111.read_task_blocks
  112        MOV     r1, workspace_pointer
  113        MOV     r2, #workspace_size
  114        SWI     "XTaskManager_EnumerateTasks"
  115        MOVVS   pc, link                ; pass on any returned error to the user
  116
  117        MOV     r5, workspace_pointer   ; points to start of task info blocks
  118
  119; ----------------------------------------------------------------------------
  120;       Here r5 points to the start of a sequence of 16 byte task description
  121;       blocks - work through these, looking for our task
  122; ----------------------------------------------------------------------------
  123
  124.check_task_blocks
  125        CMP     r5, r1                  ; have we checked last of these blocks?
  126        BHS     checked_task_blocks
  127        LDR     r6, [r5, #4]            ; r6 points to task name returned
  128        MOV     r7, #0                  ; r7 = an offset into the strings
  129.compare_task_name
  130        LDRB    r8, [r3, r7]
  131        LDRB    r2, [r6, r7]
  132        CMP     r2, #ASC(" ")           ; have we reached end of returned name?
  133        MOVLT   r2, #0
  134
  135        CMP     r8, r2
  136        ADDNE   r5, r5, #16             ; OK, so that task wasn't right
  137        BNE     check_task_blocks       ; - try the next
  138
  139        ; the strings match so far - but have we reached the end?
  140
  141        CMP     r2, #0
  142        MOVEQS  pc, link                ; if we have a match, end here
  143        ADD     r7, r7, #1              ; increment string offset
  144        B       compare_task_name       ; check next character
  145
  146; ----------------------------------------------------------------------------
  147;       Here we have worked through a complete set of returned task
  148;       description blocks - check to see if TaskManager_EnumerateTasks has
  149;       any more to give us; otherwise execute the command supplied
  150; ----------------------------------------------------------------------------
  151
  152.checked_task_blocks
  153        CMN     r0, #1                  ; are the any more blocks to be read?
  154        BNE     read_task_blocks
  155
  156; ----------------------------------------------------------------------------
  157;       At this point, our task is definitely _not_ running
  158; ----------------------------------------------------------------------------
  159
  160        MOV     r0, r4                  ; r0 points to *command
  161        SWI     "XOS_CLI"
  162        MOV     pc, link                ; return, passing on any returned
  163                                        ; errors to the user
  164
  165; ----------------------------------------------------------------------------
  166;       Task name began with a '"', so we will assume it is being given in
  167;       double quotes
  168;
  169;       Find the closing '"' (if it exists) and then return to the standard
  170;       command line processing code (otherwise return an error)
  171; ----------------------------------------------------------------------------
  172
  173.quoted_taskname
  174        ADD     r1, r1, #1              ; task name starts after the '"'
  175        MOV     r2, r1
  176.quoted_taskname_loop
  177        LDRB    r0, [r2], #1
  178        CMP     r0, #ASC(" ")
  179        BLT     bad_string              ; error if no closing '"'
  180        CMP     r0, #ASC("""")
  181        BNE     quoted_taskname_loop
  182        B       taskname_skipped
  183
  184; ----------------------------------------------------------------------------
  185;       An error has occured - at least one of our parameters is missing
  186;
  187;       Blame everything on the user with a syntax error message
  188; ----------------------------------------------------------------------------
  189
  190.syntax_error_block
  191        DCD     0
  192        =       "Syntax: *TaskEnsure <task name> <*command>" + CHR$(0)
  193        ALIGN
  194
  195.syntax_error
  196        ADR     r0, syntax_error_block
  197        ORRS    pc, link, #arm_V
  198
  199; ----------------------------------------------------------------------------
  200;       An error has occured - the task name began with a '"', but there is
  201;       no terminating '"'
  202;
  203;       Blame everything on the user with a 'Bad string' message
  204; ----------------------------------------------------------------------------
  205
  206.bad_string_error_block
  207        DCD     253
  208        =       "Bad string" + CHR$(0)
  209        ALIGN
  210
  211.bad_string
  212        ADR     r0, bad_string_error_block
  213        ORRS    pc, link, #arm_V
  214
  215; ----------------------------------------------------------------------------
  216;       Version number and gratuitous author credit
  217; ----------------------------------------------------------------------------
  218
  219        =       "0.01 (02 Mar 1996) � Andrew Kemp"
  220
  221]
  222NEXT pass%
  223ENDPROC
P� --------------------------------------------------------------------------
�
�     TaskEnsure (source)
�
,�     Task name equivalent of 'RMEnsure'
�
'�     by KCE Software (Andrew Kemp)
�
	�     � March 1996

�
P� --------------------------------------------------------------------------


#� � � 7:� �$;" at line ";�(�):�

P� --------------------------------------------------------------------------
%�     Define some handy constants
P� --------------------------------------------------------------------------

#arm_V                   = 1<<28
"workspace_size          = 1024
 os_file_save            = 10
,file$                   = "%.TaskEnsure"
"filetype_utility        = &ffc

P� --------------------------------------------------------------------------
&�     Define register name aliases
P� --------------------------------------------------------------------------

 workspace_pointer       = 12
 link                    = 14
 pc                      = 15
 
!P� --------------------------------------------------------------------------
"�     Build the utility
#P� --------------------------------------------------------------------------
$
%� code% 500
&
�assemble
'Cș "OS_File", os_file_save, file$, filetype_utility,, code%, O%
(�
)
*:
+
,P� --------------------------------------------------------------------------
-�     Assemble utility code
.P� --------------------------------------------------------------------------
/
0� �assemble
1� pass%
2� pass%=4 � 6 � 2
3P%=0: O%=code%
4
5[       OPT pass%
6
7R; ----------------------------------------------------------------------------
8 ;       Code is entered here
9;
:.;       r1  = pointer to command line tail
;4;       r12 = address of 1024 bytes of workspace
<R; ----------------------------------------------------------------------------
=
>        LDRB    r0, [r1]
?L        CMP     r0, #�("""")          ; if command tail begins with '"',
@H        BEQ     quoted_taskname         ; the task name is in quotes
A
BR; ----------------------------------------------------------------------------
CP;       r1 points to the start of a single word task name (or the end of the
D;;       command tail if there were no parameters given)
E;
FJ;       Terminate this name with a zero byte, and point r2 to the next
G;       character
HR; ----------------------------------------------------------------------------
I
J        MOV     r2, r1
K.taskname_loop
LP        LDRB    r0, [r2], #1            ; find the space after the task name
M        CMP     r0, #�(" ")
NR        BLT     syntax_error            ; error if command line ends too early
O!        BNE     taskname_loop
P
Q.taskname_skipped
R        MOV     r0, #0
SP        STRB    r0, [r2, #-1]           ; terminate task name with zero byte
TD                                        ; r1 points to task name
UT                                        ; r2 points to rest of command line tail
V
WR; ----------------------------------------------------------------------------
XQ;       Now r2 points to the first space after the task name (or possibly the
YG;       end of the command line if the second parameter is missing)
Z;
[M;       Skip over the spaces so that r2 points to the start of the second
\;       parameter
]R; ----------------------------------------------------------------------------
^
_.space_loop
`         LDRB    r0, [r2], #1
a        CMP     r0, #�(" ")
bO        BLT     syntax_error            ; error if second parameter missing
c        BEQ     space_loop
d
eI        SUB     r4, r2, #1              ; r4 points to output command
f
gR; ----------------------------------------------------------------------------
hC;       At this point, r1 points to a zero terminated task name
iG;                      r4 points to a ctrl-char terminated *command
jR; ----------------------------------------------------------------------------
k
lH        MOV     r3, r1                  ; now r3 points to task name
m
n@        MOV     r0, #0                  ; zero => first call
o.read_task_blocks
p)        MOV     r1, workspace_pointer
q'        MOV     r2, #workspace_size
r1        SWI     "XTaskManager_EnumerateTasks"
sT        MOVVS   pc, link                ; pass on any returned error to the user
t
uQ        MOV     r5, workspace_pointer   ; points to start of task info blocks
v
wR; ----------------------------------------------------------------------------
xQ;       Here r5 points to the start of a sequence of 16 byte task description
y=;       blocks - work through these, looking for our task
zR; ----------------------------------------------------------------------------
{
|.check_task_blocks
}S        CMP     r5, r1                  ; have we checked last of these blocks?
~'        BHS     checked_task_blocks
M        LDR     r6, [r5, #4]            ; r6 points to task name returned
�M        MOV     r7, #0                  ; r7 = an offset into the strings
�.compare_task_name
�         LDRB    r8, [r3, r7]
�         LDRB    r2, [r6, r7]
�Q        CMP     r2, #�(" ")           ; have we reached end of returned name?
�        MOVLT   r2, #0
�
�        CMP     r8, r2
�K        ADDNE   r5, r5, #16             ; OK, so that task wasn't right
�<        BNE     check_task_blocks       ; - try the next
�
�E        ; the strings match so far - but have we reached the end?
�
�        CMP     r2, #0
�G        �QS  pc, link                ; if we have a match, end here
�E        ADD     r7, r7, #1              ; increment string offset
�B        B       compare_task_name       ; check next character
�
�R; ----------------------------------------------------------------------------
�G;       Here we have worked through a complete set of returned task
�O;       description blocks - check to see if TaskManager_EnumerateTasks has
�G;       any more to give us; otherwise execute the command supplied
�R; ----------------------------------------------------------------------------
�
�.checked_task_blocks
�Q        CMN     r0, #1                  ; are the any more blocks to be read?
�$        BNE     read_task_blocks
�
�R; ----------------------------------------------------------------------------
�?;       At this point, our task is definitely _not_ running
�R; ----------------------------------------------------------------------------
�
�C        MOV     r0, r4                  ; r0 points to *command
�        SWI     "XOS_CLI"
�M        MOV     pc, link                ; return, passing on any returned
�@                                        ; errors to the user
�
�R; ----------------------------------------------------------------------------
�N;       Task name began with a '"', so we will assume it is being given in
�;       double quotes
�;
�O;       Find the closing '"' (if it exists) and then return to the standard
�D;       command line processing code (otherwise return an error)
�R; ----------------------------------------------------------------------------
�
�.quoted_taskname
�L        ADD     r1, r1, #1              ; task name starts after the '"'
�        MOV     r2, r1
�.quoted_taskname_loop
�         LDRB    r0, [r2], #1
�        CMP     r0, #�(" ")
�E        BLT     bad_string              ; error if no closing '"'
�         CMP     r0, #�("""")
�(        BNE     quoted_taskname_loop
�$        B       taskname_skipped
�
�R; ----------------------------------------------------------------------------
�L;       An error has occured - at least one of our parameters is missing
�;
�D;       Blame everything on the user with a syntax error message
�R; ----------------------------------------------------------------------------
�
�.syntax_error_block
�        DCD     0
�G        =       "Syntax: *TaskEnsure <task name> <*command>" + �(0)
�        ALIGN
�
�.syntax_error
�*        ADR     r0, syntax_error_block
�#        �RS    pc, link, #arm_V
�
�R; ----------------------------------------------------------------------------
�O;       An error has occured - the task name began with a '"', but there is
�;       no terminating '"'
�;
�D;       Blame everything on the user with a 'Bad string' message
�R; ----------------------------------------------------------------------------
�
�.bad_string_error_block
�        DCD     253
�'        =       "Bad string" + �(0)
�        ALIGN
�
�.bad_string
�.        ADR     r0, bad_string_error_block
�#        �RS    pc, link, #arm_V
�
�R; ----------------------------------------------------------------------------
�7;       Version number and gratuitous author credit
�R; ----------------------------------------------------------------------------
�
�6        =       "0.01 (02 Mar 1996) � Andrew Kemp"
�
�]
�� pass%
��
�
00000000  0d 00 01 50 f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...P. ----------|
00000010  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000050  0d 00 02 05 f4 0d 00 03  1d f4 20 20 20 20 20 54  |..........     T|
00000060  61 73 6b 45 6e 73 75 72  65 20 28 73 6f 75 72 63  |askEnsure (sourc|
00000070  65 29 0d 00 04 05 f4 0d  00 05 2c f4 20 20 20 20  |e)........,.    |
00000080  20 54 61 73 6b 20 6e 61  6d 65 20 65 71 75 69 76  | Task name equiv|
00000090  61 6c 65 6e 74 20 6f 66  20 27 52 4d 45 6e 73 75  |alent of 'RMEnsu|
000000a0  72 65 27 0d 00 06 05 f4  0d 00 07 27 f4 20 20 20  |re'........'.   |
000000b0  20 20 62 79 20 4b 43 45  20 53 6f 66 74 77 61 72  |  by KCE Softwar|
000000c0  65 20 28 41 6e 64 72 65  77 20 4b 65 6d 70 29 0d  |e (Andrew Kemp).|
000000d0  00 08 05 f4 0d 00 09 16  f4 20 20 20 20 20 a9 20  |.........     . |
000000e0  4d 61 72 63 68 20 31 39  39 36 0d 00 0a 05 f4 0d  |March 1996......|
000000f0  00 0b 50 f4 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..P. -----------|
00000100  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000130  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00000140  00 0c 04 0d 00 0d 23 ee  20 85 20 ef 20 37 3a f1  |......#. . . 7:.|
00000150  20 f6 24 3b 22 20 61 74  20 6c 69 6e 65 20 22 3b  | .$;" at line ";|
00000160  c3 28 9e 29 3a e0 0d 00  0e 04 0d 00 0f 50 f4 20  |.(.):........P. |
00000170  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000001b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 00 10 25 f4 20  |----------...%. |
000001c0  20 20 20 20 44 65 66 69  6e 65 20 73 6f 6d 65 20  |    Define some |
000001d0  68 61 6e 64 79 20 63 6f  6e 73 74 61 6e 74 73 0d  |handy constants.|
000001e0  00 11 50 f4 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..P. -----------|
000001f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000220  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00000230  00 12 04 0d 00 13 23 61  72 6d 5f 56 20 20 20 20  |......#arm_V    |
00000240  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000250  20 31 3c 3c 32 38 0d 00  14 22 77 6f 72 6b 73 70  | 1<<28..."worksp|
00000260  61 63 65 5f 73 69 7a 65  20 20 20 20 20 20 20 20  |ace_size        |
00000270  20 20 3d 20 31 30 32 34  0d 00 15 20 6f 73 5f 66  |  = 1024... os_f|
00000280  69 6c 65 5f 73 61 76 65  20 20 20 20 20 20 20 20  |ile_save        |
00000290  20 20 20 20 3d 20 31 30  0d 00 16 2c 66 69 6c 65  |    = 10...,file|
000002a0  24 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |$               |
000002b0  20 20 20 20 3d 20 22 25  2e 54 61 73 6b 45 6e 73  |    = "%.TaskEns|
000002c0  75 72 65 22 0d 00 17 22  66 69 6c 65 74 79 70 65  |ure"..."filetype|
000002d0  5f 75 74 69 6c 69 74 79  20 20 20 20 20 20 20 20  |_utility        |
000002e0  3d 20 26 66 66 63 0d 00  18 04 0d 00 19 50 f4 20  |= &ffc.......P. |
000002f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000330  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 00 1a 26 f4 20  |----------...&. |
00000340  20 20 20 20 44 65 66 69  6e 65 20 72 65 67 69 73  |    Define regis|
00000350  74 65 72 20 6e 61 6d 65  20 61 6c 69 61 73 65 73  |ter name aliases|
00000360  0d 00 1b 50 f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...P. ----------|
00000370  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000003b0  0d 00 1c 04 0d 00 1d 20  77 6f 72 6b 73 70 61 63  |....... workspac|
000003c0  65 5f 70 6f 69 6e 74 65  72 20 20 20 20 20 20 20  |e_pointer       |
000003d0  3d 20 31 32 0d 00 1e 20  6c 69 6e 6b 20 20 20 20  |= 12... link    |
000003e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000003f0  3d 20 31 34 0d 00 1f 20  70 63 20 20 20 20 20 20  |= 14... pc      |
00000400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000410  3d 20 31 35 0d 00 20 04  0d 00 21 50 f4 20 2d 2d  |= 15.. ...!P. --|
00000420  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000460  2d 2d 2d 2d 2d 2d 2d 2d  0d 00 22 1b f4 20 20 20  |--------.."..   |
00000470  20 20 42 75 69 6c 64 20  74 68 65 20 75 74 69 6c  |  Build the util|
00000480  69 74 79 0d 00 23 50 f4  20 2d 2d 2d 2d 2d 2d 2d  |ity..#P. -------|
00000490  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000004d0  2d 2d 2d 0d 00 24 04 0d  00 25 0f de 20 63 6f 64  |---..$...%.. cod|
000004e0  65 25 20 35 30 30 0d 00  26 0d f2 61 73 73 65 6d  |e% 500..&..assem|
000004f0  62 6c 65 0d 00 27 43 c8  99 20 22 4f 53 5f 46 69  |ble..'C.. "OS_Fi|
00000500  6c 65 22 2c 20 6f 73 5f  66 69 6c 65 5f 73 61 76  |le", os_file_sav|
00000510  65 2c 20 66 69 6c 65 24  2c 20 66 69 6c 65 74 79  |e, file$, filety|
00000520  70 65 5f 75 74 69 6c 69  74 79 2c 2c 20 63 6f 64  |pe_utility,, cod|
00000530  65 25 2c 20 4f 25 0d 00  28 05 e0 0d 00 29 04 0d  |e%, O%..(....)..|
00000540  00 2a 05 3a 0d 00 2b 04  0d 00 2c 50 f4 20 2d 2d  |.*.:..+...,P. --|
00000550  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000590  2d 2d 2d 2d 2d 2d 2d 2d  0d 00 2d 1f f4 20 20 20  |--------..-..   |
000005a0  20 20 41 73 73 65 6d 62  6c 65 20 75 74 69 6c 69  |  Assemble utili|
000005b0  74 79 20 63 6f 64 65 0d  00 2e 50 f4 20 2d 2d 2d  |ty code...P. ---|
000005c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000600  2d 2d 2d 2d 2d 2d 2d 0d  00 2f 04 0d 00 30 0f dd  |-------../...0..|
00000610  20 f2 61 73 73 65 6d 62  6c 65 0d 00 31 0b ea 20  | .assemble..1.. |
00000620  70 61 73 73 25 0d 00 32  15 e3 20 70 61 73 73 25  |pass%..2.. pass%|
00000630  3d 34 20 b8 20 36 20 88  20 32 0d 00 33 12 50 25  |=4 . 6 . 2..3.P%|
00000640  3d 30 3a 20 4f 25 3d 63  6f 64 65 25 0d 00 34 04  |=0: O%=code%..4.|
00000650  0d 00 35 15 5b 20 20 20  20 20 20 20 4f 50 54 20  |..5.[       OPT |
00000660  70 61 73 73 25 0d 00 36  04 0d 00 37 52 3b 20 2d  |pass%..6...7R; -|
00000670  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000006b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 00 38 20 3b  |-----------..8 ;|
000006c0  20 20 20 20 20 20 20 43  6f 64 65 20 69 73 20 65  |       Code is e|
000006d0  6e 74 65 72 65 64 20 68  65 72 65 0d 00 39 05 3b  |ntered here..9.;|
000006e0  0d 00 3a 2e 3b 20 20 20  20 20 20 20 72 31 20 20  |..:.;       r1  |
000006f0  3d 20 70 6f 69 6e 74 65  72 20 74 6f 20 63 6f 6d  |= pointer to com|
00000700  6d 61 6e 64 20 6c 69 6e  65 20 74 61 69 6c 0d 00  |mand line tail..|
00000710  3b 34 3b 20 20 20 20 20  20 20 72 31 32 20 3d 20  |;4;       r12 = |
00000720  61 64 64 72 65 73 73 20  6f 66 20 31 30 32 34 20  |address of 1024 |
00000730  62 79 74 65 73 20 6f 66  20 77 6f 72 6b 73 70 61  |bytes of workspa|
00000740  63 65 0d 00 3c 52 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |ce..<R; --------|
00000750  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000790  2d 2d 2d 2d 0d 00 3d 04  0d 00 3e 1c 20 20 20 20  |----..=...>.    |
000007a0  20 20 20 20 4c 44 52 42  20 20 20 20 72 30 2c 20  |    LDRB    r0, |
000007b0  5b 72 31 5d 0d 00 3f 4c  20 20 20 20 20 20 20 20  |[r1]..?L        |
000007c0  43 4d 50 20 20 20 20 20  72 30 2c 20 23 97 28 22  |CMP     r0, #.("|
000007d0  22 22 22 29 20 20 20 20  20 20 20 20 20 20 3b 20  |""")          ; |
000007e0  69 66 20 63 6f 6d 6d 61  6e 64 20 74 61 69 6c 20  |if command tail |
000007f0  62 65 67 69 6e 73 20 77  69 74 68 20 27 22 27 2c  |begins with '"',|
00000800  0d 00 40 48 20 20 20 20  20 20 20 20 42 45 51 20  |..@H        BEQ |
00000810  20 20 20 20 71 75 6f 74  65 64 5f 74 61 73 6b 6e  |    quoted_taskn|
00000820  61 6d 65 20 20 20 20 20  20 20 20 20 3b 20 74 68  |ame         ; th|
00000830  65 20 74 61 73 6b 20 6e  61 6d 65 20 69 73 20 69  |e task name is i|
00000840  6e 20 71 75 6f 74 65 73  0d 00 41 04 0d 00 42 52  |n quotes..A...BR|
00000850  3b 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; --------------|
00000860  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000890  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 00  |--------------..|
000008a0  43 50 3b 20 20 20 20 20  20 20 72 31 20 70 6f 69  |CP;       r1 poi|
000008b0  6e 74 73 20 74 6f 20 74  68 65 20 73 74 61 72 74  |nts to the start|
000008c0  20 6f 66 20 61 20 73 69  6e 67 6c 65 20 77 6f 72  | of a single wor|
000008d0  64 20 74 61 73 6b 20 6e  61 6d 65 20 28 6f 72 20  |d task name (or |
000008e0  74 68 65 20 65 6e 64 20  6f 66 20 74 68 65 0d 00  |the end of the..|
000008f0  44 3b 3b 20 20 20 20 20  20 20 63 6f 6d 6d 61 6e  |D;;       comman|
00000900  64 20 74 61 69 6c 20 69  66 20 74 68 65 72 65 20  |d tail if there |
00000910  77 65 72 65 20 6e 6f 20  70 61 72 61 6d 65 74 65  |were no paramete|
00000920  72 73 20 67 69 76 65 6e  29 0d 00 45 05 3b 0d 00  |rs given)..E.;..|
00000930  46 4a 3b 20 20 20 20 20  20 20 54 65 72 6d 69 6e  |FJ;       Termin|
00000940  61 74 65 20 74 68 69 73  20 6e 61 6d 65 20 77 69  |ate this name wi|
00000950  74 68 20 61 20 7a 65 72  6f 20 62 79 74 65 2c 20  |th a zero byte, |
00000960  61 6e 64 20 70 6f 69 6e  74 20 72 32 20 74 6f 20  |and point r2 to |
00000970  74 68 65 20 6e 65 78 74  0d 00 47 15 3b 20 20 20  |the next..G.;   |
00000980  20 20 20 20 63 68 61 72  61 63 74 65 72 0d 00 48  |    character..H|
00000990  52 3b 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |R; -------------|
000009a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000009d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000009e0  00 49 04 0d 00 4a 1a 20  20 20 20 20 20 20 20 4d  |.I...J.        M|
000009f0  4f 56 20 20 20 20 20 72  32 2c 20 72 31 0d 00 4b  |OV     r2, r1..K|
00000a00  12 2e 74 61 73 6b 6e 61  6d 65 5f 6c 6f 6f 70 0d  |..taskname_loop.|
00000a10  00 4c 50 20 20 20 20 20  20 20 20 4c 44 52 42 20  |.LP        LDRB |
00000a20  20 20 20 72 30 2c 20 5b  72 32 5d 2c 20 23 31 20  |   r0, [r2], #1 |
00000a30  20 20 20 20 20 20 20 20  20 20 20 3b 20 66 69 6e  |           ; fin|
00000a40  64 20 74 68 65 20 73 70  61 63 65 20 61 66 74 65  |d the space afte|
00000a50  72 20 74 68 65 20 74 61  73 6b 20 6e 61 6d 65 0d  |r the task name.|
00000a60  00 4d 1f 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.M.        CMP  |
00000a70  20 20 20 72 30 2c 20 23  97 28 22 20 22 29 0d 00  |   r0, #.(" ")..|
00000a80  4e 52 20 20 20 20 20 20  20 20 42 4c 54 20 20 20  |NR        BLT   |
00000a90  20 20 73 79 6e 74 61 78  5f 65 72 72 6f 72 20 20  |  syntax_error  |
00000aa0  20 20 20 20 20 20 20 20  20 20 3b 20 65 72 72 6f  |          ; erro|
00000ab0  72 20 69 66 20 63 6f 6d  6d 61 6e 64 20 6c 69 6e  |r if command lin|
00000ac0  65 20 65 6e 64 73 20 74  6f 6f 20 65 61 72 6c 79  |e ends too early|
00000ad0  0d 00 4f 21 20 20 20 20  20 20 20 20 42 4e 45 20  |..O!        BNE |
00000ae0  20 20 20 20 74 61 73 6b  6e 61 6d 65 5f 6c 6f 6f  |    taskname_loo|
00000af0  70 0d 00 50 04 0d 00 51  15 2e 74 61 73 6b 6e 61  |p..P...Q..taskna|
00000b00  6d 65 5f 73 6b 69 70 70  65 64 0d 00 52 1a 20 20  |me_skipped..R.  |
00000b10  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00000b20  2c 20 23 30 0d 00 53 50  20 20 20 20 20 20 20 20  |, #0..SP        |
00000b30  53 54 52 42 20 20 20 20  72 30 2c 20 5b 72 32 2c  |STRB    r0, [r2,|
00000b40  20 23 2d 31 5d 20 20 20  20 20 20 20 20 20 20 20  | #-1]           |
00000b50  3b 20 74 65 72 6d 69 6e  61 74 65 20 74 61 73 6b  |; terminate task|
00000b60  20 6e 61 6d 65 20 77 69  74 68 20 7a 65 72 6f 20  | name with zero |
00000b70  62 79 74 65 0d 00 54 44  20 20 20 20 20 20 20 20  |byte..TD        |
00000b80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000ba0  3b 20 72 31 20 70 6f 69  6e 74 73 20 74 6f 20 74  |; r1 points to t|
00000bb0  61 73 6b 20 6e 61 6d 65  0d 00 55 54 20 20 20 20  |ask name..UT    |
00000bc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000be0  20 20 20 20 3b 20 72 32  20 70 6f 69 6e 74 73 20  |    ; r2 points |
00000bf0  74 6f 20 72 65 73 74 20  6f 66 20 63 6f 6d 6d 61  |to rest of comma|
00000c00  6e 64 20 6c 69 6e 65 20  74 61 69 6c 0d 00 56 04  |nd line tail..V.|
00000c10  0d 00 57 52 3b 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..WR; ----------|
00000c20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000c60  2d 2d 0d 00 58 51 3b 20  20 20 20 20 20 20 4e 6f  |--..XQ;       No|
00000c70  77 20 72 32 20 70 6f 69  6e 74 73 20 74 6f 20 74  |w r2 points to t|
00000c80  68 65 20 66 69 72 73 74  20 73 70 61 63 65 20 61  |he first space a|
00000c90  66 74 65 72 20 74 68 65  20 74 61 73 6b 20 6e 61  |fter the task na|
00000ca0  6d 65 20 28 6f 72 20 70  6f 73 73 69 62 6c 79 20  |me (or possibly |
00000cb0  74 68 65 0d 00 59 47 3b  20 20 20 20 20 20 20 65  |the..YG;       e|
00000cc0  6e 64 20 6f 66 20 74 68  65 20 63 6f 6d 6d 61 6e  |nd of the comman|
00000cd0  64 20 6c 69 6e 65 20 69  66 20 74 68 65 20 73 65  |d line if the se|
00000ce0  63 6f 6e 64 20 70 61 72  61 6d 65 74 65 72 20 69  |cond parameter i|
00000cf0  73 20 6d 69 73 73 69 6e  67 29 0d 00 5a 05 3b 0d  |s missing)..Z.;.|
00000d00  00 5b 4d 3b 20 20 20 20  20 20 20 53 6b 69 70 20  |.[M;       Skip |
00000d10  6f 76 65 72 20 74 68 65  20 73 70 61 63 65 73 20  |over the spaces |
00000d20  73 6f 20 74 68 61 74 20  72 32 20 70 6f 69 6e 74  |so that r2 point|
00000d30  73 20 74 6f 20 74 68 65  20 73 74 61 72 74 20 6f  |s to the start o|
00000d40  66 20 74 68 65 20 73 65  63 6f 6e 64 0d 00 5c 15  |f the second..\.|
00000d50  3b 20 20 20 20 20 20 20  70 61 72 61 6d 65 74 65  |;       paramete|
00000d60  72 0d 00 5d 52 3b 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |r..]R; ---------|
00000d70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000db0  2d 2d 2d 0d 00 5e 04 0d  00 5f 0f 2e 73 70 61 63  |---..^..._..spac|
00000dc0  65 5f 6c 6f 6f 70 0d 00  60 20 20 20 20 20 20 20  |e_loop..`       |
00000dd0  20 20 4c 44 52 42 20 20  20 20 72 30 2c 20 5b 72  |  LDRB    r0, [r|
00000de0  32 5d 2c 20 23 31 0d 00  61 1f 20 20 20 20 20 20  |2], #1..a.      |
00000df0  20 20 43 4d 50 20 20 20  20 20 72 30 2c 20 23 97  |  CMP     r0, #.|
00000e00  28 22 20 22 29 0d 00 62  4f 20 20 20 20 20 20 20  |(" ")..bO       |
00000e10  20 42 4c 54 20 20 20 20  20 73 79 6e 74 61 78 5f  | BLT     syntax_|
00000e20  65 72 72 6f 72 20 20 20  20 20 20 20 20 20 20 20  |error           |
00000e30  20 3b 20 65 72 72 6f 72  20 69 66 20 73 65 63 6f  | ; error if seco|
00000e40  6e 64 20 70 61 72 61 6d  65 74 65 72 20 6d 69 73  |nd parameter mis|
00000e50  73 69 6e 67 0d 00 63 1e  20 20 20 20 20 20 20 20  |sing..c.        |
00000e60  42 45 51 20 20 20 20 20  73 70 61 63 65 5f 6c 6f  |BEQ     space_lo|
00000e70  6f 70 0d 00 64 04 0d 00  65 49 20 20 20 20 20 20  |op..d...eI      |
00000e80  20 20 53 55 42 20 20 20  20 20 72 34 2c 20 72 32  |  SUB     r4, r2|
00000e90  2c 20 23 31 20 20 20 20  20 20 20 20 20 20 20 20  |, #1            |
00000ea0  20 20 3b 20 72 34 20 70  6f 69 6e 74 73 20 74 6f  |  ; r4 points to|
00000eb0  20 6f 75 74 70 75 74 20  63 6f 6d 6d 61 6e 64 0d  | output command.|
00000ec0  00 66 04 0d 00 67 52 3b  20 2d 2d 2d 2d 2d 2d 2d  |.f...gR; -------|
00000ed0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000f10  2d 2d 2d 2d 2d 0d 00 68  43 3b 20 20 20 20 20 20  |-----..hC;      |
00000f20  20 41 74 20 74 68 69 73  20 70 6f 69 6e 74 2c 20  | At this point, |
00000f30  72 31 20 70 6f 69 6e 74  73 20 74 6f 20 61 20 7a  |r1 points to a z|
00000f40  65 72 6f 20 74 65 72 6d  69 6e 61 74 65 64 20 74  |ero terminated t|
00000f50  61 73 6b 20 6e 61 6d 65  0d 00 69 47 3b 20 20 20  |ask name..iG;   |
00000f60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000f70  20 20 20 72 34 20 70 6f  69 6e 74 73 20 74 6f 20  |   r4 points to |
00000f80  61 20 63 74 72 6c 2d 63  68 61 72 20 74 65 72 6d  |a ctrl-char term|
00000f90  69 6e 61 74 65 64 20 2a  63 6f 6d 6d 61 6e 64 0d  |inated *command.|
00000fa0  00 6a 52 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.jR; -----------|
00000fb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000ff0  2d 0d 00 6b 04 0d 00 6c  48 20 20 20 20 20 20 20  |-..k...lH       |
00001000  20 4d 4f 56 20 20 20 20  20 72 33 2c 20 72 31 20  | MOV     r3, r1 |
00001010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001020  20 3b 20 6e 6f 77 20 72  33 20 70 6f 69 6e 74 73  | ; now r3 points|
00001030  20 74 6f 20 74 61 73 6b  20 6e 61 6d 65 0d 00 6d  | to task name..m|
00001040  04 0d 00 6e 40 20 20 20  20 20 20 20 20 4d 4f 56  |...n@        MOV|
00001050  20 20 20 20 20 72 30 2c  20 23 30 20 20 20 20 20  |     r0, #0     |
00001060  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 7a  |             ; z|
00001070  65 72 6f 20 3d 3e 20 66  69 72 73 74 20 63 61 6c  |ero => first cal|
00001080  6c 0d 00 6f 15 2e 72 65  61 64 5f 74 61 73 6b 5f  |l..o..read_task_|
00001090  62 6c 6f 63 6b 73 0d 00  70 29 20 20 20 20 20 20  |blocks..p)      |
000010a0  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 20 77 6f  |  MOV     r1, wo|
000010b0  72 6b 73 70 61 63 65 5f  70 6f 69 6e 74 65 72 0d  |rkspace_pointer.|
000010c0  00 71 27 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.q'        MOV  |
000010d0  20 20 20 72 32 2c 20 23  77 6f 72 6b 73 70 61 63  |   r2, #workspac|
000010e0  65 5f 73 69 7a 65 0d 00  72 31 20 20 20 20 20 20  |e_size..r1      |
000010f0  20 20 53 57 49 20 20 20  20 20 22 58 54 61 73 6b  |  SWI     "XTask|
00001100  4d 61 6e 61 67 65 72 5f  45 6e 75 6d 65 72 61 74  |Manager_Enumerat|
00001110  65 54 61 73 6b 73 22 0d  00 73 54 20 20 20 20 20  |eTasks"..sT     |
00001120  20 20 20 4d 4f 56 56 53  20 20 20 70 63 2c 20 6c  |   MOVVS   pc, l|
00001130  69 6e 6b 20 20 20 20 20  20 20 20 20 20 20 20 20  |ink             |
00001140  20 20 20 3b 20 70 61 73  73 20 6f 6e 20 61 6e 79  |   ; pass on any|
00001150  20 72 65 74 75 72 6e 65  64 20 65 72 72 6f 72 20  | returned error |
00001160  74 6f 20 74 68 65 20 75  73 65 72 0d 00 74 04 0d  |to the user..t..|
00001170  00 75 51 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.uQ        MOV  |
00001180  20 20 20 72 35 2c 20 77  6f 72 6b 73 70 61 63 65  |   r5, workspace|
00001190  5f 70 6f 69 6e 74 65 72  20 20 20 3b 20 70 6f 69  |_pointer   ; poi|
000011a0  6e 74 73 20 74 6f 20 73  74 61 72 74 20 6f 66 20  |nts to start of |
000011b0  74 61 73 6b 20 69 6e 66  6f 20 62 6c 6f 63 6b 73  |task info blocks|
000011c0  0d 00 76 04 0d 00 77 52  3b 20 2d 2d 2d 2d 2d 2d  |..v...wR; ------|
000011d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001210  2d 2d 2d 2d 2d 2d 0d 00  78 51 3b 20 20 20 20 20  |------..xQ;     |
00001220  20 20 48 65 72 65 20 72  35 20 70 6f 69 6e 74 73  |  Here r5 points|
00001230  20 74 6f 20 74 68 65 20  73 74 61 72 74 20 6f 66  | to the start of|
00001240  20 61 20 73 65 71 75 65  6e 63 65 20 6f 66 20 31  | a sequence of 1|
00001250  36 20 62 79 74 65 20 74  61 73 6b 20 64 65 73 63  |6 byte task desc|
00001260  72 69 70 74 69 6f 6e 0d  00 79 3d 3b 20 20 20 20  |ription..y=;    |
00001270  20 20 20 62 6c 6f 63 6b  73 20 2d 20 77 6f 72 6b  |   blocks - work|
00001280  20 74 68 72 6f 75 67 68  20 74 68 65 73 65 2c 20  | through these, |
00001290  6c 6f 6f 6b 69 6e 67 20  66 6f 72 20 6f 75 72 20  |looking for our |
000012a0  74 61 73 6b 0d 00 7a 52  3b 20 2d 2d 2d 2d 2d 2d  |task..zR; ------|
000012b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000012f0  2d 2d 2d 2d 2d 2d 0d 00  7b 04 0d 00 7c 16 2e 63  |------..{...|..c|
00001300  68 65 63 6b 5f 74 61 73  6b 5f 62 6c 6f 63 6b 73  |heck_task_blocks|
00001310  0d 00 7d 53 20 20 20 20  20 20 20 20 43 4d 50 20  |..}S        CMP |
00001320  20 20 20 20 72 35 2c 20  72 31 20 20 20 20 20 20  |    r5, r1      |
00001330  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 68 61  |            ; ha|
00001340  76 65 20 77 65 20 63 68  65 63 6b 65 64 20 6c 61  |ve we checked la|
00001350  73 74 20 6f 66 20 74 68  65 73 65 20 62 6c 6f 63  |st of these bloc|
00001360  6b 73 3f 0d 00 7e 27 20  20 20 20 20 20 20 20 42  |ks?..~'        B|
00001370  48 53 20 20 20 20 20 63  68 65 63 6b 65 64 5f 74  |HS     checked_t|
00001380  61 73 6b 5f 62 6c 6f 63  6b 73 0d 00 7f 4d 20 20  |ask_blocks...M  |
00001390  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 36  |      LDR     r6|
000013a0  2c 20 5b 72 35 2c 20 23  34 5d 20 20 20 20 20 20  |, [r5, #4]      |
000013b0  20 20 20 20 20 20 3b 20  72 36 20 70 6f 69 6e 74  |      ; r6 point|
000013c0  73 20 74 6f 20 74 61 73  6b 20 6e 61 6d 65 20 72  |s to task name r|
000013d0  65 74 75 72 6e 65 64 0d  00 80 4d 20 20 20 20 20  |eturned...M     |
000013e0  20 20 20 4d 4f 56 20 20  20 20 20 72 37 2c 20 23  |   MOV     r7, #|
000013f0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00001400  20 20 20 3b 20 72 37 20  3d 20 61 6e 20 6f 66 66  |   ; r7 = an off|
00001410  73 65 74 20 69 6e 74 6f  20 74 68 65 20 73 74 72  |set into the str|
00001420  69 6e 67 73 0d 00 81 16  2e 63 6f 6d 70 61 72 65  |ings.....compare|
00001430  5f 74 61 73 6b 5f 6e 61  6d 65 0d 00 82 20 20 20  |_task_name...   |
00001440  20 20 20 20 20 20 4c 44  52 42 20 20 20 20 72 38  |      LDRB    r8|
00001450  2c 20 5b 72 33 2c 20 72  37 5d 0d 00 83 20 20 20  |, [r3, r7]...   |
00001460  20 20 20 20 20 20 4c 44  52 42 20 20 20 20 72 32  |      LDRB    r2|
00001470  2c 20 5b 72 36 2c 20 72  37 5d 0d 00 84 51 20 20  |, [r6, r7]...Q  |
00001480  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 32  |      CMP     r2|
00001490  2c 20 23 97 28 22 20 22  29 20 20 20 20 20 20 20  |, #.(" ")       |
000014a0  20 20 20 20 3b 20 68 61  76 65 20 77 65 20 72 65  |    ; have we re|
000014b0  61 63 68 65 64 20 65 6e  64 20 6f 66 20 72 65 74  |ached end of ret|
000014c0  75 72 6e 65 64 20 6e 61  6d 65 3f 0d 00 85 1a 20  |urned name?.... |
000014d0  20 20 20 20 20 20 20 4d  4f 56 4c 54 20 20 20 72  |       MOVLT   r|
000014e0  32 2c 20 23 30 0d 00 86  04 0d 00 87 1a 20 20 20  |2, #0........   |
000014f0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 38 2c  |     CMP     r8,|
00001500  20 72 32 0d 00 88 4b 20  20 20 20 20 20 20 20 41  | r2...K        A|
00001510  44 44 4e 45 20 20 20 72  35 2c 20 72 35 2c 20 23  |DDNE   r5, r5, #|
00001520  31 36 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |16             ;|
00001530  20 4f 4b 2c 20 73 6f 20  74 68 61 74 20 74 61 73  | OK, so that tas|
00001540  6b 20 77 61 73 6e 27 74  20 72 69 67 68 74 0d 00  |k wasn't right..|
00001550  89 3c 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |.<        BNE   |
00001560  20 20 63 68 65 63 6b 5f  74 61 73 6b 5f 62 6c 6f  |  check_task_blo|
00001570  63 6b 73 20 20 20 20 20  20 20 3b 20 2d 20 74 72  |cks       ; - tr|
00001580  79 20 74 68 65 20 6e 65  78 74 0d 00 8a 04 0d 00  |y the next......|
00001590  8b 45 20 20 20 20 20 20  20 20 3b 20 74 68 65 20  |.E        ; the |
000015a0  73 74 72 69 6e 67 73 20  6d 61 74 63 68 20 73 6f  |strings match so|
000015b0  20 66 61 72 20 2d 20 62  75 74 20 68 61 76 65 20  | far - but have |
000015c0  77 65 20 72 65 61 63 68  65 64 20 74 68 65 20 65  |we reached the e|
000015d0  6e 64 3f 0d 00 8c 04 0d  00 8d 1a 20 20 20 20 20  |nd?........     |
000015e0  20 20 20 43 4d 50 20 20  20 20 20 72 32 2c 20 23  |   CMP     r2, #|
000015f0  30 0d 00 8e 47 20 20 20  20 20 20 20 20 ec 51 53  |0...G        .QS|
00001600  20 20 70 63 2c 20 6c 69  6e 6b 20 20 20 20 20 20  |  pc, link      |
00001610  20 20 20 20 20 20 20 20  20 20 3b 20 69 66 20 77  |          ; if w|
00001620  65 20 68 61 76 65 20 61  20 6d 61 74 63 68 2c 20  |e have a match, |
00001630  65 6e 64 20 68 65 72 65  0d 00 8f 45 20 20 20 20  |end here...E    |
00001640  20 20 20 20 41 44 44 20  20 20 20 20 72 37 2c 20  |    ADD     r7, |
00001650  72 37 2c 20 23 31 20 20  20 20 20 20 20 20 20 20  |r7, #1          |
00001660  20 20 20 20 3b 20 69 6e  63 72 65 6d 65 6e 74 20  |    ; increment |
00001670  73 74 72 69 6e 67 20 6f  66 66 73 65 74 0d 00 90  |string offset...|
00001680  42 20 20 20 20 20 20 20  20 42 20 20 20 20 20 20  |B        B      |
00001690  20 63 6f 6d 70 61 72 65  5f 74 61 73 6b 5f 6e 61  | compare_task_na|
000016a0  6d 65 20 20 20 20 20 20  20 3b 20 63 68 65 63 6b  |me       ; check|
000016b0  20 6e 65 78 74 20 63 68  61 72 61 63 74 65 72 0d  | next character.|
000016c0  00 91 04 0d 00 92 52 3b  20 2d 2d 2d 2d 2d 2d 2d  |......R; -------|
000016d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001710  2d 2d 2d 2d 2d 0d 00 93  47 3b 20 20 20 20 20 20  |-----...G;      |
00001720  20 48 65 72 65 20 77 65  20 68 61 76 65 20 77 6f  | Here we have wo|
00001730  72 6b 65 64 20 74 68 72  6f 75 67 68 20 61 20 63  |rked through a c|
00001740  6f 6d 70 6c 65 74 65 20  73 65 74 20 6f 66 20 72  |omplete set of r|
00001750  65 74 75 72 6e 65 64 20  74 61 73 6b 0d 00 94 4f  |eturned task...O|
00001760  3b 20 20 20 20 20 20 20  64 65 73 63 72 69 70 74  |;       descript|
00001770  69 6f 6e 20 62 6c 6f 63  6b 73 20 2d 20 63 68 65  |ion blocks - che|
00001780  63 6b 20 74 6f 20 73 65  65 20 69 66 20 54 61 73  |ck to see if Tas|
00001790  6b 4d 61 6e 61 67 65 72  5f 45 6e 75 6d 65 72 61  |kManager_Enumera|
000017a0  74 65 54 61 73 6b 73 20  68 61 73 0d 00 95 47 3b  |teTasks has...G;|
000017b0  20 20 20 20 20 20 20 61  6e 79 20 6d 6f 72 65 20  |       any more |
000017c0  74 6f 20 67 69 76 65 20  75 73 3b 20 6f 74 68 65  |to give us; othe|
000017d0  72 77 69 73 65 20 65 78  65 63 75 74 65 20 74 68  |rwise execute th|
000017e0  65 20 63 6f 6d 6d 61 6e  64 20 73 75 70 70 6c 69  |e command suppli|
000017f0  65 64 0d 00 96 52 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |ed...R; --------|
00001800  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001840  2d 2d 2d 2d 0d 00 97 04  0d 00 98 18 2e 63 68 65  |----.........che|
00001850  63 6b 65 64 5f 74 61 73  6b 5f 62 6c 6f 63 6b 73  |cked_task_blocks|
00001860  0d 00 99 51 20 20 20 20  20 20 20 20 43 4d 4e 20  |...Q        CMN |
00001870  20 20 20 20 72 30 2c 20  23 31 20 20 20 20 20 20  |    r0, #1      |
00001880  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 61 72  |            ; ar|
00001890  65 20 74 68 65 20 61 6e  79 20 6d 6f 72 65 20 62  |e the any more b|
000018a0  6c 6f 63 6b 73 20 74 6f  20 62 65 20 72 65 61 64  |locks to be read|
000018b0  3f 0d 00 9a 24 20 20 20  20 20 20 20 20 42 4e 45  |?...$        BNE|
000018c0  20 20 20 20 20 72 65 61  64 5f 74 61 73 6b 5f 62  |     read_task_b|
000018d0  6c 6f 63 6b 73 0d 00 9b  04 0d 00 9c 52 3b 20 2d  |locks.......R; -|
000018e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001920  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 00 9d 3f 3b  |-----------...?;|
00001930  20 20 20 20 20 20 20 41  74 20 74 68 69 73 20 70  |       At this p|
00001940  6f 69 6e 74 2c 20 6f 75  72 20 74 61 73 6b 20 69  |oint, our task i|
00001950  73 20 64 65 66 69 6e 69  74 65 6c 79 20 5f 6e 6f  |s definitely _no|
00001960  74 5f 20 72 75 6e 6e 69  6e 67 0d 00 9e 52 3b 20  |t_ running...R; |
00001970  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000019b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 00 9f 04  |------------....|
000019c0  0d 00 a0 43 20 20 20 20  20 20 20 20 4d 4f 56 20  |...C        MOV |
000019d0  20 20 20 20 72 30 2c 20  72 34 20 20 20 20 20 20  |    r0, r4      |
000019e0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 30  |            ; r0|
000019f0  20 70 6f 69 6e 74 73 20  74 6f 20 2a 63 6f 6d 6d  | points to *comm|
00001a00  61 6e 64 0d 00 a1 1d 20  20 20 20 20 20 20 20 53  |and....        S|
00001a10  57 49 20 20 20 20 20 22  58 4f 53 5f 43 4c 49 22  |WI     "XOS_CLI"|
00001a20  0d 00 a2 4d 20 20 20 20  20 20 20 20 4d 4f 56 20  |...M        MOV |
00001a30  20 20 20 20 70 63 2c 20  6c 69 6e 6b 20 20 20 20  |    pc, link    |
00001a40  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 65  |            ; re|
00001a50  74 75 72 6e 2c 20 70 61  73 73 69 6e 67 20 6f 6e  |turn, passing on|
00001a60  20 61 6e 79 20 72 65 74  75 72 6e 65 64 0d 00 a3  | any returned...|
00001a70  40 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |@               |
00001a80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001a90  20 20 20 20 20 20 20 20  20 3b 20 65 72 72 6f 72  |         ; error|
00001aa0  73 20 74 6f 20 74 68 65  20 75 73 65 72 0d 00 a4  |s to the user...|
00001ab0  04 0d 00 a5 52 3b 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |....R; ---------|
00001ac0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001b00  2d 2d 2d 0d 00 a6 4e 3b  20 20 20 20 20 20 20 54  |---...N;       T|
00001b10  61 73 6b 20 6e 61 6d 65  20 62 65 67 61 6e 20 77  |ask name began w|
00001b20  69 74 68 20 61 20 27 22  27 2c 20 73 6f 20 77 65  |ith a '"', so we|
00001b30  20 77 69 6c 6c 20 61 73  73 75 6d 65 20 69 74 20  | will assume it |
00001b40  69 73 20 62 65 69 6e 67  20 67 69 76 65 6e 20 69  |is being given i|
00001b50  6e 0d 00 a7 19 3b 20 20  20 20 20 20 20 64 6f 75  |n....;       dou|
00001b60  62 6c 65 20 71 75 6f 74  65 73 0d 00 a8 05 3b 0d  |ble quotes....;.|
00001b70  00 a9 4f 3b 20 20 20 20  20 20 20 46 69 6e 64 20  |..O;       Find |
00001b80  74 68 65 20 63 6c 6f 73  69 6e 67 20 27 22 27 20  |the closing '"' |
00001b90  28 69 66 20 69 74 20 65  78 69 73 74 73 29 20 61  |(if it exists) a|
00001ba0  6e 64 20 74 68 65 6e 20  72 65 74 75 72 6e 20 74  |nd then return t|
00001bb0  6f 20 74 68 65 20 73 74  61 6e 64 61 72 64 0d 00  |o the standard..|
00001bc0  aa 44 3b 20 20 20 20 20  20 20 63 6f 6d 6d 61 6e  |.D;       comman|
00001bd0  64 20 6c 69 6e 65 20 70  72 6f 63 65 73 73 69 6e  |d line processin|
00001be0  67 20 63 6f 64 65 20 28  6f 74 68 65 72 77 69 73  |g code (otherwis|
00001bf0  65 20 72 65 74 75 72 6e  20 61 6e 20 65 72 72 6f  |e return an erro|
00001c00  72 29 0d 00 ab 52 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |r)...R; --------|
00001c10  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001c50  2d 2d 2d 2d 0d 00 ac 04  0d 00 ad 14 2e 71 75 6f  |----.........quo|
00001c60  74 65 64 5f 74 61 73 6b  6e 61 6d 65 0d 00 ae 4c  |ted_taskname...L|
00001c70  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00001c80  72 31 2c 20 72 31 2c 20  23 31 20 20 20 20 20 20  |r1, r1, #1      |
00001c90  20 20 20 20 20 20 20 20  3b 20 74 61 73 6b 20 6e  |        ; task n|
00001ca0  61 6d 65 20 73 74 61 72  74 73 20 61 66 74 65 72  |ame starts after|
00001cb0  20 74 68 65 20 27 22 27  0d 00 af 1a 20 20 20 20  | the '"'....    |
00001cc0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 32 2c 20  |    MOV     r2, |
00001cd0  72 31 0d 00 b0 19 2e 71  75 6f 74 65 64 5f 74 61  |r1.....quoted_ta|
00001ce0  73 6b 6e 61 6d 65 5f 6c  6f 6f 70 0d 00 b1 20 20  |skname_loop...  |
00001cf0  20 20 20 20 20 20 20 4c  44 52 42 20 20 20 20 72  |       LDRB    r|
00001d00  30 2c 20 5b 72 32 5d 2c  20 23 31 0d 00 b2 1f 20  |0, [r2], #1.... |
00001d10  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00001d20  30 2c 20 23 97 28 22 20  22 29 0d 00 b3 45 20 20  |0, #.(" ")...E  |
00001d30  20 20 20 20 20 20 42 4c  54 20 20 20 20 20 62 61  |      BLT     ba|
00001d40  64 5f 73 74 72 69 6e 67  20 20 20 20 20 20 20 20  |d_string        |
00001d50  20 20 20 20 20 20 3b 20  65 72 72 6f 72 20 69 66  |      ; error if|
00001d60  20 6e 6f 20 63 6c 6f 73  69 6e 67 20 27 22 27 0d  | no closing '"'.|
00001d70  00 b4 20 20 20 20 20 20  20 20 20 43 4d 50 20 20  |..         CMP  |
00001d80  20 20 20 72 30 2c 20 23  97 28 22 22 22 22 29 0d  |   r0, #.("""").|
00001d90  00 b5 28 20 20 20 20 20  20 20 20 42 4e 45 20 20  |..(        BNE  |
00001da0  20 20 20 71 75 6f 74 65  64 5f 74 61 73 6b 6e 61  |   quoted_taskna|
00001db0  6d 65 5f 6c 6f 6f 70 0d  00 b6 24 20 20 20 20 20  |me_loop...$     |
00001dc0  20 20 20 42 20 20 20 20  20 20 20 74 61 73 6b 6e  |   B       taskn|
00001dd0  61 6d 65 5f 73 6b 69 70  70 65 64 0d 00 b7 04 0d  |ame_skipped.....|
00001de0  00 b8 52 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..R; -----------|
00001df0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001e30  2d 0d 00 b9 4c 3b 20 20  20 20 20 20 20 41 6e 20  |-...L;       An |
00001e40  65 72 72 6f 72 20 68 61  73 20 6f 63 63 75 72 65  |error has occure|
00001e50  64 20 2d 20 61 74 20 6c  65 61 73 74 20 6f 6e 65  |d - at least one|
00001e60  20 6f 66 20 6f 75 72 20  70 61 72 61 6d 65 74 65  | of our paramete|
00001e70  72 73 20 69 73 20 6d 69  73 73 69 6e 67 0d 00 ba  |rs is missing...|
00001e80  05 3b 0d 00 bb 44 3b 20  20 20 20 20 20 20 42 6c  |.;...D;       Bl|
00001e90  61 6d 65 20 65 76 65 72  79 74 68 69 6e 67 20 6f  |ame everything o|
00001ea0  6e 20 74 68 65 20 75 73  65 72 20 77 69 74 68 20  |n the user with |
00001eb0  61 20 73 79 6e 74 61 78  20 65 72 72 6f 72 20 6d  |a syntax error m|
00001ec0  65 73 73 61 67 65 0d 00  bc 52 3b 20 2d 2d 2d 2d  |essage...R; ----|
00001ed0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001f10  2d 2d 2d 2d 2d 2d 2d 2d  0d 00 bd 04 0d 00 be 17  |--------........|
00001f20  2e 73 79 6e 74 61 78 5f  65 72 72 6f 72 5f 62 6c  |.syntax_error_bl|
00001f30  6f 63 6b 0d 00 bf 15 20  20 20 20 20 20 20 20 44  |ock....        D|
00001f40  43 44 20 20 20 20 20 30  0d 00 c0 47 20 20 20 20  |CD     0...G    |
00001f50  20 20 20 20 3d 20 20 20  20 20 20 20 22 53 79 6e  |    =       "Syn|
00001f60  74 61 78 3a 20 2a 54 61  73 6b 45 6e 73 75 72 65  |tax: *TaskEnsure|
00001f70  20 3c 74 61 73 6b 20 6e  61 6d 65 3e 20 3c 2a 63  | <task name> <*c|
00001f80  6f 6d 6d 61 6e 64 3e 22  20 2b 20 bd 28 30 29 0d  |ommand>" + .(0).|
00001f90  00 c1 11 20 20 20 20 20  20 20 20 41 4c 49 47 4e  |...        ALIGN|
00001fa0  0d 00 c2 04 0d 00 c3 11  2e 73 79 6e 74 61 78 5f  |.........syntax_|
00001fb0  65 72 72 6f 72 0d 00 c4  2a 20 20 20 20 20 20 20  |error...*       |
00001fc0  20 41 44 52 20 20 20 20  20 72 30 2c 20 73 79 6e  | ADR     r0, syn|
00001fd0  74 61 78 5f 65 72 72 6f  72 5f 62 6c 6f 63 6b 0d  |tax_error_block.|
00001fe0  00 c5 23 20 20 20 20 20  20 20 20 84 52 53 20 20  |..#        .RS  |
00001ff0  20 20 70 63 2c 20 6c 69  6e 6b 2c 20 23 61 72 6d  |  pc, link, #arm|
00002000  5f 56 0d 00 c6 04 0d 00  c7 52 3b 20 2d 2d 2d 2d  |_V.......R; ----|
00002010  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002050  2d 2d 2d 2d 2d 2d 2d 2d  0d 00 c8 4f 3b 20 20 20  |--------...O;   |
00002060  20 20 20 20 41 6e 20 65  72 72 6f 72 20 68 61 73  |    An error has|
00002070  20 6f 63 63 75 72 65 64  20 2d 20 74 68 65 20 74  | occured - the t|
00002080  61 73 6b 20 6e 61 6d 65  20 62 65 67 61 6e 20 77  |ask name began w|
00002090  69 74 68 20 61 20 27 22  27 2c 20 62 75 74 20 74  |ith a '"', but t|
000020a0  68 65 72 65 20 69 73 0d  00 c9 1e 3b 20 20 20 20  |here is....;    |
000020b0  20 20 20 6e 6f 20 74 65  72 6d 69 6e 61 74 69 6e  |   no terminatin|
000020c0  67 20 27 22 27 0d 00 ca  05 3b 0d 00 cb 44 3b 20  |g '"'....;...D; |
000020d0  20 20 20 20 20 20 42 6c  61 6d 65 20 65 76 65 72  |      Blame ever|
000020e0  79 74 68 69 6e 67 20 6f  6e 20 74 68 65 20 75 73  |ything on the us|
000020f0  65 72 20 77 69 74 68 20  61 20 27 42 61 64 20 73  |er with a 'Bad s|
00002100  74 72 69 6e 67 27 20 6d  65 73 73 61 67 65 0d 00  |tring' message..|
00002110  cc 52 3b 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.R; ------------|
00002120  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002160  0d 00 cd 04 0d 00 ce 1b  2e 62 61 64 5f 73 74 72  |.........bad_str|
00002170  69 6e 67 5f 65 72 72 6f  72 5f 62 6c 6f 63 6b 0d  |ing_error_block.|
00002180  00 cf 17 20 20 20 20 20  20 20 20 44 43 44 20 20  |...        DCD  |
00002190  20 20 20 32 35 33 0d 00  d0 27 20 20 20 20 20 20  |   253...'      |
000021a0  20 20 3d 20 20 20 20 20  20 20 22 42 61 64 20 73  |  =       "Bad s|
000021b0  74 72 69 6e 67 22 20 2b  20 bd 28 30 29 0d 00 d1  |tring" + .(0)...|
000021c0  11 20 20 20 20 20 20 20  20 41 4c 49 47 4e 0d 00  |.        ALIGN..|
000021d0  d2 04 0d 00 d3 0f 2e 62  61 64 5f 73 74 72 69 6e  |.......bad_strin|
000021e0  67 0d 00 d4 2e 20 20 20  20 20 20 20 20 41 44 52  |g....        ADR|
000021f0  20 20 20 20 20 72 30 2c  20 62 61 64 5f 73 74 72  |     r0, bad_str|
00002200  69 6e 67 5f 65 72 72 6f  72 5f 62 6c 6f 63 6b 0d  |ing_error_block.|
00002210  00 d5 23 20 20 20 20 20  20 20 20 84 52 53 20 20  |..#        .RS  |
00002220  20 20 70 63 2c 20 6c 69  6e 6b 2c 20 23 61 72 6d  |  pc, link, #arm|
00002230  5f 56 0d 00 d6 04 0d 00  d7 52 3b 20 2d 2d 2d 2d  |_V.......R; ----|
00002240  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002280  2d 2d 2d 2d 2d 2d 2d 2d  0d 00 d8 37 3b 20 20 20  |--------...7;   |
00002290  20 20 20 20 56 65 72 73  69 6f 6e 20 6e 75 6d 62  |    Version numb|
000022a0  65 72 20 61 6e 64 20 67  72 61 74 75 69 74 6f 75  |er and gratuitou|
000022b0  73 20 61 75 74 68 6f 72  20 63 72 65 64 69 74 0d  |s author credit.|
000022c0  00 d9 52 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..R; -----------|
000022d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002310  2d 0d 00 da 04 0d 00 db  36 20 20 20 20 20 20 20  |-.......6       |
00002320  20 3d 20 20 20 20 20 20  20 22 30 2e 30 31 20 28  | =       "0.01 (|
00002330  30 32 20 4d 61 72 20 31  39 39 36 29 20 a9 20 41  |02 Mar 1996) . A|
00002340  6e 64 72 65 77 20 4b 65  6d 70 22 0d 00 dc 04 0d  |ndrew Kemp".....|
00002350  00 dd 05 5d 0d 00 de 0b  ed 20 70 61 73 73 25 0d  |...]..... pass%.|
00002360  00 df 05 e1 0d ff                                 |......|
00002366