Home » Archimedes archive » Acorn User » AU 1995-01.adf » !StarInfo_StarInfo » Burns/StringModS

Burns/StringModS

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 1995-01.adf » !StarInfo_StarInfo
Filename: Burns/StringModS
Read OK:
File size: 2C5A bytes
Load address: 0000
Exec address: 0000
File contents
   10REM String Utility Module
   20REM By The Flying Twig
   30REM 17/02/94
   40:
   50DIM code% &1024
   60ON ERROR REPORT:PRINT" at Line ";ERL:END
   70FOR pass%=4TO6 STEP 2
   80P%=0: O%=code%
   90[OPT pass%
  100.header
  110EQUD       &00                ;start
  120EQUD       init               ;initialisation
  130EQUD       &00                ;Finalisation
  140EQUD       &00                ;Service call
  150EQUD       title              ;title
  160EQUD       help               ;help
  170EQUD       &00                ;commands
  180EQUD       &C0080             ;SWIs
  190EQUD       swientry
  200EQUD       switable
  210EQUD       &00
  220
  230ALIGN
  240
  250.init
  260STMFD      R13!,{R0-R3,R14}
  270 LDR       R0,[R12]
  280 CMP       R0,#0
  290 LDMNEFD   R13!,{R0-R3,PC}
  300 MOV       R0,#6
  310 MOV       R3,#&800
  320 SWI       "OS_Module"
  330 STR       R2,[R12]
  340LDMFD      R13!,{R0-R3,PC}
  350
  360.title
  370EQUS       "StringUtils"
  380EQUB       0
  390ALIGN
  400
  410.help
  420EQUS       "String Utility"
  430EQUB       9
  440EQUS       "1.20 (17 Feb 1994)"
  450EQUB       0
  460ALIGN
  470
  480.swientry
  490LDR        R12,[R12]
  500CMP        R11,#(endoftable-jumptable)/4
  510ADDCC      PC,PC,R11,LSL#2
  520B          unknownSWIerror
  530.jumptable
  540B          left
  550B          right
  560B          mid
  570B          move
  580B          instr
  590B          len
  600B          val
  610B          get
  620B          put
  630B          lower
  640B          upper
  650.endoftable
  660.unknownSWIerror
  670ADR        R0,errMessage
  680ORRS       PC,R14,#2^29
  690.errMessage
  700EQUD       &1E6
  710EQUS       "Unknown StringUtils Operation"
  720EQUB       0
  730ALIGN
  740
  750.switable
  760EQUS       "String"
  770EQUB       0
  780EQUS       "Left$"
  790EQUB       0
  800EQUS       "Right$"
  810EQUB       0
  820EQUS       "Mid$"
  830EQUB       0
  840EQUS       "Move$"
  850EQUB       0
  860EQUS       "Instr"
  870EQUB       0
  880EQUS       "Len"
  890EQUB       0
  900EQUS       "Val"
  910EQUB       0
  920EQUS       "Get$#"
  930EQUB       0
  940EQUS       "Put$#"
  950EQUB       0
  960EQUS       "ToLowerCase"
  970EQUB       0
  980EQUS       "ToUpperCase"
  990EQUB       0
 1000EQUB       0
 1010
 1020.left
 1030;On Entry
 1040;R0=Pointer To String
 1050;R1=Pointer To Buffer
 1060;R2=Terminating Character
 1070;R3=No. of Characters to transfer
 1080;
 1090;On Exit
 1100;Buffer at R1 contains LEFT$ and terminating character
 1110
 1120STMFD      R13!,{R4-R12,R14}
 1130 MOV       R4,#0
 1140 .leftloop
 1150  LDRB     R5,[R0,R4]
 1160  STRB     R5,[R1,R4]
 1170  ADD      R4,R4,#1
 1180  CMP      R5,R2
 1190  BEQ      leftfinish
 1200  CMP      R4,R3
 1210 BNE       leftloop
 1220 STRB      R2,[R1,R4]
 1230 .leftfinish
 1240 LDMFD     R13!,{R4-R12,R14}
 1250 BICS      PC,R14,#%1111<<28
 1260
 1270.right
 1280;On Entry
 1290;R0=Pointer To String
 1300;R1=Pointer To Buffer
 1310;R2=Terminating Character
 1320;R3=No. of Characters transfer
 1330;
 1340;On Exit
 1350;Buffer at R1 contains RIGHT$ and terminating character
 1360
 1370STMFD      R13!,{R4-R12,R14}
 1380 MOV       R4,#0
 1390 .rightloop1
 1400  LDRB     R5,[R0,R4]
 1410  CMP      R5,R2
 1420  ADDNE    R4,R4,#1
 1430 BNE       rightloop1
 1440  SUB      R4,R4,R3
 1450  MOV      R6,#0
 1460 .rightloop2
 1470  LDRB     R5,[R0,R4]
 1480  STRB     R5,[R1,R6]
 1490  ADD      R4,R4,#1
 1500  ADD      R6,R6,#1
 1510  CMP      R5,R2
 1520 BNE       rightloop2
 1530 MOV       R4,R15
 1540 BIC       R4,R4,#1<<28
 1550 TEQP      R15,R4
 1560LDMFD      R13!,{R4-R12,R14}
 1570BICS       PC,R14,#%1<<28
 1580
 1590.mid
 1600;On Entry
 1610;R0=Pointer To String
 1620;R1=Pointer To Buffer
 1630;R2=Terminating Character
 1640;R3=No. of Characters transfer
 1650;R4=Character to start transfer from
 1660;
 1670;On Exit
 1680;Buffer at R1 contains MID$ and terminating character
 1690
 1700STMFD      R13!,{R5-R12,R14}
 1710MOV        R7,R4
 1720MOV        R8,#0
 1730 .midloop
 1740  LDRB     R6,[R0,R7]
 1750  STRB     R6,[R1,R8]
 1760   ADD     R7,R7,#1
 1770   ADD     R8,R8,#1
 1780  CMP      R6,R2
 1790   BEQ     rightfinish
 1800  CMP      R8,R3
 1810   BNE     midloop
 1820 STRB      R2,[R1,R8]
 1830 .rightfinish
 1840 MOV       R5,R15
 1850LDMFD      R13!,{R5-R12,R14}
 1860BICS       PC,R14,#%1<<28
 1870
 1880.move
 1890;On Entry
 1900;R0=Pointer To String
 1910;R1=Pointer To Buffer
 1920;R2=Terminating Character
 1930;
 1940;On Exit
 1950;Buffer at R1 contains String
 1960
 1970STMFD      R13!,{R3-R12,R14}
 1980 MOV       R4,#0
 1990 .moveloop
 2000  LDRB     R5,[R0,R4]
 2010  STRB     R5,[R1,R4]
 2020  ADD      R4,R4,#1
 2030  CMP      R5,R2
 2040 BNE       moveloop
 2050LDMFD      R13!,{R3-R12,R14}
 2060BICS       PC,R14,#%1<<28
 2070
 2080.instr
 2090;On Entry
 2100;R0=Pointer To 1st String
 2110;R1=Pointer To 2nd String
 2120;R2=Terminating Character
 2130;R3=Character To start search from
 2140;
 2150;On Exit
 2160;R3=Index of 2nd String Within 1st, -1 if not found
 2170
 2180STMFD      R13!,{R1-R2,R4-R12,R14}
 2190 MOV       R8,R3
 2200 MOV       R4,#0
 2210 .instrloop1
 2220  LDRB     R5,[R1,R4]
 2230  CMP      R5,R2
 2240  MOVEQ    R3,R8
 2250 BEQ      instrfinish
 2260  LDRB     R6,[R0,R3]
 2270  CMP      R5,R6
 2280  ADDEQ    R4,R4,#1
 2290  ADDEQ    R3,R3,#1
 2300 BEQ       instrloop1
 2310  CMP      R6,R2
 2320  MVNEQ    R3,#0
 2330 BEQ       instrfinish
 2340  MOV      R4,#0
 2350  ADD      R3,R3,#1
 2360  MOV      R8,R3
 2370 B         instrloop1
 2380.instrfinish
 2390LDMFD      R13!,{R1-R2,R4-R12,R14}
 2400BICS       PC,R14,#%1<<28
 2410
 2420.len
 2430;On Entry
 2440;R0=Pointer To String
 2450;R1=Terminating Character
 2460;
 2470;On Exit
 2480;R1 contains length String
 2490
 2500STMFD      R13!,{R2-R12,R14}
 2510 MOV       R4,#0
 2520 .lenloop
 2530  LDRB     R5,[R0,R4]
 2540  ADD      R4,R4,#1
 2550  CMP      R5,R1
 2560 BNE       lenloop
 2570 SUB       R1,R4,#1
 2580LDMFD      R13!,{R2-R12,R14}
 2590BICS       PC,R14,#%1<<28
 2600
 2610.val
 2620;On Entry
 2630;R0=Pointer To String
 2640;R1=Terminating Character
 2650;
 2660;On Exit
 2670;R1=Value of string
 2680STMFD      R13!,{R2-R12,R14}
 2690 MOV       R4,#0
 2700 MOV       R8,#1
 2710 .valloop1
 2720  LDRB     R5,[R0,R4]
 2730  CMP      R5,R1
 2740  ADDNE    R4,R4,#1
 2750 BNE       valloop1
 2760 MOV       R1,#0
 2770 MOV       R6,#0
 2780 MOV       R7,R4
 2790 SUB       R4,R4,#1
 2800 .valloop2
 2810  LDRB     R5,[R0,R4]
 2820  SUB      R5,R5,#&30
 2830  CMP      R5,#0
 2840  MOVLT    R1,#0
 2850  BLT      valfinish
 2860  CMP      R5,#9
 2870  MOVGT    R1,#0
 2880  BGT      valfinish
 2890  MUL      R9,R8,R5
 2900  ADD      R1,R1,R9
 2910  MOV      R8,R8,LSL #1
 2920  ADD      R8,R8,R8,LSL #2
 2930  SUB      R4,R4,#1
 2940  ADD      R6,R6,#1
 2950  CMP      R6,R7
 2960 BNE       valloop2
 2970.valfinish
 2980LDMFD      R13!,{R2-R12,R14}
 2990BICS       PC,R14,#%1<<28
 3000
 3010.get
 3020;On Entry
 3030;R0=Pointer to buffer
 3040;R1=FileHandle
 3050;R2=Length of Buffer
 3060;R3=Terminating character
 3070;R4=Direction to load
 3080;                    0 - load next string
 3090;                    1 - load last string
 3100;On Exit
 3110;Buffer at R0 contains record
 3120;R2=Pointer to first free byte in buffer
 3130STMFD      R13!,{R0-R1,R3-R11,R14}
 3140 ADD       R2,R2,R0
 3150 MOV       R5,R0
 3160 CMP       R4,#1
 3170 BNE       getloop1
 3180  MOV      R4,R0
 3190  MOV      R6,R2
 3200  MOV      R0,#0
 3210  SWI      "XOS_Args"
 3220  SUB      R2,R2,#2
 3230  CMP      R2,#0
 3240  BLT      getbof
 3250  MOV      R0,#1
 3260  SWI      "XOS_Args"
 3270 B         getloop2
 3280
 3290 .getloop1
 3300 SWI       "XOS_BGet"
 3310 BVS       geteof
 3320 STRB      R0,[R5],#1
 3330 MOVCS     R2,R5
 3340 LDMCSFD   R13!,{R0-R1,R3-R11,R14}
 3350 BICCS     R14,R14,#%1111<<28
 3360 ORRCS     R14,R14,#%0010<<28
 3370 MOVCSS    PC,R14
 3380 CMP       R0,R3
 3390 MOVEQ     R2,R5
 3400 LDMEQFD   R13!,{R0-R1,R3-R11,R14}
 3410 BICEQ     R14,R14,#%1111<<28
 3420 MOVEQS    PC,R14
 3430 CMP       R5,R2
 3440 BEQ       getoverflow
 3450 BNE       getloop1
 3460
 3470 .getloop2
 3480 SWI       "XOS_BGet"
 3490 CMP       R0,R3
 3500 ADDEQ     R11,R2,#1
 3510 SUBEQ     R2,R2,#1
 3520 MOVEQ     R0,#1
 3530 SWIEQ     "XOS_Args"
 3540 STMEQFD   R13!,{R3}
 3550 BEQ       getloop3
 3560 SUB       R2,R2,#1
 3570 CMP       R2,#0
 3580 MOVLT     R2,#0
 3590 MOV       R0,#1
 3600 BLT       getfirstrec
 3610 SWI       "XOS_Args"
 3620 B       getloop2
 3630
 3640.getfirstrec
 3650 SWI      "XOS_Args"
 3660 LDMFD    R13!,{R0-R1,R3-R11,R14}
 3670 BIC      R14,R14,#%1111<<28
 3680 ORRS     PC,R14,#%0010<<28
 3690
 3700 .getloop3
 3710 SWI       "XOS_BGet"
 3720 CMP       R0,R3
 3730 MOVEQ     R12,#%0000<<28
 3740 BEQ       getstore
 3750 STMFD     R13!,{R0}
 3760 ADD       R5,R5,#1
 3770 CMP       R5,R6
 3780 BGT       getrevoverflow
 3790 SUB       R2,R2,#1
 3800 CMP       R2,#0
 3810 MOVLT     R2,#0
 3820 MOV       R0,#1
 3830 SWI       "XOS_Args"
 3840 BGE       getloop3
 3850 MOV       R12,#%0000<<28
 3860
 3870 .getstore
 3880 LDMFD     R13!,{R0}
 3890 STRB      R0,[R4],#1
 3900 CMP       R0,R3
 3910 BNE       getstore
 3920 MOV       R2,R11
 3930 MOV       R0,#1
 3940 SWI       "XOS_Args"
 3950 MOV       R2,R4
 3960 LDMFD     R13!,{R0-R1,R3-R11,R14}
 3970 BIC       R14,R14,#%1111<<28
 3980 ORRS      R15,R14,R12
 3990
 4000 .getrevoverflow
 4010 LDMFD     R13!,{R0}
 4020 STRB      R0,[R4],#1
 4030 CMP       R0,R3
 4040 BNE       getrevoverflow
 4050 BEQ       getoverflow
 4060
 4070.getoverflow
 4080 ADR       R0,getoverflowerror
 4090 LDMFD     R13!,{R0-R1,R3-R11,R14}
 4100 BIC       R14,R14,#%1111<<28
 4110 ORRS      R15,R14,#%0001<<28
 4120
 4130 .getoverflowerror
 4140 EQUD       &1E6
 4150 EQUS       "Buffer Overflow"
 4160 EQUB       0
 4170 ALIGN
 4180
 4190.getbof
 4200 ADR       R0,getboferror
 4210 MOV       R4,#0
 4220 LDMFD     R13!,{R0-R1,R3-R11,R14}
 4230 BIC       R14,R14,#%1111<<28
 4240 ORRS      R15,R14,#%0001<<28
 4250
 4260 .getboferror
 4270 EQUD       &1E6
 4280 EQUS       "Start Of File"
 4290 EQUB       0
 4300 ALIGN
 4310
 4320 .geteof
 4330 ADR       R0,geteoferror
 4340 LDMFD     R13!,{R0-R1,R3-R11,R14}
 4350 BIC       R14,R14,#%1111<<28
 4360 ORRS      R15,R14,#%0001<<28
 4370
 4380
 4390 .geteoferror
 4400 EQUD       &1E6
 4410 EQUS       "End Of File"
 4420 EQUB       0
 4430 ALIGN
 4440
 4450
 4460.put
 4470;On Entry
 4480;R0=Pointer to string
 4490;R1=FileHandle
 4500;R2=Terminating character
 4510;
 4520;On Exit
 4530;string at R0 is written to file at R1
 4540
 4550STMFD       R13!,{R0-R12,R14}
 4560 MOV        R4,R1
 4570 MOV        R1,R2
 4580 BL         len
 4590 ADD        R3,R1,#1
 4600 MOV        R1,R4
 4610 MOV        R2,R0
 4620 MOV        R0,#2
 4630 SWI        "XOS_GBPB"
 4640LDMFD       R13!,{R0-R12,R14}
 4650BIC         R15,R14,#%1111<<28
 4660
 4670.lower
 4680;On Entry
 4690;R0=pointer to string
 4700;R1=terminating character
 4710;
 4720;On Exit
 4730;String at R0 is in lower case
 4740
 4750STMFD       R13!,{R0-R3,R14}
 4760.lowerloop
 4770LDRB        R3,[R0]            ;R3=next character
 4780CMP         R3,#ASC("A")
 4790BLT         lowernext
 4800CMP         R3,#ASC("Z")
 4810BHI         lowernext
 4820ORR         R3,R3,#&20         ;Do the business
 4830STRB        R3,[R0]            ;Store character back in string
 4840.lowernext
 4850CMP         R3,R1              ;check for end of string
 4860ADDNE       R0,R0,#1
 4870BNE         lowerloop
 4880LDMFD       R13!,{R0-R3,R14}
 4890BIC         R15,R14,#%1<<28
 4900
 4910.upper
 4920;On Entry
 4930;R0=pointer to string
 4940;R1=terminating character
 4950;
 4960;On Exit
 4970;String at R0 is in upper case
 4980
 4990STMFD       R13!,{R0-R3,R14}
 5000.upperloop
 5010LDRB        R3,[R0]            ;R3=next character
 5020CMP         R3,#ASC("a")
 5030BLT         uppernext
 5040CMP         R3,#ASC("z")
 5050BHI         uppernext
 5060AND         R3,R3,#&DF         ;Do the business
 5070STRB        R3,[R0]            ;Store character back in string
 5080.uppernext
 5090CMP         R3,R1              ;check for end of string
 5100ADDNE       R0,R0,#1
 5110BNE         upperloop
 5120LDMFD       R13!,{R0-R3,R14}
 5130BIC         R15,R14,#%1<<28
 5140
 5150
 5160
 5170]
 5180NEXT
 5190OSCLI "SAVE StringUtil "+STR$~(code%)+" "+STR$~(O%)
 5200*SETTYPE StringUtil Module

