Home » Archimedes archive » Acorn User » AU 1995-07.adf » !Regulars_Regulars » StarInfo/If/Source/IfPodule

StarInfo/If/Source/IfPodule

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-07.adf » !Regulars_Regulars
Filename: StarInfo/If/Source/IfPodule
Read OK:
File size: 11B9 bytes
Load address: 0000
Exec address: 0000
File contents
    1REM >IfPodule
    2REM By Dave Lawrence
    3REM (c) October 1993
    4:
    5DIM code 800
    6wp=12:sp=13:lr=14:pc=15
    7arg_podule=0
    8arg_command=4
    9arg_yes=8
   10arg_no=12
   11arg_a=4:arg_b=8:arg_c=12
   12FOR pass=0 TO 2 STEP 2:P%=code
   13[OPT pass
   14        STMFD   sp !,{r0-r11,lr}
   15
   16        ADR     r0,args
   17        MOV     r2,wp
   18        MOV     r3,#1024
   19        SWI     "XOS_ReadArgs"
   20        BVS     Error
   21        RSB     r3,r3,#1024
   22        ADD     r8,wp,r3
   23
   24        LDR     r0,[wp,#arg_command]
   25        TEQ     r0,#0
   26        ADREQ   r0,syntax
   27        BEQ     Error
   28        
   29        LDR     r0,[wp,#arg_podule]
   30        TEQ     r0,#0
   31        ADREQ   r0,syntax
   32        BEQ     Error
   33
   34        MOV     r1,#0
   35        MOV     r2,#0
   36        SWI     "XOS_EvaluateExpression"
   37        MOVVC   r0,#1
   38        STRVC   r0,[wp,#arg_podule]
   39        MOVVC   r10,r2
   40
   41        SWI     "XPodule_ReturnNumber"
   42        BVS     Error
   43        SUBS    r3,r0,#1
   44        BMI     no_podules
   45        
   46.pod_loop
   47        SWI     "XPodule_ReadID"
   48        BVS     skip_pod
   49        ANDS    r0,r0,#&78
   50        BEQ     extended_pod
   51        
   52        LDR     r1,[wp,#arg_podule]
   53        TEQ     r1,#1
   54        BNE     skip_pod
   55        
   56        CMP     r10,r0,LSR #3
   57        BEQ     found_pod
   58        B       skip_pod
   59
   60.extended_pod
   61        MOV     r2,r8
   62        SWI     "XPodule_ReadHeader"
   63        BVS     skip_pod
   64        
   65        LDR     r1,[wp,#arg_podule]
   66        TEQ     r1,#1
   67        BNE     check_string
   68        
   69        LDRB    r0,[r8,#3]
   70        LDRB    r1,[r8,#4]
   71        ORR     r0,r0,r1,LSL #8
   72        LDRB    r1,[r8,#5]
   73        ORR     r0,r0,r1,LSL #16
   74        LDRB    r1,[r8,#6]
   75        ORR     r0,r0,r1,LSL #24
   76        CMP     r0,r10
   77        BEQ     found_pod
   78        B       skip_pod
   79        
   80.check_string
   81        LDRB    r0,[r8,#1]
   82        TST     r0,#1
   83        BEQ     skip_pod
   84        
   85        MOV     r0,#0
   86.enum_chunk
   87        SWI     "XPodule_EnumerateChunks"        
   88        BVS     Error
   89        CMP     r0,#0
   90        BEQ     skip_pod
   91        CMP     r2,#&F5
   92        BNE     enum_chunk
   93
   94        SUB     r0,r0,#1
   95        MOV     r2,r8
   96        SWI     "XPodule_ReadChunk"
   97        BVS     Error
   98
   99        MOV     r9,#0
  100        LDR     r4,[wp,#arg_podule]
  101.instr
  102        LDRB    r5,[r2,r9]
  103        FNlc(5)
  104        LDRB    r6,[r4,r9]
  105        FNlc(6)
  106                        
  107        TEQ     r5,#0
  108        TEQNE   r6,#0
  109        BEQ     got0
  110        TEQ     r5,r6
  111        ADDEQ   r9,r9,#1
  112        MOVNE   r9,#0
  113        ADDNE   r2,r2,#1
  114        B       instr
  115.got0
  116        CMP     r5,r6
  117        BLT     skip_pod
  118.found_pod        
  119        LDMIA   wp,{r0,r5,r6,r7}
  120        TEQ     r7,#0
  121        MOVEQ   r6,#0
  122        B       do_command
  123.skip_pod
  124        SUBS    r3,r3,#1
  125        BPL     pod_loop
  126.no_podules
  127        LDMIA   wp,{r0,r5,r6,r7}
  128        TEQ     r6,#0
  129        TEQNE   r7,#0
  130        MOVNE   r6,r7
  131        BNE     do_command
  132        TEQ     r6,#0
  133        BEQ     Exit
  134        MOV     r5,r6
  135        MOV     r6,#0
  136.do_command
  137        MOV     r1,r8
  138        MOV     r0,r5
  139        MOV     r2,#32
  140        BL      copy
  141        MOVS    r0,r6
  142        MOV     r2,#0
  143        BLNE    copy
  144        STREQB  r2,[r1,#-1]
  145.os_cli
  146        MOV     r0,r8
  147        SWI     "XOS_CLI"
  148        BVS     Error
  149
  150.Exit   LDMFD   sp !,{r0-r11,pc}
  151
  152.Error  ADD     sp,sp,#4
  153        LDMFD   sp !,{r1-r11,lr}
  154        ORRS    pc,lr,#1<<28
  155
  156.copy   LDRB    r3,[r0],#1
  157        STRB    r3,[r1],#1
  158        CMP     r3,#32
  159        BGE     copy
  160        STRB    r2,[r1,#-1]
  161        MOV     pc,lr
  162                
  163.syntax
  164        EQUD    220
  165        EQUS    "Syntax: *IfPodule <part podule name> <�yes� command> [<�no� command>] | <ppn> <command> <�yes� param> <�no� param>"
  166        EQUB    0
  167        ALIGN
  168.args
  169        EQUS    ",,,"
  170        EQUB    0
  171        ALIGN
  172        EQUS    "dL 28/10/93"
  173]NEXT
  174SYS "OS_File",10,"%.IfPodule",&FFC,,code,P%
  175END
  176:
  177DEF FNlc(reg)
  178[OPT pass
  179 SUB     reg,reg,#ASC"a"
  180 CMP     reg,#ASC"z"-ASC"a"+1
  181 SUBCC   reg,reg,#32
  182 ADD     reg,reg,#ASC"a"
  183 CMP     reg,#32
  184 MOVLT   reg,#0
  185]
  186=""
� >IfPodule
� By Dave Lawrence
� (c) October 1993
:
� code 800
wp=12:sp=13:lr=14:pc=15
arg_podule=0
arg_command=4
	
arg_yes=8


arg_no=12
arg_a=4:arg_b=8:arg_c=12
� pass=0 � 2 � 2:P%=code


[OPT pass
$        STMFD   sp !,{r0-r11,lr}

        ADR     r0,args
        MOV     r2,wp
        MOV     r3,#1024
"        SWI     "XOS_ReadArgs"
        BVS     Error
        RSB     r3,r3,#1024
        ADD     r8,wp,r3

(        LDR     r0,[wp,#arg_command]
        TEQ     r0,#0
        ADREQ   r0,syntax
        BEQ     Error
        
'        LDR     r0,[wp,#arg_podule]
        TEQ     r0,#0
        ADREQ   r0,syntax
         BEQ     Error
!
"        MOV     r1,#0
#        MOV     r2,#0
$,        SWI     "XOS_EvaluateExpression"
%        MOVVC   r0,#1
&'        STRVC   r0,[wp,#arg_podule]
'        MOVVC   r10,r2
(
)*        SWI     "XPodule_ReturnNumber"
*        BVS     Error
+        SUBS    r3,r0,#1
,        BMI     no_podules
-        
.
.pod_loop
/$        SWI     "XPodule_ReadID"
0        BVS     skip_pod
1        �S    r0,r0,#&78
2         BEQ     extended_pod
3        
4'        LDR     r1,[wp,#arg_podule]
5        TEQ     r1,#1
6        BNE     skip_pod
7        
8!        CMP     r10,r0,LSR #3
9        BEQ     found_pod
:        B       skip_pod
;
<.extended_pod
=        MOV     r2,r8
>(        SWI     "XPodule_ReadHeader"
?        BVS     skip_pod
@        
A'        LDR     r1,[wp,#arg_podule]
B        TEQ     r1,#1
C         BNE     check_string
D        
E        LDRB    r0,[r8,#3]
F        LDRB    r1,[r8,#4]
G"        �R     r0,r0,r1,LSL #8
H        LDRB    r1,[r8,#5]
I#        �R     r0,r0,r1,LSL #16
J        LDRB    r1,[r8,#6]
K#        �R     r0,r0,r1,LSL #24
L        CMP     r0,r10
M        BEQ     found_pod
N        B       skip_pod
O        
P.check_string
Q        LDRB    r0,[r8,#1]
R        TST     r0,#1
S        BEQ     skip_pod
T        
U        MOV     r0,#0
V.enum_chunk
W5        SWI     "XPodule_EnumerateChunks"        
X        BVS     Error
Y        CMP     r0,#0
Z        BEQ     skip_pod
[        CMP     r2,#&F5
\        BNE     enum_chunk
]
^        SUB     r0,r0,#1
_        MOV     r2,r8
`'        SWI     "XPodule_ReadChunk"
a        BVS     Error
b
c        MOV     r9,#0
d'        LDR     r4,[wp,#arg_podule]
e
.instr
f        LDRB    r5,[r2,r9]
g        �lc(5)
h        LDRB    r6,[r4,r9]
i        �lc(6)
j                        
k        TEQ     r5,#0
l        TEQNE   r6,#0
m        BEQ     got0
n        TEQ     r5,r6
o        ADDEQ   r9,r9,#1
p        MOVNE   r9,#0
q        ADDNE   r2,r2,#1
r        B       instr
s	.got0
t        CMP     r5,r6
u        BLT     skip_pod
v.found_pod        
w$        LDMIA   wp,{r0,r5,r6,r7}
x        TEQ     r7,#0
y        �Q   r6,#0
z        B       do_command
{
.skip_pod
|        SUBS    r3,r3,#1
}        BPL     pod_loop
~.no_podules
$        LDMIA   wp,{r0,r5,r6,r7}
�        TEQ     r6,#0
�        TEQNE   r7,#0
�        MOVNE   r6,r7
�        BNE     do_command
�        TEQ     r6,#0
�        BEQ     Exit
�        MOV     r5,r6
�        MOV     r6,#0
�.do_command
�        MOV     r1,r8
�        MOV     r0,r5
�        MOV     r2,#32
�        BL      copy
�        MOVS    r0,r6
�        MOV     r2,#0
�        BLNE    copy
�        STREQB  r2,[r1,#-1]
�.os_cli
�        MOV     r0,r8
�        SWI     "XOS_CLI"
�        BVS     Error
�
�$.Exit   LDMFD   sp !,{r0-r11,pc}
�
�.Error  ADD     sp,sp,#4
�$        LDMFD   sp !,{r1-r11,lr}
�        �RS    pc,lr,#1<<28
�
�.copy   LDRB    r3,[r0],#1
�        STRB    r3,[r1],#1
�        CMP     r3,#32
�        BGE     copy
�        STRB    r2,[r1,#-1]
�        MOV     pc,lr
�                
�.syntax
�        EQUD    220
��        EQUS    "Syntax: *IfPodule <part podule name> <�yes� command> [<�no� command>] | <ppn> <command> <�yes� param> <�no� param>"
�        EQUB    0
�        ALIGN
�	.args
�        EQUS    ",,,"
�        EQUB    0
�        ALIGN
�!        EQUS    "dL 28/10/93"
�]�
�.ș "OS_File",10,"%.IfPodule",&FFC,,code,P%
��
�:
�� �lc(reg)
�
[OPT pass
� SUB     reg,reg,#�"a"
� CMP     reg,#�"z"-�"a"+1
� SUBCC   reg,reg,#32
� ADD     reg,reg,#�"a"
� CMP     reg,#32
� MOVLT   reg,#0
�]
�=""
�
00000000  0d 00 01 0f f4 20 3e 49  66 50 6f 64 75 6c 65 0d  |..... >IfPodule.|
00000010  00 02 16 f4 20 42 79 20  44 61 76 65 20 4c 61 77  |.... By Dave Law|
00000020  72 65 6e 63 65 0d 00 03  16 f4 20 28 63 29 20 4f  |rence..... (c) O|
00000030  63 74 6f 62 65 72 20 31  39 39 33 0d 00 04 05 3a  |ctober 1993....:|
00000040  0d 00 05 0e de 20 63 6f  64 65 20 38 30 30 0d 00  |..... code 800..|
00000050  06 1b 77 70 3d 31 32 3a  73 70 3d 31 33 3a 6c 72  |..wp=12:sp=13:lr|
00000060  3d 31 34 3a 70 63 3d 31  35 0d 00 07 10 61 72 67  |=14:pc=15....arg|
00000070  5f 70 6f 64 75 6c 65 3d  30 0d 00 08 11 61 72 67  |_podule=0....arg|
00000080  5f 63 6f 6d 6d 61 6e 64  3d 34 0d 00 09 0d 61 72  |_command=4....ar|
00000090  67 5f 79 65 73 3d 38 0d  00 0a 0d 61 72 67 5f 6e  |g_yes=8....arg_n|
000000a0  6f 3d 31 32 0d 00 0b 1c  61 72 67 5f 61 3d 34 3a  |o=12....arg_a=4:|
000000b0  61 72 67 5f 62 3d 38 3a  61 72 67 5f 63 3d 31 32  |arg_b=8:arg_c=12|
000000c0  0d 00 0c 1c e3 20 70 61  73 73 3d 30 20 b8 20 32  |..... pass=0 . 2|
000000d0  20 88 20 32 3a 50 25 3d  63 6f 64 65 0d 00 0d 0d  | . 2:P%=code....|
000000e0  5b 4f 50 54 20 70 61 73  73 0d 00 0e 24 20 20 20  |[OPT pass...$   |
000000f0  20 20 20 20 20 53 54 4d  46 44 20 20 20 73 70 20  |     STMFD   sp |
00000100  21 2c 7b 72 30 2d 72 31  31 2c 6c 72 7d 0d 00 0f  |!,{r0-r11,lr}...|
00000110  04 0d 00 10 1b 20 20 20  20 20 20 20 20 41 44 52  |.....        ADR|
00000120  20 20 20 20 20 72 30 2c  61 72 67 73 0d 00 11 19  |     r0,args....|
00000130  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000140  72 32 2c 77 70 0d 00 12  1c 20 20 20 20 20 20 20  |r2,wp....       |
00000150  20 4d 4f 56 20 20 20 20  20 72 33 2c 23 31 30 32  | MOV     r3,#102|
00000160  34 0d 00 13 22 20 20 20  20 20 20 20 20 53 57 49  |4..."        SWI|
00000170  20 20 20 20 20 22 58 4f  53 5f 52 65 61 64 41 72  |     "XOS_ReadAr|
00000180  67 73 22 0d 00 14 19 20  20 20 20 20 20 20 20 42  |gs"....        B|
00000190  56 53 20 20 20 20 20 45  72 72 6f 72 0d 00 15 1f  |VS     Error....|
000001a0  20 20 20 20 20 20 20 20  52 53 42 20 20 20 20 20  |        RSB     |
000001b0  72 33 2c 72 33 2c 23 31  30 32 34 0d 00 16 1c 20  |r3,r3,#1024.... |
000001c0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
000001d0  38 2c 77 70 2c 72 33 0d  00 17 04 0d 00 18 28 20  |8,wp,r3.......( |
000001e0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
000001f0  30 2c 5b 77 70 2c 23 61  72 67 5f 63 6f 6d 6d 61  |0,[wp,#arg_comma|
00000200  6e 64 5d 0d 00 19 19 20  20 20 20 20 20 20 20 54  |nd]....        T|
00000210  45 51 20 20 20 20 20 72  30 2c 23 30 0d 00 1a 1d  |EQ     r0,#0....|
00000220  20 20 20 20 20 20 20 20  41 44 52 45 51 20 20 20  |        ADREQ   |
00000230  72 30 2c 73 79 6e 74 61  78 0d 00 1b 19 20 20 20  |r0,syntax....   |
00000240  20 20 20 20 20 42 45 51  20 20 20 20 20 45 72 72  |     BEQ     Err|
00000250  6f 72 0d 00 1c 0c 20 20  20 20 20 20 20 20 0d 00  |or....        ..|
00000260  1d 27 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.'        LDR   |
00000270  20 20 72 30 2c 5b 77 70  2c 23 61 72 67 5f 70 6f  |  r0,[wp,#arg_po|
00000280  64 75 6c 65 5d 0d 00 1e  19 20 20 20 20 20 20 20  |dule]....       |
00000290  20 54 45 51 20 20 20 20  20 72 30 2c 23 30 0d 00  | TEQ     r0,#0..|
000002a0  1f 1d 20 20 20 20 20 20  20 20 41 44 52 45 51 20  |..        ADREQ |
000002b0  20 20 72 30 2c 73 79 6e  74 61 78 0d 00 20 19 20  |  r0,syntax.. . |
000002c0  20 20 20 20 20 20 20 42  45 51 20 20 20 20 20 45  |       BEQ     E|
000002d0  72 72 6f 72 0d 00 21 04  0d 00 22 19 20 20 20 20  |rror..!...".    |
000002e0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 23  |    MOV     r1,#|
000002f0  30 0d 00 23 19 20 20 20  20 20 20 20 20 4d 4f 56  |0..#.        MOV|
00000300  20 20 20 20 20 72 32 2c  23 30 0d 00 24 2c 20 20  |     r2,#0..$,  |
00000310  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000320  4f 53 5f 45 76 61 6c 75  61 74 65 45 78 70 72 65  |OS_EvaluateExpre|
00000330  73 73 69 6f 6e 22 0d 00  25 19 20 20 20 20 20 20  |ssion"..%.      |
00000340  20 20 4d 4f 56 56 43 20  20 20 72 30 2c 23 31 0d  |  MOVVC   r0,#1.|
00000350  00 26 27 20 20 20 20 20  20 20 20 53 54 52 56 43  |.&'        STRVC|
00000360  20 20 20 72 30 2c 5b 77  70 2c 23 61 72 67 5f 70  |   r0,[wp,#arg_p|
00000370  6f 64 75 6c 65 5d 0d 00  27 1a 20 20 20 20 20 20  |odule]..'.      |
00000380  20 20 4d 4f 56 56 43 20  20 20 72 31 30 2c 72 32  |  MOVVC   r10,r2|
00000390  0d 00 28 04 0d 00 29 2a  20 20 20 20 20 20 20 20  |..(...)*        |
000003a0  53 57 49 20 20 20 20 20  22 58 50 6f 64 75 6c 65  |SWI     "XPodule|
000003b0  5f 52 65 74 75 72 6e 4e  75 6d 62 65 72 22 0d 00  |_ReturnNumber"..|
000003c0  2a 19 20 20 20 20 20 20  20 20 42 56 53 20 20 20  |*.        BVS   |
000003d0  20 20 45 72 72 6f 72 0d  00 2b 1c 20 20 20 20 20  |  Error..+.     |
000003e0  20 20 20 53 55 42 53 20  20 20 20 72 33 2c 72 30  |   SUBS    r3,r0|
000003f0  2c 23 31 0d 00 2c 1e 20  20 20 20 20 20 20 20 42  |,#1..,.        B|
00000400  4d 49 20 20 20 20 20 6e  6f 5f 70 6f 64 75 6c 65  |MI     no_podule|
00000410  73 0d 00 2d 0c 20 20 20  20 20 20 20 20 0d 00 2e  |s..-.        ...|
00000420  0d 2e 70 6f 64 5f 6c 6f  6f 70 0d 00 2f 24 20 20  |..pod_loop../$  |
00000430  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000440  50 6f 64 75 6c 65 5f 52  65 61 64 49 44 22 0d 00  |Podule_ReadID"..|
00000450  30 1c 20 20 20 20 20 20  20 20 42 56 53 20 20 20  |0.        BVS   |
00000460  20 20 73 6b 69 70 5f 70  6f 64 0d 00 31 1c 20 20  |  skip_pod..1.  |
00000470  20 20 20 20 20 20 80 53  20 20 20 20 72 30 2c 72  |      .S    r0,r|
00000480  30 2c 23 26 37 38 0d 00  32 20 20 20 20 20 20 20  |0,#&78..2       |
00000490  20 20 42 45 51 20 20 20  20 20 65 78 74 65 6e 64  |  BEQ     extend|
000004a0  65 64 5f 70 6f 64 0d 00  33 0c 20 20 20 20 20 20  |ed_pod..3.      |
000004b0  20 20 0d 00 34 27 20 20  20 20 20 20 20 20 4c 44  |  ..4'        LD|
000004c0  52 20 20 20 20 20 72 31  2c 5b 77 70 2c 23 61 72  |R     r1,[wp,#ar|
000004d0  67 5f 70 6f 64 75 6c 65  5d 0d 00 35 19 20 20 20  |g_podule]..5.   |
000004e0  20 20 20 20 20 54 45 51  20 20 20 20 20 72 31 2c  |     TEQ     r1,|
000004f0  23 31 0d 00 36 1c 20 20  20 20 20 20 20 20 42 4e  |#1..6.        BN|
00000500  45 20 20 20 20 20 73 6b  69 70 5f 70 6f 64 0d 00  |E     skip_pod..|
00000510  37 0c 20 20 20 20 20 20  20 20 0d 00 38 21 20 20  |7.        ..8!  |
00000520  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 31  |      CMP     r1|
00000530  30 2c 72 30 2c 4c 53 52  20 23 33 0d 00 39 1d 20  |0,r0,LSR #3..9. |
00000540  20 20 20 20 20 20 20 42  45 51 20 20 20 20 20 66  |       BEQ     f|
00000550  6f 75 6e 64 5f 70 6f 64  0d 00 3a 1c 20 20 20 20  |ound_pod..:.    |
00000560  20 20 20 20 42 20 20 20  20 20 20 20 73 6b 69 70  |    B       skip|
00000570  5f 70 6f 64 0d 00 3b 04  0d 00 3c 11 2e 65 78 74  |_pod..;...<..ext|
00000580  65 6e 64 65 64 5f 70 6f  64 0d 00 3d 19 20 20 20  |ended_pod..=.   |
00000590  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 32 2c  |     MOV     r2,|
000005a0  72 38 0d 00 3e 28 20 20  20 20 20 20 20 20 53 57  |r8..>(        SW|
000005b0  49 20 20 20 20 20 22 58  50 6f 64 75 6c 65 5f 52  |I     "XPodule_R|
000005c0  65 61 64 48 65 61 64 65  72 22 0d 00 3f 1c 20 20  |eadHeader"..?.  |
000005d0  20 20 20 20 20 20 42 56  53 20 20 20 20 20 73 6b  |      BVS     sk|
000005e0  69 70 5f 70 6f 64 0d 00  40 0c 20 20 20 20 20 20  |ip_pod..@.      |
000005f0  20 20 0d 00 41 27 20 20  20 20 20 20 20 20 4c 44  |  ..A'        LD|
00000600  52 20 20 20 20 20 72 31  2c 5b 77 70 2c 23 61 72  |R     r1,[wp,#ar|
00000610  67 5f 70 6f 64 75 6c 65  5d 0d 00 42 19 20 20 20  |g_podule]..B.   |
00000620  20 20 20 20 20 54 45 51  20 20 20 20 20 72 31 2c  |     TEQ     r1,|
00000630  23 31 0d 00 43 20 20 20  20 20 20 20 20 20 42 4e  |#1..C         BN|
00000640  45 20 20 20 20 20 63 68  65 63 6b 5f 73 74 72 69  |E     check_stri|
00000650  6e 67 0d 00 44 0c 20 20  20 20 20 20 20 20 0d 00  |ng..D.        ..|
00000660  45 1e 20 20 20 20 20 20  20 20 4c 44 52 42 20 20  |E.        LDRB  |
00000670  20 20 72 30 2c 5b 72 38  2c 23 33 5d 0d 00 46 1e  |  r0,[r8,#3]..F.|
00000680  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
00000690  72 31 2c 5b 72 38 2c 23  34 5d 0d 00 47 22 20 20  |r1,[r8,#4]..G"  |
000006a0  20 20 20 20 20 20 84 52  20 20 20 20 20 72 30 2c  |      .R     r0,|
000006b0  72 30 2c 72 31 2c 4c 53  4c 20 23 38 0d 00 48 1e  |r0,r1,LSL #8..H.|
000006c0  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
000006d0  72 31 2c 5b 72 38 2c 23  35 5d 0d 00 49 23 20 20  |r1,[r8,#5]..I#  |
000006e0  20 20 20 20 20 20 84 52  20 20 20 20 20 72 30 2c  |      .R     r0,|
000006f0  72 30 2c 72 31 2c 4c 53  4c 20 23 31 36 0d 00 4a  |r0,r1,LSL #16..J|
00000700  1e 20 20 20 20 20 20 20  20 4c 44 52 42 20 20 20  |.        LDRB   |
00000710  20 72 31 2c 5b 72 38 2c  23 36 5d 0d 00 4b 23 20  | r1,[r8,#6]..K# |
00000720  20 20 20 20 20 20 20 84  52 20 20 20 20 20 72 30  |       .R     r0|
00000730  2c 72 30 2c 72 31 2c 4c  53 4c 20 23 32 34 0d 00  |,r0,r1,LSL #24..|
00000740  4c 1a 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |L.        CMP   |
00000750  20 20 72 30 2c 72 31 30  0d 00 4d 1d 20 20 20 20  |  r0,r10..M.    |
00000760  20 20 20 20 42 45 51 20  20 20 20 20 66 6f 75 6e  |    BEQ     foun|
00000770  64 5f 70 6f 64 0d 00 4e  1c 20 20 20 20 20 20 20  |d_pod..N.       |
00000780  20 42 20 20 20 20 20 20  20 73 6b 69 70 5f 70 6f  | B       skip_po|
00000790  64 0d 00 4f 0c 20 20 20  20 20 20 20 20 0d 00 50  |d..O.        ..P|
000007a0  11 2e 63 68 65 63 6b 5f  73 74 72 69 6e 67 0d 00  |..check_string..|
000007b0  51 1e 20 20 20 20 20 20  20 20 4c 44 52 42 20 20  |Q.        LDRB  |
000007c0  20 20 72 30 2c 5b 72 38  2c 23 31 5d 0d 00 52 19  |  r0,[r8,#1]..R.|
000007d0  20 20 20 20 20 20 20 20  54 53 54 20 20 20 20 20  |        TST     |
000007e0  72 30 2c 23 31 0d 00 53  1c 20 20 20 20 20 20 20  |r0,#1..S.       |
000007f0  20 42 45 51 20 20 20 20  20 73 6b 69 70 5f 70 6f  | BEQ     skip_po|
00000800  64 0d 00 54 0c 20 20 20  20 20 20 20 20 0d 00 55  |d..T.        ..U|
00000810  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000820  20 72 30 2c 23 30 0d 00  56 0f 2e 65 6e 75 6d 5f  | r0,#0..V..enum_|
00000830  63 68 75 6e 6b 0d 00 57  35 20 20 20 20 20 20 20  |chunk..W5       |
00000840  20 53 57 49 20 20 20 20  20 22 58 50 6f 64 75 6c  | SWI     "XPodul|
00000850  65 5f 45 6e 75 6d 65 72  61 74 65 43 68 75 6e 6b  |e_EnumerateChunk|
00000860  73 22 20 20 20 20 20 20  20 20 0d 00 58 19 20 20  |s"        ..X.  |
00000870  20 20 20 20 20 20 42 56  53 20 20 20 20 20 45 72  |      BVS     Er|
00000880  72 6f 72 0d 00 59 19 20  20 20 20 20 20 20 20 43  |ror..Y.        C|
00000890  4d 50 20 20 20 20 20 72  30 2c 23 30 0d 00 5a 1c  |MP     r0,#0..Z.|
000008a0  20 20 20 20 20 20 20 20  42 45 51 20 20 20 20 20  |        BEQ     |
000008b0  73 6b 69 70 5f 70 6f 64  0d 00 5b 1b 20 20 20 20  |skip_pod..[.    |
000008c0  20 20 20 20 43 4d 50 20  20 20 20 20 72 32 2c 23  |    CMP     r2,#|
000008d0  26 46 35 0d 00 5c 1e 20  20 20 20 20 20 20 20 42  |&F5..\.        B|
000008e0  4e 45 20 20 20 20 20 65  6e 75 6d 5f 63 68 75 6e  |NE     enum_chun|
000008f0  6b 0d 00 5d 04 0d 00 5e  1c 20 20 20 20 20 20 20  |k..]...^.       |
00000900  20 53 55 42 20 20 20 20  20 72 30 2c 72 30 2c 23  | SUB     r0,r0,#|
00000910  31 0d 00 5f 19 20 20 20  20 20 20 20 20 4d 4f 56  |1.._.        MOV|
00000920  20 20 20 20 20 72 32 2c  72 38 0d 00 60 27 20 20  |     r2,r8..`'  |
00000930  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000940  50 6f 64 75 6c 65 5f 52  65 61 64 43 68 75 6e 6b  |Podule_ReadChunk|
00000950  22 0d 00 61 19 20 20 20  20 20 20 20 20 42 56 53  |"..a.        BVS|
00000960  20 20 20 20 20 45 72 72  6f 72 0d 00 62 04 0d 00  |     Error..b...|
00000970  63 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |c.        MOV   |
00000980  20 20 72 39 2c 23 30 0d  00 64 27 20 20 20 20 20  |  r9,#0..d'     |
00000990  20 20 20 4c 44 52 20 20  20 20 20 72 34 2c 5b 77  |   LDR     r4,[w|
000009a0  70 2c 23 61 72 67 5f 70  6f 64 75 6c 65 5d 0d 00  |p,#arg_podule]..|
000009b0  65 0a 2e 69 6e 73 74 72  0d 00 66 1e 20 20 20 20  |e..instr..f.    |
000009c0  20 20 20 20 4c 44 52 42  20 20 20 20 72 35 2c 5b  |    LDRB    r5,[|
000009d0  72 32 2c 72 39 5d 0d 00  67 12 20 20 20 20 20 20  |r2,r9]..g.      |
000009e0  20 20 a4 6c 63 28 35 29  0d 00 68 1e 20 20 20 20  |  .lc(5)..h.    |
000009f0  20 20 20 20 4c 44 52 42  20 20 20 20 72 36 2c 5b  |    LDRB    r6,[|
00000a00  72 34 2c 72 39 5d 0d 00  69 12 20 20 20 20 20 20  |r4,r9]..i.      |
00000a10  20 20 a4 6c 63 28 36 29  0d 00 6a 1c 20 20 20 20  |  .lc(6)..j.    |
00000a20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000a30  20 20 20 20 0d 00 6b 19  20 20 20 20 20 20 20 20  |    ..k.        |
00000a40  54 45 51 20 20 20 20 20  72 35 2c 23 30 0d 00 6c  |TEQ     r5,#0..l|
00000a50  19 20 20 20 20 20 20 20  20 54 45 51 4e 45 20 20  |.        TEQNE  |
00000a60  20 72 36 2c 23 30 0d 00  6d 18 20 20 20 20 20 20  | r6,#0..m.      |
00000a70  20 20 42 45 51 20 20 20  20 20 67 6f 74 30 0d 00  |  BEQ     got0..|
00000a80  6e 19 20 20 20 20 20 20  20 20 54 45 51 20 20 20  |n.        TEQ   |
00000a90  20 20 72 35 2c 72 36 0d  00 6f 1c 20 20 20 20 20  |  r5,r6..o.     |
00000aa0  20 20 20 41 44 44 45 51  20 20 20 72 39 2c 72 39  |   ADDEQ   r9,r9|
00000ab0  2c 23 31 0d 00 70 19 20  20 20 20 20 20 20 20 4d  |,#1..p.        M|
00000ac0  4f 56 4e 45 20 20 20 72  39 2c 23 30 0d 00 71 1c  |OVNE   r9,#0..q.|
00000ad0  20 20 20 20 20 20 20 20  41 44 44 4e 45 20 20 20  |        ADDNE   |
00000ae0  72 32 2c 72 32 2c 23 31  0d 00 72 19 20 20 20 20  |r2,r2,#1..r.    |
00000af0  20 20 20 20 42 20 20 20  20 20 20 20 69 6e 73 74  |    B       inst|
00000b00  72 0d 00 73 09 2e 67 6f  74 30 0d 00 74 19 20 20  |r..s..got0..t.  |
00000b10  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 35  |      CMP     r5|
00000b20  2c 72 36 0d 00 75 1c 20  20 20 20 20 20 20 20 42  |,r6..u.        B|
00000b30  4c 54 20 20 20 20 20 73  6b 69 70 5f 70 6f 64 0d  |LT     skip_pod.|
00000b40  00 76 16 2e 66 6f 75 6e  64 5f 70 6f 64 20 20 20  |.v..found_pod   |
00000b50  20 20 20 20 20 0d 00 77  24 20 20 20 20 20 20 20  |     ..w$       |
00000b60  20 4c 44 4d 49 41 20 20  20 77 70 2c 7b 72 30 2c  | LDMIA   wp,{r0,|
00000b70  72 35 2c 72 36 2c 72 37  7d 0d 00 78 19 20 20 20  |r5,r6,r7}..x.   |
00000b80  20 20 20 20 20 54 45 51  20 20 20 20 20 72 37 2c  |     TEQ     r7,|
00000b90  23 30 0d 00 79 16 20 20  20 20 20 20 20 20 ec 51  |#0..y.        .Q|
00000ba0  20 20 20 72 36 2c 23 30  0d 00 7a 1e 20 20 20 20  |   r6,#0..z.    |
00000bb0  20 20 20 20 42 20 20 20  20 20 20 20 64 6f 5f 63  |    B       do_c|
00000bc0  6f 6d 6d 61 6e 64 0d 00  7b 0d 2e 73 6b 69 70 5f  |ommand..{..skip_|
00000bd0  70 6f 64 0d 00 7c 1c 20  20 20 20 20 20 20 20 53  |pod..|.        S|
00000be0  55 42 53 20 20 20 20 72  33 2c 72 33 2c 23 31 0d  |UBS    r3,r3,#1.|
00000bf0  00 7d 1c 20 20 20 20 20  20 20 20 42 50 4c 20 20  |.}.        BPL  |
00000c00  20 20 20 70 6f 64 5f 6c  6f 6f 70 0d 00 7e 0f 2e  |   pod_loop..~..|
00000c10  6e 6f 5f 70 6f 64 75 6c  65 73 0d 00 7f 24 20 20  |no_podules...$  |
00000c20  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 77 70  |      LDMIA   wp|
00000c30  2c 7b 72 30 2c 72 35 2c  72 36 2c 72 37 7d 0d 00  |,{r0,r5,r6,r7}..|
00000c40  80 19 20 20 20 20 20 20  20 20 54 45 51 20 20 20  |..        TEQ   |
00000c50  20 20 72 36 2c 23 30 0d  00 81 19 20 20 20 20 20  |  r6,#0....     |
00000c60  20 20 20 54 45 51 4e 45  20 20 20 72 37 2c 23 30  |   TEQNE   r7,#0|
00000c70  0d 00 82 19 20 20 20 20  20 20 20 20 4d 4f 56 4e  |....        MOVN|
00000c80  45 20 20 20 72 36 2c 72  37 0d 00 83 1e 20 20 20  |E   r6,r7....   |
00000c90  20 20 20 20 20 42 4e 45  20 20 20 20 20 64 6f 5f  |     BNE     do_|
00000ca0  63 6f 6d 6d 61 6e 64 0d  00 84 19 20 20 20 20 20  |command....     |
00000cb0  20 20 20 54 45 51 20 20  20 20 20 72 36 2c 23 30  |   TEQ     r6,#0|
00000cc0  0d 00 85 18 20 20 20 20  20 20 20 20 42 45 51 20  |....        BEQ |
00000cd0  20 20 20 20 45 78 69 74  0d 00 86 19 20 20 20 20  |    Exit....    |
00000ce0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 35 2c 72  |    MOV     r5,r|
00000cf0  36 0d 00 87 19 20 20 20  20 20 20 20 20 4d 4f 56  |6....        MOV|
00000d00  20 20 20 20 20 72 36 2c  23 30 0d 00 88 0f 2e 64  |     r6,#0.....d|
00000d10  6f 5f 63 6f 6d 6d 61 6e  64 0d 00 89 19 20 20 20  |o_command....   |
00000d20  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 31 2c  |     MOV     r1,|
00000d30  72 38 0d 00 8a 19 20 20  20 20 20 20 20 20 4d 4f  |r8....        MO|
00000d40  56 20 20 20 20 20 72 30  2c 72 35 0d 00 8b 1a 20  |V     r0,r5.... |
00000d50  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00000d60  32 2c 23 33 32 0d 00 8c  18 20 20 20 20 20 20 20  |2,#32....       |
00000d70  20 42 4c 20 20 20 20 20  20 63 6f 70 79 0d 00 8d  | BL      copy...|
00000d80  19 20 20 20 20 20 20 20  20 4d 4f 56 53 20 20 20  |.        MOVS   |
00000d90  20 72 30 2c 72 36 0d 00  8e 19 20 20 20 20 20 20  | r0,r6....      |
00000da0  20 20 4d 4f 56 20 20 20  20 20 72 32 2c 23 30 0d  |  MOV     r2,#0.|
00000db0  00 8f 18 20 20 20 20 20  20 20 20 42 4c 4e 45 20  |...        BLNE |
00000dc0  20 20 20 63 6f 70 79 0d  00 90 1f 20 20 20 20 20  |   copy....     |
00000dd0  20 20 20 53 54 52 45 51  42 20 20 72 32 2c 5b 72  |   STREQB  r2,[r|
00000de0  31 2c 23 2d 31 5d 0d 00  91 0b 2e 6f 73 5f 63 6c  |1,#-1].....os_cl|
00000df0  69 0d 00 92 19 20 20 20  20 20 20 20 20 4d 4f 56  |i....        MOV|
00000e00  20 20 20 20 20 72 30 2c  72 38 0d 00 93 1d 20 20  |     r0,r8....  |
00000e10  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000e20  4f 53 5f 43 4c 49 22 0d  00 94 19 20 20 20 20 20  |OS_CLI"....     |
00000e30  20 20 20 42 56 53 20 20  20 20 20 45 72 72 6f 72  |   BVS     Error|
00000e40  0d 00 95 04 0d 00 96 24  2e 45 78 69 74 20 20 20  |.......$.Exit   |
00000e50  4c 44 4d 46 44 20 20 20  73 70 20 21 2c 7b 72 30  |LDMFD   sp !,{r0|
00000e60  2d 72 31 31 2c 70 63 7d  0d 00 97 04 0d 00 98 1c  |-r11,pc}........|
00000e70  2e 45 72 72 6f 72 20 20  41 44 44 20 20 20 20 20  |.Error  ADD     |
00000e80  73 70 2c 73 70 2c 23 34  0d 00 99 24 20 20 20 20  |sp,sp,#4...$    |
00000e90  20 20 20 20 4c 44 4d 46  44 20 20 20 73 70 20 21  |    LDMFD   sp !|
00000ea0  2c 7b 72 31 2d 72 31 31  2c 6c 72 7d 0d 00 9a 1f  |,{r1-r11,lr}....|
00000eb0  20 20 20 20 20 20 20 20  84 52 53 20 20 20 20 70  |        .RS    p|
00000ec0  63 2c 6c 72 2c 23 31 3c  3c 32 38 0d 00 9b 04 0d  |c,lr,#1<<28.....|
00000ed0  00 9c 1e 2e 63 6f 70 79  20 20 20 4c 44 52 42 20  |....copy   LDRB |
00000ee0  20 20 20 72 33 2c 5b 72  30 5d 2c 23 31 0d 00 9d  |   r3,[r0],#1...|
00000ef0  1e 20 20 20 20 20 20 20  20 53 54 52 42 20 20 20  |.        STRB   |
00000f00  20 72 33 2c 5b 72 31 5d  2c 23 31 0d 00 9e 1a 20  | r3,[r1],#1.... |
00000f10  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00000f20  33 2c 23 33 32 0d 00 9f  18 20 20 20 20 20 20 20  |3,#32....       |
00000f30  20 42 47 45 20 20 20 20  20 63 6f 70 79 0d 00 a0  | BGE     copy...|
00000f40  1f 20 20 20 20 20 20 20  20 53 54 52 42 20 20 20  |.        STRB   |
00000f50  20 72 32 2c 5b 72 31 2c  23 2d 31 5d 0d 00 a1 19  | r2,[r1,#-1]....|
00000f60  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000f70  70 63 2c 6c 72 0d 00 a2  14 20 20 20 20 20 20 20  |pc,lr....       |
00000f80  20 20 20 20 20 20 20 20  20 0d 00 a3 0b 2e 73 79  |         .....sy|
00000f90  6e 74 61 78 0d 00 a4 17  20 20 20 20 20 20 20 20  |ntax....        |
00000fa0  45 51 55 44 20 20 20 20  32 32 30 0d 00 a5 88 20  |EQUD    220.... |
00000fb0  20 20 20 20 20 20 20 45  51 55 53 20 20 20 20 22  |       EQUS    "|
00000fc0  53 79 6e 74 61 78 3a 20  2a 49 66 50 6f 64 75 6c  |Syntax: *IfPodul|
00000fd0  65 20 3c 70 61 72 74 20  70 6f 64 75 6c 65 20 6e  |e <part podule n|
00000fe0  61 6d 65 3e 20 3c 90 79  65 73 91 20 63 6f 6d 6d  |ame> <.yes. comm|
00000ff0  61 6e 64 3e 20 5b 3c 90  6e 6f 91 20 63 6f 6d 6d  |and> [<.no. comm|
00001000  61 6e 64 3e 5d 20 7c 20  3c 70 70 6e 3e 20 3c 63  |and>] | <ppn> <c|
00001010  6f 6d 6d 61 6e 64 3e 20  3c 90 79 65 73 91 20 70  |ommand> <.yes. p|
00001020  61 72 61 6d 3e 20 3c 90  6e 6f 91 20 70 61 72 61  |aram> <.no. para|
00001030  6d 3e 22 0d 00 a6 15 20  20 20 20 20 20 20 20 45  |m>"....        E|
00001040  51 55 42 20 20 20 20 30  0d 00 a7 11 20 20 20 20  |QUB    0....    |
00001050  20 20 20 20 41 4c 49 47  4e 0d 00 a8 09 2e 61 72  |    ALIGN.....ar|
00001060  67 73 0d 00 a9 19 20 20  20 20 20 20 20 20 45 51  |gs....        EQ|
00001070  55 53 20 20 20 20 22 2c  2c 2c 22 0d 00 aa 15 20  |US    ",,,".... |
00001080  20 20 20 20 20 20 20 45  51 55 42 20 20 20 20 30  |       EQUB    0|
00001090  0d 00 ab 11 20 20 20 20  20 20 20 20 41 4c 49 47  |....        ALIG|
000010a0  4e 0d 00 ac 21 20 20 20  20 20 20 20 20 45 51 55  |N...!        EQU|
000010b0  53 20 20 20 20 22 64 4c  20 32 38 2f 31 30 2f 39  |S    "dL 28/10/9|
000010c0  33 22 0d 00 ad 06 5d ed  0d 00 ae 2e c8 99 20 22  |3"....]....... "|
000010d0  4f 53 5f 46 69 6c 65 22  2c 31 30 2c 22 25 2e 49  |OS_File",10,"%.I|
000010e0  66 50 6f 64 75 6c 65 22  2c 26 46 46 43 2c 2c 63  |fPodule",&FFC,,c|
000010f0  6f 64 65 2c 50 25 0d 00  af 05 e0 0d 00 b0 05 3a  |ode,P%.........:|
00001100  0d 00 b1 0e dd 20 a4 6c  63 28 72 65 67 29 0d 00  |..... .lc(reg)..|
00001110  b2 0d 5b 4f 50 54 20 70  61 73 73 0d 00 b3 1a 20  |..[OPT pass.... |
00001120  53 55 42 20 20 20 20 20  72 65 67 2c 72 65 67 2c  |SUB     reg,reg,|
00001130  23 97 22 61 22 0d 00 b4  1d 20 43 4d 50 20 20 20  |#."a".... CMP   |
00001140  20 20 72 65 67 2c 23 97  22 7a 22 2d 97 22 61 22  |  reg,#."z"-."a"|
00001150  2b 31 0d 00 b5 18 20 53  55 42 43 43 20 20 20 72  |+1.... SUBCC   r|
00001160  65 67 2c 72 65 67 2c 23  33 32 0d 00 b6 1a 20 41  |eg,reg,#32.... A|
00001170  44 44 20 20 20 20 20 72  65 67 2c 72 65 67 2c 23  |DD     reg,reg,#|
00001180  97 22 61 22 0d 00 b7 14  20 43 4d 50 20 20 20 20  |."a".... CMP    |
00001190  20 72 65 67 2c 23 33 32  0d 00 b8 13 20 4d 4f 56  | reg,#32.... MOV|
000011a0  4c 54 20 20 20 72 65 67  2c 23 30 0d 00 b9 05 5d  |LT   reg,#0....]|
000011b0  0d 00 ba 07 3d 22 22 0d  ff                       |....=""..|
000011b9