Home » Archimedes archive » Acorn User » AU 1993-08.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-08.adf » !3DGraphic_3DGraphic
Filename: Source/SWI08
Read OK:
File size: 398F 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=5
  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        DCD     0
  960
  970.add_keyword_to_list
  980        STMFD   (sp)!,{r0-r7,link}
  990        MOV     r6,r0
 1000        MOV     r0,#keyword_req
 1010        BL      malloc
 1020        STRVS   r0,[sp]
 1030        LDMVSFD (sp)!,{r0-r7,pc}
 1040        MOV     r7,r0
 1050        CMP     r8,#0
 1060        MOVEQ   r8,r7
 1070        BEQ     add_key2
 1080        MOV     r5,r8
 1090.add_key1
 1100        LDR     r0,[r5,#keyword_next]
 1110        CMP     r0,#0
 1120        MOVNE   r5,r0
 1130        BNE     add_key1
 1140        STR     r7,[r5,#keyword_next]
 1150.add_key2
 1160        MOV     r0,#0
 1170        STR     r0,[r7,#keyword_next]
 1180        STR     r1,[r7,#keyword_addr]
 1190        MOV     r2,#0
 1200.add_key3
 1210        LDRB    r0,[r6,r2]
 1220        CMP     r0,#ASC" "
 1230        ADDGT   r2,r2,#1
 1240        BGT     add_key3
 1250        ADD     r0,r2,#5
 1260        BIC     r0,r0,#3
 1270        BL      malloc
 1280        STRVS   r0,[sp]
 1290        LDMVSFD (sp)!,{r0-r7,pc}
 1300        MOV     r5,r0
 1310        STR     r5,[r7,#keyword_name]
 1320        MOV     r2,#0
 1330.add_key4
 1340        LDRB    r0,[r6],#1
 1350        CMP     r0,#ASC" "
 1360        MOVLE   r0,#ASC":"
 1370        STRB    r0,[r5],#1
 1380        BGT     add_key4
 1390        MOV     r0,#0
 1400        STRB    r0,[r5]
 1410        LDMFD   (sp)!,{r0-r7,pc}
 1420
 1430.err_coord_not_expected
 1440        DCD     0
 1450        FNz("Co-ordinate not expected")
 1460
 1470.load_file
 1480        STMFD   (sp)!,{r0-r11,link}
 1490        MOV     r0,#5
 1500        MOV     r1,r9
 1510        SWI     "XOS_File"
 1520        STRVS   r0,[sp]
 1530        LDMVSFD (sp)!,{r0-r11,pc}
 1540        CMP     r0,#1
 1550        BEQ     is_a_file
 1560        MOV     r2,r0
 1570        MOV     r0,#19
 1580        MOV     r1,r9
 1590        SWI     "XOS_File"
 1600        STR     r0,[sp]
 1610        LDMFD   (sp)!,{r0-r11,link}
 1620        ORRS    pc,link,#1<<28
 1630.is_a_file
 1640        MOV     r0,#&40
 1650        MOV     r1,r9
 1660        SWI     "XOS_Find"
 1670        MOV     r10,r0
 1680        MOV     r0,#&200
 1690        BL      malloc
 1700        STRVS   r0,[sp]
 1710        LDMVSFD (sp)!,{r0-r11,pc}
 1720        MOV     r11,r0
 1730        MVN     r7,#0
 1740.getline_loop
 1750        MOV     r0,#5
 1760        MOV     r1,r10
 1770        SWI     "XOS_Args"
 1780        CMP     r2,#0
 1790        BNE     is_eof
 1800        MOV     r0,r11
 1810        BL      fn_getline
 1820        ADD     r1,r11,#&100
 1830        BL      fn_strip
 1840        LDRB    r14,[r1]
 1850        CMP     r14,#ASC"-"
 1860        BEQ     is_coord
 1870        CMP     r14,#ASC"0"
 1880        BLT     not_coord
 1890        CMP     r14,#ASC"9"
 1900        BGT     not_coord
 1910.is_coord
 1920        CMP     r7,#3
 1930        ADRNE   r0,err_coord_not_expected
 1940        BNE     load_err
 1950        MOV     r0,r6
 1960        MOV     r1,#12
 1970        BL      realloc
 1980        BVS     load_err
 1990        MOV     r6,r0
 2000        STR     r6,[r5,#subobj_type]
 2010        LDR     r2,[r6,#surf_n]
 2020        ADD     r1,r6,#surf_req
 2030        ADD     r1,r1,r2,LSL #3
 2040        ADD     r1,r1,r2,LSL #2
 2050        MOV     r3,#3
 2060.read_vertex
 2070        BL      fn_getnum
 2080        STR     r0,[r1],#4
 2090        SUBS    r3,r3,#1
 2100        BNE     read_vertex
 2110        ADD     r2,r2,#1
 2120        STR     r2,[r6,#surf_n]
 2130.not_coord
 2140        BL      fn_getpar
 2150        LDRB    r14,[r11]
 2160        CMP     r14,#ASC" "
 2170        BLE     getline_loop
 2180        MOV     r0,r11
 2190        BL      identify_keyword
 2200        CMP     r0,#0
 2210        ADRLT   r0,err_unknown_keyword
 2220        BLT     load_err
 2230        CMP     r0,#keywords
 2240        MOVLT   r7,r0
 2250        BGE     user_keyword
 2260        ADD     pc,pc,r0,LSL #2
 2270        DCD     0
 2280        B       getline_loop
 2290        B       do_include
 2300        B       do_colour
 2310        B       do_surface
 2320        B       do_object
 2330.do_include
 2340        MOV     r1,r11
 2350        MOV     r2,r11
 2360        MOV     r3,r9
 2370.include_first_bit
 2380        LDRB    r14,[r3],#1
 2390        STRB    r14,[r1],#1
 2400        CMP     r14,#ASC"."
 2410        MOVEQ   r2,r1
 2420        CMP     r14,#ASC" "
 2430        BGT     include_first_bit
 2440        ADD     r3,r11,#&100
 2450.copy_tail
 2460        LDRB    r14,[r3],#1
 2470        CMP     r14,#ASC" "
 2480        MOVLE   r14,#0
 2490        STRB    r14,[r2],#1
 2500        BGT     copy_tail
 2510        STMFD   (sp)!,{r9}
 2520        MOV     r9,r11
 2530        BL      load_file
 2540        LDMFD   (sp)!,{r9}
 2550        BVS     load_file_err
 2560        B       getline_loop
 2570.do_colour
 2580        STMFD   (sp)!,{r4}
 2590        MOV     r3,#0
 2600        MOV     r4,#8
 2610.get_colour_loop
 2620        BL      fn_getpar
 2630        MOV     r0,#10+(1<<29)
 2640        MOV     r1,r11
 2650        MOV     r2,#255
 2660        SWI     "XOS_ReadUnsigned"
 2670        ORR     r3,r3,r2,LSL r4
 2680        ADD     r4,r4,#8
 2690        CMP     r4,#32
 2700        BNE     get_colour_loop
 2710        FNadrl(14,load_colour)
 2720        STR     r3,[r14]
 2730        LDMFD   (sp)!,{r4}
 2740        B       getline_loop
 2750.do_surface
 2760        MOV     r0,#surf_req
 2770        BL      malloc
 2780        BVS     load_err
 2790        MOV     r6,r0
 2800        MOV     r0,#0
 2810        STR     r0,[r6,#surf_type]
 2820        STR     r0,[r6,#surf_n]
 2830        FNadrl(14,load_colour)
 2840        LDR     r0,[r14]
 2850        STR     r0,[r6,#surf_colour]
 2860        MOV     r0,#subobj_req
 2870        BL      malloc
 2880        BVS     load_err
 2890        MOV     r5,r0
 2900        ADD     r3,r4,#obj_list
 2910.do_surf2
 2920        LDR     r0,[r3]
 2930        CMP     r0,#0
 2940        ADDNE   r3,r0,#subobj_next
 2950        BNE     do_surf2
 2960        STR     r5,[r3]
 2970        MOV     r0,#0
 2980        STR     r0,[r5,#subobj_next]
 2990        STR     r6,[r5,#subobj_type]
 3000        MOV     r0,#bit_surf
 3010        STR     r0,[r5,#subobj_flags]
 3020        B       getline_loop
 3030.do_object
 3040        BL      fn_getpar
 3050        MOV     r0,r11
 3060        BL      identify_keyword
 3070        CMP     r0,#0
 3080        ADRGE   r0,err_defined_twice
 3090        BGE     load_err
 3100        MOV     r0,#obj_req
 3110        BL      malloc
 3120        BVS     load_err
 3130        MOV     r4,r0
 3140        MOV     r2,#0
 3150.do_obj2
 3160        LDRB    r0,[r11,r2]
 3170        CMP     r0,#ASC" "
 3180        ADDGT   r2,r2,#1
 3190        BGT     do_obj2
 3200        MOV     r0,r2
 3210        ADD     r0,r0,#4
 3220        BIC     r0,r0,#3
 3230        BL      malloc
 3240        BVS     load_err
 3250        MOV     r2,r0
 3260        MOV     r1,r11
 3270.do_obj3
 3280        LDRB    r14,[r1],#1
 3290        CMP     r14,#ASC" "
 3300        MOVLE   r14,#0
 3310        STRB    r14,[r0],#1
 3320        BGT     do_obj3
 3330        STR     r2,[r4,#obj_name]
 3340        MOV     r0,#0
 3350        STR     r0,[r4,#obj_list]
 3360        MOV     r0,#&01000000
 3370        SUB     r0,r0,#1
 3380        FNadrl(14,load_colour)
 3390        STR     r0,[r14]
 3400        LDR     r0,[r4,#obj_name]
 3410        MOV     r1,r4
 3420        BL      add_keyword_to_list
 3430        BVS     load_err
 3440        B       getline_loop
 3450.user_keyword
 3460        MOV     r0,#subobj_req
 3470        BL      malloc
 3480        BVS     load_err
 3490        MOV     r3,r0
 3500        ADD     r2,r4,#obj_list
 3510.user1
 3520        LDR     r0,[r2]
 3530        CMP     r0,#0
 3540        ADDNE   r2,r0,#subobj_next
 3550        BNE     user1
 3560        STR     r3,[r2]
 3570        MOV     r0,#0
 3580        STR     r0,[r3,#subobj_next]
 3590        STR     r1,[r3,#subobj_type]
 3600        MOV     r2,#3
 3610        ADD     r1,r3,#subobj_offset
 3620.user2  BL      fn_getnum
 3630        STR     r0,[r1],#4
 3640        SUBS    r2,r2,#1
 3650        BNE     user2
 3660        FNadrl(14,load_scale)
 3670        LDR     r0,[r14]
 3680        STMFD   (sp)!,{r0}
 3690        LDR     r0,ang_scale
 3700        STR     r0,[r14]
 3710        MOV     r2,#3
 3720        ADD     r1,r3,#subobj_angle
 3730.user3  BL      fn_getnum
 3740        STR     r0,[r1],#4
 3750        SUBS    r2,r2,#1
 3760        BNE     user3
 3770        LDMFD   (sp)!,{r0}
 3780        FNadrl(14,load_scale)
 3790        STR     r0,[r14]
 3800        BL      fn_getpar
 3810        MOV     r0,r11
 3820        BL      identify_keyword
 3830        CMP     r0,#5
 3840        MOVEQ   r0,#bit_merge
 3850        MOVNE   r0,#0
 3860        STR     r0,[r3,#subobj_flags]
 3870        B       getline_loop
 3880
 3890.ang_scale
 3900        DCD     &10000/360
 3910
 3920.is_eof MOV     r0,r11
 3930        BL      free
 3940        MOV     r0,#&00
 3950        MOV     r1,r10
 3960        SWI     "XOS_Find"
 3970        LDMFD   (sp)!,{r0-r11,pc}
 3980.load_err
 3990        STR     r0,[sp]
 4000        MOV     r0,r11
 4010        BL      free
 4020        MOV     r0,#&00
 4030        MOV     r1,r10
 4040        SWI     "XOS_Find"
 4050        LDMFD   (sp)!,{r0-r11,link}
 4060        ORRS    pc,link,#1<<28
 4070
 4080.err_unknown_keyword
 4090        DCD     0
 4100        FNz("Unknown keyword")
 4110
 4120.err_defined_twice
 4130        DCD     0
 4140        FNz("Keyword defined twice")
 4150
 4160.fn_getnum
 4170        STMFD   (sp)!,{r1-r11,link}
 4180        BL      fn_getpar
 4190        MOV     r4,r11
 4200        LDRB    r0,[r4]
 4210        CMP     r0,#ASC"-"
 4220        MOVEQ   r6,#1
 4230        ADDEQ   r4,r4,#1
 4240        MOVNE   r6,#0
 4250        MOV     r7,#0
 4260        MOV     r5,#0
 4270        MOV     r3,#10
 4280.fn_getnum_loop
 4290        LDRB    r0,[r4],#1
 4300        CMP     r0,#ASC"."
 4310        MOVEQ   r5,#1
 4320        BEQ     fn_getnum_loop
 4330        CMP     r0,#ASC"0"
 4340        BLT     got_num
 4350        CMP     r0,#ASC"9"
 4360        BGT     got_num
 4370        SUB     r0,r0,#ASC"0"
 4380        MLA     r7,r3,r7,r0
 4390        CMP     r5,#0
 4400        MULNE   r5,r3,r5
 4410        B       fn_getnum_loop
 4420.got_num
 4430        CMP     r6,#0
 4440        RSBNE   r7,r7,#0
 4450        FNadrl(14,load_scale)
 4460        LDR     r14,[r14]
 4470        MUL     r0,r7,r14
 4480        CMP     r5,#0
 4490        LDMEQFD (sp)!,{r1-r11,pc}
 4500        MOV     r1,r5
 4510        BL      divide
 4520        MOV     r0,r2
 4530        LDMFD   (sp)!,{r1-r11,pc}
 4540
 4550.fn_getpar
 4560        STMFD   (sp)!,{r0-r11,link}
 4570        MOV     r4,r11
 4580        ADD     r5,r11,#&100
 4590.fn_getpar_loop
 4600        LDRB    r0,[r5],#1
 4610        CMP     r0,#ASC"A"
 4620        BLT     not_uc
 4630        CMP     r0,#ASC"Z"
 4640        ADDLE   r0,r0,#ASC"a"-ASC"A"
 4650.not_uc
 4660        CMP     r0,#ASC","
 4670        MOVEQ   r0,#ASC" "
 4680        CMP     r0,#ASC" "
 4690        MOVLE   r0,#0
 4700        STRB    r0,[r4],#1
 4710        BGT     fn_getpar_loop
 4720        ADD     r1,r11,#&100
 4730        MOV     r0,r5
 4740        BL      fn_strip
 4750        LDMFD   (sp)!,{r0-r11,pc}
 4760
 4770.fn_getline
 4780        STMFD   (sp)!,{r0-r11,link}
 4790        MOV     r5,r0
 4800.fn_getline_loop
 4810        MOV     r1,r10
 4820        SWI     "XOS_BGet"
 4830        BCS     got_line
 4840        CMP     r0,#32
 4850        STRGEB  r0,[r5],#1
 4860        BGE     fn_getline_loop
 4870.got_line
 4880        MOV     r0,#0
 4890        STRB    r0,[r5]
 4900        LDMFD   (sp)!,{r0-r11,pc}
 4910
 4920.fn_strip
 4930        STMFD   (sp)!,{r0-r11,link}
 4940.strip1 LDRB    r14,[r0]
 4950        CMP     r14,#ASC" "
 4960        ADDEQ   r0,r0,#1
 4970        BEQ     strip1
 4980        MOV     r2,r1
 4990.strip2 LDRB    r14,[r0],#1
 5000        STRB    r14,[r1],#1
 5010        CMP     r14,#ASC" "
 5020        MOVNE   r2,r1
 5030        CMP     r14,#32
 5040        BGE     strip2
 5050        MOV     r14,#0
 5060        STRB    r14,[r2]
 5070        LDMFD   (sp)!,{r0-r11,pc}
 5080
 5090.identify_keyword
 5100        STMFD   (sp)!,{r2-r11,link}
 5110        MOV     r7,r0
 5120        MOV     r4,#0
 5130        MOV     r5,r8
 5140.id_loop
 5150        CMP     r5,#0
 5160        MVNEQ   r0,#0
 5170        MOVEQ   r1,#0
 5180        LDMEQFD (sp)!,{r2-r11,pc}
 5190        LDR     r2,[r5,#keyword_name]
 5200        MOV     r3,r7
 5210.id_compare
 5220        LDRB    r0,[r2],#1
 5230        LDRB    r1,[r3],#1
 5240        CMP     r0,r1
 5250        BNE     id_diff
 5260        CMP     r0,#ASC":"
 5270        BNE     id_compare
 5280.id_matches
 5290        MOV     r0,r4
 5300        LDR     r1,[r5,#keyword_addr]
 5310        LDMFD   (sp)!,{r2-r11,pc}
 5320.id_diff
 5330        CMP     r0,#ASC":"
 5340        BNE     next_id
 5350        CMP     r1,#ASC" "
 5360        BLE     id_matches
 5370.next_id
 5380        ADD     r4,r4,#1
 5390        LDR     r5,[r5,#keyword_next]
 5400        B       id_loop
 5410
 5420.default_scale
 5430        DCD     10000
 5440]
 5450=0
 5460:
 5470DEF FNz(z$)
 5480[OPT pass%
 5490        EQUS    z$
 5500        EQUB    0
 5510        ALIGN
 5520]
 5530=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=5
�=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")
�        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
.        BEQ     add_key2
8        MOV     r5,r8
B
.add_key1
L)        LDR     r0,[r5,#keyword_next]
V        CMP     r0,#0
`        MOVNE   r5,r0
j        BNE     add_key1
t)        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]
(        MOV     r2,#0
2
.add_key4
<        LDRB    r0,[r6],#1
F        CMP     r0,#�" "
P        MOVLE   r0,#�":"
Z        STRB    r0,[r5],#1
d        BGT     add_key4
n        MOV     r0,#0
x        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
,        MOV     r1,r9
6        SWI     "XOS_File"
@        STR     r0,[sp]
J'        LDMFD   (sp)!,{r0-r11,link}
T!        �RS    pc,link,#1<<28
^.is_a_file
h        MOV     r0,#&40
r        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
&        BL      fn_strip
0        LDRB    r14,[r1]
:        CMP     r14,#�"-"
D        BEQ     is_coord
N        CMP     r14,#�"0"
X        BLT     not_coord
b        CMP     r14,#�"9"
l        BGT     not_coord
v
.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
*        SUBS    r3,r3,#1
4        BNE     read_vertex
>        ADD     r2,r2,#1
H#        STR     r2,[r6,#surf_n]
R.not_coord
\        BL      fn_getpar
f        LDRB    r14,[r11]
p        CMP     r14,#�" "
z         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
	.        MOV     r2,r11
	8        MOV     r3,r9
	B.include_first_bit
	L        LDRB    r14,[r3],#1
	V        STRB    r14,[r1],#1
	`        CMP     r14,#�"."
	j        �Q   r2,r1
	t        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
(        MOV     r4,#8
2.get_colour_loop
<        BL      fn_getpar
F"        MOV     r0,#10+(1<<29)
P        MOV     r1,r11
Z        MOV     r2,#255
d&        SWI     "XOS_ReadUnsigned"
n"        �R     r3,r3,r2,LSL r4
x        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]
,"        MOV     r0,#subobj_req
6        BL      malloc
@        BVS     load_err
J        MOV     r5,r0
T#        ADD     r3,r4,#obj_list
^
.do_surf2
h        LDR     r0,[r3]
r        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
&        BL      malloc
0        BVS     load_err
:        MOV     r4,r0
D        MOV     r2,#0
N.do_obj2
X        LDRB    r0,[r11,r2]
b        CMP     r0,#�" "
l        ADDGT   r2,r2,#1
v        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

*        SUB     r0,r0,#1

4!        �adrl(14,load_colour)

>        STR     r0,[r14]

H%        LDR     r0,[r4,#obj_name]

R        MOV     r1,r4

\'        BL      add_keyword_to_list

f        BVS     load_err

p         B       getline_loop

z.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
.        STR     r0,[r1],#4
8        SUBS    r2,r2,#1
B        BNE     user2
L         �adrl(14,load_scale)
V        LDR     r0,[r14]
`        STMFD   (sp)!,{r0}
j         LDR     r0,ang_scale
t        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]
�        BL      fn_getpar
�        MOV     r0,r11
�$        BL      identify_keyword
�        CMP     r0,#5
        �Q   r0,#bit_merge

        MOVNE   r0,#0
)        STR     r0,[r3,#subobj_flags]
         B       getline_loop
(
2.ang_scale
<        DCD     &10000/360
F
P.is_eof MOV     r0,r11
Z        BL      free
d        MOV     r0,#&00
n        MOV     r1,r10
x        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
�
�.err_unknown_keyword
�        DCD     0
!        �z("Unknown keyword")

.err_defined_twice
"        DCD     0
,'        �z("Keyword defined twice")
6
@.fn_getnum
J'        STMFD   (sp)!,{r1-r11,link}
T        BL      fn_getpar
^        MOV     r4,r11
h        LDRB    r0,[r4]
r        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
�        CMP     r0,#�"0"
�        BLT     got_num
�        CMP     r0,#�"9"
        BGT     got_num
        SUB     r0,r0,#�"0"
        MLA     r7,r3,r7,r0
&        CMP     r5,#0
0        MULNE   r5,r3,r5
:"        B       fn_getnum_loop
D.got_num
N        CMP     r6,#0
X        RSBNE   r7,r7,#0
b         �adrl(14,load_scale)
l        LDR     r14,[r14]
v        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
�.fn_getpar_loop
�        LDRB    r0,[r5],#1
        CMP     r0,#�"A"
        BLT     not_uc
        CMP     r0,#�"Z"
 $        ADDLE   r0,r0,#�"a"-�"A"
*.not_uc
4        CMP     r0,#�","
>        �Q   r0,#�" "
H        CMP     r0,#�" "
R        MOVLE   r0,#0
\        STRB    r0,[r4],#1
f"        BGT     fn_getpar_loop
p         ADD     r1,r11,#&100
z        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
�        STRGEB  r0,[r5],#1
�#        BGE     fn_getline_loop

.got_line
        MOV     r0,#0
        STRB    r0,[r5]
$%        LDMFD   (sp)!,{r0-r11,pc}
.
8
.fn_strip
B'        STMFD   (sp)!,{r0-r11,link}
L.strip1 LDRB    r14,[r0]
V        CMP     r14,#�" "
`        ADDEQ   r0,r0,#1
j        BEQ     strip1
t        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
�'        STMFD   (sp)!,{r2-r11,link}
�        MOV     r7,r0
        MOV     r4,#0

        MOV     r5,r8
.id_loop
        CMP     r5,#0
(        MVNEQ   r0,#0
2        �Q   r1,#0
<%        LDMEQFD (sp)!,{r2-r11,pc}
F)        LDR     r2,[r5,#keyword_name]
P        MOV     r3,r7
Z.id_compare
d        LDRB    r0,[r2],#1
n        LDRB    r1,[r3],#1
x        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,#�" "
�        BLE     id_matches
�.next_id
        ADD     r4,r4,#1
)        LDR     r5,[r5,#keyword_next]
        B       id_loop
"
,.default_scale
6        DCD     10000
@]
J=0
T:
^� �z(z$)
h[OPT pass%
r        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 35  |12....keywords=5|
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 15 20 20  |z("merge")....  |
00000920  20 20 20 20 20 20 44 43  44 20 20 20 20 20 30 0d  |      DCD     0.|
00000930  03 c0 04 0d 03 ca 18 2e  61 64 64 5f 6b 65 79 77  |........add_keyw|
00000940  6f 72 64 5f 74 6f 5f 6c  69 73 74 0d 03 d4 26 20  |ord_to_list...& |
00000950  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
00000960  73 70 29 21 2c 7b 72 30  2d 72 37 2c 6c 69 6e 6b  |sp)!,{r0-r7,link|
00000970  7d 0d 03 de 19 20 20 20  20 20 20 20 20 4d 4f 56  |}....        MOV|
00000980  20 20 20 20 20 72 36 2c  72 30 0d 03 e8 23 20 20  |     r6,r0...#  |
00000990  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
000009a0  2c 23 6b 65 79 77 6f 72  64 5f 72 65 71 0d 03 f2  |,#keyword_req...|
000009b0  1a 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
000009c0  20 6d 61 6c 6c 6f 63 0d  03 fc 1b 20 20 20 20 20  | malloc....     |
000009d0  20 20 20 53 54 52 56 53  20 20 20 72 30 2c 5b 73  |   STRVS   r0,[s|
000009e0  70 5d 0d 04 06 24 20 20  20 20 20 20 20 20 4c 44  |p]...$        LD|
000009f0  4d 56 53 46 44 20 28 73  70 29 21 2c 7b 72 30 2d  |MVSFD (sp)!,{r0-|
00000a00  72 37 2c 70 63 7d 0d 04  10 19 20 20 20 20 20 20  |r7,pc}....      |
00000a10  20 20 4d 4f 56 20 20 20  20 20 72 37 2c 72 30 0d  |  MOV     r7,r0.|
00000a20  04 1a 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00000a30  20 20 20 72 38 2c 23 30  0d 04 24 16 20 20 20 20  |   r8,#0..$.    |
00000a40  20 20 20 20 ec 51 20 20  20 72 38 2c 72 37 0d 04  |    .Q   r8,r7..|
00000a50  2e 1c 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |..        BEQ   |
00000a60  20 20 61 64 64 5f 6b 65  79 32 0d 04 38 19 20 20  |  add_key2..8.  |
00000a70  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 35  |      MOV     r5|
00000a80  2c 72 38 0d 04 42 0d 2e  61 64 64 5f 6b 65 79 31  |,r8..B..add_key1|
00000a90  0d 04 4c 29 20 20 20 20  20 20 20 20 4c 44 52 20  |..L)        LDR |
00000aa0  20 20 20 20 72 30 2c 5b  72 35 2c 23 6b 65 79 77  |    r0,[r5,#keyw|
00000ab0  6f 72 64 5f 6e 65 78 74  5d 0d 04 56 19 20 20 20  |ord_next]..V.   |
00000ac0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00000ad0  23 30 0d 04 60 19 20 20  20 20 20 20 20 20 4d 4f  |#0..`.        MO|
00000ae0  56 4e 45 20 20 20 72 35  2c 72 30 0d 04 6a 1c 20  |VNE   r5,r0..j. |
00000af0  20 20 20 20 20 20 20 42  4e 45 20 20 20 20 20 61  |       BNE     a|
00000b00  64 64 5f 6b 65 79 31 0d  04 74 29 20 20 20 20 20  |dd_key1..t)     |
00000b10  20 20 20 53 54 52 20 20  20 20 20 72 37 2c 5b 72  |   STR     r7,[r|
00000b20  35 2c 23 6b 65 79 77 6f  72 64 5f 6e 65 78 74 5d  |5,#keyword_next]|
00000b30  0d 04 7e 0d 2e 61 64 64  5f 6b 65 79 32 0d 04 88  |..~..add_key2...|
00000b40  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000b50  20 72 30 2c 23 30 0d 04  92 29 20 20 20 20 20 20  | r0,#0...)      |
00000b60  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 72 37  |  STR     r0,[r7|
00000b70  2c 23 6b 65 79 77 6f 72  64 5f 6e 65 78 74 5d 0d  |,#keyword_next].|
00000b80  04 9c 29 20 20 20 20 20  20 20 20 53 54 52 20 20  |..)        STR  |
00000b90  20 20 20 72 31 2c 5b 72  37 2c 23 6b 65 79 77 6f  |   r1,[r7,#keywo|
00000ba0  72 64 5f 61 64 64 72 5d  0d 04 a6 19 20 20 20 20  |rd_addr]....    |
00000bb0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 32 2c 23  |    MOV     r2,#|
00000bc0  30 0d 04 b0 0d 2e 61 64  64 5f 6b 65 79 33 0d 04  |0.....add_key3..|
00000bd0  ba 1e 20 20 20 20 20 20  20 20 4c 44 52 42 20 20  |..        LDRB  |
00000be0  20 20 72 30 2c 5b 72 36  2c 72 32 5d 0d 04 c4 1c  |  r0,[r6,r2]....|
00000bf0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00000c00  72 30 2c 23 97 22 20 22  0d 04 ce 1c 20 20 20 20  |r0,#." "....    |
00000c10  20 20 20 20 41 44 44 47  54 20 20 20 72 32 2c 72  |    ADDGT   r2,r|
00000c20  32 2c 23 31 0d 04 d8 1c  20 20 20 20 20 20 20 20  |2,#1....        |
00000c30  42 47 54 20 20 20 20 20  61 64 64 5f 6b 65 79 33  |BGT     add_key3|
00000c40  0d 04 e2 1c 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00000c50  20 20 20 20 72 30 2c 72  32 2c 23 35 0d 04 ec 1c  |    r0,r2,#5....|
00000c60  20 20 20 20 20 20 20 20  42 49 43 20 20 20 20 20  |        BIC     |
00000c70  72 30 2c 72 30 2c 23 33  0d 04 f6 1a 20 20 20 20  |r0,r0,#3....    |
00000c80  20 20 20 20 42 4c 20 20  20 20 20 20 6d 61 6c 6c  |    BL      mall|
00000c90  6f 63 0d 05 00 1b 20 20  20 20 20 20 20 20 53 54  |oc....        ST|
00000ca0  52 56 53 20 20 20 72 30  2c 5b 73 70 5d 0d 05 0a  |RVS   r0,[sp]...|
00000cb0  24 20 20 20 20 20 20 20  20 4c 44 4d 56 53 46 44  |$        LDMVSFD|
00000cc0  20 28 73 70 29 21 2c 7b  72 30 2d 72 37 2c 70 63  | (sp)!,{r0-r7,pc|
00000cd0  7d 0d 05 14 19 20 20 20  20 20 20 20 20 4d 4f 56  |}....        MOV|
00000ce0  20 20 20 20 20 72 35 2c  72 30 0d 05 1e 29 20 20  |     r5,r0...)  |
00000cf0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 35  |      STR     r5|
00000d00  2c 5b 72 37 2c 23 6b 65  79 77 6f 72 64 5f 6e 61  |,[r7,#keyword_na|
00000d10  6d 65 5d 0d 05 28 19 20  20 20 20 20 20 20 20 4d  |me]..(.        M|
00000d20  4f 56 20 20 20 20 20 72  32 2c 23 30 0d 05 32 0d  |OV     r2,#0..2.|
00000d30  2e 61 64 64 5f 6b 65 79  34 0d 05 3c 1e 20 20 20  |.add_key4..<.   |
00000d40  20 20 20 20 20 4c 44 52  42 20 20 20 20 72 30 2c  |     LDRB    r0,|
00000d50  5b 72 36 5d 2c 23 31 0d  05 46 1c 20 20 20 20 20  |[r6],#1..F.     |
00000d60  20 20 20 43 4d 50 20 20  20 20 20 72 30 2c 23 97  |   CMP     r0,#.|
00000d70  22 20 22 0d 05 50 1c 20  20 20 20 20 20 20 20 4d  |" "..P.        M|
00000d80  4f 56 4c 45 20 20 20 72  30 2c 23 97 22 3a 22 0d  |OVLE   r0,#.":".|
00000d90  05 5a 1e 20 20 20 20 20  20 20 20 53 54 52 42 20  |.Z.        STRB |
00000da0  20 20 20 72 30 2c 5b 72  35 5d 2c 23 31 0d 05 64  |   r0,[r5],#1..d|
00000db0  1c 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |.        BGT    |
00000dc0  20 61 64 64 5f 6b 65 79  34 0d 05 6e 19 20 20 20  | add_key4..n.   |
00000dd0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
00000de0  23 30 0d 05 78 1b 20 20  20 20 20 20 20 20 53 54  |#0..x.        ST|
00000df0  52 42 20 20 20 20 72 30  2c 5b 72 35 5d 0d 05 82  |RB    r0,[r5]...|
00000e00  24 20 20 20 20 20 20 20  20 4c 44 4d 46 44 20 20  |$        LDMFD  |
00000e10  20 28 73 70 29 21 2c 7b  72 30 2d 72 37 2c 70 63  | (sp)!,{r0-r7,pc|
00000e20  7d 0d 05 8c 04 0d 05 96  1b 2e 65 72 72 5f 63 6f  |}.........err_co|
00000e30  6f 72 64 5f 6e 6f 74 5f  65 78 70 65 63 74 65 64  |ord_not_expected|
00000e40  0d 05 a0 15 20 20 20 20  20 20 20 20 44 43 44 20  |....        DCD |
00000e50  20 20 20 20 30 0d 05 aa  2a 20 20 20 20 20 20 20  |    0...*       |
00000e60  20 a4 7a 28 22 43 6f 2d  6f 72 64 69 6e 61 74 65  | .z("Co-ordinate|
00000e70  20 6e 6f 74 20 65 78 70  65 63 74 65 64 22 29 0d  | not expected").|
00000e80  05 b4 04 0d 05 be 0e 2e  6c 6f 61 64 5f 66 69 6c  |........load_fil|
00000e90  65 0d 05 c8 27 20 20 20  20 20 20 20 20 53 54 4d  |e...'        STM|
00000ea0  46 44 20 20 20 28 73 70  29 21 2c 7b 72 30 2d 72  |FD   (sp)!,{r0-r|
00000eb0  31 31 2c 6c 69 6e 6b 7d  0d 05 d2 19 20 20 20 20  |11,link}....    |
00000ec0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 23  |    MOV     r0,#|
00000ed0  35 0d 05 dc 19 20 20 20  20 20 20 20 20 4d 4f 56  |5....        MOV|
00000ee0  20 20 20 20 20 72 31 2c  72 39 0d 05 e6 1e 20 20  |     r1,r9....  |
00000ef0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000f00  4f 53 5f 46 69 6c 65 22  0d 05 f0 1b 20 20 20 20  |OS_File"....    |
00000f10  20 20 20 20 53 54 52 56  53 20 20 20 72 30 2c 5b  |    STRVS   r0,[|
00000f20  73 70 5d 0d 05 fa 25 20  20 20 20 20 20 20 20 4c  |sp]...%        L|
00000f30  44 4d 56 53 46 44 20 28  73 70 29 21 2c 7b 72 30  |DMVSFD (sp)!,{r0|
00000f40  2d 72 31 31 2c 70 63 7d  0d 06 04 19 20 20 20 20  |-r11,pc}....    |
00000f50  20 20 20 20 43 4d 50 20  20 20 20 20 72 30 2c 23  |    CMP     r0,#|
00000f60  31 0d 06 0e 1d 20 20 20  20 20 20 20 20 42 45 51  |1....        BEQ|
00000f70  20 20 20 20 20 69 73 5f  61 5f 66 69 6c 65 0d 06  |     is_a_file..|
00000f80  18 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00000f90  20 20 72 32 2c 72 30 0d  06 22 1a 20 20 20 20 20  |  r2,r0..".     |
00000fa0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 31  |   MOV     r0,#1|
00000fb0  39 0d 06 2c 19 20 20 20  20 20 20 20 20 4d 4f 56  |9..,.        MOV|
00000fc0  20 20 20 20 20 72 31 2c  72 39 0d 06 36 1e 20 20  |     r1,r9..6.  |
00000fd0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00000fe0  4f 53 5f 46 69 6c 65 22  0d 06 40 1b 20 20 20 20  |OS_File"..@.    |
00000ff0  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00001000  73 70 5d 0d 06 4a 27 20  20 20 20 20 20 20 20 4c  |sp]..J'        L|
00001010  44 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |DMFD   (sp)!,{r0|
00001020  2d 72 31 31 2c 6c 69 6e  6b 7d 0d 06 54 21 20 20  |-r11,link}..T!  |
00001030  20 20 20 20 20 20 84 52  53 20 20 20 20 70 63 2c  |      .RS    pc,|
00001040  6c 69 6e 6b 2c 23 31 3c  3c 32 38 0d 06 5e 0e 2e  |link,#1<<28..^..|
00001050  69 73 5f 61 5f 66 69 6c  65 0d 06 68 1b 20 20 20  |is_a_file..h.   |
00001060  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
00001070  23 26 34 30 0d 06 72 19  20 20 20 20 20 20 20 20  |#&40..r.        |
00001080  4d 4f 56 20 20 20 20 20  72 31 2c 72 39 0d 06 7c  |MOV     r1,r9..||
00001090  1e 20 20 20 20 20 20 20  20 53 57 49 20 20 20 20  |.        SWI    |
000010a0  20 22 58 4f 53 5f 46 69  6e 64 22 0d 06 86 1a 20  | "XOS_Find".... |
000010b0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000010c0  31 30 2c 72 30 0d 06 90  1c 20 20 20 20 20 20 20  |10,r0....       |
000010d0  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 26 32 30  | MOV     r0,#&20|
000010e0  30 0d 06 9a 1a 20 20 20  20 20 20 20 20 42 4c 20  |0....        BL |
000010f0  20 20 20 20 20 6d 61 6c  6c 6f 63 0d 06 a4 1b 20  |     malloc.... |
00001100  20 20 20 20 20 20 20 53  54 52 56 53 20 20 20 72  |       STRVS   r|
00001110  30 2c 5b 73 70 5d 0d 06  ae 25 20 20 20 20 20 20  |0,[sp]...%      |
00001120  20 20 4c 44 4d 56 53 46  44 20 28 73 70 29 21 2c  |  LDMVSFD (sp)!,|
00001130  7b 72 30 2d 72 31 31 2c  70 63 7d 0d 06 b8 1a 20  |{r0-r11,pc}.... |
00001140  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00001150  31 31 2c 72 30 0d 06 c2  19 20 20 20 20 20 20 20  |11,r0....       |
00001160  20 4d 56 4e 20 20 20 20  20 72 37 2c 23 30 0d 06  | MVN     r7,#0..|
00001170  cc 11 2e 67 65 74 6c 69  6e 65 5f 6c 6f 6f 70 0d  |...getline_loop.|
00001180  06 d6 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00001190  20 20 20 72 30 2c 23 35  0d 06 e0 1a 20 20 20 20  |   r0,#5....    |
000011a0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 72  |    MOV     r1,r|
000011b0  31 30 0d 06 ea 1e 20 20  20 20 20 20 20 20 53 57  |10....        SW|
000011c0  49 20 20 20 20 20 22 58  4f 53 5f 41 72 67 73 22  |I     "XOS_Args"|
000011d0  0d 06 f4 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
000011e0  20 20 20 20 72 32 2c 23  30 0d 06 fe 1a 20 20 20  |    r2,#0....   |
000011f0  20 20 20 20 20 42 4e 45  20 20 20 20 20 69 73 5f  |     BNE     is_|
00001200  65 6f 66 0d 07 08 1a 20  20 20 20 20 20 20 20 4d  |eof....        M|
00001210  4f 56 20 20 20 20 20 72  30 2c 72 31 31 0d 07 12  |OV     r0,r11...|
00001220  1e 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
00001230  20 66 6e 5f 67 65 74 6c  69 6e 65 0d 07 1c 20 20  | fn_getline...  |
00001240  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00001250  31 2c 72 31 31 2c 23 26  31 30 30 0d 07 26 1c 20  |1,r11,#&100..&. |
00001260  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 66  |       BL      f|
00001270  6e 5f 73 74 72 69 70 0d  07 30 1c 20 20 20 20 20  |n_strip..0.     |
00001280  20 20 20 4c 44 52 42 20  20 20 20 72 31 34 2c 5b  |   LDRB    r14,[|
00001290  72 31 5d 0d 07 3a 1d 20  20 20 20 20 20 20 20 43  |r1]..:.        C|
000012a0  4d 50 20 20 20 20 20 72  31 34 2c 23 97 22 2d 22  |MP     r14,#."-"|
000012b0  0d 07 44 1c 20 20 20 20  20 20 20 20 42 45 51 20  |..D.        BEQ |
000012c0  20 20 20 20 69 73 5f 63  6f 6f 72 64 0d 07 4e 1d  |    is_coord..N.|
000012d0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
000012e0  72 31 34 2c 23 97 22 30  22 0d 07 58 1d 20 20 20  |r14,#."0"..X.   |
000012f0  20 20 20 20 20 42 4c 54  20 20 20 20 20 6e 6f 74  |     BLT     not|
00001300  5f 63 6f 6f 72 64 0d 07  62 1d 20 20 20 20 20 20  |_coord..b.      |
00001310  20 20 43 4d 50 20 20 20  20 20 72 31 34 2c 23 97  |  CMP     r14,#.|
00001320  22 39 22 0d 07 6c 1d 20  20 20 20 20 20 20 20 42  |"9"..l.        B|
00001330  47 54 20 20 20 20 20 6e  6f 74 5f 63 6f 6f 72 64  |GT     not_coord|
00001340  0d 07 76 0d 2e 69 73 5f  63 6f 6f 72 64 0d 07 80  |..v..is_coord...|
00001350  19 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
00001360  20 72 37 2c 23 33 0d 07  8a 2d 20 20 20 20 20 20  | r7,#3...-      |
00001370  20 20 41 44 52 4e 45 20  20 20 72 30 2c 65 72 72  |  ADRNE   r0,err|
00001380  5f 63 6f 6f 72 64 5f 6e  6f 74 5f 65 78 70 65 63  |_coord_not_expec|
00001390  74 65 64 0d 07 94 1c 20  20 20 20 20 20 20 20 42  |ted....        B|
000013a0  4e 45 20 20 20 20 20 6c  6f 61 64 5f 65 72 72 0d  |NE     load_err.|
000013b0  07 9e 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000013c0  20 20 20 72 30 2c 72 36  0d 07 a8 1a 20 20 20 20  |   r0,r6....    |
000013d0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 23  |    MOV     r1,#|
000013e0  31 32 0d 07 b2 1b 20 20  20 20 20 20 20 20 42 4c  |12....        BL|
000013f0  20 20 20 20 20 20 72 65  61 6c 6c 6f 63 0d 07 bc  |      realloc...|
00001400  1c 20 20 20 20 20 20 20  20 42 56 53 20 20 20 20  |.        BVS    |
00001410  20 6c 6f 61 64 5f 65 72  72 0d 07 c6 19 20 20 20  | load_err....   |
00001420  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 36 2c  |     MOV     r6,|
00001430  72 30 0d 07 d0 28 20 20  20 20 20 20 20 20 53 54  |r0...(        ST|
00001440  52 20 20 20 20 20 72 36  2c 5b 72 35 2c 23 73 75  |R     r6,[r5,#su|
00001450  62 6f 62 6a 5f 74 79 70  65 5d 0d 07 da 23 20 20  |bobj_type]...#  |
00001460  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 32  |      LDR     r2|
00001470  2c 5b 72 36 2c 23 73 75  72 66 5f 6e 5d 0d 07 e4  |,[r6,#surf_n]...|
00001480  23 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |#        ADD    |
00001490  20 72 31 2c 72 36 2c 23  73 75 72 66 5f 72 65 71  | r1,r6,#surf_req|
000014a0  0d 07 ee 23 20 20 20 20  20 20 20 20 41 44 44 20  |...#        ADD |
000014b0  20 20 20 20 72 31 2c 72  31 2c 72 32 2c 4c 53 4c  |    r1,r1,r2,LSL|
000014c0  20 23 33 0d 07 f8 23 20  20 20 20 20 20 20 20 41  | #3...#        A|
000014d0  44 44 20 20 20 20 20 72  31 2c 72 31 2c 72 32 2c  |DD     r1,r1,r2,|
000014e0  4c 53 4c 20 23 32 0d 08  02 19 20 20 20 20 20 20  |LSL #2....      |
000014f0  20 20 4d 4f 56 20 20 20  20 20 72 33 2c 23 33 0d  |  MOV     r3,#3.|
00001500  08 0c 10 2e 72 65 61 64  5f 76 65 72 74 65 78 0d  |....read_vertex.|
00001510  08 16 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00001520  20 20 20 66 6e 5f 67 65  74 6e 75 6d 0d 08 20 1e  |   fn_getnum.. .|
00001530  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00001540  72 30 2c 5b 72 31 5d 2c  23 34 0d 08 2a 1c 20 20  |r0,[r1],#4..*.  |
00001550  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 33  |      SUBS    r3|
00001560  2c 72 33 2c 23 31 0d 08  34 1f 20 20 20 20 20 20  |,r3,#1..4.      |
00001570  20 20 42 4e 45 20 20 20  20 20 72 65 61 64 5f 76  |  BNE     read_v|
00001580  65 72 74 65 78 0d 08 3e  1c 20 20 20 20 20 20 20  |ertex..>.       |
00001590  20 41 44 44 20 20 20 20  20 72 32 2c 72 32 2c 23  | ADD     r2,r2,#|
000015a0  31 0d 08 48 23 20 20 20  20 20 20 20 20 53 54 52  |1..H#        STR|
000015b0  20 20 20 20 20 72 32 2c  5b 72 36 2c 23 73 75 72  |     r2,[r6,#sur|
000015c0  66 5f 6e 5d 0d 08 52 0e  2e 6e 6f 74 5f 63 6f 6f  |f_n]..R..not_coo|
000015d0  72 64 0d 08 5c 1d 20 20  20 20 20 20 20 20 42 4c  |rd..\.        BL|
000015e0  20 20 20 20 20 20 66 6e  5f 67 65 74 70 61 72 0d  |      fn_getpar.|
000015f0  08 66 1d 20 20 20 20 20  20 20 20 4c 44 52 42 20  |.f.        LDRB |
00001600  20 20 20 72 31 34 2c 5b  72 31 31 5d 0d 08 70 1d  |   r14,[r11]..p.|
00001610  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00001620  72 31 34 2c 23 97 22 20  22 0d 08 7a 20 20 20 20  |r14,#." "..z    |
00001630  20 20 20 20 20 42 4c 45  20 20 20 20 20 67 65 74  |     BLE     get|
00001640  6c 69 6e 65 5f 6c 6f 6f  70 0d 08 84 1a 20 20 20  |line_loop....   |
00001650  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
00001660  72 31 31 0d 08 8e 24 20  20 20 20 20 20 20 20 42  |r11...$        B|
00001670  4c 20 20 20 20 20 20 69  64 65 6e 74 69 66 79 5f  |L      identify_|
00001680  6b 65 79 77 6f 72 64 0d  08 98 19 20 20 20 20 20  |keyword....     |
00001690  20 20 20 43 4d 50 20 20  20 20 20 72 30 2c 23 30  |   CMP     r0,#0|
000016a0  0d 08 a2 2a 20 20 20 20  20 20 20 20 41 44 52 4c  |...*        ADRL|
000016b0  54 20 20 20 72 30 2c 65  72 72 5f 75 6e 6b 6e 6f  |T   r0,err_unkno|
000016c0  77 6e 5f 6b 65 79 77 6f  72 64 0d 08 ac 1c 20 20  |wn_keyword....  |
000016d0  20 20 20 20 20 20 42 4c  54 20 20 20 20 20 6c 6f  |      BLT     lo|
000016e0  61 64 5f 65 72 72 0d 08  b6 20 20 20 20 20 20 20  |ad_err...       |
000016f0  20 20 43 4d 50 20 20 20  20 20 72 30 2c 23 6b 65  |  CMP     r0,#ke|
00001700  79 77 6f 72 64 73 0d 08  c0 19 20 20 20 20 20 20  |ywords....      |
00001710  20 20 4d 4f 56 4c 54 20  20 20 72 37 2c 72 30 0d  |  MOVLT   r7,r0.|
00001720  08 ca 20 20 20 20 20 20  20 20 20 42 47 45 20 20  |..         BGE  |
00001730  20 20 20 75 73 65 72 5f  6b 65 79 77 6f 72 64 0d  |   user_keyword.|
00001740  08 d4 23 20 20 20 20 20  20 20 20 41 44 44 20 20  |..#        ADD  |
00001750  20 20 20 70 63 2c 70 63  2c 72 30 2c 4c 53 4c 20  |   pc,pc,r0,LSL |
00001760  23 32 0d 08 de 15 20 20  20 20 20 20 20 20 44 43  |#2....        DC|
00001770  44 20 20 20 20 20 30 0d  08 e8 20 20 20 20 20 20  |D     0...      |
00001780  20 20 20 42 20 20 20 20  20 20 20 67 65 74 6c 69  |   B       getli|
00001790  6e 65 5f 6c 6f 6f 70 0d  08 f2 1e 20 20 20 20 20  |ne_loop....     |
000017a0  20 20 20 42 20 20 20 20  20 20 20 64 6f 5f 69 6e  |   B       do_in|
000017b0  63 6c 75 64 65 0d 08 fc  1d 20 20 20 20 20 20 20  |clude....       |
000017c0  20 42 20 20 20 20 20 20  20 64 6f 5f 63 6f 6c 6f  | B       do_colo|
000017d0  75 72 0d 09 06 1e 20 20  20 20 20 20 20 20 42 20  |ur....        B |
000017e0  20 20 20 20 20 20 64 6f  5f 73 75 72 66 61 63 65  |      do_surface|
000017f0  0d 09 10 1d 20 20 20 20  20 20 20 20 42 20 20 20  |....        B   |
00001800  20 20 20 20 64 6f 5f 6f  62 6a 65 63 74 0d 09 1a  |    do_object...|
00001810  0f 2e 64 6f 5f 69 6e 63  6c 75 64 65 0d 09 24 1a  |..do_include..$.|
00001820  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001830  72 31 2c 72 31 31 0d 09  2e 1a 20 20 20 20 20 20  |r1,r11....      |
00001840  20 20 4d 4f 56 20 20 20  20 20 72 32 2c 72 31 31  |  MOV     r2,r11|
00001850  0d 09 38 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..8.        MOV |
00001860  20 20 20 20 72 33 2c 72  39 0d 09 42 16 2e 69 6e  |    r3,r9..B..in|
00001870  63 6c 75 64 65 5f 66 69  72 73 74 5f 62 69 74 0d  |clude_first_bit.|
00001880  09 4c 1f 20 20 20 20 20  20 20 20 4c 44 52 42 20  |.L.        LDRB |
00001890  20 20 20 72 31 34 2c 5b  72 33 5d 2c 23 31 0d 09  |   r14,[r3],#1..|
000018a0  56 1f 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |V.        STRB  |
000018b0  20 20 72 31 34 2c 5b 72  31 5d 2c 23 31 0d 09 60  |  r14,[r1],#1..`|
000018c0  1d 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
000018d0  20 72 31 34 2c 23 97 22  2e 22 0d 09 6a 16 20 20  | r14,#."."..j.  |
000018e0  20 20 20 20 20 20 ec 51  20 20 20 72 32 2c 72 31  |      .Q   r2,r1|
000018f0  0d 09 74 1d 20 20 20 20  20 20 20 20 43 4d 50 20  |..t.        CMP |
00001900  20 20 20 20 72 31 34 2c  23 97 22 20 22 0d 09 7e  |    r14,#." "..~|
00001910  25 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |%        BGT    |
00001920  20 69 6e 63 6c 75 64 65  5f 66 69 72 73 74 5f 62  | include_first_b|
00001930  69 74 0d 09 88 20 20 20  20 20 20 20 20 20 41 44  |it...         AD|
00001940  44 20 20 20 20 20 72 33  2c 72 31 31 2c 23 26 31  |D     r3,r11,#&1|
00001950  30 30 0d 09 92 0e 2e 63  6f 70 79 5f 74 61 69 6c  |00.....copy_tail|
00001960  0d 09 9c 1f 20 20 20 20  20 20 20 20 4c 44 52 42  |....        LDRB|
00001970  20 20 20 20 72 31 34 2c  5b 72 33 5d 2c 23 31 0d  |    r14,[r3],#1.|
00001980  09 a6 1d 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00001990  20 20 20 72 31 34 2c 23  97 22 20 22 0d 09 b0 1a  |   r14,#." "....|
000019a0  20 20 20 20 20 20 20 20  4d 4f 56 4c 45 20 20 20  |        MOVLE   |
000019b0  72 31 34 2c 23 30 0d 09  ba 1f 20 20 20 20 20 20  |r14,#0....      |
000019c0  20 20 53 54 52 42 20 20  20 20 72 31 34 2c 5b 72  |  STRB    r14,[r|
000019d0  32 5d 2c 23 31 0d 09 c4  1d 20 20 20 20 20 20 20  |2],#1....       |
000019e0  20 42 47 54 20 20 20 20  20 63 6f 70 79 5f 74 61  | BGT     copy_ta|
000019f0  69 6c 0d 09 ce 1e 20 20  20 20 20 20 20 20 53 54  |il....        ST|
00001a00  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 39 7d  |MFD   (sp)!,{r9}|
00001a10  0d 09 d8 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00001a20  20 20 20 20 72 39 2c 72  31 31 0d 09 e2 1d 20 20  |    r9,r11....  |
00001a30  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 6c 6f  |      BL      lo|
00001a40  61 64 5f 66 69 6c 65 0d  09 ec 1e 20 20 20 20 20  |ad_file....     |
00001a50  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
00001a60  2c 7b 72 39 7d 0d 09 f6  21 20 20 20 20 20 20 20  |,{r9}...!       |
00001a70  20 42 56 53 20 20 20 20  20 6c 6f 61 64 5f 66 69  | BVS     load_fi|
00001a80  6c 65 5f 65 72 72 0d 0a  00 20 20 20 20 20 20 20  |le_err...       |
00001a90  20 20 42 20 20 20 20 20  20 20 67 65 74 6c 69 6e  |  B       getlin|
00001aa0  65 5f 6c 6f 6f 70 0d 0a  0a 0e 2e 64 6f 5f 63 6f  |e_loop.....do_co|
00001ab0  6c 6f 75 72 0d 0a 14 1e  20 20 20 20 20 20 20 20  |lour....        |
00001ac0  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
00001ad0  34 7d 0d 0a 1e 19 20 20  20 20 20 20 20 20 4d 4f  |4}....        MO|
00001ae0  56 20 20 20 20 20 72 33  2c 23 30 0d 0a 28 19 20  |V     r3,#0..(. |
00001af0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00001b00  34 2c 23 38 0d 0a 32 14  2e 67 65 74 5f 63 6f 6c  |4,#8..2..get_col|
00001b10  6f 75 72 5f 6c 6f 6f 70  0d 0a 3c 1d 20 20 20 20  |our_loop..<.    |
00001b20  20 20 20 20 42 4c 20 20  20 20 20 20 66 6e 5f 67  |    BL      fn_g|
00001b30  65 74 70 61 72 0d 0a 46  22 20 20 20 20 20 20 20  |etpar..F"       |
00001b40  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 31 30 2b  | MOV     r0,#10+|
00001b50  28 31 3c 3c 32 39 29 0d  0a 50 1a 20 20 20 20 20  |(1<<29)..P.     |
00001b60  20 20 20 4d 4f 56 20 20  20 20 20 72 31 2c 72 31  |   MOV     r1,r1|
00001b70  31 0d 0a 5a 1b 20 20 20  20 20 20 20 20 4d 4f 56  |1..Z.        MOV|
00001b80  20 20 20 20 20 72 32 2c  23 32 35 35 0d 0a 64 26  |     r2,#255..d&|
00001b90  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
00001ba0  22 58 4f 53 5f 52 65 61  64 55 6e 73 69 67 6e 65  |"XOS_ReadUnsigne|
00001bb0  64 22 0d 0a 6e 22 20 20  20 20 20 20 20 20 84 52  |d"..n"        .R|
00001bc0  20 20 20 20 20 72 33 2c  72 33 2c 72 32 2c 4c 53  |     r3,r3,r2,LS|
00001bd0  4c 20 72 34 0d 0a 78 1c  20 20 20 20 20 20 20 20  |L r4..x.        |
00001be0  41 44 44 20 20 20 20 20  72 34 2c 72 34 2c 23 38  |ADD     r4,r4,#8|
00001bf0  0d 0a 82 1a 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00001c00  20 20 20 20 72 34 2c 23  33 32 0d 0a 8c 23 20 20  |    r4,#32...#  |
00001c10  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 67 65  |      BNE     ge|
00001c20  74 5f 63 6f 6c 6f 75 72  5f 6c 6f 6f 70 0d 0a 96  |t_colour_loop...|
00001c30  21 20 20 20 20 20 20 20  20 a4 61 64 72 6c 28 31  |!        .adrl(1|
00001c40  34 2c 6c 6f 61 64 5f 63  6f 6c 6f 75 72 29 0d 0a  |4,load_colour)..|
00001c50  a0 1c 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |..        STR   |
00001c60  20 20 72 33 2c 5b 72 31  34 5d 0d 0a aa 1e 20 20  |  r3,[r14]....  |
00001c70  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00001c80  70 29 21 2c 7b 72 34 7d  0d 0a b4 20 20 20 20 20  |p)!,{r4}...     |
00001c90  20 20 20 20 42 20 20 20  20 20 20 20 67 65 74 6c  |    B       getl|
00001ca0  69 6e 65 5f 6c 6f 6f 70  0d 0a be 0f 2e 64 6f 5f  |ine_loop.....do_|
00001cb0  73 75 72 66 61 63 65 0d  0a c8 20 20 20 20 20 20  |surface...      |
00001cc0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 73  |   MOV     r0,#s|
00001cd0  75 72 66 5f 72 65 71 0d  0a d2 1a 20 20 20 20 20  |urf_req....     |
00001ce0  20 20 20 42 4c 20 20 20  20 20 20 6d 61 6c 6c 6f  |   BL      mallo|
00001cf0  63 0d 0a dc 1c 20 20 20  20 20 20 20 20 42 56 53  |c....        BVS|
00001d00  20 20 20 20 20 6c 6f 61  64 5f 65 72 72 0d 0a e6  |     load_err...|
00001d10  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001d20  20 72 36 2c 72 30 0d 0a  f0 19 20 20 20 20 20 20  | r6,r0....      |
00001d30  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 23 30 0d  |  MOV     r0,#0.|
00001d40  0a fa 26 20 20 20 20 20  20 20 20 53 54 52 20 20  |..&        STR  |
00001d50  20 20 20 72 30 2c 5b 72  36 2c 23 73 75 72 66 5f  |   r0,[r6,#surf_|
00001d60  74 79 70 65 5d 0d 0b 04  23 20 20 20 20 20 20 20  |type]...#       |
00001d70  20 53 54 52 20 20 20 20  20 72 30 2c 5b 72 36 2c  | STR     r0,[r6,|
00001d80  23 73 75 72 66 5f 6e 5d  0d 0b 0e 21 20 20 20 20  |#surf_n]...!    |
00001d90  20 20 20 20 a4 61 64 72  6c 28 31 34 2c 6c 6f 61  |    .adrl(14,loa|
00001da0  64 5f 63 6f 6c 6f 75 72  29 0d 0b 18 1c 20 20 20  |d_colour)....   |
00001db0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00001dc0  5b 72 31 34 5d 0d 0b 22  28 20 20 20 20 20 20 20  |[r14].."(       |
00001dd0  20 53 54 52 20 20 20 20  20 72 30 2c 5b 72 36 2c  | STR     r0,[r6,|
00001de0  23 73 75 72 66 5f 63 6f  6c 6f 75 72 5d 0d 0b 2c  |#surf_colour]..,|
00001df0  22 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |"        MOV    |
00001e00  20 72 30 2c 23 73 75 62  6f 62 6a 5f 72 65 71 0d  | r0,#subobj_req.|
00001e10  0b 36 1a 20 20 20 20 20  20 20 20 42 4c 20 20 20  |.6.        BL   |
00001e20  20 20 20 6d 61 6c 6c 6f  63 0d 0b 40 1c 20 20 20  |   malloc..@.   |
00001e30  20 20 20 20 20 42 56 53  20 20 20 20 20 6c 6f 61  |     BVS     loa|
00001e40  64 5f 65 72 72 0d 0b 4a  19 20 20 20 20 20 20 20  |d_err..J.       |
00001e50  20 4d 4f 56 20 20 20 20  20 72 35 2c 72 30 0d 0b  | MOV     r5,r0..|
00001e60  54 23 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |T#        ADD   |
00001e70  20 20 72 33 2c 72 34 2c  23 6f 62 6a 5f 6c 69 73  |  r3,r4,#obj_lis|
00001e80  74 0d 0b 5e 0d 2e 64 6f  5f 73 75 72 66 32 0d 0b  |t..^..do_surf2..|
00001e90  68 1b 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |h.        LDR   |
00001ea0  20 20 72 30 2c 5b 72 33  5d 0d 0b 72 19 20 20 20  |  r0,[r3]..r.   |
00001eb0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00001ec0  23 30 0d 0b 7c 26 20 20  20 20 20 20 20 20 41 44  |#0..|&        AD|
00001ed0  44 4e 45 20 20 20 72 33  2c 72 30 2c 23 73 75 62  |DNE   r3,r0,#sub|
00001ee0  6f 62 6a 5f 6e 65 78 74  0d 0b 86 1c 20 20 20 20  |obj_next....    |
00001ef0  20 20 20 20 42 4e 45 20  20 20 20 20 64 6f 5f 73  |    BNE     do_s|
00001f00  75 72 66 32 0d 0b 90 1b  20 20 20 20 20 20 20 20  |urf2....        |
00001f10  53 54 52 20 20 20 20 20  72 35 2c 5b 72 33 5d 0d  |STR     r5,[r3].|
00001f20  0b 9a 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00001f30  20 20 20 72 30 2c 23 30  0d 0b a4 28 20 20 20 20  |   r0,#0...(    |
00001f40  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00001f50  72 35 2c 23 73 75 62 6f  62 6a 5f 6e 65 78 74 5d  |r5,#subobj_next]|
00001f60  0d 0b ae 28 20 20 20 20  20 20 20 20 53 54 52 20  |...(        STR |
00001f70  20 20 20 20 72 36 2c 5b  72 35 2c 23 73 75 62 6f  |    r6,[r5,#subo|
00001f80  62 6a 5f 74 79 70 65 5d  0d 0b b8 20 20 20 20 20  |bj_type]...     |
00001f90  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 23  |    MOV     r0,#|
00001fa0  62 69 74 5f 73 75 72 66  0d 0b c2 29 20 20 20 20  |bit_surf...)    |
00001fb0  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00001fc0  72 35 2c 23 73 75 62 6f  62 6a 5f 66 6c 61 67 73  |r5,#subobj_flags|
00001fd0  5d 0d 0b cc 20 20 20 20  20 20 20 20 20 42 20 20  |]...         B  |
00001fe0  20 20 20 20 20 67 65 74  6c 69 6e 65 5f 6c 6f 6f  |     getline_loo|
00001ff0  70 0d 0b d6 0e 2e 64 6f  5f 6f 62 6a 65 63 74 0d  |p.....do_object.|
00002000  0b e0 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00002010  20 20 20 66 6e 5f 67 65  74 70 61 72 0d 0b ea 1a  |   fn_getpar....|
00002020  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002030  72 30 2c 72 31 31 0d 0b  f4 24 20 20 20 20 20 20  |r0,r11...$      |
00002040  20 20 42 4c 20 20 20 20  20 20 69 64 65 6e 74 69  |  BL      identi|
00002050  66 79 5f 6b 65 79 77 6f  72 64 0d 0b fe 19 20 20  |fy_keyword....  |
00002060  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00002070  2c 23 30 0d 0c 08 28 20  20 20 20 20 20 20 20 41  |,#0...(        A|
00002080  44 52 47 45 20 20 20 72  30 2c 65 72 72 5f 64 65  |DRGE   r0,err_de|
00002090  66 69 6e 65 64 5f 74 77  69 63 65 0d 0c 12 1c 20  |fined_twice.... |
000020a0  20 20 20 20 20 20 20 42  47 45 20 20 20 20 20 6c  |       BGE     l|
000020b0  6f 61 64 5f 65 72 72 0d  0c 1c 1f 20 20 20 20 20  |oad_err....     |
000020c0  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 6f  |   MOV     r0,#o|
000020d0  62 6a 5f 72 65 71 0d 0c  26 1a 20 20 20 20 20 20  |bj_req..&.      |
000020e0  20 20 42 4c 20 20 20 20  20 20 6d 61 6c 6c 6f 63  |  BL      malloc|
000020f0  0d 0c 30 1c 20 20 20 20  20 20 20 20 42 56 53 20  |..0.        BVS |
00002100  20 20 20 20 6c 6f 61 64  5f 65 72 72 0d 0c 3a 19  |    load_err..:.|
00002110  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002120  72 34 2c 72 30 0d 0c 44  19 20 20 20 20 20 20 20  |r4,r0..D.       |
00002130  20 4d 4f 56 20 20 20 20  20 72 32 2c 23 30 0d 0c  | MOV     r2,#0..|
00002140  4e 0c 2e 64 6f 5f 6f 62  6a 32 0d 0c 58 1f 20 20  |N..do_obj2..X.  |
00002150  20 20 20 20 20 20 4c 44  52 42 20 20 20 20 72 30  |      LDRB    r0|
00002160  2c 5b 72 31 31 2c 72 32  5d 0d 0c 62 1c 20 20 20  |,[r11,r2]..b.   |
00002170  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00002180  23 97 22 20 22 0d 0c 6c  1c 20 20 20 20 20 20 20  |#." "..l.       |
00002190  20 41 44 44 47 54 20 20  20 72 32 2c 72 32 2c 23  | ADDGT   r2,r2,#|
000021a0  31 0d 0c 76 1b 20 20 20  20 20 20 20 20 42 47 54  |1..v.        BGT|
000021b0  20 20 20 20 20 64 6f 5f  6f 62 6a 32 0d 0c 80 19  |     do_obj2....|
000021c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000021d0  72 30 2c 72 32 0d 0c 8a  1c 20 20 20 20 20 20 20  |r0,r2....       |
000021e0  20 41 44 44 20 20 20 20  20 72 30 2c 72 30 2c 23  | ADD     r0,r0,#|
000021f0  34 0d 0c 94 1c 20 20 20  20 20 20 20 20 42 49 43  |4....        BIC|
00002200  20 20 20 20 20 72 30 2c  72 30 2c 23 33 0d 0c 9e  |     r0,r0,#3...|
00002210  1a 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
00002220  20 6d 61 6c 6c 6f 63 0d  0c a8 1c 20 20 20 20 20  | malloc....     |
00002230  20 20 20 42 56 53 20 20  20 20 20 6c 6f 61 64 5f  |   BVS     load_|
00002240  65 72 72 0d 0c b2 19 20  20 20 20 20 20 20 20 4d  |err....        M|
00002250  4f 56 20 20 20 20 20 72  32 2c 72 30 0d 0c bc 1a  |OV     r2,r0....|
00002260  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002270  72 31 2c 72 31 31 0d 0c  c6 0c 2e 64 6f 5f 6f 62  |r1,r11.....do_ob|
00002280  6a 33 0d 0c d0 1f 20 20  20 20 20 20 20 20 4c 44  |j3....        LD|
00002290  52 42 20 20 20 20 72 31  34 2c 5b 72 31 5d 2c 23  |RB    r14,[r1],#|
000022a0  31 0d 0c da 1d 20 20 20  20 20 20 20 20 43 4d 50  |1....        CMP|
000022b0  20 20 20 20 20 72 31 34  2c 23 97 22 20 22 0d 0c  |     r14,#." "..|
000022c0  e4 1a 20 20 20 20 20 20  20 20 4d 4f 56 4c 45 20  |..        MOVLE |
000022d0  20 20 72 31 34 2c 23 30  0d 0c ee 1f 20 20 20 20  |  r14,#0....    |
000022e0  20 20 20 20 53 54 52 42  20 20 20 20 72 31 34 2c  |    STRB    r14,|
000022f0  5b 72 30 5d 2c 23 31 0d  0c f8 1b 20 20 20 20 20  |[r0],#1....     |
00002300  20 20 20 42 47 54 20 20  20 20 20 64 6f 5f 6f 62  |   BGT     do_ob|
00002310  6a 33 0d 0d 02 25 20 20  20 20 20 20 20 20 53 54  |j3...%        ST|
00002320  52 20 20 20 20 20 72 32  2c 5b 72 34 2c 23 6f 62  |R     r2,[r4,#ob|
00002330  6a 5f 6e 61 6d 65 5d 0d  0d 0c 19 20 20 20 20 20  |j_name]....     |
00002340  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 30  |   MOV     r0,#0|
00002350  0d 0d 16 25 20 20 20 20  20 20 20 20 53 54 52 20  |...%        STR |
00002360  20 20 20 20 72 30 2c 5b  72 34 2c 23 6f 62 6a 5f  |    r0,[r4,#obj_|
00002370  6c 69 73 74 5d 0d 0d 20  21 20 20 20 20 20 20 20  |list].. !       |
00002380  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 26 30 31  | MOV     r0,#&01|
00002390  30 30 30 30 30 30 0d 0d  2a 1c 20 20 20 20 20 20  |000000..*.      |
000023a0  20 20 53 55 42 20 20 20  20 20 72 30 2c 72 30 2c  |  SUB     r0,r0,|
000023b0  23 31 0d 0d 34 21 20 20  20 20 20 20 20 20 a4 61  |#1..4!        .a|
000023c0  64 72 6c 28 31 34 2c 6c  6f 61 64 5f 63 6f 6c 6f  |drl(14,load_colo|
000023d0  75 72 29 0d 0d 3e 1c 20  20 20 20 20 20 20 20 53  |ur)..>.        S|
000023e0  54 52 20 20 20 20 20 72  30 2c 5b 72 31 34 5d 0d  |TR     r0,[r14].|
000023f0  0d 48 25 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.H%        LDR  |
00002400  20 20 20 72 30 2c 5b 72  34 2c 23 6f 62 6a 5f 6e  |   r0,[r4,#obj_n|
00002410  61 6d 65 5d 0d 0d 52 19  20 20 20 20 20 20 20 20  |ame]..R.        |
00002420  4d 4f 56 20 20 20 20 20  72 31 2c 72 34 0d 0d 5c  |MOV     r1,r4..\|
00002430  27 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |'        BL     |
00002440  20 61 64 64 5f 6b 65 79  77 6f 72 64 5f 74 6f 5f  | add_keyword_to_|
00002450  6c 69 73 74 0d 0d 66 1c  20 20 20 20 20 20 20 20  |list..f.        |
00002460  42 56 53 20 20 20 20 20  6c 6f 61 64 5f 65 72 72  |BVS     load_err|
00002470  0d 0d 70 20 20 20 20 20  20 20 20 20 42 20 20 20  |..p         B   |
00002480  20 20 20 20 67 65 74 6c  69 6e 65 5f 6c 6f 6f 70  |    getline_loop|
00002490  0d 0d 7a 11 2e 75 73 65  72 5f 6b 65 79 77 6f 72  |..z..user_keywor|
000024a0  64 0d 0d 84 22 20 20 20  20 20 20 20 20 4d 4f 56  |d..."        MOV|
000024b0  20 20 20 20 20 72 30 2c  23 73 75 62 6f 62 6a 5f  |     r0,#subobj_|
000024c0  72 65 71 0d 0d 8e 1a 20  20 20 20 20 20 20 20 42  |req....        B|
000024d0  4c 20 20 20 20 20 20 6d  61 6c 6c 6f 63 0d 0d 98  |L      malloc...|
000024e0  1c 20 20 20 20 20 20 20  20 42 56 53 20 20 20 20  |.        BVS    |
000024f0  20 6c 6f 61 64 5f 65 72  72 0d 0d a2 19 20 20 20  | load_err....   |
00002500  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 33 2c  |     MOV     r3,|
00002510  72 30 0d 0d ac 23 20 20  20 20 20 20 20 20 41 44  |r0...#        AD|
00002520  44 20 20 20 20 20 72 32  2c 72 34 2c 23 6f 62 6a  |D     r2,r4,#obj|
00002530  5f 6c 69 73 74 0d 0d b6  0a 2e 75 73 65 72 31 0d  |_list.....user1.|
00002540  0d c0 1b 20 20 20 20 20  20 20 20 4c 44 52 20 20  |...        LDR  |
00002550  20 20 20 72 30 2c 5b 72  32 5d 0d 0d ca 19 20 20  |   r0,[r2]....  |
00002560  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00002570  2c 23 30 0d 0d d4 26 20  20 20 20 20 20 20 20 41  |,#0...&        A|
00002580  44 44 4e 45 20 20 20 72  32 2c 72 30 2c 23 73 75  |DDNE   r2,r0,#su|
00002590  62 6f 62 6a 5f 6e 65 78  74 0d 0d de 19 20 20 20  |bobj_next....   |
000025a0  20 20 20 20 20 42 4e 45  20 20 20 20 20 75 73 65  |     BNE     use|
000025b0  72 31 0d 0d e8 1b 20 20  20 20 20 20 20 20 53 54  |r1....        ST|
000025c0  52 20 20 20 20 20 72 33  2c 5b 72 32 5d 0d 0d f2  |R     r3,[r2]...|
000025d0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000025e0  20 72 30 2c 23 30 0d 0d  fc 28 20 20 20 20 20 20  | r0,#0...(      |
000025f0  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 72 33  |  STR     r0,[r3|
00002600  2c 23 73 75 62 6f 62 6a  5f 6e 65 78 74 5d 0d 0e  |,#subobj_next]..|
00002610  06 28 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |.(        STR   |
00002620  20 20 72 31 2c 5b 72 33  2c 23 73 75 62 6f 62 6a  |  r1,[r3,#subobj|
00002630  5f 74 79 70 65 5d 0d 0e  10 19 20 20 20 20 20 20  |_type]....      |
00002640  20 20 4d 4f 56 20 20 20  20 20 72 32 2c 23 33 0d  |  MOV     r2,#3.|
00002650  0e 1a 28 20 20 20 20 20  20 20 20 41 44 44 20 20  |..(        ADD  |
00002660  20 20 20 72 31 2c 72 33  2c 23 73 75 62 6f 62 6a  |   r1,r3,#subobj|
00002670  5f 6f 66 66 73 65 74 0d  0e 24 1d 2e 75 73 65 72  |_offset..$..user|
00002680  32 20 20 42 4c 20 20 20  20 20 20 66 6e 5f 67 65  |2  BL      fn_ge|
00002690  74 6e 75 6d 0d 0e 2e 1e  20 20 20 20 20 20 20 20  |tnum....        |
000026a0  53 54 52 20 20 20 20 20  72 30 2c 5b 72 31 5d 2c  |STR     r0,[r1],|
000026b0  23 34 0d 0e 38 1c 20 20  20 20 20 20 20 20 53 55  |#4..8.        SU|
000026c0  42 53 20 20 20 20 72 32  2c 72 32 2c 23 31 0d 0e  |BS    r2,r2,#1..|
000026d0  42 19 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |B.        BNE   |
000026e0  20 20 75 73 65 72 32 0d  0e 4c 20 20 20 20 20 20  |  user2..L      |
000026f0  20 20 20 a4 61 64 72 6c  28 31 34 2c 6c 6f 61 64  |   .adrl(14,load|
00002700  5f 73 63 61 6c 65 29 0d  0e 56 1c 20 20 20 20 20  |_scale)..V.     |
00002710  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00002720  31 34 5d 0d 0e 60 1e 20  20 20 20 20 20 20 20 53  |14]..`.        S|
00002730  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |TMFD   (sp)!,{r0|
00002740  7d 0d 0e 6a 20 20 20 20  20 20 20 20 20 4c 44 52  |}..j         LDR|
00002750  20 20 20 20 20 72 30 2c  61 6e 67 5f 73 63 61 6c  |     r0,ang_scal|
00002760  65 0d 0e 74 1c 20 20 20  20 20 20 20 20 53 54 52  |e..t.        STR|
00002770  20 20 20 20 20 72 30 2c  5b 72 31 34 5d 0d 0e 7e  |     r0,[r14]..~|
00002780  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002790  20 72 32 2c 23 33 0d 0e  88 27 20 20 20 20 20 20  | r2,#3...'      |
000027a0  20 20 41 44 44 20 20 20  20 20 72 31 2c 72 33 2c  |  ADD     r1,r3,|
000027b0  23 73 75 62 6f 62 6a 5f  61 6e 67 6c 65 0d 0e 92  |#subobj_angle...|
000027c0  1d 2e 75 73 65 72 33 20  20 42 4c 20 20 20 20 20  |..user3  BL     |
000027d0  20 66 6e 5f 67 65 74 6e  75 6d 0d 0e 9c 1e 20 20  | fn_getnum....  |
000027e0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 30  |      STR     r0|
000027f0  2c 5b 72 31 5d 2c 23 34  0d 0e a6 1c 20 20 20 20  |,[r1],#4....    |
00002800  20 20 20 20 53 55 42 53  20 20 20 20 72 32 2c 72  |    SUBS    r2,r|
00002810  32 2c 23 31 0d 0e b0 19  20 20 20 20 20 20 20 20  |2,#1....        |
00002820  42 4e 45 20 20 20 20 20  75 73 65 72 33 0d 0e ba  |BNE     user3...|
00002830  1e 20 20 20 20 20 20 20  20 4c 44 4d 46 44 20 20  |.        LDMFD  |
00002840  20 28 73 70 29 21 2c 7b  72 30 7d 0d 0e c4 20 20  | (sp)!,{r0}...  |
00002850  20 20 20 20 20 20 20 a4  61 64 72 6c 28 31 34 2c  |       .adrl(14,|
00002860  6c 6f 61 64 5f 73 63 61  6c 65 29 0d 0e ce 1c 20  |load_scale).... |
00002870  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00002880  30 2c 5b 72 31 34 5d 0d  0e d8 1d 20 20 20 20 20  |0,[r14]....     |
00002890  20 20 20 42 4c 20 20 20  20 20 20 66 6e 5f 67 65  |   BL      fn_ge|
000028a0  74 70 61 72 0d 0e e2 1a  20 20 20 20 20 20 20 20  |tpar....        |
000028b0  4d 4f 56 20 20 20 20 20  72 30 2c 72 31 31 0d 0e  |MOV     r0,r11..|
000028c0  ec 24 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |.$        BL    |
000028d0  20 20 69 64 65 6e 74 69  66 79 5f 6b 65 79 77 6f  |  identify_keywo|
000028e0  72 64 0d 0e f6 19 20 20  20 20 20 20 20 20 43 4d  |rd....        CM|
000028f0  50 20 20 20 20 20 72 30  2c 23 35 0d 0f 00 1e 20  |P     r0,#5.... |
00002900  20 20 20 20 20 20 20 ec  51 20 20 20 72 30 2c 23  |       .Q   r0,#|
00002910  62 69 74 5f 6d 65 72 67  65 0d 0f 0a 19 20 20 20  |bit_merge....   |
00002920  20 20 20 20 20 4d 4f 56  4e 45 20 20 20 72 30 2c  |     MOVNE   r0,|
00002930  23 30 0d 0f 14 29 20 20  20 20 20 20 20 20 53 54  |#0...)        ST|
00002940  52 20 20 20 20 20 72 30  2c 5b 72 33 2c 23 73 75  |R     r0,[r3,#su|
00002950  62 6f 62 6a 5f 66 6c 61  67 73 5d 0d 0f 1e 20 20  |bobj_flags]...  |
00002960  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 67  |       B       g|
00002970  65 74 6c 69 6e 65 5f 6c  6f 6f 70 0d 0f 28 04 0d  |etline_loop..(..|
00002980  0f 32 0e 2e 61 6e 67 5f  73 63 61 6c 65 0d 0f 3c  |.2..ang_scale..<|
00002990  1e 20 20 20 20 20 20 20  20 44 43 44 20 20 20 20  |.        DCD    |
000029a0  20 26 31 30 30 30 30 2f  33 36 30 0d 0f 46 04 0d  | &10000/360..F..|
000029b0  0f 50 1a 2e 69 73 5f 65  6f 66 20 4d 4f 56 20 20  |.P..is_eof MOV  |
000029c0  20 20 20 72 30 2c 72 31  31 0d 0f 5a 18 20 20 20  |   r0,r11..Z.   |
000029d0  20 20 20 20 20 42 4c 20  20 20 20 20 20 66 72 65  |     BL      fre|
000029e0  65 0d 0f 64 1b 20 20 20  20 20 20 20 20 4d 4f 56  |e..d.        MOV|
000029f0  20 20 20 20 20 72 30 2c  23 26 30 30 0d 0f 6e 1a  |     r0,#&00..n.|
00002a00  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002a10  72 31 2c 72 31 30 0d 0f  78 1e 20 20 20 20 20 20  |r1,r10..x.      |
00002a20  20 20 53 57 49 20 20 20  20 20 22 58 4f 53 5f 46  |  SWI     "XOS_F|
00002a30  69 6e 64 22 0d 0f 82 25  20 20 20 20 20 20 20 20  |ind"...%        |
00002a40  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00002a50  30 2d 72 31 31 2c 70 63  7d 0d 0f 8c 0d 2e 6c 6f  |0-r11,pc}.....lo|
00002a60  61 64 5f 65 72 72 0d 0f  96 1b 20 20 20 20 20 20  |ad_err....      |
00002a70  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 73 70  |  STR     r0,[sp|
00002a80  5d 0d 0f a0 1a 20 20 20  20 20 20 20 20 4d 4f 56  |]....        MOV|
00002a90  20 20 20 20 20 72 30 2c  72 31 31 0d 0f aa 18 20  |     r0,r11.... |
00002aa0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 66  |       BL      f|
00002ab0  72 65 65 0d 0f b4 1b 20  20 20 20 20 20 20 20 4d  |ree....        M|
00002ac0  4f 56 20 20 20 20 20 72  30 2c 23 26 30 30 0d 0f  |OV     r0,#&00..|
00002ad0  be 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00002ae0  20 20 72 31 2c 72 31 30  0d 0f c8 1e 20 20 20 20  |  r1,r10....    |
00002af0  20 20 20 20 53 57 49 20  20 20 20 20 22 58 4f 53  |    SWI     "XOS|
00002b00  5f 46 69 6e 64 22 0d 0f  d2 27 20 20 20 20 20 20  |_Find"...'      |
00002b10  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
00002b20  7b 72 30 2d 72 31 31 2c  6c 69 6e 6b 7d 0d 0f dc  |{r0-r11,link}...|
00002b30  21 20 20 20 20 20 20 20  20 84 52 53 20 20 20 20  |!        .RS    |
00002b40  70 63 2c 6c 69 6e 6b 2c  23 31 3c 3c 32 38 0d 0f  |pc,link,#1<<28..|
00002b50  e6 04 0d 0f f0 18 2e 65  72 72 5f 75 6e 6b 6e 6f  |.......err_unkno|
00002b60  77 6e 5f 6b 65 79 77 6f  72 64 0d 0f fa 15 20 20  |wn_keyword....  |
00002b70  20 20 20 20 20 20 44 43  44 20 20 20 20 20 30 0d  |      DCD     0.|
00002b80  10 04 21 20 20 20 20 20  20 20 20 a4 7a 28 22 55  |..!        .z("U|
00002b90  6e 6b 6e 6f 77 6e 20 6b  65 79 77 6f 72 64 22 29  |nknown keyword")|
00002ba0  0d 10 0e 04 0d 10 18 16  2e 65 72 72 5f 64 65 66  |.........err_def|
00002bb0  69 6e 65 64 5f 74 77 69  63 65 0d 10 22 15 20 20  |ined_twice..".  |
00002bc0  20 20 20 20 20 20 44 43  44 20 20 20 20 20 30 0d  |      DCD     0.|
00002bd0  10 2c 27 20 20 20 20 20  20 20 20 a4 7a 28 22 4b  |.,'        .z("K|
00002be0  65 79 77 6f 72 64 20 64  65 66 69 6e 65 64 20 74  |eyword defined t|
00002bf0  77 69 63 65 22 29 0d 10  36 04 0d 10 40 0e 2e 66  |wice")..6...@..f|
00002c00  6e 5f 67 65 74 6e 75 6d  0d 10 4a 27 20 20 20 20  |n_getnum..J'    |
00002c10  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00002c20  21 2c 7b 72 31 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r1-r11,link}.|
00002c30  10 54 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |.T.        BL   |
00002c40  20 20 20 66 6e 5f 67 65  74 70 61 72 0d 10 5e 1a  |   fn_getpar..^.|
00002c50  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002c60  72 34 2c 72 31 31 0d 10  68 1b 20 20 20 20 20 20  |r4,r11..h.      |
00002c70  20 20 4c 44 52 42 20 20  20 20 72 30 2c 5b 72 34  |  LDRB    r0,[r4|
00002c80  5d 0d 10 72 1c 20 20 20  20 20 20 20 20 43 4d 50  |]..r.        CMP|
00002c90  20 20 20 20 20 72 30 2c  23 97 22 2d 22 0d 10 7c  |     r0,#."-"..||
00002ca0  16 20 20 20 20 20 20 20  20 ec 51 20 20 20 72 36  |.        .Q   r6|
00002cb0  2c 23 31 0d 10 86 1c 20  20 20 20 20 20 20 20 41  |,#1....        A|
00002cc0  44 44 45 51 20 20 20 72  34 2c 72 34 2c 23 31 0d  |DDEQ   r4,r4,#1.|
00002cd0  10 90 19 20 20 20 20 20  20 20 20 4d 4f 56 4e 45  |...        MOVNE|
00002ce0  20 20 20 72 36 2c 23 30  0d 10 9a 19 20 20 20 20  |   r6,#0....    |
00002cf0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 37 2c 23  |    MOV     r7,#|
00002d00  30 0d 10 a4 19 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
00002d10  20 20 20 20 20 72 35 2c  23 30 0d 10 ae 1a 20 20  |     r5,#0....  |
00002d20  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 33  |      MOV     r3|
00002d30  2c 23 31 30 0d 10 b8 13  2e 66 6e 5f 67 65 74 6e  |,#10.....fn_getn|
00002d40  75 6d 5f 6c 6f 6f 70 0d  10 c2 1e 20 20 20 20 20  |um_loop....     |
00002d50  20 20 20 4c 44 52 42 20  20 20 20 72 30 2c 5b 72  |   LDRB    r0,[r|
00002d60  34 5d 2c 23 31 0d 10 cc  1c 20 20 20 20 20 20 20  |4],#1....       |
00002d70  20 43 4d 50 20 20 20 20  20 72 30 2c 23 97 22 2e  | CMP     r0,#.".|
00002d80  22 0d 10 d6 16 20 20 20  20 20 20 20 20 ec 51 20  |"....        .Q |
00002d90  20 20 72 35 2c 23 31 0d  10 e0 22 20 20 20 20 20  |  r5,#1..."     |
00002da0  20 20 20 42 45 51 20 20  20 20 20 66 6e 5f 67 65  |   BEQ     fn_ge|
00002db0  74 6e 75 6d 5f 6c 6f 6f  70 0d 10 ea 1c 20 20 20  |tnum_loop....   |
00002dc0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00002dd0  23 97 22 30 22 0d 10 f4  1b 20 20 20 20 20 20 20  |#."0"....       |
00002de0  20 42 4c 54 20 20 20 20  20 67 6f 74 5f 6e 75 6d  | BLT     got_num|
00002df0  0d 10 fe 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00002e00  20 20 20 20 72 30 2c 23  97 22 39 22 0d 11 08 1b  |    r0,#."9"....|
00002e10  20 20 20 20 20 20 20 20  42 47 54 20 20 20 20 20  |        BGT     |
00002e20  67 6f 74 5f 6e 75 6d 0d  11 12 1f 20 20 20 20 20  |got_num....     |
00002e30  20 20 20 53 55 42 20 20  20 20 20 72 30 2c 72 30  |   SUB     r0,r0|
00002e40  2c 23 97 22 30 22 0d 11  1c 1f 20 20 20 20 20 20  |,#."0"....      |
00002e50  20 20 4d 4c 41 20 20 20  20 20 72 37 2c 72 33 2c  |  MLA     r7,r3,|
00002e60  72 37 2c 72 30 0d 11 26  19 20 20 20 20 20 20 20  |r7,r0..&.       |
00002e70  20 43 4d 50 20 20 20 20  20 72 35 2c 23 30 0d 11  | CMP     r5,#0..|
00002e80  30 1c 20 20 20 20 20 20  20 20 4d 55 4c 4e 45 20  |0.        MULNE |
00002e90  20 20 72 35 2c 72 33 2c  72 35 0d 11 3a 22 20 20  |  r5,r3,r5..:"  |
00002ea0  20 20 20 20 20 20 42 20  20 20 20 20 20 20 66 6e  |      B       fn|
00002eb0  5f 67 65 74 6e 75 6d 5f  6c 6f 6f 70 0d 11 44 0c  |_getnum_loop..D.|
00002ec0  2e 67 6f 74 5f 6e 75 6d  0d 11 4e 19 20 20 20 20  |.got_num..N.    |
00002ed0  20 20 20 20 43 4d 50 20  20 20 20 20 72 36 2c 23  |    CMP     r6,#|
00002ee0  30 0d 11 58 1c 20 20 20  20 20 20 20 20 52 53 42  |0..X.        RSB|
00002ef0  4e 45 20 20 20 72 37 2c  72 37 2c 23 30 0d 11 62  |NE   r7,r7,#0..b|
00002f00  20 20 20 20 20 20 20 20  20 a4 61 64 72 6c 28 31  |         .adrl(1|
00002f10  34 2c 6c 6f 61 64 5f 73  63 61 6c 65 29 0d 11 6c  |4,load_scale)..l|
00002f20  1d 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00002f30  20 72 31 34 2c 5b 72 31  34 5d 0d 11 76 1d 20 20  | r14,[r14]..v.  |
00002f40  20 20 20 20 20 20 4d 55  4c 20 20 20 20 20 72 30  |      MUL     r0|
00002f50  2c 72 37 2c 72 31 34 0d  11 80 19 20 20 20 20 20  |,r7,r14....     |
00002f60  20 20 20 43 4d 50 20 20  20 20 20 72 35 2c 23 30  |   CMP     r5,#0|
00002f70  0d 11 8a 25 20 20 20 20  20 20 20 20 4c 44 4d 45  |...%        LDME|
00002f80  51 46 44 20 28 73 70 29  21 2c 7b 72 31 2d 72 31  |QFD (sp)!,{r1-r1|
00002f90  31 2c 70 63 7d 0d 11 94  19 20 20 20 20 20 20 20  |1,pc}....       |
00002fa0  20 4d 4f 56 20 20 20 20  20 72 31 2c 72 35 0d 11  | MOV     r1,r5..|
00002fb0  9e 1a 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
00002fc0  20 20 64 69 76 69 64 65  0d 11 a8 19 20 20 20 20  |  divide....    |
00002fd0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 72  |    MOV     r0,r|
00002fe0  32 0d 11 b2 25 20 20 20  20 20 20 20 20 4c 44 4d  |2...%        LDM|
00002ff0  46 44 20 20 20 28 73 70  29 21 2c 7b 72 31 2d 72  |FD   (sp)!,{r1-r|
00003000  31 31 2c 70 63 7d 0d 11  bc 04 0d 11 c6 0e 2e 66  |11,pc}.........f|
00003010  6e 5f 67 65 74 70 61 72  0d 11 d0 27 20 20 20 20  |n_getpar...'    |
00003020  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00003030  21 2c 7b 72 30 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r0-r11,link}.|
00003040  11 da 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00003050  20 20 20 72 34 2c 72 31  31 0d 11 e4 20 20 20 20  |   r4,r11...    |
00003060  20 20 20 20 20 41 44 44  20 20 20 20 20 72 35 2c  |     ADD     r5,|
00003070  72 31 31 2c 23 26 31 30  30 0d 11 ee 13 2e 66 6e  |r11,#&100.....fn|
00003080  5f 67 65 74 70 61 72 5f  6c 6f 6f 70 0d 11 f8 1e  |_getpar_loop....|
00003090  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
000030a0  72 30 2c 5b 72 35 5d 2c  23 31 0d 12 02 1c 20 20  |r0,[r5],#1....  |
000030b0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
000030c0  2c 23 97 22 41 22 0d 12  0c 1a 20 20 20 20 20 20  |,#."A"....      |
000030d0  20 20 42 4c 54 20 20 20  20 20 6e 6f 74 5f 75 63  |  BLT     not_uc|
000030e0  0d 12 16 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
000030f0  20 20 20 20 72 30 2c 23  97 22 5a 22 0d 12 20 24  |    r0,#."Z".. $|
00003100  20 20 20 20 20 20 20 20  41 44 44 4c 45 20 20 20  |        ADDLE   |
00003110  72 30 2c 72 30 2c 23 97  22 61 22 2d 97 22 41 22  |r0,r0,#."a"-."A"|
00003120  0d 12 2a 0b 2e 6e 6f 74  5f 75 63 0d 12 34 1c 20  |..*..not_uc..4. |
00003130  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00003140  30 2c 23 97 22 2c 22 0d  12 3e 19 20 20 20 20 20  |0,#.","..>.     |
00003150  20 20 20 ec 51 20 20 20  72 30 2c 23 97 22 20 22  |   .Q   r0,#." "|
00003160  0d 12 48 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |..H.        CMP |
00003170  20 20 20 20 72 30 2c 23  97 22 20 22 0d 12 52 19  |    r0,#." "..R.|
00003180  20 20 20 20 20 20 20 20  4d 4f 56 4c 45 20 20 20  |        MOVLE   |
00003190  72 30 2c 23 30 0d 12 5c  1e 20 20 20 20 20 20 20  |r0,#0..\.       |
000031a0  20 53 54 52 42 20 20 20  20 72 30 2c 5b 72 34 5d  | STRB    r0,[r4]|
000031b0  2c 23 31 0d 12 66 22 20  20 20 20 20 20 20 20 42  |,#1..f"        B|
000031c0  47 54 20 20 20 20 20 66  6e 5f 67 65 74 70 61 72  |GT     fn_getpar|
000031d0  5f 6c 6f 6f 70 0d 12 70  20 20 20 20 20 20 20 20  |_loop..p        |
000031e0  20 41 44 44 20 20 20 20  20 72 31 2c 72 31 31 2c  | ADD     r1,r11,|
000031f0  23 26 31 30 30 0d 12 7a  19 20 20 20 20 20 20 20  |#&100..z.       |
00003200  20 4d 4f 56 20 20 20 20  20 72 30 2c 72 35 0d 12  | MOV     r0,r5..|
00003210  84 1c 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
00003220  20 20 66 6e 5f 73 74 72  69 70 0d 12 8e 25 20 20  |  fn_strip...%  |
00003230  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00003240  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00003250  12 98 04 0d 12 a2 0f 2e  66 6e 5f 67 65 74 6c 69  |........fn_getli|
00003260  6e 65 0d 12 ac 27 20 20  20 20 20 20 20 20 53 54  |ne...'        ST|
00003270  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00003280  72 31 31 2c 6c 69 6e 6b  7d 0d 12 b6 19 20 20 20  |r11,link}....   |
00003290  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 35 2c  |     MOV     r5,|
000032a0  72 30 0d 12 c0 14 2e 66  6e 5f 67 65 74 6c 69 6e  |r0.....fn_getlin|
000032b0  65 5f 6c 6f 6f 70 0d 12  ca 1a 20 20 20 20 20 20  |e_loop....      |
000032c0  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 72 31 30  |  MOV     r1,r10|
000032d0  0d 12 d4 1e 20 20 20 20  20 20 20 20 53 57 49 20  |....        SWI |
000032e0  20 20 20 20 22 58 4f 53  5f 42 47 65 74 22 0d 12  |    "XOS_BGet"..|
000032f0  de 1c 20 20 20 20 20 20  20 20 42 43 53 20 20 20  |..        BCS   |
00003300  20 20 67 6f 74 5f 6c 69  6e 65 0d 12 e8 1a 20 20  |  got_line....  |
00003310  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00003320  2c 23 33 32 0d 12 f2 1e  20 20 20 20 20 20 20 20  |,#32....        |
00003330  53 54 52 47 45 42 20 20  72 30 2c 5b 72 35 5d 2c  |STRGEB  r0,[r5],|
00003340  23 31 0d 12 fc 23 20 20  20 20 20 20 20 20 42 47  |#1...#        BG|
00003350  45 20 20 20 20 20 66 6e  5f 67 65 74 6c 69 6e 65  |E     fn_getline|
00003360  5f 6c 6f 6f 70 0d 13 06  0d 2e 67 6f 74 5f 6c 69  |_loop.....got_li|
00003370  6e 65 0d 13 10 19 20 20  20 20 20 20 20 20 4d 4f  |ne....        MO|
00003380  56 20 20 20 20 20 72 30  2c 23 30 0d 13 1a 1b 20  |V     r0,#0.... |
00003390  20 20 20 20 20 20 20 53  54 52 42 20 20 20 20 72  |       STRB    r|
000033a0  30 2c 5b 72 35 5d 0d 13  24 25 20 20 20 20 20 20  |0,[r5]..$%      |
000033b0  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
000033c0  7b 72 30 2d 72 31 31 2c  70 63 7d 0d 13 2e 04 0d  |{r0-r11,pc}.....|
000033d0  13 38 0d 2e 66 6e 5f 73  74 72 69 70 0d 13 42 27  |.8..fn_strip..B'|
000033e0  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
000033f0  28 73 70 29 21 2c 7b 72  30 2d 72 31 31 2c 6c 69  |(sp)!,{r0-r11,li|
00003400  6e 6b 7d 0d 13 4c 1c 2e  73 74 72 69 70 31 20 4c  |nk}..L..strip1 L|
00003410  44 52 42 20 20 20 20 72  31 34 2c 5b 72 30 5d 0d  |DRB    r14,[r0].|
00003420  13 56 1d 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.V.        CMP  |
00003430  20 20 20 72 31 34 2c 23  97 22 20 22 0d 13 60 1c  |   r14,#." "..`.|
00003440  20 20 20 20 20 20 20 20  41 44 44 45 51 20 20 20  |        ADDEQ   |
00003450  72 30 2c 72 30 2c 23 31  0d 13 6a 1a 20 20 20 20  |r0,r0,#1..j.    |
00003460  20 20 20 20 42 45 51 20  20 20 20 20 73 74 72 69  |    BEQ     stri|
00003470  70 31 0d 13 74 19 20 20  20 20 20 20 20 20 4d 4f  |p1..t.        MO|
00003480  56 20 20 20 20 20 72 32  2c 72 31 0d 13 7e 1f 2e  |V     r2,r1..~..|
00003490  73 74 72 69 70 32 20 4c  44 52 42 20 20 20 20 72  |strip2 LDRB    r|
000034a0  31 34 2c 5b 72 30 5d 2c  23 31 0d 13 88 1f 20 20  |14,[r0],#1....  |
000034b0  20 20 20 20 20 20 53 54  52 42 20 20 20 20 72 31  |      STRB    r1|
000034c0  34 2c 5b 72 31 5d 2c 23  31 0d 13 92 1d 20 20 20  |4,[r1],#1....   |
000034d0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 34  |     CMP     r14|
000034e0  2c 23 97 22 20 22 0d 13  9c 19 20 20 20 20 20 20  |,#." "....      |
000034f0  20 20 4d 4f 56 4e 45 20  20 20 72 32 2c 72 31 0d  |  MOVNE   r2,r1.|
00003500  13 a6 1b 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00003510  20 20 20 72 31 34 2c 23  33 32 0d 13 b0 1a 20 20  |   r14,#32....  |
00003520  20 20 20 20 20 20 42 47  45 20 20 20 20 20 73 74  |      BGE     st|
00003530  72 69 70 32 0d 13 ba 1a  20 20 20 20 20 20 20 20  |rip2....        |
00003540  4d 4f 56 20 20 20 20 20  72 31 34 2c 23 30 0d 13  |MOV     r14,#0..|
00003550  c4 1c 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |..        STRB  |
00003560  20 20 72 31 34 2c 5b 72  32 5d 0d 13 ce 25 20 20  |  r14,[r2]...%  |
00003570  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00003580  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00003590  13 d8 04 0d 13 e2 15 2e  69 64 65 6e 74 69 66 79  |........identify|
000035a0  5f 6b 65 79 77 6f 72 64  0d 13 ec 27 20 20 20 20  |_keyword...'    |
000035b0  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
000035c0  21 2c 7b 72 32 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r2-r11,link}.|
000035d0  13 f6 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000035e0  20 20 20 72 37 2c 72 30  0d 14 00 19 20 20 20 20  |   r7,r0....    |
000035f0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 34 2c 23  |    MOV     r4,#|
00003600  30 0d 14 0a 19 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
00003610  20 20 20 20 20 72 35 2c  72 38 0d 14 14 0c 2e 69  |     r5,r8.....i|
00003620  64 5f 6c 6f 6f 70 0d 14  1e 19 20 20 20 20 20 20  |d_loop....      |
00003630  20 20 43 4d 50 20 20 20  20 20 72 35 2c 23 30 0d  |  CMP     r5,#0.|
00003640  14 28 19 20 20 20 20 20  20 20 20 4d 56 4e 45 51  |.(.        MVNEQ|
00003650  20 20 20 72 30 2c 23 30  0d 14 32 16 20 20 20 20  |   r0,#0..2.    |
00003660  20 20 20 20 ec 51 20 20  20 72 31 2c 23 30 0d 14  |    .Q   r1,#0..|
00003670  3c 25 20 20 20 20 20 20  20 20 4c 44 4d 45 51 46  |<%        LDMEQF|
00003680  44 20 28 73 70 29 21 2c  7b 72 32 2d 72 31 31 2c  |D (sp)!,{r2-r11,|
00003690  70 63 7d 0d 14 46 29 20  20 20 20 20 20 20 20 4c  |pc}..F)        L|
000036a0  44 52 20 20 20 20 20 72  32 2c 5b 72 35 2c 23 6b  |DR     r2,[r5,#k|
000036b0  65 79 77 6f 72 64 5f 6e  61 6d 65 5d 0d 14 50 19  |eyword_name]..P.|
000036c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000036d0  72 33 2c 72 37 0d 14 5a  0f 2e 69 64 5f 63 6f 6d  |r3,r7..Z..id_com|
000036e0  70 61 72 65 0d 14 64 1e  20 20 20 20 20 20 20 20  |pare..d.        |
000036f0  4c 44 52 42 20 20 20 20  72 30 2c 5b 72 32 5d 2c  |LDRB    r0,[r2],|
00003700  23 31 0d 14 6e 1e 20 20  20 20 20 20 20 20 4c 44  |#1..n.        LD|
00003710  52 42 20 20 20 20 72 31  2c 5b 72 33 5d 2c 23 31  |RB    r1,[r3],#1|
00003720  0d 14 78 19 20 20 20 20  20 20 20 20 43 4d 50 20  |..x.        CMP |
00003730  20 20 20 20 72 30 2c 72  31 0d 14 82 1b 20 20 20  |    r0,r1....   |
00003740  20 20 20 20 20 42 4e 45  20 20 20 20 20 69 64 5f  |     BNE     id_|
00003750  64 69 66 66 0d 14 8c 1c  20 20 20 20 20 20 20 20  |diff....        |
00003760  43 4d 50 20 20 20 20 20  72 30 2c 23 97 22 3a 22  |CMP     r0,#.":"|
00003770  0d 14 96 1e 20 20 20 20  20 20 20 20 42 4e 45 20  |....        BNE |
00003780  20 20 20 20 69 64 5f 63  6f 6d 70 61 72 65 0d 14  |    id_compare..|
00003790  a0 0f 2e 69 64 5f 6d 61  74 63 68 65 73 0d 14 aa  |...id_matches...|
000037a0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000037b0  20 72 30 2c 72 34 0d 14  b4 29 20 20 20 20 20 20  | r0,r4...)      |
000037c0  20 20 4c 44 52 20 20 20  20 20 72 31 2c 5b 72 35  |  LDR     r1,[r5|
000037d0  2c 23 6b 65 79 77 6f 72  64 5f 61 64 64 72 5d 0d  |,#keyword_addr].|
000037e0  14 be 25 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |..%        LDMFD|
000037f0  20 20 20 28 73 70 29 21  2c 7b 72 32 2d 72 31 31  |   (sp)!,{r2-r11|
00003800  2c 70 63 7d 0d 14 c8 0c  2e 69 64 5f 64 69 66 66  |,pc}.....id_diff|
00003810  0d 14 d2 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00003820  20 20 20 20 72 30 2c 23  97 22 3a 22 0d 14 dc 1b  |    r0,#.":"....|
00003830  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00003840  6e 65 78 74 5f 69 64 0d  14 e6 1c 20 20 20 20 20  |next_id....     |
00003850  20 20 20 43 4d 50 20 20  20 20 20 72 31 2c 23 97  |   CMP     r1,#.|
00003860  22 20 22 0d 14 f0 1e 20  20 20 20 20 20 20 20 42  |" "....        B|
00003870  4c 45 20 20 20 20 20 69  64 5f 6d 61 74 63 68 65  |LE     id_matche|
00003880  73 0d 14 fa 0c 2e 6e 65  78 74 5f 69 64 0d 15 04  |s.....next_id...|
00003890  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
000038a0  20 72 34 2c 72 34 2c 23  31 0d 15 0e 29 20 20 20  | r4,r4,#1...)   |
000038b0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 35 2c  |     LDR     r5,|
000038c0  5b 72 35 2c 23 6b 65 79  77 6f 72 64 5f 6e 65 78  |[r5,#keyword_nex|
000038d0  74 5d 0d 15 18 1b 20 20  20 20 20 20 20 20 42 20  |t]....        B |
000038e0  20 20 20 20 20 20 69 64  5f 6c 6f 6f 70 0d 15 22  |      id_loop.."|
000038f0  04 0d 15 2c 12 2e 64 65  66 61 75 6c 74 5f 73 63  |...,..default_sc|
00003900  61 6c 65 0d 15 36 19 20  20 20 20 20 20 20 20 44  |ale..6.        D|
00003910  43 44 20 20 20 20 20 31  30 30 30 30 0d 15 40 05  |CD     10000..@.|
00003920  5d 0d 15 4a 06 3d 30 0d  15 54 05 3a 0d 15 5e 0c  |]..J.=0..T.:..^.|
00003930  dd 20 a4 7a 28 7a 24 29  0d 15 68 0e 5b 4f 50 54  |. .z(z$)..h.[OPT|
00003940  20 70 61 73 73 25 0d 15  72 16 20 20 20 20 20 20  | pass%..r.      |
00003950  20 20 45 51 55 53 20 20  20 20 7a 24 0d 15 7c 15  |  EQUS    z$..|.|
00003960  20 20 20 20 20 20 20 20  45 51 55 42 20 20 20 20  |        EQUB    |
00003970  30 0d 15 86 11 20 20 20  20 20 20 20 20 41 4c 49  |0....        ALI|
00003980  47 4e 0d 15 90 05 5d 0d  15 9a 06 3d 30 0d ff     |GN....]....=0..|
0000398f