� String Utility Module
� By The Flying Twig
� 17/02/94
(:
2� code% &1024
<� � �:�" at Line ";�:�
F� pass%=4�6 � 2
PP%=0: O%=code%
Z[OPT pass%
d.header
n(EQUD       &00                ;start
x1EQUD       init               ;initialisation
�/EQUD       &00                ;Finalisation
�/EQUD       &00                ;Service call
�(EQUD       title              ;title
�'EQUD       help               ;help
�+EQUD       &00                ;commands
�'EQUD       &C0080             ;SWIs
�EQUD       swientry
�EQUD       switable
�EQUD       &00
�
�	ALIGN
�
�	.init
STMFD      R13!,{R0-R3,R14}
 LDR       R0,[R12]
 CMP       R0,#0
" LDMNEFD   R13!,{R0-R3,PC}
, MOV       R0,#6
6 MOV       R3,#&800
@ SWI       "OS_Module"
J STR       R2,[R12]
TLDMFD      R13!,{R0-R3,PC}
^
h
.title
rEQUS       "StringUtils"
|EQUB       0
�	ALIGN
�
�	.help
�EQUS       "String Utility"
�EQUB       9
�#EQUS       "1.20 (17 Feb 1994)"
�EQUB       0
�	ALIGN
�
�
.swientry
�LDR        R12,[R12]
�,CMP        R11,#(endoftable-jumptable)/4
�ADDCC      PC,PC,R11,LSL#2
B          unknownSWIerror
.jumptable
B          left
&B          right
0B          mid
:B          move
DB          instr
NB          len
XB          val
bB          get
lB          put
vB          lower
�B          upper
�.endoftable
�.unknownSWIerror
�ADR        R0,errMessage
��RS       PC,R14,#2^29
�.errMessage
�EQUD       &1E6
�.EQUS       "Unknown StringUtils Operation"
�EQUB       0
�	ALIGN
�
�
.switable
�EQUS       "String"
EQUB       0
EQUS       "Left$"
EQUB       0
 EQUS       "Right$"
*EQUB       0
4EQUS       "Mid$"
>EQUB       0
HEQUS       "Move$"
REQUB       0
\EQUS       "Instr"
fEQUB       0
pEQUS       "Len"
zEQUB       0
�EQUS       "Val"
�EQUB       0
�EQUS       "Get$#"
�EQUB       0
�EQUS       "Put$#"
�EQUB       0
�EQUS       "ToLowerCase"
�EQUB       0
�EQUS       "ToUpperCase"
�EQUB       0
�EQUB       0
�
�	.left

;On Entry
;R0=Pointer To String
;R1=Pointer To Buffer
$;R2=Terminating Character
.%;R3=No. of Characters to transfer
8;
B;On Exit
L:;Buffer at R1 contains LEFT$ and terminating character
V
` STMFD      R13!,{R4-R12,R14}
j MOV       R4,#0
t .leftloop
~  LDRB     R5,[R0,R4]
�  STRB     R5,[R1,R4]
�  ADD      R4,R4,#1
�  CMP      R5,R2
�  BEQ      leftfinish
�  CMP      R4,R3
� BNE       leftloop
� STRB      R2,[R1,R4]
� .leftfinish
�  LDMFD     R13!,{R4-R12,R14}
�  BICS      PC,R14,#%1111<<28
�
�
.right

;On Entry

;R0=Pointer To String
;R1=Pointer To Buffer
;R2=Terminating Character
(";R3=No. of Characters transfer
2;
<;On Exit
F;;Buffer at R1 contains RIGHT$ and terminating character
P
Z STMFD      R13!,{R4-R12,R14}
d MOV       R4,#0
n .rightloop1
x  LDRB     R5,[R0,R4]
�  CMP      R5,R2
�  ADDNE    R4,R4,#1
� BNE       rightloop1
�  SUB      R4,R4,R3
�  MOV      R6,#0
� .rightloop2
�  LDRB     R5,[R0,R4]
�  STRB     R5,[R1,R6]
�  ADD      R4,R4,#1
�  ADD      R6,R6,#1
�  CMP      R5,R2
� BNE       rightloop2
� MOV       R4,R15
 BIC       R4,R4,#1<<28
 TEQP      R15,R4
 LDMFD      R13!,{R4-R12,R14}
"BICS       PC,R14,#%1<<28
,
6.mid
@
;On Entry
J;R0=Pointer To String
T;R1=Pointer To Buffer
^;R2=Terminating Character
h";R3=No. of Characters transfer
r(;R4=Character to start transfer from
|;
�;On Exit
�9;Buffer at R1 contains MID$ and terminating character
�
� STMFD      R13!,{R5-R12,R14}
�MOV        R7,R4
�MOV        R8,#0
�
 .midloop
�  LDRB     R6,[R0,R7]
�  STRB     R6,[R1,R8]
�   ADD     R7,R7,#1
�   ADD     R8,R8,#1
�  CMP      R6,R2
�   BEQ     rightfinish
  CMP      R8,R3
   BNE     midloop
 STRB      R2,[R1,R8]
& .rightfinish
0 MOV       R5,R15
: LDMFD      R13!,{R5-R12,R14}
DBICS       PC,R14,#%1<<28
N
X	.move
b
;On Entry
l;R0=Pointer To String
v;R1=Pointer To Buffer
�;R2=Terminating Character
�;
�;On Exit
�!;Buffer at R1 contains String
�
� STMFD      R13!,{R3-R12,R14}
� MOV       R4,#0
� .moveloop
�  LDRB     R5,[R0,R4]
�  STRB     R5,[R1,R4]
�  ADD      R4,R4,#1
�  CMP      R5,R2
� BNE       moveloop
 LDMFD      R13!,{R3-R12,R14}
BICS       PC,R14,#%1<<28

 
.instr
*
;On Entry
4;R0=Pointer To 1st String
>;R1=Pointer To 2nd String
H;R2=Terminating Character
R&;R3=Character To start search from
\;
f;On Exit
p7;R3=Index of 2nd String Within 1st, -1 if not found
z
�&STMFD      R13!,{R1-R2,R4-R12,R14}
� MOV       R8,R3
� MOV       R4,#0
� .instrloop1
�  LDRB     R5,[R1,R4]
�  CMP      R5,R2
�  �Q    R3,R8
� BEQ      instrfinish
�  LDRB     R6,[R0,R3]
�  CMP      R5,R6
�  ADDEQ    R4,R4,#1
�  ADDEQ    R3,R3,#1
� BEQ       instrloop1
	  CMP      R6,R2
	  MVNEQ    R3,#0
	 BEQ       instrfinish
	$  MOV      R4,#0
	.  ADD      R3,R3,#1
	8  MOV      R8,R3
	B B         instrloop1
	L.instrfinish
	V&LDMFD      R13!,{R1-R2,R4-R12,R14}
	`BICS       PC,R14,#%1<<28
	j
	t.len
	~
;On Entry
	�;R0=Pointer To String
	�;R1=Terminating Character
	�;
	�;On Exit
	�;R1 contains length String
	�
	� STMFD      R13!,{R2-R12,R14}
	� MOV       R4,#0
	�
 .lenloop
	�  LDRB     R5,[R0,R4]
	�  ADD      R4,R4,#1
	�  CMP      R5,R1
 BNE       lenloop

 SUB       R1,R4,#1
 LDMFD      R13!,{R2-R12,R14}
BICS       PC,R14,#%1<<28
(
2.val
<
;On Entry
F;R0=Pointer To String
P;R1=Terminating Character
Z;
d;On Exit
n;R1=Value of string
x STMFD      R13!,{R2-R12,R14}
� MOV       R4,#0
� MOV       R8,#1
� .valloop1
�  LDRB     R5,[R0,R4]
�  CMP      R5,R1
�  ADDNE    R4,R4,#1
� BNE       valloop1
� MOV       R1,#0
� MOV       R6,#0
� MOV       R7,R4
� SUB       R4,R4,#1
� .valloop2
�  LDRB     R5,[R0,R4]
  SUB      R5,R5,#&30
  CMP      R5,#0
  MOVLT    R1,#0
"  BLT      valfinish
,  CMP      R5,#9
6  MOVGT    R1,#0
@  BGT      valfinish
J  MUL      R9,R8,R5
T  ADD      R1,R1,R9
^  MOV      R8,R8,LSL #1
h  ADD      R8,R8,R8,LSL #2
r  SUB      R4,R4,#1
|  ADD      R6,R6,#1
�  CMP      R6,R7
� BNE       valloop2
�.valfinish
� LDMFD      R13!,{R2-R12,R14}
�BICS       PC,R14,#%1<<28
�
�.get
�
;On Entry
�;R0=Pointer to buffer
�;R1=FileHandle
�;R2=Length of Buffer
�;R3=Terminating character
�;R4=Direction to load
-;                    0 - load next string
-;                    1 - load last string
;On Exit
&!;Buffer at R0 contains record
0,;R2=Pointer to first free byte in buffer
:&STMFD      R13!,{R0-R1,R3-R11,R14}
D ADD       R2,R2,R0
N MOV       R5,R0
X CMP       R4,#1
b BNE       getloop1
l  MOV      R4,R0
v  MOV      R6,R2
�  MOV      R0,#0
�  SWI      "XOS_Args"
�  SUB      R2,R2,#2
�  CMP      R2,#0
�  BLT      getbof
�  MOV      R0,#1
�  SWI      "XOS_Args"
� B         getloop2
�
� .getloop1
� SWI       "XOS_BGet"
� BVS       geteof
� STRB      R0,[R5],#1

 MOVCS     R2,R5

& LDMCSFD   R13!,{R0-R1,R3-R11,R14}

! BICCS     R14,R14,#%1111<<28

   �RCS     R14,R14,#%0010<<28

* MOVCSS    PC,R14

4 CMP       R0,R3

> �Q     R2,R5

H& LDMEQFD   R13!,{R0-R1,R3-R11,R14}

R! BICEQ     R14,R14,#%1111<<28

\ �QS    PC,R14

f CMP       R5,R2

p BEQ       getoverflow

z BNE       getloop1

�

� .getloop2

� SWI       "XOS_BGet"

� CMP       R0,R3

� ADDEQ     R11,R2,#1

� SUBEQ     R2,R2,#1

� �Q     R0,#1

� SWIEQ     "XOS_Args"

� STMEQFD   R13!,{R3}

� BEQ       getloop3

� SUB       R2,R2,#1

� CMP       R2,#0

� MOVLT     R2,#0
 MOV       R0,#1
 BLT       getfirstrec
 SWI       "XOS_Args"
$ B       getloop2
.
8.getfirstrec
B SWI      "XOS_Args"
L% LDMFD    R13!,{R0-R1,R3-R11,R14}
V  BIC      R14,R14,#%1111<<28
` �RS     PC,R14,#%0010<<28
j
t .getloop3
~ SWI       "XOS_BGet"
� CMP       R0,R3
� �Q     R12,#%0000<<28
� BEQ       getstore
� STMFD     R13!,{R0}
� ADD       R5,R5,#1
� CMP       R5,R6
� BGT       getrevoverflow
� SUB       R2,R2,#1
� CMP       R2,#0
� MOVLT     R2,#0
� MOV       R0,#1
� SWI       "XOS_Args"
 BGE       getloop3

 MOV       R12,#%0000<<28

 .getstore
( LDMFD     R13!,{R0}
2 STRB      R0,[R4],#1
< CMP       R0,R3
F BNE       getstore
P MOV       R2,R11
Z MOV       R0,#1
d SWI       "XOS_Args"
n MOV       R2,R4
x& LDMFD     R13!,{R0-R1,R3-R11,R14}
�! BIC       R14,R14,#%1111<<28
� �RS      R15,R14,R12
�
� .getrevoverflow
� LDMFD     R13!,{R0}
� STRB      R0,[R4],#1
� CMP       R0,R3
� BNE       getrevoverflow
� BEQ       getoverflow
�
�.getoverflow
�" ADR       R0,getoverflowerror
�& LDMFD     R13!,{R0-R1,R3-R11,R14}
! BIC       R14,R14,#%1111<<28
  �RS      R15,R14,#%0001<<28

" .getoverflowerror
, EQUD       &1E6
6! EQUS       "Buffer Overflow"
@ EQUB       0
J
 ALIGN
T
^.getbof
h ADR       R0,getboferror
r MOV       R4,#0
|& LDMFD     R13!,{R0-R1,R3-R11,R14}
�! BIC       R14,R14,#%1111<<28
�  �RS      R15,R14,#%0001<<28
�
� .getboferror
� EQUD       &1E6
� EQUS       "Start Of File"
� EQUB       0
�
 ALIGN
�
� .geteof
� ADR       R0,geteoferror
�& LDMFD     R13!,{R0-R1,R3-R11,R14}
�! BIC       R14,R14,#%1111<<28
  �RS      R15,R14,#%0001<<28


& .geteoferror
0 EQUD       &1E6
: EQUS       "End Of File"
D EQUB       0
N
 ALIGN
X
b
l.put
v
;On Entry
�;R0=Pointer to string
�;R1=FileHandle
�;R2=Terminating character
�;
�;On Exit
�*;string at R0 is written to file at R1
�
�!STMFD       R13!,{R0-R12,R14}
� MOV        R4,R1
� MOV        R1,R2
� BL         len
� ADD        R3,R1,#1
� MOV        R1,R4
 MOV        R2,R0
 MOV        R0,#2
 SWI        "XOS_GBPB"
 !LDMFD       R13!,{R0-R12,R14}
*"BIC         R15,R14,#%1111<<28
4
>
.lower
H
;On Entry
R;R0=pointer to string
\;R1=terminating character
f;
p;On Exit
z";String at R0 is in lower case
�
� STMFD       R13!,{R0-R3,R14}
�.lowerloop
�5LDRB        R3,[R0]            ;R3=next character
�CMP         R3,#�("A")
�BLT         lowernext
�CMP         R3,#�("Z")
�BHI         lowernext
�2�R         R3,R3,#&20         ;Do the business
�BSTRB        R3,[R0]            ;Store character back in string
�.lowernext
�;CMP         R3,R1              ;check for end of string
�ADDNE       R0,R0,#1
BNE         lowerloop
 LDMFD       R13!,{R0-R3,R14}
BIC         R15,R14,#%1<<28
$
.
.upper
8
;On Entry
B;R0=pointer to string
L;R1=terminating character
V;
`;On Exit
j";String at R0 is in upper case
t
~ STMFD       R13!,{R0-R3,R14}
�.upperloop
�5LDRB        R3,[R0]            ;R3=next character
�CMP         R3,#�("a")
�BLT         uppernext
�CMP         R3,#�("z")
�BHI         uppernext
�1�         R3,R3,#&DF         ;Do the business
�BSTRB        R3,[R0]            ;Store character back in string
�.uppernext
�;CMP         R3,R1              ;check for end of string
�ADDNE       R0,R0,#1
�BNE         upperloop
 LDMFD       R13!,{R0-R3,R14}

BIC         R15,R14,#%1<<28


(
2]
<�
F-� "SAVE StringUtil "+�~(code%)+" "+�~(O%)
P*SETTYPE StringUtil Module
�
00000000  0d 00 0a 1b f4 20 53 74  72 69 6e 67 20 55 74 69  |..... String Uti|
00000010  6c 69 74 79 20 4d 6f 64  75 6c 65 0d 00 14 18 f4  |lity Module.....|
00000020  20 42 79 20 54 68 65 20  46 6c 79 69 6e 67 20 54  | By The Flying T|
00000030  77 69 67 0d 00 1e 0e f4  20 31 37 2f 30 32 2f 39  |wig..... 17/02/9|
00000040  34 0d 00 28 05 3a 0d 00  32 11 de 20 63 6f 64 65  |4..(.:..2.. code|
00000050  25 20 26 31 30 32 34 0d  00 3c 1a ee 20 85 20 f6  |% &1024..<.. . .|
00000060  3a f1 22 20 61 74 20 4c  69 6e 65 20 22 3b 9e 3a  |:." at Line ";.:|
00000070  e0 0d 00 46 13 e3 20 70  61 73 73 25 3d 34 b8 36  |...F.. pass%=4.6|
00000080  20 88 20 32 0d 00 50 12  50 25 3d 30 3a 20 4f 25  | . 2..P.P%=0: O%|
00000090  3d 63 6f 64 65 25 0d 00  5a 0e 5b 4f 50 54 20 70  |=code%..Z.[OPT p|
000000a0  61 73 73 25 0d 00 64 0b  2e 68 65 61 64 65 72 0d  |ass%..d..header.|
000000b0  00 6e 28 45 51 55 44 20  20 20 20 20 20 20 26 30  |.n(EQUD       &0|
000000c0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000000d0  20 3b 73 74 61 72 74 0d  00 78 31 45 51 55 44 20  | ;start..x1EQUD |
000000e0  20 20 20 20 20 20 69 6e  69 74 20 20 20 20 20 20  |      init      |
000000f0  20 20 20 20 20 20 20 20  20 3b 69 6e 69 74 69 61  |         ;initia|
00000100  6c 69 73 61 74 69 6f 6e  0d 00 82 2f 45 51 55 44  |lisation.../EQUD|
00000110  20 20 20 20 20 20 20 26  30 30 20 20 20 20 20 20  |       &00      |
00000120  20 20 20 20 20 20 20 20  20 20 3b 46 69 6e 61 6c  |          ;Final|
00000130  69 73 61 74 69 6f 6e 0d  00 8c 2f 45 51 55 44 20  |isation.../EQUD |
00000140  20 20 20 20 20 20 26 30  30 20 20 20 20 20 20 20  |      &00       |
00000150  20 20 20 20 20 20 20 20  20 3b 53 65 72 76 69 63  |         ;Servic|
00000160  65 20 63 61 6c 6c 0d 00  96 28 45 51 55 44 20 20  |e call...(EQUD  |
00000170  20 20 20 20 20 74 69 74  6c 65 20 20 20 20 20 20  |     title      |
00000180  20 20 20 20 20 20 20 20  3b 74 69 74 6c 65 0d 00  |        ;title..|
00000190  a0 27 45 51 55 44 20 20  20 20 20 20 20 68 65 6c  |.'EQUD       hel|
000001a0  70 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |p               |
000001b0  3b 68 65 6c 70 0d 00 aa  2b 45 51 55 44 20 20 20  |;help...+EQUD   |
000001c0  20 20 20 20 26 30 30 20  20 20 20 20 20 20 20 20  |    &00         |
000001d0  20 20 20 20 20 20 20 3b  63 6f 6d 6d 61 6e 64 73  |       ;commands|
000001e0  0d 00 b4 27 45 51 55 44  20 20 20 20 20 20 20 26  |...'EQUD       &|
000001f0  43 30 30 38 30 20 20 20  20 20 20 20 20 20 20 20  |C0080           |
00000200  20 20 3b 53 57 49 73 0d  00 be 17 45 51 55 44 20  |  ;SWIs....EQUD |
00000210  20 20 20 20 20 20 73 77  69 65 6e 74 72 79 0d 00  |      swientry..|
00000220  c8 17 45 51 55 44 20 20  20 20 20 20 20 73 77 69  |..EQUD       swi|
00000230  74 61 62 6c 65 0d 00 d2  12 45 51 55 44 20 20 20  |table....EQUD   |
00000240  20 20 20 20 26 30 30 0d  00 dc 04 0d 00 e6 09 41  |    &00........A|
00000250  4c 49 47 4e 0d 00 f0 04  0d 00 fa 09 2e 69 6e 69  |LIGN.........ini|
00000260  74 0d 01 04 1f 53 54 4d  46 44 20 20 20 20 20 20  |t....STMFD      |
00000270  52 31 33 21 2c 7b 52 30  2d 52 33 2c 52 31 34 7d  |R13!,{R0-R3,R14}|
00000280  0d 01 0e 17 20 4c 44 52  20 20 20 20 20 20 20 52  |.... LDR       R|
00000290  30 2c 5b 52 31 32 5d 0d  01 18 14 20 43 4d 50 20  |0,[R12].... CMP |
000002a0  20 20 20 20 20 20 52 30  2c 23 30 0d 01 22 1e 20  |      R0,#0..". |
000002b0  4c 44 4d 4e 45 46 44 20  20 20 52 31 33 21 2c 7b  |LDMNEFD   R13!,{|
000002c0  52 30 2d 52 33 2c 50 43  7d 0d 01 2c 14 20 4d 4f  |R0-R3,PC}..,. MO|
000002d0  56 20 20 20 20 20 20 20  52 30 2c 23 36 0d 01 36  |V       R0,#6..6|
000002e0  17 20 4d 4f 56 20 20 20  20 20 20 20 52 33 2c 23  |. MOV       R3,#|
000002f0  26 38 30 30 0d 01 40 1a  20 53 57 49 20 20 20 20  |&800..@. SWI    |
00000300  20 20 20 22 4f 53 5f 4d  6f 64 75 6c 65 22 0d 01  |   "OS_Module"..|
00000310  4a 17 20 53 54 52 20 20  20 20 20 20 20 52 32 2c  |J. STR       R2,|
00000320  5b 52 31 32 5d 0d 01 54  1e 4c 44 4d 46 44 20 20  |[R12]..T.LDMFD  |
00000330  20 20 20 20 52 31 33 21  2c 7b 52 30 2d 52 33 2c  |    R13!,{R0-R3,|
00000340  50 43 7d 0d 01 5e 04 0d  01 68 0a 2e 74 69 74 6c  |PC}..^...h..titl|
00000350  65 0d 01 72 1c 45 51 55  53 20 20 20 20 20 20 20  |e..r.EQUS       |
00000360  22 53 74 72 69 6e 67 55  74 69 6c 73 22 0d 01 7c  |"StringUtils"..||
00000370  10 45 51 55 42 20 20 20  20 20 20 20 30 0d 01 86  |.EQUB       0...|
00000380  09 41 4c 49 47 4e 0d 01  90 04 0d 01 9a 09 2e 68  |.ALIGN.........h|
00000390  65 6c 70 0d 01 a4 1f 45  51 55 53 20 20 20 20 20  |elp....EQUS     |
000003a0  20 20 22 53 74 72 69 6e  67 20 55 74 69 6c 69 74  |  "String Utilit|
000003b0  79 22 0d 01 ae 10 45 51  55 42 20 20 20 20 20 20  |y"....EQUB      |
000003c0  20 39 0d 01 b8 23 45 51  55 53 20 20 20 20 20 20  | 9...#EQUS      |
000003d0  20 22 31 2e 32 30 20 28  31 37 20 46 65 62 20 31  | "1.20 (17 Feb 1|
000003e0  39 39 34 29 22 0d 01 c2  10 45 51 55 42 20 20 20  |994)"....EQUB   |
000003f0  20 20 20 20 30 0d 01 cc  09 41 4c 49 47 4e 0d 01  |    0....ALIGN..|
00000400  d6 04 0d 01 e0 0d 2e 73  77 69 65 6e 74 72 79 0d  |.......swientry.|
00000410  01 ea 18 4c 44 52 20 20  20 20 20 20 20 20 52 31  |...LDR        R1|
00000420  32 2c 5b 52 31 32 5d 0d  01 f4 2c 43 4d 50 20 20  |2,[R12]...,CMP  |
00000430  20 20 20 20 20 20 52 31  31 2c 23 28 65 6e 64 6f  |      R11,#(endo|
00000440  66 74 61 62 6c 65 2d 6a  75 6d 70 74 61 62 6c 65  |ftable-jumptable|
00000450  29 2f 34 0d 01 fe 1e 41  44 44 43 43 20 20 20 20  |)/4....ADDCC    |
00000460  20 20 50 43 2c 50 43 2c  52 31 31 2c 4c 53 4c 23  |  PC,PC,R11,LSL#|
00000470  32 0d 02 08 1e 42 20 20  20 20 20 20 20 20 20 20  |2....B          |
00000480  75 6e 6b 6e 6f 77 6e 53  57 49 65 72 72 6f 72 0d  |unknownSWIerror.|
00000490  02 12 0e 2e 6a 75 6d 70  74 61 62 6c 65 0d 02 1c  |....jumptable...|
000004a0  13 42 20 20 20 20 20 20  20 20 20 20 6c 65 66 74  |.B          left|
000004b0  0d 02 26 14 42 20 20 20  20 20 20 20 20 20 20 72  |..&.B          r|
000004c0  69 67 68 74 0d 02 30 12  42 20 20 20 20 20 20 20  |ight..0.B       |
000004d0  20 20 20 6d 69 64 0d 02  3a 13 42 20 20 20 20 20  |   mid..:.B     |
000004e0  20 20 20 20 20 6d 6f 76  65 0d 02 44 14 42 20 20  |     move..D.B  |
000004f0  20 20 20 20 20 20 20 20  69 6e 73 74 72 0d 02 4e  |        instr..N|
00000500  12 42 20 20 20 20 20 20  20 20 20 20 6c 65 6e 0d  |.B          len.|
00000510  02 58 12 42 20 20 20 20  20 20 20 20 20 20 76 61  |.X.B          va|
00000520  6c 0d 02 62 12 42 20 20  20 20 20 20 20 20 20 20  |l..b.B          |
00000530  67 65 74 0d 02 6c 12 42  20 20 20 20 20 20 20 20  |get..l.B        |
00000540  20 20 70 75 74 0d 02 76  14 42 20 20 20 20 20 20  |  put..v.B      |
00000550  20 20 20 20 6c 6f 77 65  72 0d 02 80 14 42 20 20  |    lower....B  |
00000560  20 20 20 20 20 20 20 20  75 70 70 65 72 0d 02 8a  |        upper...|
00000570  0f 2e 65 6e 64 6f 66 74  61 62 6c 65 0d 02 94 14  |..endoftable....|
00000580  2e 75 6e 6b 6e 6f 77 6e  53 57 49 65 72 72 6f 72  |.unknownSWIerror|
00000590  0d 02 9e 1c 41 44 52 20  20 20 20 20 20 20 20 52  |....ADR        R|
000005a0  30 2c 65 72 72 4d 65 73  73 61 67 65 0d 02 a8 1a  |0,errMessage....|
000005b0  84 52 53 20 20 20 20 20  20 20 50 43 2c 52 31 34  |.RS       PC,R14|
000005c0  2c 23 32 5e 32 39 0d 02  b2 0f 2e 65 72 72 4d 65  |,#2^29.....errMe|
000005d0  73 73 61 67 65 0d 02 bc  13 45 51 55 44 20 20 20  |ssage....EQUD   |
000005e0  20 20 20 20 26 31 45 36  0d 02 c6 2e 45 51 55 53  |    &1E6....EQUS|
000005f0  20 20 20 20 20 20 20 22  55 6e 6b 6e 6f 77 6e 20  |       "Unknown |
00000600  53 74 72 69 6e 67 55 74  69 6c 73 20 4f 70 65 72  |StringUtils Oper|
00000610  61 74 69 6f 6e 22 0d 02  d0 10 45 51 55 42 20 20  |ation"....EQUB  |
00000620  20 20 20 20 20 30 0d 02  da 09 41 4c 49 47 4e 0d  |     0....ALIGN.|
00000630  02 e4 04 0d 02 ee 0d 2e  73 77 69 74 61 62 6c 65  |........switable|
00000640  0d 02 f8 17 45 51 55 53  20 20 20 20 20 20 20 22  |....EQUS       "|
00000650  53 74 72 69 6e 67 22 0d  03 02 10 45 51 55 42 20  |String"....EQUB |
00000660  20 20 20 20 20 20 30 0d  03 0c 16 45 51 55 53 20  |      0....EQUS |
00000670  20 20 20 20 20 20 22 4c  65 66 74 24 22 0d 03 16  |      "Left$"...|
00000680  10 45 51 55 42 20 20 20  20 20 20 20 30 0d 03 20  |.EQUB       0.. |
00000690  17 45 51 55 53 20 20 20  20 20 20 20 22 52 69 67  |.EQUS       "Rig|
000006a0  68 74 24 22 0d 03 2a 10  45 51 55 42 20 20 20 20  |ht$"..*.EQUB    |
000006b0  20 20 20 30 0d 03 34 15  45 51 55 53 20 20 20 20  |   0..4.EQUS    |
000006c0  20 20 20 22 4d 69 64 24  22 0d 03 3e 10 45 51 55  |   "Mid$"..>.EQU|
000006d0  42 20 20 20 20 20 20 20  30 0d 03 48 16 45 51 55  |B       0..H.EQU|
000006e0  53 20 20 20 20 20 20 20  22 4d 6f 76 65 24 22 0d  |S       "Move$".|
000006f0  03 52 10 45 51 55 42 20  20 20 20 20 20 20 30 0d  |.R.EQUB       0.|
00000700  03 5c 16 45 51 55 53 20  20 20 20 20 20 20 22 49  |.\.EQUS       "I|
00000710  6e 73 74 72 22 0d 03 66  10 45 51 55 42 20 20 20  |nstr"..f.EQUB   |
00000720  20 20 20 20 30 0d 03 70  14 45 51 55 53 20 20 20  |    0..p.EQUS   |
00000730  20 20 20 20 22 4c 65 6e  22 0d 03 7a 10 45 51 55  |    "Len"..z.EQU|
00000740  42 20 20 20 20 20 20 20  30 0d 03 84 14 45 51 55  |B       0....EQU|
00000750  53 20 20 20 20 20 20 20  22 56 61 6c 22 0d 03 8e  |S       "Val"...|
00000760  10 45 51 55 42 20 20 20  20 20 20 20 30 0d 03 98  |.EQUB       0...|
00000770  16 45 51 55 53 20 20 20  20 20 20 20 22 47 65 74  |.EQUS       "Get|
00000780  24 23 22 0d 03 a2 10 45  51 55 42 20 20 20 20 20  |$#"....EQUB     |
00000790  20 20 30 0d 03 ac 16 45  51 55 53 20 20 20 20 20  |  0....EQUS     |
000007a0  20 20 22 50 75 74 24 23  22 0d 03 b6 10 45 51 55  |  "Put$#"....EQU|
000007b0  42 20 20 20 20 20 20 20  30 0d 03 c0 1c 45 51 55  |B       0....EQU|
000007c0  53 20 20 20 20 20 20 20  22 54 6f 4c 6f 77 65 72  |S       "ToLower|
000007d0  43 61 73 65 22 0d 03 ca  10 45 51 55 42 20 20 20  |Case"....EQUB   |
000007e0  20 20 20 20 30 0d 03 d4  1c 45 51 55 53 20 20 20  |    0....EQUS   |
000007f0  20 20 20 20 22 54 6f 55  70 70 65 72 43 61 73 65  |    "ToUpperCase|
00000800  22 0d 03 de 10 45 51 55  42 20 20 20 20 20 20 20  |"....EQUB       |
00000810  30 0d 03 e8 10 45 51 55  42 20 20 20 20 20 20 20  |0....EQUB       |
00000820  30 0d 03 f2 04 0d 03 fc  09 2e 6c 65 66 74 0d 04  |0.........left..|
00000830  06 0d 3b 4f 6e 20 45 6e  74 72 79 0d 04 10 19 3b  |..;On Entry....;|
00000840  52 30 3d 50 6f 69 6e 74  65 72 20 54 6f 20 53 74  |R0=Pointer To St|
00000850  72 69 6e 67 0d 04 1a 19  3b 52 31 3d 50 6f 69 6e  |ring....;R1=Poin|
00000860  74 65 72 20 54 6f 20 42  75 66 66 65 72 0d 04 24  |ter To Buffer..$|
00000870  1d 3b 52 32 3d 54 65 72  6d 69 6e 61 74 69 6e 67  |.;R2=Terminating|
00000880  20 43 68 61 72 61 63 74  65 72 0d 04 2e 25 3b 52  | Character...%;R|
00000890  33 3d 4e 6f 2e 20 6f 66  20 43 68 61 72 61 63 74  |3=No. of Charact|
000008a0  65 72 73 20 74 6f 20 74  72 61 6e 73 66 65 72 0d  |ers to transfer.|
000008b0  04 38 05 3b 0d 04 42 0c  3b 4f 6e 20 45 78 69 74  |.8.;..B.;On Exit|
000008c0  0d 04 4c 3a 3b 42 75 66  66 65 72 20 61 74 20 52  |..L:;Buffer at R|
000008d0  31 20 63 6f 6e 74 61 69  6e 73 20 4c 45 46 54 24  |1 contains LEFT$|
000008e0  20 61 6e 64 20 74 65 72  6d 69 6e 61 74 69 6e 67  | and terminating|
000008f0  20 63 68 61 72 61 63 74  65 72 0d 04 56 04 0d 04  | character..V...|
00000900  60 20 53 54 4d 46 44 20  20 20 20 20 20 52 31 33  |` STMFD      R13|
00000910  21 2c 7b 52 34 2d 52 31  32 2c 52 31 34 7d 0d 04  |!,{R4-R12,R14}..|
00000920  6a 14 20 4d 4f 56 20 20  20 20 20 20 20 52 34 2c  |j. MOV       R4,|
00000930  23 30 0d 04 74 0e 20 2e  6c 65 66 74 6c 6f 6f 70  |#0..t. .leftloop|
00000940  0d 04 7e 19 20 20 4c 44  52 42 20 20 20 20 20 52  |..~.  LDRB     R|
00000950  35 2c 5b 52 30 2c 52 34  5d 0d 04 88 19 20 20 53  |5,[R0,R4]....  S|
00000960  54 52 42 20 20 20 20 20  52 35 2c 5b 52 31 2c 52  |TRB     R5,[R1,R|
00000970  34 5d 0d 04 92 17 20 20  41 44 44 20 20 20 20 20  |4]....  ADD     |
00000980  20 52 34 2c 52 34 2c 23  31 0d 04 9c 14 20 20 43  | R4,R4,#1....  C|
00000990  4d 50 20 20 20 20 20 20  52 35 2c 52 32 0d 04 a6  |MP      R5,R2...|
000009a0  19 20 20 42 45 51 20 20  20 20 20 20 6c 65 66 74  |.  BEQ      left|
000009b0  66 69 6e 69 73 68 0d 04  b0 14 20 20 43 4d 50 20  |finish....  CMP |
000009c0  20 20 20 20 20 52 34 2c  52 33 0d 04 ba 17 20 42  |     R4,R3.... B|
000009d0  4e 45 20 20 20 20 20 20  20 6c 65 66 74 6c 6f 6f  |NE       leftloo|
000009e0  70 0d 04 c4 19 20 53 54  52 42 20 20 20 20 20 20  |p.... STRB      |
000009f0  52 32 2c 5b 52 31 2c 52  34 5d 0d 04 ce 10 20 2e  |R2,[R1,R4].... .|
00000a00  6c 65 66 74 66 69 6e 69  73 68 0d 04 d8 20 20 4c  |leftfinish...  L|
00000a10  44 4d 46 44 20 20 20 20  20 52 31 33 21 2c 7b 52  |DMFD     R13!,{R|
00000a20  34 2d 52 31 32 2c 52 31  34 7d 0d 04 e2 20 20 42  |4-R12,R14}...  B|
00000a30  49 43 53 20 20 20 20 20  20 50 43 2c 52 31 34 2c  |ICS      PC,R14,|
00000a40  23 25 31 31 31 31 3c 3c  32 38 0d 04 ec 04 0d 04  |#%1111<<28......|
00000a50  f6 0a 2e 72 69 67 68 74  0d 05 00 0d 3b 4f 6e 20  |...right....;On |
00000a60  45 6e 74 72 79 0d 05 0a  19 3b 52 30 3d 50 6f 69  |Entry....;R0=Poi|
00000a70  6e 74 65 72 20 54 6f 20  53 74 72 69 6e 67 0d 05  |nter To String..|
00000a80  14 19 3b 52 31 3d 50 6f  69 6e 74 65 72 20 54 6f  |..;R1=Pointer To|
00000a90  20 42 75 66 66 65 72 0d  05 1e 1d 3b 52 32 3d 54  | Buffer....;R2=T|
00000aa0  65 72 6d 69 6e 61 74 69  6e 67 20 43 68 61 72 61  |erminating Chara|
00000ab0  63 74 65 72 0d 05 28 22  3b 52 33 3d 4e 6f 2e 20  |cter..(";R3=No. |
00000ac0  6f 66 20 43 68 61 72 61  63 74 65 72 73 20 74 72  |of Characters tr|
00000ad0  61 6e 73 66 65 72 0d 05  32 05 3b 0d 05 3c 0c 3b  |ansfer..2.;..<.;|
00000ae0  4f 6e 20 45 78 69 74 0d  05 46 3b 3b 42 75 66 66  |On Exit..F;;Buff|
00000af0  65 72 20 61 74 20 52 31  20 63 6f 6e 74 61 69 6e  |er at R1 contain|
00000b00  73 20 52 49 47 48 54 24  20 61 6e 64 20 74 65 72  |s RIGHT$ and ter|
00000b10  6d 69 6e 61 74 69 6e 67  20 63 68 61 72 61 63 74  |minating charact|
00000b20  65 72 0d 05 50 04 0d 05  5a 20 53 54 4d 46 44 20  |er..P...Z STMFD |
00000b30  20 20 20 20 20 52 31 33  21 2c 7b 52 34 2d 52 31  |     R13!,{R4-R1|
00000b40  32 2c 52 31 34 7d 0d 05  64 14 20 4d 4f 56 20 20  |2,R14}..d. MOV  |
00000b50  20 20 20 20 20 52 34 2c  23 30 0d 05 6e 10 20 2e  |     R4,#0..n. .|
00000b60  72 69 67 68 74 6c 6f 6f  70 31 0d 05 78 19 20 20  |rightloop1..x.  |
00000b70  4c 44 52 42 20 20 20 20  20 52 35 2c 5b 52 30 2c  |LDRB     R5,[R0,|
00000b80  52 34 5d 0d 05 82 14 20  20 43 4d 50 20 20 20 20  |R4]....  CMP    |
00000b90  20 20 52 35 2c 52 32 0d  05 8c 17 20 20 41 44 44  |  R5,R2....  ADD|
00000ba0  4e 45 20 20 20 20 52 34  2c 52 34 2c 23 31 0d 05  |NE    R4,R4,#1..|
00000bb0  96 19 20 42 4e 45 20 20  20 20 20 20 20 72 69 67  |.. BNE       rig|
00000bc0  68 74 6c 6f 6f 70 31 0d  05 a0 17 20 20 53 55 42  |htloop1....  SUB|
00000bd0  20 20 20 20 20 20 52 34  2c 52 34 2c 52 33 0d 05  |      R4,R4,R3..|
00000be0  aa 14 20 20 4d 4f 56 20  20 20 20 20 20 52 36 2c  |..  MOV      R6,|
00000bf0  23 30 0d 05 b4 10 20 2e  72 69 67 68 74 6c 6f 6f  |#0.... .rightloo|
00000c00  70 32 0d 05 be 19 20 20  4c 44 52 42 20 20 20 20  |p2....  LDRB    |
00000c10  20 52 35 2c 5b 52 30 2c  52 34 5d 0d 05 c8 19 20  | R5,[R0,R4].... |
00000c20  20 53 54 52 42 20 20 20  20 20 52 35 2c 5b 52 31  | STRB     R5,[R1|
00000c30  2c 52 36 5d 0d 05 d2 17  20 20 41 44 44 20 20 20  |,R6]....  ADD   |
00000c40  20 20 20 52 34 2c 52 34  2c 23 31 0d 05 dc 17 20  |   R4,R4,#1.... |
00000c50  20 41 44 44 20 20 20 20  20 20 52 36 2c 52 36 2c  | ADD      R6,R6,|
00000c60  23 31 0d 05 e6 14 20 20  43 4d 50 20 20 20 20 20  |#1....  CMP     |
00000c70  20 52 35 2c 52 32 0d 05  f0 19 20 42 4e 45 20 20  | R5,R2.... BNE  |
00000c80  20 20 20 20 20 72 69 67  68 74 6c 6f 6f 70 32 0d  |     rightloop2.|
00000c90  05 fa 15 20 4d 4f 56 20  20 20 20 20 20 20 52 34  |... MOV       R4|
00000ca0  2c 52 31 35 0d 06 04 1b  20 42 49 43 20 20 20 20  |,R15.... BIC    |
00000cb0  20 20 20 52 34 2c 52 34  2c 23 31 3c 3c 32 38 0d  |   R4,R4,#1<<28.|
00000cc0  06 0e 15 20 54 45 51 50  20 20 20 20 20 20 52 31  |... TEQP      R1|
00000cd0  35 2c 52 34 0d 06 18 20  4c 44 4d 46 44 20 20 20  |5,R4... LDMFD   |
00000ce0  20 20 20 52 31 33 21 2c  7b 52 34 2d 52 31 32 2c  |   R13!,{R4-R12,|
00000cf0  52 31 34 7d 0d 06 22 1d  42 49 43 53 20 20 20 20  |R14}..".BICS    |
00000d00  20 20 20 50 43 2c 52 31  34 2c 23 25 31 3c 3c 32  |   PC,R14,#%1<<2|
00000d10  38 0d 06 2c 04 0d 06 36  08 2e 6d 69 64 0d 06 40  |8..,...6..mid..@|
00000d20  0d 3b 4f 6e 20 45 6e 74  72 79 0d 06 4a 19 3b 52  |.;On Entry..J.;R|
00000d30  30 3d 50 6f 69 6e 74 65  72 20 54 6f 20 53 74 72  |0=Pointer To Str|
00000d40  69 6e 67 0d 06 54 19 3b  52 31 3d 50 6f 69 6e 74  |ing..T.;R1=Point|
00000d50  65 72 20 54 6f 20 42 75  66 66 65 72 0d 06 5e 1d  |er To Buffer..^.|
00000d60  3b 52 32 3d 54 65 72 6d  69 6e 61 74 69 6e 67 20  |;R2=Terminating |
00000d70  43 68 61 72 61 63 74 65  72 0d 06 68 22 3b 52 33  |Character..h";R3|
00000d80  3d 4e 6f 2e 20 6f 66 20  43 68 61 72 61 63 74 65  |=No. of Characte|
00000d90  72 73 20 74 72 61 6e 73  66 65 72 0d 06 72 28 3b  |rs transfer..r(;|
00000da0  52 34 3d 43 68 61 72 61  63 74 65 72 20 74 6f 20  |R4=Character to |
00000db0  73 74 61 72 74 20 74 72  61 6e 73 66 65 72 20 66  |start transfer f|
00000dc0  72 6f 6d 0d 06 7c 05 3b  0d 06 86 0c 3b 4f 6e 20  |rom..|.;....;On |
00000dd0  45 78 69 74 0d 06 90 39  3b 42 75 66 66 65 72 20  |Exit...9;Buffer |
00000de0  61 74 20 52 31 20 63 6f  6e 74 61 69 6e 73 20 4d  |at R1 contains M|
00000df0  49 44 24 20 61 6e 64 20  74 65 72 6d 69 6e 61 74  |ID$ and terminat|
00000e00  69 6e 67 20 63 68 61 72  61 63 74 65 72 0d 06 9a  |ing character...|
00000e10  04 0d 06 a4 20 53 54 4d  46 44 20 20 20 20 20 20  |.... STMFD      |
00000e20  52 31 33 21 2c 7b 52 35  2d 52 31 32 2c 52 31 34  |R13!,{R5-R12,R14|
00000e30  7d 0d 06 ae 14 4d 4f 56  20 20 20 20 20 20 20 20  |}....MOV        |
00000e40  52 37 2c 52 34 0d 06 b8  14 4d 4f 56 20 20 20 20  |R7,R4....MOV    |
00000e50  20 20 20 20 52 38 2c 23  30 0d 06 c2 0d 20 2e 6d  |    R8,#0.... .m|
00000e60  69 64 6c 6f 6f 70 0d 06  cc 19 20 20 4c 44 52 42  |idloop....  LDRB|
00000e70  20 20 20 20 20 52 36 2c  5b 52 30 2c 52 37 5d 0d  |     R6,[R0,R7].|
00000e80  06 d6 19 20 20 53 54 52  42 20 20 20 20 20 52 36  |...  STRB     R6|
00000e90  2c 5b 52 31 2c 52 38 5d  0d 06 e0 17 20 20 20 41  |,[R1,R8]....   A|
00000ea0  44 44 20 20 20 20 20 52  37 2c 52 37 2c 23 31 0d  |DD     R7,R7,#1.|
00000eb0  06 ea 17 20 20 20 41 44  44 20 20 20 20 20 52 38  |...   ADD     R8|
00000ec0  2c 52 38 2c 23 31 0d 06  f4 14 20 20 43 4d 50 20  |,R8,#1....  CMP |
00000ed0  20 20 20 20 20 52 36 2c  52 32 0d 06 fe 1a 20 20  |     R6,R2....  |
00000ee0  20 42 45 51 20 20 20 20  20 72 69 67 68 74 66 69  | BEQ     rightfi|
00000ef0  6e 69 73 68 0d 07 08 14  20 20 43 4d 50 20 20 20  |nish....  CMP   |
00000f00  20 20 20 52 38 2c 52 33  0d 07 12 16 20 20 20 42  |   R8,R3....   B|
00000f10  4e 45 20 20 20 20 20 6d  69 64 6c 6f 6f 70 0d 07  |NE     midloop..|
00000f20  1c 19 20 53 54 52 42 20  20 20 20 20 20 52 32 2c  |.. STRB      R2,|
00000f30  5b 52 31 2c 52 38 5d 0d  07 26 11 20 2e 72 69 67  |[R1,R8]..&. .rig|
00000f40  68 74 66 69 6e 69 73 68  0d 07 30 15 20 4d 4f 56  |htfinish..0. MOV|
00000f50  20 20 20 20 20 20 20 52  35 2c 52 31 35 0d 07 3a  |       R5,R15..:|
00000f60  20 4c 44 4d 46 44 20 20  20 20 20 20 52 31 33 21  | LDMFD      R13!|
00000f70  2c 7b 52 35 2d 52 31 32  2c 52 31 34 7d 0d 07 44  |,{R5-R12,R14}..D|
00000f80  1d 42 49 43 53 20 20 20  20 20 20 20 50 43 2c 52  |.BICS       PC,R|
00000f90  31 34 2c 23 25 31 3c 3c  32 38 0d 07 4e 04 0d 07  |14,#%1<<28..N...|
00000fa0  58 09 2e 6d 6f 76 65 0d  07 62 0d 3b 4f 6e 20 45  |X..move..b.;On E|
00000fb0  6e 74 72 79 0d 07 6c 19  3b 52 30 3d 50 6f 69 6e  |ntry..l.;R0=Poin|
00000fc0  74 65 72 20 54 6f 20 53  74 72 69 6e 67 0d 07 76  |ter To String..v|
00000fd0  19 3b 52 31 3d 50 6f 69  6e 74 65 72 20 54 6f 20  |.;R1=Pointer To |
00000fe0  42 75 66 66 65 72 0d 07  80 1d 3b 52 32 3d 54 65  |Buffer....;R2=Te|
00000ff0  72 6d 69 6e 61 74 69 6e  67 20 43 68 61 72 61 63  |rminating Charac|
00001000  74 65 72 0d 07 8a 05 3b  0d 07 94 0c 3b 4f 6e 20  |ter....;....;On |
00001010  45 78 69 74 0d 07 9e 21  3b 42 75 66 66 65 72 20  |Exit...!;Buffer |
00001020  61 74 20 52 31 20 63 6f  6e 74 61 69 6e 73 20 53  |at R1 contains S|
00001030  74 72 69 6e 67 0d 07 a8  04 0d 07 b2 20 53 54 4d  |tring....... STM|
00001040  46 44 20 20 20 20 20 20  52 31 33 21 2c 7b 52 33  |FD      R13!,{R3|
00001050  2d 52 31 32 2c 52 31 34  7d 0d 07 bc 14 20 4d 4f  |-R12,R14}.... MO|
00001060  56 20 20 20 20 20 20 20  52 34 2c 23 30 0d 07 c6  |V       R4,#0...|
00001070  0e 20 2e 6d 6f 76 65 6c  6f 6f 70 0d 07 d0 19 20  |. .moveloop.... |
00001080  20 4c 44 52 42 20 20 20  20 20 52 35 2c 5b 52 30  | LDRB     R5,[R0|
00001090  2c 52 34 5d 0d 07 da 19  20 20 53 54 52 42 20 20  |,R4]....  STRB  |
000010a0  20 20 20 52 35 2c 5b 52  31 2c 52 34 5d 0d 07 e4  |   R5,[R1,R4]...|
000010b0  17 20 20 41 44 44 20 20  20 20 20 20 52 34 2c 52  |.  ADD      R4,R|
000010c0  34 2c 23 31 0d 07 ee 14  20 20 43 4d 50 20 20 20  |4,#1....  CMP   |
000010d0  20 20 20 52 35 2c 52 32  0d 07 f8 17 20 42 4e 45  |   R5,R2.... BNE|
000010e0  20 20 20 20 20 20 20 6d  6f 76 65 6c 6f 6f 70 0d  |       moveloop.|
000010f0  08 02 20 4c 44 4d 46 44  20 20 20 20 20 20 52 31  |.. LDMFD      R1|
00001100  33 21 2c 7b 52 33 2d 52  31 32 2c 52 31 34 7d 0d  |3!,{R3-R12,R14}.|
00001110  08 0c 1d 42 49 43 53 20  20 20 20 20 20 20 50 43  |...BICS       PC|
00001120  2c 52 31 34 2c 23 25 31  3c 3c 32 38 0d 08 16 04  |,R14,#%1<<28....|
00001130  0d 08 20 0a 2e 69 6e 73  74 72 0d 08 2a 0d 3b 4f  |.. ..instr..*.;O|
00001140  6e 20 45 6e 74 72 79 0d  08 34 1d 3b 52 30 3d 50  |n Entry..4.;R0=P|
00001150  6f 69 6e 74 65 72 20 54  6f 20 31 73 74 20 53 74  |ointer To 1st St|
00001160  72 69 6e 67 0d 08 3e 1d  3b 52 31 3d 50 6f 69 6e  |ring..>.;R1=Poin|
00001170  74 65 72 20 54 6f 20 32  6e 64 20 53 74 72 69 6e  |ter To 2nd Strin|
00001180  67 0d 08 48 1d 3b 52 32  3d 54 65 72 6d 69 6e 61  |g..H.;R2=Termina|
00001190  74 69 6e 67 20 43 68 61  72 61 63 74 65 72 0d 08  |ting Character..|
000011a0  52 26 3b 52 33 3d 43 68  61 72 61 63 74 65 72 20  |R&;R3=Character |
000011b0  54 6f 20 73 74 61 72 74  20 73 65 61 72 63 68 20  |To start search |
000011c0  66 72 6f 6d 0d 08 5c 05  3b 0d 08 66 0c 3b 4f 6e  |from..\.;..f.;On|
000011d0  20 45 78 69 74 0d 08 70  37 3b 52 33 3d 49 6e 64  | Exit..p7;R3=Ind|
000011e0  65 78 20 6f 66 20 32 6e  64 20 53 74 72 69 6e 67  |ex of 2nd String|
000011f0  20 57 69 74 68 69 6e 20  31 73 74 2c 20 2d 31 20  | Within 1st, -1 |
00001200  69 66 20 6e 6f 74 20 66  6f 75 6e 64 0d 08 7a 04  |if not found..z.|
00001210  0d 08 84 26 53 54 4d 46  44 20 20 20 20 20 20 52  |...&STMFD      R|
00001220  31 33 21 2c 7b 52 31 2d  52 32 2c 52 34 2d 52 31  |13!,{R1-R2,R4-R1|
00001230  32 2c 52 31 34 7d 0d 08  8e 14 20 4d 4f 56 20 20  |2,R14}.... MOV  |
00001240  20 20 20 20 20 52 38 2c  52 33 0d 08 98 14 20 4d  |     R8,R3.... M|
00001250  4f 56 20 20 20 20 20 20  20 52 34 2c 23 30 0d 08  |OV       R4,#0..|
00001260  a2 10 20 2e 69 6e 73 74  72 6c 6f 6f 70 31 0d 08  |.. .instrloop1..|
00001270  ac 19 20 20 4c 44 52 42  20 20 20 20 20 52 35 2c  |..  LDRB     R5,|
00001280  5b 52 31 2c 52 34 5d 0d  08 b6 14 20 20 43 4d 50  |[R1,R4]....  CMP|
00001290  20 20 20 20 20 20 52 35  2c 52 32 0d 08 c0 11 20  |      R5,R2.... |
000012a0  20 ec 51 20 20 20 20 52  33 2c 52 38 0d 08 ca 19  | .Q    R3,R8....|
000012b0  20 42 45 51 20 20 20 20  20 20 69 6e 73 74 72 66  | BEQ      instrf|
000012c0  69 6e 69 73 68 0d 08 d4  19 20 20 4c 44 52 42 20  |inish....  LDRB |
000012d0  20 20 20 20 52 36 2c 5b  52 30 2c 52 33 5d 0d 08  |    R6,[R0,R3]..|
000012e0  de 14 20 20 43 4d 50 20  20 20 20 20 20 52 35 2c  |..  CMP      R5,|
000012f0  52 36 0d 08 e8 17 20 20  41 44 44 45 51 20 20 20  |R6....  ADDEQ   |
00001300  20 52 34 2c 52 34 2c 23  31 0d 08 f2 17 20 20 41  | R4,R4,#1....  A|
00001310  44 44 45 51 20 20 20 20  52 33 2c 52 33 2c 23 31  |DDEQ    R3,R3,#1|
00001320  0d 08 fc 19 20 42 45 51  20 20 20 20 20 20 20 69  |.... BEQ       i|
00001330  6e 73 74 72 6c 6f 6f 70  31 0d 09 06 14 20 20 43  |nstrloop1....  C|
00001340  4d 50 20 20 20 20 20 20  52 36 2c 52 32 0d 09 10  |MP      R6,R2...|
00001350  14 20 20 4d 56 4e 45 51  20 20 20 20 52 33 2c 23  |.  MVNEQ    R3,#|
00001360  30 0d 09 1a 1a 20 42 45  51 20 20 20 20 20 20 20  |0.... BEQ       |
00001370  69 6e 73 74 72 66 69 6e  69 73 68 0d 09 24 14 20  |instrfinish..$. |
00001380  20 4d 4f 56 20 20 20 20  20 20 52 34 2c 23 30 0d  | MOV      R4,#0.|
00001390  09 2e 17 20 20 41 44 44  20 20 20 20 20 20 52 33  |...  ADD      R3|
000013a0  2c 52 33 2c 23 31 0d 09  38 14 20 20 4d 4f 56 20  |,R3,#1..8.  MOV |
000013b0  20 20 20 20 20 52 38 2c  52 33 0d 09 42 19 20 42  |     R8,R3..B. B|
000013c0  20 20 20 20 20 20 20 20  20 69 6e 73 74 72 6c 6f  |         instrlo|
000013d0  6f 70 31 0d 09 4c 10 2e  69 6e 73 74 72 66 69 6e  |op1..L..instrfin|
000013e0  69 73 68 0d 09 56 26 4c  44 4d 46 44 20 20 20 20  |ish..V&LDMFD    |
000013f0  20 20 52 31 33 21 2c 7b  52 31 2d 52 32 2c 52 34  |  R13!,{R1-R2,R4|
00001400  2d 52 31 32 2c 52 31 34  7d 0d 09 60 1d 42 49 43  |-R12,R14}..`.BIC|
00001410  53 20 20 20 20 20 20 20  50 43 2c 52 31 34 2c 23  |S       PC,R14,#|
00001420  25 31 3c 3c 32 38 0d 09  6a 04 0d 09 74 08 2e 6c  |%1<<28..j...t..l|
00001430  65 6e 0d 09 7e 0d 3b 4f  6e 20 45 6e 74 72 79 0d  |en..~.;On Entry.|
00001440  09 88 19 3b 52 30 3d 50  6f 69 6e 74 65 72 20 54  |...;R0=Pointer T|
00001450  6f 20 53 74 72 69 6e 67  0d 09 92 1d 3b 52 31 3d  |o String....;R1=|
00001460  54 65 72 6d 69 6e 61 74  69 6e 67 20 43 68 61 72  |Terminating Char|
00001470  61 63 74 65 72 0d 09 9c  05 3b 0d 09 a6 0c 3b 4f  |acter....;....;O|
00001480  6e 20 45 78 69 74 0d 09  b0 1e 3b 52 31 20 63 6f  |n Exit....;R1 co|
00001490  6e 74 61 69 6e 73 20 6c  65 6e 67 74 68 20 53 74  |ntains length St|
000014a0  72 69 6e 67 0d 09 ba 04  0d 09 c4 20 53 54 4d 46  |ring....... STMF|
000014b0  44 20 20 20 20 20 20 52  31 33 21 2c 7b 52 32 2d  |D      R13!,{R2-|
000014c0  52 31 32 2c 52 31 34 7d  0d 09 ce 14 20 4d 4f 56  |R12,R14}.... MOV|
000014d0  20 20 20 20 20 20 20 52  34 2c 23 30 0d 09 d8 0d  |       R4,#0....|
000014e0  20 2e 6c 65 6e 6c 6f 6f  70 0d 09 e2 19 20 20 4c  | .lenloop....  L|
000014f0  44 52 42 20 20 20 20 20  52 35 2c 5b 52 30 2c 52  |DRB     R5,[R0,R|
00001500  34 5d 0d 09 ec 17 20 20  41 44 44 20 20 20 20 20  |4]....  ADD     |
00001510  20 52 34 2c 52 34 2c 23  31 0d 09 f6 14 20 20 43  | R4,R4,#1....  C|
00001520  4d 50 20 20 20 20 20 20  52 35 2c 52 31 0d 0a 00  |MP      R5,R1...|
00001530  16 20 42 4e 45 20 20 20  20 20 20 20 6c 65 6e 6c  |. BNE       lenl|
00001540  6f 6f 70 0d 0a 0a 17 20  53 55 42 20 20 20 20 20  |oop.... SUB     |
00001550  20 20 52 31 2c 52 34 2c  23 31 0d 0a 14 20 4c 44  |  R1,R4,#1... LD|
00001560  4d 46 44 20 20 20 20 20  20 52 31 33 21 2c 7b 52  |MFD      R13!,{R|
00001570  32 2d 52 31 32 2c 52 31  34 7d 0d 0a 1e 1d 42 49  |2-R12,R14}....BI|
00001580  43 53 20 20 20 20 20 20  20 50 43 2c 52 31 34 2c  |CS       PC,R14,|
00001590  23 25 31 3c 3c 32 38 0d  0a 28 04 0d 0a 32 08 2e  |#%1<<28..(...2..|
000015a0  76 61 6c 0d 0a 3c 0d 3b  4f 6e 20 45 6e 74 72 79  |val..<.;On Entry|
000015b0  0d 0a 46 19 3b 52 30 3d  50 6f 69 6e 74 65 72 20  |..F.;R0=Pointer |
000015c0  54 6f 20 53 74 72 69 6e  67 0d 0a 50 1d 3b 52 31  |To String..P.;R1|
000015d0  3d 54 65 72 6d 69 6e 61  74 69 6e 67 20 43 68 61  |=Terminating Cha|
000015e0  72 61 63 74 65 72 0d 0a  5a 05 3b 0d 0a 64 0c 3b  |racter..Z.;..d.;|
000015f0  4f 6e 20 45 78 69 74 0d  0a 6e 17 3b 52 31 3d 56  |On Exit..n.;R1=V|
00001600  61 6c 75 65 20 6f 66 20  73 74 72 69 6e 67 0d 0a  |alue of string..|
00001610  78 20 53 54 4d 46 44 20  20 20 20 20 20 52 31 33  |x STMFD      R13|
00001620  21 2c 7b 52 32 2d 52 31  32 2c 52 31 34 7d 0d 0a  |!,{R2-R12,R14}..|
00001630  82 14 20 4d 4f 56 20 20  20 20 20 20 20 52 34 2c  |.. MOV       R4,|
00001640  23 30 0d 0a 8c 14 20 4d  4f 56 20 20 20 20 20 20  |#0.... MOV      |
00001650  20 52 38 2c 23 31 0d 0a  96 0e 20 2e 76 61 6c 6c  | R8,#1.... .vall|
00001660  6f 6f 70 31 0d 0a a0 19  20 20 4c 44 52 42 20 20  |oop1....  LDRB  |
00001670  20 20 20 52 35 2c 5b 52  30 2c 52 34 5d 0d 0a aa  |   R5,[R0,R4]...|
00001680  14 20 20 43 4d 50 20 20  20 20 20 20 52 35 2c 52  |.  CMP      R5,R|
00001690  31 0d 0a b4 17 20 20 41  44 44 4e 45 20 20 20 20  |1....  ADDNE    |
000016a0  52 34 2c 52 34 2c 23 31  0d 0a be 17 20 42 4e 45  |R4,R4,#1.... BNE|
000016b0  20 20 20 20 20 20 20 76  61 6c 6c 6f 6f 70 31 0d  |       valloop1.|
000016c0  0a c8 14 20 4d 4f 56 20  20 20 20 20 20 20 52 31  |... MOV       R1|
000016d0  2c 23 30 0d 0a d2 14 20  4d 4f 56 20 20 20 20 20  |,#0.... MOV     |
000016e0  20 20 52 36 2c 23 30 0d  0a dc 14 20 4d 4f 56 20  |  R6,#0.... MOV |
000016f0  20 20 20 20 20 20 52 37  2c 52 34 0d 0a e6 17 20  |      R7,R4.... |
00001700  53 55 42 20 20 20 20 20  20 20 52 34 2c 52 34 2c  |SUB       R4,R4,|
00001710  23 31 0d 0a f0 0e 20 2e  76 61 6c 6c 6f 6f 70 32  |#1.... .valloop2|
00001720  0d 0a fa 19 20 20 4c 44  52 42 20 20 20 20 20 52  |....  LDRB     R|
00001730  35 2c 5b 52 30 2c 52 34  5d 0d 0b 04 19 20 20 53  |5,[R0,R4]....  S|
00001740  55 42 20 20 20 20 20 20  52 35 2c 52 35 2c 23 26  |UB      R5,R5,#&|
00001750  33 30 0d 0b 0e 14 20 20  43 4d 50 20 20 20 20 20  |30....  CMP     |
00001760  20 52 35 2c 23 30 0d 0b  18 14 20 20 4d 4f 56 4c  | R5,#0....  MOVL|
00001770  54 20 20 20 20 52 31 2c  23 30 0d 0b 22 18 20 20  |T    R1,#0..".  |
00001780  42 4c 54 20 20 20 20 20  20 76 61 6c 66 69 6e 69  |BLT      valfini|
00001790  73 68 0d 0b 2c 14 20 20  43 4d 50 20 20 20 20 20  |sh..,.  CMP     |
000017a0  20 52 35 2c 23 39 0d 0b  36 14 20 20 4d 4f 56 47  | R5,#9..6.  MOVG|
000017b0  54 20 20 20 20 52 31 2c  23 30 0d 0b 40 18 20 20  |T    R1,#0..@.  |
000017c0  42 47 54 20 20 20 20 20  20 76 61 6c 66 69 6e 69  |BGT      valfini|
000017d0  73 68 0d 0b 4a 17 20 20  4d 55 4c 20 20 20 20 20  |sh..J.  MUL     |
000017e0  20 52 39 2c 52 38 2c 52  35 0d 0b 54 17 20 20 41  | R9,R8,R5..T.  A|
000017f0  44 44 20 20 20 20 20 20  52 31 2c 52 31 2c 52 39  |DD      R1,R1,R9|
00001800  0d 0b 5e 1b 20 20 4d 4f  56 20 20 20 20 20 20 52  |..^.  MOV      R|
00001810  38 2c 52 38 2c 4c 53 4c  20 23 31 0d 0b 68 1e 20  |8,R8,LSL #1..h. |
00001820  20 41 44 44 20 20 20 20  20 20 52 38 2c 52 38 2c  | ADD      R8,R8,|
00001830  52 38 2c 4c 53 4c 20 23  32 0d 0b 72 17 20 20 53  |R8,LSL #2..r.  S|
00001840  55 42 20 20 20 20 20 20  52 34 2c 52 34 2c 23 31  |UB      R4,R4,#1|
00001850  0d 0b 7c 17 20 20 41 44  44 20 20 20 20 20 20 52  |..|.  ADD      R|
00001860  36 2c 52 36 2c 23 31 0d  0b 86 14 20 20 43 4d 50  |6,R6,#1....  CMP|
00001870  20 20 20 20 20 20 52 36  2c 52 37 0d 0b 90 17 20  |      R6,R7.... |
00001880  42 4e 45 20 20 20 20 20  20 20 76 61 6c 6c 6f 6f  |BNE       valloo|
00001890  70 32 0d 0b 9a 0e 2e 76  61 6c 66 69 6e 69 73 68  |p2.....valfinish|
000018a0  0d 0b a4 20 4c 44 4d 46  44 20 20 20 20 20 20 52  |... LDMFD      R|
000018b0  31 33 21 2c 7b 52 32 2d  52 31 32 2c 52 31 34 7d  |13!,{R2-R12,R14}|
000018c0  0d 0b ae 1d 42 49 43 53  20 20 20 20 20 20 20 50  |....BICS       P|
000018d0  43 2c 52 31 34 2c 23 25  31 3c 3c 32 38 0d 0b b8  |C,R14,#%1<<28...|
000018e0  04 0d 0b c2 08 2e 67 65  74 0d 0b cc 0d 3b 4f 6e  |......get....;On|
000018f0  20 45 6e 74 72 79 0d 0b  d6 19 3b 52 30 3d 50 6f  | Entry....;R0=Po|
00001900  69 6e 74 65 72 20 74 6f  20 62 75 66 66 65 72 0d  |inter to buffer.|
00001910  0b e0 12 3b 52 31 3d 46  69 6c 65 48 61 6e 64 6c  |...;R1=FileHandl|
00001920  65 0d 0b ea 18 3b 52 32  3d 4c 65 6e 67 74 68 20  |e....;R2=Length |
00001930  6f 66 20 42 75 66 66 65  72 0d 0b f4 1d 3b 52 33  |of Buffer....;R3|
00001940  3d 54 65 72 6d 69 6e 61  74 69 6e 67 20 63 68 61  |=Terminating cha|
00001950  72 61 63 74 65 72 0d 0b  fe 19 3b 52 34 3d 44 69  |racter....;R4=Di|
00001960  72 65 63 74 69 6f 6e 20  74 6f 20 6c 6f 61 64 0d  |rection to load.|
00001970  0c 08 2d 3b 20 20 20 20  20 20 20 20 20 20 20 20  |..-;            |
00001980  20 20 20 20 20 20 20 20  30 20 2d 20 6c 6f 61 64  |        0 - load|
00001990  20 6e 65 78 74 20 73 74  72 69 6e 67 0d 0c 12 2d  | next string...-|
000019a0  3b 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |;               |
000019b0  20 20 20 20 20 31 20 2d  20 6c 6f 61 64 20 6c 61  |     1 - load la|
000019c0  73 74 20 73 74 72 69 6e  67 0d 0c 1c 0c 3b 4f 6e  |st string....;On|
000019d0  20 45 78 69 74 0d 0c 26  21 3b 42 75 66 66 65 72  | Exit..&!;Buffer|
000019e0  20 61 74 20 52 30 20 63  6f 6e 74 61 69 6e 73 20  | at R0 contains |
000019f0  72 65 63 6f 72 64 0d 0c  30 2c 3b 52 32 3d 50 6f  |record..0,;R2=Po|
00001a00  69 6e 74 65 72 20 74 6f  20 66 69 72 73 74 20 66  |inter to first f|
00001a10  72 65 65 20 62 79 74 65  20 69 6e 20 62 75 66 66  |ree byte in buff|
00001a20  65 72 0d 0c 3a 26 53 54  4d 46 44 20 20 20 20 20  |er..:&STMFD     |
00001a30  20 52 31 33 21 2c 7b 52  30 2d 52 31 2c 52 33 2d  | R13!,{R0-R1,R3-|
00001a40  52 31 31 2c 52 31 34 7d  0d 0c 44 17 20 41 44 44  |R11,R14}..D. ADD|
00001a50  20 20 20 20 20 20 20 52  32 2c 52 32 2c 52 30 0d  |       R2,R2,R0.|
00001a60  0c 4e 14 20 4d 4f 56 20  20 20 20 20 20 20 52 35  |.N. MOV       R5|
00001a70  2c 52 30 0d 0c 58 14 20  43 4d 50 20 20 20 20 20  |,R0..X. CMP     |
00001a80  20 20 52 34 2c 23 31 0d  0c 62 17 20 42 4e 45 20  |  R4,#1..b. BNE |
00001a90  20 20 20 20 20 20 67 65  74 6c 6f 6f 70 31 0d 0c  |      getloop1..|
00001aa0  6c 14 20 20 4d 4f 56 20  20 20 20 20 20 52 34 2c  |l.  MOV      R4,|
00001ab0  52 30 0d 0c 76 14 20 20  4d 4f 56 20 20 20 20 20  |R0..v.  MOV     |
00001ac0  20 52 36 2c 52 32 0d 0c  80 14 20 20 4d 4f 56 20  | R6,R2....  MOV |
00001ad0  20 20 20 20 20 52 30 2c  23 30 0d 0c 8a 19 20 20  |     R0,#0....  |
00001ae0  53 57 49 20 20 20 20 20  20 22 58 4f 53 5f 41 72  |SWI      "XOS_Ar|
00001af0  67 73 22 0d 0c 94 17 20  20 53 55 42 20 20 20 20  |gs"....  SUB    |
00001b00  20 20 52 32 2c 52 32 2c  23 32 0d 0c 9e 14 20 20  |  R2,R2,#2....  |
00001b10  43 4d 50 20 20 20 20 20  20 52 32 2c 23 30 0d 0c  |CMP      R2,#0..|
00001b20  a8 15 20 20 42 4c 54 20  20 20 20 20 20 67 65 74  |..  BLT      get|
00001b30  62 6f 66 0d 0c b2 14 20  20 4d 4f 56 20 20 20 20  |bof....  MOV    |
00001b40  20 20 52 30 2c 23 31 0d  0c bc 19 20 20 53 57 49  |  R0,#1....  SWI|
00001b50  20 20 20 20 20 20 22 58  4f 53 5f 41 72 67 73 22  |      "XOS_Args"|
00001b60  0d 0c c6 17 20 42 20 20  20 20 20 20 20 20 20 67  |.... B         g|
00001b70  65 74 6c 6f 6f 70 32 0d  0c d0 04 0d 0c da 0e 20  |etloop2........ |
00001b80  2e 67 65 74 6c 6f 6f 70  31 0d 0c e4 19 20 53 57  |.getloop1.... SW|
00001b90  49 20 20 20 20 20 20 20  22 58 4f 53 5f 42 47 65  |I       "XOS_BGe|
00001ba0  74 22 0d 0c ee 15 20 42  56 53 20 20 20 20 20 20  |t".... BVS      |
00001bb0  20 67 65 74 65 6f 66 0d  0c f8 19 20 53 54 52 42  | geteof.... STRB|
00001bc0  20 20 20 20 20 20 52 30  2c 5b 52 35 5d 2c 23 31  |      R0,[R5],#1|
00001bd0  0d 0d 02 14 20 4d 4f 56  43 53 20 20 20 20 20 52  |.... MOVCS     R|
00001be0  32 2c 52 35 0d 0d 0c 26  20 4c 44 4d 43 53 46 44  |2,R5...& LDMCSFD|
00001bf0  20 20 20 52 31 33 21 2c  7b 52 30 2d 52 31 2c 52  |   R13!,{R0-R1,R|
00001c00  33 2d 52 31 31 2c 52 31  34 7d 0d 0d 16 21 20 42  |3-R11,R14}...! B|
00001c10  49 43 43 53 20 20 20 20  20 52 31 34 2c 52 31 34  |ICCS     R14,R14|
00001c20  2c 23 25 31 31 31 31 3c  3c 32 38 0d 0d 20 20 20  |,#%1111<<28..   |
00001c30  84 52 43 53 20 20 20 20  20 52 31 34 2c 52 31 34  |.RCS     R14,R14|
00001c40  2c 23 25 30 30 31 30 3c  3c 32 38 0d 0d 2a 15 20  |,#%0010<<28..*. |
00001c50  4d 4f 56 43 53 53 20 20  20 20 50 43 2c 52 31 34  |MOVCSS    PC,R14|
00001c60  0d 0d 34 14 20 43 4d 50  20 20 20 20 20 20 20 52  |..4. CMP       R|
00001c70  30 2c 52 33 0d 0d 3e 11  20 ec 51 20 20 20 20 20  |0,R3..>. .Q     |
00001c80  52 32 2c 52 35 0d 0d 48  26 20 4c 44 4d 45 51 46  |R2,R5..H& LDMEQF|
00001c90  44 20 20 20 52 31 33 21  2c 7b 52 30 2d 52 31 2c  |D   R13!,{R0-R1,|
00001ca0  52 33 2d 52 31 31 2c 52  31 34 7d 0d 0d 52 21 20  |R3-R11,R14}..R! |
00001cb0  42 49 43 45 51 20 20 20  20 20 52 31 34 2c 52 31  |BICEQ     R14,R1|
00001cc0  34 2c 23 25 31 31 31 31  3c 3c 32 38 0d 0d 5c 12  |4,#%1111<<28..\.|
00001cd0  20 ec 51 53 20 20 20 20  50 43 2c 52 31 34 0d 0d  | .QS    PC,R14..|
00001ce0  66 14 20 43 4d 50 20 20  20 20 20 20 20 52 35 2c  |f. CMP       R5,|
00001cf0  52 32 0d 0d 70 1a 20 42  45 51 20 20 20 20 20 20  |R2..p. BEQ      |
00001d00  20 67 65 74 6f 76 65 72  66 6c 6f 77 0d 0d 7a 17  | getoverflow..z.|
00001d10  20 42 4e 45 20 20 20 20  20 20 20 67 65 74 6c 6f  | BNE       getlo|
00001d20  6f 70 31 0d 0d 84 04 0d  0d 8e 0e 20 2e 67 65 74  |op1........ .get|
00001d30  6c 6f 6f 70 32 0d 0d 98  19 20 53 57 49 20 20 20  |loop2.... SWI   |
00001d40  20 20 20 20 22 58 4f 53  5f 42 47 65 74 22 0d 0d  |    "XOS_BGet"..|
00001d50  a2 14 20 43 4d 50 20 20  20 20 20 20 20 52 30 2c  |.. CMP       R0,|
00001d60  52 33 0d 0d ac 18 20 41  44 44 45 51 20 20 20 20  |R3.... ADDEQ    |
00001d70  20 52 31 31 2c 52 32 2c  23 31 0d 0d b6 17 20 53  | R11,R2,#1.... S|
00001d80  55 42 45 51 20 20 20 20  20 52 32 2c 52 32 2c 23  |UBEQ     R2,R2,#|
00001d90  31 0d 0d c0 11 20 ec 51  20 20 20 20 20 52 30 2c  |1.... .Q     R0,|
00001da0  23 31 0d 0d ca 19 20 53  57 49 45 51 20 20 20 20  |#1.... SWIEQ    |
00001db0  20 22 58 4f 53 5f 41 72  67 73 22 0d 0d d4 18 20  | "XOS_Args".... |
00001dc0  53 54 4d 45 51 46 44 20  20 20 52 31 33 21 2c 7b  |STMEQFD   R13!,{|
00001dd0  52 33 7d 0d 0d de 17 20  42 45 51 20 20 20 20 20  |R3}.... BEQ     |
00001de0  20 20 67 65 74 6c 6f 6f  70 33 0d 0d e8 17 20 53  |  getloop3.... S|
00001df0  55 42 20 20 20 20 20 20  20 52 32 2c 52 32 2c 23  |UB       R2,R2,#|
00001e00  31 0d 0d f2 14 20 43 4d  50 20 20 20 20 20 20 20  |1.... CMP       |
00001e10  52 32 2c 23 30 0d 0d fc  14 20 4d 4f 56 4c 54 20  |R2,#0.... MOVLT |
00001e20  20 20 20 20 52 32 2c 23  30 0d 0e 06 14 20 4d 4f  |    R2,#0.... MO|
00001e30  56 20 20 20 20 20 20 20  52 30 2c 23 31 0d 0e 10  |V       R0,#1...|
00001e40  1a 20 42 4c 54 20 20 20  20 20 20 20 67 65 74 66  |. BLT       getf|
00001e50  69 72 73 74 72 65 63 0d  0e 1a 19 20 53 57 49 20  |irstrec.... SWI |
00001e60  20 20 20 20 20 20 22 58  4f 53 5f 41 72 67 73 22  |      "XOS_Args"|
00001e70  0d 0e 24 15 20 42 20 20  20 20 20 20 20 67 65 74  |..$. B       get|
00001e80  6c 6f 6f 70 32 0d 0e 2e  04 0d 0e 38 10 2e 67 65  |loop2......8..ge|
00001e90  74 66 69 72 73 74 72 65  63 0d 0e 42 18 20 53 57  |tfirstrec..B. SW|
00001ea0  49 20 20 20 20 20 20 22  58 4f 53 5f 41 72 67 73  |I      "XOS_Args|
00001eb0  22 0d 0e 4c 25 20 4c 44  4d 46 44 20 20 20 20 52  |"..L% LDMFD    R|
00001ec0  31 33 21 2c 7b 52 30 2d  52 31 2c 52 33 2d 52 31  |13!,{R0-R1,R3-R1|
00001ed0  31 2c 52 31 34 7d 0d 0e  56 20 20 42 49 43 20 20  |1,R14}..V  BIC  |
00001ee0  20 20 20 20 52 31 34 2c  52 31 34 2c 23 25 31 31  |    R14,R14,#%11|
00001ef0  31 31 3c 3c 32 38 0d 0e  60 1e 20 84 52 53 20 20  |11<<28..`. .RS  |
00001f00  20 20 20 50 43 2c 52 31  34 2c 23 25 30 30 31 30  |   PC,R14,#%0010|
00001f10  3c 3c 32 38 0d 0e 6a 04  0d 0e 74 0e 20 2e 67 65  |<<28..j...t. .ge|
00001f20  74 6c 6f 6f 70 33 0d 0e  7e 19 20 53 57 49 20 20  |tloop3..~. SWI  |
00001f30  20 20 20 20 20 22 58 4f  53 5f 42 47 65 74 22 0d  |     "XOS_BGet".|
00001f40  0e 88 14 20 43 4d 50 20  20 20 20 20 20 20 52 30  |... CMP       R0|
00001f50  2c 52 33 0d 0e 92 1a 20  ec 51 20 20 20 20 20 52  |,R3.... .Q     R|
00001f60  31 32 2c 23 25 30 30 30  30 3c 3c 32 38 0d 0e 9c  |12,#%0000<<28...|
00001f70  17 20 42 45 51 20 20 20  20 20 20 20 67 65 74 73  |. BEQ       gets|
00001f80  74 6f 72 65 0d 0e a6 18  20 53 54 4d 46 44 20 20  |tore.... STMFD  |
00001f90  20 20 20 52 31 33 21 2c  7b 52 30 7d 0d 0e b0 17  |   R13!,{R0}....|
00001fa0  20 41 44 44 20 20 20 20  20 20 20 52 35 2c 52 35  | ADD       R5,R5|
00001fb0  2c 23 31 0d 0e ba 14 20  43 4d 50 20 20 20 20 20  |,#1.... CMP     |
00001fc0  20 20 52 35 2c 52 36 0d  0e c4 1d 20 42 47 54 20  |  R5,R6.... BGT |
00001fd0  20 20 20 20 20 20 67 65  74 72 65 76 6f 76 65 72  |      getrevover|
00001fe0  66 6c 6f 77 0d 0e ce 17  20 53 55 42 20 20 20 20  |flow.... SUB    |
00001ff0  20 20 20 52 32 2c 52 32  2c 23 31 0d 0e d8 14 20  |   R2,R2,#1.... |
00002000  43 4d 50 20 20 20 20 20  20 20 52 32 2c 23 30 0d  |CMP       R2,#0.|
00002010  0e e2 14 20 4d 4f 56 4c  54 20 20 20 20 20 52 32  |... MOVLT     R2|
00002020  2c 23 30 0d 0e ec 14 20  4d 4f 56 20 20 20 20 20  |,#0.... MOV     |
00002030  20 20 52 30 2c 23 31 0d  0e f6 19 20 53 57 49 20  |  R0,#1.... SWI |
00002040  20 20 20 20 20 20 22 58  4f 53 5f 41 72 67 73 22  |      "XOS_Args"|
00002050  0d 0f 00 17 20 42 47 45  20 20 20 20 20 20 20 67  |.... BGE       g|
00002060  65 74 6c 6f 6f 70 33 0d  0f 0a 1d 20 4d 4f 56 20  |etloop3.... MOV |
00002070  20 20 20 20 20 20 52 31  32 2c 23 25 30 30 30 30  |      R12,#%0000|
00002080  3c 3c 32 38 0d 0f 14 04  0d 0f 1e 0e 20 2e 67 65  |<<28........ .ge|
00002090  74 73 74 6f 72 65 0d 0f  28 18 20 4c 44 4d 46 44  |tstore..(. LDMFD|
000020a0  20 20 20 20 20 52 31 33  21 2c 7b 52 30 7d 0d 0f  |     R13!,{R0}..|
000020b0  32 19 20 53 54 52 42 20  20 20 20 20 20 52 30 2c  |2. STRB      R0,|
000020c0  5b 52 34 5d 2c 23 31 0d  0f 3c 14 20 43 4d 50 20  |[R4],#1..<. CMP |
000020d0  20 20 20 20 20 20 52 30  2c 52 33 0d 0f 46 17 20  |      R0,R3..F. |
000020e0  42 4e 45 20 20 20 20 20  20 20 67 65 74 73 74 6f  |BNE       getsto|
000020f0  72 65 0d 0f 50 15 20 4d  4f 56 20 20 20 20 20 20  |re..P. MOV      |
00002100  20 52 32 2c 52 31 31 0d  0f 5a 14 20 4d 4f 56 20  | R2,R11..Z. MOV |
00002110  20 20 20 20 20 20 52 30  2c 23 31 0d 0f 64 19 20  |      R0,#1..d. |
00002120  53 57 49 20 20 20 20 20  20 20 22 58 4f 53 5f 41  |SWI       "XOS_A|
00002130  72 67 73 22 0d 0f 6e 14  20 4d 4f 56 20 20 20 20  |rgs"..n. MOV    |
00002140  20 20 20 52 32 2c 52 34  0d 0f 78 26 20 4c 44 4d  |   R2,R4..x& LDM|
00002150  46 44 20 20 20 20 20 52  31 33 21 2c 7b 52 30 2d  |FD     R13!,{R0-|
00002160  52 31 2c 52 33 2d 52 31  31 2c 52 31 34 7d 0d 0f  |R1,R3-R11,R14}..|
00002170  82 21 20 42 49 43 20 20  20 20 20 20 20 52 31 34  |.! BIC       R14|
00002180  2c 52 31 34 2c 23 25 31  31 31 31 3c 3c 32 38 0d  |,R14,#%1111<<28.|
00002190  0f 8c 19 20 84 52 53 20  20 20 20 20 20 52 31 35  |... .RS      R15|
000021a0  2c 52 31 34 2c 52 31 32  0d 0f 96 04 0d 0f a0 14  |,R14,R12........|
000021b0  20 2e 67 65 74 72 65 76  6f 76 65 72 66 6c 6f 77  | .getrevoverflow|
000021c0  0d 0f aa 18 20 4c 44 4d  46 44 20 20 20 20 20 52  |.... LDMFD     R|
000021d0  31 33 21 2c 7b 52 30 7d  0d 0f b4 19 20 53 54 52  |13!,{R0}.... STR|
000021e0  42 20 20 20 20 20 20 52  30 2c 5b 52 34 5d 2c 23  |B      R0,[R4],#|
000021f0  31 0d 0f be 14 20 43 4d  50 20 20 20 20 20 20 20  |1.... CMP       |
00002200  52 30 2c 52 33 0d 0f c8  1d 20 42 4e 45 20 20 20  |R0,R3.... BNE   |
00002210  20 20 20 20 67 65 74 72  65 76 6f 76 65 72 66 6c  |    getrevoverfl|
00002220  6f 77 0d 0f d2 1a 20 42  45 51 20 20 20 20 20 20  |ow.... BEQ      |
00002230  20 67 65 74 6f 76 65 72  66 6c 6f 77 0d 0f dc 04  | getoverflow....|
00002240  0d 0f e6 10 2e 67 65 74  6f 76 65 72 66 6c 6f 77  |.....getoverflow|
00002250  0d 0f f0 22 20 41 44 52  20 20 20 20 20 20 20 52  |..." ADR       R|
00002260  30 2c 67 65 74 6f 76 65  72 66 6c 6f 77 65 72 72  |0,getoverflowerr|
00002270  6f 72 0d 0f fa 26 20 4c  44 4d 46 44 20 20 20 20  |or...& LDMFD    |
00002280  20 52 31 33 21 2c 7b 52  30 2d 52 31 2c 52 33 2d  | R13!,{R0-R1,R3-|
00002290  52 31 31 2c 52 31 34 7d  0d 10 04 21 20 42 49 43  |R11,R14}...! BIC|
000022a0  20 20 20 20 20 20 20 52  31 34 2c 52 31 34 2c 23  |       R14,R14,#|
000022b0  25 31 31 31 31 3c 3c 32  38 0d 10 0e 20 20 84 52  |%1111<<28...  .R|
000022c0  53 20 20 20 20 20 20 52  31 35 2c 52 31 34 2c 23  |S      R15,R14,#|
000022d0  25 30 30 30 31 3c 3c 32  38 0d 10 18 04 0d 10 22  |%0001<<28......"|
000022e0  16 20 2e 67 65 74 6f 76  65 72 66 6c 6f 77 65 72  |. .getoverflower|
000022f0  72 6f 72 0d 10 2c 14 20  45 51 55 44 20 20 20 20  |ror..,. EQUD    |
00002300  20 20 20 26 31 45 36 0d  10 36 21 20 45 51 55 53  |   &1E6..6! EQUS|
00002310  20 20 20 20 20 20 20 22  42 75 66 66 65 72 20 4f  |       "Buffer O|
00002320  76 65 72 66 6c 6f 77 22  0d 10 40 11 20 45 51 55  |verflow"..@. EQU|
00002330  42 20 20 20 20 20 20 20  30 0d 10 4a 0a 20 41 4c  |B       0..J. AL|
00002340  49 47 4e 0d 10 54 04 0d  10 5e 0b 2e 67 65 74 62  |IGN..T...^..getb|
00002350  6f 66 0d 10 68 1d 20 41  44 52 20 20 20 20 20 20  |of..h. ADR      |
00002360  20 52 30 2c 67 65 74 62  6f 66 65 72 72 6f 72 0d  | R0,getboferror.|
00002370  10 72 14 20 4d 4f 56 20  20 20 20 20 20 20 52 34  |.r. MOV       R4|
00002380  2c 23 30 0d 10 7c 26 20  4c 44 4d 46 44 20 20 20  |,#0..|& LDMFD   |
00002390  20 20 52 31 33 21 2c 7b  52 30 2d 52 31 2c 52 33  |  R13!,{R0-R1,R3|
000023a0  2d 52 31 31 2c 52 31 34  7d 0d 10 86 21 20 42 49  |-R11,R14}...! BI|
000023b0  43 20 20 20 20 20 20 20  52 31 34 2c 52 31 34 2c  |C       R14,R14,|
000023c0  23 25 31 31 31 31 3c 3c  32 38 0d 10 90 20 20 84  |#%1111<<28...  .|
000023d0  52 53 20 20 20 20 20 20  52 31 35 2c 52 31 34 2c  |RS      R15,R14,|
000023e0  23 25 30 30 30 31 3c 3c  32 38 0d 10 9a 04 0d 10  |#%0001<<28......|
000023f0  a4 11 20 2e 67 65 74 62  6f 66 65 72 72 6f 72 0d  |.. .getboferror.|
00002400  10 ae 14 20 45 51 55 44  20 20 20 20 20 20 20 26  |... EQUD       &|
00002410  31 45 36 0d 10 b8 1f 20  45 51 55 53 20 20 20 20  |1E6.... EQUS    |
00002420  20 20 20 22 53 74 61 72  74 20 4f 66 20 46 69 6c  |   "Start Of Fil|
00002430  65 22 0d 10 c2 11 20 45  51 55 42 20 20 20 20 20  |e".... EQUB     |
00002440  20 20 30 0d 10 cc 0a 20  41 4c 49 47 4e 0d 10 d6  |  0.... ALIGN...|
00002450  04 0d 10 e0 0c 20 2e 67  65 74 65 6f 66 0d 10 ea  |..... .geteof...|
00002460  1d 20 41 44 52 20 20 20  20 20 20 20 52 30 2c 67  |. ADR       R0,g|
00002470  65 74 65 6f 66 65 72 72  6f 72 0d 10 f4 26 20 4c  |eteoferror...& L|
00002480  44 4d 46 44 20 20 20 20  20 52 31 33 21 2c 7b 52  |DMFD     R13!,{R|
00002490  30 2d 52 31 2c 52 33 2d  52 31 31 2c 52 31 34 7d  |0-R1,R3-R11,R14}|
000024a0  0d 10 fe 21 20 42 49 43  20 20 20 20 20 20 20 52  |...! BIC       R|
000024b0  31 34 2c 52 31 34 2c 23  25 31 31 31 31 3c 3c 32  |14,R14,#%1111<<2|
000024c0  38 0d 11 08 20 20 84 52  53 20 20 20 20 20 20 52  |8...  .RS      R|
000024d0  31 35 2c 52 31 34 2c 23  25 30 30 30 31 3c 3c 32  |15,R14,#%0001<<2|
000024e0  38 0d 11 12 04 0d 11 1c  04 0d 11 26 11 20 2e 67  |8..........&. .g|
000024f0  65 74 65 6f 66 65 72 72  6f 72 0d 11 30 14 20 45  |eteoferror..0. E|
00002500  51 55 44 20 20 20 20 20  20 20 26 31 45 36 0d 11  |QUD       &1E6..|
00002510  3a 1d 20 45 51 55 53 20  20 20 20 20 20 20 22 45  |:. EQUS       "E|
00002520  6e 64 20 4f 66 20 46 69  6c 65 22 0d 11 44 11 20  |nd Of File"..D. |
00002530  45 51 55 42 20 20 20 20  20 20 20 30 0d 11 4e 0a  |EQUB       0..N.|
00002540  20 41 4c 49 47 4e 0d 11  58 04 0d 11 62 04 0d 11  | ALIGN..X...b...|
00002550  6c 08 2e 70 75 74 0d 11  76 0d 3b 4f 6e 20 45 6e  |l..put..v.;On En|
00002560  74 72 79 0d 11 80 19 3b  52 30 3d 50 6f 69 6e 74  |try....;R0=Point|
00002570  65 72 20 74 6f 20 73 74  72 69 6e 67 0d 11 8a 12  |er to string....|
00002580  3b 52 31 3d 46 69 6c 65  48 61 6e 64 6c 65 0d 11  |;R1=FileHandle..|
00002590  94 1d 3b 52 32 3d 54 65  72 6d 69 6e 61 74 69 6e  |..;R2=Terminatin|
000025a0  67 20 63 68 61 72 61 63  74 65 72 0d 11 9e 05 3b  |g character....;|
000025b0  0d 11 a8 0c 3b 4f 6e 20  45 78 69 74 0d 11 b2 2a  |....;On Exit...*|
000025c0  3b 73 74 72 69 6e 67 20  61 74 20 52 30 20 69 73  |;string at R0 is|
000025d0  20 77 72 69 74 74 65 6e  20 74 6f 20 66 69 6c 65  | written to file|
000025e0  20 61 74 20 52 31 0d 11  bc 04 0d 11 c6 21 53 54  | at R1.......!ST|
000025f0  4d 46 44 20 20 20 20 20  20 20 52 31 33 21 2c 7b  |MFD       R13!,{|
00002600  52 30 2d 52 31 32 2c 52  31 34 7d 0d 11 d0 15 20  |R0-R12,R14}.... |
00002610  4d 4f 56 20 20 20 20 20  20 20 20 52 34 2c 52 31  |MOV        R4,R1|
00002620  0d 11 da 15 20 4d 4f 56  20 20 20 20 20 20 20 20  |.... MOV        |
00002630  52 31 2c 52 32 0d 11 e4  13 20 42 4c 20 20 20 20  |R1,R2.... BL    |
00002640  20 20 20 20 20 6c 65 6e  0d 11 ee 18 20 41 44 44  |     len.... ADD|
00002650  20 20 20 20 20 20 20 20  52 33 2c 52 31 2c 23 31  |        R3,R1,#1|
00002660  0d 11 f8 15 20 4d 4f 56  20 20 20 20 20 20 20 20  |.... MOV        |
00002670  52 31 2c 52 34 0d 12 02  15 20 4d 4f 56 20 20 20  |R1,R4.... MOV   |
00002680  20 20 20 20 20 52 32 2c  52 30 0d 12 0c 15 20 4d  |     R2,R0.... M|
00002690  4f 56 20 20 20 20 20 20  20 20 52 30 2c 23 32 0d  |OV        R0,#2.|
000026a0  12 16 1a 20 53 57 49 20  20 20 20 20 20 20 20 22  |... SWI        "|
000026b0  58 4f 53 5f 47 42 50 42  22 0d 12 20 21 4c 44 4d  |XOS_GBPB".. !LDM|
000026c0  46 44 20 20 20 20 20 20  20 52 31 33 21 2c 7b 52  |FD       R13!,{R|
000026d0  30 2d 52 31 32 2c 52 31  34 7d 0d 12 2a 22 42 49  |0-R12,R14}..*"BI|
000026e0  43 20 20 20 20 20 20 20  20 20 52 31 35 2c 52 31  |C         R15,R1|
000026f0  34 2c 23 25 31 31 31 31  3c 3c 32 38 0d 12 34 04  |4,#%1111<<28..4.|
00002700  0d 12 3e 0a 2e 6c 6f 77  65 72 0d 12 48 0d 3b 4f  |..>..lower..H.;O|
00002710  6e 20 45 6e 74 72 79 0d  12 52 19 3b 52 30 3d 70  |n Entry..R.;R0=p|
00002720  6f 69 6e 74 65 72 20 74  6f 20 73 74 72 69 6e 67  |ointer to string|
00002730  0d 12 5c 1d 3b 52 31 3d  74 65 72 6d 69 6e 61 74  |..\.;R1=terminat|
00002740  69 6e 67 20 63 68 61 72  61 63 74 65 72 0d 12 66  |ing character..f|
00002750  05 3b 0d 12 70 0c 3b 4f  6e 20 45 78 69 74 0d 12  |.;..p.;On Exit..|
00002760  7a 22 3b 53 74 72 69 6e  67 20 61 74 20 52 30 20  |z";String at R0 |
00002770  69 73 20 69 6e 20 6c 6f  77 65 72 20 63 61 73 65  |is in lower case|
00002780  0d 12 84 04 0d 12 8e 20  53 54 4d 46 44 20 20 20  |....... STMFD   |
00002790  20 20 20 20 52 31 33 21  2c 7b 52 30 2d 52 33 2c  |    R13!,{R0-R3,|
000027a0  52 31 34 7d 0d 12 98 0e  2e 6c 6f 77 65 72 6c 6f  |R14}.....lowerlo|
000027b0  6f 70 0d 12 a2 35 4c 44  52 42 20 20 20 20 20 20  |op...5LDRB      |
000027c0  20 20 52 33 2c 5b 52 30  5d 20 20 20 20 20 20 20  |  R3,[R0]       |
000027d0  20 20 20 20 20 3b 52 33  3d 6e 65 78 74 20 63 68  |     ;R3=next ch|
000027e0  61 72 61 63 74 65 72 0d  12 ac 1a 43 4d 50 20 20  |aracter....CMP  |
000027f0  20 20 20 20 20 20 20 52  33 2c 23 97 28 22 41 22  |       R3,#.("A"|
00002800  29 0d 12 b6 19 42 4c 54  20 20 20 20 20 20 20 20  |)....BLT        |
00002810  20 6c 6f 77 65 72 6e 65  78 74 0d 12 c0 1a 43 4d  | lowernext....CM|
00002820  50 20 20 20 20 20 20 20  20 20 52 33 2c 23 97 28  |P         R3,#.(|
00002830  22 5a 22 29 0d 12 ca 19  42 48 49 20 20 20 20 20  |"Z")....BHI     |
00002840  20 20 20 20 6c 6f 77 65  72 6e 65 78 74 0d 12 d4  |    lowernext...|
00002850  32 84 52 20 20 20 20 20  20 20 20 20 52 33 2c 52  |2.R         R3,R|
00002860  33 2c 23 26 32 30 20 20  20 20 20 20 20 20 20 3b  |3,#&20         ;|
00002870  44 6f 20 74 68 65 20 62  75 73 69 6e 65 73 73 0d  |Do the business.|
00002880  12 de 42 53 54 52 42 20  20 20 20 20 20 20 20 52  |..BSTRB        R|
00002890  33 2c 5b 52 30 5d 20 20  20 20 20 20 20 20 20 20  |3,[R0]          |
000028a0  20 20 3b 53 74 6f 72 65  20 63 68 61 72 61 63 74  |  ;Store charact|
000028b0  65 72 20 62 61 63 6b 20  69 6e 20 73 74 72 69 6e  |er back in strin|
000028c0  67 0d 12 e8 0e 2e 6c 6f  77 65 72 6e 65 78 74 0d  |g.....lowernext.|
000028d0  12 f2 3b 43 4d 50 20 20  20 20 20 20 20 20 20 52  |..;CMP         R|
000028e0  33 2c 52 31 20 20 20 20  20 20 20 20 20 20 20 20  |3,R1            |
000028f0  20 20 3b 63 68 65 63 6b  20 66 6f 72 20 65 6e 64  |  ;check for end|
00002900  20 6f 66 20 73 74 72 69  6e 67 0d 12 fc 18 41 44  | of string....AD|
00002910  44 4e 45 20 20 20 20 20  20 20 52 30 2c 52 30 2c  |DNE       R0,R0,|
00002920  23 31 0d 13 06 19 42 4e  45 20 20 20 20 20 20 20  |#1....BNE       |
00002930  20 20 6c 6f 77 65 72 6c  6f 6f 70 0d 13 10 20 4c  |  lowerloop... L|
00002940  44 4d 46 44 20 20 20 20  20 20 20 52 31 33 21 2c  |DMFD       R13!,|
00002950  7b 52 30 2d 52 33 2c 52  31 34 7d 0d 13 1a 1f 42  |{R0-R3,R14}....B|
00002960  49 43 20 20 20 20 20 20  20 20 20 52 31 35 2c 52  |IC         R15,R|
00002970  31 34 2c 23 25 31 3c 3c  32 38 0d 13 24 04 0d 13  |14,#%1<<28..$...|
00002980  2e 0a 2e 75 70 70 65 72  0d 13 38 0d 3b 4f 6e 20  |...upper..8.;On |
00002990  45 6e 74 72 79 0d 13 42  19 3b 52 30 3d 70 6f 69  |Entry..B.;R0=poi|
000029a0  6e 74 65 72 20 74 6f 20  73 74 72 69 6e 67 0d 13  |nter to string..|
000029b0  4c 1d 3b 52 31 3d 74 65  72 6d 69 6e 61 74 69 6e  |L.;R1=terminatin|
000029c0  67 20 63 68 61 72 61 63  74 65 72 0d 13 56 05 3b  |g character..V.;|
000029d0  0d 13 60 0c 3b 4f 6e 20  45 78 69 74 0d 13 6a 22  |..`.;On Exit..j"|
000029e0  3b 53 74 72 69 6e 67 20  61 74 20 52 30 20 69 73  |;String at R0 is|
000029f0  20 69 6e 20 75 70 70 65  72 20 63 61 73 65 0d 13  | in upper case..|
00002a00  74 04 0d 13 7e 20 53 54  4d 46 44 20 20 20 20 20  |t...~ STMFD     |
00002a10  20 20 52 31 33 21 2c 7b  52 30 2d 52 33 2c 52 31  |  R13!,{R0-R3,R1|
00002a20  34 7d 0d 13 88 0e 2e 75  70 70 65 72 6c 6f 6f 70  |4}.....upperloop|
00002a30  0d 13 92 35 4c 44 52 42  20 20 20 20 20 20 20 20  |...5LDRB        |
00002a40  52 33 2c 5b 52 30 5d 20  20 20 20 20 20 20 20 20  |R3,[R0]         |
00002a50  20 20 20 3b 52 33 3d 6e  65 78 74 20 63 68 61 72  |   ;R3=next char|
00002a60  61 63 74 65 72 0d 13 9c  1a 43 4d 50 20 20 20 20  |acter....CMP    |
00002a70  20 20 20 20 20 52 33 2c  23 97 28 22 61 22 29 0d  |     R3,#.("a").|
00002a80  13 a6 19 42 4c 54 20 20  20 20 20 20 20 20 20 75  |...BLT         u|
00002a90  70 70 65 72 6e 65 78 74  0d 13 b0 1a 43 4d 50 20  |ppernext....CMP |
00002aa0  20 20 20 20 20 20 20 20  52 33 2c 23 97 28 22 7a  |        R3,#.("z|
00002ab0  22 29 0d 13 ba 19 42 48  49 20 20 20 20 20 20 20  |")....BHI       |
00002ac0  20 20 75 70 70 65 72 6e  65 78 74 0d 13 c4 31 80  |  uppernext...1.|
00002ad0  20 20 20 20 20 20 20 20  20 52 33 2c 52 33 2c 23  |         R3,R3,#|
00002ae0  26 44 46 20 20 20 20 20  20 20 20 20 3b 44 6f 20  |&DF         ;Do |
00002af0  74 68 65 20 62 75 73 69  6e 65 73 73 0d 13 ce 42  |the business...B|
00002b00  53 54 52 42 20 20 20 20  20 20 20 20 52 33 2c 5b  |STRB        R3,[|
00002b10  52 30 5d 20 20 20 20 20  20 20 20 20 20 20 20 3b  |R0]            ;|
00002b20  53 74 6f 72 65 20 63 68  61 72 61 63 74 65 72 20  |Store character |
00002b30  62 61 63 6b 20 69 6e 20  73 74 72 69 6e 67 0d 13  |back in string..|
00002b40  d8 0e 2e 75 70 70 65 72  6e 65 78 74 0d 13 e2 3b  |...uppernext...;|
00002b50  43 4d 50 20 20 20 20 20  20 20 20 20 52 33 2c 52  |CMP         R3,R|
00002b60  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |1              ;|
00002b70  63 68 65 63 6b 20 66 6f  72 20 65 6e 64 20 6f 66  |check for end of|
00002b80  20 73 74 72 69 6e 67 0d  13 ec 18 41 44 44 4e 45  | string....ADDNE|
00002b90  20 20 20 20 20 20 20 52  30 2c 52 30 2c 23 31 0d  |       R0,R0,#1.|
00002ba0  13 f6 19 42 4e 45 20 20  20 20 20 20 20 20 20 75  |...BNE         u|
00002bb0  70 70 65 72 6c 6f 6f 70  0d 14 00 20 4c 44 4d 46  |pperloop... LDMF|
00002bc0  44 20 20 20 20 20 20 20  52 31 33 21 2c 7b 52 30  |D       R13!,{R0|
00002bd0  2d 52 33 2c 52 31 34 7d  0d 14 0a 1f 42 49 43 20  |-R3,R14}....BIC |
00002be0  20 20 20 20 20 20 20 20  52 31 35 2c 52 31 34 2c  |        R15,R14,|
00002bf0  23 25 31 3c 3c 32 38 0d  14 14 04 0d 14 1e 04 0d  |#%1<<28.........|
00002c00  14 28 04 0d 14 32 05 5d  0d 14 3c 05 ed 0d 14 46  |.(...2.]..<....F|
00002c10  2d ff 20 22 53 41 56 45  20 53 74 72 69 6e 67 55  |-. "SAVE StringU|
00002c20  74 69 6c 20 22 2b c3 7e  28 63 6f 64 65 25 29 2b  |til "+.~(code%)+|
00002c30  22 20 22 2b c3 7e 28 4f  25 29 0d 14 50 1e 2a 53  |" "+.~(O%)..P.*S|
00002c40  45 54 54 59 50 45 20 53  74 72 69 6e 67 55 74 69  |ETTYPE StringUti|
00002c50  6c 20 4d 6f 64 75 6c 65  0d ff                    |l Module..|
00002c5a