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

)        STR     r1,[r7,#keyword_addr]
        MOV     r2,#0

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

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

        BIC     r0,r0,#3

        BL      malloc

        BVS     load_err

         MOV     r2,r0

*        MOV     r1,r11

4.do_obj3

>        LDRB    r14,[r1],#1

H        CMP     r14,#�" "

R        MOVLE   r14,#0

\        STRB    r14,[r0],#1

f        BGT     do_obj3

p%        STR     r2,[r4,#obj_name]

z        MOV     r0,#0

�%        STR     r0,[r4,#obj_list]

�!        MOV     r0,#&01000000

�        SUB     r0,r0,#1

�!        �adrl(14,load_colour)

�        STR     r0,[r14]

�

�         �adrl(14,load_table)

�        LDMIA   r14,{r0-r2}

�        CMP     r0,#0

�!        BEQ     no_load_table

�        CMP     r2,r1

�#        ADRGE   r0,err_too_many

�        BGE     load_err
%        STR     r4,[r0,r2,LSL #2]
        ADD     r2,r2,#1
        STR     r2,[r14,#8]
$.no_load_table
.
8%        LDR     r0,[r4,#obj_name]
B        MOV     r1,r4
L'        BL      add_keyword_to_list
V        BVS     load_err
`         B       getline_loop
j.user_keyword
t"        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
(        SUBS    r2,r2,#1
2        BNE     user2
<         �adrl(14,load_scale)
F        LDR     r0,[r14]
P        STMFD   (sp)!,{r0}
Z         LDR     r0,ang_scale
d        STR     r0,[r14]
n        MOV     r2,#3
x'        ADD     r1,r3,#subobj_angle
�.user3  BL      fn_getnum
�        STR     r0,[r1],#4
�        SUBS    r2,r2,#1
�        BNE     user3
�        LDMFD   (sp)!,{r0}
�         �adrl(14,load_scale)
�        STR     r0,[r14]
�
�        MOV     r2,#0
�
.user4
�        BL      fn_getpar
�        MOV     r0,r11
�$        BL      identify_keyword
        CMP     r0,#5
#        �REQ   r2,r2,#bit_merge
        BEQ     user4
"        CMP     r0,#6
,$        �REQ   r2,r2,#bit_closed
6        BEQ     user4
@)        STR     r2,[r3,#subobj_flags]
J         B       getline_loop
T
^.ang_scale
h        DCD     &10000/360
r
|.is_eof MOV     r0,r11
�        BL      free
�        MOV     r0,#&00
�        MOV     r1,r10
�        SWI     "XOS_Find"
�%        LDMFD   (sp)!,{r0-r11,pc}
�
.load_err
�        STR     r0,[sp]
�        MOV     r0,r11
�        BL      free
�        MOV     r0,#&00
�        MOV     r1,r10
�        SWI     "XOS_Find"
�'        LDMFD   (sp)!,{r0-r11,link}
!        �RS    pc,link,#1<<28

.err_unknown_keyword
&        DCD     0
0!        �z("Unknown keyword")
:
D.err_defined_twice
N        DCD     0
X'        �z("Keyword defined twice")
b
l.err_too_many
v        DCD     0
�"        �z("Too many objects")
�
�.fn_getnum
�'        STMFD   (sp)!,{r1-r11,link}
�        BL      fn_getpar
�        MOV     r4,r11
�        LDRB    r0,[r4]
�        CMP     r0,#�"-"
�        �Q   r6,#1
�        ADDEQ   r4,r4,#1
�        MOVNE   r6,#0
�        MOV     r7,#0
�        MOV     r5,#0
        MOV     r3,#10
.fn_getnum_loop
        LDRB    r0,[r4],#1
         CMP     r0,#�"."
*        �Q   r5,#1
4"        BEQ     fn_getnum_loop
>        CMP     r0,#�"0"
H        BLT     got_num
R        CMP     r0,#�"9"
\        BGT     got_num
f        SUB     r0,r0,#�"0"
p        MLA     r7,r3,r7,r0
z        CMP     r5,#0
�        MULNE   r5,r3,r5
�"        B       fn_getnum_loop
�.got_num
�        CMP     r6,#0
�        RSBNE   r7,r7,#0
�         �adrl(14,load_scale)
�        LDR     r14,[r14]
�        MUL     r0,r7,r14
�        CMP     r5,#0
�%        LDMEQFD (sp)!,{r1-r11,pc}
�        MOV     r1,r5
�        BL      divide
�        MOV     r0,r2
%        LDMFD   (sp)!,{r1-r11,pc}

.fn_getpar
$'        STMFD   (sp)!,{r0-r11,link}
.        MOV     r4,r11
8         ADD     r5,r11,#&100
B.fn_getpar_loop
L        LDRB    r0,[r5],#1
V        CMP     r0,#�"A"
`        BLT     not_uc
j        CMP     r0,#�"Z"
t$        ADDLE   r0,r0,#�"a"-�"A"
~.not_uc
�        CMP     r0,#�","
�        �Q   r0,#�" "
�        CMP     r0,#�" "
�        MOVLE   r0,#0
�        STRB    r0,[r4],#1
�"        BGT     fn_getpar_loop
�         ADD     r1,r11,#&100
�        MOV     r0,r5
�        BL      fn_strip
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�.fn_getline
'        STMFD   (sp)!,{r0-r11,link}

        MOV     r5,r0
.fn_getline_loop
        MOV     r1,r10
(        SWI     "XOS_BGet"
2        BCS     got_line
<        CMP     r0,#32
F        STRGEB  r0,[r5],#1
P#        BGE     fn_getline_loop
Z
.got_line
d        MOV     r0,#0
n        STRB    r0,[r5]
x%        LDMFD   (sp)!,{r0-r11,pc}
�
�
.fn_strip
�'        STMFD   (sp)!,{r0-r11,link}
�.strip1 LDRB    r14,[r0]
�        CMP     r14,#�" "
�        ADDEQ   r0,r0,#1
�        BEQ     strip1
�        MOV     r2,r1
�.strip2 LDRB    r14,[r0],#1
�        STRB    r14,[r1],#1
�        CMP     r14,#�" "
�        MOVNE   r2,r1
�        CMP     r14,#32
        BGE     strip2
        MOV     r14,#0
        STRB    r14,[r2]
"%        LDMFD   (sp)!,{r0-r11,pc}
,
6.identify_keyword
@'        STMFD   (sp)!,{r2-r11,link}
J        MOV     r7,r0
T        MOV     r4,#0
^        MOV     r5,r8
h.id_loop
r        CMP     r5,#0
|        MVNEQ   r0,#0
�        �Q   r1,#0
�%        LDMEQFD (sp)!,{r2-r11,pc}
�)        LDR     r2,[r5,#keyword_name]
�        MOV     r3,r7
�.id_compare
�        LDRB    r0,[r2],#1
�        LDRB    r1,[r3],#1
�        CMP     r0,r1
�        BNE     id_diff
�        CMP     r0,#�":"
�        BNE     id_compare
�.id_matches
�        MOV     r0,r4
)        LDR     r1,[r5,#keyword_addr]
%        LDMFD   (sp)!,{r2-r11,pc}
.id_diff
&        CMP     r0,#�":"
0        BNE     next_id
:        CMP     r1,#�" "
D        BLE     id_matches
N.next_id
X        ADD     r4,r4,#1
b)        LDR     r5,[r5,#keyword_next]
l        B       id_loop
v
�.default_scale
�        DCD     10000
�]
�=0
�:
�� �z(z$)
�[OPT pass%
�        EQUS    z$
�        EQUB    0
�        ALIGN
�]
�=0
�
00000000  0d 00 0a 13 f4 20 3e 53  6f 75 72 63 65 2e 53 57  |..... >Source.SW|
00000010  49 30 38 0d 00 14 17 f4  20 42 41 55 33 44 5f 4c  |I08..... BAU3D_L|
00000020  6f 61 64 20 73 6f 75 72  63 65 0d 00 1e 0c f4 20  |oad source..... |
00000030  62 79 20 44 43 41 0d 00  28 19 f4 20 66 6f 72 20  |by DCA..(.. for |
00000040  33 32 2d 62 69 74 20 6d  61 63 68 69 6e 65 73 0d  |32-bit machines.|
00000050  00 32 19 f4 20 28 63 29  20 42 41 55 20 41 75 67  |.2.. (c) BAU Aug|
00000060  75 73 74 20 31 39 39 33  0d 00 3c 05 3a 0d 00 46  |ust 1993..<.:..F|
00000070  11 dd 20 a4 73 77 69 30  38 5f 6e 61 6d 65 0d 00  |.. .swi08_name..|
00000080  50 0b 3d 22 4c 6f 61 64  22 0d 00 5a 05 3a 0d 00  |P.="Load"..Z.:..|
00000090  64 11 dd 20 a4 73 77 69  30 38 5f 76 61 72 73 0d  |d.. .swi08_vars.|
000000a0  00 6e 15 6c 6f 61 64 5f  73 63 61 6c 65 3d a4 77  |.n.load_scale=.w|
000000b0  6b 28 34 29 0d 00 78 16  6c 6f 61 64 5f 63 6f 6c  |k(4)..x.load_col|
000000c0  6f 75 72 3d a4 77 6b 28  34 29 0d 00 82 15 6c 6f  |our=.wk(4)....lo|
000000d0  61 64 5f 74 61 62 6c 65  3d a4 77 6b 28 34 29 0d  |ad_table=.wk(4).|
000000e0  00 8c 13 6c 6f 61 64 5f  6d 61 78 3d a4 77 6b 28  |...load_max=.wk(|
000000f0  34 29 0d 00 96 11 6c 6f  61 64 5f 6e 3d a4 77 6b  |4)....load_n=.wk|
00000100  28 34 29 0d 00 a0 12 6b  65 79 77 6f 72 64 5f 6e  |(4)....keyword_n|
00000110  65 78 74 3d 30 0d 00 aa  12 6b 65 79 77 6f 72 64  |ext=0....keyword|
00000120  5f 6e 61 6d 65 3d 34 0d  00 b4 12 6b 65 79 77 6f  |_name=4....keywo|
00000130  72 64 5f 61 64 64 72 3d  38 0d 00 be 12 6b 65 79  |rd_addr=8....key|
00000140  77 6f 72 64 5f 72 65 71  3d 31 32 0d 00 c8 0e 6b  |word_req=12....k|
00000150  65 79 77 6f 72 64 73 3d  36 0d 00 d2 06 3d 30 0d  |eywords=6....=0.|
00000160  00 dc 05 3a 0d 00 e6 11  dd 20 a4 73 77 69 30 38  |...:..... .swi08|
00000170  5f 63 6f 64 65 0d 00 f0  0e 5b 4f 50 54 20 70 61  |_code....[OPT pa|
00000180  73 73 25 0d 00 fa 27 2e  6c 6f 61 64 20 20 20 53  |ss%...'.load   S|
00000190  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |TMFD   (sp)!,{r0|
000001a0  2d 72 31 31 2c 6c 69 6e  6b 7d 0d 01 04 1a 20 20  |-r11,link}....  |
000001b0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 31  |      MOV     r1|
000001c0  30 2c 72 30 0d 01 0e 20  20 20 20 20 20 20 20 20  |0,r0...         |
000001d0  a4 61 64 72 6c 28 31 34  2c 6c 6f 61 64 5f 74 61  |.adrl(14,load_ta|
000001e0  62 6c 65 29 0d 01 18 19  20 20 20 20 20 20 20 20  |ble)....        |
000001f0  4d 4f 56 20 20 20 20 20  72 39 2c 23 30 0d 01 22  |MOV     r9,#0.."|
00000200  22 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 20  |"        STMIA  |
00000210  20 72 31 34 2c 7b 72 32  2c 72 33 2c 72 39 7d 0d  | r14,{r2,r3,r9}.|
00000220  01 2c 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.,.        CMP  |
00000230  20 20 20 72 31 2c 23 30  0d 01 36 24 20 20 20 20  |   r1,#0..6$    |
00000240  20 20 20 20 4c 44 52 45  51 20 20 20 72 31 2c 64  |    LDREQ   r1,d|
00000250  65 66 61 75 6c 74 5f 73  63 61 6c 65 0d 01 40 20  |efault_scale..@ |
00000260  20 20 20 20 20 20 20 20  a4 61 64 72 6c 28 31 34  |        .adrl(14|
00000270  2c 6c 6f 61 64 5f 73 63  61 6c 65 29 0d 01 4a 1c  |,load_scale)..J.|
00000280  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00000290  72 31 2c 5b 72 31 34 5d  0d 01 54 1c 20 20 20 20  |r1,[r14]..T.    |
000002a0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 23  |    MOV     r0,#|
000002b0  26 31 30 30 0d 01 5e 1a  20 20 20 20 20 20 20 20  |&100..^.        |
000002c0  42 4c 20 20 20 20 20 20  6d 61 6c 6c 6f 63 0d 01  |BL      malloc..|
000002d0  68 21 20 20 20 20 20 20  20 20 42 56 53 20 20 20  |h!        BVS   |
000002e0  20 20 6c 6f 61 64 5f 66  69 6c 65 5f 65 72 72 0d  |  load_file_err.|
000002f0  01 72 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.r.        MOV  |
00000300  20 20 20 72 39 2c 72 30  0d 01 7c 19 20 20 20 20  |   r9,r0..|.    |
00000310  20 20 20 20 4d 4f 56 20  20 20 20 20 72 38 2c 23  |    MOV     r8,#|
00000320  30 0d 01 86 23 20 20 20  20 20 20 20 20 41 44 52  |0...#        ADR|
00000330  20 20 20 20 20 72 30 2c  63 6f 6d 6d 61 6e 64 5f  |     r0,command_|
00000340  6c 69 73 74 0d 01 90 16  2e 69 6e 69 74 5f 6b 65  |list.....init_ke|
00000350  79 77 6f 72 64 5f 6c 69  73 74 0d 01 9a 1b 20 20  |yword_list....  |
00000360  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 31  |      LDR     r1|
00000370  2c 5b 72 30 5d 0d 01 a4  19 20 20 20 20 20 20 20  |,[r0]....       |
00000380  20 43 4d 50 20 20 20 20  20 72 31 2c 23 30 0d 01  | CMP     r1,#0..|
00000390  ae 24 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |.$        BEQ   |
000003a0  20 20 6b 65 79 77 6f 72  64 73 5f 64 65 66 69 6e  |  keywords_defin|
000003b0  65 64 0d 01 b8 19 20 20  20 20 20 20 20 20 4d 4f  |ed....        MO|
000003c0  56 20 20 20 20 20 72 31  2c 23 30 0d 01 c2 27 20  |V     r1,#0...' |
000003d0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 61  |       BL      a|
000003e0  64 64 5f 6b 65 79 77 6f  72 64 5f 74 6f 5f 6c 69  |dd_keyword_to_li|
000003f0  73 74 0d 01 cc 25 20 20  20 20 20 20 20 20 4c 44  |st...%        LD|
00000400  4d 56 53 46 44 20 28 73  70 29 21 2c 7b 72 30 2d  |MVSFD (sp)!,{r0-|
00000410  72 31 31 2c 70 63 7d 0d  01 d6 19 2e 73 6b 69 70  |r11,pc}.....skip|
00000420  5f 74 6f 5f 6e 65 78 74  5f 6b 65 79 77 6f 72 64  |_to_next_keyword|
00000430  0d 01 e0 1f 20 20 20 20  20 20 20 20 4c 44 52 42  |....        LDRB|
00000440  20 20 20 20 72 31 34 2c  5b 72 30 5d 2c 23 31 0d  |    r14,[r0],#1.|
00000450  01 ea 1b 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00000460  20 20 20 72 31 34 2c 23  33 32 0d 01 f4 28 20 20  |   r14,#32...(  |
00000470  20 20 20 20 20 20 42 47  45 20 20 20 20 20 73 6b  |      BGE     sk|
00000480  69 70 5f 74 6f 5f 6e 65  78 74 5f 6b 65 79 77 6f  |ip_to_next_keywo|
00000490  72 64 0d 01 fe 1c 20 20  20 20 20 20 20 20 41 44  |rd....        AD|
000004a0  44 20 20 20 20 20 72 30  2c 72 30 2c 23 33 0d 02  |D     r0,r0,#3..|
000004b0  08 1c 20 20 20 20 20 20  20 20 42 49 43 20 20 20  |..        BIC   |
000004c0  20 20 72 30 2c 72 30 2c  23 33 0d 02 12 25 20 20  |  r0,r0,#3...%  |
000004d0  20 20 20 20 20 20 42 20  20 20 20 20 20 20 69 6e  |      B       in|
000004e0  69 74 5f 6b 65 79 77 6f  72 64 5f 6c 69 73 74 0d  |it_keyword_list.|
000004f0  02 1c 15 2e 6b 65 79 77  6f 72 64 73 5f 64 65 66  |....keywords_def|
00000500  69 6e 65 64 0d 02 26 1a  20 20 20 20 20 20 20 20  |ined..&.        |
00000510  4d 4f 56 20 20 20 20 20  72 30 2c 72 31 30 0d 02  |MOV     r0,r10..|
00000520  30 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |0.        MOV   |
00000530  20 20 72 31 2c 72 39 0d  02 3a 1c 20 20 20 20 20  |  r1,r9..:.     |
00000540  20 20 20 42 4c 20 20 20  20 20 20 66 6e 5f 73 74  |   BL      fn_st|
00000550  72 69 70 0d 02 44 1d 20  20 20 20 20 20 20 20 42  |rip..D.        B|
00000560  4c 20 20 20 20 20 20 6c  6f 61 64 5f 66 69 6c 65  |L      load_file|
00000570  0d 02 4e 21 20 20 20 20  20 20 20 20 42 56 53 20  |..N!        BVS |
00000580  20 20 20 20 6c 6f 61 64  5f 66 69 6c 65 5f 65 72  |    load_file_er|
00000590  72 0d 02 58 19 20 20 20  20 20 20 20 20 4d 4f 56  |r..X.        MOV|
000005a0  20 20 20 20 20 72 30 2c  72 39 0d 02 62 18 20 20  |     r0,r9..b.  |
000005b0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 66 72  |      BL      fr|
000005c0  65 65 0d 02 6c 21 20 20  20 20 20 20 20 20 41 44  |ee..l!        AD|
000005d0  52 20 20 20 20 20 72 30  2c 77 6f 72 6c 64 5f 6e  |R     r0,world_n|
000005e0  61 6d 65 0d 02 76 24 20  20 20 20 20 20 20 20 42  |ame..v$        B|
000005f0  4c 20 20 20 20 20 20 69  64 65 6e 74 69 66 79 5f  |L      identify_|
00000600  6b 65 79 77 6f 72 64 0d  02 80 19 20 20 20 20 20  |keyword....     |
00000610  20 20 20 43 4d 50 20 20  20 20 20 72 30 2c 23 30  |   CMP     r0,#0|
00000620  0d 02 8a 23 20 20 20 20  20 20 20 20 41 44 52 4c  |...#        ADRL|
00000630  54 20 20 20 72 30 2c 65  72 72 5f 6e 6f 5f 77 6f  |T   r0,err_no_wo|
00000640  72 6c 64 0d 02 94 21 20  20 20 20 20 20 20 20 42  |rld...!        B|
00000650  4c 54 20 20 20 20 20 6c  6f 61 64 5f 66 69 6c 65  |LT     load_file|
00000660  5f 65 72 72 0d 02 9e 1b  20 20 20 20 20 20 20 20  |_err....        |
00000670  53 54 52 20 20 20 20 20  72 31 2c 5b 73 70 5d 0d  |STR     r1,[sp].|
00000680  02 a8 1c 20 20 20 20 20  20 20 20 a4 61 64 72 6c  |...        .adrl|
00000690  28 31 34 2c 6c 6f 61 64  5f 6e 29 0d 02 b2 1c 20  |(14,load_n).... |
000006a0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
000006b0  31 2c 5b 72 31 34 5d 0d  02 bc 1f 20 20 20 20 20  |1,[r14]....     |
000006c0  20 20 20 53 54 52 20 20  20 20 20 72 31 2c 5b 73  |   STR     r1,[s|
000006d0  70 2c 23 31 32 5d 0d 02  c6 04 0d 02 d0 16 2e 66  |p,#12].........f|
000006e0  72 65 65 5f 6b 65 79 77  6f 72 64 5f 6c 69 73 74  |ree_keyword_list|
000006f0  0d 02 da 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00000700  20 20 20 20 72 38 2c 23  30 0d 02 e4 26 20 20 20  |    r8,#0...&   |
00000710  20 20 20 20 20 42 45 51  20 20 20 20 20 66 72 65  |     BEQ     fre|
00000720  65 64 5f 6b 65 79 77 6f  72 64 5f 6c 69 73 74 0d  |ed_keyword_list.|
00000730  02 ee 29 20 20 20 20 20  20 20 20 4c 44 52 20 20  |..)        LDR  |
00000740  20 20 20 72 30 2c 5b 72  38 2c 23 6b 65 79 77 6f  |   r0,[r8,#keywo|
00000750  72 64 5f 6e 61 6d 65 5d  0d 02 f8 18 20 20 20 20  |rd_name]....    |
00000760  20 20 20 20 42 4c 20 20  20 20 20 20 66 72 65 65  |    BL      free|
00000770  0d 03 02 29 20 20 20 20  20 20 20 20 4c 44 52 20  |...)        LDR |
00000780  20 20 20 20 72 31 2c 5b  72 38 2c 23 6b 65 79 77  |    r1,[r8,#keyw|
00000790  6f 72 64 5f 6e 65 78 74  5d 0d 03 0c 19 20 20 20  |ord_next]....   |
000007a0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 30 2c  |     MOV     r0,|
000007b0  72 38 0d 03 16 18 20 20  20 20 20 20 20 20 42 4c  |r8....        BL|
000007c0  20 20 20 20 20 20 66 72  65 65 0d 03 20 19 20 20  |      free.. .  |
000007d0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 38  |      MOV     r8|
000007e0  2c 72 31 0d 03 2a 25 20  20 20 20 20 20 20 20 42  |,r1..*%        B|
000007f0  20 20 20 20 20 20 20 66  72 65 65 5f 6b 65 79 77  |       free_keyw|
00000800  6f 72 64 5f 6c 69 73 74  0d 03 34 17 2e 66 72 65  |ord_list..4..fre|
00000810  65 64 5f 6b 65 79 77 6f  72 64 5f 6c 69 73 74 0d  |ed_keyword_list.|
00000820  03 3e 1b 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.>.        LDR  |
00000830  20 20 20 72 30 2c 5b 73  70 5d 0d 03 48 1f 20 20  |   r0,[sp]..H.  |
00000840  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 63 61  |      BL      ca|
00000850  6c 63 5f 62 6f 75 6e 64  73 0d 03 52 25 20 20 20  |lc_bounds..R%   |
00000860  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00000870  29 21 2c 7b 72 30 2d 72  31 31 2c 70 63 7d 0d 03  |)!,{r0-r11,pc}..|
00000880  5c 04 0d 03 66 12 2e 6c  6f 61 64 5f 66 69 6c 65  |\...f..load_file|
00000890  5f 65 72 72 0d 03 70 1b  20 20 20 20 20 20 20 20  |_err..p.        |
000008a0  53 54 52 20 20 20 20 20  72 30 2c 5b 73 70 5d 0d  |STR     r0,[sp].|
000008b0  03 7a 27 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |.z'        LDMFD|
000008c0  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 31  |   (sp)!,{r0-r11|
000008d0  2c 6c 69 6e 6b 7d 0d 03  84 21 20 20 20 20 20 20  |,link}...!      |
000008e0  20 20 84 52 53 20 20 20  20 70 63 2c 6c 69 6e 6b  |  .RS    pc,link|
000008f0  2c 23 31 3c 3c 32 38 0d  03 8e 04 0d 03 98 11 2e  |,#1<<28.........|
00000900  65 72 72 5f 6e 6f 5f 77  6f 72 6c 64 0d 03 a2 15  |err_no_world....|
00000910  20 20 20 20 20 20 20 20  44 43 44 20 20 20 20 20  |        DCD     |
00000920  30 0d 03 ac 24 20 20 20  20 20 20 20 20 a4 7a 28  |0...$        .z(|
00000930  22 4e 6f 20 27 77 6f 72  6c 64 27 20 64 65 66 69  |"No 'world' defi|
00000940  6e 65 64 22 29 0d 03 b6  04 0d 03 c0 1d 2e 77 6f  |ned").........wo|
00000950  72 6c 64 5f 6e 61 6d 65  20 20 a4 7a 28 22 77 6f  |rld_name  .z("wo|
00000960  72 6c 64 3a 22 29 0d 03  ca 04 0d 03 d4 11 2e 63  |rld:").........c|
00000970  6f 6d 6d 61 6e 64 5f 6c  69 73 74 0d 03 de 15 20  |ommand_list.... |
00000980  20 20 20 20 20 20 20 a4  7a 28 22 72 65 6d 22 29  |       .z("rem")|
00000990  0d 03 e8 19 20 20 20 20  20 20 20 20 a4 7a 28 22  |....        .z("|
000009a0  69 6e 63 6c 75 64 65 22  29 0d 03 f2 18 20 20 20  |include")....   |
000009b0  20 20 20 20 20 a4 7a 28  22 63 6f 6c 6f 75 72 22  |     .z("colour"|
000009c0  29 0d 03 fc 19 20 20 20  20 20 20 20 20 a4 7a 28  |)....        .z(|
000009d0  22 73 75 72 66 61 63 65  22 29 0d 04 06 18 20 20  |"surface")....  |
000009e0  20 20 20 20 20 20 a4 7a  28 22 6f 62 6a 65 63 74  |      .z("object|
000009f0  22 29 0d 04 10 17 20 20  20 20 20 20 20 20 a4 7a  |")....        .z|
00000a00  28 22 6d 65 72 67 65 22  29 0d 04 1a 18 20 20 20  |("merge")....   |
00000a10  20 20 20 20 20 a4 7a 28  22 63 6c 6f 73 65 64 22  |     .z("closed"|
00000a20  29 0d 04 24 15 20 20 20  20 20 20 20 20 44 43 44  |)..$.        DCD|
00000a30  20 20 20 20 20 30 0d 04  2e 04 0d 04 38 18 2e 61  |     0......8..a|
00000a40  64 64 5f 6b 65 79 77 6f  72 64 5f 74 6f 5f 6c 69  |dd_keyword_to_li|
00000a50  73 74 0d 04 42 26 20 20  20 20 20 20 20 20 53 54  |st..B&        ST|
00000a60  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00000a70  72 37 2c 6c 69 6e 6b 7d  0d 04 4c 19 20 20 20 20  |r7,link}..L.    |
00000a80  20 20 20 20 4d 4f 56 20  20 20 20 20 72 36 2c 72  |    MOV     r6,r|
00000a90  30 0d 04 56 23 20 20 20  20 20 20 20 20 4d 4f 56  |0..V#        MOV|
00000aa0  20 20 20 20 20 72 30 2c  23 6b 65 79 77 6f 72 64  |     r0,#keyword|
00000ab0  5f 72 65 71 0d 04 60 1a  20 20 20 20 20 20 20 20  |_req..`.        |
00000ac0  42 4c 20 20 20 20 20 20  6d 61 6c 6c 6f 63 0d 04  |BL      malloc..|
00000ad0  6a 1b 20 20 20 20 20 20  20 20 53 54 52 56 53 20  |j.        STRVS |
00000ae0  20 20 72 30 2c 5b 73 70  5d 0d 04 74 24 20 20 20  |  r0,[sp]..t$   |
00000af0  20 20 20 20 20 4c 44 4d  56 53 46 44 20 28 73 70  |     LDMVSFD (sp|
00000b00  29 21 2c 7b 72 30 2d 72  37 2c 70 63 7d 0d 04 7e  |)!,{r0-r7,pc}..~|
00000b10  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000b20  20 72 37 2c 72 30 0d 04  88 19 20 20 20 20 20 20  | r7,r0....      |
00000b30  20 20 43 4d 50 20 20 20  20 20 72 38 2c 23 30 0d  |  CMP     r8,#0.|
00000b40  04 92 16 20 20 20 20 20  20 20 20 ec 51 20 20 20  |...        .Q   |
00000b50  72 38 2c 72 37 0d 04 9c  1c 20 20 20 20 20 20 20  |r8,r7....       |
00000b60  20 42 45 51 20 20 20 20  20 61 64 64 5f 6b 65 79  | BEQ     add_key|
00000b70  32 0d 04 a6 19 20 20 20  20 20 20 20 20 4d 4f 56  |2....        MOV|
00000b80  20 20 20 20 20 72 35 2c  72 38 0d 04 b0 0d 2e 61  |     r5,r8.....a|
00000b90  64 64 5f 6b 65 79 31 0d  04 ba 29 20 20 20 20 20  |dd_key1...)     |
00000ba0  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00000bb0  35 2c 23 6b 65 79 77 6f  72 64 5f 6e 65 78 74 5d  |5,#keyword_next]|
00000bc0  0d 04 c4 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00000bd0  20 20 20 20 72 30 2c 23  30 0d 04 ce 19 20 20 20  |    r0,#0....   |
00000be0  20 20 20 20 20 4d 4f 56  4e 45 20 20 20 72 35 2c  |     MOVNE   r5,|
00000bf0  72 30 0d 04 d8 1c 20 20  20 20 20 20 20 20 42 4e  |r0....        BN|
00000c00  45 20 20 20 20 20 61 64  64 5f 6b 65 79 31 0d 04  |E     add_key1..|
00000c10  e2 29 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |.)        STR   |
00000c20  20 20 72 37 2c 5b 72 35  2c 23 6b 65 79 77 6f 72  |  r7,[r5,#keywor|
00000c30  64 5f 6e 65 78 74 5d 0d  04 ec 0d 2e 61 64 64 5f  |d_next].....add_|
00000c40  6b 65 79 32 0d 04 f6 19  20 20 20 20 20 20 20 20  |key2....        |
00000c50  4d 4f 56 20 20 20 20 20  72 30 2c 23 30 0d 05 00  |MOV     r0,#0...|
00000c60  29 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |)        STR    |
00000c70  20 72 30 2c 5b 72 37 2c  23 6b 65 79 77 6f 72 64  | r0,[r7,#keyword|
00000c80  5f 6e 65 78 74 5d 0d 05  0a 29 20 20 20 20 20 20  |_next]...)      |
00000c90  20 20 53 54 52 20 20 20  20 20 72 31 2c 5b 72 37  |  STR     r1,[r7|
00000ca0  2c 23 6b 65 79 77 6f 72  64 5f 61 64 64 72 5d 0d  |,#keyword_addr].|
00000cb0  05 14 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00000cc0  20 20 20 72 32 2c 23 30  0d 05 1e 0d 2e 61 64 64  |   r2,#0.....add|
00000cd0  5f 6b 65 79 33 0d 05 28  1e 20 20 20 20 20 20 20  |_key3..(.       |
00000ce0  20 4c 44 52 42 20 20 20  20 72 30 2c 5b 72 36 2c  | LDRB    r0,[r6,|
00000cf0  72 32 5d 0d 05 32 1c 20  20 20 20 20 20 20 20 43  |r2]..2.        C|
00000d00  4d 50 20 20 20 20 20 72  30 2c 23 97 22 20 22 0d  |MP     r0,#." ".|
00000d10  05 3c 1c 20 20 20 20 20  20 20 20 41 44 44 47 54  |.<.        ADDGT|
00000d20  20 20 20 72 32 2c 72 32  2c 23 31 0d 05 46 1c 20  |   r2,r2,#1..F. |
00000d30  20 20 20 20 20 20 20 42  47 54 20 20 20 20 20 61  |       BGT     a|
00000d40  64 64 5f 6b 65 79 33 0d  05 50 1c 20 20 20 20 20  |dd_key3..P.     |
00000d50  20 20 20 41 44 44 20 20  20 20 20 72 30 2c 72 32  |   ADD     r0,r2|
00000d60  2c 23 35 0d 05 5a 1c 20  20 20 20 20 20 20 20 42  |,#5..Z.        B|
00000d70  49 43 20 20 20 20 20 72  30 2c 72 30 2c 23 33 0d  |IC     r0,r0,#3.|
00000d80  05 64 1a 20 20 20 20 20  20 20 20 42 4c 20 20 20  |.d.        BL   |
00000d90  20 20 20 6d 61 6c 6c 6f  63 0d 05 6e 1b 20 20 20  |   malloc..n.   |
00000da0  20 20 20 20 20 53 54 52  56 53 20 20 20 72 30 2c  |     STRVS   r0,|
00000db0  5b 73 70 5d 0d 05 78 24  20 20 20 20 20 20 20 20  |[sp]..x$        |
00000dc0  4c 44 4d 56 53 46 44 20  28 73 70 29 21 2c 7b 72  |LDMVSFD (sp)!,{r|
00000dd0  30 2d 72 37 2c 70 63 7d  0d 05 82 19 20 20 20 20  |0-r7,pc}....    |
00000de0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 35 2c 72  |    MOV     r5,r|
00000df0  30 0d 05 8c 29 20 20 20  20 20 20 20 20 53 54 52  |0...)        STR|
00000e00  20 20 20 20 20 72 35 2c  5b 72 37 2c 23 6b 65 79  |     r5,[r7,#key|
00000e10  77 6f 72 64 5f 6e 61 6d  65 5d 0d 05 96 19 20 20  |word_name]....  |
00000e20  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 32  |      MOV     r2|
00000e30  2c 23 30 0d 05 a0 0d 2e  61 64 64 5f 6b 65 79 34  |,#0.....add_key4|
00000e40  0d 05 aa 1e 20 20 20 20  20 20 20 20 4c 44 52 42  |....        LDRB|
00000e50  20 20 20 20 72 30 2c 5b  72 36 5d 2c 23 31 0d 05  |    r0,[r6],#1..|
00000e60  b4 1c 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
00000e70  20 20 72 30 2c 23 97 22  20 22 0d 05 be 1c 20 20  |  r0,#." "....  |
00000e80  20 20 20 20 20 20 4d 4f  56 4c 45 20 20 20 72 30  |      MOVLE   r0|
00000e90  2c 23 97 22 3a 22 0d 05  c8 1e 20 20 20 20 20 20  |,#.":"....      |
00000ea0  20 20 53 54 52 42 20 20  20 20 72 30 2c 5b 72 35  |  STRB    r0,[r5|
00000eb0  5d 2c 23 31 0d 05 d2 1c  20 20 20 20 20 20 20 20  |],#1....        |
00000ec0  42 47 54 20 20 20 20 20  61 64 64 5f 6b 65 79 34  |BGT     add_key4|
00000ed0  0d 05 dc 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000ee0  20 20 20 20 72 30 2c 23  30 0d 05 e6 1b 20 20 20  |    r0,#0....   |
00000ef0  20 20 20 20 20 53 54 52  42 20 20 20 20 72 30 2c  |     STRB    r0,|
00000f00  5b 72 35 5d 0d 05 f0 24  20 20 20 20 20 20 20 20  |[r5]...$        |
00000f10  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00000f20  30 2d 72 37 2c 70 63 7d  0d 05 fa 04 0d 06 04 1b  |0-r7,pc}........|
00000f30  2e 65 72 72 5f 63 6f 6f  72 64 5f 6e 6f 74 5f 65  |.err_coord_not_e|
00000f40  78 70 65 63 74 65 64 0d  06 0e 15 20 20 20 20 20  |xpected....     |
00000f50  20 20 20 44 43 44 20 20  20 20 20 30 0d 06 18 2a  |   DCD     0...*|
00000f60  20 20 20 20 20 20 20 20  a4 7a 28 22 43 6f 2d 6f  |        .z("Co-o|
00000f70  72 64 69 6e 61 74 65 20  6e 6f 74 20 65 78 70 65  |rdinate not expe|
00000f80  63 74 65 64 22 29 0d 06  22 04 0d 06 2c 0e 2e 6c  |cted").."...,..l|
00000f90  6f 61 64 5f 66 69 6c 65  0d 06 36 27 20 20 20 20  |oad_file..6'    |
00000fa0  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00000fb0  21 2c 7b 72 30 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r0-r11,link}.|
00000fc0  06 40 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.@.        MOV  |
00000fd0  20 20 20 72 30 2c 23 35  0d 06 4a 19 20 20 20 20  |   r0,#5..J.    |
00000fe0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 72  |    MOV     r1,r|
00000ff0  39 0d 06 54 1e 20 20 20  20 20 20 20 20 53 57 49  |9..T.        SWI|
00001000  20 20 20 20 20 22 58 4f  53 5f 46 69 6c 65 22 0d  |     "XOS_File".|
00001010  06 5e 1b 20 20 20 20 20  20 20 20 53 54 52 56 53  |.^.        STRVS|
00001020  20 20 20 72 30 2c 5b 73  70 5d 0d 06 68 25 20 20  |   r0,[sp]..h%  |
00001030  20 20 20 20 20 20 4c 44  4d 56 53 46 44 20 28 73  |      LDMVSFD (s|
00001040  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00001050  06 72 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.r.        CMP  |
00001060  20 20 20 72 30 2c 23 31  0d 06 7c 1d 20 20 20 20  |   r0,#1..|.    |
00001070  20 20 20 20 42 45 51 20  20 20 20 20 69 73 5f 61  |    BEQ     is_a|
00001080  5f 66 69 6c 65 0d 06 86  19 20 20 20 20 20 20 20  |_file....       |
00001090  20 4d 4f 56 20 20 20 20  20 72 32 2c 72 30 0d 06  | MOV     r2,r0..|
000010a0  90 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000010b0  20 20 72 30 2c 23 31 39  0d 06 9a 19 20 20 20 20  |  r0,#19....    |
000010c0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 72  |    MOV     r1,r|
000010d0  39 0d 06 a4 1e 20 20 20  20 20 20 20 20 53 57 49  |9....        SWI|
000010e0  20 20 20 20 20 22 58 4f  53 5f 46 69 6c 65 22 0d  |     "XOS_File".|
000010f0  06 ae 1b 20 20 20 20 20  20 20 20 53 54 52 20 20  |...        STR  |
00001100  20 20 20 72 30 2c 5b 73  70 5d 0d 06 b8 27 20 20  |   r0,[sp]...'  |
00001110  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00001120  70 29 21 2c 7b 72 30 2d  72 31 31 2c 6c 69 6e 6b  |p)!,{r0-r11,link|
00001130  7d 0d 06 c2 21 20 20 20  20 20 20 20 20 84 52 53  |}...!        .RS|
00001140  20 20 20 20 70 63 2c 6c  69 6e 6b 2c 23 31 3c 3c  |    pc,link,#1<<|
00001150  32 38 0d 06 cc 0e 2e 69  73 5f 61 5f 66 69 6c 65  |28.....is_a_file|
00001160  0d 06 d6 1b 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00001170  20 20 20 20 72 30 2c 23  26 34 30 0d 06 e0 19 20  |    r0,#&40.... |
00001180  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00001190  31 2c 72 39 0d 06 ea 1e  20 20 20 20 20 20 20 20  |1,r9....        |
000011a0  53 57 49 20 20 20 20 20  22 58 4f 53 5f 46 69 6e  |SWI     "XOS_Fin|
000011b0  64 22 0d 06 f4 1a 20 20  20 20 20 20 20 20 4d 4f  |d"....        MO|
000011c0  56 20 20 20 20 20 72 31  30 2c 72 30 0d 06 fe 1c  |V     r10,r0....|
000011d0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000011e0  72 30 2c 23 26 32 30 30  0d 07 08 1a 20 20 20 20  |r0,#&200....    |
000011f0  20 20 20 20 42 4c 20 20  20 20 20 20 6d 61 6c 6c  |    BL      mall|
00001200  6f 63 0d 07 12 1b 20 20  20 20 20 20 20 20 53 54  |oc....        ST|
00001210  52 56 53 20 20 20 72 30  2c 5b 73 70 5d 0d 07 1c  |RVS   r0,[sp]...|
00001220  25 20 20 20 20 20 20 20  20 4c 44 4d 56 53 46 44  |%        LDMVSFD|
00001230  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 31 2c 70  | (sp)!,{r0-r11,p|
00001240  63 7d 0d 07 26 1a 20 20  20 20 20 20 20 20 4d 4f  |c}..&.        MO|
00001250  56 20 20 20 20 20 72 31  31 2c 72 30 0d 07 30 19  |V     r11,r0..0.|
00001260  20 20 20 20 20 20 20 20  4d 56 4e 20 20 20 20 20  |        MVN     |
00001270  72 37 2c 23 30 0d 07 3a  11 2e 67 65 74 6c 69 6e  |r7,#0..:..getlin|
00001280  65 5f 6c 6f 6f 70 0d 07  44 19 20 20 20 20 20 20  |e_loop..D.      |
00001290  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 23 35 0d  |  MOV     r0,#5.|
000012a0  07 4e 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.N.        MOV  |
000012b0  20 20 20 72 31 2c 72 31  30 0d 07 58 1e 20 20 20  |   r1,r10..X.   |
000012c0  20 20 20 20 20 53 57 49  20 20 20 20 20 22 58 4f  |     SWI     "XO|
000012d0  53 5f 41 72 67 73 22 0d  07 62 19 20 20 20 20 20  |S_Args"..b.     |
000012e0  20 20 20 43 4d 50 20 20  20 20 20 72 32 2c 23 30  |   CMP     r2,#0|
000012f0  0d 07 6c 1a 20 20 20 20  20 20 20 20 42 4e 45 20  |..l.        BNE |
00001300  20 20 20 20 69 73 5f 65  6f 66 0d 07 76 1a 20 20  |    is_eof..v.  |
00001310  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00001320  2c 72 31 31 0d 07 80 1e  20 20 20 20 20 20 20 20  |,r11....        |
00001330  42 4c 20 20 20 20 20 20  66 6e 5f 67 65 74 6c 69  |BL      fn_getli|
00001340  6e 65 0d 07 8a 20 20 20  20 20 20 20 20 20 41 44  |ne...         AD|
00001350  44 20 20 20 20 20 72 31  2c 72 31 31 2c 23 26 31  |D     r1,r11,#&1|
00001360  30 30 0d 07 94 1c 20 20  20 20 20 20 20 20 42 4c  |00....        BL|
00001370  20 20 20 20 20 20 66 6e  5f 73 74 72 69 70 0d 07  |      fn_strip..|
00001380  9e 1c 20 20 20 20 20 20  20 20 4c 44 52 42 20 20  |..        LDRB  |
00001390  20 20 72 31 34 2c 5b 72  31 5d 0d 07 a8 1d 20 20  |  r14,[r1]....  |
000013a0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 31  |      CMP     r1|
000013b0  34 2c 23 97 22 2d 22 0d  07 b2 1c 20 20 20 20 20  |4,#."-"....     |
000013c0  20 20 20 42 45 51 20 20  20 20 20 69 73 5f 63 6f  |   BEQ     is_co|
000013d0  6f 72 64 0d 07 bc 1d 20  20 20 20 20 20 20 20 43  |ord....        C|
000013e0  4d 50 20 20 20 20 20 72  31 34 2c 23 97 22 30 22  |MP     r14,#."0"|
000013f0  0d 07 c6 1d 20 20 20 20  20 20 20 20 42 4c 54 20  |....        BLT |
00001400  20 20 20 20 6e 6f 74 5f  63 6f 6f 72 64 0d 07 d0  |    not_coord...|
00001410  1d 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
00001420  20 72 31 34 2c 23 97 22  39 22 0d 07 da 1d 20 20  | r14,#."9"....  |
00001430  20 20 20 20 20 20 42 47  54 20 20 20 20 20 6e 6f  |      BGT     no|
00001440  74 5f 63 6f 6f 72 64 0d  07 e4 0d 2e 69 73 5f 63  |t_coord.....is_c|
00001450  6f 6f 72 64 0d 07 ee 19  20 20 20 20 20 20 20 20  |oord....        |
00001460  43 4d 50 20 20 20 20 20  72 37 2c 23 33 0d 07 f8  |CMP     r7,#3...|
00001470  2d 20 20 20 20 20 20 20  20 41 44 52 4e 45 20 20  |-        ADRNE  |
00001480  20 72 30 2c 65 72 72 5f  63 6f 6f 72 64 5f 6e 6f  | r0,err_coord_no|
00001490  74 5f 65 78 70 65 63 74  65 64 0d 08 02 1c 20 20  |t_expected....  |
000014a0  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 6c 6f  |      BNE     lo|
000014b0  61 64 5f 65 72 72 0d 08  0c 19 20 20 20 20 20 20  |ad_err....      |
000014c0  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 72 36 0d  |  MOV     r0,r6.|
000014d0  08 16 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000014e0  20 20 20 72 31 2c 23 31  32 0d 08 20 1b 20 20 20  |   r1,#12.. .   |
000014f0  20 20 20 20 20 42 4c 20  20 20 20 20 20 72 65 61  |     BL      rea|
00001500  6c 6c 6f 63 0d 08 2a 1c  20 20 20 20 20 20 20 20  |lloc..*.        |
00001510  42 56 53 20 20 20 20 20  6c 6f 61 64 5f 65 72 72  |BVS     load_err|
00001520  0d 08 34 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..4.        MOV |
00001530  20 20 20 20 72 36 2c 72  30 0d 08 3e 28 20 20 20  |    r6,r0..>(   |
00001540  20 20 20 20 20 53 54 52  20 20 20 20 20 72 36 2c  |     STR     r6,|
00001550  5b 72 35 2c 23 73 75 62  6f 62 6a 5f 74 79 70 65  |[r5,#subobj_type|
00001560  5d 0d 08 48 23 20 20 20  20 20 20 20 20 4c 44 52  |]..H#        LDR|
00001570  20 20 20 20 20 72 32 2c  5b 72 36 2c 23 73 75 72  |     r2,[r6,#sur|
00001580  66 5f 6e 5d 0d 08 52 23  20 20 20 20 20 20 20 20  |f_n]..R#        |
00001590  41 44 44 20 20 20 20 20  72 31 2c 72 36 2c 23 73  |ADD     r1,r6,#s|
000015a0  75 72 66 5f 72 65 71 0d  08 5c 23 20 20 20 20 20  |urf_req..\#     |
000015b0  20 20 20 41 44 44 20 20  20 20 20 72 31 2c 72 31  |   ADD     r1,r1|
000015c0  2c 72 32 2c 4c 53 4c 20  23 33 0d 08 66 23 20 20  |,r2,LSL #3..f#  |
000015d0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 31  |      ADD     r1|
000015e0  2c 72 31 2c 72 32 2c 4c  53 4c 20 23 32 0d 08 70  |,r1,r2,LSL #2..p|
000015f0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001600  20 72 33 2c 23 33 0d 08  7a 10 2e 72 65 61 64 5f  | r3,#3..z..read_|
00001610  76 65 72 74 65 78 0d 08  84 1d 20 20 20 20 20 20  |vertex....      |
00001620  20 20 42 4c 20 20 20 20  20 20 66 6e 5f 67 65 74  |  BL      fn_get|
00001630  6e 75 6d 0d 08 8e 1e 20  20 20 20 20 20 20 20 53  |num....        S|
00001640  54 52 20 20 20 20 20 72  30 2c 5b 72 31 5d 2c 23  |TR     r0,[r1],#|
00001650  34 0d 08 98 1c 20 20 20  20 20 20 20 20 53 55 42  |4....        SUB|
00001660  53 20 20 20 20 72 33 2c  72 33 2c 23 31 0d 08 a2  |S    r3,r3,#1...|
00001670  1f 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |.        BNE    |
00001680  20 72 65 61 64 5f 76 65  72 74 65 78 0d 08 ac 1c  | read_vertex....|
00001690  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000016a0  72 32 2c 72 32 2c 23 31  0d 08 b6 23 20 20 20 20  |r2,r2,#1...#    |
000016b0  20 20 20 20 53 54 52 20  20 20 20 20 72 32 2c 5b  |    STR     r2,[|
000016c0  72 36 2c 23 73 75 72 66  5f 6e 5d 0d 08 c0 0e 2e  |r6,#surf_n].....|
000016d0  6e 6f 74 5f 63 6f 6f 72  64 0d 08 ca 1d 20 20 20  |not_coord....   |
000016e0  20 20 20 20 20 42 4c 20  20 20 20 20 20 66 6e 5f  |     BL      fn_|
000016f0  67 65 74 70 61 72 0d 08  d4 1d 20 20 20 20 20 20  |getpar....      |
00001700  20 20 4c 44 52 42 20 20  20 20 72 31 34 2c 5b 72  |  LDRB    r14,[r|
00001710  31 31 5d 0d 08 de 1d 20  20 20 20 20 20 20 20 43  |11]....        C|
00001720  4d 50 20 20 20 20 20 72  31 34 2c 23 97 22 20 22  |MP     r14,#." "|
00001730  0d 08 e8 20 20 20 20 20  20 20 20 20 42 4c 45 20  |...         BLE |
00001740  20 20 20 20 67 65 74 6c  69 6e 65 5f 6c 6f 6f 70  |    getline_loop|
00001750  0d 08 f2 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00001760  20 20 20 20 72 30 2c 72  31 31 0d 08 fc 24 20 20  |    r0,r11...$  |
00001770  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 69 64  |      BL      id|
00001780  65 6e 74 69 66 79 5f 6b  65 79 77 6f 72 64 0d 09  |entify_keyword..|
00001790  06 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
000017a0  20 20 72 30 2c 23 30 0d  09 10 2a 20 20 20 20 20  |  r0,#0...*     |
000017b0  20 20 20 41 44 52 4c 54  20 20 20 72 30 2c 65 72  |   ADRLT   r0,er|
000017c0  72 5f 75 6e 6b 6e 6f 77  6e 5f 6b 65 79 77 6f 72  |r_unknown_keywor|
000017d0  64 0d 09 1a 1c 20 20 20  20 20 20 20 20 42 4c 54  |d....        BLT|
000017e0  20 20 20 20 20 6c 6f 61  64 5f 65 72 72 0d 09 24  |     load_err..$|
000017f0  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00001800  20 72 30 2c 23 6b 65 79  77 6f 72 64 73 0d 09 2e  | r0,#keywords...|
00001810  19 20 20 20 20 20 20 20  20 4d 4f 56 4c 54 20 20  |.        MOVLT  |
00001820  20 72 37 2c 72 30 0d 09  38 20 20 20 20 20 20 20  | r7,r0..8       |
00001830  20 20 42 47 45 20 20 20  20 20 75 73 65 72 5f 6b  |  BGE     user_k|
00001840  65 79 77 6f 72 64 0d 09  42 23 20 20 20 20 20 20  |eyword..B#      |
00001850  20 20 41 44 44 20 20 20  20 20 70 63 2c 70 63 2c  |  ADD     pc,pc,|
00001860  72 30 2c 4c 53 4c 20 23  32 0d 09 4c 15 20 20 20  |r0,LSL #2..L.   |
00001870  20 20 20 20 20 44 43 44  20 20 20 20 20 30 0d 09  |     DCD     0..|
00001880  56 20 20 20 20 20 20 20  20 20 42 20 20 20 20 20  |V         B     |
00001890  20 20 67 65 74 6c 69 6e  65 5f 6c 6f 6f 70 0d 09  |  getline_loop..|
000018a0  60 1e 20 20 20 20 20 20  20 20 42 20 20 20 20 20  |`.        B     |
000018b0  20 20 64 6f 5f 69 6e 63  6c 75 64 65 0d 09 6a 1d  |  do_include..j.|
000018c0  20 20 20 20 20 20 20 20  42 20 20 20 20 20 20 20  |        B       |
000018d0  64 6f 5f 63 6f 6c 6f 75  72 0d 09 74 1e 20 20 20  |do_colour..t.   |
000018e0  20 20 20 20 20 42 20 20  20 20 20 20 20 64 6f 5f  |     B       do_|
000018f0  73 75 72 66 61 63 65 0d  09 7e 1d 20 20 20 20 20  |surface..~.     |
00001900  20 20 20 42 20 20 20 20  20 20 20 64 6f 5f 6f 62  |   B       do_ob|
00001910  6a 65 63 74 0d 09 88 0f  2e 64 6f 5f 69 6e 63 6c  |ject.....do_incl|
00001920  75 64 65 0d 09 92 1a 20  20 20 20 20 20 20 20 4d  |ude....        M|
00001930  4f 56 20 20 20 20 20 72  31 2c 72 31 31 0d 09 9c  |OV     r1,r11...|
00001940  1a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001950  20 72 32 2c 72 31 31 0d  09 a6 19 20 20 20 20 20  | r2,r11....     |
00001960  20 20 20 4d 4f 56 20 20  20 20 20 72 33 2c 72 39  |   MOV     r3,r9|
00001970  0d 09 b0 16 2e 69 6e 63  6c 75 64 65 5f 66 69 72  |.....include_fir|
00001980  73 74 5f 62 69 74 0d 09  ba 1f 20 20 20 20 20 20  |st_bit....      |
00001990  20 20 4c 44 52 42 20 20  20 20 72 31 34 2c 5b 72  |  LDRB    r14,[r|
000019a0  33 5d 2c 23 31 0d 09 c4  1f 20 20 20 20 20 20 20  |3],#1....       |
000019b0  20 53 54 52 42 20 20 20  20 72 31 34 2c 5b 72 31  | STRB    r14,[r1|
000019c0  5d 2c 23 31 0d 09 ce 1d  20 20 20 20 20 20 20 20  |],#1....        |
000019d0  43 4d 50 20 20 20 20 20  72 31 34 2c 23 97 22 2e  |CMP     r14,#.".|
000019e0  22 0d 09 d8 16 20 20 20  20 20 20 20 20 ec 51 20  |"....        .Q |
000019f0  20 20 72 32 2c 72 31 0d  09 e2 1d 20 20 20 20 20  |  r2,r1....     |
00001a00  20 20 20 43 4d 50 20 20  20 20 20 72 31 34 2c 23  |   CMP     r14,#|
00001a10  97 22 20 22 0d 09 ec 25  20 20 20 20 20 20 20 20  |." "...%        |
00001a20  42 47 54 20 20 20 20 20  69 6e 63 6c 75 64 65 5f  |BGT     include_|
00001a30  66 69 72 73 74 5f 62 69  74 0d 09 f6 20 20 20 20  |first_bit...    |
00001a40  20 20 20 20 20 41 44 44  20 20 20 20 20 72 33 2c  |     ADD     r3,|
00001a50  72 31 31 2c 23 26 31 30  30 0d 0a 00 0e 2e 63 6f  |r11,#&100.....co|
00001a60  70 79 5f 74 61 69 6c 0d  0a 0a 1f 20 20 20 20 20  |py_tail....     |
00001a70  20 20 20 4c 44 52 42 20  20 20 20 72 31 34 2c 5b  |   LDRB    r14,[|
00001a80  72 33 5d 2c 23 31 0d 0a  14 1d 20 20 20 20 20 20  |r3],#1....      |
00001a90  20 20 43 4d 50 20 20 20  20 20 72 31 34 2c 23 97  |  CMP     r14,#.|
00001aa0  22 20 22 0d 0a 1e 1a 20  20 20 20 20 20 20 20 4d  |" "....        M|
00001ab0  4f 56 4c 45 20 20 20 72  31 34 2c 23 30 0d 0a 28  |OVLE   r14,#0..(|
00001ac0  1f 20 20 20 20 20 20 20  20 53 54 52 42 20 20 20  |.        STRB   |
00001ad0  20 72 31 34 2c 5b 72 32  5d 2c 23 31 0d 0a 32 1d  | r14,[r2],#1..2.|
00001ae0  20 20 20 20 20 20 20 20  42 47 54 20 20 20 20 20  |        BGT     |
00001af0  63 6f 70 79 5f 74 61 69  6c 0d 0a 3c 1e 20 20 20  |copy_tail..<.   |
00001b00  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00001b10  29 21 2c 7b 72 39 7d 0d  0a 46 1a 20 20 20 20 20  |)!,{r9}..F.     |
00001b20  20 20 20 4d 4f 56 20 20  20 20 20 72 39 2c 72 31  |   MOV     r9,r1|
00001b30  31 0d 0a 50 1d 20 20 20  20 20 20 20 20 42 4c 20  |1..P.        BL |
00001b40  20 20 20 20 20 6c 6f 61  64 5f 66 69 6c 65 0d 0a  |     load_file..|
00001b50  5a 1e 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |Z.        LDMFD |
00001b60  20 20 28 73 70 29 21 2c  7b 72 39 7d 0d 0a 64 21  |  (sp)!,{r9}..d!|
00001b70  20 20 20 20 20 20 20 20  42 56 53 20 20 20 20 20  |        BVS     |
00001b80  6c 6f 61 64 5f 66 69 6c  65 5f 65 72 72 0d 0a 6e  |load_file_err..n|
00001b90  20 20 20 20 20 20 20 20  20 42 20 20 20 20 20 20  |         B      |
00001ba0  20 67 65 74 6c 69 6e 65  5f 6c 6f 6f 70 0d 0a 78  | getline_loop..x|
00001bb0  0e 2e 64 6f 5f 63 6f 6c  6f 75 72 0d 0a 82 1e 20  |..do_colour.... |
00001bc0  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
00001bd0  73 70 29 21 2c 7b 72 34  7d 0d 0a 8c 19 20 20 20  |sp)!,{r4}....   |
00001be0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 33 2c  |     MOV     r3,|
00001bf0  23 30 0d 0a 96 19 20 20  20 20 20 20 20 20 4d 4f  |#0....        MO|
00001c00  56 20 20 20 20 20 72 34  2c 23 38 0d 0a a0 14 2e  |V     r4,#8.....|
00001c10  67 65 74 5f 63 6f 6c 6f  75 72 5f 6c 6f 6f 70 0d  |get_colour_loop.|
00001c20  0a aa 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00001c30  20 20 20 66 6e 5f 67 65  74 70 61 72 0d 0a b4 22  |   fn_getpar..."|
00001c40  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001c50  72 30 2c 23 31 30 2b 28  31 3c 3c 32 39 29 0d 0a  |r0,#10+(1<<29)..|
00001c60  be 1a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00001c70  20 20 72 31 2c 72 31 31  0d 0a c8 1b 20 20 20 20  |  r1,r11....    |
00001c80  20 20 20 20 4d 4f 56 20  20 20 20 20 72 32 2c 23  |    MOV     r2,#|
00001c90  32 35 35 0d 0a d2 26 20  20 20 20 20 20 20 20 53  |255...&        S|
00001ca0  57 49 20 20 20 20 20 22  58 4f 53 5f 52 65 61 64  |WI     "XOS_Read|
00001cb0  55 6e 73 69 67 6e 65 64  22 0d 0a dc 22 20 20 20  |Unsigned"..."   |
00001cc0  20 20 20 20 20 84 52 20  20 20 20 20 72 33 2c 72  |     .R     r3,r|
00001cd0  33 2c 72 32 2c 4c 53 4c  20 72 34 0d 0a e6 1c 20  |3,r2,LSL r4.... |
00001ce0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00001cf0  34 2c 72 34 2c 23 38 0d  0a f0 1a 20 20 20 20 20  |4,r4,#8....     |
00001d00  20 20 20 43 4d 50 20 20  20 20 20 72 34 2c 23 33  |   CMP     r4,#3|
00001d10  32 0d 0a fa 23 20 20 20  20 20 20 20 20 42 4e 45  |2...#        BNE|
00001d20  20 20 20 20 20 67 65 74  5f 63 6f 6c 6f 75 72 5f  |     get_colour_|
00001d30  6c 6f 6f 70 0d 0b 04 21  20 20 20 20 20 20 20 20  |loop...!        |
00001d40  a4 61 64 72 6c 28 31 34  2c 6c 6f 61 64 5f 63 6f  |.adrl(14,load_co|
00001d50  6c 6f 75 72 29 0d 0b 0e  1c 20 20 20 20 20 20 20  |lour)....       |
00001d60  20 53 54 52 20 20 20 20  20 72 33 2c 5b 72 31 34  | STR     r3,[r14|
00001d70  5d 0d 0b 18 1e 20 20 20  20 20 20 20 20 4c 44 4d  |]....        LDM|
00001d80  46 44 20 20 20 28 73 70  29 21 2c 7b 72 34 7d 0d  |FD   (sp)!,{r4}.|
00001d90  0b 22 20 20 20 20 20 20  20 20 20 42 20 20 20 20  |."         B    |
00001da0  20 20 20 67 65 74 6c 69  6e 65 5f 6c 6f 6f 70 0d  |   getline_loop.|
00001db0  0b 2c 0f 2e 64 6f 5f 73  75 72 66 61 63 65 0d 0b  |.,..do_surface..|
00001dc0  36 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |6         MOV   |
00001dd0  20 20 72 30 2c 23 73 75  72 66 5f 72 65 71 0d 0b  |  r0,#surf_req..|
00001de0  40 1a 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |@.        BL    |
00001df0  20 20 6d 61 6c 6c 6f 63  0d 0b 4a 1c 20 20 20 20  |  malloc..J.    |
00001e00  20 20 20 20 42 56 53 20  20 20 20 20 6c 6f 61 64  |    BVS     load|
00001e10  5f 65 72 72 0d 0b 54 19  20 20 20 20 20 20 20 20  |_err..T.        |
00001e20  4d 4f 56 20 20 20 20 20  72 36 2c 72 30 0d 0b 5e  |MOV     r6,r0..^|
00001e30  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001e40  20 72 30 2c 23 30 0d 0b  68 26 20 20 20 20 20 20  | r0,#0..h&      |
00001e50  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 72 36  |  STR     r0,[r6|
00001e60  2c 23 73 75 72 66 5f 74  79 70 65 5d 0d 0b 72 23  |,#surf_type]..r#|
00001e70  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00001e80  72 30 2c 5b 72 36 2c 23  73 75 72 66 5f 6e 5d 0d  |r0,[r6,#surf_n].|
00001e90  0b 7c 21 20 20 20 20 20  20 20 20 a4 61 64 72 6c  |.|!        .adrl|
00001ea0  28 31 34 2c 6c 6f 61 64  5f 63 6f 6c 6f 75 72 29  |(14,load_colour)|
00001eb0  0d 0b 86 1c 20 20 20 20  20 20 20 20 4c 44 52 20  |....        LDR |
00001ec0  20 20 20 20 72 30 2c 5b  72 31 34 5d 0d 0b 90 28  |    r0,[r14]...(|
00001ed0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00001ee0  72 30 2c 5b 72 36 2c 23  73 75 72 66 5f 63 6f 6c  |r0,[r6,#surf_col|
00001ef0  6f 75 72 5d 0d 0b 9a 22  20 20 20 20 20 20 20 20  |our]..."        |
00001f00  4d 4f 56 20 20 20 20 20  72 30 2c 23 73 75 62 6f  |MOV     r0,#subo|
00001f10  62 6a 5f 72 65 71 0d 0b  a4 1a 20 20 20 20 20 20  |bj_req....      |
00001f20  20 20 42 4c 20 20 20 20  20 20 6d 61 6c 6c 6f 63  |  BL      malloc|
00001f30  0d 0b ae 1c 20 20 20 20  20 20 20 20 42 56 53 20  |....        BVS |
00001f40  20 20 20 20 6c 6f 61 64  5f 65 72 72 0d 0b b8 19  |    load_err....|
00001f50  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001f60  72 35 2c 72 30 0d 0b c2  23 20 20 20 20 20 20 20  |r5,r0...#       |
00001f70  20 41 44 44 20 20 20 20  20 72 33 2c 72 34 2c 23  | ADD     r3,r4,#|
00001f80  6f 62 6a 5f 6c 69 73 74  0d 0b cc 0d 2e 64 6f 5f  |obj_list.....do_|
00001f90  73 75 72 66 32 0d 0b d6  1b 20 20 20 20 20 20 20  |surf2....       |
00001fa0  20 4c 44 52 20 20 20 20  20 72 30 2c 5b 72 33 5d  | LDR     r0,[r3]|
00001fb0  0d 0b e0 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00001fc0  20 20 20 20 72 30 2c 23  30 0d 0b ea 26 20 20 20  |    r0,#0...&   |
00001fd0  20 20 20 20 20 41 44 44  4e 45 20 20 20 72 33 2c  |     ADDNE   r3,|
00001fe0  72 30 2c 23 73 75 62 6f  62 6a 5f 6e 65 78 74 0d  |r0,#subobj_next.|
00001ff0  0b f4 1c 20 20 20 20 20  20 20 20 42 4e 45 20 20  |...        BNE  |
00002000  20 20 20 64 6f 5f 73 75  72 66 32 0d 0b fe 1b 20  |   do_surf2.... |
00002010  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00002020  35 2c 5b 72 33 5d 0d 0c  08 19 20 20 20 20 20 20  |5,[r3]....      |
00002030  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 23 30 0d  |  MOV     r0,#0.|
00002040  0c 12 28 20 20 20 20 20  20 20 20 53 54 52 20 20  |..(        STR  |
00002050  20 20 20 72 30 2c 5b 72  35 2c 23 73 75 62 6f 62  |   r0,[r5,#subob|
00002060  6a 5f 6e 65 78 74 5d 0d  0c 1c 28 20 20 20 20 20  |j_next]...(     |
00002070  20 20 20 53 54 52 20 20  20 20 20 72 36 2c 5b 72  |   STR     r6,[r|
00002080  35 2c 23 73 75 62 6f 62  6a 5f 74 79 70 65 5d 0d  |5,#subobj_type].|
00002090  0c 26 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.&         MOV  |
000020a0  20 20 20 72 30 2c 23 62  69 74 5f 73 75 72 66 0d  |   r0,#bit_surf.|
000020b0  0c 30 29 20 20 20 20 20  20 20 20 53 54 52 20 20  |.0)        STR  |
000020c0  20 20 20 72 30 2c 5b 72  35 2c 23 73 75 62 6f 62  |   r0,[r5,#subob|
000020d0  6a 5f 66 6c 61 67 73 5d  0d 0c 3a 20 20 20 20 20  |j_flags]..:     |
000020e0  20 20 20 20 42 20 20 20  20 20 20 20 67 65 74 6c  |    B       getl|
000020f0  69 6e 65 5f 6c 6f 6f 70  0d 0c 44 0e 2e 64 6f 5f  |ine_loop..D..do_|
00002100  6f 62 6a 65 63 74 0d 0c  4e 1d 20 20 20 20 20 20  |object..N.      |
00002110  20 20 42 4c 20 20 20 20  20 20 66 6e 5f 67 65 74  |  BL      fn_get|
00002120  70 61 72 0d 0c 58 1a 20  20 20 20 20 20 20 20 4d  |par..X.        M|
00002130  4f 56 20 20 20 20 20 72  30 2c 72 31 31 0d 0c 62  |OV     r0,r11..b|
00002140  24 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |$        BL     |
00002150  20 69 64 65 6e 74 69 66  79 5f 6b 65 79 77 6f 72  | identify_keywor|
00002160  64 0d 0c 6c 19 20 20 20  20 20 20 20 20 43 4d 50  |d..l.        CMP|
00002170  20 20 20 20 20 72 30 2c  23 30 0d 0c 76 28 20 20  |     r0,#0..v(  |
00002180  20 20 20 20 20 20 41 44  52 47 45 20 20 20 72 30  |      ADRGE   r0|
00002190  2c 65 72 72 5f 64 65 66  69 6e 65 64 5f 74 77 69  |,err_defined_twi|
000021a0  63 65 0d 0c 80 1c 20 20  20 20 20 20 20 20 42 47  |ce....        BG|
000021b0  45 20 20 20 20 20 6c 6f  61 64 5f 65 72 72 0d 0c  |E     load_err..|
000021c0  8a 1f 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000021d0  20 20 72 30 2c 23 6f 62  6a 5f 72 65 71 0d 0c 94  |  r0,#obj_req...|
000021e0  1a 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
000021f0  20 6d 61 6c 6c 6f 63 0d  0c 9e 1c 20 20 20 20 20  | malloc....     |
00002200  20 20 20 42 56 53 20 20  20 20 20 6c 6f 61 64 5f  |   BVS     load_|
00002210  65 72 72 0d 0c a8 19 20  20 20 20 20 20 20 20 4d  |err....        M|
00002220  4f 56 20 20 20 20 20 72  34 2c 72 30 0d 0c b2 19  |OV     r4,r0....|
00002230  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002240  72 32 2c 23 30 0d 0c bc  0c 2e 64 6f 5f 6f 62 6a  |r2,#0.....do_obj|
00002250  32 0d 0c c6 1f 20 20 20  20 20 20 20 20 4c 44 52  |2....        LDR|
00002260  42 20 20 20 20 72 30 2c  5b 72 31 31 2c 72 32 5d  |B    r0,[r11,r2]|
00002270  0d 0c d0 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00002280  20 20 20 20 72 30 2c 23  97 22 20 22 0d 0c da 1c  |    r0,#." "....|
00002290  20 20 20 20 20 20 20 20  41 44 44 47 54 20 20 20  |        ADDGT   |
000022a0  72 32 2c 72 32 2c 23 31  0d 0c e4 1b 20 20 20 20  |r2,r2,#1....    |
000022b0  20 20 20 20 42 47 54 20  20 20 20 20 64 6f 5f 6f  |    BGT     do_o|
000022c0  62 6a 32 0d 0c ee 19 20  20 20 20 20 20 20 20 4d  |bj2....        M|
000022d0  4f 56 20 20 20 20 20 72  30 2c 72 32 0d 0c f8 1c  |OV     r0,r2....|
000022e0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000022f0  72 30 2c 72 30 2c 23 34  0d 0d 02 1c 20 20 20 20  |r0,r0,#4....    |
00002300  20 20 20 20 42 49 43 20  20 20 20 20 72 30 2c 72  |    BIC     r0,r|
00002310  30 2c 23 33 0d 0d 0c 1a  20 20 20 20 20 20 20 20  |0,#3....        |
00002320  42 4c 20 20 20 20 20 20  6d 61 6c 6c 6f 63 0d 0d  |BL      malloc..|
00002330  16 1c 20 20 20 20 20 20  20 20 42 56 53 20 20 20  |..        BVS   |
00002340  20 20 6c 6f 61 64 5f 65  72 72 0d 0d 20 19 20 20  |  load_err.. .  |
00002350  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 32  |      MOV     r2|
00002360  2c 72 30 0d 0d 2a 1a 20  20 20 20 20 20 20 20 4d  |,r0..*.        M|
00002370  4f 56 20 20 20 20 20 72  31 2c 72 31 31 0d 0d 34  |OV     r1,r11..4|
00002380  0c 2e 64 6f 5f 6f 62 6a  33 0d 0d 3e 1f 20 20 20  |..do_obj3..>.   |
00002390  20 20 20 20 20 4c 44 52  42 20 20 20 20 72 31 34  |     LDRB    r14|
000023a0  2c 5b 72 31 5d 2c 23 31  0d 0d 48 1d 20 20 20 20  |,[r1],#1..H.    |
000023b0  20 20 20 20 43 4d 50 20  20 20 20 20 72 31 34 2c  |    CMP     r14,|
000023c0  23 97 22 20 22 0d 0d 52  1a 20 20 20 20 20 20 20  |#." "..R.       |
000023d0  20 4d 4f 56 4c 45 20 20  20 72 31 34 2c 23 30 0d  | MOVLE   r14,#0.|
000023e0  0d 5c 1f 20 20 20 20 20  20 20 20 53 54 52 42 20  |.\.        STRB |
000023f0  20 20 20 72 31 34 2c 5b  72 30 5d 2c 23 31 0d 0d  |   r14,[r0],#1..|
00002400  66 1b 20 20 20 20 20 20  20 20 42 47 54 20 20 20  |f.        BGT   |
00002410  20 20 64 6f 5f 6f 62 6a  33 0d 0d 70 25 20 20 20  |  do_obj3..p%   |
00002420  20 20 20 20 20 53 54 52  20 20 20 20 20 72 32 2c  |     STR     r2,|
00002430  5b 72 34 2c 23 6f 62 6a  5f 6e 61 6d 65 5d 0d 0d  |[r4,#obj_name]..|
00002440  7a 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |z.        MOV   |
00002450  20 20 72 30 2c 23 30 0d  0d 84 25 20 20 20 20 20  |  r0,#0...%     |
00002460  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
00002470  34 2c 23 6f 62 6a 5f 6c  69 73 74 5d 0d 0d 8e 21  |4,#obj_list]...!|
00002480  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002490  72 30 2c 23 26 30 31 30  30 30 30 30 30 0d 0d 98  |r0,#&01000000...|
000024a0  1c 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
000024b0  20 72 30 2c 72 30 2c 23  31 0d 0d a2 21 20 20 20  | r0,r0,#1...!   |
000024c0  20 20 20 20 20 a4 61 64  72 6c 28 31 34 2c 6c 6f  |     .adrl(14,lo|
000024d0  61 64 5f 63 6f 6c 6f 75  72 29 0d 0d ac 1c 20 20  |ad_colour)....  |
000024e0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 30  |      STR     r0|
000024f0  2c 5b 72 31 34 5d 0d 0d  b6 04 0d 0d c0 20 20 20  |,[r14].......   |
00002500  20 20 20 20 20 20 a4 61  64 72 6c 28 31 34 2c 6c  |      .adrl(14,l|
00002510  6f 61 64 5f 74 61 62 6c  65 29 0d 0d ca 1f 20 20  |oad_table)....  |
00002520  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 72 31  |      LDMIA   r1|
00002530  34 2c 7b 72 30 2d 72 32  7d 0d 0d d4 19 20 20 20  |4,{r0-r2}....   |
00002540  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00002550  23 30 0d 0d de 21 20 20  20 20 20 20 20 20 42 45  |#0...!        BE|
00002560  51 20 20 20 20 20 6e 6f  5f 6c 6f 61 64 5f 74 61  |Q     no_load_ta|
00002570  62 6c 65 0d 0d e8 19 20  20 20 20 20 20 20 20 43  |ble....        C|
00002580  4d 50 20 20 20 20 20 72  32 2c 72 31 0d 0d f2 23  |MP     r2,r1...#|
00002590  20 20 20 20 20 20 20 20  41 44 52 47 45 20 20 20  |        ADRGE   |
000025a0  72 30 2c 65 72 72 5f 74  6f 6f 5f 6d 61 6e 79 0d  |r0,err_too_many.|
000025b0  0d fc 1c 20 20 20 20 20  20 20 20 42 47 45 20 20  |...        BGE  |
000025c0  20 20 20 6c 6f 61 64 5f  65 72 72 0d 0e 06 25 20  |   load_err...% |
000025d0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
000025e0  34 2c 5b 72 30 2c 72 32  2c 4c 53 4c 20 23 32 5d  |4,[r0,r2,LSL #2]|
000025f0  0d 0e 10 1c 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00002600  20 20 20 20 72 32 2c 72  32 2c 23 31 0d 0e 1a 1f  |    r2,r2,#1....|
00002610  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00002620  72 32 2c 5b 72 31 34 2c  23 38 5d 0d 0e 24 12 2e  |r2,[r14,#8]..$..|
00002630  6e 6f 5f 6c 6f 61 64 5f  74 61 62 6c 65 0d 0e 2e  |no_load_table...|
00002640  04 0d 0e 38 25 20 20 20  20 20 20 20 20 4c 44 52  |...8%        LDR|
00002650  20 20 20 20 20 72 30 2c  5b 72 34 2c 23 6f 62 6a  |     r0,[r4,#obj|
00002660  5f 6e 61 6d 65 5d 0d 0e  42 19 20 20 20 20 20 20  |_name]..B.      |
00002670  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 72 34 0d  |  MOV     r1,r4.|
00002680  0e 4c 27 20 20 20 20 20  20 20 20 42 4c 20 20 20  |.L'        BL   |
00002690  20 20 20 61 64 64 5f 6b  65 79 77 6f 72 64 5f 74  |   add_keyword_t|
000026a0  6f 5f 6c 69 73 74 0d 0e  56 1c 20 20 20 20 20 20  |o_list..V.      |
000026b0  20 20 42 56 53 20 20 20  20 20 6c 6f 61 64 5f 65  |  BVS     load_e|
000026c0  72 72 0d 0e 60 20 20 20  20 20 20 20 20 20 42 20  |rr..`         B |
000026d0  20 20 20 20 20 20 67 65  74 6c 69 6e 65 5f 6c 6f  |      getline_lo|
000026e0  6f 70 0d 0e 6a 11 2e 75  73 65 72 5f 6b 65 79 77  |op..j..user_keyw|
000026f0  6f 72 64 0d 0e 74 22 20  20 20 20 20 20 20 20 4d  |ord..t"        M|
00002700  4f 56 20 20 20 20 20 72  30 2c 23 73 75 62 6f 62  |OV     r0,#subob|
00002710  6a 5f 72 65 71 0d 0e 7e  1a 20 20 20 20 20 20 20  |j_req..~.       |
00002720  20 42 4c 20 20 20 20 20  20 6d 61 6c 6c 6f 63 0d  | BL      malloc.|
00002730  0e 88 1c 20 20 20 20 20  20 20 20 42 56 53 20 20  |...        BVS  |
00002740  20 20 20 6c 6f 61 64 5f  65 72 72 0d 0e 92 19 20  |   load_err.... |
00002750  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00002760  33 2c 72 30 0d 0e 9c 23  20 20 20 20 20 20 20 20  |3,r0...#        |
00002770  41 44 44 20 20 20 20 20  72 32 2c 72 34 2c 23 6f  |ADD     r2,r4,#o|
00002780  62 6a 5f 6c 69 73 74 0d  0e a6 0a 2e 75 73 65 72  |bj_list.....user|
00002790  31 0d 0e b0 1b 20 20 20  20 20 20 20 20 4c 44 52  |1....        LDR|
000027a0  20 20 20 20 20 72 30 2c  5b 72 32 5d 0d 0e ba 19  |     r0,[r2]....|
000027b0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
000027c0  72 30 2c 23 30 0d 0e c4  26 20 20 20 20 20 20 20  |r0,#0...&       |
000027d0  20 41 44 44 4e 45 20 20  20 72 32 2c 72 30 2c 23  | ADDNE   r2,r0,#|
000027e0  73 75 62 6f 62 6a 5f 6e  65 78 74 0d 0e ce 19 20  |subobj_next.... |
000027f0  20 20 20 20 20 20 20 42  4e 45 20 20 20 20 20 75  |       BNE     u|
00002800  73 65 72 31 0d 0e d8 1b  20 20 20 20 20 20 20 20  |ser1....        |
00002810  53 54 52 20 20 20 20 20  72 33 2c 5b 72 32 5d 0d  |STR     r3,[r2].|
00002820  0e e2 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00002830  20 20 20 72 30 2c 23 30  0d 0e ec 28 20 20 20 20  |   r0,#0...(    |
00002840  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
00002850  72 33 2c 23 73 75 62 6f  62 6a 5f 6e 65 78 74 5d  |r3,#subobj_next]|
00002860  0d 0e f6 28 20 20 20 20  20 20 20 20 53 54 52 20  |...(        STR |
00002870  20 20 20 20 72 31 2c 5b  72 33 2c 23 73 75 62 6f  |    r1,[r3,#subo|
00002880  62 6a 5f 74 79 70 65 5d  0d 0f 00 19 20 20 20 20  |bj_type]....    |
00002890  20 20 20 20 4d 4f 56 20  20 20 20 20 72 32 2c 23  |    MOV     r2,#|
000028a0  33 0d 0f 0a 28 20 20 20  20 20 20 20 20 41 44 44  |3...(        ADD|
000028b0  20 20 20 20 20 72 31 2c  72 33 2c 23 73 75 62 6f  |     r1,r3,#subo|
000028c0  62 6a 5f 6f 66 66 73 65  74 0d 0f 14 1d 2e 75 73  |bj_offset.....us|
000028d0  65 72 32 20 20 42 4c 20  20 20 20 20 20 66 6e 5f  |er2  BL      fn_|
000028e0  67 65 74 6e 75 6d 0d 0f  1e 1e 20 20 20 20 20 20  |getnum....      |
000028f0  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 72 31  |  STR     r0,[r1|
00002900  5d 2c 23 34 0d 0f 28 1c  20 20 20 20 20 20 20 20  |],#4..(.        |
00002910  53 55 42 53 20 20 20 20  72 32 2c 72 32 2c 23 31  |SUBS    r2,r2,#1|
00002920  0d 0f 32 19 20 20 20 20  20 20 20 20 42 4e 45 20  |..2.        BNE |
00002930  20 20 20 20 75 73 65 72  32 0d 0f 3c 20 20 20 20  |    user2..<    |
00002940  20 20 20 20 20 a4 61 64  72 6c 28 31 34 2c 6c 6f  |     .adrl(14,lo|
00002950  61 64 5f 73 63 61 6c 65  29 0d 0f 46 1c 20 20 20  |ad_scale)..F.   |
00002960  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00002970  5b 72 31 34 5d 0d 0f 50  1e 20 20 20 20 20 20 20  |[r14]..P.       |
00002980  20 53 54 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | STMFD   (sp)!,{|
00002990  72 30 7d 0d 0f 5a 20 20  20 20 20 20 20 20 20 4c  |r0}..Z         L|
000029a0  44 52 20 20 20 20 20 72  30 2c 61 6e 67 5f 73 63  |DR     r0,ang_sc|
000029b0  61 6c 65 0d 0f 64 1c 20  20 20 20 20 20 20 20 53  |ale..d.        S|
000029c0  54 52 20 20 20 20 20 72  30 2c 5b 72 31 34 5d 0d  |TR     r0,[r14].|
000029d0  0f 6e 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.n.        MOV  |
000029e0  20 20 20 72 32 2c 23 33  0d 0f 78 27 20 20 20 20  |   r2,#3..x'    |
000029f0  20 20 20 20 41 44 44 20  20 20 20 20 72 31 2c 72  |    ADD     r1,r|
00002a00  33 2c 23 73 75 62 6f 62  6a 5f 61 6e 67 6c 65 0d  |3,#subobj_angle.|
00002a10  0f 82 1d 2e 75 73 65 72  33 20 20 42 4c 20 20 20  |....user3  BL   |
00002a20  20 20 20 66 6e 5f 67 65  74 6e 75 6d 0d 0f 8c 1e  |   fn_getnum....|
00002a30  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00002a40  72 30 2c 5b 72 31 5d 2c  23 34 0d 0f 96 1c 20 20  |r0,[r1],#4....  |
00002a50  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 32  |      SUBS    r2|
00002a60  2c 72 32 2c 23 31 0d 0f  a0 19 20 20 20 20 20 20  |,r2,#1....      |
00002a70  20 20 42 4e 45 20 20 20  20 20 75 73 65 72 33 0d  |  BNE     user3.|
00002a80  0f aa 1e 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |...        LDMFD|
00002a90  20 20 20 28 73 70 29 21  2c 7b 72 30 7d 0d 0f b4  |   (sp)!,{r0}...|
00002aa0  20 20 20 20 20 20 20 20  20 a4 61 64 72 6c 28 31  |         .adrl(1|
00002ab0  34 2c 6c 6f 61 64 5f 73  63 61 6c 65 29 0d 0f be  |4,load_scale)...|
00002ac0  1c 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
00002ad0  20 72 30 2c 5b 72 31 34  5d 0d 0f c8 04 0d 0f d2  | r0,[r14].......|
00002ae0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002af0  20 72 32 2c 23 30 0d 0f  dc 0a 2e 75 73 65 72 34  | r2,#0.....user4|
00002b00  0d 0f e6 1d 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00002b10  20 20 20 20 66 6e 5f 67  65 74 70 61 72 0d 0f f0  |    fn_getpar...|
00002b20  1a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002b30  20 72 30 2c 72 31 31 0d  0f fa 24 20 20 20 20 20  | r0,r11...$     |
00002b40  20 20 20 42 4c 20 20 20  20 20 20 69 64 65 6e 74  |   BL      ident|
00002b50  69 66 79 5f 6b 65 79 77  6f 72 64 0d 10 04 19 20  |ify_keyword.... |
00002b60  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00002b70  30 2c 23 35 0d 10 0e 23  20 20 20 20 20 20 20 20  |0,#5...#        |
00002b80  84 52 45 51 20 20 20 72  32 2c 72 32 2c 23 62 69  |.REQ   r2,r2,#bi|
00002b90  74 5f 6d 65 72 67 65 0d  10 18 19 20 20 20 20 20  |t_merge....     |
00002ba0  20 20 20 42 45 51 20 20  20 20 20 75 73 65 72 34  |   BEQ     user4|
00002bb0  0d 10 22 19 20 20 20 20  20 20 20 20 43 4d 50 20  |..".        CMP |
00002bc0  20 20 20 20 72 30 2c 23  36 0d 10 2c 24 20 20 20  |    r0,#6..,$   |
00002bd0  20 20 20 20 20 84 52 45  51 20 20 20 72 32 2c 72  |     .REQ   r2,r|
00002be0  32 2c 23 62 69 74 5f 63  6c 6f 73 65 64 0d 10 36  |2,#bit_closed..6|
00002bf0  19 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |.        BEQ    |
00002c00  20 75 73 65 72 34 0d 10  40 29 20 20 20 20 20 20  | user4..@)      |
00002c10  20 20 53 54 52 20 20 20  20 20 72 32 2c 5b 72 33  |  STR     r2,[r3|
00002c20  2c 23 73 75 62 6f 62 6a  5f 66 6c 61 67 73 5d 0d  |,#subobj_flags].|
00002c30  10 4a 20 20 20 20 20 20  20 20 20 42 20 20 20 20  |.J         B    |
00002c40  20 20 20 67 65 74 6c 69  6e 65 5f 6c 6f 6f 70 0d  |   getline_loop.|
00002c50  10 54 04 0d 10 5e 0e 2e  61 6e 67 5f 73 63 61 6c  |.T...^..ang_scal|
00002c60  65 0d 10 68 1e 20 20 20  20 20 20 20 20 44 43 44  |e..h.        DCD|
00002c70  20 20 20 20 20 26 31 30  30 30 30 2f 33 36 30 0d  |     &10000/360.|
00002c80  10 72 04 0d 10 7c 1a 2e  69 73 5f 65 6f 66 20 4d  |.r...|..is_eof M|
00002c90  4f 56 20 20 20 20 20 72  30 2c 72 31 31 0d 10 86  |OV     r0,r11...|
00002ca0  18 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
00002cb0  20 66 72 65 65 0d 10 90  1b 20 20 20 20 20 20 20  | free....       |
00002cc0  20 4d 4f 56 20 20 20 20  20 72 30 2c 23 26 30 30  | MOV     r0,#&00|
00002cd0  0d 10 9a 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00002ce0  20 20 20 20 72 31 2c 72  31 30 0d 10 a4 1e 20 20  |    r1,r10....  |
00002cf0  20 20 20 20 20 20 53 57  49 20 20 20 20 20 22 58  |      SWI     "X|
00002d00  4f 53 5f 46 69 6e 64 22  0d 10 ae 25 20 20 20 20  |OS_Find"...%    |
00002d10  20 20 20 20 4c 44 4d 46  44 20 20 20 28 73 70 29  |    LDMFD   (sp)|
00002d20  21 2c 7b 72 30 2d 72 31  31 2c 70 63 7d 0d 10 b8  |!,{r0-r11,pc}...|
00002d30  0d 2e 6c 6f 61 64 5f 65  72 72 0d 10 c2 1b 20 20  |..load_err....  |
00002d40  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 30  |      STR     r0|
00002d50  2c 5b 73 70 5d 0d 10 cc  1a 20 20 20 20 20 20 20  |,[sp]....       |
00002d60  20 4d 4f 56 20 20 20 20  20 72 30 2c 72 31 31 0d  | MOV     r0,r11.|
00002d70  10 d6 18 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00002d80  20 20 20 66 72 65 65 0d  10 e0 1b 20 20 20 20 20  |   free....     |
00002d90  20 20 20 4d 4f 56 20 20  20 20 20 72 30 2c 23 26  |   MOV     r0,#&|
00002da0  30 30 0d 10 ea 1a 20 20  20 20 20 20 20 20 4d 4f  |00....        MO|
00002db0  56 20 20 20 20 20 72 31  2c 72 31 30 0d 10 f4 1e  |V     r1,r10....|
00002dc0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
00002dd0  22 58 4f 53 5f 46 69 6e  64 22 0d 10 fe 27 20 20  |"XOS_Find"...'  |
00002de0  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00002df0  70 29 21 2c 7b 72 30 2d  72 31 31 2c 6c 69 6e 6b  |p)!,{r0-r11,link|
00002e00  7d 0d 11 08 21 20 20 20  20 20 20 20 20 84 52 53  |}...!        .RS|
00002e10  20 20 20 20 70 63 2c 6c  69 6e 6b 2c 23 31 3c 3c  |    pc,link,#1<<|
00002e20  32 38 0d 11 12 04 0d 11  1c 18 2e 65 72 72 5f 75  |28.........err_u|
00002e30  6e 6b 6e 6f 77 6e 5f 6b  65 79 77 6f 72 64 0d 11  |nknown_keyword..|
00002e40  26 15 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |&.        DCD   |
00002e50  20 20 30 0d 11 30 21 20  20 20 20 20 20 20 20 a4  |  0..0!        .|
00002e60  7a 28 22 55 6e 6b 6e 6f  77 6e 20 6b 65 79 77 6f  |z("Unknown keywo|
00002e70  72 64 22 29 0d 11 3a 04  0d 11 44 16 2e 65 72 72  |rd")..:...D..err|
00002e80  5f 64 65 66 69 6e 65 64  5f 74 77 69 63 65 0d 11  |_defined_twice..|
00002e90  4e 15 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |N.        DCD   |
00002ea0  20 20 30 0d 11 58 27 20  20 20 20 20 20 20 20 a4  |  0..X'        .|
00002eb0  7a 28 22 4b 65 79 77 6f  72 64 20 64 65 66 69 6e  |z("Keyword defin|
00002ec0  65 64 20 74 77 69 63 65  22 29 0d 11 62 04 0d 11  |ed twice")..b...|
00002ed0  6c 11 2e 65 72 72 5f 74  6f 6f 5f 6d 61 6e 79 0d  |l..err_too_many.|
00002ee0  11 76 15 20 20 20 20 20  20 20 20 44 43 44 20 20  |.v.        DCD  |
00002ef0  20 20 20 30 0d 11 80 22  20 20 20 20 20 20 20 20  |   0..."        |
00002f00  a4 7a 28 22 54 6f 6f 20  6d 61 6e 79 20 6f 62 6a  |.z("Too many obj|
00002f10  65 63 74 73 22 29 0d 11  8a 04 0d 11 94 0e 2e 66  |ects").........f|
00002f20  6e 5f 67 65 74 6e 75 6d  0d 11 9e 27 20 20 20 20  |n_getnum...'    |
00002f30  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00002f40  21 2c 7b 72 31 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r1-r11,link}.|
00002f50  11 a8 1d 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00002f60  20 20 20 66 6e 5f 67 65  74 70 61 72 0d 11 b2 1a  |   fn_getpar....|
00002f70  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002f80  72 34 2c 72 31 31 0d 11  bc 1b 20 20 20 20 20 20  |r4,r11....      |
00002f90  20 20 4c 44 52 42 20 20  20 20 72 30 2c 5b 72 34  |  LDRB    r0,[r4|
00002fa0  5d 0d 11 c6 1c 20 20 20  20 20 20 20 20 43 4d 50  |]....        CMP|
00002fb0  20 20 20 20 20 72 30 2c  23 97 22 2d 22 0d 11 d0  |     r0,#."-"...|
00002fc0  16 20 20 20 20 20 20 20  20 ec 51 20 20 20 72 36  |.        .Q   r6|
00002fd0  2c 23 31 0d 11 da 1c 20  20 20 20 20 20 20 20 41  |,#1....        A|
00002fe0  44 44 45 51 20 20 20 72  34 2c 72 34 2c 23 31 0d  |DDEQ   r4,r4,#1.|
00002ff0  11 e4 19 20 20 20 20 20  20 20 20 4d 4f 56 4e 45  |...        MOVNE|
00003000  20 20 20 72 36 2c 23 30  0d 11 ee 19 20 20 20 20  |   r6,#0....    |
00003010  20 20 20 20 4d 4f 56 20  20 20 20 20 72 37 2c 23  |    MOV     r7,#|
00003020  30 0d 11 f8 19 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
00003030  20 20 20 20 20 72 35 2c  23 30 0d 12 02 1a 20 20  |     r5,#0....  |
00003040  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 33  |      MOV     r3|
00003050  2c 23 31 30 0d 12 0c 13  2e 66 6e 5f 67 65 74 6e  |,#10.....fn_getn|
00003060  75 6d 5f 6c 6f 6f 70 0d  12 16 1e 20 20 20 20 20  |um_loop....     |
00003070  20 20 20 4c 44 52 42 20  20 20 20 72 30 2c 5b 72  |   LDRB    r0,[r|
00003080  34 5d 2c 23 31 0d 12 20  1c 20 20 20 20 20 20 20  |4],#1.. .       |
00003090  20 43 4d 50 20 20 20 20  20 72 30 2c 23 97 22 2e  | CMP     r0,#.".|
000030a0  22 0d 12 2a 16 20 20 20  20 20 20 20 20 ec 51 20  |"..*.        .Q |
000030b0  20 20 72 35 2c 23 31 0d  12 34 22 20 20 20 20 20  |  r5,#1..4"     |
000030c0  20 20 20 42 45 51 20 20  20 20 20 66 6e 5f 67 65  |   BEQ     fn_ge|
000030d0  74 6e 75 6d 5f 6c 6f 6f  70 0d 12 3e 1c 20 20 20  |tnum_loop..>.   |
000030e0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
000030f0  23 97 22 30 22 0d 12 48  1b 20 20 20 20 20 20 20  |#."0"..H.       |
00003100  20 42 4c 54 20 20 20 20  20 67 6f 74 5f 6e 75 6d  | BLT     got_num|
00003110  0d 12 52 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |..R.        CMP |
00003120  20 20 20 20 72 30 2c 23  97 22 39 22 0d 12 5c 1b  |    r0,#."9"..\.|
00003130  20 20 20 20 20 20 20 20  42 47 54 20 20 20 20 20  |        BGT     |
00003140  67 6f 74 5f 6e 75 6d 0d  12 66 1f 20 20 20 20 20  |got_num..f.     |
00003150  20 20 20 53 55 42 20 20  20 20 20 72 30 2c 72 30  |   SUB     r0,r0|
00003160  2c 23 97 22 30 22 0d 12  70 1f 20 20 20 20 20 20  |,#."0"..p.      |
00003170  20 20 4d 4c 41 20 20 20  20 20 72 37 2c 72 33 2c  |  MLA     r7,r3,|
00003180  72 37 2c 72 30 0d 12 7a  19 20 20 20 20 20 20 20  |r7,r0..z.       |
00003190  20 43 4d 50 20 20 20 20  20 72 35 2c 23 30 0d 12  | CMP     r5,#0..|
000031a0  84 1c 20 20 20 20 20 20  20 20 4d 55 4c 4e 45 20  |..        MULNE |
000031b0  20 20 72 35 2c 72 33 2c  72 35 0d 12 8e 22 20 20  |  r5,r3,r5..."  |
000031c0  20 20 20 20 20 20 42 20  20 20 20 20 20 20 66 6e  |      B       fn|
000031d0  5f 67 65 74 6e 75 6d 5f  6c 6f 6f 70 0d 12 98 0c  |_getnum_loop....|
000031e0  2e 67 6f 74 5f 6e 75 6d  0d 12 a2 19 20 20 20 20  |.got_num....    |
000031f0  20 20 20 20 43 4d 50 20  20 20 20 20 72 36 2c 23  |    CMP     r6,#|
00003200  30 0d 12 ac 1c 20 20 20  20 20 20 20 20 52 53 42  |0....        RSB|
00003210  4e 45 20 20 20 72 37 2c  72 37 2c 23 30 0d 12 b6  |NE   r7,r7,#0...|
00003220  20 20 20 20 20 20 20 20  20 a4 61 64 72 6c 28 31  |         .adrl(1|
00003230  34 2c 6c 6f 61 64 5f 73  63 61 6c 65 29 0d 12 c0  |4,load_scale)...|
00003240  1d 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00003250  20 72 31 34 2c 5b 72 31  34 5d 0d 12 ca 1d 20 20  | r14,[r14]....  |
00003260  20 20 20 20 20 20 4d 55  4c 20 20 20 20 20 72 30  |      MUL     r0|
00003270  2c 72 37 2c 72 31 34 0d  12 d4 19 20 20 20 20 20  |,r7,r14....     |
00003280  20 20 20 43 4d 50 20 20  20 20 20 72 35 2c 23 30  |   CMP     r5,#0|
00003290  0d 12 de 25 20 20 20 20  20 20 20 20 4c 44 4d 45  |...%        LDME|
000032a0  51 46 44 20 28 73 70 29  21 2c 7b 72 31 2d 72 31  |QFD (sp)!,{r1-r1|
000032b0  31 2c 70 63 7d 0d 12 e8  19 20 20 20 20 20 20 20  |1,pc}....       |
000032c0  20 4d 4f 56 20 20 20 20  20 72 31 2c 72 35 0d 12  | MOV     r1,r5..|
000032d0  f2 1a 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
000032e0  20 20 64 69 76 69 64 65  0d 12 fc 19 20 20 20 20  |  divide....    |
000032f0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 72  |    MOV     r0,r|
00003300  32 0d 13 06 25 20 20 20  20 20 20 20 20 4c 44 4d  |2...%        LDM|
00003310  46 44 20 20 20 28 73 70  29 21 2c 7b 72 31 2d 72  |FD   (sp)!,{r1-r|
00003320  31 31 2c 70 63 7d 0d 13  10 04 0d 13 1a 0e 2e 66  |11,pc}.........f|
00003330  6e 5f 67 65 74 70 61 72  0d 13 24 27 20 20 20 20  |n_getpar..$'    |
00003340  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00003350  21 2c 7b 72 30 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r0-r11,link}.|
00003360  13 2e 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00003370  20 20 20 72 34 2c 72 31  31 0d 13 38 20 20 20 20  |   r4,r11..8    |
00003380  20 20 20 20 20 41 44 44  20 20 20 20 20 72 35 2c  |     ADD     r5,|
00003390  72 31 31 2c 23 26 31 30  30 0d 13 42 13 2e 66 6e  |r11,#&100..B..fn|
000033a0  5f 67 65 74 70 61 72 5f  6c 6f 6f 70 0d 13 4c 1e  |_getpar_loop..L.|
000033b0  20 20 20 20 20 20 20 20  4c 44 52 42 20 20 20 20  |        LDRB    |
000033c0  72 30 2c 5b 72 35 5d 2c  23 31 0d 13 56 1c 20 20  |r0,[r5],#1..V.  |
000033d0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
000033e0  2c 23 97 22 41 22 0d 13  60 1a 20 20 20 20 20 20  |,#."A"..`.      |
000033f0  20 20 42 4c 54 20 20 20  20 20 6e 6f 74 5f 75 63  |  BLT     not_uc|
00003400  0d 13 6a 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |..j.        CMP |
00003410  20 20 20 20 72 30 2c 23  97 22 5a 22 0d 13 74 24  |    r0,#."Z"..t$|
00003420  20 20 20 20 20 20 20 20  41 44 44 4c 45 20 20 20  |        ADDLE   |
00003430  72 30 2c 72 30 2c 23 97  22 61 22 2d 97 22 41 22  |r0,r0,#."a"-."A"|
00003440  0d 13 7e 0b 2e 6e 6f 74  5f 75 63 0d 13 88 1c 20  |..~..not_uc.... |
00003450  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00003460  30 2c 23 97 22 2c 22 0d  13 92 19 20 20 20 20 20  |0,#.","....     |
00003470  20 20 20 ec 51 20 20 20  72 30 2c 23 97 22 20 22  |   .Q   r0,#." "|
00003480  0d 13 9c 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00003490  20 20 20 20 72 30 2c 23  97 22 20 22 0d 13 a6 19  |    r0,#." "....|
000034a0  20 20 20 20 20 20 20 20  4d 4f 56 4c 45 20 20 20  |        MOVLE   |
000034b0  72 30 2c 23 30 0d 13 b0  1e 20 20 20 20 20 20 20  |r0,#0....       |
000034c0  20 53 54 52 42 20 20 20  20 72 30 2c 5b 72 34 5d  | STRB    r0,[r4]|
000034d0  2c 23 31 0d 13 ba 22 20  20 20 20 20 20 20 20 42  |,#1..."        B|
000034e0  47 54 20 20 20 20 20 66  6e 5f 67 65 74 70 61 72  |GT     fn_getpar|
000034f0  5f 6c 6f 6f 70 0d 13 c4  20 20 20 20 20 20 20 20  |_loop...        |
00003500  20 41 44 44 20 20 20 20  20 72 31 2c 72 31 31 2c  | ADD     r1,r11,|
00003510  23 26 31 30 30 0d 13 ce  19 20 20 20 20 20 20 20  |#&100....       |
00003520  20 4d 4f 56 20 20 20 20  20 72 30 2c 72 35 0d 13  | MOV     r0,r5..|
00003530  d8 1c 20 20 20 20 20 20  20 20 42 4c 20 20 20 20  |..        BL    |
00003540  20 20 66 6e 5f 73 74 72  69 70 0d 13 e2 25 20 20  |  fn_strip...%  |
00003550  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00003560  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00003570  13 ec 04 0d 13 f6 0f 2e  66 6e 5f 67 65 74 6c 69  |........fn_getli|
00003580  6e 65 0d 14 00 27 20 20  20 20 20 20 20 20 53 54  |ne...'        ST|
00003590  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
000035a0  72 31 31 2c 6c 69 6e 6b  7d 0d 14 0a 19 20 20 20  |r11,link}....   |
000035b0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 35 2c  |     MOV     r5,|
000035c0  72 30 0d 14 14 14 2e 66  6e 5f 67 65 74 6c 69 6e  |r0.....fn_getlin|
000035d0  65 5f 6c 6f 6f 70 0d 14  1e 1a 20 20 20 20 20 20  |e_loop....      |
000035e0  20 20 4d 4f 56 20 20 20  20 20 72 31 2c 72 31 30  |  MOV     r1,r10|
000035f0  0d 14 28 1e 20 20 20 20  20 20 20 20 53 57 49 20  |..(.        SWI |
00003600  20 20 20 20 22 58 4f 53  5f 42 47 65 74 22 0d 14  |    "XOS_BGet"..|
00003610  32 1c 20 20 20 20 20 20  20 20 42 43 53 20 20 20  |2.        BCS   |
00003620  20 20 67 6f 74 5f 6c 69  6e 65 0d 14 3c 1a 20 20  |  got_line..<.  |
00003630  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00003640  2c 23 33 32 0d 14 46 1e  20 20 20 20 20 20 20 20  |,#32..F.        |
00003650  53 54 52 47 45 42 20 20  72 30 2c 5b 72 35 5d 2c  |STRGEB  r0,[r5],|
00003660  23 31 0d 14 50 23 20 20  20 20 20 20 20 20 42 47  |#1..P#        BG|
00003670  45 20 20 20 20 20 66 6e  5f 67 65 74 6c 69 6e 65  |E     fn_getline|
00003680  5f 6c 6f 6f 70 0d 14 5a  0d 2e 67 6f 74 5f 6c 69  |_loop..Z..got_li|
00003690  6e 65 0d 14 64 19 20 20  20 20 20 20 20 20 4d 4f  |ne..d.        MO|
000036a0  56 20 20 20 20 20 72 30  2c 23 30 0d 14 6e 1b 20  |V     r0,#0..n. |
000036b0  20 20 20 20 20 20 20 53  54 52 42 20 20 20 20 72  |       STRB    r|
000036c0  30 2c 5b 72 35 5d 0d 14  78 25 20 20 20 20 20 20  |0,[r5]..x%      |
000036d0  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
000036e0  7b 72 30 2d 72 31 31 2c  70 63 7d 0d 14 82 04 0d  |{r0-r11,pc}.....|
000036f0  14 8c 0d 2e 66 6e 5f 73  74 72 69 70 0d 14 96 27  |....fn_strip...'|
00003700  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00003710  28 73 70 29 21 2c 7b 72  30 2d 72 31 31 2c 6c 69  |(sp)!,{r0-r11,li|
00003720  6e 6b 7d 0d 14 a0 1c 2e  73 74 72 69 70 31 20 4c  |nk}.....strip1 L|
00003730  44 52 42 20 20 20 20 72  31 34 2c 5b 72 30 5d 0d  |DRB    r14,[r0].|
00003740  14 aa 1d 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00003750  20 20 20 72 31 34 2c 23  97 22 20 22 0d 14 b4 1c  |   r14,#." "....|
00003760  20 20 20 20 20 20 20 20  41 44 44 45 51 20 20 20  |        ADDEQ   |
00003770  72 30 2c 72 30 2c 23 31  0d 14 be 1a 20 20 20 20  |r0,r0,#1....    |
00003780  20 20 20 20 42 45 51 20  20 20 20 20 73 74 72 69  |    BEQ     stri|
00003790  70 31 0d 14 c8 19 20 20  20 20 20 20 20 20 4d 4f  |p1....        MO|
000037a0  56 20 20 20 20 20 72 32  2c 72 31 0d 14 d2 1f 2e  |V     r2,r1.....|
000037b0  73 74 72 69 70 32 20 4c  44 52 42 20 20 20 20 72  |strip2 LDRB    r|
000037c0  31 34 2c 5b 72 30 5d 2c  23 31 0d 14 dc 1f 20 20  |14,[r0],#1....  |
000037d0  20 20 20 20 20 20 53 54  52 42 20 20 20 20 72 31  |      STRB    r1|
000037e0  34 2c 5b 72 31 5d 2c 23  31 0d 14 e6 1d 20 20 20  |4,[r1],#1....   |
000037f0  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 31 34  |     CMP     r14|
00003800  2c 23 97 22 20 22 0d 14  f0 19 20 20 20 20 20 20  |,#." "....      |
00003810  20 20 4d 4f 56 4e 45 20  20 20 72 32 2c 72 31 0d  |  MOVNE   r2,r1.|
00003820  14 fa 1b 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00003830  20 20 20 72 31 34 2c 23  33 32 0d 15 04 1a 20 20  |   r14,#32....  |
00003840  20 20 20 20 20 20 42 47  45 20 20 20 20 20 73 74  |      BGE     st|
00003850  72 69 70 32 0d 15 0e 1a  20 20 20 20 20 20 20 20  |rip2....        |
00003860  4d 4f 56 20 20 20 20 20  72 31 34 2c 23 30 0d 15  |MOV     r14,#0..|
00003870  18 1c 20 20 20 20 20 20  20 20 53 54 52 42 20 20  |..        STRB  |
00003880  20 20 72 31 34 2c 5b 72  32 5d 0d 15 22 25 20 20  |  r14,[r2].."%  |
00003890  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
000038a0  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
000038b0  15 2c 04 0d 15 36 15 2e  69 64 65 6e 74 69 66 79  |.,...6..identify|
000038c0  5f 6b 65 79 77 6f 72 64  0d 15 40 27 20 20 20 20  |_keyword..@'    |
000038d0  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
000038e0  21 2c 7b 72 32 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r2-r11,link}.|
000038f0  15 4a 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.J.        MOV  |
00003900  20 20 20 72 37 2c 72 30  0d 15 54 19 20 20 20 20  |   r7,r0..T.    |
00003910  20 20 20 20 4d 4f 56 20  20 20 20 20 72 34 2c 23  |    MOV     r4,#|
00003920  30 0d 15 5e 19 20 20 20  20 20 20 20 20 4d 4f 56  |0..^.        MOV|
00003930  20 20 20 20 20 72 35 2c  72 38 0d 15 68 0c 2e 69  |     r5,r8..h..i|
00003940  64 5f 6c 6f 6f 70 0d 15  72 19 20 20 20 20 20 20  |d_loop..r.      |
00003950  20 20 43 4d 50 20 20 20  20 20 72 35 2c 23 30 0d  |  CMP     r5,#0.|
00003960  15 7c 19 20 20 20 20 20  20 20 20 4d 56 4e 45 51  |.|.        MVNEQ|
00003970  20 20 20 72 30 2c 23 30  0d 15 86 16 20 20 20 20  |   r0,#0....    |
00003980  20 20 20 20 ec 51 20 20  20 72 31 2c 23 30 0d 15  |    .Q   r1,#0..|
00003990  90 25 20 20 20 20 20 20  20 20 4c 44 4d 45 51 46  |.%        LDMEQF|
000039a0  44 20 28 73 70 29 21 2c  7b 72 32 2d 72 31 31 2c  |D (sp)!,{r2-r11,|
000039b0  70 63 7d 0d 15 9a 29 20  20 20 20 20 20 20 20 4c  |pc}...)        L|
000039c0  44 52 20 20 20 20 20 72  32 2c 5b 72 35 2c 23 6b  |DR     r2,[r5,#k|
000039d0  65 79 77 6f 72 64 5f 6e  61 6d 65 5d 0d 15 a4 19  |eyword_name]....|
000039e0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000039f0  72 33 2c 72 37 0d 15 ae  0f 2e 69 64 5f 63 6f 6d  |r3,r7.....id_com|
00003a00  70 61 72 65 0d 15 b8 1e  20 20 20 20 20 20 20 20  |pare....        |
00003a10  4c 44 52 42 20 20 20 20  72 30 2c 5b 72 32 5d 2c  |LDRB    r0,[r2],|
00003a20  23 31 0d 15 c2 1e 20 20  20 20 20 20 20 20 4c 44  |#1....        LD|
00003a30  52 42 20 20 20 20 72 31  2c 5b 72 33 5d 2c 23 31  |RB    r1,[r3],#1|
00003a40  0d 15 cc 19 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00003a50  20 20 20 20 72 30 2c 72  31 0d 15 d6 1b 20 20 20  |    r0,r1....   |
00003a60  20 20 20 20 20 42 4e 45  20 20 20 20 20 69 64 5f  |     BNE     id_|
00003a70  64 69 66 66 0d 15 e0 1c  20 20 20 20 20 20 20 20  |diff....        |
00003a80  43 4d 50 20 20 20 20 20  72 30 2c 23 97 22 3a 22  |CMP     r0,#.":"|
00003a90  0d 15 ea 1e 20 20 20 20  20 20 20 20 42 4e 45 20  |....        BNE |
00003aa0  20 20 20 20 69 64 5f 63  6f 6d 70 61 72 65 0d 15  |    id_compare..|
00003ab0  f4 0f 2e 69 64 5f 6d 61  74 63 68 65 73 0d 15 fe  |...id_matches...|
00003ac0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003ad0  20 72 30 2c 72 34 0d 16  08 29 20 20 20 20 20 20  | r0,r4...)      |
00003ae0  20 20 4c 44 52 20 20 20  20 20 72 31 2c 5b 72 35  |  LDR     r1,[r5|
00003af0  2c 23 6b 65 79 77 6f 72  64 5f 61 64 64 72 5d 0d  |,#keyword_addr].|
00003b00  16 12 25 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |..%        LDMFD|
00003b10  20 20 20 28 73 70 29 21  2c 7b 72 32 2d 72 31 31  |   (sp)!,{r2-r11|
00003b20  2c 70 63 7d 0d 16 1c 0c  2e 69 64 5f 64 69 66 66  |,pc}.....id_diff|
00003b30  0d 16 26 1c 20 20 20 20  20 20 20 20 43 4d 50 20  |..&.        CMP |
00003b40  20 20 20 20 72 30 2c 23  97 22 3a 22 0d 16 30 1b  |    r0,#.":"..0.|
00003b50  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00003b60  6e 65 78 74 5f 69 64 0d  16 3a 1c 20 20 20 20 20  |next_id..:.     |
00003b70  20 20 20 43 4d 50 20 20  20 20 20 72 31 2c 23 97  |   CMP     r1,#.|
00003b80  22 20 22 0d 16 44 1e 20  20 20 20 20 20 20 20 42  |" "..D.        B|
00003b90  4c 45 20 20 20 20 20 69  64 5f 6d 61 74 63 68 65  |LE     id_matche|
00003ba0  73 0d 16 4e 0c 2e 6e 65  78 74 5f 69 64 0d 16 58  |s..N..next_id..X|
00003bb0  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00003bc0  20 72 34 2c 72 34 2c 23  31 0d 16 62 29 20 20 20  | r4,r4,#1..b)   |
00003bd0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 35 2c  |     LDR     r5,|
00003be0  5b 72 35 2c 23 6b 65 79  77 6f 72 64 5f 6e 65 78  |[r5,#keyword_nex|
00003bf0  74 5d 0d 16 6c 1b 20 20  20 20 20 20 20 20 42 20  |t]..l.        B |
00003c00  20 20 20 20 20 20 69 64  5f 6c 6f 6f 70 0d 16 76  |      id_loop..v|
00003c10  04 0d 16 80 12 2e 64 65  66 61 75 6c 74 5f 73 63  |......default_sc|
00003c20  61 6c 65 0d 16 8a 19 20  20 20 20 20 20 20 20 44  |ale....        D|
00003c30  43 44 20 20 20 20 20 31  30 30 30 30 0d 16 94 05  |CD     10000....|
00003c40  5d 0d 16 9e 06 3d 30 0d  16 a8 05 3a 0d 16 b2 0c  |]....=0....:....|
00003c50  dd 20 a4 7a 28 7a 24 29  0d 16 bc 0e 5b 4f 50 54  |. .z(z$)....[OPT|
00003c60  20 70 61 73 73 25 0d 16  c6 16 20 20 20 20 20 20  | pass%....      |
00003c70  20 20 45 51 55 53 20 20  20 20 7a 24 0d 16 d0 15  |  EQUS    z$....|
00003c80  20 20 20 20 20 20 20 20  45 51 55 42 20 20 20 20  |        EQUB    |
00003c90  30 0d 16 da 11 20 20 20  20 20 20 20 20 41 4c 49  |0....        ALI|
00003ca0  47 4e 0d 16 e4 05 5d 0d  16 ee 06 3d 30 0d ff     |GN....]....=0..|
00003caf