Home » Archimedes archive » Micro User » MU 1991-08.adf » Listings » Arc/Loader_Src

Arc/Loader_Src

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 » Micro User » MU 1991-08.adf » Listings
Filename: Arc/Loader_Src
Read OK:
File size: 1B5B bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > <BasicSave$Dir>.Loader/Src
   20REM by Paul Dellar
   30REM (c) The Micro User
   40:
   50DIM code% &1000
   60PROCassemble
   70SYS "OS_File",10,"DeskLoad",&FFA,,code%,O%
   80END
   90:
  100DEF PROCassemble
  110block=1
  120worksp=12
  130sp=13
  140link=14
  150null$=CHR$(0)
  160FOR pass%=0 TO 3 STEP 3
  170P%=0:O%=code%
  180[OPT pass%+4
  190  EQUD start_code
  200  EQUD initialise
  210  EQUD finalise
  220  EQUD service
  230  EQUD title_string
  240  EQUD help_string
  250  EQUD command_table
  260  EQUD 0
  270\
  280.title_string
  290  EQUS "DeskLoad"+null$
  300.help_string
  310  EQUS "Desktop Loader"
  320  EQUB 9
  330  EQUS "1.00 ("+MID$(TIME$,5,11)+")"+null$
  340  ALIGN
  350\
  360.command_table
  370  EQUS "DeskTop_Loader"+null$
  380  ALIGN
  390  EQUD command_code
  400  EQUD 0
  410  EQUD command_syntax
  420  EQUD command_help
  430\
  440  EQUS "SetDirOf"+null$
  450  ALIGN
  460  EQUD setdir_code
  470  EQUD &010101
  480  EQUD setdir_syntax
  490  EQUD setdir_syntax
  500  EQUD 0
  510\
  520.command_help
  530  EQUS "*DeskTop_Loader starts the desktop loader module, you should normally use just *DeskTop instead."
  540  EQUB 13
  550.command_syntax
  560  EQUS "Syntax: *DeskTop_Loader"+null$
  570\
  580.setdir_help
  590  EQUS "*SetDirOf <filename> sets the current directory to the directory containing the specified file."
  600  EQUB 13
  610.setdir_syntax
  620  EQUS "Syntax: *SetDirOf <filename>"+null$
  630  ALIGN
  640\
  650.initialise
  660  STMFD   (sp)!,{link}
  670  MOV     R0,#6
  680  MOV     R3,#&140
  690  SWI     "OS_Module"  \ claim &140 bytes of workspace
  700  STRVC   R2,[worksp]  \ store pointer if it's valid
  710  LDMFD   (sp)!,{pc}
  720\
  730.finalise
  740  STMFD   (sp)!,{link}
  750  BL      close_down   \ quit Wimp
  760  MOV     R0,#7
  770  LDR     R2,[worksp]
  780  SWI     "OS_Module"  \ free workspace
  790  LDMFD   (sp)!,{pc}
  800\
  810.command_code       \ this starts up module through
  820  STMFD   (sp)!,{link} \ its language entry point
  830  MOV     R2,R0
  840  ADR     R1,title_string \ module title
  850  MOV     R0,#2
  860  SWI     "XOS_Module" \ run module start code
  870  LDMFD   (sp)!,{pc}
  880\
  890.setdir_code     \ entered with R0 pointing to command tail
  900  STMFD   (sp)!,{link}
  910  LDR     worksp,[worksp] \ retrieve workspace pointer
  920  SUB     R1,worksp,#1 \ (using preindexed addressing so need
  930.loop            \ to subtract 1 from the address)
  940  LDRB    R2,[R0],#1   \ copy command tail into workspace
  950  CMP     R2,#32    \ (tail terminated by control character
  960  STRGEB  R2,[R1,#1]   \ or space)
  970  BGT     loop   \ R1 points to the terminating character
  980\                \ (not the one after as would happen
  990\                \ with post-indexed addressing)
 1000.loop2
 1010  LDRB    R2,[R1],#-1  \ set R1 to point to the last full-stop
 1020  CMP     R2,#ASC"."   \ or colon in the pathname
 1030  CMPNE   R2,#ASC":"
 1040  BEQ     exit_loop
 1050  CMP     R1,worksp
 1060  BGT     loop2     \ return without an error message
 1070  LDMFD   (sp)!,{pc}   \ if the command tail is just a leafname
 1080\
 1090.exit_loop       \ replace the full-stop with a null
 1100  CMP     R2,#ASC":"   \ byte or add a null byte after the colon
 1110  ADDEQ   R1,R1,#1
 1120  MOV     R0,#0
 1130  STRB    R0,[R1,#1]
 1140  MOV     R1,worksp
 1150  SWI     "XOS_FSControl" \ set current directory
 1160  LDMFD   (sp)!,{pc}   \ and leave
 1170\
 1180.start_code
 1190  LDR     worksp,[worksp] \ get workspace pointer
 1200  ADD     sp,worksp,#&140 \ create SVC stack at top of workspace
 1210  BL      close_down   \ prevents module being started twice !
 1220\
 1230  MOV     R0,#200   \ wimp version number
 1240  LDR     R1,task_string  \ 'TASK'
 1250  ADR     R2,title  \ title for task manager window
 1260  SWI     "XWimp_Initialise"
 1270  LDMFD   (sp)!,{link} \ pull link register so we can return if needed
 1280  STRVC   R1,task_handle  \ store my task handle
 1290  BVC     polling_loop \ go to Wimp_Poll loop if everything OK
 1300  MOV     pc,link   \ exit if something goes wrong
 1310
 1320.task_string EQUS "TASK"
 1330.task_handle EQUD 0
 1340.title    EQUS "File Loader"+null$
 1350  ALIGN
 1360\
 1370.service      \ module service calls are received here
 1380  STMFD   (sp)!,{link}
 1390  LDR     worksp,[worksp]
 1400  CMP     R1,#&49   \ Service_StartWimp ?
 1410  BEQ     start_wimp
 1420  CMP     R1,#&4A   \ Service_StartedWimp ?
 1430  BEQ     started_wimp
 1440  CMP     R1,#&27   \ Service_Reset ?
 1450  BEQ     reset_pressed
 1460  LDMFD   (sp)!,{pc}
 1470\
 1480.start_wimp
 1490  LDR     link,task_handle
 1500  CMP     link,#0
 1510  MVNEQ   link,#0
 1520  STREQ   link,task_handle\ set task handle to -1 if not running
 1530  ADREQ   R0,command_table\ pointer to command to start task
 1540  MOVEQ   R1,#0     \ claim service call
 1550  LDMFD   (sp)!,{pc}
 1560\
 1570.started_wimp       \ if task handle=-1 then set
 1580  LDR     link,task_handle\ task handle to zero
 1590  CMN     link,#1
 1600  MOVEQ   link,#0
 1610  STREQ   link,task_handle
 1620  LDMFD   (sp)!,{pc}
 1630\
 1640.reset_pressed      \ set task handle to zero
 1650  MOV     link,#0
 1660  STR     link,task_handle
 1670  LDMFD   (sp)!,{pc}
 1680\
 1690.polling_loop
 1700  MOV     R0,#%110011  \ mask out reason codes
 1710  MOV     R1,worksp
 1720  SWI     "XWimp_Poll"
 1730  CMP     R0,#17    \ check for incoming message
 1740  CMPNE   R0,#18
 1750  CMPNE   R0,#19
 1760  BNE     polling_loop  \ keep polling until a message arrives
 1770\
 1780  LDR     R0,[block,#16]
 1790  CMP     R0,#0     \ Message_Quit (type 0) ?
 1800  BLEQ    close_down
 1810  CMP     R0,#5     \ Message_DataOpen (type 5) ?
 1820  BLEQ    clicked_on_icon
 1830  B       polling_loop \ continue polling loop
 1840\
 1850.close_down
 1860  STMFD   (sp)!,{link}
 1870  LDR     R0,task_handle  \ is the task handle valid ?
 1880  CMP     R0,#0
 1890  LDRGT   R1,task_string
 1900  SWIGT   "XWimp_CloseDown"\ quit Wimp if it is
 1910  MOVGT   R0,#0
 1920  STRGT   R0,task_handle  \ set task handle to zero
 1930  LDMFD   (sp)!,{pc}
 1940\
 1950.clicked_on_icon
 1960  STMFD   (sp)!,{R0,R1,link}
 1970  MOV     R0,#&81
 1980  MVN     R1,#0    \ check whether Shift is held down using
 1990  MOV     R2,#&FF  \ OS_Byte &81,-1,&FF
 2000  SWI     "XOS_Byte"
 2010  LDMFD   (sp)!,{R0,R1} \ retrieve R0,R1 from stack
 2020  CMP R2,#&FF
 2030  LDMNEFD (sp)!,{pc}    \ exit if Shift wasn't held down
 2040\
 2050  LDR     R2,[block,#40]    \ check that clicked object is a file
 2060  CMP     R2,#&1000   \ (filetype not &1000 or &2000)
 2070  CMPNE   R2,#&2000
 2080  LDMEQFD (sp)!,{pc}    \ exit if it isn't
 2090\
 2100  MOV     R0,#20      \ acknowledge load
 2110  STR     R0,[block]
 2120  LDR     R0,[block,#8]
 2130  STR     R0,[block,#12]    \ copy 'my_ref' to 'your_ref'
 2140  MOV     R0,#4
 2150  STR     R0,[block,#16]    \ Message_DataLoadAck
 2160  MOV     R0,#17
 2170  MOV     R2,#0    \ broadcast message
 2180  SWI     "XWimp_SendMessage"
 2190\
 2200  MOV     R0,#ASC"L"     \ insert text 'Load ' before filename
 2210  STRB    R0,[block,#39]
 2220  LDR     R0,load_text
 2230  STR     R0,[block,#40]
 2240\
 2250  ADD     R0,block,#39   \ start new Wimp task with 'Load <filename>'
 2260  SWI     "Wimp_StartTask"
 2270  LDMFD   (sp)!,{pc}   \ and return
 2280\
 2290.load_text EQUS "oad "   \ text to insert before filename
 2300]:NEXT:ENDPROC

"� > <BasicSave$Dir>.Loader/Src
� by Paul Dellar
� (c) The Micro User
(:
2� code% &1000
<
�assemble
F-ș "OS_File",10,"DeskLoad",&FFA,,code%,O%
P�
Z:
d� �assemble
nblock=1
x
worksp=12
�	sp=13
�link=14
�null$=�(0)
�� pass%=0 � 3 � 3
�P%=0:O%=code%
�[OPT pass%+4
�  EQUD start_code
�  EQUD initialise
�  EQUD finalise
�  EQUD service
�  EQUD title_string
�  EQUD help_string
�  EQUD command_table
  EQUD 0
\
.title_string
"  EQUS "DeskLoad"+null$
,.help_string
6  EQUS "Desktop Loader"
@  EQUB 9
J'  EQUS "1.00 ("+��$,5,11)+")"+null$
T  ALIGN
^\
h.command_table
r!  EQUS "DeskTop_Loader"+null$
|  ALIGN
�  EQUD command_code
�  EQUD 0
�  EQUD command_syntax
�  EQUD command_help
�\
�  EQUS "SetDirOf"+null$
�  ALIGN
�  EQUD setdir_code
�  EQUD &010101
�  EQUD setdir_syntax
�  EQUD setdir_syntax
�  EQUD 0
�\
.command_help
m  EQUS "*DeskTop_Loader starts the desktop loader module, you should normally use just *DeskTop instead."

  EQUB 13
&.command_syntax
0*  EQUS "Syntax: *DeskTop_Loader"+null$
:\
D.setdir_help
Nl  EQUS "*SetDirOf <filename> sets the current directory to the directory containing the specified file."
X
  EQUB 13
b.setdir_syntax
l/  EQUS "Syntax: *SetDirOf <filename>"+null$
v  ALIGN
�\
�.initialise
�  STMFD   (sp)!,{link}
�  MOV     R0,#6
�  MOV     R3,#&140
�:  SWI     "OS_Module"  \ claim &140 bytes of workspace
�8  STRVC   R2,[worksp]  \ store pointer if it's valid
�  LDMFD   (sp)!,{pc}
�\
�
.finalise
�  STMFD   (sp)!,{link}
�&  BL      close_down   \ quit Wimp
�  MOV     R0,#7
  LDR     R2,[worksp]
+  SWI     "OS_Module"  \ free workspace
  LDMFD   (sp)!,{pc}
 \
*7.command_code       \ this starts up module through
45  STMFD   (sp)!,{link} \ its language entry point
>  MOV     R2,R0
H,  ADR     R1,title_string \ module title
R  MOV     R0,#2
\2  SWI     "XOS_Module" \ run module start code
f  LDMFD   (sp)!,{pc}
p\
z?.setdir_code     \ entered with R0 pointing to command tail
�  STMFD   (sp)!,{link}
�:  LDR     worksp,[worksp] \ retrieve workspace pointer
�A  SUB     R1,worksp,#1 \ (using preindexed addressing so need
�6.loop            \ to subtract 1 from the address)
�=  LDRB    R2,[R0],#1   \ copy command tail into workspace
�?  CMP     R2,#32    \ (tail terminated by control character
�&  STRGEB  R2,[R1,#1]   \ or space)
�=  BGT     loop   \ R1 points to the terminating character
�9\                \ (not the one after as would happen
�4\                \ with post-indexed addressing)
�
.loop2
�B  LDRB    R2,[R1],#-1  \ set R1 to point to the last full-stop
�3  CMP     R2,#�"."   \ or colon in the pathname
  CMPNE   R2,#�":"
  BEQ     exit_loop
  CMP     R1,worksp
$9  BGT     loop2     \ return without an error message
.C  LDMFD   (sp)!,{pc}   \ if the command tail is just a leafname
8\
B8.exit_loop       \ replace the full-stop with a null
LB  CMP     R2,#�":"   \ byte or add a null byte after the colon
V  ADDEQ   R1,R1,#1
`  MOV     R0,#0
j  STRB    R0,[R1,#1]
t  MOV     R1,worksp
~5  SWI     "XOS_FSControl" \ set current directory
�&  LDMFD   (sp)!,{pc}   \ and leave
�\
�.start_code
�5  LDR     worksp,[worksp] \ get workspace pointer
�D  ADD     sp,worksp,#&140 \ create SVC stack at top of workspace
�B  BL      close_down   \ prevents module being started twice !
�\
�-  MOV     R0,#200   \ wimp version number
�&  LDR     R1,task_string  \ 'TASK'
�7  ADR     R2,title  \ title for task manager window
�   SWI     "XWimp_Initialise"
�J  LDMFD   (sp)!,{link} \ pull link register so we can return if needed
4  STRVC   R1,task_handle  \ store my task handle

B  BVC     polling_loop \ go to Wimp_Poll loop if everything OK
6  MOV     pc,link   \ exit if something goes wrong

(.task_string EQUS "TASK"
2.task_handle EQUD 0
<&.title    EQUS "File Loader"+null$
F  ALIGN
P\
Z:.service      \ module service calls are received here
d  STMFD   (sp)!,{link}
n  LDR     worksp,[worksp]
x-  CMP     R1,#&49   \ Service_StartWimp ?
�  BEQ     start_wimp
�/  CMP     R1,#&4A   \ Service_StartedWimp ?
�  BEQ     started_wimp
�)  CMP     R1,#&27   \ Service_Reset ?
�  BEQ     reset_pressed
�  LDMFD   (sp)!,{pc}
�\
�.start_wimp
�  LDR     link,task_handle
�  CMP     link,#0
�  MVNEQ   link,#0
�D  STREQ   link,task_handle\ set task handle to -1 if not running
�@  ADREQ   R0,command_table\ pointer to command to start task
)  �Q   R1,#0     \ claim service call
  LDMFD   (sp)!,{pc}
\
"4.started_wimp       \ if task handle=-1 then set
,3  LDR     link,task_handle\ task handle to zero
6  CMN     link,#1
@  �Q   link,#0
J  STREQ   link,task_handle
T  LDMFD   (sp)!,{pc}
^\
h1.reset_pressed      \ set task handle to zero
r  MOV     link,#0
|  STR     link,task_handle
�  LDMFD   (sp)!,{pc}
�\
�.polling_loop
�2  MOV     R0,#%110011  \ mask out reason codes
�  MOV     R1,worksp
�  SWI     "XWimp_Poll"
�4  CMP     R0,#17    \ check for incoming message
�  CMPNE   R0,#18
�  CMPNE   R0,#19
�B  BNE     polling_loop  \ keep polling until a message arrives
�\
�  LDR     R0,[block,#16]
�1  CMP     R0,#0     \ Message_Quit (type 0) ?
  BLEQ    close_down
5  CMP     R0,#5     \ Message_DataOpen (type 5) ?
  BLEQ    clicked_on_icon
&2  B       polling_loop \ continue polling loop
0\
:.close_down
D  STMFD   (sp)!,{link}
N:  LDR     R0,task_handle  \ is the task handle valid ?
X  CMP     R0,#0
b  LDRGT   R1,task_string
l3  SWIGT   "XWimp_CloseDown"\ quit Wimp if it is
v  MOVGT   R0,#0
�7  STRGT   R0,task_handle  \ set task handle to zero
�  LDMFD   (sp)!,{pc}
�\
�.clicked_on_icon
�   STMFD   (sp)!,{R0,R1,link}
�  MOV     R0,#&81
�?  MVN     R1,#0    \ check whether Shift is held down using
�+  MOV     R2,#&FF  \ OS_Byte &81,-1,&FF
�  SWI     "XOS_Byte"
�7  LDMFD   (sp)!,{R0,R1} \ retrieve R0,R1 from stack
�  CMP R2,#&FF
�<  LDMNEFD (sp)!,{pc}    \ exit if Shift wasn't held down
�\
E  LDR     R2,[block,#40]    \ check that clicked object is a file
9  CMP     R2,#&1000   \ (filetype not &1000 or &2000)
  CMPNE   R2,#&2000
 .  LDMEQFD (sp)!,{pc}    \ exit if it isn't
*\
4,  MOV     R0,#20      \ acknowledge load
>  STR     R0,[block]
H  LDR     R0,[block,#8]
R=  STR     R0,[block,#12]    \ copy 'my_ref' to 'your_ref'
\  MOV     R0,#4
f5  STR     R0,[block,#16]    \ Message_DataLoadAck
p  MOV     R0,#17
z*  MOV     R2,#0    \ broadcast message
�!  SWI     "XWimp_SendMessage"
�\
�@  MOV     R0,#�"L"     \ insert text 'Load ' before filename
�  STRB    R0,[block,#39]
�  LDR     R0,load_text
�  STR     R0,[block,#40]
�\
�I  ADD     R0,block,#39   \ start new Wimp task with 'Load <filename>'
�  SWI     "Wimp_StartTask"
�'  LDMFD   (sp)!,{pc}   \ and return
�\
�=.load_text EQUS "oad "   \ text to insert before filename
�	]:�:�
�
00000000  0d 00 0a 22 f4 20 3e 20  3c 42 61 73 69 63 53 61  |...". > <BasicSa|
00000010  76 65 24 44 69 72 3e 2e  4c 6f 61 64 65 72 2f 53  |ve$Dir>.Loader/S|
00000020  72 63 0d 00 14 14 f4 20  62 79 20 50 61 75 6c 20  |rc..... by Paul |
00000030  44 65 6c 6c 61 72 0d 00  1e 18 f4 20 28 63 29 20  |Dellar..... (c) |
00000040  54 68 65 20 4d 69 63 72  6f 20 55 73 65 72 0d 00  |The Micro User..|
00000050  28 05 3a 0d 00 32 11 de  20 63 6f 64 65 25 20 26  |(.:..2.. code% &|
00000060  31 30 30 30 0d 00 3c 0d  f2 61 73 73 65 6d 62 6c  |1000..<..assembl|
00000070  65 0d 00 46 2d c8 99 20  22 4f 53 5f 46 69 6c 65  |e..F-.. "OS_File|
00000080  22 2c 31 30 2c 22 44 65  73 6b 4c 6f 61 64 22 2c  |",10,"DeskLoad",|
00000090  26 46 46 41 2c 2c 63 6f  64 65 25 2c 4f 25 0d 00  |&FFA,,code%,O%..|
000000a0  50 05 e0 0d 00 5a 05 3a  0d 00 64 0f dd 20 f2 61  |P....Z.:..d.. .a|
000000b0  73 73 65 6d 62 6c 65 0d  00 6e 0b 62 6c 6f 63 6b  |ssemble..n.block|
000000c0  3d 31 0d 00 78 0d 77 6f  72 6b 73 70 3d 31 32 0d  |=1..x.worksp=12.|
000000d0  00 82 09 73 70 3d 31 33  0d 00 8c 0b 6c 69 6e 6b  |...sp=13....link|
000000e0  3d 31 34 0d 00 96 0e 6e  75 6c 6c 24 3d bd 28 30  |=14....null$=.(0|
000000f0  29 0d 00 a0 15 e3 20 70  61 73 73 25 3d 30 20 b8  |)..... pass%=0 .|
00000100  20 33 20 88 20 33 0d 00  aa 11 50 25 3d 30 3a 4f  | 3 . 3....P%=0:O|
00000110  25 3d 63 6f 64 65 25 0d  00 b4 10 5b 4f 50 54 20  |%=code%....[OPT |
00000120  70 61 73 73 25 2b 34 0d  00 be 15 20 20 45 51 55  |pass%+4....  EQU|
00000130  44 20 73 74 61 72 74 5f  63 6f 64 65 0d 00 c8 15  |D start_code....|
00000140  20 20 45 51 55 44 20 69  6e 69 74 69 61 6c 69 73  |  EQUD initialis|
00000150  65 0d 00 d2 13 20 20 45  51 55 44 20 66 69 6e 61  |e....  EQUD fina|
00000160  6c 69 73 65 0d 00 dc 12  20 20 45 51 55 44 20 73  |lise....  EQUD s|
00000170  65 72 76 69 63 65 0d 00  e6 17 20 20 45 51 55 44  |ervice....  EQUD|
00000180  20 74 69 74 6c 65 5f 73  74 72 69 6e 67 0d 00 f0  | title_string...|
00000190  16 20 20 45 51 55 44 20  68 65 6c 70 5f 73 74 72  |.  EQUD help_str|
000001a0  69 6e 67 0d 00 fa 18 20  20 45 51 55 44 20 63 6f  |ing....  EQUD co|
000001b0  6d 6d 61 6e 64 5f 74 61  62 6c 65 0d 01 04 0c 20  |mmand_table.... |
000001c0  20 45 51 55 44 20 30 0d  01 0e 05 5c 0d 01 18 11  | EQUD 0....\....|
000001d0  2e 74 69 74 6c 65 5f 73  74 72 69 6e 67 0d 01 22  |.title_string.."|
000001e0  1b 20 20 45 51 55 53 20  22 44 65 73 6b 4c 6f 61  |.  EQUS "DeskLoa|
000001f0  64 22 2b 6e 75 6c 6c 24  0d 01 2c 10 2e 68 65 6c  |d"+null$..,..hel|
00000200  70 5f 73 74 72 69 6e 67  0d 01 36 1b 20 20 45 51  |p_string..6.  EQ|
00000210  55 53 20 22 44 65 73 6b  74 6f 70 20 4c 6f 61 64  |US "Desktop Load|
00000220  65 72 22 0d 01 40 0c 20  20 45 51 55 42 20 39 0d  |er"..@.  EQUB 9.|
00000230  01 4a 27 20 20 45 51 55  53 20 22 31 2e 30 30 20  |.J'  EQUS "1.00 |
00000240  28 22 2b c1 91 24 2c 35  2c 31 31 29 2b 22 29 22  |("+..$,5,11)+")"|
00000250  2b 6e 75 6c 6c 24 0d 01  54 0b 20 20 41 4c 49 47  |+null$..T.  ALIG|
00000260  4e 0d 01 5e 05 5c 0d 01  68 12 2e 63 6f 6d 6d 61  |N..^.\..h..comma|
00000270  6e 64 5f 74 61 62 6c 65  0d 01 72 21 20 20 45 51  |nd_table..r!  EQ|
00000280  55 53 20 22 44 65 73 6b  54 6f 70 5f 4c 6f 61 64  |US "DeskTop_Load|
00000290  65 72 22 2b 6e 75 6c 6c  24 0d 01 7c 0b 20 20 41  |er"+null$..|.  A|
000002a0  4c 49 47 4e 0d 01 86 17  20 20 45 51 55 44 20 63  |LIGN....  EQUD c|
000002b0  6f 6d 6d 61 6e 64 5f 63  6f 64 65 0d 01 90 0c 20  |ommand_code.... |
000002c0  20 45 51 55 44 20 30 0d  01 9a 19 20 20 45 51 55  | EQUD 0....  EQU|
000002d0  44 20 63 6f 6d 6d 61 6e  64 5f 73 79 6e 74 61 78  |D command_syntax|
000002e0  0d 01 a4 17 20 20 45 51  55 44 20 63 6f 6d 6d 61  |....  EQUD comma|
000002f0  6e 64 5f 68 65 6c 70 0d  01 ae 05 5c 0d 01 b8 1b  |nd_help....\....|
00000300  20 20 45 51 55 53 20 22  53 65 74 44 69 72 4f 66  |  EQUS "SetDirOf|
00000310  22 2b 6e 75 6c 6c 24 0d  01 c2 0b 20 20 41 4c 49  |"+null$....  ALI|
00000320  47 4e 0d 01 cc 16 20 20  45 51 55 44 20 73 65 74  |GN....  EQUD set|
00000330  64 69 72 5f 63 6f 64 65  0d 01 d6 12 20 20 45 51  |dir_code....  EQ|
00000340  55 44 20 26 30 31 30 31  30 31 0d 01 e0 18 20 20  |UD &010101....  |
00000350  45 51 55 44 20 73 65 74  64 69 72 5f 73 79 6e 74  |EQUD setdir_synt|
00000360  61 78 0d 01 ea 18 20 20  45 51 55 44 20 73 65 74  |ax....  EQUD set|
00000370  64 69 72 5f 73 79 6e 74  61 78 0d 01 f4 0c 20 20  |dir_syntax....  |
00000380  45 51 55 44 20 30 0d 01  fe 05 5c 0d 02 08 11 2e  |EQUD 0....\.....|
00000390  63 6f 6d 6d 61 6e 64 5f  68 65 6c 70 0d 02 12 6d  |command_help...m|
000003a0  20 20 45 51 55 53 20 22  2a 44 65 73 6b 54 6f 70  |  EQUS "*DeskTop|
000003b0  5f 4c 6f 61 64 65 72 20  73 74 61 72 74 73 20 74  |_Loader starts t|
000003c0  68 65 20 64 65 73 6b 74  6f 70 20 6c 6f 61 64 65  |he desktop loade|
000003d0  72 20 6d 6f 64 75 6c 65  2c 20 79 6f 75 20 73 68  |r module, you sh|
000003e0  6f 75 6c 64 20 6e 6f 72  6d 61 6c 6c 79 20 75 73  |ould normally us|
000003f0  65 20 6a 75 73 74 20 2a  44 65 73 6b 54 6f 70 20  |e just *DeskTop |
00000400  69 6e 73 74 65 61 64 2e  22 0d 02 1c 0d 20 20 45  |instead."....  E|
00000410  51 55 42 20 31 33 0d 02  26 13 2e 63 6f 6d 6d 61  |QUB 13..&..comma|
00000420  6e 64 5f 73 79 6e 74 61  78 0d 02 30 2a 20 20 45  |nd_syntax..0*  E|
00000430  51 55 53 20 22 53 79 6e  74 61 78 3a 20 2a 44 65  |QUS "Syntax: *De|
00000440  73 6b 54 6f 70 5f 4c 6f  61 64 65 72 22 2b 6e 75  |skTop_Loader"+nu|
00000450  6c 6c 24 0d 02 3a 05 5c  0d 02 44 10 2e 73 65 74  |ll$..:.\..D..set|
00000460  64 69 72 5f 68 65 6c 70  0d 02 4e 6c 20 20 45 51  |dir_help..Nl  EQ|
00000470  55 53 20 22 2a 53 65 74  44 69 72 4f 66 20 3c 66  |US "*SetDirOf <f|
00000480  69 6c 65 6e 61 6d 65 3e  20 73 65 74 73 20 74 68  |ilename> sets th|
00000490  65 20 63 75 72 72 65 6e  74 20 64 69 72 65 63 74  |e current direct|
000004a0  6f 72 79 20 74 6f 20 74  68 65 20 64 69 72 65 63  |ory to the direc|
000004b0  74 6f 72 79 20 63 6f 6e  74 61 69 6e 69 6e 67 20  |tory containing |
000004c0  74 68 65 20 73 70 65 63  69 66 69 65 64 20 66 69  |the specified fi|
000004d0  6c 65 2e 22 0d 02 58 0d  20 20 45 51 55 42 20 31  |le."..X.  EQUB 1|
000004e0  33 0d 02 62 12 2e 73 65  74 64 69 72 5f 73 79 6e  |3..b..setdir_syn|
000004f0  74 61 78 0d 02 6c 2f 20  20 45 51 55 53 20 22 53  |tax..l/  EQUS "S|
00000500  79 6e 74 61 78 3a 20 2a  53 65 74 44 69 72 4f 66  |yntax: *SetDirOf|
00000510  20 3c 66 69 6c 65 6e 61  6d 65 3e 22 2b 6e 75 6c  | <filename>"+nul|
00000520  6c 24 0d 02 76 0b 20 20  41 4c 49 47 4e 0d 02 80  |l$..v.  ALIGN...|
00000530  05 5c 0d 02 8a 0f 2e 69  6e 69 74 69 61 6c 69 73  |.\.....initialis|
00000540  65 0d 02 94 1a 20 20 53  54 4d 46 44 20 20 20 28  |e....  STMFD   (|
00000550  73 70 29 21 2c 7b 6c 69  6e 6b 7d 0d 02 9e 13 20  |sp)!,{link}.... |
00000560  20 4d 4f 56 20 20 20 20  20 52 30 2c 23 36 0d 02  | MOV     R0,#6..|
00000570  a8 16 20 20 4d 4f 56 20  20 20 20 20 52 33 2c 23  |..  MOV     R3,#|
00000580  26 31 34 30 0d 02 b2 3a  20 20 53 57 49 20 20 20  |&140...:  SWI   |
00000590  20 20 22 4f 53 5f 4d 6f  64 75 6c 65 22 20 20 5c  |  "OS_Module"  \|
000005a0  20 63 6c 61 69 6d 20 26  31 34 30 20 62 79 74 65  | claim &140 byte|
000005b0  73 20 6f 66 20 77 6f 72  6b 73 70 61 63 65 0d 02  |s of workspace..|
000005c0  bc 38 20 20 53 54 52 56  43 20 20 20 52 32 2c 5b  |.8  STRVC   R2,[|
000005d0  77 6f 72 6b 73 70 5d 20  20 5c 20 73 74 6f 72 65  |worksp]  \ store|
000005e0  20 70 6f 69 6e 74 65 72  20 69 66 20 69 74 27 73  | pointer if it's|
000005f0  20 76 61 6c 69 64 0d 02  c6 18 20 20 4c 44 4d 46  | valid....  LDMF|
00000600  44 20 20 20 28 73 70 29  21 2c 7b 70 63 7d 0d 02  |D   (sp)!,{pc}..|
00000610  d0 05 5c 0d 02 da 0d 2e  66 69 6e 61 6c 69 73 65  |..\.....finalise|
00000620  0d 02 e4 1a 20 20 53 54  4d 46 44 20 20 20 28 73  |....  STMFD   (s|
00000630  70 29 21 2c 7b 6c 69 6e  6b 7d 0d 02 ee 26 20 20  |p)!,{link}...&  |
00000640  42 4c 20 20 20 20 20 20  63 6c 6f 73 65 5f 64 6f  |BL      close_do|
00000650  77 6e 20 20 20 5c 20 71  75 69 74 20 57 69 6d 70  |wn   \ quit Wimp|
00000660  0d 02 f8 13 20 20 4d 4f  56 20 20 20 20 20 52 30  |....  MOV     R0|
00000670  2c 23 37 0d 03 02 19 20  20 4c 44 52 20 20 20 20  |,#7....  LDR    |
00000680  20 52 32 2c 5b 77 6f 72  6b 73 70 5d 0d 03 0c 2b  | R2,[worksp]...+|
00000690  20 20 53 57 49 20 20 20  20 20 22 4f 53 5f 4d 6f  |  SWI     "OS_Mo|
000006a0  64 75 6c 65 22 20 20 5c  20 66 72 65 65 20 77 6f  |dule"  \ free wo|
000006b0  72 6b 73 70 61 63 65 0d  03 16 18 20 20 4c 44 4d  |rkspace....  LDM|
000006c0  46 44 20 20 20 28 73 70  29 21 2c 7b 70 63 7d 0d  |FD   (sp)!,{pc}.|
000006d0  03 20 05 5c 0d 03 2a 37  2e 63 6f 6d 6d 61 6e 64  |. .\..*7.command|
000006e0  5f 63 6f 64 65 20 20 20  20 20 20 20 5c 20 74 68  |_code       \ th|
000006f0  69 73 20 73 74 61 72 74  73 20 75 70 20 6d 6f 64  |is starts up mod|
00000700  75 6c 65 20 74 68 72 6f  75 67 68 0d 03 34 35 20  |ule through..45 |
00000710  20 53 54 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | STMFD   (sp)!,{|
00000720  6c 69 6e 6b 7d 20 5c 20  69 74 73 20 6c 61 6e 67  |link} \ its lang|
00000730  75 61 67 65 20 65 6e 74  72 79 20 70 6f 69 6e 74  |uage entry point|
00000740  0d 03 3e 13 20 20 4d 4f  56 20 20 20 20 20 52 32  |..>.  MOV     R2|
00000750  2c 52 30 0d 03 48 2c 20  20 41 44 52 20 20 20 20  |,R0..H,  ADR    |
00000760  20 52 31 2c 74 69 74 6c  65 5f 73 74 72 69 6e 67  | R1,title_string|
00000770  20 5c 20 6d 6f 64 75 6c  65 20 74 69 74 6c 65 0d  | \ module title.|
00000780  03 52 13 20 20 4d 4f 56  20 20 20 20 20 52 30 2c  |.R.  MOV     R0,|
00000790  23 32 0d 03 5c 32 20 20  53 57 49 20 20 20 20 20  |#2..\2  SWI     |
000007a0  22 58 4f 53 5f 4d 6f 64  75 6c 65 22 20 5c 20 72  |"XOS_Module" \ r|
000007b0  75 6e 20 6d 6f 64 75 6c  65 20 73 74 61 72 74 20  |un module start |
000007c0  63 6f 64 65 0d 03 66 18  20 20 4c 44 4d 46 44 20  |code..f.  LDMFD |
000007d0  20 20 28 73 70 29 21 2c  7b 70 63 7d 0d 03 70 05  |  (sp)!,{pc}..p.|
000007e0  5c 0d 03 7a 3f 2e 73 65  74 64 69 72 5f 63 6f 64  |\..z?.setdir_cod|
000007f0  65 20 20 20 20 20 5c 20  65 6e 74 65 72 65 64 20  |e     \ entered |
00000800  77 69 74 68 20 52 30 20  70 6f 69 6e 74 69 6e 67  |with R0 pointing|
00000810  20 74 6f 20 63 6f 6d 6d  61 6e 64 20 74 61 69 6c  | to command tail|
00000820  0d 03 84 1a 20 20 53 54  4d 46 44 20 20 20 28 73  |....  STMFD   (s|
00000830  70 29 21 2c 7b 6c 69 6e  6b 7d 0d 03 8e 3a 20 20  |p)!,{link}...:  |
00000840  4c 44 52 20 20 20 20 20  77 6f 72 6b 73 70 2c 5b  |LDR     worksp,[|
00000850  77 6f 72 6b 73 70 5d 20  5c 20 72 65 74 72 69 65  |worksp] \ retrie|
00000860  76 65 20 77 6f 72 6b 73  70 61 63 65 20 70 6f 69  |ve workspace poi|
00000870  6e 74 65 72 0d 03 98 41  20 20 53 55 42 20 20 20  |nter...A  SUB   |
00000880  20 20 52 31 2c 77 6f 72  6b 73 70 2c 23 31 20 5c  |  R1,worksp,#1 \|
00000890  20 28 75 73 69 6e 67 20  70 72 65 69 6e 64 65 78  | (using preindex|
000008a0  65 64 20 61 64 64 72 65  73 73 69 6e 67 20 73 6f  |ed addressing so|
000008b0  20 6e 65 65 64 0d 03 a2  36 2e 6c 6f 6f 70 20 20  | need...6.loop  |
000008c0  20 20 20 20 20 20 20 20  20 20 5c 20 74 6f 20 73  |          \ to s|
000008d0  75 62 74 72 61 63 74 20  31 20 66 72 6f 6d 20 74  |ubtract 1 from t|
000008e0  68 65 20 61 64 64 72 65  73 73 29 0d 03 ac 3d 20  |he address)...= |
000008f0  20 4c 44 52 42 20 20 20  20 52 32 2c 5b 52 30 5d  | LDRB    R2,[R0]|
00000900  2c 23 31 20 20 20 5c 20  63 6f 70 79 20 63 6f 6d  |,#1   \ copy com|
00000910  6d 61 6e 64 20 74 61 69  6c 20 69 6e 74 6f 20 77  |mand tail into w|
00000920  6f 72 6b 73 70 61 63 65  0d 03 b6 3f 20 20 43 4d  |orkspace...?  CM|
00000930  50 20 20 20 20 20 52 32  2c 23 33 32 20 20 20 20  |P     R2,#32    |
00000940  5c 20 28 74 61 69 6c 20  74 65 72 6d 69 6e 61 74  |\ (tail terminat|
00000950  65 64 20 62 79 20 63 6f  6e 74 72 6f 6c 20 63 68  |ed by control ch|
00000960  61 72 61 63 74 65 72 0d  03 c0 26 20 20 53 54 52  |aracter...&  STR|
00000970  47 45 42 20 20 52 32 2c  5b 52 31 2c 23 31 5d 20  |GEB  R2,[R1,#1] |
00000980  20 20 5c 20 6f 72 20 73  70 61 63 65 29 0d 03 ca  |  \ or space)...|
00000990  3d 20 20 42 47 54 20 20  20 20 20 6c 6f 6f 70 20  |=  BGT     loop |
000009a0  20 20 5c 20 52 31 20 70  6f 69 6e 74 73 20 74 6f  |  \ R1 points to|
000009b0  20 74 68 65 20 74 65 72  6d 69 6e 61 74 69 6e 67  | the terminating|
000009c0  20 63 68 61 72 61 63 74  65 72 0d 03 d4 39 5c 20  | character...9\ |
000009d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 5c  |               \|
000009e0  20 28 6e 6f 74 20 74 68  65 20 6f 6e 65 20 61 66  | (not the one af|
000009f0  74 65 72 20 61 73 20 77  6f 75 6c 64 20 68 61 70  |ter as would hap|
00000a00  70 65 6e 0d 03 de 34 5c  20 20 20 20 20 20 20 20  |pen...4\        |
00000a10  20 20 20 20 20 20 20 20  5c 20 77 69 74 68 20 70  |        \ with p|
00000a20  6f 73 74 2d 69 6e 64 65  78 65 64 20 61 64 64 72  |ost-indexed addr|
00000a30  65 73 73 69 6e 67 29 0d  03 e8 0a 2e 6c 6f 6f 70  |essing).....loop|
00000a40  32 0d 03 f2 42 20 20 4c  44 52 42 20 20 20 20 52  |2...B  LDRB    R|
00000a50  32 2c 5b 52 31 5d 2c 23  2d 31 20 20 5c 20 73 65  |2,[R1],#-1  \ se|
00000a60  74 20 52 31 20 74 6f 20  70 6f 69 6e 74 20 74 6f  |t R1 to point to|
00000a70  20 74 68 65 20 6c 61 73  74 20 66 75 6c 6c 2d 73  | the last full-s|
00000a80  74 6f 70 0d 03 fc 33 20  20 43 4d 50 20 20 20 20  |top...3  CMP    |
00000a90  20 52 32 2c 23 97 22 2e  22 20 20 20 5c 20 6f 72  | R2,#."."   \ or|
00000aa0  20 63 6f 6c 6f 6e 20 69  6e 20 74 68 65 20 70 61  | colon in the pa|
00000ab0  74 68 6e 61 6d 65 0d 04  06 16 20 20 43 4d 50 4e  |thname....  CMPN|
00000ac0  45 20 20 20 52 32 2c 23  97 22 3a 22 0d 04 10 17  |E   R2,#.":"....|
00000ad0  20 20 42 45 51 20 20 20  20 20 65 78 69 74 5f 6c  |  BEQ     exit_l|
00000ae0  6f 6f 70 0d 04 1a 17 20  20 43 4d 50 20 20 20 20  |oop....  CMP    |
00000af0  20 52 31 2c 77 6f 72 6b  73 70 0d 04 24 39 20 20  | R1,worksp..$9  |
00000b00  42 47 54 20 20 20 20 20  6c 6f 6f 70 32 20 20 20  |BGT     loop2   |
00000b10  20 20 5c 20 72 65 74 75  72 6e 20 77 69 74 68 6f  |  \ return witho|
00000b20  75 74 20 61 6e 20 65 72  72 6f 72 20 6d 65 73 73  |ut an error mess|
00000b30  61 67 65 0d 04 2e 43 20  20 4c 44 4d 46 44 20 20  |age...C  LDMFD  |
00000b40  20 28 73 70 29 21 2c 7b  70 63 7d 20 20 20 5c 20  | (sp)!,{pc}   \ |
00000b50  69 66 20 74 68 65 20 63  6f 6d 6d 61 6e 64 20 74  |if the command t|
00000b60  61 69 6c 20 69 73 20 6a  75 73 74 20 61 20 6c 65  |ail is just a le|
00000b70  61 66 6e 61 6d 65 0d 04  38 05 5c 0d 04 42 38 2e  |afname..8.\..B8.|
00000b80  65 78 69 74 5f 6c 6f 6f  70 20 20 20 20 20 20 20  |exit_loop       |
00000b90  5c 20 72 65 70 6c 61 63  65 20 74 68 65 20 66 75  |\ replace the fu|
00000ba0  6c 6c 2d 73 74 6f 70 20  77 69 74 68 20 61 20 6e  |ll-stop with a n|
00000bb0  75 6c 6c 0d 04 4c 42 20  20 43 4d 50 20 20 20 20  |ull..LB  CMP    |
00000bc0  20 52 32 2c 23 97 22 3a  22 20 20 20 5c 20 62 79  | R2,#.":"   \ by|
00000bd0  74 65 20 6f 72 20 61 64  64 20 61 20 6e 75 6c 6c  |te or add a null|
00000be0  20 62 79 74 65 20 61 66  74 65 72 20 74 68 65 20  | byte after the |
00000bf0  63 6f 6c 6f 6e 0d 04 56  16 20 20 41 44 44 45 51  |colon..V.  ADDEQ|
00000c00  20 20 20 52 31 2c 52 31  2c 23 31 0d 04 60 13 20  |   R1,R1,#1..`. |
00000c10  20 4d 4f 56 20 20 20 20  20 52 30 2c 23 30 0d 04  | MOV     R0,#0..|
00000c20  6a 18 20 20 53 54 52 42  20 20 20 20 52 30 2c 5b  |j.  STRB    R0,[|
00000c30  52 31 2c 23 31 5d 0d 04  74 17 20 20 4d 4f 56 20  |R1,#1]..t.  MOV |
00000c40  20 20 20 20 52 31 2c 77  6f 72 6b 73 70 0d 04 7e  |    R1,worksp..~|
00000c50  35 20 20 53 57 49 20 20  20 20 20 22 58 4f 53 5f  |5  SWI     "XOS_|
00000c60  46 53 43 6f 6e 74 72 6f  6c 22 20 5c 20 73 65 74  |FSControl" \ set|
00000c70  20 63 75 72 72 65 6e 74  20 64 69 72 65 63 74 6f  | current directo|
00000c80  72 79 0d 04 88 26 20 20  4c 44 4d 46 44 20 20 20  |ry...&  LDMFD   |
00000c90  28 73 70 29 21 2c 7b 70  63 7d 20 20 20 5c 20 61  |(sp)!,{pc}   \ a|
00000ca0  6e 64 20 6c 65 61 76 65  0d 04 92 05 5c 0d 04 9c  |nd leave....\...|
00000cb0  0f 2e 73 74 61 72 74 5f  63 6f 64 65 0d 04 a6 35  |..start_code...5|
00000cc0  20 20 4c 44 52 20 20 20  20 20 77 6f 72 6b 73 70  |  LDR     worksp|
00000cd0  2c 5b 77 6f 72 6b 73 70  5d 20 5c 20 67 65 74 20  |,[worksp] \ get |
00000ce0  77 6f 72 6b 73 70 61 63  65 20 70 6f 69 6e 74 65  |workspace pointe|
00000cf0  72 0d 04 b0 44 20 20 41  44 44 20 20 20 20 20 73  |r...D  ADD     s|
00000d00  70 2c 77 6f 72 6b 73 70  2c 23 26 31 34 30 20 5c  |p,worksp,#&140 \|
00000d10  20 63 72 65 61 74 65 20  53 56 43 20 73 74 61 63  | create SVC stac|
00000d20  6b 20 61 74 20 74 6f 70  20 6f 66 20 77 6f 72 6b  |k at top of work|
00000d30  73 70 61 63 65 0d 04 ba  42 20 20 42 4c 20 20 20  |space...B  BL   |
00000d40  20 20 20 63 6c 6f 73 65  5f 64 6f 77 6e 20 20 20  |   close_down   |
00000d50  5c 20 70 72 65 76 65 6e  74 73 20 6d 6f 64 75 6c  |\ prevents modul|
00000d60  65 20 62 65 69 6e 67 20  73 74 61 72 74 65 64 20  |e being started |
00000d70  74 77 69 63 65 20 21 0d  04 c4 05 5c 0d 04 ce 2d  |twice !....\...-|
00000d80  20 20 4d 4f 56 20 20 20  20 20 52 30 2c 23 32 30  |  MOV     R0,#20|
00000d90  30 20 20 20 5c 20 77 69  6d 70 20 76 65 72 73 69  |0   \ wimp versi|
00000da0  6f 6e 20 6e 75 6d 62 65  72 0d 04 d8 26 20 20 4c  |on number...&  L|
00000db0  44 52 20 20 20 20 20 52  31 2c 74 61 73 6b 5f 73  |DR     R1,task_s|
00000dc0  74 72 69 6e 67 20 20 5c  20 27 54 41 53 4b 27 0d  |tring  \ 'TASK'.|
00000dd0  04 e2 37 20 20 41 44 52  20 20 20 20 20 52 32 2c  |..7  ADR     R2,|
00000de0  74 69 74 6c 65 20 20 5c  20 74 69 74 6c 65 20 66  |title  \ title f|
00000df0  6f 72 20 74 61 73 6b 20  6d 61 6e 61 67 65 72 20  |or task manager |
00000e00  77 69 6e 64 6f 77 0d 04  ec 20 20 20 53 57 49 20  |window...   SWI |
00000e10  20 20 20 20 22 58 57 69  6d 70 5f 49 6e 69 74 69  |    "XWimp_Initi|
00000e20  61 6c 69 73 65 22 0d 04  f6 4a 20 20 4c 44 4d 46  |alise"...J  LDMF|
00000e30  44 20 20 20 28 73 70 29  21 2c 7b 6c 69 6e 6b 7d  |D   (sp)!,{link}|
00000e40  20 5c 20 70 75 6c 6c 20  6c 69 6e 6b 20 72 65 67  | \ pull link reg|
00000e50  69 73 74 65 72 20 73 6f  20 77 65 20 63 61 6e 20  |ister so we can |
00000e60  72 65 74 75 72 6e 20 69  66 20 6e 65 65 64 65 64  |return if needed|
00000e70  0d 05 00 34 20 20 53 54  52 56 43 20 20 20 52 31  |...4  STRVC   R1|
00000e80  2c 74 61 73 6b 5f 68 61  6e 64 6c 65 20 20 5c 20  |,task_handle  \ |
00000e90  73 74 6f 72 65 20 6d 79  20 74 61 73 6b 20 68 61  |store my task ha|
00000ea0  6e 64 6c 65 0d 05 0a 42  20 20 42 56 43 20 20 20  |ndle...B  BVC   |
00000eb0  20 20 70 6f 6c 6c 69 6e  67 5f 6c 6f 6f 70 20 5c  |  polling_loop \|
00000ec0  20 67 6f 20 74 6f 20 57  69 6d 70 5f 50 6f 6c 6c  | go to Wimp_Poll|
00000ed0  20 6c 6f 6f 70 20 69 66  20 65 76 65 72 79 74 68  | loop if everyth|
00000ee0  69 6e 67 20 4f 4b 0d 05  14 36 20 20 4d 4f 56 20  |ing OK...6  MOV |
00000ef0  20 20 20 20 70 63 2c 6c  69 6e 6b 20 20 20 5c 20  |    pc,link   \ |
00000f00  65 78 69 74 20 69 66 20  73 6f 6d 65 74 68 69 6e  |exit if somethin|
00000f10  67 20 67 6f 65 73 20 77  72 6f 6e 67 0d 05 1e 04  |g goes wrong....|
00000f20  0d 05 28 1c 2e 74 61 73  6b 5f 73 74 72 69 6e 67  |..(..task_string|
00000f30  20 45 51 55 53 20 22 54  41 53 4b 22 0d 05 32 17  | EQUS "TASK"..2.|
00000f40  2e 74 61 73 6b 5f 68 61  6e 64 6c 65 20 45 51 55  |.task_handle EQU|
00000f50  44 20 30 0d 05 3c 26 2e  74 69 74 6c 65 20 20 20  |D 0..<&.title   |
00000f60  20 45 51 55 53 20 22 46  69 6c 65 20 4c 6f 61 64  | EQUS "File Load|
00000f70  65 72 22 2b 6e 75 6c 6c  24 0d 05 46 0b 20 20 41  |er"+null$..F.  A|
00000f80  4c 49 47 4e 0d 05 50 05  5c 0d 05 5a 3a 2e 73 65  |LIGN..P.\..Z:.se|
00000f90  72 76 69 63 65 20 20 20  20 20 20 5c 20 6d 6f 64  |rvice      \ mod|
00000fa0  75 6c 65 20 73 65 72 76  69 63 65 20 63 61 6c 6c  |ule service call|
00000fb0  73 20 61 72 65 20 72 65  63 65 69 76 65 64 20 68  |s are received h|
00000fc0  65 72 65 0d 05 64 1a 20  20 53 54 4d 46 44 20 20  |ere..d.  STMFD  |
00000fd0  20 28 73 70 29 21 2c 7b  6c 69 6e 6b 7d 0d 05 6e  | (sp)!,{link}..n|
00000fe0  1d 20 20 4c 44 52 20 20  20 20 20 77 6f 72 6b 73  |.  LDR     works|
00000ff0  70 2c 5b 77 6f 72 6b 73  70 5d 0d 05 78 2d 20 20  |p,[worksp]..x-  |
00001000  43 4d 50 20 20 20 20 20  52 31 2c 23 26 34 39 20  |CMP     R1,#&49 |
00001010  20 20 5c 20 53 65 72 76  69 63 65 5f 53 74 61 72  |  \ Service_Star|
00001020  74 57 69 6d 70 20 3f 0d  05 82 18 20 20 42 45 51  |tWimp ?....  BEQ|
00001030  20 20 20 20 20 73 74 61  72 74 5f 77 69 6d 70 0d  |     start_wimp.|
00001040  05 8c 2f 20 20 43 4d 50  20 20 20 20 20 52 31 2c  |../  CMP     R1,|
00001050  23 26 34 41 20 20 20 5c  20 53 65 72 76 69 63 65  |#&4A   \ Service|
00001060  5f 53 74 61 72 74 65 64  57 69 6d 70 20 3f 0d 05  |_StartedWimp ?..|
00001070  96 1a 20 20 42 45 51 20  20 20 20 20 73 74 61 72  |..  BEQ     star|
00001080  74 65 64 5f 77 69 6d 70  0d 05 a0 29 20 20 43 4d  |ted_wimp...)  CM|
00001090  50 20 20 20 20 20 52 31  2c 23 26 32 37 20 20 20  |P     R1,#&27   |
000010a0  5c 20 53 65 72 76 69 63  65 5f 52 65 73 65 74 20  |\ Service_Reset |
000010b0  3f 0d 05 aa 1b 20 20 42  45 51 20 20 20 20 20 72  |?....  BEQ     r|
000010c0  65 73 65 74 5f 70 72 65  73 73 65 64 0d 05 b4 18  |eset_pressed....|
000010d0  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
000010e0  7b 70 63 7d 0d 05 be 05  5c 0d 05 c8 0f 2e 73 74  |{pc}....\.....st|
000010f0  61 72 74 5f 77 69 6d 70  0d 05 d2 1e 20 20 4c 44  |art_wimp....  LD|
00001100  52 20 20 20 20 20 6c 69  6e 6b 2c 74 61 73 6b 5f  |R     link,task_|
00001110  68 61 6e 64 6c 65 0d 05  dc 15 20 20 43 4d 50 20  |handle....  CMP |
00001120  20 20 20 20 6c 69 6e 6b  2c 23 30 0d 05 e6 15 20  |    link,#0.... |
00001130  20 4d 56 4e 45 51 20 20  20 6c 69 6e 6b 2c 23 30  | MVNEQ   link,#0|
00001140  0d 05 f0 44 20 20 53 54  52 45 51 20 20 20 6c 69  |...D  STREQ   li|
00001150  6e 6b 2c 74 61 73 6b 5f  68 61 6e 64 6c 65 5c 20  |nk,task_handle\ |
00001160  73 65 74 20 74 61 73 6b  20 68 61 6e 64 6c 65 20  |set task handle |
00001170  74 6f 20 2d 31 20 69 66  20 6e 6f 74 20 72 75 6e  |to -1 if not run|
00001180  6e 69 6e 67 0d 05 fa 40  20 20 41 44 52 45 51 20  |ning...@  ADREQ |
00001190  20 20 52 30 2c 63 6f 6d  6d 61 6e 64 5f 74 61 62  |  R0,command_tab|
000011a0  6c 65 5c 20 70 6f 69 6e  74 65 72 20 74 6f 20 63  |le\ pointer to c|
000011b0  6f 6d 6d 61 6e 64 20 74  6f 20 73 74 61 72 74 20  |ommand to start |
000011c0  74 61 73 6b 0d 06 04 29  20 20 ec 51 20 20 20 52  |task...)  .Q   R|
000011d0  31 2c 23 30 20 20 20 20  20 5c 20 63 6c 61 69 6d  |1,#0     \ claim|
000011e0  20 73 65 72 76 69 63 65  20 63 61 6c 6c 0d 06 0e  | service call...|
000011f0  18 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |.  LDMFD   (sp)!|
00001200  2c 7b 70 63 7d 0d 06 18  05 5c 0d 06 22 34 2e 73  |,{pc}....\.."4.s|
00001210  74 61 72 74 65 64 5f 77  69 6d 70 20 20 20 20 20  |tarted_wimp     |
00001220  20 20 5c 20 69 66 20 74  61 73 6b 20 68 61 6e 64  |  \ if task hand|
00001230  6c 65 3d 2d 31 20 74 68  65 6e 20 73 65 74 0d 06  |le=-1 then set..|
00001240  2c 33 20 20 4c 44 52 20  20 20 20 20 6c 69 6e 6b  |,3  LDR     link|
00001250  2c 74 61 73 6b 5f 68 61  6e 64 6c 65 5c 20 74 61  |,task_handle\ ta|
00001260  73 6b 20 68 61 6e 64 6c  65 20 74 6f 20 7a 65 72  |sk handle to zer|
00001270  6f 0d 06 36 15 20 20 43  4d 4e 20 20 20 20 20 6c  |o..6.  CMN     l|
00001280  69 6e 6b 2c 23 31 0d 06  40 12 20 20 ec 51 20 20  |ink,#1..@.  .Q  |
00001290  20 6c 69 6e 6b 2c 23 30  0d 06 4a 1e 20 20 53 54  | link,#0..J.  ST|
000012a0  52 45 51 20 20 20 6c 69  6e 6b 2c 74 61 73 6b 5f  |REQ   link,task_|
000012b0  68 61 6e 64 6c 65 0d 06  54 18 20 20 4c 44 4d 46  |handle..T.  LDMF|
000012c0  44 20 20 20 28 73 70 29  21 2c 7b 70 63 7d 0d 06  |D   (sp)!,{pc}..|
000012d0  5e 05 5c 0d 06 68 31 2e  72 65 73 65 74 5f 70 72  |^.\..h1.reset_pr|
000012e0  65 73 73 65 64 20 20 20  20 20 20 5c 20 73 65 74  |essed      \ set|
000012f0  20 74 61 73 6b 20 68 61  6e 64 6c 65 20 74 6f 20  | task handle to |
00001300  7a 65 72 6f 0d 06 72 15  20 20 4d 4f 56 20 20 20  |zero..r.  MOV   |
00001310  20 20 6c 69 6e 6b 2c 23  30 0d 06 7c 1e 20 20 53  |  link,#0..|.  S|
00001320  54 52 20 20 20 20 20 6c  69 6e 6b 2c 74 61 73 6b  |TR     link,task|
00001330  5f 68 61 6e 64 6c 65 0d  06 86 18 20 20 4c 44 4d  |_handle....  LDM|
00001340  46 44 20 20 20 28 73 70  29 21 2c 7b 70 63 7d 0d  |FD   (sp)!,{pc}.|
00001350  06 90 05 5c 0d 06 9a 11  2e 70 6f 6c 6c 69 6e 67  |...\.....polling|
00001360  5f 6c 6f 6f 70 0d 06 a4  32 20 20 4d 4f 56 20 20  |_loop...2  MOV  |
00001370  20 20 20 52 30 2c 23 25  31 31 30 30 31 31 20 20  |   R0,#%110011  |
00001380  5c 20 6d 61 73 6b 20 6f  75 74 20 72 65 61 73 6f  |\ mask out reaso|
00001390  6e 20 63 6f 64 65 73 0d  06 ae 17 20 20 4d 4f 56  |n codes....  MOV|
000013a0  20 20 20 20 20 52 31 2c  77 6f 72 6b 73 70 0d 06  |     R1,worksp..|
000013b0  b8 1a 20 20 53 57 49 20  20 20 20 20 22 58 57 69  |..  SWI     "XWi|
000013c0  6d 70 5f 50 6f 6c 6c 22  0d 06 c2 34 20 20 43 4d  |mp_Poll"...4  CM|
000013d0  50 20 20 20 20 20 52 30  2c 23 31 37 20 20 20 20  |P     R0,#17    |
000013e0  5c 20 63 68 65 63 6b 20  66 6f 72 20 69 6e 63 6f  |\ check for inco|
000013f0  6d 69 6e 67 20 6d 65 73  73 61 67 65 0d 06 cc 14  |ming message....|
00001400  20 20 43 4d 50 4e 45 20  20 20 52 30 2c 23 31 38  |  CMPNE   R0,#18|
00001410  0d 06 d6 14 20 20 43 4d  50 4e 45 20 20 20 52 30  |....  CMPNE   R0|
00001420  2c 23 31 39 0d 06 e0 42  20 20 42 4e 45 20 20 20  |,#19...B  BNE   |
00001430  20 20 70 6f 6c 6c 69 6e  67 5f 6c 6f 6f 70 20 20  |  polling_loop  |
00001440  5c 20 6b 65 65 70 20 70  6f 6c 6c 69 6e 67 20 75  |\ keep polling u|
00001450  6e 74 69 6c 20 61 20 6d  65 73 73 61 67 65 20 61  |ntil a message a|
00001460  72 72 69 76 65 73 0d 06  ea 05 5c 0d 06 f4 1c 20  |rrives....\.... |
00001470  20 4c 44 52 20 20 20 20  20 52 30 2c 5b 62 6c 6f  | LDR     R0,[blo|
00001480  63 6b 2c 23 31 36 5d 0d  06 fe 31 20 20 43 4d 50  |ck,#16]...1  CMP|
00001490  20 20 20 20 20 52 30 2c  23 30 20 20 20 20 20 5c  |     R0,#0     \|
000014a0  20 4d 65 73 73 61 67 65  5f 51 75 69 74 20 28 74  | Message_Quit (t|
000014b0  79 70 65 20 30 29 20 3f  0d 07 08 18 20 20 42 4c  |ype 0) ?....  BL|
000014c0  45 51 20 20 20 20 63 6c  6f 73 65 5f 64 6f 77 6e  |EQ    close_down|
000014d0  0d 07 12 35 20 20 43 4d  50 20 20 20 20 20 52 30  |...5  CMP     R0|
000014e0  2c 23 35 20 20 20 20 20  5c 20 4d 65 73 73 61 67  |,#5     \ Messag|
000014f0  65 5f 44 61 74 61 4f 70  65 6e 20 28 74 79 70 65  |e_DataOpen (type|
00001500  20 35 29 20 3f 0d 07 1c  1d 20 20 42 4c 45 51 20  | 5) ?....  BLEQ |
00001510  20 20 20 63 6c 69 63 6b  65 64 5f 6f 6e 5f 69 63  |   clicked_on_ic|
00001520  6f 6e 0d 07 26 32 20 20  42 20 20 20 20 20 20 20  |on..&2  B       |
00001530  70 6f 6c 6c 69 6e 67 5f  6c 6f 6f 70 20 5c 20 63  |polling_loop \ c|
00001540  6f 6e 74 69 6e 75 65 20  70 6f 6c 6c 69 6e 67 20  |ontinue polling |
00001550  6c 6f 6f 70 0d 07 30 05  5c 0d 07 3a 0f 2e 63 6c  |loop..0.\..:..cl|
00001560  6f 73 65 5f 64 6f 77 6e  0d 07 44 1a 20 20 53 54  |ose_down..D.  ST|
00001570  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 6c 69 6e  |MFD   (sp)!,{lin|
00001580  6b 7d 0d 07 4e 3a 20 20  4c 44 52 20 20 20 20 20  |k}..N:  LDR     |
00001590  52 30 2c 74 61 73 6b 5f  68 61 6e 64 6c 65 20 20  |R0,task_handle  |
000015a0  5c 20 69 73 20 74 68 65  20 74 61 73 6b 20 68 61  |\ is the task ha|
000015b0  6e 64 6c 65 20 76 61 6c  69 64 20 3f 0d 07 58 13  |ndle valid ?..X.|
000015c0  20 20 43 4d 50 20 20 20  20 20 52 30 2c 23 30 0d  |  CMP     R0,#0.|
000015d0  07 62 1c 20 20 4c 44 52  47 54 20 20 20 52 31 2c  |.b.  LDRGT   R1,|
000015e0  74 61 73 6b 5f 73 74 72  69 6e 67 0d 07 6c 33 20  |task_string..l3 |
000015f0  20 53 57 49 47 54 20 20  20 22 58 57 69 6d 70 5f  | SWIGT   "XWimp_|
00001600  43 6c 6f 73 65 44 6f 77  6e 22 5c 20 71 75 69 74  |CloseDown"\ quit|
00001610  20 57 69 6d 70 20 69 66  20 69 74 20 69 73 0d 07  | Wimp if it is..|
00001620  76 13 20 20 4d 4f 56 47  54 20 20 20 52 30 2c 23  |v.  MOVGT   R0,#|
00001630  30 0d 07 80 37 20 20 53  54 52 47 54 20 20 20 52  |0...7  STRGT   R|
00001640  30 2c 74 61 73 6b 5f 68  61 6e 64 6c 65 20 20 5c  |0,task_handle  \|
00001650  20 73 65 74 20 74 61 73  6b 20 68 61 6e 64 6c 65  | set task handle|
00001660  20 74 6f 20 7a 65 72 6f  0d 07 8a 18 20 20 4c 44  | to zero....  LD|
00001670  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 70 63 7d  |MFD   (sp)!,{pc}|
00001680  0d 07 94 05 5c 0d 07 9e  14 2e 63 6c 69 63 6b 65  |....\.....clicke|
00001690  64 5f 6f 6e 5f 69 63 6f  6e 0d 07 a8 20 20 20 53  |d_on_icon...   S|
000016a0  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 52 30  |TMFD   (sp)!,{R0|
000016b0  2c 52 31 2c 6c 69 6e 6b  7d 0d 07 b2 15 20 20 4d  |,R1,link}....  M|
000016c0  4f 56 20 20 20 20 20 52  30 2c 23 26 38 31 0d 07  |OV     R0,#&81..|
000016d0  bc 3f 20 20 4d 56 4e 20  20 20 20 20 52 31 2c 23  |.?  MVN     R1,#|
000016e0  30 20 20 20 20 5c 20 63  68 65 63 6b 20 77 68 65  |0    \ check whe|
000016f0  74 68 65 72 20 53 68 69  66 74 20 69 73 20 68 65  |ther Shift is he|
00001700  6c 64 20 64 6f 77 6e 20  75 73 69 6e 67 0d 07 c6  |ld down using...|
00001710  2b 20 20 4d 4f 56 20 20  20 20 20 52 32 2c 23 26  |+  MOV     R2,#&|
00001720  46 46 20 20 5c 20 4f 53  5f 42 79 74 65 20 26 38  |FF  \ OS_Byte &8|
00001730  31 2c 2d 31 2c 26 46 46  0d 07 d0 18 20 20 53 57  |1,-1,&FF....  SW|
00001740  49 20 20 20 20 20 22 58  4f 53 5f 42 79 74 65 22  |I     "XOS_Byte"|
00001750  0d 07 da 37 20 20 4c 44  4d 46 44 20 20 20 28 73  |...7  LDMFD   (s|
00001760  70 29 21 2c 7b 52 30 2c  52 31 7d 20 5c 20 72 65  |p)!,{R0,R1} \ re|
00001770  74 72 69 65 76 65 20 52  30 2c 52 31 20 66 72 6f  |trieve R0,R1 fro|
00001780  6d 20 73 74 61 63 6b 0d  07 e4 11 20 20 43 4d 50  |m stack....  CMP|
00001790  20 52 32 2c 23 26 46 46  0d 07 ee 3c 20 20 4c 44  | R2,#&FF...<  LD|
000017a0  4d 4e 45 46 44 20 28 73  70 29 21 2c 7b 70 63 7d  |MNEFD (sp)!,{pc}|
000017b0  20 20 20 20 5c 20 65 78  69 74 20 69 66 20 53 68  |    \ exit if Sh|
000017c0  69 66 74 20 77 61 73 6e  27 74 20 68 65 6c 64 20  |ift wasn't held |
000017d0  64 6f 77 6e 0d 07 f8 05  5c 0d 08 02 45 20 20 4c  |down....\...E  L|
000017e0  44 52 20 20 20 20 20 52  32 2c 5b 62 6c 6f 63 6b  |DR     R2,[block|
000017f0  2c 23 34 30 5d 20 20 20  20 5c 20 63 68 65 63 6b  |,#40]    \ check|
00001800  20 74 68 61 74 20 63 6c  69 63 6b 65 64 20 6f 62  | that clicked ob|
00001810  6a 65 63 74 20 69 73 20  61 20 66 69 6c 65 0d 08  |ject is a file..|
00001820  0c 39 20 20 43 4d 50 20  20 20 20 20 52 32 2c 23  |.9  CMP     R2,#|
00001830  26 31 30 30 30 20 20 20  5c 20 28 66 69 6c 65 74  |&1000   \ (filet|
00001840  79 70 65 20 6e 6f 74 20  26 31 30 30 30 20 6f 72  |ype not &1000 or|
00001850  20 26 32 30 30 30 29 0d  08 16 17 20 20 43 4d 50  | &2000)....  CMP|
00001860  4e 45 20 20 20 52 32 2c  23 26 32 30 30 30 0d 08  |NE   R2,#&2000..|
00001870  20 2e 20 20 4c 44 4d 45  51 46 44 20 28 73 70 29  | .  LDMEQFD (sp)|
00001880  21 2c 7b 70 63 7d 20 20  20 20 5c 20 65 78 69 74  |!,{pc}    \ exit|
00001890  20 69 66 20 69 74 20 69  73 6e 27 74 0d 08 2a 05  | if it isn't..*.|
000018a0  5c 0d 08 34 2c 20 20 4d  4f 56 20 20 20 20 20 52  |\..4,  MOV     R|
000018b0  30 2c 23 32 30 20 20 20  20 20 20 5c 20 61 63 6b  |0,#20      \ ack|
000018c0  6e 6f 77 6c 65 64 67 65  20 6c 6f 61 64 0d 08 3e  |nowledge load..>|
000018d0  18 20 20 53 54 52 20 20  20 20 20 52 30 2c 5b 62  |.  STR     R0,[b|
000018e0  6c 6f 63 6b 5d 0d 08 48  1b 20 20 4c 44 52 20 20  |lock]..H.  LDR  |
000018f0  20 20 20 52 30 2c 5b 62  6c 6f 63 6b 2c 23 38 5d  |   R0,[block,#8]|
00001900  0d 08 52 3d 20 20 53 54  52 20 20 20 20 20 52 30  |..R=  STR     R0|
00001910  2c 5b 62 6c 6f 63 6b 2c  23 31 32 5d 20 20 20 20  |,[block,#12]    |
00001920  5c 20 63 6f 70 79 20 27  6d 79 5f 72 65 66 27 20  |\ copy 'my_ref' |
00001930  74 6f 20 27 79 6f 75 72  5f 72 65 66 27 0d 08 5c  |to 'your_ref'..\|
00001940  13 20 20 4d 4f 56 20 20  20 20 20 52 30 2c 23 34  |.  MOV     R0,#4|
00001950  0d 08 66 35 20 20 53 54  52 20 20 20 20 20 52 30  |..f5  STR     R0|
00001960  2c 5b 62 6c 6f 63 6b 2c  23 31 36 5d 20 20 20 20  |,[block,#16]    |
00001970  5c 20 4d 65 73 73 61 67  65 5f 44 61 74 61 4c 6f  |\ Message_DataLo|
00001980  61 64 41 63 6b 0d 08 70  14 20 20 4d 4f 56 20 20  |adAck..p.  MOV  |
00001990  20 20 20 52 30 2c 23 31  37 0d 08 7a 2a 20 20 4d  |   R0,#17..z*  M|
000019a0  4f 56 20 20 20 20 20 52  32 2c 23 30 20 20 20 20  |OV     R2,#0    |
000019b0  5c 20 62 72 6f 61 64 63  61 73 74 20 6d 65 73 73  |\ broadcast mess|
000019c0  61 67 65 0d 08 84 21 20  20 53 57 49 20 20 20 20  |age...!  SWI    |
000019d0  20 22 58 57 69 6d 70 5f  53 65 6e 64 4d 65 73 73  | "XWimp_SendMess|
000019e0  61 67 65 22 0d 08 8e 05  5c 0d 08 98 40 20 20 4d  |age"....\...@  M|
000019f0  4f 56 20 20 20 20 20 52  30 2c 23 97 22 4c 22 20  |OV     R0,#."L" |
00001a00  20 20 20 20 5c 20 69 6e  73 65 72 74 20 74 65 78  |    \ insert tex|
00001a10  74 20 27 4c 6f 61 64 20  27 20 62 65 66 6f 72 65  |t 'Load ' before|
00001a20  20 66 69 6c 65 6e 61 6d  65 0d 08 a2 1c 20 20 53  | filename....  S|
00001a30  54 52 42 20 20 20 20 52  30 2c 5b 62 6c 6f 63 6b  |TRB    R0,[block|
00001a40  2c 23 33 39 5d 0d 08 ac  1a 20 20 4c 44 52 20 20  |,#39]....  LDR  |
00001a50  20 20 20 52 30 2c 6c 6f  61 64 5f 74 65 78 74 0d  |   R0,load_text.|
00001a60  08 b6 1c 20 20 53 54 52  20 20 20 20 20 52 30 2c  |...  STR     R0,|
00001a70  5b 62 6c 6f 63 6b 2c 23  34 30 5d 0d 08 c0 05 5c  |[block,#40]....\|
00001a80  0d 08 ca 49 20 20 41 44  44 20 20 20 20 20 52 30  |...I  ADD     R0|
00001a90  2c 62 6c 6f 63 6b 2c 23  33 39 20 20 20 5c 20 73  |,block,#39   \ s|
00001aa0  74 61 72 74 20 6e 65 77  20 57 69 6d 70 20 74 61  |tart new Wimp ta|
00001ab0  73 6b 20 77 69 74 68 20  27 4c 6f 61 64 20 3c 66  |sk with 'Load <f|
00001ac0  69 6c 65 6e 61 6d 65 3e  27 0d 08 d4 1e 20 20 53  |ilename>'....  S|
00001ad0  57 49 20 20 20 20 20 22  57 69 6d 70 5f 53 74 61  |WI     "Wimp_Sta|
00001ae0  72 74 54 61 73 6b 22 0d  08 de 27 20 20 4c 44 4d  |rtTask"...'  LDM|
00001af0  46 44 20 20 20 28 73 70  29 21 2c 7b 70 63 7d 20  |FD   (sp)!,{pc} |
00001b00  20 20 5c 20 61 6e 64 20  72 65 74 75 72 6e 0d 08  |  \ and return..|
00001b10  e8 05 5c 0d 08 f2 3d 2e  6c 6f 61 64 5f 74 65 78  |..\...=.load_tex|
00001b20  74 20 45 51 55 53 20 22  6f 61 64 20 22 20 20 20  |t EQUS "oad "   |
00001b30  5c 20 74 65 78 74 20 74  6f 20 69 6e 73 65 72 74  |\ text to insert|
00001b40  20 62 65 66 6f 72 65 20  66 69 6c 65 6e 61 6d 65  | before filename|
00001b50  0d 08 fc 09 5d 3a ed 3a  e1 0d ff                 |....]:.:...|
00001b5b