Home » Archimedes archive » Acorn User » AU 1994-01.adf » !StarInfo_StarInfo » Anderson/PackerProg
Anderson/PackerProg
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 1994-01.adf » !StarInfo_StarInfo |
Filename: | Anderson/PackerProg |
Read OK: | ✔ |
File size: | 0F50 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >StringPacker Module 20REM By Robert Anderson 30REM For 32-bit machines 40REM (c) BAU January 1994 50: 60DIM code% 1200 70bits=0:byte=1:bit=2 80swichunk=&CE900 90FOR pass%=4 TO 6 STEP 2 100P%=0:O%=code% 110[OPT pass% 120EQUD 0 130EQUD init 140EQUD 0 150EQUD 0 160EQUD title 170EQUD help 180EQUD helpcommand 190EQUD swichunk 200EQUD swicode 210EQUD swi_table 220EQUD 0 230: 240.title 250EQUS "StringPacker" 260EQUB 0 270ALIGN 280: 290.help 300EQUS "String Packer"+CHR$9+"1.01 (10 Aug 1993) By Robert Anderson" 310EQUB 0 320ALIGN 330: 340.helpcommand 350EQUS "StringPacker" 360EQUB 0 370ALIGN 380EQUD 0 390EQUD 0 400EQUD 0 410EQUD packhelp 420: 430.packhelp 440EQUS "The StringPacker module packs and unpacks BASIC strings, via two SYS commands :"+CHR$13 450EQUS CHR$9+"SYS "+CHR$34+"Packer_PackString"+CHR$34+",valid$,start$ TO addr% : packed$= $addr%"+CHR$13 460EQUS CHR$9+"SYS "+CHR$34+"Packer_UnpackString"+CHR$34+",valid$,packed$ TO unpacked$"+CHR$13 470EQUS "where valid$ is the validation string containing all the characters that can be used in the string concerned, and start$ is the string to be compacted." 480EQUB 0 490ALIGN 500: 510.swi_table 520EQUS "Packer" 530EQUB 0 540EQUS "PackString" 550EQUB 0 560EQUS "UnpackString" 570EQUB 0 580EQUB 0 590ALIGN 600: 610.init 620STMFD R13!,{R14} 630MOV R6,R12 640LDR R12,[R12] 650MOV R0,#6 660MOV R3,#&100 670SWI "OS_Module" 680STR R2,[R6] 690MOV R12,R6 700LDMFD R13!,{PC} 710: 720.swicode 730STMFD R13!,{R2-R11,R14} 740MOV R6,R0 750MOV R10,R1 760LDR R12,[R12] 770CMP R11,#2 780ADDCC PC,PC,R11,LSL#2 790LDMFD R13!,{R2-R11,PC} 800B pack 810B unpack 820: 830.pack 840MOV byte,#0 850MOV R3,#0 860BL countbits 870CMP bits,#8 880BGE dontbother 890MOV bit,#7 900MOV R4,#0 910LDRB R8,[R4,R10] 920CMP R8,#0 930BEQ finish 940.loop 950MOV R11,#0 960.instr 970LDRB R9,[R11,R6] 980ADD R11,R11,#1 990CMP R9,#0 1000BEQ invalid 1010CMP R9,R8 1020BNE instr 1030MOV R8,R11 1040SUB R5,bits,#1 1050MOV R11,#1 1060.bitloop 1070ANDS R9,R8,R11,LSL R5 1080ORRNE R3,R3,R11,LSL bit 1090SUBS bit,bit,#1 1100BPL dontsave 1110MOV bit,#7 1120CMP R3,#13 1130ADDGE R3,R3,#1 1140STRB R3,[byte,R12] 1150ADD byte,byte,#1 1160MOV R3,#0 1170.dontsave 1180SUBS R5,R5,#1 1190BPL bitloop 1200ADD R4,R4,#1 1210LDRB R8,[R4,R10] 1220CMP R8,#0 1230BNE loop 1240CMP bit,#7 1250BEQ finish 1260CMP R3,#13 1270ADDGE R3,R3,#1 1280STRB R3,[byte,R12] 1290ADD byte,byte,#1 1300.finish 1310MOV R3,#13 1320STRB R3,[byte,R12] 1330MOV R1,R0 1340MOV R0,R12 1350LDMFD R13!,{R2-R11,PC} 1360: 1370.countbits 1380MOV R9,#0 1390.findlen 1400LDRB R8,[R9,R6] 1410ADD R9,R9,#1 1420CMP R8,#0 1430BNE findlen 1440MOV R0,#7 1450MOV R8,#256 1460MOV R5,#2 1470.countloop 1480SUB R8,R8,#3 1490CMP R9,R8 1500BGE out 1510ADD R8,R8,#3 1520SUB R0,R0,#1 1530MOV R8,R5,LSL R0 1540B countloop 1550.out 1560ADD R0,R0,#2 1570MOV PC,R14 1580: 1590.invalid 1600ADR R0,errorblock 1610STRB R8,[R0,#15] 1620LDMFD R13!,{R2-R11,R14} 1630ORRS PC,R14,#1<<28 1640.errorblock 1650EQUD 345 1660EQUS "Character ' ' not in validation string" 1670EQUB 0 1680ALIGN 1690: 1700.dontbother 1710MOV R11,#0 1720.findend 1730ADD R11,R11,#1 1740LDRB R8,[R10,R11] 1750CMP R8,#0 1760BNE findend 1770MOV R8,#13 1780STRB R8,[R10,R11] 1790MOV R1,#8 1800MOV R0,R10 1810LDMFD R13!,{R2-R11,PC} 1820: 1830.unpack 1840MOV byte,#0 1850MOV R4,#0 1860MOV R11,#1 1870BL countbits 1880CMP bits,#8 1890BGE dontbother 1900MOV bit,#7 1910LDRB R8,[R10,byte] 1920CMP R8,#14 1930SUBGE R8,R8,#1 1940.loop2 1950MOV R3,#0 1960SUB R5,bits,#1 1970.bitloop2 1980ANDS R9,R8,R11,LSL bit 1990ORRNE R3,R3,R11,LSL R5 2000SUBS bit,bit,#1 2010BPL dontload 2020MOV bit,#7 2030ADD byte,byte,#1 2040LDRB R8,[R10,byte] 2050CMP R8,#14 2060SUBGE R8,R8,#1 2070.dontload 2080SUBS R5,R5,#1 2090BPL bitloop2 2100SUB R3,R3,#1 2110LDRB R9,[R6,R3] 2120ADD R3,R3,#1 2130STRB R9,[R12,R4] 2140ADD R4,R4,#1 2150CMP R3,#0 2160BNE loop2 2170SUB R4,R4,#1 2180MOV R9,#13 2190STRB R9,[R12,R4] 2200MOV R1,R0 2210MOV R0,R12 2220LDMFD R13!,{R2-R11,PC} 2230]:NEXT pass% 2240OSCLI "Save Packer "+STR$~code%+"+"+STR$~P% 2250*Settype Packer Module 2260*RMload Packer 2270PRINT"Module saved as 'Packer'" 2280END
� >StringPacker Module � By Robert Anderson � For 32-bit machines (� (c) BAU January 1994 2: <� code% 1200 Fbits=0:byte=1:bit=2 Pswichunk=&CE900 Z� pass%=4 � 6 � 2 dP%=0:O%=code% n[OPT pass% x EQUD 0 � EQUD init � EQUD 0 � EQUD 0 �EQUD title � EQUD help �EQUD helpcommand �EQUD swichunk �EQUD swicode �EQUD swi_table � EQUD 0 �: � .title �EQUS "StringPacker" EQUB 0 ALIGN : " .help ,DEQUS "String Packer"+�9+"1.01 (10 Aug 1993) By Robert Anderson" 6 EQUB 0 @ ALIGN J: T.helpcommand ^EQUS "StringPacker" h EQUB 0 r ALIGN | EQUD 0 � EQUD 0 � EQUD 0 �EQUD packhelp �: � .packhelp �^EQUS "The StringPacker module packs and unpacks BASIC strings, via two SYS commands :"+�13 �^EQUS �9+"SYS "+�34+"Packer_PackString"+�34+",valid$,start$ TO addr% : packed$= $addr%"+�13 �SEQUS �9+"SYS "+�34+"Packer_UnpackString"+�34+",valid$,packed$ TO unpacked$"+�13 ֢EQUS "where valid$ is the validation string containing all the characters that can be used in the string concerned, and start$ is the string to be compacted." � EQUB 0 � ALIGN �: �.swi_table EQUS "Packer" EQUB 0 EQUS "PackString" & EQUB 0 0EQUS "UnpackString" : EQUB 0 D EQUB 0 N ALIGN X: b .init lSTMFD R13!,{R14} vMOV R6,R12 �LDR R12,[R12] � MOV R0,#6 �MOV R3,#&100 �SWI "OS_Module" �STR R2,[R6] �MOV R12,R6 �LDMFD R13!,{PC} �: �.swicode �STMFD R13!,{R2-R11,R14} � MOV R6,R0 �MOV R10,R1 �LDR R12,[R12] CMP R11,#2 ADDCC PC,PC,R11,LSL#2 LDMFD R13!,{R2-R11,PC} B pack *B unpack 4: > .pack HMOV byte,#0 R MOV R3,#0 \BL countbits fCMP bits,#8 pBGE dontbother zMOV bit,#7 � MOV R4,#0 �LDRB R8,[R4,R10] � CMP R8,#0 �BEQ finish � .loop �MOV R11,#0 � .instr �LDRB R9,[R11,R6] �ADD R11,R11,#1 � CMP R9,#0 �BEQ invalid � CMP R9,R8 � BNE instr MOV R8,R11 SUB R5,bits,#1 MOV R11,#1 $.bitloop .�S R9,R8,R11,LSL R5 8�RNE R3,R3,R11,LSL bit BSUBS bit,bit,#1 LBPL dontsave VMOV bit,#7 `CMP R3,#13 jADDGE R3,R3,#1 tSTRB R3,[byte,R12] ~ADD byte,byte,#1 � MOV R3,#0 � .dontsave �SUBS R5,R5,#1 �BPL bitloop �ADD R4,R4,#1 �LDRB R8,[R4,R10] � CMP R8,#0 �BNE loop �CMP bit,#7 �BEQ finish �CMP R3,#13 �ADDGE R3,R3,#1 STRB R3,[byte,R12] ADD byte,byte,#1 .finish MOV R3,#13 (STRB R3,[byte,R12] 2 MOV R1,R0 <MOV R0,R12 FLDMFD R13!,{R2-R11,PC} P: Z.countbits d MOV R9,#0 n.findlen xLDRB R8,[R9,R6] �ADD R9,R9,#1 � CMP R8,#0 �BNE findlen � MOV R0,#7 �MOV R8,#256 � MOV R5,#2 �.countloop �SUB R8,R8,#3 � CMP R9,R8 �BGE out �ADD R8,R8,#3 �SUB R0,R0,#1 �MOV R8,R5,LSL R0 B countloop .out ADD R0,R0,#2 "MOV PC,R14 ,: 6.invalid @ADR R0,errorblock JSTRB R8,[R0,#15] TLDMFD R13!,{R2-R11,R14} ^�RS PC,R14,#1<<28 h.errorblock rEQUD 345 |1EQUS "Character ' ' not in validation string" � EQUB 0 � ALIGN �: �.dontbother �MOV R11,#0 �.findend �ADD R11,R11,#1 �LDRB R8,[R10,R11] � CMP R8,#0 �BNE findend �MOV R8,#13 �STRB R8,[R10,R11] � MOV R1,#8 MOV R0,R10 LDMFD R13!,{R2-R11,PC} : &.unpack 0MOV byte,#0 : MOV R4,#0 DMOV R11,#1 NBL countbits XCMP bits,#8 bBGE dontbother lMOV bit,#7 vLDRB R8,[R10,byte] �CMP R8,#14 �SUBGE R8,R8,#1 � .loop2 � MOV R3,#0 �SUB R5,bits,#1 � .bitloop2 ��S R9,R8,R11,LSL bit ��RNE R3,R3,R11,LSL R5 �SUBS bit,bit,#1 �BPL dontload �MOV bit,#7 �ADD byte,byte,#1 �LDRB R8,[R10,byte] CMP R8,#14 SUBGE R8,R8,#1 .dontload SUBS R5,R5,#1 *BPL bitloop2 4SUB R3,R3,#1 >LDRB R9,[R6,R3] HADD R3,R3,#1 RSTRB R9,[R12,R4] \ADD R4,R4,#1 f CMP R3,#0 p BNE loop2 zSUB R4,R4,#1 �MOV R9,#13 �STRB R9,[R12,R4] � MOV R1,R0 �MOV R0,R12 �LDMFD R13!,{R2-R11,PC} � ]:� pass% �%� "Save Packer "+�~code%+"+"+�~P% �*Settype Packer Module �*RMload Packer ��"Module saved as 'Packer'" �� �
00000000 0d 00 0a 1e f4 20 20 20 20 20 3e 53 74 72 69 6e |..... >Strin| 00000010 67 50 61 63 6b 65 72 20 4d 6f 64 75 6c 65 0d 00 |gPacker Module..| 00000020 14 19 f4 20 42 79 20 20 52 6f 62 65 72 74 20 41 |... By Robert A| 00000030 6e 64 65 72 73 6f 6e 0d 00 1e 19 f4 20 46 6f 72 |nderson..... For| 00000040 20 33 32 2d 62 69 74 20 6d 61 63 68 69 6e 65 73 | 32-bit machines| 00000050 0d 00 28 1a f4 20 28 63 29 20 42 41 55 20 4a 61 |..(.. (c) BAU Ja| 00000060 6e 75 61 72 79 20 31 39 39 34 0d 00 32 05 3a 0d |nuary 1994..2.:.| 00000070 00 3c 10 de 20 63 6f 64 65 25 20 31 32 30 30 0d |.<.. code% 1200.| 00000080 00 46 17 62 69 74 73 3d 30 3a 62 79 74 65 3d 31 |.F.bits=0:byte=1| 00000090 3a 62 69 74 3d 32 0d 00 50 13 73 77 69 63 68 75 |:bit=2..P.swichu| 000000a0 6e 6b 3d 26 43 45 39 30 30 0d 00 5a 15 e3 20 70 |nk=&CE900..Z.. p| 000000b0 61 73 73 25 3d 34 20 b8 20 36 20 88 20 32 0d 00 |ass%=4 . 6 . 2..| 000000c0 64 11 50 25 3d 30 3a 4f 25 3d 63 6f 64 65 25 0d |d.P%=0:O%=code%.| 000000d0 00 6e 0e 5b 4f 50 54 20 70 61 73 73 25 0d 00 78 |.n.[OPT pass%..x| 000000e0 0a 45 51 55 44 20 30 0d 00 82 0d 45 51 55 44 20 |.EQUD 0....EQUD | 000000f0 69 6e 69 74 0d 00 8c 0a 45 51 55 44 20 30 0d 00 |init....EQUD 0..| 00000100 96 0a 45 51 55 44 20 30 0d 00 a0 0e 45 51 55 44 |..EQUD 0....EQUD| 00000110 20 74 69 74 6c 65 0d 00 aa 0d 45 51 55 44 20 68 | title....EQUD h| 00000120 65 6c 70 0d 00 b4 14 45 51 55 44 20 68 65 6c 70 |elp....EQUD help| 00000130 63 6f 6d 6d 61 6e 64 0d 00 be 11 45 51 55 44 20 |command....EQUD | 00000140 73 77 69 63 68 75 6e 6b 0d 00 c8 10 45 51 55 44 |swichunk....EQUD| 00000150 20 73 77 69 63 6f 64 65 0d 00 d2 12 45 51 55 44 | swicode....EQUD| 00000160 20 73 77 69 5f 74 61 62 6c 65 0d 00 dc 0a 45 51 | swi_table....EQ| 00000170 55 44 20 30 0d 00 e6 05 3a 0d 00 f0 0a 2e 74 69 |UD 0....:.....ti| 00000180 74 6c 65 0d 00 fa 17 45 51 55 53 20 22 53 74 72 |tle....EQUS "Str| 00000190 69 6e 67 50 61 63 6b 65 72 22 0d 01 04 0a 45 51 |ingPacker"....EQ| 000001a0 55 42 20 30 0d 01 0e 09 41 4c 49 47 4e 0d 01 18 |UB 0....ALIGN...| 000001b0 05 3a 0d 01 22 09 2e 68 65 6c 70 0d 01 2c 44 45 |.:.."..help..,DE| 000001c0 51 55 53 20 22 53 74 72 69 6e 67 20 50 61 63 6b |QUS "String Pack| 000001d0 65 72 22 2b bd 39 2b 22 31 2e 30 31 20 28 31 30 |er"+.9+"1.01 (10| 000001e0 20 41 75 67 20 31 39 39 33 29 20 20 42 79 20 52 | Aug 1993) By R| 000001f0 6f 62 65 72 74 20 41 6e 64 65 72 73 6f 6e 22 0d |obert Anderson".| 00000200 01 36 0a 45 51 55 42 20 30 0d 01 40 09 41 4c 49 |.6.EQUB 0..@.ALI| 00000210 47 4e 0d 01 4a 05 3a 0d 01 54 10 2e 68 65 6c 70 |GN..J.:..T..help| 00000220 63 6f 6d 6d 61 6e 64 0d 01 5e 17 45 51 55 53 20 |command..^.EQUS | 00000230 22 53 74 72 69 6e 67 50 61 63 6b 65 72 22 0d 01 |"StringPacker"..| 00000240 68 0a 45 51 55 42 20 30 0d 01 72 09 41 4c 49 47 |h.EQUB 0..r.ALIG| 00000250 4e 0d 01 7c 0a 45 51 55 44 20 30 0d 01 86 0a 45 |N..|.EQUD 0....E| 00000260 51 55 44 20 30 0d 01 90 0a 45 51 55 44 20 30 0d |QUD 0....EQUD 0.| 00000270 01 9a 11 45 51 55 44 20 70 61 63 6b 68 65 6c 70 |...EQUD packhelp| 00000280 0d 01 a4 05 3a 0d 01 ae 0d 2e 70 61 63 6b 68 65 |....:.....packhe| 00000290 6c 70 0d 01 b8 5e 45 51 55 53 20 22 54 68 65 20 |lp...^EQUS "The | 000002a0 53 74 72 69 6e 67 50 61 63 6b 65 72 20 6d 6f 64 |StringPacker mod| 000002b0 75 6c 65 20 70 61 63 6b 73 20 61 6e 64 20 75 6e |ule packs and un| 000002c0 70 61 63 6b 73 20 42 41 53 49 43 20 73 74 72 69 |packs BASIC stri| 000002d0 6e 67 73 2c 20 76 69 61 20 74 77 6f 20 53 59 53 |ngs, via two SYS| 000002e0 20 63 6f 6d 6d 61 6e 64 73 20 3a 22 2b bd 31 33 | commands :"+.13| 000002f0 0d 01 c2 5e 45 51 55 53 20 bd 39 2b 22 53 59 53 |...^EQUS .9+"SYS| 00000300 20 22 2b bd 33 34 2b 22 50 61 63 6b 65 72 5f 50 | "+.34+"Packer_P| 00000310 61 63 6b 53 74 72 69 6e 67 22 2b bd 33 34 2b 22 |ackString"+.34+"| 00000320 2c 76 61 6c 69 64 24 2c 73 74 61 72 74 24 20 54 |,valid$,start$ T| 00000330 4f 20 61 64 64 72 25 20 3a 20 70 61 63 6b 65 64 |O addr% : packed| 00000340 24 3d 20 24 61 64 64 72 25 22 2b bd 31 33 0d 01 |$= $addr%"+.13..| 00000350 cc 53 45 51 55 53 20 bd 39 2b 22 53 59 53 20 22 |.SEQUS .9+"SYS "| 00000360 2b bd 33 34 2b 22 50 61 63 6b 65 72 5f 55 6e 70 |+.34+"Packer_Unp| 00000370 61 63 6b 53 74 72 69 6e 67 22 2b bd 33 34 2b 22 |ackString"+.34+"| 00000380 2c 76 61 6c 69 64 24 2c 70 61 63 6b 65 64 24 20 |,valid$,packed$ | 00000390 54 4f 20 75 6e 70 61 63 6b 65 64 24 22 2b bd 31 |TO unpacked$"+.1| 000003a0 33 0d 01 d6 a2 45 51 55 53 20 22 77 68 65 72 65 |3....EQUS "where| 000003b0 20 76 61 6c 69 64 24 20 69 73 20 74 68 65 20 76 | valid$ is the v| 000003c0 61 6c 69 64 61 74 69 6f 6e 20 73 74 72 69 6e 67 |alidation string| 000003d0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 | containing all | 000003e0 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20 74 |the characters t| 000003f0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 |hat can be used | 00000400 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63 6f |in the string co| 00000410 6e 63 65 72 6e 65 64 2c 20 61 6e 64 20 73 74 61 |ncerned, and sta| 00000420 72 74 24 20 69 73 20 74 68 65 20 73 74 72 69 6e |rt$ is the strin| 00000430 67 20 74 6f 20 62 65 20 63 6f 6d 70 61 63 74 65 |g to be compacte| 00000440 64 2e 22 0d 01 e0 0a 45 51 55 42 20 30 0d 01 ea |d."....EQUB 0...| 00000450 09 41 4c 49 47 4e 0d 01 f4 05 3a 0d 01 fe 0e 2e |.ALIGN....:.....| 00000460 73 77 69 5f 74 61 62 6c 65 0d 02 08 11 45 51 55 |swi_table....EQU| 00000470 53 20 22 50 61 63 6b 65 72 22 0d 02 12 0a 45 51 |S "Packer"....EQ| 00000480 55 42 20 30 0d 02 1c 15 45 51 55 53 20 22 50 61 |UB 0....EQUS "Pa| 00000490 63 6b 53 74 72 69 6e 67 22 0d 02 26 0a 45 51 55 |ckString"..&.EQU| 000004a0 42 20 30 0d 02 30 17 45 51 55 53 20 22 55 6e 70 |B 0..0.EQUS "Unp| 000004b0 61 63 6b 53 74 72 69 6e 67 22 0d 02 3a 0a 45 51 |ackString"..:.EQ| 000004c0 55 42 20 30 0d 02 44 0a 45 51 55 42 20 30 0d 02 |UB 0..D.EQUB 0..| 000004d0 4e 09 41 4c 49 47 4e 0d 02 58 05 3a 0d 02 62 09 |N.ALIGN..X.:..b.| 000004e0 2e 69 6e 69 74 0d 02 6c 14 53 54 4d 46 44 20 52 |.init..l.STMFD R| 000004f0 31 33 21 2c 7b 52 31 34 7d 0d 02 76 0e 4d 4f 56 |13!,{R14}..v.MOV| 00000500 20 52 36 2c 52 31 32 0d 02 80 11 4c 44 52 20 52 | R6,R12....LDR R| 00000510 31 32 2c 5b 52 31 32 5d 0d 02 8a 0d 4d 4f 56 20 |12,[R12]....MOV | 00000520 52 30 2c 23 36 0d 02 94 10 4d 4f 56 20 52 33 2c |R0,#6....MOV R3,| 00000530 23 26 31 30 30 0d 02 9e 13 53 57 49 20 22 4f 53 |#&100....SWI "OS| 00000540 5f 4d 6f 64 75 6c 65 22 0d 02 a8 0f 53 54 52 20 |_Module"....STR | 00000550 52 32 2c 5b 52 36 5d 0d 02 b2 0e 4d 4f 56 20 52 |R2,[R6]....MOV R| 00000560 31 32 2c 52 36 0d 02 bc 13 4c 44 4d 46 44 20 52 |12,R6....LDMFD R| 00000570 31 33 21 2c 7b 50 43 7d 0d 02 c6 05 3a 0d 02 d0 |13!,{PC}....:...| 00000580 0c 2e 73 77 69 63 6f 64 65 0d 02 da 1b 53 54 4d |..swicode....STM| 00000590 46 44 20 52 31 33 21 2c 7b 52 32 2d 52 31 31 2c |FD R13!,{R2-R11,| 000005a0 52 31 34 7d 0d 02 e4 0d 4d 4f 56 20 52 36 2c 52 |R14}....MOV R6,R| 000005b0 30 0d 02 ee 0e 4d 4f 56 20 52 31 30 2c 52 31 0d |0....MOV R10,R1.| 000005c0 02 f8 11 4c 44 52 20 52 31 32 2c 5b 52 31 32 5d |...LDR R12,[R12]| 000005d0 0d 03 02 0e 43 4d 50 20 52 31 31 2c 23 32 0d 03 |....CMP R11,#2..| 000005e0 0c 19 41 44 44 43 43 20 50 43 2c 50 43 2c 52 31 |..ADDCC PC,PC,R1| 000005f0 31 2c 4c 53 4c 23 32 0d 03 16 1a 4c 44 4d 46 44 |1,LSL#2....LDMFD| 00000600 20 52 31 33 21 2c 7b 52 32 2d 52 31 31 2c 50 43 | R13!,{R2-R11,PC| 00000610 7d 0d 03 20 0a 42 20 70 61 63 6b 0d 03 2a 0c 42 |}.. .B pack..*.B| 00000620 20 75 6e 70 61 63 6b 0d 03 34 05 3a 0d 03 3e 09 | unpack..4.:..>.| 00000630 2e 70 61 63 6b 0d 03 48 0f 4d 4f 56 20 62 79 74 |.pack..H.MOV byt| 00000640 65 2c 23 30 0d 03 52 0d 4d 4f 56 20 52 33 2c 23 |e,#0..R.MOV R3,#| 00000650 30 0d 03 5c 10 42 4c 20 63 6f 75 6e 74 62 69 74 |0..\.BL countbit| 00000660 73 0d 03 66 0f 43 4d 50 20 62 69 74 73 2c 23 38 |s..f.CMP bits,#8| 00000670 0d 03 70 12 42 47 45 20 64 6f 6e 74 62 6f 74 68 |..p.BGE dontboth| 00000680 65 72 0d 03 7a 0e 4d 4f 56 20 62 69 74 2c 23 37 |er..z.MOV bit,#7| 00000690 0d 03 84 0d 4d 4f 56 20 52 34 2c 23 30 0d 03 8e |....MOV R4,#0...| 000006a0 14 4c 44 52 42 20 52 38 2c 5b 52 34 2c 52 31 30 |.LDRB R8,[R4,R10| 000006b0 5d 0d 03 98 0d 43 4d 50 20 52 38 2c 23 30 0d 03 |]....CMP R8,#0..| 000006c0 a2 0e 42 45 51 20 66 69 6e 69 73 68 0d 03 ac 09 |..BEQ finish....| 000006d0 2e 6c 6f 6f 70 0d 03 b6 0e 4d 4f 56 20 52 31 31 |.loop....MOV R11| 000006e0 2c 23 30 0d 03 c0 0a 2e 69 6e 73 74 72 0d 03 ca |,#0.....instr...| 000006f0 14 4c 44 52 42 20 52 39 2c 5b 52 31 31 2c 52 36 |.LDRB R9,[R11,R6| 00000700 5d 0d 03 d4 12 41 44 44 20 52 31 31 2c 52 31 31 |]....ADD R11,R11| 00000710 2c 23 31 0d 03 de 0d 43 4d 50 20 52 39 2c 23 30 |,#1....CMP R9,#0| 00000720 0d 03 e8 0f 42 45 51 20 69 6e 76 61 6c 69 64 0d |....BEQ invalid.| 00000730 03 f2 0d 43 4d 50 20 52 39 2c 52 38 0d 03 fc 0d |...CMP R9,R8....| 00000740 42 4e 45 20 69 6e 73 74 72 0d 04 06 0e 4d 4f 56 |BNE instr....MOV| 00000750 20 52 38 2c 52 31 31 0d 04 10 12 53 55 42 20 52 | R8,R11....SUB R| 00000760 35 2c 62 69 74 73 2c 23 31 0d 04 1a 0e 4d 4f 56 |5,bits,#1....MOV| 00000770 20 52 31 31 2c 23 31 0d 04 24 0c 2e 62 69 74 6c | R11,#1..$..bitl| 00000780 6f 6f 70 0d 04 2e 17 80 53 20 52 39 2c 52 38 2c |oop.....S R9,R8,| 00000790 52 31 31 2c 4c 53 4c 20 52 35 0d 04 38 1a 84 52 |R11,LSL R5..8..R| 000007a0 4e 45 20 52 33 2c 52 33 2c 52 31 31 2c 4c 53 4c |NE R3,R3,R11,LSL| 000007b0 20 62 69 74 0d 04 42 13 53 55 42 53 20 62 69 74 | bit..B.SUBS bit| 000007c0 2c 62 69 74 2c 23 31 0d 04 4c 10 42 50 4c 20 64 |,bit,#1..L.BPL d| 000007d0 6f 6e 74 73 61 76 65 0d 04 56 0e 4d 4f 56 20 62 |ontsave..V.MOV b| 000007e0 69 74 2c 23 37 0d 04 60 0e 43 4d 50 20 52 33 2c |it,#7..`.CMP R3,| 000007f0 23 31 33 0d 04 6a 12 41 44 44 47 45 20 52 33 2c |#13..j.ADDGE R3,| 00000800 52 33 2c 23 31 0d 04 74 16 53 54 52 42 20 52 33 |R3,#1..t.STRB R3| 00000810 2c 5b 62 79 74 65 2c 52 31 32 5d 0d 04 7e 14 41 |,[byte,R12]..~.A| 00000820 44 44 20 62 79 74 65 2c 62 79 74 65 2c 23 31 0d |DD byte,byte,#1.| 00000830 04 88 0d 4d 4f 56 20 52 33 2c 23 30 0d 04 92 0d |...MOV R3,#0....| 00000840 2e 64 6f 6e 74 73 61 76 65 0d 04 9c 11 53 55 42 |.dontsave....SUB| 00000850 53 20 52 35 2c 52 35 2c 23 31 0d 04 a6 0f 42 50 |S R5,R5,#1....BP| 00000860 4c 20 62 69 74 6c 6f 6f 70 0d 04 b0 10 41 44 44 |L bitloop....ADD| 00000870 20 52 34 2c 52 34 2c 23 31 0d 04 ba 14 4c 44 52 | R4,R4,#1....LDR| 00000880 42 20 52 38 2c 5b 52 34 2c 52 31 30 5d 0d 04 c4 |B R8,[R4,R10]...| 00000890 0d 43 4d 50 20 52 38 2c 23 30 0d 04 ce 0c 42 4e |.CMP R8,#0....BN| 000008a0 45 20 6c 6f 6f 70 0d 04 d8 0e 43 4d 50 20 62 69 |E loop....CMP bi| 000008b0 74 2c 23 37 0d 04 e2 0e 42 45 51 20 66 69 6e 69 |t,#7....BEQ fini| 000008c0 73 68 0d 04 ec 0e 43 4d 50 20 52 33 2c 23 31 33 |sh....CMP R3,#13| 000008d0 0d 04 f6 12 41 44 44 47 45 20 52 33 2c 52 33 2c |....ADDGE R3,R3,| 000008e0 23 31 0d 05 00 16 53 54 52 42 20 52 33 2c 5b 62 |#1....STRB R3,[b| 000008f0 79 74 65 2c 52 31 32 5d 0d 05 0a 14 41 44 44 20 |yte,R12]....ADD | 00000900 62 79 74 65 2c 62 79 74 65 2c 23 31 0d 05 14 0b |byte,byte,#1....| 00000910 2e 66 69 6e 69 73 68 0d 05 1e 0e 4d 4f 56 20 52 |.finish....MOV R| 00000920 33 2c 23 31 33 0d 05 28 16 53 54 52 42 20 52 33 |3,#13..(.STRB R3| 00000930 2c 5b 62 79 74 65 2c 52 31 32 5d 0d 05 32 0d 4d |,[byte,R12]..2.M| 00000940 4f 56 20 52 31 2c 52 30 0d 05 3c 0e 4d 4f 56 20 |OV R1,R0..<.MOV | 00000950 52 30 2c 52 31 32 0d 05 46 1a 4c 44 4d 46 44 20 |R0,R12..F.LDMFD | 00000960 52 31 33 21 2c 7b 52 32 2d 52 31 31 2c 50 43 7d |R13!,{R2-R11,PC}| 00000970 0d 05 50 05 3a 0d 05 5a 0e 2e 63 6f 75 6e 74 62 |..P.:..Z..countb| 00000980 69 74 73 0d 05 64 0d 4d 4f 56 20 52 39 2c 23 30 |its..d.MOV R9,#0| 00000990 0d 05 6e 0c 2e 66 69 6e 64 6c 65 6e 0d 05 78 13 |..n..findlen..x.| 000009a0 4c 44 52 42 20 52 38 2c 5b 52 39 2c 52 36 5d 0d |LDRB R8,[R9,R6].| 000009b0 05 82 10 41 44 44 20 52 39 2c 52 39 2c 23 31 0d |...ADD R9,R9,#1.| 000009c0 05 8c 0d 43 4d 50 20 52 38 2c 23 30 0d 05 96 0f |...CMP R8,#0....| 000009d0 42 4e 45 20 66 69 6e 64 6c 65 6e 0d 05 a0 0d 4d |BNE findlen....M| 000009e0 4f 56 20 52 30 2c 23 37 0d 05 aa 0f 4d 4f 56 20 |OV R0,#7....MOV | 000009f0 52 38 2c 23 32 35 36 0d 05 b4 0d 4d 4f 56 20 52 |R8,#256....MOV R| 00000a00 35 2c 23 32 0d 05 be 0e 2e 63 6f 75 6e 74 6c 6f |5,#2.....countlo| 00000a10 6f 70 0d 05 c8 10 53 55 42 20 52 38 2c 52 38 2c |op....SUB R8,R8,| 00000a20 23 33 0d 05 d2 0d 43 4d 50 20 52 39 2c 52 38 0d |#3....CMP R9,R8.| 00000a30 05 dc 0b 42 47 45 20 6f 75 74 0d 05 e6 10 41 44 |...BGE out....AD| 00000a40 44 20 52 38 2c 52 38 2c 23 33 0d 05 f0 10 53 55 |D R8,R8,#3....SU| 00000a50 42 20 52 30 2c 52 30 2c 23 31 0d 05 fa 14 4d 4f |B R0,R0,#1....MO| 00000a60 56 20 52 38 2c 52 35 2c 4c 53 4c 20 52 30 0d 06 |V R8,R5,LSL R0..| 00000a70 04 0f 42 20 63 6f 75 6e 74 6c 6f 6f 70 0d 06 0e |..B countloop...| 00000a80 08 2e 6f 75 74 0d 06 18 10 41 44 44 20 52 30 2c |..out....ADD R0,| 00000a90 52 30 2c 23 32 0d 06 22 0e 4d 4f 56 20 50 43 2c |R0,#2..".MOV PC,| 00000aa0 52 31 34 0d 06 2c 05 3a 0d 06 36 0c 2e 69 6e 76 |R14..,.:..6..inv| 00000ab0 61 6c 69 64 0d 06 40 15 41 44 52 20 52 30 2c 65 |alid..@.ADR R0,e| 00000ac0 72 72 6f 72 62 6c 6f 63 6b 0d 06 4a 14 53 54 52 |rrorblock..J.STR| 00000ad0 42 20 52 38 2c 5b 52 30 2c 23 31 35 5d 0d 06 54 |B R8,[R0,#15]..T| 00000ae0 1b 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 32 2d |.LDMFD R13!,{R2-| 00000af0 52 31 31 2c 52 31 34 7d 0d 06 5e 15 84 52 53 20 |R11,R14}..^..RS | 00000b00 50 43 2c 52 31 34 2c 23 31 3c 3c 32 38 0d 06 68 |PC,R14,#1<<28..h| 00000b10 0f 2e 65 72 72 6f 72 62 6c 6f 63 6b 0d 06 72 0c |..errorblock..r.| 00000b20 45 51 55 44 20 33 34 35 0d 06 7c 31 45 51 55 53 |EQUD 345..|1EQUS| 00000b30 20 22 43 68 61 72 61 63 74 65 72 20 27 20 27 20 | "Character ' ' | 00000b40 6e 6f 74 20 69 6e 20 76 61 6c 69 64 61 74 69 6f |not in validatio| 00000b50 6e 20 73 74 72 69 6e 67 22 0d 06 86 0a 45 51 55 |n string"....EQU| 00000b60 42 20 30 0d 06 90 09 41 4c 49 47 4e 0d 06 9a 05 |B 0....ALIGN....| 00000b70 3a 0d 06 a4 0f 2e 64 6f 6e 74 62 6f 74 68 65 72 |:.....dontbother| 00000b80 0d 06 ae 0e 4d 4f 56 20 52 31 31 2c 23 30 0d 06 |....MOV R11,#0..| 00000b90 b8 0c 2e 66 69 6e 64 65 6e 64 0d 06 c2 12 41 44 |...findend....AD| 00000ba0 44 20 52 31 31 2c 52 31 31 2c 23 31 0d 06 cc 15 |D R11,R11,#1....| 00000bb0 4c 44 52 42 20 52 38 2c 5b 52 31 30 2c 52 31 31 |LDRB R8,[R10,R11| 00000bc0 5d 0d 06 d6 0d 43 4d 50 20 52 38 2c 23 30 0d 06 |]....CMP R8,#0..| 00000bd0 e0 0f 42 4e 45 20 66 69 6e 64 65 6e 64 0d 06 ea |..BNE findend...| 00000be0 0e 4d 4f 56 20 52 38 2c 23 31 33 0d 06 f4 15 53 |.MOV R8,#13....S| 00000bf0 54 52 42 20 52 38 2c 5b 52 31 30 2c 52 31 31 5d |TRB R8,[R10,R11]| 00000c00 0d 06 fe 0d 4d 4f 56 20 52 31 2c 23 38 0d 07 08 |....MOV R1,#8...| 00000c10 0e 4d 4f 56 20 52 30 2c 52 31 30 0d 07 12 1a 4c |.MOV R0,R10....L| 00000c20 44 4d 46 44 20 52 31 33 21 2c 7b 52 32 2d 52 31 |DMFD R13!,{R2-R1| 00000c30 31 2c 50 43 7d 0d 07 1c 05 3a 0d 07 26 0b 2e 75 |1,PC}....:..&..u| 00000c40 6e 70 61 63 6b 0d 07 30 0f 4d 4f 56 20 62 79 74 |npack..0.MOV byt| 00000c50 65 2c 23 30 0d 07 3a 0d 4d 4f 56 20 52 34 2c 23 |e,#0..:.MOV R4,#| 00000c60 30 0d 07 44 0e 4d 4f 56 20 52 31 31 2c 23 31 0d |0..D.MOV R11,#1.| 00000c70 07 4e 10 42 4c 20 63 6f 75 6e 74 62 69 74 73 0d |.N.BL countbits.| 00000c80 07 58 0f 43 4d 50 20 62 69 74 73 2c 23 38 0d 07 |.X.CMP bits,#8..| 00000c90 62 12 42 47 45 20 64 6f 6e 74 62 6f 74 68 65 72 |b.BGE dontbother| 00000ca0 0d 07 6c 0e 4d 4f 56 20 62 69 74 2c 23 37 0d 07 |..l.MOV bit,#7..| 00000cb0 76 16 4c 44 52 42 20 52 38 2c 5b 52 31 30 2c 62 |v.LDRB R8,[R10,b| 00000cc0 79 74 65 5d 0d 07 80 0e 43 4d 50 20 52 38 2c 23 |yte]....CMP R8,#| 00000cd0 31 34 0d 07 8a 12 53 55 42 47 45 20 52 38 2c 52 |14....SUBGE R8,R| 00000ce0 38 2c 23 31 0d 07 94 0a 2e 6c 6f 6f 70 32 0d 07 |8,#1.....loop2..| 00000cf0 9e 0d 4d 4f 56 20 52 33 2c 23 30 0d 07 a8 12 53 |..MOV R3,#0....S| 00000d00 55 42 20 52 35 2c 62 69 74 73 2c 23 31 0d 07 b2 |UB R5,bits,#1...| 00000d10 0d 2e 62 69 74 6c 6f 6f 70 32 0d 07 bc 18 80 53 |..bitloop2.....S| 00000d20 20 52 39 2c 52 38 2c 52 31 31 2c 4c 53 4c 20 62 | R9,R8,R11,LSL b| 00000d30 69 74 0d 07 c6 19 84 52 4e 45 20 52 33 2c 52 33 |it.....RNE R3,R3| 00000d40 2c 52 31 31 2c 4c 53 4c 20 52 35 0d 07 d0 13 53 |,R11,LSL R5....S| 00000d50 55 42 53 20 62 69 74 2c 62 69 74 2c 23 31 0d 07 |UBS bit,bit,#1..| 00000d60 da 10 42 50 4c 20 64 6f 6e 74 6c 6f 61 64 0d 07 |..BPL dontload..| 00000d70 e4 0e 4d 4f 56 20 62 69 74 2c 23 37 0d 07 ee 14 |..MOV bit,#7....| 00000d80 41 44 44 20 62 79 74 65 2c 62 79 74 65 2c 23 31 |ADD byte,byte,#1| 00000d90 0d 07 f8 16 4c 44 52 42 20 52 38 2c 5b 52 31 30 |....LDRB R8,[R10| 00000da0 2c 62 79 74 65 5d 0d 08 02 0e 43 4d 50 20 52 38 |,byte]....CMP R8| 00000db0 2c 23 31 34 0d 08 0c 12 53 55 42 47 45 20 52 38 |,#14....SUBGE R8| 00000dc0 2c 52 38 2c 23 31 0d 08 16 0d 2e 64 6f 6e 74 6c |,R8,#1.....dontl| 00000dd0 6f 61 64 0d 08 20 11 53 55 42 53 20 52 35 2c 52 |oad.. .SUBS R5,R| 00000de0 35 2c 23 31 0d 08 2a 10 42 50 4c 20 62 69 74 6c |5,#1..*.BPL bitl| 00000df0 6f 6f 70 32 0d 08 34 10 53 55 42 20 52 33 2c 52 |oop2..4.SUB R3,R| 00000e00 33 2c 23 31 0d 08 3e 13 4c 44 52 42 20 52 39 2c |3,#1..>.LDRB R9,| 00000e10 5b 52 36 2c 52 33 5d 0d 08 48 10 41 44 44 20 52 |[R6,R3]..H.ADD R| 00000e20 33 2c 52 33 2c 23 31 0d 08 52 14 53 54 52 42 20 |3,R3,#1..R.STRB | 00000e30 52 39 2c 5b 52 31 32 2c 52 34 5d 0d 08 5c 10 41 |R9,[R12,R4]..\.A| 00000e40 44 44 20 52 34 2c 52 34 2c 23 31 0d 08 66 0d 43 |DD R4,R4,#1..f.C| 00000e50 4d 50 20 52 33 2c 23 30 0d 08 70 0d 42 4e 45 20 |MP R3,#0..p.BNE | 00000e60 6c 6f 6f 70 32 0d 08 7a 10 53 55 42 20 52 34 2c |loop2..z.SUB R4,| 00000e70 52 34 2c 23 31 0d 08 84 0e 4d 4f 56 20 52 39 2c |R4,#1....MOV R9,| 00000e80 23 31 33 0d 08 8e 14 53 54 52 42 20 52 39 2c 5b |#13....STRB R9,[| 00000e90 52 31 32 2c 52 34 5d 0d 08 98 0d 4d 4f 56 20 52 |R12,R4]....MOV R| 00000ea0 31 2c 52 30 0d 08 a2 0e 4d 4f 56 20 52 30 2c 52 |1,R0....MOV R0,R| 00000eb0 31 32 0d 08 ac 1a 4c 44 4d 46 44 20 52 31 33 21 |12....LDMFD R13!| 00000ec0 2c 7b 52 32 2d 52 31 31 2c 50 43 7d 0d 08 b6 0d |,{R2-R11,PC}....| 00000ed0 5d 3a ed 20 70 61 73 73 25 0d 08 c0 25 ff 20 22 |]:. pass%...%. "| 00000ee0 53 61 76 65 20 50 61 63 6b 65 72 20 22 2b c3 7e |Save Packer "+.~| 00000ef0 63 6f 64 65 25 2b 22 2b 22 2b c3 7e 50 25 0d 08 |code%+"+"+.~P%..| 00000f00 ca 1a 2a 53 65 74 74 79 70 65 20 50 61 63 6b 65 |..*Settype Packe| 00000f10 72 20 4d 6f 64 75 6c 65 0d 08 d4 12 2a 52 4d 6c |r Module....*RMl| 00000f20 6f 61 64 20 50 61 63 6b 65 72 0d 08 de 1f f1 22 |oad Packer....."| 00000f30 4d 6f 64 75 6c 65 20 73 61 76 65 64 20 61 73 20 |Module saved as | 00000f40 27 50 61 63 6b 65 72 27 22 0d 08 e8 05 e0 0d ff |'Packer'".......| 00000f50