Home » Archimedes archive » Acorn User » AU 1993-09.adf » !3DGraphic_3DGraphic » Source/SWI08

Source/SWI08

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 1993-09.adf » !3DGraphic_3DGraphic
Filename: Source/SWI08
Read OK:
File size: 3A29 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >Source.SWI08
   20REM BAU3D_Load source
   30REM by DCA
   40REM for 32-bit machines
   50REM (c) BAU August 1993
   60:
   70DEF FNswi08_name
   80="Load"
   90:
  100DEF FNswi08_vars
  110load_scale=FNwk(4)
  120load_colour=FNwk(4)
  130keyword_next=0
  140keyword_name=4
  150keyword_addr=8
  160keyword_req=12
  170keywords=6
  180=0
  190:
  200DEF FNswi08_code
  210[OPT pass%
  220.load   STMFD   (sp)!,{r0-r11,link}
  230        MOV     r10,r0
  240        CMP     r1,#0
  250        LDREQ   r1,default_scale
  260        FNadrl(14,load_scale)
  270        STR     r1,[r14]
  280        MOV     r0,#&100
  290        BL      malloc
  300        BVS     load_file_err
  310        MOV     r9,r0
  320        MOV     r8,#0
  330        ADR     r0,command_list
  340.init_keyword_list
  350        LDR     r1,[r0]
  360        CMP     r1,#0
  370        BEQ     keywords_defined
  380        MOV     r1,#0
  390        BL      add_keyword_to_list
  400        LDMVSFD (sp)!,{r0-r11,pc}
  410.skip_to_next_keyword
  420        LDRB    r14,[r0],#1
  430        CMP     r14,#32
  440        BGE     skip_to_next_keyword
  450        ADD     r0,r0,#3
  460        BIC     r0,r0,#3
  470        B       init_keyword_list
  480.keywords_defined
  490        MOV     r0,r10
  500        MOV     r1,r9
  510        BL      fn_strip
  520        BL      load_file
  530        BVS     load_file_err
  540        MOV     r0,r9
  550        BL      free
  560        ADR     r0,world_name
  570        BL      identify_keyword
  580        CMP     r0,#0
  590        ADRLT   r0,err_no_world
  600        BLT     load_file_err
  610        STR     r1,[sp]
  620.free_keyword_list
  630        CMP     r8,#0
  640        BEQ     freed_keyword_list
  650        LDR     r0,[r8,#keyword_name]
  660        BL      free
  670        LDR     r1,[r8,#keyword_next]
  680        MOV     r0,r8
  690        BL      free
  700        MOV     r8,r1
  710        B       free_keyword_list
  720.freed_keyword_list
  730        LDR     r0,[sp]
  740        BL      calc_bounds
  750        LDMFD   (sp)!,{r0-r11,pc}
  760
  770.load_file_err
  780        STR     r0,[sp]
  790        LDMFD   (sp)!,{r0-r11,link}
  800        ORRS    pc,link,#1<<28
  810
  820.err_no_world
  830        DCD     0
  840        FNz("No 'world' defined")
  850
  860.world_name  FNz("world:")
  870
  880.command_list
  890        FNz("rem")
  900        FNz("include")
  910        FNz("colour")
  920        FNz("surface")
  930        FNz("object")
  940        FNz("merge")
  950        FNz("closed")
  960        DCD     0
  970
  980.add_keyword_to_list
  990        STMFD   (sp)!,{r0-r7,link}
 1000        MOV     r6,r0
 1010        MOV     r0,#keyword_req
 1020        BL      malloc
 1030        STRVS   r0,[sp]
 1040        LDMVSFD (sp)!,{r0-r7,pc}
 1050        MOV     r7,r0
 1060        CMP     r8,#0
 1070        MOVEQ   r8,r7
 1080        BEQ     add_key2
 1090        MOV     r5,r8
 1100.add_key1
 1110        LDR     r0,[r5,#keyword_next]
 1120        CMP     r0,#0
 1130        MOVNE   r5,r0
 1140        BNE     add_key1
 1150        STR     r7,[r5,#keyword_next]
 1160.add_key2
 1170        MOV     r0,#0
 1180        STR     r0,[r7,#keyword_next]
 1190        STR     r1,[r7,#keyword_addr]
 1200        MOV     r2,#0
 1210.add_key3
 1220        LDRB    r0,[r6,r2]
 1230        CMP     r0,#ASC" "
 1240        ADDGT   r2,r2,#1
 1250        BGT     add_key3
 1260        ADD     r0,r2,#5
 1270        BIC     r0,r0,#3
 1280        BL      malloc
 1290        STRVS   r0,[sp]
 1300        LDMVSFD (sp)!,{r0-r7,pc}
 1310        MOV     r5,r0
 1320        STR     r5,[r7,#keyword_name]
 1330        MOV     r2,#0
 1340.add_key4
 1350        LDRB    r0,[r6],#1
 1360        CMP     r0,#ASC" "
 1370        MOVLE   r0,#ASC":"
 1380        STRB    r0,[r5],#1
 1390        BGT     add_key4
 1400        MOV     r0,#0
 1410        STRB    r0,[r5]
 1420        LDMFD   (sp)!,{r0-r7,pc}
 1430
 1440.err_coord_not_expected
 1450        DCD     0
 1460        FNz("Co-ordinate not expected")
 1470
 1480.load_file
 1490        STMFD   (sp)!,{r0-r11,link}
 1500        MOV     r0,#5
 1510        MOV     r1,r9
 1520        SWI     "XOS_File"
 1530        STRVS   r0,[sp]
 1540        LDMVSFD (sp)!,{r0-r11,pc}
 1550        CMP     r0,#1
 1560        BEQ     is_a_file
 1570        MOV     r2,r0
 1580        MOV     r0,#19
 1590        MOV     r1,r9
 1600        SWI     "XOS_File"
 1610        STR     r0,[sp]
 1620        LDMFD   (sp)!,{r0-r11,link}
 1630        ORRS    pc,link,#1<<28
 1640.is_a_file
 1650        MOV     r0,#&40
 1660        MOV     r1,r9
 1670        SWI     "XOS_Find"
 1680        MOV     r10,r0
 1690        MOV     r0,#&200
 1700        BL      malloc
 1710        STRVS   r0,[sp]
 1720        LDMVSFD (sp)!,{r0-r11,pc}
 1730        MOV     r11,r0
 1740        MVN     r7,#0
 1750.getline_loop
 1760        MOV     r0,#5
 1770        MOV     r1,r10
 1780        SWI     "XOS_Args"
 1790        CMP     r2,#0
 1800        BNE     is_eof
 1810        MOV     r0,r11
 1820        BL      fn_getline
 1830        ADD     r1,r11,#&100
 1840        BL      fn_strip
 1850        LDRB    r14,[r1]
 1860        CMP     r14,#ASC"-"
 1870        BEQ     is_coord
 1880        CMP     r14,#ASC"0"
 1890        BLT     not_coord
 1900        CMP     r14,#ASC"9"
 1910        BGT     not_coord
 1920.is_coord
 1930        CMP     r7,#3
 1940        ADRNE   r0,err_coord_not_expected
 1950        BNE     load_err
 1960        MOV     r0,r6
 1970        MOV     r1,#12
 1980        BL      realloc
 1990        BVS     load_err
 2000        MOV     r6,r0
 2010        STR     r6,[r5,#subobj_type]
 2020        LDR     r2,[r6,#surf_n]
 2030        ADD     r1,r6,#surf_req
 2040        ADD     r1,r1,r2,LSL #3
 2050        ADD     r1,r1,r2,LSL #2
 2060        MOV     r3,#3
 2070.read_vertex
 2080        BL      fn_getnum
 2090        STR     r0,[r1],#4
 2100        SUBS    r3,r3,#1
 2110        BNE     read_vertex
 2120        ADD     r2,r2,#1
 2130        STR     r2,[r6,#surf_n]
 2140.not_coord
 2150        BL      fn_getpar
 2160        LDRB    r14,[r11]
 2170        CMP     r14,#ASC" "
 2180        BLE     getline_loop
 2190        MOV     r0,r11
 2200        BL      identify_keyword
 2210        CMP     r0,#0
 2220        ADRLT   r0,err_unknown_keyword
 2230        BLT     load_err
 2240        CMP     r0,#keywords
 2250        MOVLT   r7,r0
 2260        BGE     user_keyword
 2270        ADD     pc,pc,r0,LSL #2
 2280        DCD     0
 2290        B       getline_loop
 2300        B       do_include
 2310        B       do_colour
 2320        B       do_surface
 2330        B       do_object
 2340.do_include
 2350        MOV     r1,r11
 2360        MOV     r2,r11
 2370        MOV     r3,r9
 2380.include_first_bit
 2390        LDRB    r14,[r3],#1
 2400        STRB    r14,[r1],#1
 2410        CMP     r14,#ASC"."
 2420        MOVEQ   r2,r1
 2430        CMP     r14,#ASC" "
 2440        BGT     include_first_bit
 2450        ADD     r3,r11,#&100
 2460.copy_tail
 2470        LDRB    r14,[r3],#1
 2480        CMP     r14,#ASC" "
 2490        MOVLE   r14,#0
 2500        STRB    r14,[r2],#1
 2510        BGT     copy_tail
 2520        STMFD   (sp)!,{r9}
 2530        MOV     r9,r11
 2540        BL      load_file
 2550        LDMFD   (sp)!,{r9}
 2560        BVS     load_file_err
 2570        B       getline_loop
 2580.do_colour
 2590        STMFD   (sp)!,{r4}
 2600        MOV     r3,#0
 2610        MOV     r4,#8
 2620.get_colour_loop
 2630        BL      fn_getpar
 2640        MOV     r0,#10+(1<<29)
 2650        MOV     r1,r11
 2660        MOV     r2,#255
 2670        SWI     "XOS_ReadUnsigned"
 2680        ORR     r3,r3,r2,LSL r4
 2690        ADD     r4,r4,#8
 2700        CMP     r4,#32
 2710        BNE     get_colour_loop
 2720        FNadrl(14,load_colour)
 2730        STR     r3,[r14]
 2740        LDMFD   (sp)!,{r4}
 2750        B       getline_loop
 2760.do_surface
 2770        MOV     r0,#surf_req
 2780        BL      malloc
 2790        BVS     load_err
 2800        MOV     r6,r0
 2810        MOV     r0,#0
 2820        STR     r0,[r6,#surf_type]
 2830        STR     r0,[r6,#surf_n]
 2840        FNadrl(14,load_colour)
 2850        LDR     r0,[r14]
 2860        STR     r0,[r6,#surf_colour]
 2870        MOV     r0,#subobj_req
 2880        BL      malloc
 2890        BVS     load_err
 2900        MOV     r5,r0
 2910        ADD     r3,r4,#obj_list
 2920.do_surf2
 2930        LDR     r0,[r3]
 2940        CMP     r0,#0
 2950        ADDNE   r3,r0,#subobj_next
 2960        BNE     do_surf2
 2970        STR     r5,[r3]
 2980        MOV     r0,#0
 2990        STR     r0,[r5,#subobj_next]
 3000        STR     r6,[r5,#subobj_type]
 3010        MOV     r0,#bit_surf
 3020        STR     r0,[r5,#subobj_flags]
 3030        B       getline_loop
 3040.do_object
 3050        BL      fn_getpar
 3060        MOV     r0,r11
 3070        BL      identify_keyword
 3080        CMP     r0,#0
 3090        ADRGE   r0,err_defined_twice
 3100        BGE     load_err
 3110        MOV     r0,#obj_req
 3120        BL      malloc
 3130        BVS     load_err
 3140        MOV     r4,r0
 3150        MOV     r2,#0
 3160.do_obj2
 3170        LDRB    r0,[r11,r2]
 3180        CMP     r0,#ASC" "
 3190        ADDGT   r2,r2,#1
 3200        BGT     do_obj2
 3210        MOV     r0,r2
 3220        ADD     r0,r0,#4
 3230        BIC     r0,r0,#3
 3240        BL      malloc
 3250        BVS     load_err
 3260        MOV     r2,r0
 3270        MOV     r1,r11
 3280.do_obj3
 3290        LDRB    r14,[r1],#1
 3300        CMP     r14,#ASC" "
 3310        MOVLE   r14,#0
 3320        STRB    r14,[r0],#1
 3330        BGT     do_obj3
 3340        STR     r2,[r4,#obj_name]
 3350        MOV     r0,#0
 3360        STR     r0,[r4,#obj_list]
 3370        MOV     r0,#&01000000
 3380        SUB     r0,r0,#1
 3390        FNadrl(14,load_colour)
 3400        STR     r0,[r14]
 3410        LDR     r0,[r4,#obj_name]
 3420        MOV     r1,r4
 3430        BL      add_keyword_to_list
 3440        BVS     load_err
 3450        B       getline_loop
 3460.user_keyword
 3470        MOV     r0,#subobj_req
 3480        BL      malloc
 3490        BVS     load_err
 3500        MOV     r3,r0
 3510        ADD     r2,r4,#obj_list
 3520.user1
 3530        LDR     r0,[r2]
 3540        CMP     r0,#0
 3550        ADDNE   r2,r0,#subobj_next
 3560        BNE     user1
 3570        STR     r3,[r2]
 3580        MOV     r0,#0
 3590        STR     r0,[r3,#subobj_next]
 3600        STR     r1,[r3,#subobj_type]
 3610        MOV     r2,#3
 3620        ADD     r1,r3,#subobj_offset
 3630.user2  BL      fn_getnum
 3640        STR     r0,[r1],#4
 3650        SUBS    r2,r2,#1
 3660        BNE     user2
 3670        FNadrl(14,load_scale)
 3680        LDR     r0,[r14]
 3690        STMFD   (sp)!,{r0}
 3700        LDR     r0,ang_scale
 3710        STR     r0,[r14]
 3720        MOV     r2,#3
 3730        ADD     r1,r3,#subobj_angle
 3740.user3  BL      fn_getnum
 3750        STR     r0,[r1],#4
 3760        SUBS    r2,r2,#1
 3770        BNE     user3
 3780        LDMFD   (sp)!,{r0}
 3790        FNadrl(14,load_scale)
 3800        STR     r0,[r14]
 3810
 3820        MOV     r2,#0
 3830.user4
 3840        BL      fn_getpar
 3850        MOV     r0,r11
 3860        BL      identify_keyword
 3870        CMP     r0,#5
 3880        ORREQ   r2,r2,#bit_merge
 3890        BEQ     user4
 3900        CMP     r0,#6
 3910        ORREQ   r2,r2,#bit_closed
 3920        BEQ     user4
 3930        STR     r2,[r3,#subobj_flags]
 3940        B       getline_loop
 3950
 3960.ang_scale
 3970        DCD     &10000/360
 3980
 3990.is_eof MOV     r0,r11
 4000        BL      free
 4010        MOV     r0,#&00
 4020        MOV     r1,r10
 4030        SWI     "XOS_Find"
 4040        LDMFD   (sp)!,{r0-r11,pc}
 4050.load_err
 4060        STR     r0,[sp]
 4070        MOV     r0,r11
 4080        BL      free
 4090        MOV     r0,#&00
 4100        MOV     r1,r10
 4110        SWI     "XOS_Find"
 4120        LDMFD   (sp)!,{r0-r11,link}
 4130        ORRS    pc,link,#1<<28
 4140
 4150.err_unknown_keyword
 4160        DCD     0
 4170        FNz("Unknown keyword")
 4180
 4190.err_defined_twice
 4200        DCD     0
 4210        FNz("Keyword defined twice")
 4220
 4230.fn_getnum
 4240        STMFD   (sp)!,{r1-r11,link}
 4250        BL      fn_getpar
 4260        MOV     r4,r11
 4270        LDRB    r0,[r4]
 4280        CMP     r0,#ASC"-"
 4290        MOVEQ   r6,#1
 4300        ADDEQ   r4,r4,#1
 4310        MOVNE   r6,#0
 4320        MOV     r7,#0
 4330        MOV     r5,#0
 4340        MOV     r3,#10
 4350.fn_getnum_loop
 4360        LDRB    r0,[r4],#1
 4370        CMP     r0,#ASC"."
 4380        MOVEQ   r5,#1
 4390        BEQ     fn_getnum_loop
 4400        CMP     r0,#ASC"0"
 4410        BLT     got_num
 4420        CMP     r0,#ASC"9"
 4430        BGT     got_num
 4440        SUB     r0,r0,#ASC"0"
 4450        MLA     r7,r3,r7,r0
 4460        CMP     r5,#0
 4470        MULNE   r5,r3,r5
 4480        B       fn_getnum_loop
 4490.got_num
 4500        CMP     r6,#0
 4510        RSBNE   r7,r7,#0
 4520        FNadrl(14,load_scale)
 4530        LDR     r14,[r14]
 4540        MUL     r0,r7,r14
 4550        CMP     r5,#0
 4560        LDMEQFD (sp)!,{r1-r11,pc}
 4570        MOV     r1,r5
 4580        BL      divide
 4590        MOV     r0,r2
 4600        LDMFD   (sp)!,{r1-r11,pc}
 4610
 4620.fn_getpar
 4630        STMFD   (sp)!,{r0-r11,link}
 4640        MOV     r4,r11
 4650        ADD     r5,r11,#&100
 4660.fn_getpar_loop
 4670        LDRB    r0,[r5],#1
 4680        CMP     r0,#ASC"A"
 4690        BLT     not_uc
 4700        CMP     r0,#ASC"Z"
 4710        ADDLE   r0,r0,#ASC"a"-ASC"A"
 4720.not_uc
 4730        CMP     r0,#ASC","
 4740        MOVEQ   r0,#ASC" "
 4750        CMP     r0,#ASC" "
 4760        MOVLE   r0,#0
 4770        STRB    r0,[r4],#1
 4780        BGT     fn_getpar_loop
 4790        ADD     r1,r11,#&100
 4800        MOV     r0,r5
 4810        BL      fn_strip
 4820        LDMFD   (sp)!,{r0-r11,pc}
 4830
 4840.fn_getline
 4850        STMFD   (sp)!,{r0-r11,link}
 4860        MOV     r5,r0
 4870.fn_getline_loop
 4880        MOV     r1,r10
 4890        SWI     "XOS_BGet"
 4900        BCS     got_line
 4910        CMP     r0,#32
 4920        STRGEB  r0,[r5],#1
 4930        BGE     fn_getline_loop
 4940.got_line
 4950        MOV     r0,#0
 4960        STRB    r0,[r5]
 4970        LDMFD   (sp)!,{r0-r11,pc}
 4980
 4990.fn_strip
 5000        STMFD   (sp)!,{r0-r11,link}
 5010.strip1 LDRB    r14,[r0]
 5020        CMP     r14,#ASC" "
 5030        ADDEQ   r0,r0,#1
 5040        BEQ     strip1
 5050        MOV     r2,r1
 5060.strip2 LDRB    r14,[r0],#1
 5070        STRB    r14,[r1],#1
 5080        CMP     r14,#ASC" "
 5090        MOVNE   r2,r1
 5100        CMP     r14,#32
 5110        BGE     strip2
 5120        MOV     r14,#0
 5130        STRB    r14,[r2]
 5140        LDMFD   (sp)!,{r0-r11,pc}
 5150
 5160.identify_keyword
 5170        STMFD   (sp)!,{r2-r11,link}
 5180        MOV     r7,r0
 5190        MOV     r4,#0
 5200        MOV     r5,r8
 5210.id_loop
 5220        CMP     r5,#0
 5230        MVNEQ   r0,#0
 5240        MOVEQ   r1,#0
 5250        LDMEQFD (sp)!,{r2-r11,pc}
 5260        LDR     r2,[r5,#keyword_name]
 5270        MOV     r3,r7
 5280.id_compare
 5290        LDRB    r0,[r2],#1
 5300        LDRB    r1,[r3],#1
 5310        CMP     r0,r1
 5320        BNE     id_diff
 5330        CMP     r0,#ASC":"
 5340        BNE     id_compare
 5350.id_matches
 5360        MOV     r0,r4
 5370        LDR     r1,[r5,#keyword_addr]
 5380        LDMFD   (sp)!,{r2-r11,pc}
 5390.id_diff
 5400        CMP     r0,#ASC":"
 5410        BNE     next_id
 5420        CMP     r1,#ASC" "
 5430        BLE     id_matches
 5440.next_id
 5450        ADD     r4,r4,#1
 5460        LDR     r5,[r5,#keyword_next]
 5470        B       id_loop
 5480
 5490.default_scale
 5500        DCD     10000
 5510]
 5520=0
 5530:
 5540DEF FNz(z$)
 5550[OPT pass%
 5560        EQUS    z$
 5570        EQUB    0
 5580        ALIGN
 5590]
 5600=0

� >Source.SWI08
� BAU3D_Load source
� by DCA
(� for 32-bit machines
2� (c) BAU August 1993
<:
F� �swi08_name
P="Load"
Z:
d� �swi08_vars
nload_scale=�wk(4)
xload_colour=�wk(4)
�keyword_next=0
�keyword_name=4
�keyword_addr=8
�keyword_req=12
�keywords=6
�=0
�:
�� �swi08_code
�[OPT pass%
�'.load   STMFD   (sp)!,{r0-r11,link}
�        MOV     r10,r0
�        CMP     r1,#0
�$        LDREQ   r1,default_scale
         �adrl(14,load_scale)
        STR     r1,[r14]
        MOV     r0,#&100
"        BL      malloc
,!        BVS     load_file_err
6        MOV     r9,r0
@        MOV     r8,#0
J#        ADR     r0,command_list
T.init_keyword_list
^        LDR     r1,[r0]
h        CMP     r1,#0
r$        BEQ     keywords_defined
|        MOV     r1,#0
�'        BL      add_keyword_to_list
�%        LDMVSFD (sp)!,{r0-r11,pc}
�.skip_to_next_keyword
�        LDRB    r14,[r0],#1
�        CMP     r14,#32
�(        BGE     skip_to_next_keyword
�        ADD     r0,r0,#3
�        BIC     r0,r0,#3
�%        B       init_keyword_list
�.keywords_defined
�        MOV     r0,r10
�        MOV     r1,r9
�        BL      fn_strip
        BL      load_file
!        BVS     load_file_err
        MOV     r0,r9
&        BL      free
0!        ADR     r0,world_name
:$        BL      identify_keyword
D        CMP     r0,#0
N#        ADRLT   r0,err_no_world
X!        BLT     load_file_err
b        STR     r1,[sp]
l.free_keyword_list
v        CMP     r8,#0
�&        BEQ     freed_keyword_list
�)        LDR     r0,[r8,#keyword_name]
�        BL      free
�)        LDR     r1,[r8,#keyword_next]
�        MOV     r0,r8
�        BL      free
�        MOV     r8,r1
�%        B       free_keyword_list
�.freed_keyword_list
�        LDR     r0,[sp]
�        BL      calc_bounds
�%        LDMFD   (sp)!,{r0-r11,pc}
�
.load_file_err
        STR     r0,[sp]
'        LDMFD   (sp)!,{r0-r11,link}
 !        �RS    pc,link,#1<<28
*
4.err_no_world
>        DCD     0
H$        �z("No 'world' defined")
R
\.world_name  �z("world:")
f
p.command_list
z        �z("rem")
�        �z("include")
�        �z("colour")
�        �z("surface")
�        �z("object")
�        �z("merge")
�        �z("closed")
�        DCD     0
�
�.add_keyword_to_list
�&        STMFD   (sp)!,{r0-r7,link}
�        MOV     r6,r0
�#        MOV     r0,#keyword_req
�        BL      malloc
        STRVS   r0,[sp]
$        LDMVSFD (sp)!,{r0-r7,pc}
        MOV     r7,r0
$        CMP     r8,#0
.        �Q   r8,r7
8        BEQ     add_key2
B        MOV     r5,r8
L
.add_key1
V)        LDR     r0,[r5,#keyword_next]
`        CMP     r0,#0
j        MOVNE   r5,r0
t        BNE     add_key1
~)        STR     r7,[r5,#keyword_next]
�
.add_key2
�        MOV     r0,#0
�)        STR     r0,[r7,#keyword_next]
�)        STR     r1,[r7,#keyword_addr]
�        MOV     r2,#0
�
.add_key3
�        LDRB    r0,[r6,r2]
�        CMP     r0,#�" "
�        ADDGT   r2,r2,#1
�        BGT     add_key3
�        ADD     r0,r2,#5
�        BIC     r0,r0,#3
        BL      malloc

        STRVS   r0,[sp]
$        LDMVSFD (sp)!,{r0-r7,pc}
        MOV     r5,r0
()        STR     r5,[r7,#keyword_name]
2        MOV     r2,#0
<
.add_key4
F        LDRB    r0,[r6],#1
P        CMP     r0,#�" "
Z        MOVLE   r0,#�":"
d        STRB    r0,[r5],#1
n        BGT     add_key4
x        MOV     r0,#0
�        STRB    r0,[r5]
�$        LDMFD   (sp)!,{r0-r7,pc}
�
�.err_coord_not_expected
�        DCD     0
�*        �z("Co-ordinate not expected")
�
�.load_file
�'        STMFD   (sp)!,{r0-r11,link}
�        MOV     r0,#5
�        MOV     r1,r9
�        SWI     "XOS_File"
�        STRVS   r0,[sp]
%        LDMVSFD (sp)!,{r0-r11,pc}
        CMP     r0,#1
        BEQ     is_a_file
"        MOV     r2,r0
,        MOV     r0,#19
6        MOV     r1,r9
@        SWI     "XOS_File"
J        STR     r0,[sp]
T'        LDMFD   (sp)!,{r0-r11,link}
^!        �RS    pc,link,#1<<28
h.is_a_file
r        MOV     r0,#&40
|        MOV     r1,r9
�        SWI     "XOS_Find"
�        MOV     r10,r0
�        MOV     r0,#&200
�        BL      malloc
�        STRVS   r0,[sp]
�%        LDMVSFD (sp)!,{r0-r11,pc}
�        MOV     r11,r0
�        MVN     r7,#0
�.getline_loop
�        MOV     r0,#5
�        MOV     r1,r10
�        SWI     "XOS_Args"
�        CMP     r2,#0
        BNE     is_eof
        MOV     r0,r11
        BL      fn_getline
&         ADD     r1,r11,#&100
0        BL      fn_strip
:        LDRB    r14,[r1]
D        CMP     r14,#�"-"
N        BEQ     is_coord
X        CMP     r14,#�"0"
b        BLT     not_coord
l        CMP     r14,#�"9"
v        BGT     not_coord
�
.is_coord
�        CMP     r7,#3
�-        ADRNE   r0,err_coord_not_expected
�        BNE     load_err
�        MOV     r0,r6
�        MOV     r1,#12
�        BL      realloc
�        BVS     load_err
�        MOV     r6,r0
�(        STR     r6,[r5,#subobj_type]
�#        LDR     r2,[r6,#surf_n]
�#        ADD     r1,r6,#surf_req
�#        ADD     r1,r1,r2,LSL #3
#        ADD     r1,r1,r2,LSL #2
        MOV     r3,#3
.read_vertex
         BL      fn_getnum
*        STR     r0,[r1],#4
4        SUBS    r3,r3,#1
>        BNE     read_vertex
H        ADD     r2,r2,#1
R#        STR     r2,[r6,#surf_n]
\.not_coord
f        BL      fn_getpar
p        LDRB    r14,[r11]
z        CMP     r14,#�" "
�         BLE     getline_loop
�        MOV     r0,r11
�$        BL      identify_keyword
�        CMP     r0,#0
�*        ADRLT   r0,err_unknown_keyword
�        BLT     load_err
�         CMP     r0,#keywords
�        MOVLT   r7,r0
�         BGE     user_keyword
�#        ADD     pc,pc,r0,LSL #2
�        DCD     0
�         B       getline_loop
�        B       do_include
	        B       do_colour
	        B       do_surface
	        B       do_object
	$.do_include
	.        MOV     r1,r11
	8        MOV     r2,r11
	B        MOV     r3,r9
	L.include_first_bit
	V        LDRB    r14,[r3],#1
	`        STRB    r14,[r1],#1
	j        CMP     r14,#�"."
	t        �Q   r2,r1
	~        CMP     r14,#�" "
	�%        BGT     include_first_bit
	�         ADD     r3,r11,#&100
	�.copy_tail
	�        LDRB    r14,[r3],#1
	�        CMP     r14,#�" "
	�        MOVLE   r14,#0
	�        STRB    r14,[r2],#1
	�        BGT     copy_tail
	�        STMFD   (sp)!,{r9}
	�        MOV     r9,r11
	�        BL      load_file
	�        LDMFD   (sp)!,{r9}
!        BVS     load_file_err

         B       getline_loop
.do_colour
        STMFD   (sp)!,{r4}
(        MOV     r3,#0
2        MOV     r4,#8
<.get_colour_loop
F        BL      fn_getpar
P"        MOV     r0,#10+(1<<29)
Z        MOV     r1,r11
d        MOV     r2,#255
n&        SWI     "XOS_ReadUnsigned"
x"        �R     r3,r3,r2,LSL r4
�        ADD     r4,r4,#8
�        CMP     r4,#32
�#        BNE     get_colour_loop
�!        �adrl(14,load_colour)
�        STR     r3,[r14]
�        LDMFD   (sp)!,{r4}
�         B       getline_loop
�.do_surface
�         MOV     r0,#surf_req
�        BL      malloc
�        BVS     load_err
�        MOV     r6,r0
�        MOV     r0,#0
&        STR     r0,[r6,#surf_type]
#        STR     r0,[r6,#surf_n]
!        �adrl(14,load_colour)
"        LDR     r0,[r14]
,(        STR     r0,[r6,#surf_colour]
6"        MOV     r0,#subobj_req
@        BL      malloc
J        BVS     load_err
T        MOV     r5,r0
^#        ADD     r3,r4,#obj_list
h
.do_surf2
r        LDR     r0,[r3]
|        CMP     r0,#0
�&        ADDNE   r3,r0,#subobj_next
�        BNE     do_surf2
�        STR     r5,[r3]
�        MOV     r0,#0
�(        STR     r0,[r5,#subobj_next]
�(        STR     r6,[r5,#subobj_type]
�         MOV     r0,#bit_surf
�)        STR     r0,[r5,#subobj_flags]
�         B       getline_loop
�.do_object
�        BL      fn_getpar
�        MOV     r0,r11
�$        BL      identify_keyword
        CMP     r0,#0
(        ADRGE   r0,err_defined_twice
        BGE     load_err
&        MOV     r0,#obj_req
0        BL      malloc
:        BVS     load_err
D        MOV     r4,r0
N        MOV     r2,#0
X.do_obj2
b        LDRB    r0,[r11,r2]
l        CMP     r0,#�" "
v        ADDGT   r2,r2,#1
�        BGT     do_obj2
�        MOV     r0,r2
�        ADD     r0,r0,#4
�        BIC     r0,r0,#3
�        BL      malloc
�        BVS     load_err
�        MOV     r2,r0
�        MOV     r1,r11
�.do_obj3
�        LDRB    r14,[r1],#1
�        CMP     r14,#�" "
�        MOVLE   r14,#0
�        STRB    r14,[r0],#1

        BGT     do_obj3

%        STR     r2,[r4,#obj_name]

        MOV     r0,#0

 %        STR     r0,[r4,#obj_list]

*!        MOV     r0,#&01000000

4        SUB     r0,r0,#1

>!        �adrl(14,load_colour)

H        STR     r0,[r14]

R%        LDR     r0,[r4,#obj_name]

\        MOV     r1,r4

f'        BL      add_keyword_to_list

p        BVS     load_err

z         B       getline_loop

�.user_keyword

�"        MOV     r0,#subobj_req

�        BL      malloc

�        BVS     load_err

�        MOV     r3,r0

�#        ADD     r2,r4,#obj_list

�
.user1

�        LDR     r0,[r2]

�        CMP     r0,#0

�&        ADDNE   r2,r0,#subobj_next

�        BNE     user1

�        STR     r3,[r2]

�        MOV     r0,#0
(        STR     r0,[r3,#subobj_next]
(        STR     r1,[r3,#subobj_type]
        MOV     r2,#3
$(        ADD     r1,r3,#subobj_offset
..user2  BL      fn_getnum
8        STR     r0,[r1],#4
B        SUBS    r2,r2,#1
L        BNE     user2
V         �adrl(14,load_scale)
`        LDR     r0,[r14]
j        STMFD   (sp)!,{r0}
t         LDR     r0,ang_scale
~        STR     r0,[r14]
�        MOV     r2,#3
�'        ADD     r1,r3,#subobj_angle
�.user3  BL      fn_getnum
�        STR     r0,[r1],#4
�        SUBS    r2,r2,#1
�        BNE     user3
�        LDMFD   (sp)!,{r0}
�         �adrl(14,load_scale)
�        STR     r0,[r14]
�
�        MOV     r2,#0
�
.user4
        BL      fn_getpar

        MOV     r0,r11
$        BL      identify_keyword
        CMP     r0,#5
(#        �REQ   r2,r2,#bit_merge
2        BEQ     user4
<        CMP     r0,#6
F$        �REQ   r2,r2,#bit_closed
P        BEQ     user4
Z)        STR     r2,[r3,#subobj_flags]
d         B       getline_loop
n
x.ang_scale
�        DCD     &10000/360
�
�.is_eof MOV     r0,r11
�        BL      free
�        MOV     r0,#&00
�        MOV     r1,r10
�        SWI     "XOS_Find"
�%        LDMFD   (sp)!,{r0-r11,pc}
�
.load_err
�        STR     r0,[sp]
�        MOV     r0,r11
�        BL      free
�        MOV     r0,#&00
        MOV     r1,r10
        SWI     "XOS_Find"
'        LDMFD   (sp)!,{r0-r11,link}
"!        �RS    pc,link,#1<<28
,
6.err_unknown_keyword
@        DCD     0
J!        �z("Unknown keyword")
T
^.err_defined_twice
h        DCD     0
r'        �z("Keyword defined twice")
|
�.fn_getnum
�'        STMFD   (sp)!,{r1-r11,link}
�        BL      fn_getpar
�        MOV     r4,r11
�        LDRB    r0,[r4]
�        CMP     r0,#�"-"
�        �Q   r6,#1
�        ADDEQ   r4,r4,#1
�        MOVNE   r6,#0
�        MOV     r7,#0
�        MOV     r5,#0
�        MOV     r3,#10
�.fn_getnum_loop
        LDRB    r0,[r4],#1
        CMP     r0,#�"."
        �Q   r5,#1
&"        BEQ     fn_getnum_loop
0        CMP     r0,#�"0"
:        BLT     got_num
D        CMP     r0,#�"9"
N        BGT     got_num
X        SUB     r0,r0,#�"0"
b        MLA     r7,r3,r7,r0
l        CMP     r5,#0
v        MULNE   r5,r3,r5
�"        B       fn_getnum_loop
�.got_num
�        CMP     r6,#0
�        RSBNE   r7,r7,#0
�         �adrl(14,load_scale)
�        LDR     r14,[r14]
�        MUL     r0,r7,r14
�        CMP     r5,#0
�%        LDMEQFD (sp)!,{r1-r11,pc}
�        MOV     r1,r5
�        BL      divide
�        MOV     r0,r2
�%        LDMFD   (sp)!,{r1-r11,pc}

.fn_getpar
'        STMFD   (sp)!,{r0-r11,link}
         MOV     r4,r11
*         ADD     r5,r11,#&100
4.fn_getpar_loop
>        LDRB    r0,[r5],#1
H        CMP     r0,#�"A"
R        BLT     not_uc
\        CMP     r0,#�"Z"
f$        ADDLE   r0,r0,#�"a"-�"A"
p.not_uc
z        CMP     r0,#�","
�        �Q   r0,#�" "
�        CMP     r0,#�" "
�        MOVLE   r0,#0
�        STRB    r0,[r4],#1
�"        BGT     fn_getpar_loop
�         ADD     r1,r11,#&100
�        MOV     r0,r5
�        BL      fn_strip
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�.fn_getline
�'        STMFD   (sp)!,{r0-r11,link}
�        MOV     r5,r0
.fn_getline_loop
        MOV     r1,r10
        SWI     "XOS_BGet"
$        BCS     got_line
.        CMP     r0,#32
8        STRGEB  r0,[r5],#1
B#        BGE     fn_getline_loop
L
.got_line
V        MOV     r0,#0
`        STRB    r0,[r5]
j%        LDMFD   (sp)!,{r0-r11,pc}
t
~
.fn_strip
�'        STMFD   (sp)!,{r0-r11,link}
�.strip1 LDRB    r14,[r0]
�        CMP     r14,#�" "
�        ADDEQ   r0,r0,#1
�        BEQ     strip1
�        MOV     r2,r1
�.strip2 LDRB    r14,[r0],#1
�        STRB    r14,[r1],#1
�        CMP     r14,#�" "
�        MOVNE   r2,r1
�        CMP     r14,#32
�        BGE     strip2
        MOV     r14,#0

        STRB    r14,[r2]
%        LDMFD   (sp)!,{r0-r11,pc}

(.identify_keyword
2'        STMFD   (sp)!,{r2-r11,link}
<        MOV     r7,r0
F        MOV     r4,#0
P        MOV     r5,r8
Z.id_loop
d        CMP     r5,#0
n        MVNEQ   r0,#0
x        �Q   r1,#0
�%        LDMEQFD (sp)!,{r2-r11,pc}
�)        LDR     r2,[r5,#keyword_name]
�        MOV     r3,r7
�.id_compare
�        LDRB    r0,[r2],#1
�        LDRB    r1,[r3],#1
�        CMP     r0,r1
�        BNE     id_diff
�        CMP     r0,#�":"
�        BNE     id_compare
�.id_matches
�        MOV     r0,r4
�)        LDR     r1,[r5,#keyword_addr]
%        LDMFD   (sp)!,{r2-r11,pc}
.id_diff
        CMP     r0,#�":"
"        BNE     next_id
,        CMP     r1,#�" "
6        BLE     id_matches
@.next_id
J        ADD     r4,r4,#1
T)        LDR     r5,[r5,#keyword_next]
^        B       id_loop
h
r.default_scale
|        DCD     10000
�]
�=0
�:
�� �z(z$)
�[OPT pass%
�        EQUS    z$
�        EQUB    0
�        ALIGN
�]
�=0
�
00000000  0d 00 0a 13 f4 20 3e 53  6f 75 72 63 65 2e 53 57  |..... >Source.SW|
00000010  49 30 38 0d 00 14 17 f4  20 42 41 55 33 44 5f 4c  |I08..... BAU3D_L|
00000020  6f 61 64 20 73 6f 75 72  63 65 0d 00 1e 0c f4 20  |oad source..... |
00000030  62 79 20 44 43 41 0d 00  28 19 f4 20 66 6f 72 20  |by DCA..(.. for |
00000040  33 32 2d 62 69 74 20 6d  61 63 68 69 6e 65 73 0d  |32-bit machines.|
00000050  00 32 19 f4 20 28 63 29  20 42 41 55 20 41 75 67  |.2.. (c) BAU Aug|
00000060  75 73 74 20 31 39 39 33  0d 00 3c 05 3a 0d 00 46  |ust 1993..<.:..F|
00000070  11 dd 20 a4 73 77 69 30  38 5f 6e 61 6d 65 0d 00  |.. .swi08_name..|
00000080  50 0b 3d 22 4c 6f 61 64  22 0d 00 5a 05 3a 0d 00  |P.="Load"..Z.:..|
00000090  64 11 dd 20 a4 73 77 69  30 38 5f 76 61 72 73 0d  |d.. .swi08_vars.|
000000a0  00 6e 15 6c 6f 61 64 5f  73 63 61 6c 65 3d a4 77  |.n.load_scale=.w|
000000b0  6b 28 34 29 0d 00 78 16  6c 6f 61 64 5f 63 6f 6c  |k(4)..x.load_col|
000000c0  6f 75 72 3d a4 77 6b 28  34 29 0d 00 82 12 6b 65  |our=.wk(4)....ke|
000000d0  79 77 6f 72 64 5f 6e 65  78 74 3d 30 0d 00 8c 12  |yword_next=0....|
000000e0  6b 65 79 77 6f 72 64 5f  6e 61 6d 65 3d 34 0d 00  |keyword_name=4..|
000000f0  96 12 6b 65 79 77 6f 72  64 5f 61 64 64 72 3d 38  |..keyword_addr=8|
00000100  0d 00 a0 12 6b 65 79 77  6f 72 64 5f 72 65 71 3d  |....keyword_req=|
00000110  31 32 0d 00 aa 0e 6b 65  79 77 6f 72 64 73 3d 36  |12....keywords=6|
00000120  0d 00 b4 06 3d 30 0d 00  be 05 3a 0d 00 c8 11 dd  |....=0....:.....|
00000130  20 a4 73 77 69 30 38 5f  63 6f 64 65 0d 00 d2 0e  | .swi08_code....|
00000140  5b 4f 50 54 20 70 61 73  73 25 0d 00 dc 27 2e 6c  |[OPT pass%...'.l|
00000150  6f 61 64 20 20 20 53 54  4d 46 44 20 20 20 28 73  |oad   STMFD   (s|
00000160  70 29 21 2c 7b 72 30 2d  72 31 31 2c 6c 69 6e 6b  |p)!,{r0-r11,link|
00000170  7d 0d 00 e6 1a 20 20 20  20 20 20 20 20 4d 4f 56  |}....        MOV|
00000180  20 20 20 20 20 72 31 30  2c 72 30 0d 00 f0 19 20  |     r10,r0.... |
00000190  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000001a0  31 2c 23 30 0d 00 fa 24  20 20 20 20 20 20 20 20  |1,#0...$        |
000001b0  4c 44 52 45 51 20 20 20  72 31 2c 64 65 66 61 75  |LDREQ   r1,defau|
000001c0  6c 74 5f 73 63 61 6c 65  0d 01 04 20 20 20 20 20  |lt_scale...     |
000001d0  20 20 20 20 a4 61 64 72  6c 28 31 34 2c 6c 6f 61  |    .adrl(14,loa|
000001e0  64 5f 73 63 61 6c 65 29  0d 01 0e 1c 20 20 20 20  |d_scale)....    |
000001f0  20 20 20 20 53 54 52 20  20 20 20 20 72 31 2c 5b  |    STR     r1,[|
00000200  72 31 34 5d 0d 01 18 1c  20 20 20 20 20 20 20 20  |r14]....        |
00000210  4d 4f 56 20 20 20 20 20  72 30 2c 23 26 31 30 30  |MOV     r0,#&100|
00000220  0d 01 22 1a 20 20 20 20  20 20 20 20 42 4c 20 20  |..".        BL  |
00000230  20 20 20 20 6d 61 6c 6c  6f 63 0d 01 2c 21 20 20  |    malloc..,!  |
00000240  20 20 20 20 20 20 42 56  53 20 20 20 20 20 6c 6f  |      BVS     lo|
00000250  61 64 5f 66 69 6c 65 5f  65 72 72 0d 01 36 19 20  |ad_file_err..6. |
00000260  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00000270  39 2c 72 30 0d 01 40 19  20 20 20 20 20 20 20 20  |9,r0..@.        |
00000280  4d 4f 56 20 20 20 20 20  72 38 2c 23 30 0d 01 4a  |MOV     r8,#0..J|
00000290  23 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |#        ADR    |
000002a0  20 72 30 2c 63 6f 6d 6d  61 6e 64 5f 6c 69 73 74  | r0,command_list|
000002b0  0d 01 54 16 2e 69 6e 69  74 5f 6b 65 79 77 6f 72  |..T..init_keywor|
000002c0  64 5f 6c 69 73 74 0d 01  5e 1b 20 20 20 20 20 20  |d_list..^.      |
000002d0  20 20 4c 44 52 20 20 20  20 20 72 31 2c 5b 72 30  |  LDR     r1,[r0|
000002e0  5d 0d 01 68 19 20 20 20  20 20 20 20 20 43 4d 50  |]..h.        CMP|
000002f0  20 20 20 20 20 72 31 2c  23 30 0d 01 72 24 20 20  |     r1,#0..r$  |
00000300  20 20 20 20 20 20 42 45  51 20 20 20 20 20 6b 65  |      BEQ     ke|
00000310  79 77 6f 72 64 73 5f 64  65 66 69 6e 65 64 0d 01  |ywords_defined..|
00000320  7c 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  ||.        MOV   |
00000330  20 20 72 31 2c 23 30 0d  01 86 27 20 20 20 20 20  |  r1,#0...'     |
00000340  20 20 20 42 4c 20 20 20  20 20 20 61 64 64 5f 6b  |   BL      add_k|
00000350  65 79 77 6f 72 64 5f 74  6f 5f 6c 69 73 74 0d 01  |eyword_to_list..|
00000360  90 25 20 20 20 20 20 20  20 20 4c 44 4d 56 53 46  |.%        LDMVSF|
00000370  44 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 31 2c  |D (sp)!,{r0-r11,|
00000380  70 63 7d 0d 01 9a 19 2e  73 6b 69 70 5f 74 6f 5f  |pc}.....skip_to_|
00000390  6e 65 78 74 5f 6b 65 79  77 6f 72 64 0d 01 a4 1f  |next_keyword....|
000003a0  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
000003b0  72 31 34 2c 5b 72 30 5d  2c 23 31 0d 01 ae 1b 20  |r14,[r0],#1.... |
000003c0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000003d0  31 34 2c 23 33 32 0d 01  b8 28 20 20 20 20 20 20  |14,#32...(      |
000003e0  20 20 42 47 45 20 20 20  20 20 73 6b 69 70 5f 74  |  BGE     skip_t|
000003f0  6f 5f 6e 65 78 74 5f 6b  65 79 77 6f 72 64 0d 01  |o_next_keyword..|
00000400  c2 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
00000410  20 20 72 30 2c 72 30 2c  23 33 0d 01 cc 1c 20 20  |  r0,r0,#3....  |
00000420  20 20 20 20 20 20 42 49  43 20 20 20 20 20 72 30  |      BIC     r0|
00000430  2c 72 30 2c 23 33 0d 01  d6 25 20 20 20 20 20 20  |,r0,#3...%      |
00000440  20 20 42 20 20 20 20 20  20 20 69 6e 69 74 5f 6b  |  B       init_k|
00000450  65 79 77 6f 72 64 5f 6c  69 73 74 0d 01 e0 15 2e  |eyword_list.....|
00000460  6b 65 79 77 6f 72 64 73  5f 64 65 66 69 6e 65 64  |keywords_defined|
00000470  0d 01 ea 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000480  20 20 20 20 72 30 2c 72  31 30 0d 01 f4 19 20 20  |    r0,r10....  |
00000490  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 31  |      MOV     r1|
000004a0  2c 72 39 0d 01 fe 1c 20  20 20 20 20 20 20 20 42  |,r9....        B|
000004b0  4c 20 20 20 20 20 20 66  6e 5f 73 74 72 69 70 0d  |L      fn_strip.|
000004c0  02 08 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
000004d0  20 20 20 6c 6f 61 64 5f  66 69 6c 65 0d 02 12 21  |   load_file...!|
000004e0  20 20 20 20 20 20 20 20  42 56 53 20 20 20 20 20  |        BVS     |
000004f0  6c 6f 61 64 5f 66 69 6c  65 5f 65 72 72 0d 02 1c  |load_file_err...|
00000500  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000510  20 72 30 2c 72 39 0d 02  26 18 20 20 20 20 20 20  | r0,r9..&.      |
00000520  20 20 42 4c 20 20 20 20  20 20 66 72 65 65 0d 02  |  BL      free..|
00000530  30 21 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |0!        ADR   |
00000540  20 20 72 30 2c 77 6f 72  6c 64 5f 6e 61 6d 65 0d  |  r0,world_name.|
00000550  02 3a 24 20 20 20 20 20  20 20 20 42 4c 20 20 20  |.:$        BL   |
00000560  20 20 20 69 64 65 6e 74  69 66 79 5f 6b 65 79 77  |   identify_keyw|
00000570  6f 72 64 0d 02 44 19 20  20 20 20 20 20 20 20 43  |ord..D.        C|
00000580  4d 50 20 20 20 20 20 72  30 2c 23 30 0d 02 4e 23  |MP     r0,#0..N#|
00000590  20 20 20 20 20 20 20 20  41 44 52 4c 54 20 20 20  |        ADRLT   |
000005a0  72 30 2c 65 72 72 5f 6e  6f 5f 77 6f 72 6c 64 0d  |r0,err_no_world.|
000005b0  02 58 21 20 20 20 20 20  20 20 20 42 4c 54 20 20  |.X!        BLT  |
000005c0  20 20 20 6c 6f 61 64 5f  66 69 6c 65 5f 65 72 72  |   load_file_err|
000005d0  0d 02 62 1b 20 20 20 20  20 20 20 20 53 54 52 20  |..b.        STR |
000005e0  20 20 20 20 72 31 2c 5b  73 70 5d 0d 02 6c 16 2e  |    r1,[sp]..l..|
000005f0  66 72 65 65 5f 6b 65 79  77 6f 72 64 5f 6c 69 73  |free_keyword_lis|
00000600  74 0d 02 76 19 20 20 20  20 20 20 20 20 43 4d 50  |t..v.        CMP|
00000610  20 20 20 20 20 72 38 2c  23 30 0d 02 80 26 20 20  |     r8,#0...&  |
00000620  20 20 20 20 20 20 42 45  51 20 20 20 20 20 66 72  |      BEQ     fr|
00000630  65 65 64 5f 6b 65 79 77  6f 72 64 5f 6c 69 73 74  |eed_keyword_list|
00000640  0d 02 8a 29 20 20 20 20  20 20 20 20 4c 44 52 20  |...)        LDR |
00000650  20 20 20 20 72 30 2c 5b  72 38 2c 23 6b 65 79 77  |    r0,[r8,#keyw|
00000660  6f 72 64 5f 6e 61 6d 65  5d 0d 02 94 18 20 20 20  |ord_name]....   |
00000670  20 20 20 20 20 42 4c 20  20 20 20 20 20 66 72 65  |     BL      fre|
00000680  65 0d 02 9e 29 20 20 20  20 20 20 20 20 4c 44 52  |e...)        LDR|
00000690  20 20 20 20 20 72 31 2c  5b 72 38 2c 23 6b 65 79  |     r1,[r8,#key|
000006a0  77 6f 72 64 5f 6e 65 78  74 5d 0d 02 a8 19 20 20  |word_next]....  |
000006b0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
000006c0  2c 72 38 0d 02 b2 18 20  20 20 20 20 20 20 20 42  |,r8....        B|
000006d0  4c 20 20 20 20 20 20 66  72 65 65 0d 02 bc 19 20  |L      free.... |
000006e0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000006f0  38 2c 72 31 0d 02 c6 25  20 20 20 20 20 20 20 20  |8,r1...%        |
00000700  42 20 20 20 20 20 20 20  66 72 65 65 5f 6b 65 79  |B       free_key|
00000710  77 6f 72 64 5f 6c 69 73  74 0d 02 d0 17 2e 66 72  |word_list.....fr|
00000720  65 65 64 5f 6b 65 79 77  6f 72 64 5f 6c 69 73 74  |eed_keyword_list|
00000730  0d 02 da 1b 20 20 20 20  20 20 20 20 4c 44 52 20  |....        LDR |
00000740  20 20 20 20 72 30 2c 5b  73 70 5d 0d 02 e4 1f 20  |    r0,[sp].... |
00000750  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 63  |       BL      c|
00000760  61 6c 63 5f 62 6f 75 6e  64 73 0d 02 ee 25 20 20  |alc_bounds...%  |
00000770  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00000780  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00000790  02 f8 04 0d 03 02 12 2e  6c 6f 61 64 5f 66 69 6c  |........load_fil|
000007a0  65 5f 65 72 72 0d 03 0c  1b 20 20 20 20 20 20 20  |e_err....       |
000007b0  20 53 54 52 20 20 20 20  20 72 30 2c 5b 73 70 5d  | STR     r0,[sp]|
000007c0  0d 03 16 27 20 20 20 20  20 20 20 20 4c 44 4d 46  |...'        LDMF|
000007d0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
000007e0  31 2c 6c 69 6e 6b 7d 0d  03 20 21 20 20 20 20 20  |1,link}.. !     |
000007f0  20 20 20 84 52 53 20 20  20 20 70 63 2c 6c 69 6e  |   .RS    pc,lin|
00000800  6b 2c 23 31 3c 3c 32 38  0d 03 2a 04 0d 03 34 11  |k,#1<<28..*...4.|
00000810  2e 65 72 72 5f 6e 6f 5f  77 6f 72 6c 64 0d 03 3e  |.err_no_world..>|
00000820  15 20 20 20 20 20 20 20  20 44 43 44 20 20 20 20  |.        DCD    |
00000830  20 30 0d 03 48 24 20 20  20 20 20 20 20 20 a4 7a  | 0..H$        .z|
00000840  28 22 4e 6f 20 27 77 6f  72 6c 64 27 20 64 65 66  |("No 'world' def|
00000850  69 6e 65 64 22 29 0d 03  52 04 0d 03 5c 1d 2e 77  |ined")..R...\..w|
00000860  6f 72 6c 64 5f 6e 61 6d  65 20 20 a4 7a 28 22 77  |orld_name  .z("w|
00000870  6f 72 6c 64 3a 22 29 0d  03 66 04 0d 03 70 11 2e  |orld:")..f...p..|
00000880  63 6f 6d 6d 61 6e 64 5f  6c 69 73 74 0d 03 7a 15  |command_list..z.|
00000890  20 20 20 20 20 20 20 20  a4 7a 28 22 72 65 6d 22  |        .z("rem"|
000008a0  29 0d 03 84 19 20 20 20  20 20 20 20 20 a4 7a 28  |)....        .z(|
000008b0  22 69 6e 63 6c 75 64 65  22 29 0d 03 8e 18 20 20  |"include")....  |
000008c0  20 20 20 20 20 20 a4 7a  28 22 63 6f 6c 6f 75 72  |      .z("colour|
000008d0  22 29 0d 03 98 19 20 20  20 20 20 20 20 20 a4 7a  |")....        .z|
000008e0  28 22 73 75 72 66 61 63  65 22 29 0d 03 a2 18 20  |("surface").... |
000008f0  20 20 20 20 20 20 20 a4  7a 28 22 6f 62 6a 65 63  |       .z("objec|
00000900  74 22 29 0d 03 ac 17 20  20 20 20 20 20 20 20 a4  |t")....        .|
00000910  7a 28 22 6d 65 72 67 65  22 29 0d 03 b6 18 20 20  |z("merge")....  |
00000920  20 20 20 20 20 20 a4 7a  28 22 63 6c 6f 73 65 64  |      .z("closed|
00000930  22 29 0d 03 c0 15 20 20  20 20 20 20 20 20 44 43  |")....        DC|
00000940  44 20 20 20 20 20 30 0d  03 ca 04 0d 03 d4 18 2e  |D     0.........|
00000950  61 64 64 5f 6b 65 79 77  6f 72 64 5f 74 6f 5f 6c  |add_keyword_to_l|
00000960  69 73 74 0d 03 de 26 20  20 20 20 20 20 20 20 53  |ist...&        S|
00000970  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |TMFD   (sp)!,{r0|
00000980  2d 72 37 2c 6c 69 6e 6b  7d 0d 03 e8 19 20 20 20  |-r7,link}....   |
00000990  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 36 2c  |     MOV     r6,|
000009a0  72 30 0d 03 f2 23 20 20  20 20 20 20 20 20 4d 4f  |r0...#        MO|
000009b0  56 20 20 20 20 20 72 30  2c 23 6b 65 79 77 6f 72  |V     r0,#keywor|
000009c0  64 5f 72 65 71 0d 03 fc  1a 20 20 20 20 20 20 20  |d_req....       |
000009d0  20 42 4c 20 20 20 20 20  20 6d 61 6c 6c 6f 63 0d  | BL      malloc.|
000009e0  04 06 1b 20 20 20 20 20  20 20 20 53 54 52 56 53  |...        STRVS|
000009f0  20 20 20 72 30 2c 5b 73  70 5d 0d 04 10 24 20 20  |   r0,[sp]...$  |
00000a00  20 20 20 20 20 20 4c 44  4d 56 53 46 44 20 28 73  |      LDMVSFD (s|
00000a10  70 29 21 2c 7b 72 30 2d  72 37 2c 70 63 7d 0d 04  |p)!,{r0-r7,pc}..|
00000a20  1a 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00000a30  20 20 72 37 2c 72 30 0d  04 24 19 20 20 20 20 20  |  r7,r0..$.     |
00000a40  20 20 20 43 4d 50 20 20  20 20 20 72 38 2c 23 30  |   CMP     r8,#0|
00000a50  0d 04 2e 16 20 20 20 20  20 20 20 20 ec 51 20 20  |....        .Q  |
00000a60  20 72 38 2c 72 37 0d 04  38 1c 20 20 20 20 20 20  | r8,r7..8.      |
00000a70  20 20 42 45 51 20 20 20  20 20 61 64 64 5f 6b 65  |  BEQ     add_ke|
00000a80  79 32 0d 04 42 19 20 20  20 20 20 20 20 20 4d 4f  |y2..B.        MO|
00000a90  56 20 20 20 20 20 72 35  2c 72 38 0d 04 4c 0d 2e  |V     r5,r8..L..|
00000aa0  61 64 64 5f 6b 65 79 31  0d 04 56 29 20 20 20 20  |add_key1..V)    |
00000ab0  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00000ac0  72 35 2c 23 6b 65 79 77  6f 72 64 5f 6e 65 78 74  |r5,#keyword_next|
00000ad0  5d 0d 04 60 19 20 20 20  20 20 20 20 20 43 4d 50  |]..`.        CMP|
00000ae0  20 20 20 20 20 72 30 2c  23 30 0d 04 6a 19 20 20  |     r0,#0..j.  |
00000af0  20 20 20 20 20 20 4d 4f  56 4e 45 20 20 20 72 35  |      MOVNE   r5|
00000b00  2c 72 30 0d 04 74 1c 20  20 20 20 20 20 20 20 42  |,r0..t.        B|
00000b10  4e 45 20 20 20 20 20 61  64 64 5f 6b 65 79 31 0d  |NE     add_key1.|
00000b20  04 7e 29 20 20 20 20 20  20 20 20 53 54 52 20 20  |.~)        STR  |
00000b30  20 20 20 72 37 2c 5b 72  35 2c 23 6b 65 79 77 6f  |   r7,[r5,#keywo|
00000b40  72 64 5f 6e 65 78 74 5d  0d 04 88 0d 2e 61 64 64  |rd_next].....add|
00000b50  5f 6b 65 79 32 0d 04 92  19 20 20 20 20 20 20 20  |_key2....       |
00000b60  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 30 0d 04  | MOV     r0,#0..|
00000b70  9c 29 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |.)        STR   |
00000b80  20 20 72 30 2c 5b 72 37  2c 23 6b 65 79 77 6f 72  |  r0,[r7,#keywor|
00000b90  64 5f 6e 65 78 74 5d 0d  04 a6 29 20 20 20 20 20  |d_next]...)     |
00000ba0  20 20 20 53 54 52 20 20  20 20 20 72 31 2c 5b 72  |   STR     r1,[r|
00000bb0  37 2c 23 6b 65 79 77 6f  72 64 5f 61 64 64 72 5d  |7,#keyword_addr]|
00000bc0  0d 04 b0 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000bd0  20 20 20 20 72 32 2c 23  30 0d 04 ba 0d 2e 61 64  |    r2,#0.....ad|
00000be0  64 5f 6b 65 79 33 0d 04  c4 1e 20 20 20 20 20 20  |d_key3....      |
00000bf0  20 20 4c 44 52 42 20 20  20 20 72 30 2c 5b 72 36  |  LDRB    r0,[r6|
00000c00  2c 72 32 5d 0d 04 ce 1c  20 20 20 20 20 20 20 20  |,r2]....        |
00000c10  43 4d 50 20 20 20 20 20  72 30 2c 23 97 22 20 22  |CMP     r0,#." "|
00000c20  0d 04 d8 1c 20 20 20 20  20 20 20 20 41 44 44 47  |....        ADDG|
00000c30  54 20 20 20 72 32 2c 72  32 2c 23 31 0d 04 e2 1c  |T   r2,r2,#1....|
00000c40  20 20 20 20 20 20 20 20  42 47 54 20 20 20 20 20  |        BGT     |
00000c50  61 64 64 5f 6b 65 79 33  0d 04 ec 1c 20 20 20 20  |add_key3....    |
00000c60  20 20 20 20 41 44 44 20  20 20 20 20 72 30 2c 72  |    ADD     r0,r|
00000c70  32 2c 23 35 0d 04 f6 1c  20 20 20 20 20 20 20 20  |2,#5....        |
00000c80  42 49 43 20 20 20 20 20  72 30 2c 72 30 2c 23 33  |BIC     r0,r0,#3|
00000c90  0d 05 00 1a 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00000ca0  20 20 20 20 6d 61 6c 6c  6f 63 0d 05 0a 1b 20 20  |    malloc....  |
00000cb0  20 20 20 20 20 20 53 54  52 56 53 20 20 20 72 30  |      STRVS   r0|
00000cc0  2c 5b 73 70 5d 0d 05 14  24 20 20 20 20 20 20 20  |,[sp]...$       |
00000cd0  20 4c 44 4d 56 53 46 44  20 28 73 70 29 21 2c 7b  | LDMVSFD (sp)!,{|
00000ce0  72 30 2d 72 37 2c 70 63  7d 0d 05 1e 19 20 20 20  |r0-r7,pc}....   |
00000cf0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 35 2c  |     MOV     r5,|
00000d00  72 30 0d 05 28 29 20 20  20 20 20 20 20 20 53 54  |r0..()        ST|
00000d10  52 20 20 20 20 20 72 35  2c 5b 72 37 2c 23 6b 65  |R     r5,[r7,#ke|
00000d20  79 77 6f 72 64 5f 6e 61  6d 65 5d 0d 05 32 19 20  |yword_name]..2. |
00000d30  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00000d40  32 2c 23 30 0d 05 3c 0d  2e 61 64 64 5f 6b 65 79  |2,#0..<..add_key|
00000d50  34 0d 05 46 1e 20 20 20  20 20 20 20 20 4c 44 52  |4..F.        LDR|
00000d60  42 20 20 20 20 72 30 2c  5b 72 36 5d 2c 23 31 0d  |B    r0,[r6],#1.|
00000d70  05 50 1c 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.P.        CMP  |
00000d80  20 20 20 72 30 2c 23 97  22 20 22 0d 05 5a 1c 20  |   r0,#." "..Z. |
00000d90  20 20 20 20 20 20 20 4d  4f 56 4c 45 20 20 20 72  |       MOVLE   r|
00000da0  30 2c 23 97 22 3a 22 0d  05 64 1e 20 20 20 20 20  |0,#.":"..d.     |
00000db0  20 20 20 53 54 52 42 20  20 20 20 72 30 2c 5b 72  |   STRB    r0,[r|
00000dc0  35 5d 2c 23 31 0d 05 6e  1c 20 20 20 20 20 20 20  |5],#1..n.       |
00000dd0  20 42 47 54 20 20 20 20  20 61 64 64 5f 6b 65 79  | BGT     add_key|
00000de0  34 0d 05 78 19 20 20 20  20 20 20 20 20 4d 4f 56  |4..x.        MOV|
00000df0  20 20 20 20 20 72 30 2c  23 30 0d 05 82 1b 20 20  |     r0,#0....  |
00000e00  20 20 20 20 20 20 53 54  52 42 20 20 20 20 72 30  |      STRB    r0|
00000e10  2c 5b 72 35 5d 0d 05 8c  24 20 20 20 20 20 20 20  |,[r5]...$       |
00000e20  20 4c 44 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | LDMFD   (sp)!,{|
00000e30  72 30 2d 72 37 2c 70 63  7d 0d 05 96 04 0d 05 a0  |r0-r7,pc}.......|
00000e40  1b 2e 65 72 72 5f 63 6f  6f 72 64 5f 6e 6f 74 5f  |..err_coord_not_|
00000e50  65 78 70 65 63 74 65 64  0d 05 aa 15 20 20 20 20  |expected....    |
00000e60  20 20 20 20 44 43 44 20  20 20 20 20 30 0d 05 b4  |    DCD     0...|
00000e70  2a 20 20 20 20 20 20 20  20 a4 7a 28 22 43 6f 2d  |*        .z("Co-|
00000e80  6f 72 64 69 6e 61 74 65  20 6e 6f 74 20 65 78 70  |ordinate not exp|
00000e90  65 63 74 65 64 22 29 0d  05 be 04 0d 05 c8 0e 2e  |ected").........|
00000ea0  6c 6f 61 64 5f 66 69 6c  65 0d 05 d2 27 20 20 20  |load_file...'   |
00000eb0  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00000ec0  29 21 2c 7b 72 30 2d 72  31 31 2c 6c 69 6e 6b 7d  |)!,{r0-r11,link}|
00000ed0  0d 05 dc 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000ee0  20 20 20 20 72 30 2c 23  35 0d 05 e6 19 20 20 20  |    r0,#5....   |
00000ef0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 31 2c  |     MOV     r1,|
00000f00  72 39 0d 05 f0 1e 20 20  20 20 20 20 20 20 53 57  |r9....        SW|
00000f10  49 20 20 20 20 20 22 58  4f 53 5f 46 69 6c 65 22  |I     "XOS_File"|
00000f20  0d 05 fa 1b 20 20 20 20  20 20 20 20 53 54 52 56  |....        STRV|
00000f30  53 20 20 20 72 30 2c 5b  73 70 5d 0d 06 04 25 20  |S   r0,[sp]...% |
00000f40  20 20 20 20 20 20 20 4c  44 4d 56 53 46 44 20 28  |       LDMVSFD (|
00000f50  73 70 29 21 2c 7b 72 30  2d 72 31 31 2c 70 63 7d  |sp)!,{r0-r11,pc}|
00000f60  0d 06 0e 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00000f70  20 20 20 20 72 30 2c 23  31 0d 06 18 1d 20 20 20  |    r0,#1....   |
00000f80  20 20 20 20 20 42 45 51  20 20 20 20 20 69 73 5f  |     BEQ     is_|
00000f90  61 5f 66 69 6c 65 0d 06  22 19 20 20 20 20 20 20  |a_file..".      |
00000fa0  20 20 4d 4f 56 20 20 20  20 20 72 32 2c 72 30 0d  |  MOV     r2,r0.|
00000fb0  06 2c 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.,.        MOV  |
00000fc0  20 20 20 72 30 2c 23 31  39 0d 06 36 19 20 20 20  |   r0,#19..6.   |
00000fd0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 31 2c  |     MOV     r1,|
00000fe0  72 39 0d 06 40 1e 20 20  20 20 20 20 20 20 53 57  |r9..@.        SW|
00000ff0  49 20 20 20 20 20 22 58  4f 53 5f 46 69 6c 65 22  |I     "XOS_File"|
00001000  0d 06 4a 1b 20 20 20 20  20 20 20 20 53 54 52 20  |..J.        STR |
00001010  20 20 20 20 72 30 2c 5b  73 70 5d 0d 06 54 27 20  |    r0,[sp]..T' |
00001020  20 20 20 20 20 20 20 4c  44 4d 46 44 20 20 20 28  |       LDMFD   (|
00001030  73 70 29 21 2c 7b 72 30  2d 72 31 31 2c 6c 69 6e  |sp)!,{r0-r11,lin|
00001040  6b 7d 0d 06 5e 21 20 20  20 20 20 20 20 20 84 52  |k}..^!        .R|
00001050  53 20 20 20 20 70 63 2c  6c 69 6e 6b 2c 23 31 3c  |S    pc,link,#1<|
00001060  3c 32 38 0d 06 68 0e 2e  69 73 5f 61 5f 66 69 6c  |<28..h..is_a_fil|
00001070  65 0d 06 72 1b 20 20 20  20 20 20 20 20 4d 4f 56  |e..r.        MOV|
00001080  20 20 20 20 20 72 30 2c  23 26 34 30 0d 06 7c 19  |     r0,#&40..|.|
00001090  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000010a0  72 31 2c 72 39 0d 06 86  1e 20 20 20 20 20 20 20  |r1,r9....       |
000010b0  20 53 57 49 20 20 20 20  20 22 58 4f 53 5f 46 69  | SWI     "XOS_Fi|
000010c0  6e 64 22 0d 06 90 1a 20  20 20 20 20 20 20 20 4d  |nd"....        M|
000010d0  4f 56 20 20 20 20 20 72  31 30 2c 72 30 0d 06 9a  |OV     r10,r0...|
000010e0  1c 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000010f0  20 72 30 2c 23 26 32 30  30 0d 06 a4 1a 20 20 20  | r0,#&200....   |
00001100  20 20 20 20 20 42 4c 20  20 20 20 20 20 6d 61 6c  |     BL      mal|
00001110  6c 6f 63 0d 06 ae 1b 20  20 20 20 20 20 20 20 53  |loc....        S|
00001120  54 52 56 53 20 20 20 72  30 2c 5b 73 70 5d 0d 06  |TRVS   r0,[sp]..|
00001130  b8 25 20 20 20 20 20 20  20 20 4c 44 4d 56 53 46  |.%        LDMVSF|
00001140  44 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 31 2c  |D (sp)!,{r0-r11,|
00001150  70 63 7d 0d 06 c2 1a 20  20 20 20 20 20 20 20 4d  |pc}....        M|
00001160  4f 56 20 20 20 20 20 72  31 31 2c 72 30 0d 06 cc  |OV     r11,r0...|
00001170  19 20 20 20 20 20 20 20  20 4d 56 4e 20 20 20 20  |.        MVN    |
00001180  20 72 37 2c 23 30 0d 06  d6 11 2e 67 65 74 6c 69  | r7,#0.....getli|
00001190  6e 65 5f 6c 6f 6f 70 0d  06 e0 19 20 20 20 20 20  |ne_loop....     |
000011a0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 35  |   MOV     r0,#5|
000011b0  0d 06 ea 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
000011c0  20 20 20 20 72 31 2c 72  31 30 0d 06 f4 1e 20 20  |    r1,r10....  |
000011d0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
000011e0  4f 53 5f 41 72 67 73 22  0d 06 fe 19 20 20 20 20  |OS_Args"....    |
000011f0  20 20 20 20 43 4d 50 20  20 20 20 20 72 32 2c 23  |    CMP     r2,#|
00001200  30 0d 07 08 1a 20 20 20  20 20 20 20 20 42 4e 45  |0....        BNE|
00001210  20 20 20 20 20 69 73 5f  65 6f 66 0d 07 12 1a 20  |     is_eof.... |
00001220  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00001230  30 2c 72 31 31 0d 07 1c  1e 20 20 20 20 20 20 20  |0,r11....       |
00001240  20 42 4c 20 20 20 20 20  20 66 6e 5f 67 65 74 6c  | BL      fn_getl|
00001250  69 6e 65 0d 07 26 20 20  20 20 20 20 20 20 20 41  |ine..&         A|
00001260  44 44 20 20 20 20 20 72  31 2c 72 31 31 2c 23 26  |DD     r1,r11,#&|
00001270  31 30 30 0d 07 30 1c 20  20 20 20 20 20 20 20 42  |100..0.        B|
00001280  4c 20 20 20 20 20 20 66  6e 5f 73 74 72 69 70 0d  |L      fn_strip.|
00001290  07 3a 1c 20 20 20 20 20  20 20 20 4c 44 52 42 20  |.:.        LDRB |
000012a0  20 20 20 72 31 34 2c 5b  72 31 5d 0d 07 44 1d 20  |   r14,[r1]..D. |
000012b0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000012c0  31 34 2c 23 97 22 2d 22  0d 07 4e 1c 20 20 20 20  |14,#."-"..N.    |
000012d0  20 20 20 20 42 45 51 20  20 20 20 20 69 73 5f 63  |    BEQ     is_c|
000012e0  6f 6f 72 64 0d 07 58 1d  20 20 20 20 20 20 20 20  |oord..X.        |
000012f0  43 4d 50 20 20 20 20 20  72 31 34 2c 23 97 22 30  |CMP     r14,#."0|
00001300  22 0d 07 62 1d 20 20 20  20 20 20 20 20 42 4c 54  |"..b.        BLT|
00001310  20 20 20 20 20 6e 6f 74  5f 63 6f 6f 72 64 0d 07  |     not_coord..|
00001320  6c 1d 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |l.        CMP   |
00001330  20 20 72 31 34 2c 23 97  22 39 22 0d 07 76 1d 20  |  r14,#."9"..v. |
00001340  20 20 20 20 20 20 20 42  47 54 20 20 20 20 20 6e  |       BGT     n|
00001350  6f 74 5f 63 6f 6f 72 64  0d 07 80 0d 2e 69 73 5f  |ot_coord.....is_|
00001360  63 6f 6f 72 64 0d 07 8a  19 20 20 20 20 20 20 20  |coord....       |
00001370  20 43 4d 50 20 20 20 20  20 72 37 2c 23 33 0d 07  | CMP     r7,#3..|
00001380  94 2d 20 20 20 20 20 20  20 20 41 44 52 4e 45 20  |.-        ADRNE |
00001390  20 20 72 30 2c 65 72 72  5f 63 6f 6f 72 64 5f 6e  |  r0,err_coord_n|
000013a0  6f 74 5f 65 78 70 65 63  74 65 64 0d 07 9e 1c 20  |ot_expected.... |
000013b0  20 20 20 20 20 20 20 42  4e 45 20 20 20 20 20 6c  |       BNE     l|
000013c0  6f 61 64 5f 65 72 72 0d  07 a8 19 20 20 20 20 20  |oad_err....     |
000013d0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 72 36  |   MOV     r0,r6|
000013e0  0d 07 b2 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
000013f0  20 20 20 20 72 31 2c 23  31 32 0d 07 bc 1b 20 20  |    r1,#12....  |
00001400  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 72 65  |      BL      re|
00001410  61 6c 6c 6f 63 0d 07 c6  1c 20 20 20 20 20 20 20  |alloc....       |
00001420  20 42 56 53 20 20 20 20  20 6c 6f 61 64 5f 65 72  | BVS     load_er|
00001430  72 0d 07 d0 19 20 20 20  20 20 20 20 20 4d 4f 56  |r....        MOV|
00001440  20 20 20 20 20 72 36 2c  72 30 0d 07 da 28 20 20  |     r6,r0...(  |
00001450  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 36  |      STR     r6|
00001460  2c 5b 72 35 2c 23 73 75  62 6f 62 6a 5f 74 79 70  |,[r5,#subobj_typ|
00001470  65 5d 0d 07 e4 23 20 20  20 20 20 20 20 20 4c 44  |e]...#        LD|
00001480  52 20 20 20 20 20 72 32  2c 5b 72 36 2c 23 73 75  |R     r2,[r6,#su|
00001490  72 66 5f 6e 5d 0d 07 ee  23 20 20 20 20 20 20 20  |rf_n]...#       |
000014a0  20 41 44 44 20 20 20 20  20 72 31 2c 72 36 2c 23  | ADD     r1,r6,#|
000014b0  73 75 72 66 5f 72 65 71  0d 07 f8 23 20 20 20 20  |surf_req...#    |
000014c0  20 20 20 20 41 44 44 20  20 20 20 20 72 31 2c 72  |    ADD     r1,r|
000014d0  31 2c 72 32 2c 4c 53 4c  20 23 33 0d 08 02 23 20  |1,r2,LSL #3...# |
000014e0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
000014f0  31 2c 72 31 2c 72 32 2c  4c 53 4c 20 23 32 0d 08  |1,r1,r2,LSL #2..|
00001500  0c 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00001510  20 20 72 33 2c 23 33 0d  08 16 10 2e 72 65 61 64  |  r3,#3.....read|
00001520  5f 76 65 72 74 65 78 0d  08 20 1d 20 20 20 20 20  |_vertex.. .     |
00001530  20 20 20 42 4c 20 20 20  20 20 20 66 6e 5f 67 65  |   BL      fn_ge|
00001540  74 6e 75 6d 0d 08 2a 1e  20 20 20 20 20 20 20 20  |tnum..*.        |
00001550  53 54 52 20 20 20 20 20  72 30 2c 5b 72 31 5d 2c  |STR     r0,[r1],|
00001560  23 34 0d 08 34 1c 20 20  20 20 20 20 20 20 53 55  |#4..4.        SU|
00001570  42 53 20 20 20 20 72 33  2c 72 33 2c 23 31 0d 08  |BS    r3,r3,#1..|
00001580  3e 1f 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |>.        BNE   |
00001590  20 20 72 65 61 64 5f 76  65 72 74 65 78 0d 08 48  |  read_vertex..H|
000015a0  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
000015b0  20 72 32 2c 72 32 2c 23  31 0d 08 52 23 20 20 20  | r2,r2,#1..R#   |
000015c0  20 20 20 20 20 53 54 52  20 20 20 20 20 72 32 2c  |     STR     r2,|
000015d0  5b 72 36 2c 23 73 75 72  66 5f 6e 5d 0d 08 5c 0e  |[r6,#surf_n]..\.|
000015e0  2e 6e 6f 74 5f 63 6f 6f  72 64 0d 08 66 1d 20 20  |.not_coord..f.  |
000015f0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 66 6e  |      BL      fn|
00001600  5f 67 65 74 70 61 72 0d  08 70 1d 20 20 20 20 20  |_getpar..p.     |
00001610  20 20 20 4c 44 52 42 20  20 20 20 72 31 34 2c 5b  |   LDRB    r14,[|
00001620  72 31 31 5d 0d 08 7a 1d  20 20 20 20 20 20 20 20  |r11]..z.        |
00001630  43 4d 50 20 20 20 20 20  72 31 34 2c 23 97 22 20  |CMP     r14,#." |
00001640  22 0d 08 84 20 20 20 20  20 20 20 20 20 42 4c 45  |"...         BLE|
00001650  20 20 20 20 20 67 65 74  6c 69 6e 65 5f 6c 6f 6f  |     getline_loo|
00001660  70 0d 08 8e 1a 20 20 20  20 20 20 20 20 4d 4f 56  |p....        MOV|
00001670  20 20 20 20 20 72 30 2c  72 31 31 0d 08 98 24 20  |     r0,r11...$ |
00001680  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 69  |       BL      i|
00001690  64 65 6e 74 69 66 79 5f  6b 65 79 77 6f 72 64 0d  |dentify_keyword.|
000016a0  08 a2 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
000016b0  20 20 20 72 30 2c 23 30  0d 08 ac 2a 20 20 20 20  |   r0,#0...*    |
000016c0  20 20 20 20 41 44 52 4c  54 20 20 20 72 30 2c 65  |    ADRLT   r0,e|
000016d0  72 72 5f 75 6e 6b 6e 6f  77 6e 5f 6b 65 79 77 6f  |rr_unknown_keywo|
000016e0  72 64 0d 08 b6 1c 20 20  20 20 20 20 20 20 42 4c  |rd....        BL|
000016f0  54 20 20 20 20 20 6c 6f  61 64 5f 65 72 72 0d 08  |T     load_err..|
00001700  c0 20 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |.         CMP   |
00001710  20 20 72 30 2c 23 6b 65  79 77 6f 72 64 73 0d 08  |  r0,#keywords..|
00001720  ca 19 20 20 20 20 20 20  20 20 4d 4f 56 4c 54 20  |..        MOVLT |
00001730  20 20 72 37 2c 72 30 0d  08 d4 20 20 20 20 20 20  |  r7,r0...      |
00001740  20 20 20 42 47 45 20 20  20 20 20 75 73 65 72 5f  |   BGE     user_|
00001750  6b 65 79 77 6f 72 64 0d  08 de 23 20 20 20 20 20  |keyword...#     |
00001760  20 20 20 41 44 44 20 20  20 20 20 70 63 2c 70 63  |   ADD     pc,pc|
00001770  2c 72 30 2c 4c 53 4c 20  23 32 0d 08 e8 15 20 20  |,r0,LSL #2....  |
00001780  20 20 20 20 20 20 44 43  44 20 20 20 20 20 30 0d  |      DCD     0.|
00001790  08 f2 20 20 20 20 20 20  20 20 20 42 20 20 20 20  |..         B    |
000017a0  20 20 20 67 65 74 6c 69  6e 65 5f 6c 6f 6f 70 0d  |   getline_loop.|
000017b0  08 fc 1e 20 20 20 20 20  20 20 20 42 20 20 20 20  |...        B    |
000017c0  20 20 20 64 6f 5f 69 6e  63 6c 75 64 65 0d 09 06  |   do_include...|
000017d0  1d 20 20 20 20 20 20 20  20 42 20 20 20 20 20 20  |.        B      |
000017e0  20 64 6f 5f 63 6f 6c 6f  75 72 0d 09 10 1e 20 20  | do_colour....  |
000017f0  20 20 20 20 20 20 42 20  20 20 20 20 20 20 64 6f  |      B       do|
00001800  5f 73 75 72 66 61 63 65  0d 09 1a 1d 20 20 20 20  |_surface....    |
00001810  20 20 20 20 42 20 20 20  20 20 20 20 64 6f 5f 6f  |    B       do_o|
00001820  62 6a 65 63 74 0d 09 24  0f 2e 64 6f 5f 69 6e 63  |bject..$..do_inc|
00001830  6c 75 64 65 0d 09 2e 1a  20 20 20 20 20 20 20 20  |lude....        |
00001840  4d 4f 56 20 20 20 20 20  72 31 2c 72 31 31 0d 09  |MOV     r1,r11..|
00001850  38 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |8.        MOV   |
00001860  20 20 72 32 2c 72 31 31  0d 09 42 19 20 20 20 20  |  r2,r11..B.    |
00001870  20 20 20 20 4d 4f 56 20  20 20 20 20 72 33 2c 72  |    MOV     r3,r|
00001880  39 0d 09 4c 16 2e 69 6e  63 6c 75 64 65 5f 66 69  |9..L..include_fi|
00001890  72 73 74 5f 62 69 74 0d  09 56 1f 20 20 20 20 20  |rst_bit..V.     |
000018a0  20 20 20 4c 44 52 42 20  20 20 20 72 31 34 2c 5b  |   LDRB    r14,[|
000018b0  72 33 5d 2c 23 31 0d 09  60 1f 20 20 20 20 20 20  |r3],#1..`.      |
000018c0  20 20 53 54 52 42 20 20  20 20 72 31 34 2c 5b 72  |  STRB    r14,[r|
000018d0  31 5d 2c 23 31 0d 09 6a  1d 20 20 20 20 20 20 20  |1],#1..j.       |
000018e0  20 43 4d 50 20 20 20 20  20 72 31 34 2c 23 97 22  | CMP     r14,#."|
000018f0  2e 22 0d 09 74 16 20 20  20 20 20 20 20 20 ec 51  |."..t.        .Q|
00001900  20 20 20 72 32 2c 72 31  0d 09 7e 1d 20 20 20 20  |   r2,r1..~.    |
00001910  20 20 20 20 43 4d 50 20  20 20 20 20 72 31 34 2c  |    CMP     r14,|
00001920  23 97 22 20 22 0d 09 88  25 20 20 20 20 20 20 20  |#." "...%       |
00001930  20 42 47 54 20 20 20 20  20 69 6e 63 6c 75 64 65  | BGT     include|
00001940  5f 66 69 72 73 74 5f 62  69 74 0d 09 92 20 20 20  |_first_bit...   |
00001950  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 33  |      ADD     r3|
00001960  2c 72 31 31 2c 23 26 31  30 30 0d 09 9c 0e 2e 63  |,r11,#&100.....c|
00001970  6f 70 79 5f 74 61 69 6c  0d 09 a6 1f 20 20 20 20  |opy_tail....    |
00001980  20 20 20 20 4c 44 52 42  20 20 20 20 72 31 34 2c  |    LDRB    r14,|
00001990  5b 72 33 5d 2c 23 31 0d  09 b0 1d 20 20 20 20 20  |[r3],#1....     |
000019a0  20 20 20 43 4d 50 20 20  20 20 20 72 31 34 2c 23  |   CMP     r14,#|
000019b0  97 22 20 22 0d 09 ba 1a  20 20 20 20 20 20 20 20  |." "....        |
000019c0  4d 4f 56 4c 45 20 20 20  72 31 34 2c 23 30 0d 09  |MOVLE   r14,#0..|
000019d0  c4 1f 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |..        STRB  |
000019e0  20 20 72 31 34 2c 5b 72  32 5d 2c 23 31 0d 09 ce  |  r14,[r2],#1...|
000019f0  1d 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |.        BGT    |
00001a00  20 63 6f 70 79 5f 74 61  69 6c 0d 09 d8 1e 20 20  | copy_tail....  |
00001a10  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 28 73  |      STMFD   (s|
00001a20  70 29 21 2c 7b 72 39 7d  0d 09 e2 1a 20 20 20 20  |p)!,{r9}....    |
00001a30  20 20 20 20 4d 4f 56 20  20 20 20 20 72 39 2c 72  |    MOV     r9,r|
00001a40  31 31 0d 09 ec 1d 20 20  20 20 20 20 20 20 42 4c  |11....        BL|
00001a50  20 20 20 20 20 20 6c 6f  61 64 5f 66 69 6c 65 0d  |      load_file.|
00001a60  09 f6 1e 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |...        LDMFD|
00001a70  20 20 20 28 73 70 29 21  2c 7b 72 39 7d 0d 0a 00  |   (sp)!,{r9}...|
00001a80  21 20 20 20 20 20 20 20  20 42 56 53 20 20 20 20  |!        BVS    |
00001a90  20 6c 6f 61 64 5f 66 69  6c 65 5f 65 72 72 0d 0a  | load_file_err..|
00001aa0  0a 20 20 20 20 20 20 20  20 20 42 20 20 20 20 20  |.         B     |
00001ab0  20 20 67 65 74 6c 69 6e  65 5f 6c 6f 6f 70 0d 0a  |  getline_loop..|
00001ac0  14 0e 2e 64 6f 5f 63 6f  6c 6f 75 72 0d 0a 1e 1e  |...do_colour....|
00001ad0  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00001ae0  28 73 70 29 21 2c 7b 72  34 7d 0d 0a 28 19 20 20  |(sp)!,{r4}..(.  |
00001af0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 33  |      MOV     r3|
00001b00  2c 23 30 0d 0a 32 19 20  20 20 20 20 20 20 20 4d  |,#0..2.        M|
00001b10  4f 56 20 20 20 20 20 72  34 2c 23 38 0d 0a 3c 14  |OV     r4,#8..<.|
00001b20  2e 67 65 74 5f 63 6f 6c  6f 75 72 5f 6c 6f 6f 70  |.get_colour_loop|
00001b30  0d 0a 46 1d 20 20 20 20  20 20 20 20 42 4c 20 20  |..F.        BL  |
00001b40  20 20 20 20 66 6e 5f 67  65 74 70 61 72 0d 0a 50  |    fn_getpar..P|
00001b50  22 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |"        MOV    |
00001b60  20 72 30 2c 23 31 30 2b  28 31 3c 3c 32 39 29 0d  | r0,#10+(1<<29).|
00001b70  0a 5a 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.Z.        MOV  |
00001b80  20 20 20 72 31 2c 72 31  31 0d 0a 64 1b 20 20 20  |   r1,r11..d.   |
00001b90  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 32 2c  |     MOV     r2,|
00001ba0  23 32 35 35 0d 0a 6e 26  20 20 20 20 20 20 20 20  |#255..n&        |
00001bb0  53 57 49 20 20 20 20 20  22 58 4f 53 5f 52 65 61  |SWI     "XOS_Rea|
00001bc0  64 55 6e 73 69 67 6e 65  64 22 0d 0a 78 22 20 20  |dUnsigned"..x"  |
00001bd0  20 20 20 20 20 20 84 52  20 20 20 20 20 72 33 2c  |      .R     r3,|
00001be0  72 33 2c 72 32 2c 4c 53  4c 20 72 34 0d 0a 82 1c  |r3,r2,LSL r4....|
00001bf0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00001c00  72 34 2c 72 34 2c 23 38  0d 0a 8c 1a 20 20 20 20  |r4,r4,#8....    |
00001c10  20 20 20 20 43 4d 50 20  20 20 20 20 72 34 2c 23  |    CMP     r4,#|
00001c20  33 32 0d 0a 96 23 20 20  20 20 20 20 20 20 42 4e  |32...#        BN|
00001c30  45 20 20 20 20 20 67 65  74 5f 63 6f 6c 6f 75 72  |E     get_colour|
00001c40  5f 6c 6f 6f 70 0d 0a a0  21 20 20 20 20 20 20 20  |_loop...!       |
00001c50  20 a4 61 64 72 6c 28 31  34 2c 6c 6f 61 64 5f 63  | .adrl(14,load_c|
00001c60  6f 6c 6f 75 72 29 0d 0a  aa 1c 20 20 20 20 20 20  |olour)....      |
00001c70  20 20 53 54 52 20 20 20  20 20 72 33 2c 5b 72 31  |  STR     r3,[r1|
00001c80  34 5d 0d 0a b4 1e 20 20  20 20 20 20 20 20 4c 44  |4]....        LD|
00001c90  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 34 7d  |MFD   (sp)!,{r4}|
00001ca0  0d 0a be 20 20 20 20 20  20 20 20 20 42 20 20 20  |...         B   |
00001cb0  20 20 20 20 67 65 74 6c  69 6e 65 5f 6c 6f 6f 70  |    getline_loop|
00001cc0  0d 0a c8 0f 2e 64 6f 5f  73 75 72 66 61 63 65 0d  |.....do_surface.|
00001cd0  0a d2 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |..         MOV  |
00001ce0  20 20 20 72 30 2c 23 73  75 72 66 5f 72 65 71 0d  |   r0,#surf_req.|
00001cf0  0a dc 1a 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00001d00  20 20 20 6d 61 6c 6c 6f  63 0d 0a e6 1c 20 20 20  |   malloc....   |
00001d10  20 20 20 20 20 42 56 53  20 20 20 20 20 6c 6f 61  |     BVS     loa|
00001d20  64 5f 65 72 72 0d 0a f0  19 20 20 20 20 20 20 20  |d_err....       |
00001d30  20 4d 4f 56 20 20 20 20  20 72 36 2c 72 30 0d 0a  | MOV     r6,r0..|
00001d40  fa 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00001d50  20 20 72 30 2c 23 30 0d  0b 04 26 20 20 20 20 20  |  r0,#0...&     |
00001d60  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
00001d70  36 2c 23 73 75 72 66 5f  74 79 70 65 5d 0d 0b 0e  |6,#surf_type]...|
00001d80  23 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |#        STR    |
00001d90  20 72 30 2c 5b 72 36 2c  23 73 75 72 66 5f 6e 5d  | r0,[r6,#surf_n]|
00001da0  0d 0b 18 21 20 20 20 20  20 20 20 20 a4 61 64 72  |...!        .adr|
00001db0  6c 28 31 34 2c 6c 6f 61  64 5f 63 6f 6c 6f 75 72  |l(14,load_colour|
00001dc0  29 0d 0b 22 1c 20 20 20  20 20 20 20 20 4c 44 52  |)..".        LDR|
00001dd0  20 20 20 20 20 72 30 2c  5b 72 31 34 5d 0d 0b 2c  |     r0,[r14]..,|
00001de0  28 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |(        STR    |
00001df0  20 72 30 2c 5b 72 36 2c  23 73 75 72 66 5f 63 6f  | r0,[r6,#surf_co|
00001e00  6c 6f 75 72 5d 0d 0b 36  22 20 20 20 20 20 20 20  |lour]..6"       |
00001e10  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 73 75 62  | MOV     r0,#sub|
00001e20  6f 62 6a 5f 72 65 71 0d  0b 40 1a 20 20 20 20 20  |obj_req..@.     |
00001e30  20 20 20 42 4c 20 20 20  20 20 20 6d 61 6c 6c 6f  |   BL      mallo|
00001e40  63 0d 0b 4a 1c 20 20 20  20 20 20 20 20 42 56 53  |c..J.        BVS|
00001e50  20 20 20 20 20 6c 6f 61  64 5f 65 72 72 0d 0b 54  |     load_err..T|
00001e60  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001e70  20 72 35 2c 72 30 0d 0b  5e 23 20 20 20 20 20 20  | r5,r0..^#      |
00001e80  20 20 41 44 44 20 20 20  20 20 72 33 2c 72 34 2c  |  ADD     r3,r4,|
00001e90  23 6f 62 6a 5f 6c 69 73  74 0d 0b 68 0d 2e 64 6f  |#obj_list..h..do|
00001ea0  5f 73 75 72 66 32 0d 0b  72 1b 20 20 20 20 20 20  |_surf2..r.      |
00001eb0  20 20 4c 44 52 20 20 20  20 20 72 30 2c 5b 72 33  |  LDR     r0,[r3|
00001ec0  5d 0d 0b 7c 19 20 20 20  20 20 20 20 20 43 4d 50  |]..|.        CMP|
00001ed0  20 20 20 20 20 72 30 2c  23 30 0d 0b 86 26 20 20  |     r0,#0...&  |
00001ee0  20 20 20 20 20 20 41 44  44 4e 45 20 20 20 72 33  |      ADDNE   r3|
00001ef0  2c 72 30 2c 23 73 75 62  6f 62 6a 5f 6e 65 78 74  |,r0,#subobj_next|
00001f00  0d 0b 90 1c 20 20 20 20  20 20 20 20 42 4e 45 20  |....        BNE |
00001f10  20 20 20 20 64 6f 5f 73  75 72 66 32 0d 0b 9a 1b  |    do_surf2....|
00001f20  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00001f30  72 35 2c 5b 72 33 5d 0d  0b a4 19 20 20 20 20 20  |r5,[r3]....     |
00001f40  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 30  |   MOV     r0,#0|
00001f50  0d 0b ae 28 20 20 20 20  20 20 20 20 53 54 52 20  |...(        STR |
00001f60  20 20 20 20 72 30 2c 5b  72 35 2c 23 73 75 62 6f  |    r0,[r5,#subo|
00001f70  62 6a 5f 6e 65 78 74 5d  0d 0b b8 28 20 20 20 20  |bj_next]...(    |
00001f80  20 20 20 20 53 54 52 20  20 20 20 20 72 36 2c 5b  |    STR     r6,[|
00001f90  72 35 2c 23 73 75 62 6f  62 6a 5f 74 79 70 65 5d  |r5,#subobj_type]|
00001fa0  0d 0b c2 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |...         MOV |
00001fb0  20 20 20 20 72 30 2c 23  62 69 74 5f 73 75 72 66  |    r0,#bit_surf|
00001fc0  0d 0b cc 29 20 20 20 20  20 20 20 20 53 54 52 20  |...)        STR |
00001fd0  20 20 20 20 72 30 2c 5b  72 35 2c 23 73 75 62 6f  |    r0,[r5,#subo|
00001fe0  62 6a 5f 66 6c 61 67 73  5d 0d 0b d6 20 20 20 20  |bj_flags]...    |
00001ff0  20 20 20 20 20 42 20 20  20 20 20 20 20 67 65 74  |     B       get|
00002000  6c 69 6e 65 5f 6c 6f 6f  70 0d 0b e0 0e 2e 64 6f  |line_loop.....do|
00002010  5f 6f 62 6a 65 63 74 0d  0b ea 1d 20 20 20 20 20  |_object....     |
00002020  20 20 20 42 4c 20 20 20  20 20 20 66 6e 5f 67 65  |   BL      fn_ge|
00002030  74 70 61 72 0d 0b f4 1a  20 20 20 20 20 20 20 20  |tpar....        |
00002040  4d 4f 56 20 20 20 20 20  72 30 2c 72 31 31 0d 0b  |MOV     r0,r11..|
00002050  fe 24 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |.$        BL    |
00002060  20 20 69 64 65 6e 74 69  66 79 5f 6b 65 79 77 6f  |  identify_keywo|
00002070  72 64 0d 0c 08 19 20 20  20 20 20 20 20 20 43 4d  |rd....        CM|
00002080  50 20 20 20 20 20 72 30  2c 23 30 0d 0c 12 28 20  |P     r0,#0...( |
00002090  20 20 20 20 20 20 20 41  44 52 47 45 20 20 20 72  |       ADRGE   r|
000020a0  30 2c 65 72 72 5f 64 65  66 69 6e 65 64 5f 74 77  |0,err_defined_tw|
000020b0  69 63 65 0d 0c 1c 1c 20  20 20 20 20 20 20 20 42  |ice....        B|
000020c0  47 45 20 20 20 20 20 6c  6f 61 64 5f 65 72 72 0d  |GE     load_err.|
000020d0  0c 26 1f 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.&.        MOV  |
000020e0  20 20 20 72 30 2c 23 6f  62 6a 5f 72 65 71 0d 0c  |   r0,#obj_req..|
000020f0  30 1a 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |0.        BL    |
00002100  20 20 6d 61 6c 6c 6f 63  0d 0c 3a 1c 20 20 20 20  |  malloc..:.    |
00002110  20 20 20 20 42 56 53 20  20 20 20 20 6c 6f 61 64  |    BVS     load|
00002120  5f 65 72 72 0d 0c 44 19  20 20 20 20 20 20 20 20  |_err..D.        |
00002130  4d 4f 56 20 20 20 20 20  72 34 2c 72 30 0d 0c 4e  |MOV     r4,r0..N|
00002140  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002150  20 72 32 2c 23 30 0d 0c  58 0c 2e 64 6f 5f 6f 62  | r2,#0..X..do_ob|
00002160  6a 32 0d 0c 62 1f 20 20  20 20 20 20 20 20 4c 44  |j2..b.        LD|
00002170  52 42 20 20 20 20 72 30  2c 5b 72 31 31 2c 72 32  |RB    r0,[r11,r2|
00002180  5d 0d 0c 6c 1c 20 20 20  20 20 20 20 20 43 4d 50  |]..l.        CMP|
00002190  20 20 20 20 20 72 30 2c  23 97 22 20 22 0d 0c 76  |     r0,#." "..v|
000021a0  1c 20 20 20 20 20 20 20  20 41 44 44 47 54 20 20  |.        ADDGT  |
000021b0  20 72 32 2c 72 32 2c 23  31 0d 0c 80 1b 20 20 20  | r2,r2,#1....   |
000021c0  20 20 20 20 20 42 47 54  20 20 20 20 20 64 6f 5f  |     BGT     do_|
000021d0  6f 62 6a 32 0d 0c 8a 19  20 20 20 20 20 20 20 20  |obj2....        |
000021e0  4d 4f 56 20 20 20 20 20  72 30 2c 72 32 0d 0c 94  |MOV     r0,r2...|
000021f0  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00002200  20 72 30 2c 72 30 2c 23  34 0d 0c 9e 1c 20 20 20  | r0,r0,#4....   |
00002210  20 20 20 20 20 42 49 43  20 20 20 20 20 72 30 2c  |     BIC     r0,|
00002220  72 30 2c 23 33 0d 0c a8  1a 20 20 20 20 20 20 20  |r0,#3....       |
00002230  20 42 4c 20 20 20 20 20  20 6d 61 6c 6c 6f 63 0d  | BL      malloc.|
00002240  0c b2 1c 20 20 20 20 20  20 20 20 42 56 53 20 20  |...        BVS  |
00002250  20 20 20 6c 6f 61 64 5f  65 72 72 0d 0c bc 19 20  |   load_err.... |
00002260  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002270  32 2c 72 30 0d 0c c6 1a  20 20 20 20 20 20 20 20  |2,r0....        |
00002280  4d 4f 56 20 20 20 20 20  72 31 2c 72 31 31 0d 0c  |MOV     r1,r11..|
00002290  d0 0c 2e 64 6f 5f 6f 62  6a 33 0d 0c da 1f 20 20  |...do_obj3....  |
000022a0  20 20 20 20 20 20 4c 44  52 42 20 20 20 20 72 31  |      LDRB    r1|
000022b0  34 2c 5b 72 31 5d 2c 23  31 0d 0c e4 1d 20 20 20  |4,[r1],#1....   |
000022c0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 34  |     CMP     r14|
000022d0  2c 23 97 22 20 22 0d 0c  ee 1a 20 20 20 20 20 20  |,#." "....      |
000022e0  20 20 4d 4f 56 4c 45 20  20 20 72 31 34 2c 23 30  |  MOVLE   r14,#0|
000022f0  0d 0c f8 1f 20 20 20 20  20 20 20 20 53 54 52 42  |....        STRB|
00002300  20 20 20 20 72 31 34 2c  5b 72 30 5d 2c 23 31 0d  |    r14,[r0],#1.|
00002310  0d 02 1b 20 20 20 20 20  20 20 20 42 47 54 20 20  |...        BGT  |
00002320  20 20 20 64 6f 5f 6f 62  6a 33 0d 0d 0c 25 20 20  |   do_obj3...%  |
00002330  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 32  |      STR     r2|
00002340  2c 5b 72 34 2c 23 6f 62  6a 5f 6e 61 6d 65 5d 0d  |,[r4,#obj_name].|
00002350  0d 16 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00002360  20 20 20 72 30 2c 23 30  0d 0d 20 25 20 20 20 20  |   r0,#0.. %    |
00002370  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00002380  72 34 2c 23 6f 62 6a 5f  6c 69 73 74 5d 0d 0d 2a  |r4,#obj_list]..*|
00002390  21 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |!        MOV    |
000023a0  20 72 30 2c 23 26 30 31  30 30 30 30 30 30 0d 0d  | r0,#&01000000..|
000023b0  34 1c 20 20 20 20 20 20  20 20 53 55 42 20 20 20  |4.        SUB   |
000023c0  20 20 72 30 2c 72 30 2c  23 31 0d 0d 3e 21 20 20  |  r0,r0,#1..>!  |
000023d0  20 20 20 20 20 20 a4 61  64 72 6c 28 31 34 2c 6c  |      .adrl(14,l|
000023e0  6f 61 64 5f 63 6f 6c 6f  75 72 29 0d 0d 48 1c 20  |oad_colour)..H. |
000023f0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00002400  30 2c 5b 72 31 34 5d 0d  0d 52 25 20 20 20 20 20  |0,[r14]..R%     |
00002410  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00002420  34 2c 23 6f 62 6a 5f 6e  61 6d 65 5d 0d 0d 5c 19  |4,#obj_name]..\.|
00002430  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002440  72 31 2c 72 34 0d 0d 66  27 20 20 20 20 20 20 20  |r1,r4..f'       |
00002450  20 42 4c 20 20 20 20 20  20 61 64 64 5f 6b 65 79  | BL      add_key|
00002460  77 6f 72 64 5f 74 6f 5f  6c 69 73 74 0d 0d 70 1c  |word_to_list..p.|
00002470  20 20 20 20 20 20 20 20  42 56 53 20 20 20 20 20  |        BVS     |
00002480  6c 6f 61 64 5f 65 72 72  0d 0d 7a 20 20 20 20 20  |load_err..z     |
00002490  20 20 20 20 42 20 20 20  20 20 20 20 67 65 74 6c  |    B       getl|
000024a0  69 6e 65 5f 6c 6f 6f 70  0d 0d 84 11 2e 75 73 65  |ine_loop.....use|
000024b0  72 5f 6b 65 79 77 6f 72  64 0d 0d 8e 22 20 20 20  |r_keyword..."   |
000024c0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
000024d0  23 73 75 62 6f 62 6a 5f  72 65 71 0d 0d 98 1a 20  |#subobj_req.... |
000024e0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 6d  |       BL      m|
000024f0  61 6c 6c 6f 63 0d 0d a2  1c 20 20 20 20 20 20 20  |alloc....       |
00002500  20 42 56 53 20 20 20 20  20 6c 6f 61 64 5f 65 72  | BVS     load_er|
00002510  72 0d 0d ac 19 20 20 20  20 20 20 20 20 4d 4f 56  |r....        MOV|
00002520  20 20 20 20 20 72 33 2c  72 30 0d 0d b6 23 20 20  |     r3,r0...#  |
00002530  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 32  |      ADD     r2|
00002540  2c 72 34 2c 23 6f 62 6a  5f 6c 69 73 74 0d 0d c0  |,r4,#obj_list...|
00002550  0a 2e 75 73 65 72 31 0d  0d ca 1b 20 20 20 20 20  |..user1....     |
00002560  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00002570  32 5d 0d 0d d4 19 20 20  20 20 20 20 20 20 43 4d  |2]....        CM|
00002580  50 20 20 20 20 20 72 30  2c 23 30 0d 0d de 26 20  |P     r0,#0...& |
00002590  20 20 20 20 20 20 20 41  44 44 4e 45 20 20 20 72  |       ADDNE   r|
000025a0  32 2c 72 30 2c 23 73 75  62 6f 62 6a 5f 6e 65 78  |2,r0,#subobj_nex|
000025b0  74 0d 0d e8 19 20 20 20  20 20 20 20 20 42 4e 45  |t....        BNE|
000025c0  20 20 20 20 20 75 73 65  72 31 0d 0d f2 1b 20 20  |     user1....  |
000025d0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 33  |      STR     r3|
000025e0  2c 5b 72 32 5d 0d 0d fc  19 20 20 20 20 20 20 20  |,[r2]....       |
000025f0  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 30 0d 0e  | MOV     r0,#0..|
00002600  06 28 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |.(        STR   |
00002610  20 20 72 30 2c 5b 72 33  2c 23 73 75 62 6f 62 6a  |  r0,[r3,#subobj|
00002620  5f 6e 65 78 74 5d 0d 0e  10 28 20 20 20 20 20 20  |_next]...(      |
00002630  20 20 53 54 52 20 20 20  20 20 72 31 2c 5b 72 33  |  STR     r1,[r3|
00002640  2c 23 73 75 62 6f 62 6a  5f 74 79 70 65 5d 0d 0e  |,#subobj_type]..|
00002650  1a 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00002660  20 20 72 32 2c 23 33 0d  0e 24 28 20 20 20 20 20  |  r2,#3..$(     |
00002670  20 20 20 41 44 44 20 20  20 20 20 72 31 2c 72 33  |   ADD     r1,r3|
00002680  2c 23 73 75 62 6f 62 6a  5f 6f 66 66 73 65 74 0d  |,#subobj_offset.|
00002690  0e 2e 1d 2e 75 73 65 72  32 20 20 42 4c 20 20 20  |....user2  BL   |
000026a0  20 20 20 66 6e 5f 67 65  74 6e 75 6d 0d 0e 38 1e  |   fn_getnum..8.|
000026b0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
000026c0  72 30 2c 5b 72 31 5d 2c  23 34 0d 0e 42 1c 20 20  |r0,[r1],#4..B.  |
000026d0  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 32  |      SUBS    r2|
000026e0  2c 72 32 2c 23 31 0d 0e  4c 19 20 20 20 20 20 20  |,r2,#1..L.      |
000026f0  20 20 42 4e 45 20 20 20  20 20 75 73 65 72 32 0d  |  BNE     user2.|
00002700  0e 56 20 20 20 20 20 20  20 20 20 a4 61 64 72 6c  |.V         .adrl|
00002710  28 31 34 2c 6c 6f 61 64  5f 73 63 61 6c 65 29 0d  |(14,load_scale).|
00002720  0e 60 1c 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.`.        LDR  |
00002730  20 20 20 72 30 2c 5b 72  31 34 5d 0d 0e 6a 1e 20  |   r0,[r14]..j. |
00002740  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
00002750  73 70 29 21 2c 7b 72 30  7d 0d 0e 74 20 20 20 20  |sp)!,{r0}..t    |
00002760  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00002770  61 6e 67 5f 73 63 61 6c  65 0d 0e 7e 1c 20 20 20  |ang_scale..~.   |
00002780  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
00002790  5b 72 31 34 5d 0d 0e 88  19 20 20 20 20 20 20 20  |[r14]....       |
000027a0  20 4d 4f 56 20 20 20 20  20 72 32 2c 23 33 0d 0e  | MOV     r2,#3..|
000027b0  92 27 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |.'        ADD   |
000027c0  20 20 72 31 2c 72 33 2c  23 73 75 62 6f 62 6a 5f  |  r1,r3,#subobj_|
000027d0  61 6e 67 6c 65 0d 0e 9c  1d 2e 75 73 65 72 33 20  |angle.....user3 |
000027e0  20 42 4c 20 20 20 20 20  20 66 6e 5f 67 65 74 6e  | BL      fn_getn|
000027f0  75 6d 0d 0e a6 1e 20 20  20 20 20 20 20 20 53 54  |um....        ST|
00002800  52 20 20 20 20 20 72 30  2c 5b 72 31 5d 2c 23 34  |R     r0,[r1],#4|
00002810  0d 0e b0 1c 20 20 20 20  20 20 20 20 53 55 42 53  |....        SUBS|
00002820  20 20 20 20 72 32 2c 72  32 2c 23 31 0d 0e ba 19  |    r2,r2,#1....|
00002830  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00002840  75 73 65 72 33 0d 0e c4  1e 20 20 20 20 20 20 20  |user3....       |
00002850  20 4c 44 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | LDMFD   (sp)!,{|
00002860  72 30 7d 0d 0e ce 20 20  20 20 20 20 20 20 20 a4  |r0}...         .|
00002870  61 64 72 6c 28 31 34 2c  6c 6f 61 64 5f 73 63 61  |adrl(14,load_sca|
00002880  6c 65 29 0d 0e d8 1c 20  20 20 20 20 20 20 20 53  |le)....        S|
00002890  54 52 20 20 20 20 20 72  30 2c 5b 72 31 34 5d 0d  |TR     r0,[r14].|
000028a0  0e e2 04 0d 0e ec 19 20  20 20 20 20 20 20 20 4d  |.......        M|
000028b0  4f 56 20 20 20 20 20 72  32 2c 23 30 0d 0e f6 0a  |OV     r2,#0....|
000028c0  2e 75 73 65 72 34 0d 0f  00 1d 20 20 20 20 20 20  |.user4....      |
000028d0  20 20 42 4c 20 20 20 20  20 20 66 6e 5f 67 65 74  |  BL      fn_get|
000028e0  70 61 72 0d 0f 0a 1a 20  20 20 20 20 20 20 20 4d  |par....        M|
000028f0  4f 56 20 20 20 20 20 72  30 2c 72 31 31 0d 0f 14  |OV     r0,r11...|
00002900  24 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |$        BL     |
00002910  20 69 64 65 6e 74 69 66  79 5f 6b 65 79 77 6f 72  | identify_keywor|
00002920  64 0d 0f 1e 19 20 20 20  20 20 20 20 20 43 4d 50  |d....        CMP|
00002930  20 20 20 20 20 72 30 2c  23 35 0d 0f 28 23 20 20  |     r0,#5..(#  |
00002940  20 20 20 20 20 20 84 52  45 51 20 20 20 72 32 2c  |      .REQ   r2,|
00002950  72 32 2c 23 62 69 74 5f  6d 65 72 67 65 0d 0f 32  |r2,#bit_merge..2|
00002960  19 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |.        BEQ    |
00002970  20 75 73 65 72 34 0d 0f  3c 19 20 20 20 20 20 20  | user4..<.      |
00002980  20 20 43 4d 50 20 20 20  20 20 72 30 2c 23 36 0d  |  CMP     r0,#6.|
00002990  0f 46 24 20 20 20 20 20  20 20 20 84 52 45 51 20  |.F$        .REQ |
000029a0  20 20 72 32 2c 72 32 2c  23 62 69 74 5f 63 6c 6f  |  r2,r2,#bit_clo|
000029b0  73 65 64 0d 0f 50 19 20  20 20 20 20 20 20 20 42  |sed..P.        B|
000029c0  45 51 20 20 20 20 20 75  73 65 72 34 0d 0f 5a 29  |EQ     user4..Z)|
000029d0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
000029e0  72 32 2c 5b 72 33 2c 23  73 75 62 6f 62 6a 5f 66  |r2,[r3,#subobj_f|
000029f0  6c 61 67 73 5d 0d 0f 64  20 20 20 20 20 20 20 20  |lags]..d        |
00002a00  20 42 20 20 20 20 20 20  20 67 65 74 6c 69 6e 65  | B       getline|
00002a10  5f 6c 6f 6f 70 0d 0f 6e  04 0d 0f 78 0e 2e 61 6e  |_loop..n...x..an|
00002a20  67 5f 73 63 61 6c 65 0d  0f 82 1e 20 20 20 20 20  |g_scale....     |
00002a30  20 20 20 44 43 44 20 20  20 20 20 26 31 30 30 30  |   DCD     &1000|
00002a40  30 2f 33 36 30 0d 0f 8c  04 0d 0f 96 1a 2e 69 73  |0/360.........is|
00002a50  5f 65 6f 66 20 4d 4f 56  20 20 20 20 20 72 30 2c  |_eof MOV     r0,|
00002a60  72 31 31 0d 0f a0 18 20  20 20 20 20 20 20 20 42  |r11....        B|
00002a70  4c 20 20 20 20 20 20 66  72 65 65 0d 0f aa 1b 20  |L      free.... |
00002a80  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002a90  30 2c 23 26 30 30 0d 0f  b4 1a 20 20 20 20 20 20  |0,#&00....      |
00002aa0  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 72 31 30  |  MOV     r1,r10|
00002ab0  0d 0f be 1e 20 20 20 20  20 20 20 20 53 57 49 20  |....        SWI |
00002ac0  20 20 20 20 22 58 4f 53  5f 46 69 6e 64 22 0d 0f  |    "XOS_Find"..|
00002ad0  c8 25 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |.%        LDMFD |
00002ae0  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 31 2c  |  (sp)!,{r0-r11,|
00002af0  70 63 7d 0d 0f d2 0d 2e  6c 6f 61 64 5f 65 72 72  |pc}.....load_err|
00002b00  0d 0f dc 1b 20 20 20 20  20 20 20 20 53 54 52 20  |....        STR |
00002b10  20 20 20 20 72 30 2c 5b  73 70 5d 0d 0f e6 1a 20  |    r0,[sp].... |
00002b20  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002b30  30 2c 72 31 31 0d 0f f0  18 20 20 20 20 20 20 20  |0,r11....       |
00002b40  20 42 4c 20 20 20 20 20  20 66 72 65 65 0d 0f fa  | BL      free...|
00002b50  1b 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002b60  20 72 30 2c 23 26 30 30  0d 10 04 1a 20 20 20 20  | r0,#&00....    |
00002b70  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 72  |    MOV     r1,r|
00002b80  31 30 0d 10 0e 1e 20 20  20 20 20 20 20 20 53 57  |10....        SW|
00002b90  49 20 20 20 20 20 22 58  4f 53 5f 46 69 6e 64 22  |I     "XOS_Find"|
00002ba0  0d 10 18 27 20 20 20 20  20 20 20 20 4c 44 4d 46  |...'        LDMF|
00002bb0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00002bc0  31 2c 6c 69 6e 6b 7d 0d  10 22 21 20 20 20 20 20  |1,link}.."!     |
00002bd0  20 20 20 84 52 53 20 20  20 20 70 63 2c 6c 69 6e  |   .RS    pc,lin|
00002be0  6b 2c 23 31 3c 3c 32 38  0d 10 2c 04 0d 10 36 18  |k,#1<<28..,...6.|
00002bf0  2e 65 72 72 5f 75 6e 6b  6e 6f 77 6e 5f 6b 65 79  |.err_unknown_key|
00002c00  77 6f 72 64 0d 10 40 15  20 20 20 20 20 20 20 20  |word..@.        |
00002c10  44 43 44 20 20 20 20 20  30 0d 10 4a 21 20 20 20  |DCD     0..J!   |
00002c20  20 20 20 20 20 a4 7a 28  22 55 6e 6b 6e 6f 77 6e  |     .z("Unknown|
00002c30  20 6b 65 79 77 6f 72 64  22 29 0d 10 54 04 0d 10  | keyword")..T...|
00002c40  5e 16 2e 65 72 72 5f 64  65 66 69 6e 65 64 5f 74  |^..err_defined_t|
00002c50  77 69 63 65 0d 10 68 15  20 20 20 20 20 20 20 20  |wice..h.        |
00002c60  44 43 44 20 20 20 20 20  30 0d 10 72 27 20 20 20  |DCD     0..r'   |
00002c70  20 20 20 20 20 a4 7a 28  22 4b 65 79 77 6f 72 64  |     .z("Keyword|
00002c80  20 64 65 66 69 6e 65 64  20 74 77 69 63 65 22 29  | defined twice")|
00002c90  0d 10 7c 04 0d 10 86 0e  2e 66 6e 5f 67 65 74 6e  |..|......fn_getn|
00002ca0  75 6d 0d 10 90 27 20 20  20 20 20 20 20 20 53 54  |um...'        ST|
00002cb0  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 31 2d  |MFD   (sp)!,{r1-|
00002cc0  72 31 31 2c 6c 69 6e 6b  7d 0d 10 9a 1d 20 20 20  |r11,link}....   |
00002cd0  20 20 20 20 20 42 4c 20  20 20 20 20 20 66 6e 5f  |     BL      fn_|
00002ce0  67 65 74 70 61 72 0d 10  a4 1a 20 20 20 20 20 20  |getpar....      |
00002cf0  20 20 4d 4f 56 20 20 20  20 20 72 34 2c 72 31 31  |  MOV     r4,r11|
00002d00  0d 10 ae 1b 20 20 20 20  20 20 20 20 4c 44 52 42  |....        LDRB|
00002d10  20 20 20 20 72 30 2c 5b  72 34 5d 0d 10 b8 1c 20  |    r0,[r4].... |
00002d20  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00002d30  30 2c 23 97 22 2d 22 0d  10 c2 16 20 20 20 20 20  |0,#."-"....     |
00002d40  20 20 20 ec 51 20 20 20  72 36 2c 23 31 0d 10 cc  |   .Q   r6,#1...|
00002d50  1c 20 20 20 20 20 20 20  20 41 44 44 45 51 20 20  |.        ADDEQ  |
00002d60  20 72 34 2c 72 34 2c 23  31 0d 10 d6 19 20 20 20  | r4,r4,#1....   |
00002d70  20 20 20 20 20 4d 4f 56  4e 45 20 20 20 72 36 2c  |     MOVNE   r6,|
00002d80  23 30 0d 10 e0 19 20 20  20 20 20 20 20 20 4d 4f  |#0....        MO|
00002d90  56 20 20 20 20 20 72 37  2c 23 30 0d 10 ea 19 20  |V     r7,#0.... |
00002da0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002db0  35 2c 23 30 0d 10 f4 1a  20 20 20 20 20 20 20 20  |5,#0....        |
00002dc0  4d 4f 56 20 20 20 20 20  72 33 2c 23 31 30 0d 10  |MOV     r3,#10..|
00002dd0  fe 13 2e 66 6e 5f 67 65  74 6e 75 6d 5f 6c 6f 6f  |...fn_getnum_loo|
00002de0  70 0d 11 08 1e 20 20 20  20 20 20 20 20 4c 44 52  |p....        LDR|
00002df0  42 20 20 20 20 72 30 2c  5b 72 34 5d 2c 23 31 0d  |B    r0,[r4],#1.|
00002e00  11 12 1c 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00002e10  20 20 20 72 30 2c 23 97  22 2e 22 0d 11 1c 16 20  |   r0,#.".".... |
00002e20  20 20 20 20 20 20 20 ec  51 20 20 20 72 35 2c 23  |       .Q   r5,#|
00002e30  31 0d 11 26 22 20 20 20  20 20 20 20 20 42 45 51  |1..&"        BEQ|
00002e40  20 20 20 20 20 66 6e 5f  67 65 74 6e 75 6d 5f 6c  |     fn_getnum_l|
00002e50  6f 6f 70 0d 11 30 1c 20  20 20 20 20 20 20 20 43  |oop..0.        C|
00002e60  4d 50 20 20 20 20 20 72  30 2c 23 97 22 30 22 0d  |MP     r0,#."0".|
00002e70  11 3a 1b 20 20 20 20 20  20 20 20 42 4c 54 20 20  |.:.        BLT  |
00002e80  20 20 20 67 6f 74 5f 6e  75 6d 0d 11 44 1c 20 20  |   got_num..D.  |
00002e90  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00002ea0  2c 23 97 22 39 22 0d 11  4e 1b 20 20 20 20 20 20  |,#."9"..N.      |
00002eb0  20 20 42 47 54 20 20 20  20 20 67 6f 74 5f 6e 75  |  BGT     got_nu|
00002ec0  6d 0d 11 58 1f 20 20 20  20 20 20 20 20 53 55 42  |m..X.        SUB|
00002ed0  20 20 20 20 20 72 30 2c  72 30 2c 23 97 22 30 22  |     r0,r0,#."0"|
00002ee0  0d 11 62 1f 20 20 20 20  20 20 20 20 4d 4c 41 20  |..b.        MLA |
00002ef0  20 20 20 20 72 37 2c 72  33 2c 72 37 2c 72 30 0d  |    r7,r3,r7,r0.|
00002f00  11 6c 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.l.        CMP  |
00002f10  20 20 20 72 35 2c 23 30  0d 11 76 1c 20 20 20 20  |   r5,#0..v.    |
00002f20  20 20 20 20 4d 55 4c 4e  45 20 20 20 72 35 2c 72  |    MULNE   r5,r|
00002f30  33 2c 72 35 0d 11 80 22  20 20 20 20 20 20 20 20  |3,r5..."        |
00002f40  42 20 20 20 20 20 20 20  66 6e 5f 67 65 74 6e 75  |B       fn_getnu|
00002f50  6d 5f 6c 6f 6f 70 0d 11  8a 0c 2e 67 6f 74 5f 6e  |m_loop.....got_n|
00002f60  75 6d 0d 11 94 19 20 20  20 20 20 20 20 20 43 4d  |um....        CM|
00002f70  50 20 20 20 20 20 72 36  2c 23 30 0d 11 9e 1c 20  |P     r6,#0.... |
00002f80  20 20 20 20 20 20 20 52  53 42 4e 45 20 20 20 72  |       RSBNE   r|
00002f90  37 2c 72 37 2c 23 30 0d  11 a8 20 20 20 20 20 20  |7,r7,#0...      |
00002fa0  20 20 20 a4 61 64 72 6c  28 31 34 2c 6c 6f 61 64  |   .adrl(14,load|
00002fb0  5f 73 63 61 6c 65 29 0d  11 b2 1d 20 20 20 20 20  |_scale)....     |
00002fc0  20 20 20 4c 44 52 20 20  20 20 20 72 31 34 2c 5b  |   LDR     r14,[|
00002fd0  72 31 34 5d 0d 11 bc 1d  20 20 20 20 20 20 20 20  |r14]....        |
00002fe0  4d 55 4c 20 20 20 20 20  72 30 2c 72 37 2c 72 31  |MUL     r0,r7,r1|
00002ff0  34 0d 11 c6 19 20 20 20  20 20 20 20 20 43 4d 50  |4....        CMP|
00003000  20 20 20 20 20 72 35 2c  23 30 0d 11 d0 25 20 20  |     r5,#0...%  |
00003010  20 20 20 20 20 20 4c 44  4d 45 51 46 44 20 28 73  |      LDMEQFD (s|
00003020  70 29 21 2c 7b 72 31 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r1-r11,pc}.|
00003030  11 da 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00003040  20 20 20 72 31 2c 72 35  0d 11 e4 1a 20 20 20 20  |   r1,r5....    |
00003050  20 20 20 20 42 4c 20 20  20 20 20 20 64 69 76 69  |    BL      divi|
00003060  64 65 0d 11 ee 19 20 20  20 20 20 20 20 20 4d 4f  |de....        MO|
00003070  56 20 20 20 20 20 72 30  2c 72 32 0d 11 f8 25 20  |V     r0,r2...% |
00003080  20 20 20 20 20 20 20 4c  44 4d 46 44 20 20 20 28  |       LDMFD   (|
00003090  73 70 29 21 2c 7b 72 31  2d 72 31 31 2c 70 63 7d  |sp)!,{r1-r11,pc}|
000030a0  0d 12 02 04 0d 12 0c 0e  2e 66 6e 5f 67 65 74 70  |.........fn_getp|
000030b0  61 72 0d 12 16 27 20 20  20 20 20 20 20 20 53 54  |ar...'        ST|
000030c0  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
000030d0  72 31 31 2c 6c 69 6e 6b  7d 0d 12 20 1a 20 20 20  |r11,link}.. .   |
000030e0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 34 2c  |     MOV     r4,|
000030f0  72 31 31 0d 12 2a 20 20  20 20 20 20 20 20 20 41  |r11..*         A|
00003100  44 44 20 20 20 20 20 72  35 2c 72 31 31 2c 23 26  |DD     r5,r11,#&|
00003110  31 30 30 0d 12 34 13 2e  66 6e 5f 67 65 74 70 61  |100..4..fn_getpa|
00003120  72 5f 6c 6f 6f 70 0d 12  3e 1e 20 20 20 20 20 20  |r_loop..>.      |
00003130  20 20 4c 44 52 42 20 20  20 20 72 30 2c 5b 72 35  |  LDRB    r0,[r5|
00003140  5d 2c 23 31 0d 12 48 1c  20 20 20 20 20 20 20 20  |],#1..H.        |
00003150  43 4d 50 20 20 20 20 20  72 30 2c 23 97 22 41 22  |CMP     r0,#."A"|
00003160  0d 12 52 1a 20 20 20 20  20 20 20 20 42 4c 54 20  |..R.        BLT |
00003170  20 20 20 20 6e 6f 74 5f  75 63 0d 12 5c 1c 20 20  |    not_uc..\.  |
00003180  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00003190  2c 23 97 22 5a 22 0d 12  66 24 20 20 20 20 20 20  |,#."Z"..f$      |
000031a0  20 20 41 44 44 4c 45 20  20 20 72 30 2c 72 30 2c  |  ADDLE   r0,r0,|
000031b0  23 97 22 61 22 2d 97 22  41 22 0d 12 70 0b 2e 6e  |#."a"-."A"..p..n|
000031c0  6f 74 5f 75 63 0d 12 7a  1c 20 20 20 20 20 20 20  |ot_uc..z.       |
000031d0  20 43 4d 50 20 20 20 20  20 72 30 2c 23 97 22 2c  | CMP     r0,#.",|
000031e0  22 0d 12 84 19 20 20 20  20 20 20 20 20 ec 51 20  |"....        .Q |
000031f0  20 20 72 30 2c 23 97 22  20 22 0d 12 8e 1c 20 20  |  r0,#." "....  |
00003200  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00003210  2c 23 97 22 20 22 0d 12  98 19 20 20 20 20 20 20  |,#." "....      |
00003220  20 20 4d 4f 56 4c 45 20  20 20 72 30 2c 23 30 0d  |  MOVLE   r0,#0.|
00003230  12 a2 1e 20 20 20 20 20  20 20 20 53 54 52 42 20  |...        STRB |
00003240  20 20 20 72 30 2c 5b 72  34 5d 2c 23 31 0d 12 ac  |   r0,[r4],#1...|
00003250  22 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |"        BGT    |
00003260  20 66 6e 5f 67 65 74 70  61 72 5f 6c 6f 6f 70 0d  | fn_getpar_loop.|
00003270  12 b6 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |..         ADD  |
00003280  20 20 20 72 31 2c 72 31  31 2c 23 26 31 30 30 0d  |   r1,r11,#&100.|
00003290  12 c0 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000032a0  20 20 20 72 30 2c 72 35  0d 12 ca 1c 20 20 20 20  |   r0,r5....    |
000032b0  20 20 20 20 42 4c 20 20  20 20 20 20 66 6e 5f 73  |    BL      fn_s|
000032c0  74 72 69 70 0d 12 d4 25  20 20 20 20 20 20 20 20  |trip...%        |
000032d0  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
000032e0  30 2d 72 31 31 2c 70 63  7d 0d 12 de 04 0d 12 e8  |0-r11,pc}.......|
000032f0  0f 2e 66 6e 5f 67 65 74  6c 69 6e 65 0d 12 f2 27  |..fn_getline...'|
00003300  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00003310  28 73 70 29 21 2c 7b 72  30 2d 72 31 31 2c 6c 69  |(sp)!,{r0-r11,li|
00003320  6e 6b 7d 0d 12 fc 19 20  20 20 20 20 20 20 20 4d  |nk}....        M|
00003330  4f 56 20 20 20 20 20 72  35 2c 72 30 0d 13 06 14  |OV     r5,r0....|
00003340  2e 66 6e 5f 67 65 74 6c  69 6e 65 5f 6c 6f 6f 70  |.fn_getline_loop|
00003350  0d 13 10 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00003360  20 20 20 20 72 31 2c 72  31 30 0d 13 1a 1e 20 20  |    r1,r10....  |
00003370  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00003380  4f 53 5f 42 47 65 74 22  0d 13 24 1c 20 20 20 20  |OS_BGet"..$.    |
00003390  20 20 20 20 42 43 53 20  20 20 20 20 67 6f 74 5f  |    BCS     got_|
000033a0  6c 69 6e 65 0d 13 2e 1a  20 20 20 20 20 20 20 20  |line....        |
000033b0  43 4d 50 20 20 20 20 20  72 30 2c 23 33 32 0d 13  |CMP     r0,#32..|
000033c0  38 1e 20 20 20 20 20 20  20 20 53 54 52 47 45 42  |8.        STRGEB|
000033d0  20 20 72 30 2c 5b 72 35  5d 2c 23 31 0d 13 42 23  |  r0,[r5],#1..B#|
000033e0  20 20 20 20 20 20 20 20  42 47 45 20 20 20 20 20  |        BGE     |
000033f0  66 6e 5f 67 65 74 6c 69  6e 65 5f 6c 6f 6f 70 0d  |fn_getline_loop.|
00003400  13 4c 0d 2e 67 6f 74 5f  6c 69 6e 65 0d 13 56 19  |.L..got_line..V.|
00003410  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00003420  72 30 2c 23 30 0d 13 60  1b 20 20 20 20 20 20 20  |r0,#0..`.       |
00003430  20 53 54 52 42 20 20 20  20 72 30 2c 5b 72 35 5d  | STRB    r0,[r5]|
00003440  0d 13 6a 25 20 20 20 20  20 20 20 20 4c 44 4d 46  |..j%        LDMF|
00003450  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00003460  31 2c 70 63 7d 0d 13 74  04 0d 13 7e 0d 2e 66 6e  |1,pc}..t...~..fn|
00003470  5f 73 74 72 69 70 0d 13  88 27 20 20 20 20 20 20  |_strip...'      |
00003480  20 20 53 54 4d 46 44 20  20 20 28 73 70 29 21 2c  |  STMFD   (sp)!,|
00003490  7b 72 30 2d 72 31 31 2c  6c 69 6e 6b 7d 0d 13 92  |{r0-r11,link}...|
000034a0  1c 2e 73 74 72 69 70 31  20 4c 44 52 42 20 20 20  |..strip1 LDRB   |
000034b0  20 72 31 34 2c 5b 72 30  5d 0d 13 9c 1d 20 20 20  | r14,[r0]....   |
000034c0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 34  |     CMP     r14|
000034d0  2c 23 97 22 20 22 0d 13  a6 1c 20 20 20 20 20 20  |,#." "....      |
000034e0  20 20 41 44 44 45 51 20  20 20 72 30 2c 72 30 2c  |  ADDEQ   r0,r0,|
000034f0  23 31 0d 13 b0 1a 20 20  20 20 20 20 20 20 42 45  |#1....        BE|
00003500  51 20 20 20 20 20 73 74  72 69 70 31 0d 13 ba 19  |Q     strip1....|
00003510  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00003520  72 32 2c 72 31 0d 13 c4  1f 2e 73 74 72 69 70 32  |r2,r1.....strip2|
00003530  20 4c 44 52 42 20 20 20  20 72 31 34 2c 5b 72 30  | LDRB    r14,[r0|
00003540  5d 2c 23 31 0d 13 ce 1f  20 20 20 20 20 20 20 20  |],#1....        |
00003550  53 54 52 42 20 20 20 20  72 31 34 2c 5b 72 31 5d  |STRB    r14,[r1]|
00003560  2c 23 31 0d 13 d8 1d 20  20 20 20 20 20 20 20 43  |,#1....        C|
00003570  4d 50 20 20 20 20 20 72  31 34 2c 23 97 22 20 22  |MP     r14,#." "|
00003580  0d 13 e2 19 20 20 20 20  20 20 20 20 4d 4f 56 4e  |....        MOVN|
00003590  45 20 20 20 72 32 2c 72  31 0d 13 ec 1b 20 20 20  |E   r2,r1....   |
000035a0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 34  |     CMP     r14|
000035b0  2c 23 33 32 0d 13 f6 1a  20 20 20 20 20 20 20 20  |,#32....        |
000035c0  42 47 45 20 20 20 20 20  73 74 72 69 70 32 0d 14  |BGE     strip2..|
000035d0  00 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000035e0  20 20 72 31 34 2c 23 30  0d 14 0a 1c 20 20 20 20  |  r14,#0....    |
000035f0  20 20 20 20 53 54 52 42  20 20 20 20 72 31 34 2c  |    STRB    r14,|
00003600  5b 72 32 5d 0d 14 14 25  20 20 20 20 20 20 20 20  |[r2]...%        |
00003610  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00003620  30 2d 72 31 31 2c 70 63  7d 0d 14 1e 04 0d 14 28  |0-r11,pc}......(|
00003630  15 2e 69 64 65 6e 74 69  66 79 5f 6b 65 79 77 6f  |..identify_keywo|
00003640  72 64 0d 14 32 27 20 20  20 20 20 20 20 20 53 54  |rd..2'        ST|
00003650  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 32 2d  |MFD   (sp)!,{r2-|
00003660  72 31 31 2c 6c 69 6e 6b  7d 0d 14 3c 19 20 20 20  |r11,link}..<.   |
00003670  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 37 2c  |     MOV     r7,|
00003680  72 30 0d 14 46 19 20 20  20 20 20 20 20 20 4d 4f  |r0..F.        MO|
00003690  56 20 20 20 20 20 72 34  2c 23 30 0d 14 50 19 20  |V     r4,#0..P. |
000036a0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000036b0  35 2c 72 38 0d 14 5a 0c  2e 69 64 5f 6c 6f 6f 70  |5,r8..Z..id_loop|
000036c0  0d 14 64 19 20 20 20 20  20 20 20 20 43 4d 50 20  |..d.        CMP |
000036d0  20 20 20 20 72 35 2c 23  30 0d 14 6e 19 20 20 20  |    r5,#0..n.   |
000036e0  20 20 20 20 20 4d 56 4e  45 51 20 20 20 72 30 2c  |     MVNEQ   r0,|
000036f0  23 30 0d 14 78 16 20 20  20 20 20 20 20 20 ec 51  |#0..x.        .Q|
00003700  20 20 20 72 31 2c 23 30  0d 14 82 25 20 20 20 20  |   r1,#0...%    |
00003710  20 20 20 20 4c 44 4d 45  51 46 44 20 28 73 70 29  |    LDMEQFD (sp)|
00003720  21 2c 7b 72 32 2d 72 31  31 2c 70 63 7d 0d 14 8c  |!,{r2-r11,pc}...|
00003730  29 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |)        LDR    |
00003740  20 72 32 2c 5b 72 35 2c  23 6b 65 79 77 6f 72 64  | r2,[r5,#keyword|
00003750  5f 6e 61 6d 65 5d 0d 14  96 19 20 20 20 20 20 20  |_name]....      |
00003760  20 20 4d 4f 56 20 20 20  20 20 72 33 2c 72 37 0d  |  MOV     r3,r7.|
00003770  14 a0 0f 2e 69 64 5f 63  6f 6d 70 61 72 65 0d 14  |....id_compare..|
00003780  aa 1e 20 20 20 20 20 20  20 20 4c 44 52 42 20 20  |..        LDRB  |
00003790  20 20 72 30 2c 5b 72 32  5d 2c 23 31 0d 14 b4 1e  |  r0,[r2],#1....|
000037a0  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
000037b0  72 31 2c 5b 72 33 5d 2c  23 31 0d 14 be 19 20 20  |r1,[r3],#1....  |
000037c0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
000037d0  2c 72 31 0d 14 c8 1b 20  20 20 20 20 20 20 20 42  |,r1....        B|
000037e0  4e 45 20 20 20 20 20 69  64 5f 64 69 66 66 0d 14  |NE     id_diff..|
000037f0  d2 1c 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
00003800  20 20 72 30 2c 23 97 22  3a 22 0d 14 dc 1e 20 20  |  r0,#.":"....  |
00003810  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 69 64  |      BNE     id|
00003820  5f 63 6f 6d 70 61 72 65  0d 14 e6 0f 2e 69 64 5f  |_compare.....id_|
00003830  6d 61 74 63 68 65 73 0d  14 f0 19 20 20 20 20 20  |matches....     |
00003840  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 72 34  |   MOV     r0,r4|
00003850  0d 14 fa 29 20 20 20 20  20 20 20 20 4c 44 52 20  |...)        LDR |
00003860  20 20 20 20 72 31 2c 5b  72 35 2c 23 6b 65 79 77  |    r1,[r5,#keyw|
00003870  6f 72 64 5f 61 64 64 72  5d 0d 15 04 25 20 20 20  |ord_addr]...%   |
00003880  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00003890  29 21 2c 7b 72 32 2d 72  31 31 2c 70 63 7d 0d 15  |)!,{r2-r11,pc}..|
000038a0  0e 0c 2e 69 64 5f 64 69  66 66 0d 15 18 1c 20 20  |...id_diff....  |
000038b0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
000038c0  2c 23 97 22 3a 22 0d 15  22 1b 20 20 20 20 20 20  |,#.":"..".      |
000038d0  20 20 42 4e 45 20 20 20  20 20 6e 65 78 74 5f 69  |  BNE     next_i|
000038e0  64 0d 15 2c 1c 20 20 20  20 20 20 20 20 43 4d 50  |d..,.        CMP|
000038f0  20 20 20 20 20 72 31 2c  23 97 22 20 22 0d 15 36  |     r1,#." "..6|
00003900  1e 20 20 20 20 20 20 20  20 42 4c 45 20 20 20 20  |.        BLE    |
00003910  20 69 64 5f 6d 61 74 63  68 65 73 0d 15 40 0c 2e  | id_matches..@..|
00003920  6e 65 78 74 5f 69 64 0d  15 4a 1c 20 20 20 20 20  |next_id..J.     |
00003930  20 20 20 41 44 44 20 20  20 20 20 72 34 2c 72 34  |   ADD     r4,r4|
00003940  2c 23 31 0d 15 54 29 20  20 20 20 20 20 20 20 4c  |,#1..T)        L|
00003950  44 52 20 20 20 20 20 72  35 2c 5b 72 35 2c 23 6b  |DR     r5,[r5,#k|
00003960  65 79 77 6f 72 64 5f 6e  65 78 74 5d 0d 15 5e 1b  |eyword_next]..^.|
00003970  20 20 20 20 20 20 20 20  42 20 20 20 20 20 20 20  |        B       |
00003980  69 64 5f 6c 6f 6f 70 0d  15 68 04 0d 15 72 12 2e  |id_loop..h...r..|
00003990  64 65 66 61 75 6c 74 5f  73 63 61 6c 65 0d 15 7c  |default_scale..||
000039a0  19 20 20 20 20 20 20 20  20 44 43 44 20 20 20 20  |.        DCD    |
000039b0  20 31 30 30 30 30 0d 15  86 05 5d 0d 15 90 06 3d  | 10000....]....=|
000039c0  30 0d 15 9a 05 3a 0d 15  a4 0c dd 20 a4 7a 28 7a  |0....:..... .z(z|
000039d0  24 29 0d 15 ae 0e 5b 4f  50 54 20 70 61 73 73 25  |$)....[OPT pass%|
000039e0  0d 15 b8 16 20 20 20 20  20 20 20 20 45 51 55 53  |....        EQUS|
000039f0  20 20 20 20 7a 24 0d 15  c2 15 20 20 20 20 20 20  |    z$....      |
00003a00  20 20 45 51 55 42 20 20  20 20 30 0d 15 cc 11 20  |  EQUB    0.... |
00003a10  20 20 20 20 20 20 20 41  4c 49 47 4e 0d 15 d6 05  |       ALIGN....|
00003a20  5d 0d 15 e0 06 3d 30 0d  ff                       |]....=0..|
00003a29