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

Source/SWI07

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1993-08.adf » !3DGraphic_3DGraphic
Filename: Source/SWI07
Read OK:
File size: 574E bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >Source.SWI07
   20REM BAU3D_Render source
   30REM by DCA
   40REM for 32-bit machines
   50REM (c) BAU August 1993
   60:
   70DEF FNswi07_name
   80="Render"
   90:
  100DEF FNswi07_vars
  110poly_chunk=1024
  120poly_point=FNwk(4)
  130poly_point_size=FNwk(4)
  140poly_faces=FNwk(4)
  150angles=&10000
  160ang_bits=16
  170ang_acc=16
  180real_ang_bits=10
  190ang_shift=ang_bits-real_ang_bits
  200real_angles=1<<real_ang_bits
  210gwx0=FNwk(4)
  220gwy0=FNwk(4)
  230gwx1=FNwk(4)
  240gwy1=FNwk(4)
  250orgx=FNwk(4)
  260orgy=FNwk(4)
  270xeig=FNwk(4)
  280yeig=FNwk(4)
  290scr_minx=FNwk(4)
  300scr_miny=FNwk(4)
  310scr_maxx=FNwk(4)
  320scr_maxy=FNwk(4)
  330rp_ptr=FNwk(4)
  340total_z=FNwk(4)
  350total_zno=FNwk(4)
  360
  370bit_merge=64
  380bit_surf=128
  390
  400obj_list=0
  410obj_name=4
  420obj_req=8
  430surf_type=0
  440surf_colour=4
  450surf_n=8
  460surf_coords=12
  470surf_req=12
  480subobj_next=0
  490subobj_type=4
  500subobj_flags=8
  510subobj_offset=12
  520subobj_angle=24
  530subobj_surfreq=36
  540subobj_bounds=36
  550subobj_req=132
  560slide_limit=16^2
  570=0
  580:
  590DEF FNswi07_code
  600LOCAL i,a
  610[OPT pass%
  620.render
  630        STMFD   (sp)!,{r0-r11,link}
  640        MOV     r0,#poly_chunk
  650        BL      malloc
  660        LDMVSFD (sp)!,{r0-r11,pc}
  670        MOV     r3,r0
  680        MOV     r4,#poly_chunk
  690        MOV     r5,#0
  700        FNadrl(14,poly_point)
  710        STMIA   r14,{r3-r5}
  720        BL      read_screen_limits
  730        LDMIA   sp,{r0-r2}
  740        LDMIA   r1,{r3-r5}
  750        LDMIA   r2,{r6-r8}
  760        MOV     r0,#obj_req
  770        BL      malloc
  780        BVS     render_done
  790        MOV     r11,r0
  800        MOV     r0,#0
  810        STR     r0,[r11,#obj_list]
  820        STR     r0,[r11,#obj_name]
  830        MOV     r9,#0
  840        LDR     r10,[sp]
  850        BL      clip
  860        BVS     render_done
  870        MOV     r10,r11
  880        LDMIA   sp,{r0-r2}
  890        MOV     r9,#0
  900        MOV     r11,#0
  910        LDMIA   r1,{r3-r5}
  920        LDMIA   r2,{r6-r8}
  930        BL      render_obj
  940        MOV     r11,r10
  950        BL      free_tree
  960        BL      plot_faces
  970        FNadrl(10,poly_point)
  980        LDMIA   r10,{r4-r6}
  990.free_poly_loop
 1000        SUBS    r6,r6,#1
 1010        BMI     freed_poly_list
 1020        LDR     r0,[r4],#4
 1030        BL      free
 1040        B       free_poly_loop
 1050.freed_poly_list
 1060        LDR     r0,[r10]
 1070        BL      free
 1080.render_done
 1090        STRVS   r0,[sp]
 1100        LDMFD   (sp)!,{r0-r11,pc}
 1110
 1120.render_obj
 1130        STMFD   (sp)!,{r0-r11,link}
 1140        LDR     r10,[r10,#obj_list]
 1150.render_obj_loop
 1160        CMP     r10,#0
 1170        LDMEQFD (sp)!,{r0-r11,pc}
 1180        LDR     r0,[r10,#subobj_flags]
 1190        TST     r0,#bit_surf
 1200        BEQ     render_subobj
 1210.render_surf
 1220        LDR     r0,[r10,#subobj_type]
 1230        ADD     r1,sp,#4*3
 1240        ADD     r2,sp,#4*6
 1250        MOV     r3,r11
 1260        MOV     r4,r9
 1270        BL      register_polygon
 1280        ADD     r14,sp,#4*2
 1290        LDMIA   r14,{r3,r4}
 1300        B       render_next
 1310.render_subobj
 1320        SUB     sp,sp,#12+12
 1330        ADD     r0,r10,#subobj_offset
 1340        ADD     r1,sp,#12+12+4*6
 1350        ADD     r2,sp,#12
 1360        BL      rotate
 1370        ADD     r0,sp,#12
 1380        ADD     r1,sp,#12+12+4*3
 1390        MOV     r2,r0
 1400        BL      add
 1410        ADD     r0,r10,#subobj_angle
 1420        ADD     r1,sp,#12+12+4*6
 1430        MOV     r2,sp
 1440        BL      add
 1450        LDMIA   (sp)!,{r6-r8}
 1460        LDMIA   (sp)!,{r3-r5}
 1470        STMFD   (sp)!,{r9-r11}
 1480        LDR     r9,[r10,#subobj_flags]
 1490        LDR     r10,[r10,#subobj_type]
 1500        AND     r14,r9,#bit_merge
 1510        ORR     r11,r11,r14
 1520        AND     r9,r9,#63
 1530        BL      render_obj
 1540        LDMFD   (sp)!,{r9-r11}
 1550        ADD     r14,sp,#4*3
 1560        LDMIA   r14,{r3-r8}
 1570.render_next
 1580        LDR     r10,[r10,#subobj_next]
 1590        B       render_obj_loop
 1600
 1610.clip   STMFD   (sp)!,{r0-r11,link}
 1620        SUB     sp,sp,#12+12+96
 1630        LDR     r8,[r10,#obj_list]
 1640.clip_loop
 1650        CMP     r8,#0
 1660        BEQ     clip_exit
 1670        LDR     r9,[sp,#12+12+96+4*9]
 1680        LDR     r0,[r8,#subobj_flags]
 1690        TST     r0,#bit_surf
 1700        BEQ     clip_subobj
 1710.clip_surf
 1720        MOV     r0,#subobj_surfreq
 1730        BL      copy_subobj
 1740        BVS     clip_exit
 1750        B       clip_next
 1760.clip_subobj
 1770        ADD     r0,r8,#subobj_angle
 1780        ADD     r1,sp,#12+12+96+6*4
 1790        MOV     r2,sp
 1800        BL      add
 1810        ADD     r0,r8,#subobj_offset
 1820        ADD     r1,sp,#12+12+96+6*4
 1830        ADD     r2,sp,#12
 1840        BL      rotate
 1850        ADD     r0,sp,#12
 1860        ADD     r1,sp,#12+12+96+3*4
 1870        MOV     r2,r0
 1880        BL      add
 1890        MOV     r3,#12+12
 1900        ADD     r4,r8,#subobj_bounds
 1910.rotate_bounds
 1920        MOV     r0,r4
 1930        MOV     r1,sp
 1940        ADD     r2,sp,r3
 1950        BL      rotate
 1960        ADD     r0,sp,r3
 1970        ADD     r1,sp,#12
 1980        MOV     r2,r0
 1990        BL      add
 2000        ADD     r4,r4,#12
 2010        ADD     r3,r3,#12
 2020        CMP     r3,#12+12+96
 2030        BLT     rotate_bounds
 2040        MOV     r5,#0
 2050        MOV     r7,#0
 2060.check_bound_loop1
 2070        MOV     r14,#1
 2080        TST     r9,r14,LSL r7
 2090        BNE     wholly_visible
 2100        MOV     r3,#12+12
 2110        MOV     r6,#0
 2120.check_bound_loop2
 2130        MOV     r5,r5,LSL #1
 2140        TST     r5,#%100000000
 2150        BNE     was_badz
 2160        ADD     r0,sp,r3
 2170        MOV     r1,r7
 2180        BL      invisible
 2190        BNE     not_invis
 2200        ADD     r6,r6,#1
 2210        CMP     r7,#2
 2220        ORRLT   r5,r5,#1
 2230.not_invis
 2240.was_badz
 2250        ADD     r3,r3,#12
 2260        CMP     r3,#12+12+96
 2270        BLT     check_bound_loop2
 2280        ORR     r5,r5,r5,LSR #8
 2290        BIC     r5,r5,#&FF00
 2300        CMP     r6,#8
 2310        BEQ     clip_next
 2320        CMP     r5,#0
 2330        BNE     whacky_zeds
 2340        CMP     r6,#0
 2350        MOVEQ   r14,#1
 2360        ORREQ   r9,r9,r14,LSL r7
 2370.whacky_zeds
 2380.wholly_visible
 2390        ADD     r7,r7,#1
 2400        CMP     r7,#6
 2410        BLT     check_bound_loop1
 2420        MOV     r0,#obj_req
 2430        BL      malloc
 2440        BVS     clip_exit
 2450        MOV     r7,r0
 2460        MOV     r0,#0
 2470        STR     r0,[r7,#obj_list]
 2480        STR     r0,[r7,#obj_name]
 2490        MOV     r0,#subobj_req
 2500        BL      copy_subobj
 2510        BVS     clip_exit
 2520        STR     r7,[r0,#subobj_type]
 2530        LDR     r1,[r0,#subobj_flags]
 2540        BIC     r1,r1,#63
 2550        ORR     r1,r1,r9
 2560        STR     r1,[r0,#subobj_flags]
 2570        STMFD   (sp)!,{r8-r11}
 2580        LDR     r10,[r8,#subobj_type]
 2590        MOV     r11,r7
 2600        ADD     r0,sp,#16
 2610        LDMIA   r0!,{r6-r8}
 2620        LDMIA   r0!,{r3-r5}
 2630        BL      clip
 2640        LDMFD   (sp)!,{r8-r11}
 2650        BVS     clip_exit
 2660.clip_next
 2670        LDR     r8,[r8,#subobj_next]
 2680        B       clip_loop
 2690.clip_exit
 2700        ADD     sp,sp,#12+12+96
 2710        ADRVS   r0,clip_err
 2720        STRVS   r0,[sp]
 2730        LDMFD   (sp)!,{r0-r11,pc}
 2740.clip_err
 2750        DCD     &184
 2760        EQUS    "Out of memory"
 2770        DCB     0
 2780        ALIGN
 2790
 2800.copy_subobj
 2810        STMFD   (sp)!,{r0-r6,link}
 2820        MOV     r6,r0
 2830        BL      malloc
 2840        LDMVSFD (sp)!,{r0-r6,pc}
 2850        STR     r0,[sp]
 2860        MOV     r1,#0
 2870        STR     r1,[r0],#4
 2880        ADD     r14,r8,#4
 2890        SUB     r1,r6,#4
 2900.copy_subobj_loop1
 2910        CMP     r1,#16
 2920        LDMGEIA r14!,{r2-r5}
 2930        STMGEIA r0!,{r2-r5}
 2940        SUBGE   r1,r1,#16
 2950        BGE     copy_subobj_loop1
 2960.copy_subobj_loop2
 2970        CMP     r1,#4
 2980        LDRGE   r2,[r14],#4
 2990        STRGE   r2,[r0],#4
 3000        BGE     copy_subobj_loop2
 3010        SUB     r0,r0,r6
 3020        ADD     r1,r11,#obj_list
 3030.add_subobj_to_end
 3040        LDR     r2,[r1]
 3050        CMP     r2,#0
 3060        ADDNE   r1,r2,#subobj_next
 3070        BNE     add_subobj_to_end
 3080        STR     r0,[r1]
 3090        LDMFD   (sp)!,{r0-r6,pc}
 3100
 3110.add    STMFD   (sp)!,{r0-r8,link}
 3120        LDMIA   r0,{r3-r5}
 3130        LDMIA   r1,{r6-r8}
 3140        ADD     r3,r3,r6
 3150        ADD     r4,r4,r7
 3160        ADD     r5,r5,r8
 3170        STMIA   r2,{r3-r5}
 3180        LDMFD   (sp)!,{r0-r8,pc}
 3190
 3200.free_tree
 3210        STMFD   (sp)!,{r0-r11,link}
 3220        LDR     r0,[r11,#obj_name]
 3230        CMP     r0,#0
 3240        BLNE    free
 3250        LDR     r8,[r11,#obj_list]
 3260.free_tree_loop
 3270        CMP     r8,#0
 3280        BEQ     freed_list
 3290        LDR     r0,[r8,#subobj_flags]
 3300        TST     r0,#bit_surf
 3310        BNE     free_tree2
 3320        MOV     r10,r11
 3330        LDR     r11,[r8,#subobj_type]
 3340        BL      free_tree
 3350        MOV     r11,r10
 3360.free_tree2
 3370        LDR     r7,[r8,#subobj_next]
 3380        MOV     r0,r8
 3390        BL      free
 3400        MOV     r8,r7
 3410        B       free_tree_loop
 3420.freed_list
 3430        MOV     r0,r11
 3440        BL      free
 3450        LDMFD   (sp)!,{r0-r11,pc}
 3460
 3470.plot_faces
 3480        STMFD   (sp)!,{r0-r11,link}
 3490        FNadrl(14,poly_point)
 3500        LDMIA   r14,{r9-r11}
 3510        CMP     r11,#0
 3520        CMPNE   r9,#0
 3530        LDMEQFD (sp)!,{r0-r11,pc}
 3540        MOV     r0,r11
 3550        MOV     r1,r9
 3560        ADR     r2,compare
 3570        SWI     "XOS_HeapSort"
 3580        FNadrl(14,flags)
 3590        LDR     r3,[r14]
 3600.plot_face_loop
 3610        LDR     r8,[r9],#4
 3620        LDR     r7,[r8,#4]
 3630        ADD     r8,r8,#8
 3640.plot_face_loop2
 3650        LDMIA   r8!,{r2,r6}
 3660        MOV     r0,r6
 3670        MOV     r1,r8
 3680        BL      swi(00)
 3690        ADD     r8,r8,r6,LSL #3
 3700        SUBS    r7,r7,#1
 3710        BNE     plot_face_loop2
 3720        SUBS    r11,r11,#1
 3730        BNE     plot_face_loop
 3740        LDMFD   (sp)!,{r0-r11,pc}
 3750
 3760.compare
 3770        LDR     r2,[r0]
 3780        LDR     r3,[r1]
 3790        CMP     r3,r2
 3800        MOV     pc,link
 3810
 3820.invisible
 3830        STMFD   (sp)!,{r0-r11,link}
 3840        LDMIA   r0,{r7-r9}
 3850        FNadrl(14,s)
 3860        LDMIA   r14,{r10,r11}
 3870        ADD     pc,pc,r1,LSL #2
 3880        DCD     0
 3890        B       check_maxz
 3900        B       check_minz
 3910        B       check_minx
 3920        B       check_maxx
 3930        B       check_miny
 3940        B       check_maxy
 3950.check_maxz
 3960        LDR     r2,[r0,#8]
 3970        FNadrl(3,max_z)
 3980        LDR     r3,[r3]
 3990        CMP     r2,r3
 4000        BLT     is_visible
 4010        B       is_invisible
 4020.check_minz
 4030        LDR     r2,[r0,#8]
 4040        FNadrl(3,min_z)
 4050        LDR     r3,[r3]
 4060        CMP     r2,r3
 4070        BGT     is_visible
 4080        B       is_invisible
 4090.check_minx
 4100        MUL     r0,r10,r7
 4110        ADD     r1,r9,r11
 4120        BL      divide
 4130        FNadrl(14,scr_minx)
 4140        LDR     r14,[r14]
 4150        CMP     r2,r14
 4160        BGT     is_visible
 4170        B       is_invisible
 4180.check_maxx
 4190        MUL     r0,r10,r7
 4200        ADD     r1,r9,r11
 4210        BL      divide
 4220        FNadrl(14,scr_maxx)
 4230        LDR     r14,[r14]
 4240        CMP     r2,r14
 4250        BLT     is_visible
 4260        B       is_invisible
 4270.check_miny
 4280        MUL     r0,r10,r8
 4290        ADD     r1,r9,r11
 4300        BL      divide
 4310        FNadrl(14,scr_miny)
 4320        LDR     r14,[r14]
 4330        CMP     r2,r14
 4340        BGT     is_visible
 4350        B       is_invisible
 4360.check_maxy
 4370        MUL     r0,r10,r8
 4380        ADD     r1,r9,r11
 4390        BL      divide
 4400        FNadrl(14,scr_maxy)
 4410        LDR     r14,[r14]
 4420        CMP     r2,r14
 4430        BLT     is_visible
 4440.is_invisible
 4450        CMP     r0,r0
 4460        LDMFD   (sp)!,{r0-r11,pc}
 4470.is_visible
 4480        CMN     pc,#0
 4490        LDMFD   (sp)!,{r0-r11,pc}
 4500
 4510.slide  STMFD   (sp)!,{r0-r11,link}
 4520        MOV     r11,r3
 4530        LDMIA   r0,{r5-r7}
 4540        LDMIA   r1,{r8-r10}
 4550.slide_loop
 4560        ADD     r2,r5,r8
 4570        ADD     r3,r6,r9
 4580        ADD     r4,r7,r10
 4590        MOV     r2,r2,ASR #1
 4600        MOV     r3,r3,ASR #1
 4610        MOV     r4,r4,ASR #1
 4620        SUB     r0,r5,r8
 4630        MOV     r14,r0
 4640        MUL     r1,r0,r14
 4650        SUB     r0,r6,r9
 4660        MOV     r14,r0
 4670        MLA     r1,r0,r14,r1
 4680        SUB     r0,r7,r10
 4690        MOV     r14,r0
 4700        MLA     r1,r0,r14,r1
 4710        CMP     r1,#slide_limit
 4720        BLT     well_slid
 4730        STMFD   (sp)!,{r2-r4}
 4740        MOV     r0,sp
 4750        MOV     r1,r11
 4760        BL      invisible
 4770        LDMEQFD (sp)!,{r5-r7}
 4780        LDMNEFD (sp)!,{r8-r10}
 4790        B       slide_loop
 4800.well_slid
 4810        LDR     r0,[sp,#4*2]
 4820        STMIA   r0,{r2-r4}
 4830        LDMFD   (sp)!,{r0-r11,pc}
 4840
 4850.register_polygon
 4860        STMFD   (sp)!,{r0-r11,link}
 4870        MOV     r10,r0
 4880        LDR     r9,[r10,#surf_n]
 4890        FNadrl(5,vertices)
 4900        MOV     r3,r9
 4910        MOV     r4,#0
 4920.rp_copy_vertices
 4930        ADD     r0,r10,#surf_req
 4940        ADD     r0,r0,r4
 4950        LDR     r1,[sp,#4*2]
 4960        ADD     r2,r5,r4
 4970        BL      rotate
 4980        MOV     r0,r2
 4990        LDR     r1,[sp,#4*1]
 5000        BL      add
 5010        ADD     r4,r4,#12
 5020        SUBS    r3,r3,#1
 5030        BNE     rp_copy_vertices
 5040        MOV     r1,#0
 5050.rp_clip_loop
 5060        LDR     r0,[sp,#4*4]
 5070        MOV     r14,#1
 5080        TST     r0,r14,LSL r1
 5090        BNE     rp_no_need_to_clip
 5100        MOV     r3,#0
 5110.rp_loop1
 5120        CMP     r9,#2
 5130        LDMLEFD (sp)!,{r0-r11,pc}
 5140        CMP     r3,r9
 5150        BGE     done_rp_loop1
 5160        ADD     r0,r5,r3,LSL #3
 5170        ADD     r0,r0,r3,LSL #2
 5180        BL      invisible
 5190        BNE     next_rp_loop1
 5200        ADD     r14,r3,#1
 5210        CMP     r14,r9
 5220        MOVEQ   r14,#0
 5230        ADD     r0,r5,r14,LSL #3
 5240        ADD     r0,r0,r14,LSL #2
 5250        BL      invisible
 5260        BNE     next_rp_loop1
 5270        SUBS    r14,r3,#1
 5280        ADDMI   r14,r14,r9
 5290        ADD     r0,r5,r14,LSL #3
 5300        ADD     r0,r0,r14,LSL #2
 5310        BL      invisible
 5320        BNE     next_rp_loop1
 5330        ADD     r14,r3,#1
 5340        CMP     r14,r9
 5350        BGE     rp_is_last_anyway
 5360        STMFD   (sp)!,{r1,r7,r8,r10-r11}
 5370        MOV     r10,r3
 5380        SUB     r11,r9,#2
 5390        ADD     r7,r5,r3,LSL #3
 5400        ADD     r7,r7,r3,LSL #2
 5410        ADD     r8,r7,#12
 5420.rp_del_loop
 5430        LDMIA   r8!,{r0-r2}
 5440        STMIA   r7!,{r0-r2}
 5450        ADD     r10,r10,#1
 5460        CMP     r10,r11
 5470        BLE     rp_del_loop
 5480        LDMFD   (sp)!,{r1,r7,r8,r10-r11}
 5490.rp_is_last_anyway
 5500        SUB     r9,r9,#1
 5510        B       rp_loop1
 5520.next_rp_loop1
 5530        ADD     r3,r3,#1
 5540        B       rp_loop1
 5550.done_rp_loop1
 5560        MOV     r3,#0
 5570.rp_loop2
 5580        CMP     r3,r9
 5590        BGE     done_rp_loop2
 5600        ADD     r0,r5,r3,LSL #3
 5610        ADD     r0,r0,r3,LSL #2
 5620        BL      invisible
 5630        BNE     next_rp_loop2
 5640        SUBS    r14,r3,#1
 5650        ADDMI   r14,r14,r9
 5660        ADD     r0,r5,r14,LSL #3
 5670        ADD     r0,r0,r14,LSL #2
 5680        BL      invisible
 5690        BEQ     next_rp_loop2
 5700        ADD     r14,r3,#1
 5710        CMP     r14,r9
 5720        MOVEQ   r14,#0
 5730        ADD     r0,r5,r14,LSL #3
 5740        ADD     r0,r0,r14,LSL #2
 5750        BL      invisible
 5760        BEQ     no_need_to_ins
 5770        STMFD   (sp)!,{r1,r7,r8,r10}
 5780        SUB     r10,r9,#1
 5790        ADD     r7,r5,r10,LSL #3
 5800        ADD     r7,r7,r10,LSL #2
 5810        ADD     r8,r7,#12
 5820.rp_ins_loop
 5830        LDMIA   r7,{r0-r2}
 5840        STMIA   r8,{r0-r2}
 5850        SUB     r7,r7,#12
 5860        SUB     r8,r8,#12
 5870        SUB     r10,r10,#1
 5880        CMP     r10,r3
 5890        BGE     rp_ins_loop
 5900        LDMFD   (sp)!,{r1,r7,r8,r10}
 5910        ADD     r9,r9,#1
 5920.no_need_to_ins
 5930        STMFD   (sp)!,{r0-r3}
 5940        ADD     r0,r5,r3,LSL #3
 5950        ADD     r0,r0,r3,LSL #2
 5960        SUBS    r14,r3,#1
 5970        ADDMI   r14,r14,r9
 5980        ADD     r1,r5,r14,LSL #3
 5990        ADD     r1,r1,r14,LSL #2
 6000        MOV     r2,r0
 6010        LDR     r3,[sp,#4]
 6020        BL      slide
 6030        LDR     r3,[sp,#12]
 6040        ADD     r3,r3,#1
 6050        CMP     r3,r9
 6060        MOVEQ   r3,#0
 6070        ADD     r0,r5,r3,LSL #3
 6080        ADD     r0,r0,r3,LSL #2
 6090        ADD     r14,r3,#1
 6100        CMP     r14,r9
 6110        MOVEQ   r14,#0
 6120        ADD     r1,r5,r14,LSL #3
 6130        ADD     r1,r1,r14,LSL #2
 6140        MOV     r2,r0
 6150        LDR     r3,[sp,#4]
 6160        BL      slide
 6170        LDMFD   (sp)!,{r0-r3}
 6180        ADD     r3,r3,#2
 6190.next_rp_loop2
 6200        ADD     r3,r3,#1
 6210        B       rp_loop2
 6220.done_rp_loop2
 6230.rp_no_need_to_clip
 6240        ADD     r1,r1,#1
 6250        CMP     r1,#6
 6260        BLT     rp_clip_loop
 6270        FNadrl(11,poly_point)
 6280        LDMIA   r11,{r6-r8}
 6290        LDR     r0,[sp,#4*3]
 6300        CMP     r0,#0
 6310        LDREQ   r0,[r10,#surf_type]
 6320        CMPEQ   r0,#0
 6330        BNE     not_new_poly
 6340        MOV     r0,#8
 6350        BL      malloc
 6360        STRVS   r0,[sp]
 6370        LDMVSFD (sp)!,{r0-r11,pc}
 6380        MOV     r4,r0
 6390        MOV     r0,#0
 6400        FNstr(0,total_z)
 6410        FNstr(0,total_zno)
 6420        MOV     r0,#0
 6430        STR     r0,[r4,#4]
 6440        CMP     r7,r8,LSL #2
 6450        BNE     dont_extend_rp_table
 6460        MOV     r0,r6
 6470        MOV     r1,#poly_chunk
 6480        BL      realloc
 6490        STRVS   r0,[sp]
 6500        LDMVSFD (sp)!,{r0-r11,pc}
 6510        MOV     r6,r0
 6520        ADD     r7,r7,#poly_chunk
 6530        STMIA   r11,{r6-r8}
 6540.dont_extend_rp_table
 6550        STR     r4,[r6,r8,LSL #2]
 6560        ADD     r8,r8,#1
 6570        STR     r8,[r11,#8]
 6580        MOV     r0,#8
 6590        FNstr(0,rp_ptr)
 6600.not_new_poly
 6610        SUB     r2,r8,#1
 6620        LDR     r0,[r6,r2,LSL #2]
 6630        MOV     r1,r9,LSL #3
 6640        ADD     r1,r1,#8
 6650        BL      realloc
 6660        STRVS   r0,[sp]
 6670        LDMVSFD (sp)!,{r0-r11,pc}
 6680        STR     r0,[r6,r2,LSL #2]
 6690        MOV     r4,r0
 6700        FNldr(3,rp_ptr)
 6710        LDR     r0,[r10,#surf_colour]
 6720        STR     r0,[r4,r3]
 6730        ADD     r3,r3,#4
 6740        STR     r9,[r4,r3]
 6750        ADD     r3,r3,#4
 6760        FNadrl(14,s)
 6770        LDMIA   r14,{r10,r11}
 6780.persp_loop
 6790        LDMIA   r5!,{r6-r8}
 6800        FNldr(0,total_z)
 6810        ADD     r0,r0,r8
 6820        FNstr(0,total_z)
 6830        FNldr(1,total_zno)
 6840        ADD     r1,r1,#1
 6850        FNstr(1,total_zno)
 6860        BL      divide
 6870        STR     r2,[r4]
 6880        MUL     r0,r6,r10
 6890        ADD     r1,r8,r11
 6900        BL      divide
 6910        STR     r2,[r4,r3]
 6920        ADD     r3,r3,#4
 6930        MUL     r0,r7,r10
 6940        ADD     r1,r8,r11
 6950        BL      divide
 6960        STR     r2,[r4,r3]
 6970        ADD     r3,r3,#4
 6980        SUBS    r9,r9,#1
 6990        BNE     persp_loop
 7000        LDR     r0,[r4,#4]
 7010        ADD     r0,r0,#1
 7020        STR     r0,[r4,#4]
 7030        FNstr(3,rp_ptr)
 7040        LDMFD   (sp)!,{r0-r11,pc}
 7050
 7060.read_screen_limits
 7070        STMFD   (sp)!,{r0-r11,link}
 7080        ADR     r0,vdu_list
 7090        FNadrl(1,gwx0)
 7100        SWI     "XOS_ReadVduVariables"
 7110        LDMIA   r1,{r2-r9}
 7120        MOV     r2,r2,LSL r8
 7130        SUB     r2,r2,r6
 7140        SUB     r2,r2,#64
 7150        MOV     r3,r3,LSL r9
 7160        SUB     r3,r3,r7
 7170        SUB     r3,r3,#64
 7180        MOV     r4,r4,LSL r8
 7190        SUB     r4,r4,r6
 7200        ADD     r4,r4,#64
 7210        MOV     r5,r5,LSL r9
 7220        SUB     r5,r5,r7
 7230        ADD     r5,r5,#64
 7240        FNadrl(1,scr_minx)
 7250        STMIA   r1,{r2-r5}
 7260        LDMFD   (sp)!,{r0-r11,pc}
 7270
 7280.vdu_list
 7290        DCD     128
 7300        DCD     129
 7310        DCD     130
 7320        DCD     131
 7330        DCD     136
 7340        DCD     137
 7350        DCD     4
 7360        DCD     5
 7370        DCD     -1
 7380
 7390.rotate STMFD   (sp)!,{r0-r11,link}
 7400        LDMIA   r0,{r3-r5}
 7410        LDR     r8,[r1,#4]
 7420        CMP     r8,#0
 7430        STMEQIA r2,{r3-r5}
 7440        BEQ     no_rotate
 7450        FNsin(9,8)
 7460        FNcos(10,8)
 7470        MOVS    r6,r3
 7480        RSBMI   r6,r6,#0
 7490        MOVS    r7,r4
 7500        RSBMI   r7,r7,#0
 7510        ORR     r6,r6,r7
 7520        MOVS    r8,r5
 7530        RSBMI   r8,r8,#0
 7540        ORR     r6,r6,r8
 7550        MOV     r11,#0
 7560.rotate_reduce
 7570        CMP     r6,#(1<<(30-ang_acc))
 7580        BLT     rotate_ok
 7590        MOV     r6,r6,ASR #1
 7600        ADD     r11,r11,#1
 7610        CMP     r11,#ang_acc
 7620        BLT     rotate_reduce
 7630.rotate_ok
 7640        MOV     r3,r3,ASR r11
 7650        MOV     r5,r5,ASR r11
 7660        RSB     r11,r11,#ang_acc
 7670        MUL     r6,r3,r10
 7680        MLA     r6,r5,r9,r6
 7690        RSB     r9,r9,#0
 7700        MUL     r8,r3,r9
 7710        MLA     r8,r5,r10,r8
 7720        MOV     r6,r6,ASR r11
 7730        MOV     r7,r4
 7740        MOV     r8,r8,ASR r11
 7750        STMIA   r2,{r6-r8}
 7760.no_rotate
 7770        LDMFD   (sp)!,{r0-r11,pc}
 7780
 7790
 7800.sin_tab FNtable(4*real_angles)
 7810]
 7820IF pass%>4 THEN
 7830 FOR i=0 TO real_angles-1
 7840  a=2*PI*(i/real_angles)
 7850  sin_tab!(code%+4*i)=(1<<ang_acc)*SINa
 7860 NEXT
 7870ENDIF
 7880=0
 7890:
 7900DEF FNsin(reg1,reg2)
 7910[OPT pass%
 7920        MOV     r14,reg2,LSL #(32-ang_bits)
 7930        MOV     r14,r14,LSR #(32-ang_bits+ang_shift)
 7940        ADR     reg1,sin_tab
 7950        LDR     reg1,[reg1,r14,LSL #2]
 7960]
 7970=0
 7980:
 7990DEF FNcos(reg1,reg2)
 8000[OPT pass%
 8010        ADD     r14,reg2,#angles DIV 4
 8020        MOV     r14,r14,LSL #(32-ang_bits)
 8030        MOV     r14,r14,LSR #(32-ang_bits+ang_shift)
 8040        ADR     reg1,sin_tab
 8050        LDR     reg1,[reg1,r14,LSL #2]
 8060]
 8070=0
 8080:
 8090DEF FNstr(reg,off)
 8100[OPT pass%
 8110        ADD     r14,wp,#off AND &FF00
 8120        STR     reg,[r14,#off AND &00FF]
 8130]
 8140=0
 8150:
 8160DEF FNldr(reg,off)
 8170[OPT pass%
 8180        ADD     r14,wp,#off AND &FF00
 8190        LDR     reg,[r14,#off AND &00FF]
 8200]
 8210=0

� >Source.SWI07
� BAU3D_Render source
� by DCA
(� for 32-bit machines
2� (c) BAU August 1993
<:
F� �swi07_name
P
="Render"
Z:
d� �swi07_vars
npoly_chunk=1024
xpoly_point=�wk(4)
�poly_point_size=�wk(4)
�poly_faces=�wk(4)
�angles=&10000
�ang_bits=16
�ang_acc=16
�real_ang_bits=10
�$ang_shift=ang_bits-real_ang_bits
� real_angles=1<<real_ang_bits
�gwx0=�wk(4)
�gwy0=�wk(4)
�gwx1=�wk(4)
�gwy1=�wk(4)
�orgx=�wk(4)
orgy=�wk(4)
xeig=�wk(4)
yeig=�wk(4)
"scr_minx=�wk(4)
,scr_miny=�wk(4)
6scr_maxx=�wk(4)
@scr_maxy=�wk(4)
Jrp_ptr=�wk(4)
Ttotal_z=�wk(4)
^total_zno=�wk(4)
h
rbit_merge=64
|bit_surf=128
�
�obj_list=0
�obj_name=4
�
obj_req=8
�surf_type=0
�surf_colour=4
�surf_n=8
�surf_coords=12
�surf_req=12
�subobj_next=0
�subobj_type=4
�subobj_flags=8
�subobj_offset=12
subobj_angle=24
subobj_surfreq=36
subobj_bounds=36
&subobj_req=132
0slide_limit=16^2
:=0
D:
N� �swi07_code
X	� i,a
b[OPT pass%
l.render
v'        STMFD   (sp)!,{r0-r11,link}
�"        MOV     r0,#poly_chunk
�        BL      malloc
�%        LDMVSFD (sp)!,{r0-r11,pc}
�        MOV     r3,r0
�"        MOV     r4,#poly_chunk
�        MOV     r5,#0
�         �adrl(14,poly_point)
�        STMIA   r14,{r3-r5}
�&        BL      read_screen_limits
�        LDMIA   sp,{r0-r2}
�        LDMIA   r1,{r3-r5}
�        LDMIA   r2,{r6-r8}
�        MOV     r0,#obj_req
        BL      malloc
        BVS     render_done
        MOV     r11,r0
         MOV     r0,#0
*&        STR     r0,[r11,#obj_list]
4&        STR     r0,[r11,#obj_name]
>        MOV     r9,#0
H        LDR     r10,[sp]
R        BL      clip
\        BVS     render_done
f        MOV     r10,r11
p        LDMIA   sp,{r0-r2}
z        MOV     r9,#0
�        MOV     r11,#0
�        LDMIA   r1,{r3-r5}
�        LDMIA   r2,{r6-r8}
�        BL      render_obj
�        MOV     r11,r10
�        BL      free_tree
�        BL      plot_faces
�         �adrl(10,poly_point)
�        LDMIA   r10,{r4-r6}
�.free_poly_loop
�        SUBS    r6,r6,#1
�#        BMI     freed_poly_list
�        LDR     r0,[r4],#4
        BL      free
"        B       free_poly_loop
.freed_poly_list
$        LDR     r0,[r10]
.        BL      free
8.render_done
B        STRVS   r0,[sp]
L%        LDMFD   (sp)!,{r0-r11,pc}
V
`.render_obj
j'        STMFD   (sp)!,{r0-r11,link}
t'        LDR     r10,[r10,#obj_list]
~.render_obj_loop
�        CMP     r10,#0
�%        LDMEQFD (sp)!,{r0-r11,pc}
�*        LDR     r0,[r10,#subobj_flags]
�         TST     r0,#bit_surf
�!        BEQ     render_subobj
�.render_surf
�)        LDR     r0,[r10,#subobj_type]
�        ADD     r1,sp,#4*3
�        ADD     r2,sp,#4*6
�        MOV     r3,r11
�        MOV     r4,r9
�$        BL      register_polygon
        ADD     r14,sp,#4*2

        LDMIA   r14,{r3,r4}
        B       render_next
.render_subobj
(         SUB     sp,sp,#12+12
2)        ADD     r0,r10,#subobj_offset
<$        ADD     r1,sp,#12+12+4*6
F        ADD     r2,sp,#12
P        BL      rotate
Z        ADD     r0,sp,#12
d$        ADD     r1,sp,#12+12+4*3
n        MOV     r2,r0
x        BL      add
�(        ADD     r0,r10,#subobj_angle
�$        ADD     r1,sp,#12+12+4*6
�        MOV     r2,sp
�        BL      add
�!        LDMIA   (sp)!,{r6-r8}
�!        LDMIA   (sp)!,{r3-r5}
�"        STMFD   (sp)!,{r9-r11}
�*        LDR     r9,[r10,#subobj_flags]
�*        LDR     r10,[r10,#subobj_type]
�#        �     r14,r9,#bit_merge
�        �R     r11,r11,r14
�        �     r9,r9,#63
�        BL      render_obj
"        LDMFD   (sp)!,{r9-r11}
        ADD     r14,sp,#4*3
        LDMIA   r14,{r3-r8}
".render_next
,*        LDR     r10,[r10,#subobj_next]
6#        B       render_obj_loop
@
J'.clip   STMFD   (sp)!,{r0-r11,link}
T#        SUB     sp,sp,#12+12+96
^&        LDR     r8,[r10,#obj_list]
h.clip_loop
r        CMP     r8,#0
|        BEQ     clip_exit
�)        LDR     r9,[sp,#12+12+96+4*9]
�)        LDR     r0,[r8,#subobj_flags]
�         TST     r0,#bit_surf
�        BEQ     clip_subobj
�.clip_surf
�&        MOV     r0,#subobj_surfreq
�        BL      copy_subobj
�        BVS     clip_exit
�        B       clip_next
�.clip_subobj
�'        ADD     r0,r8,#subobj_angle
�'        ADD     r1,sp,#12+12+96+6*4
�        MOV     r2,sp
        BL      add
(        ADD     r0,r8,#subobj_offset
'        ADD     r1,sp,#12+12+96+6*4
&        ADD     r2,sp,#12
0        BL      rotate
:        ADD     r0,sp,#12
D'        ADD     r1,sp,#12+12+96+3*4
N        MOV     r2,r0
X        BL      add
b        MOV     r3,#12+12
l(        ADD     r4,r8,#subobj_bounds
v.rotate_bounds
�        MOV     r0,r4
�        MOV     r1,sp
�        ADD     r2,sp,r3
�        BL      rotate
�        ADD     r0,sp,r3
�        ADD     r1,sp,#12
�        MOV     r2,r0
�        BL      add
�        ADD     r4,r4,#12
�        ADD     r3,r3,#12
�         CMP     r3,#12+12+96
�!        BLT     rotate_bounds
�        MOV     r5,#0
        MOV     r7,#0
.check_bound_loop1
        MOV     r14,#1
 !        TST     r9,r14,LSL r7
*"        BNE     wholly_visible
4        MOV     r3,#12+12
>        MOV     r6,#0
H.check_bound_loop2
R         MOV     r5,r5,LSL #1
\"        TST     r5,#%100000000
f        BNE     was_badz
p        ADD     r0,sp,r3
z        MOV     r1,r7
�        BL      invisible
�        BNE     not_invis
�        ADD     r6,r6,#1
�        CMP     r7,#2
�        �RLT   r5,r5,#1
�.not_invis
�
.was_badz
�        ADD     r3,r3,#12
�         CMP     r3,#12+12+96
�%        BLT     check_bound_loop2
�"        �R     r5,r5,r5,LSR #8
�         BIC     r5,r5,#&FF00
�        CMP     r6,#8
	        BEQ     clip_next
	        CMP     r5,#0
	        BNE     whacky_zeds
	$        CMP     r6,#0
	.        �Q   r14,#1
	8#        �REQ   r9,r9,r14,LSL r7
	B.whacky_zeds
	L.wholly_visible
	V        ADD     r7,r7,#1
	`        CMP     r7,#6
	j%        BLT     check_bound_loop1
	t        MOV     r0,#obj_req
	~        BL      malloc
	�        BVS     clip_exit
	�        MOV     r7,r0
	�        MOV     r0,#0
	�%        STR     r0,[r7,#obj_list]
	�%        STR     r0,[r7,#obj_name]
	�"        MOV     r0,#subobj_req
	�        BL      copy_subobj
	�        BVS     clip_exit
	�(        STR     r7,[r0,#subobj_type]
	�)        LDR     r1,[r0,#subobj_flags]
	�        BIC     r1,r1,#63
	�        �R     r1,r1,r9
)        STR     r1,[r0,#subobj_flags]

"        STMFD   (sp)!,{r8-r11}
)        LDR     r10,[r8,#subobj_type]
        MOV     r11,r7
(        ADD     r0,sp,#16
2        LDMIA   r0!,{r6-r8}
<        LDMIA   r0!,{r3-r5}
F        BL      clip
P"        LDMFD   (sp)!,{r8-r11}
Z        BVS     clip_exit
d.clip_next
n(        LDR     r8,[r8,#subobj_next]
x        B       clip_loop
�.clip_exit
�#        ADD     sp,sp,#12+12+96
�        ADRVS   r0,clip_err
�        STRVS   r0,[sp]
�%        LDMFD   (sp)!,{r0-r11,pc}
�
.clip_err
�        DCD     &184
�#        EQUS    "Out of memory"
�        DCB     0
�        ALIGN
�
�.copy_subobj
�&        STMFD   (sp)!,{r0-r6,link}
        MOV     r6,r0
        BL      malloc
$        LDMVSFD (sp)!,{r0-r6,pc}
"        STR     r0,[sp]
,        MOV     r1,#0
6        STR     r1,[r0],#4
@        ADD     r14,r8,#4
J        SUB     r1,r6,#4
T.copy_subobj_loop1
^        CMP     r1,#16
h         LDMGEIA r14!,{r2-r5}
r        STMGEIA r0!,{r2-r5}
|        SUBGE   r1,r1,#16
�%        BGE     copy_subobj_loop1
�.copy_subobj_loop2
�        CMP     r1,#4
�        LDRGE   r2,[r14],#4
�        STRGE   r2,[r0],#4
�%        BGE     copy_subobj_loop2
�        SUB     r0,r0,r6
�$        ADD     r1,r11,#obj_list
�.add_subobj_to_end
�        LDR     r2,[r1]
�        CMP     r2,#0
�&        ADDNE   r1,r2,#subobj_next
�%        BNE     add_subobj_to_end
        STR     r0,[r1]
$        LDMFD   (sp)!,{r0-r6,pc}

&&.add    STMFD   (sp)!,{r0-r8,link}
0        LDMIA   r0,{r3-r5}
:        LDMIA   r1,{r6-r8}
D        ADD     r3,r3,r6
N        ADD     r4,r4,r7
X        ADD     r5,r5,r8
b        STMIA   r2,{r3-r5}
l$        LDMFD   (sp)!,{r0-r8,pc}
v
�.free_tree
�'        STMFD   (sp)!,{r0-r11,link}
�&        LDR     r0,[r11,#obj_name]
�        CMP     r0,#0
�        BLNE    free
�&        LDR     r8,[r11,#obj_list]
�.free_tree_loop
�        CMP     r8,#0
�        BEQ     freed_list
�)        LDR     r0,[r8,#subobj_flags]
�         TST     r0,#bit_surf
�        BNE     free_tree2
�        MOV     r10,r11

)        LDR     r11,[r8,#subobj_type]

        BL      free_tree

        MOV     r11,r10

 .free_tree2

*(        LDR     r7,[r8,#subobj_next]

4        MOV     r0,r8

>        BL      free

H        MOV     r8,r7

R"        B       free_tree_loop

\.freed_list

f        MOV     r0,r11

p        BL      free

z%        LDMFD   (sp)!,{r0-r11,pc}

�

�.plot_faces

�'        STMFD   (sp)!,{r0-r11,link}

�         �adrl(14,poly_point)

�         LDMIA   r14,{r9-r11}

�        CMP     r11,#0

�        CMPNE   r9,#0

�%        LDMEQFD (sp)!,{r0-r11,pc}

�        MOV     r0,r11

�        MOV     r1,r9

�        ADR     r2,compare

�"        SWI     "XOS_HeapSort"

�        �adrl(14,flags)
        LDR     r3,[r14]
.plot_face_loop
        LDR     r8,[r9],#4
$        LDR     r7,[r8,#4]
.        ADD     r8,r8,#8
8.plot_face_loop2
B        LDMIA   r8!,{r2,r6}
L        MOV     r0,r6
V        MOV     r1,r8
`        BL      swi(00)
j#        ADD     r8,r8,r6,LSL #3
t        SUBS    r7,r7,#1
~#        BNE     plot_face_loop2
�        SUBS    r11,r11,#1
�"        BNE     plot_face_loop
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�.compare
�        LDR     r2,[r0]
�        LDR     r3,[r1]
�        CMP     r3,r2
�        MOV     pc,link
�
�.invisible
�'        STMFD   (sp)!,{r0-r11,link}
        LDMIA   r0,{r7-r9}

        �adrl(14,s)
!        LDMIA   r14,{r10,r11}
#        ADD     pc,pc,r1,LSL #2
(        DCD     0
2        B       check_maxz
<        B       check_minz
F        B       check_minx
P        B       check_maxx
Z        B       check_miny
d        B       check_maxy
n.check_maxz
x        LDR     r2,[r0,#8]
�        �adrl(3,max_z)
�        LDR     r3,[r3]
�        CMP     r2,r3
�        BLT     is_visible
�         B       is_invisible
�.check_minz
�        LDR     r2,[r0,#8]
�        �adrl(3,min_z)
�        LDR     r3,[r3]
�        CMP     r2,r3
�        BGT     is_visible
�         B       is_invisible
�.check_minx
        MUL     r0,r10,r7
        ADD     r1,r9,r11
        BL      divide
"        �adrl(14,scr_minx)
,        LDR     r14,[r14]
6        CMP     r2,r14
@        BGT     is_visible
J         B       is_invisible
T.check_maxx
^        MUL     r0,r10,r7
h        ADD     r1,r9,r11
r        BL      divide
|        �adrl(14,scr_maxx)
�        LDR     r14,[r14]
�        CMP     r2,r14
�        BLT     is_visible
�         B       is_invisible
�.check_miny
�        MUL     r0,r10,r8
�        ADD     r1,r9,r11
�        BL      divide
�        �adrl(14,scr_miny)
�        LDR     r14,[r14]
�        CMP     r2,r14
�        BGT     is_visible
�         B       is_invisible
.check_maxy
        MUL     r0,r10,r8
        ADD     r1,r9,r11
&        BL      divide
0        �adrl(14,scr_maxy)
:        LDR     r14,[r14]
D        CMP     r2,r14
N        BLT     is_visible
X.is_invisible
b        CMP     r0,r0
l%        LDMFD   (sp)!,{r0-r11,pc}
v.is_visible
�        CMN     pc,#0
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�'.slide  STMFD   (sp)!,{r0-r11,link}
�        MOV     r11,r3
�        LDMIA   r0,{r5-r7}
�        LDMIA   r1,{r8-r10}
�.slide_loop
�        ADD     r2,r5,r8
�        ADD     r3,r6,r9
�        ADD     r4,r7,r10
�         MOV     r2,r2,ASR #1
�         MOV     r3,r3,ASR #1
         MOV     r4,r4,ASR #1
        SUB     r0,r5,r8
        MOV     r14,r0
         MUL     r1,r0,r14
*        SUB     r0,r6,r9
4        MOV     r14,r0
>         MLA     r1,r0,r14,r1
H        SUB     r0,r7,r10
R        MOV     r14,r0
\         MLA     r1,r0,r14,r1
f#        CMP     r1,#slide_limit
p        BLT     well_slid
z!        STMFD   (sp)!,{r2-r4}
�        MOV     r0,sp
�        MOV     r1,r11
�        BL      invisible
�!        LDMEQFD (sp)!,{r5-r7}
�"        LDMNEFD (sp)!,{r8-r10}
�        B       slide_loop
�.well_slid
�         LDR     r0,[sp,#4*2]
�        STMIA   r0,{r2-r4}
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�.register_polygon
�'        STMFD   (sp)!,{r0-r11,link}
        MOV     r10,r0
$        LDR     r9,[r10,#surf_n]
        �adrl(5,vertices)
$        MOV     r3,r9
.        MOV     r4,#0
8.rp_copy_vertices
B$        ADD     r0,r10,#surf_req
L        ADD     r0,r0,r4
V         LDR     r1,[sp,#4*2]
`        ADD     r2,r5,r4
j        BL      rotate
t        MOV     r0,r2
~         LDR     r1,[sp,#4*1]
�        BL      add
�        ADD     r4,r4,#12
�        SUBS    r3,r3,#1
�$        BNE     rp_copy_vertices
�        MOV     r1,#0
�.rp_clip_loop
�         LDR     r0,[sp,#4*4]
�        MOV     r14,#1
�!        TST     r0,r14,LSL r1
�&        BNE     rp_no_need_to_clip
�        MOV     r3,#0
�
.rp_loop1
        CMP     r9,#2

%        LDMLEFD (sp)!,{r0-r11,pc}
        CMP     r3,r9
!        BGE     done_rp_loop1
(#        ADD     r0,r5,r3,LSL #3
2#        ADD     r0,r0,r3,LSL #2
<        BL      invisible
F!        BNE     next_rp_loop1
P        ADD     r14,r3,#1
Z        CMP     r14,r9
d        �Q   r14,#0
n$        ADD     r0,r5,r14,LSL #3
x$        ADD     r0,r0,r14,LSL #2
�        BL      invisible
�!        BNE     next_rp_loop1
�        SUBS    r14,r3,#1
�        ADDMI   r14,r14,r9
�$        ADD     r0,r5,r14,LSL #3
�$        ADD     r0,r0,r14,LSL #2
�        BL      invisible
�!        BNE     next_rp_loop1
�        ADD     r14,r3,#1
�        CMP     r14,r9
�%        BGE     rp_is_last_anyway
�,        STMFD   (sp)!,{r1,r7,r8,r10-r11}
�        MOV     r10,r3
        SUB     r11,r9,#2
#        ADD     r7,r5,r3,LSL #3
#        ADD     r7,r7,r3,LSL #2
"        ADD     r8,r7,#12
,.rp_del_loop
6        LDMIA   r8!,{r0-r2}
@        STMIA   r7!,{r0-r2}
J        ADD     r10,r10,#1
T        CMP     r10,r11
^        BLE     rp_del_loop
h,        LDMFD   (sp)!,{r1,r7,r8,r10-r11}
r.rp_is_last_anyway
|        SUB     r9,r9,#1
�        B       rp_loop1
�.next_rp_loop1
�        ADD     r3,r3,#1
�        B       rp_loop1
�.done_rp_loop1
�        MOV     r3,#0
�
.rp_loop2
�        CMP     r3,r9
�!        BGE     done_rp_loop2
�#        ADD     r0,r5,r3,LSL #3
�#        ADD     r0,r0,r3,LSL #2
�        BL      invisible
�!        BNE     next_rp_loop2
        SUBS    r14,r3,#1
        ADDMI   r14,r14,r9
$        ADD     r0,r5,r14,LSL #3
&$        ADD     r0,r0,r14,LSL #2
0        BL      invisible
:!        BEQ     next_rp_loop2
D        ADD     r14,r3,#1
N        CMP     r14,r9
X        �Q   r14,#0
b$        ADD     r0,r5,r14,LSL #3
l$        ADD     r0,r0,r14,LSL #2
v        BL      invisible
�"        BEQ     no_need_to_ins
�(        STMFD   (sp)!,{r1,r7,r8,r10}
�        SUB     r10,r9,#1
�$        ADD     r7,r5,r10,LSL #3
�$        ADD     r7,r7,r10,LSL #2
�        ADD     r8,r7,#12
�.rp_ins_loop
�        LDMIA   r7,{r0-r2}
�        STMIA   r8,{r0-r2}
�        SUB     r7,r7,#12
�        SUB     r8,r8,#12
�        SUB     r10,r10,#1
�        CMP     r10,r3
        BGE     rp_ins_loop
(        LDMFD   (sp)!,{r1,r7,r8,r10}
        ADD     r9,r9,#1
 .no_need_to_ins
*!        STMFD   (sp)!,{r0-r3}
4#        ADD     r0,r5,r3,LSL #3
>#        ADD     r0,r0,r3,LSL #2
H        SUBS    r14,r3,#1
R        ADDMI   r14,r14,r9
\$        ADD     r1,r5,r14,LSL #3
f$        ADD     r1,r1,r14,LSL #2
p        MOV     r2,r0
z        LDR     r3,[sp,#4]
�        BL      slide
�        LDR     r3,[sp,#12]
�        ADD     r3,r3,#1
�        CMP     r3,r9
�        �Q   r3,#0
�#        ADD     r0,r5,r3,LSL #3
�#        ADD     r0,r0,r3,LSL #2
�        ADD     r14,r3,#1
�        CMP     r14,r9
�        �Q   r14,#0
�$        ADD     r1,r5,r14,LSL #3
�$        ADD     r1,r1,r14,LSL #2
�        MOV     r2,r0
        LDR     r3,[sp,#4]
        BL      slide
!        LDMFD   (sp)!,{r0-r3}
$        ADD     r3,r3,#2
..next_rp_loop2
8        ADD     r3,r3,#1
B        B       rp_loop2
L.done_rp_loop2
V.rp_no_need_to_clip
`        ADD     r1,r1,#1
j        CMP     r1,#6
t         BLT     rp_clip_loop
~         �adrl(11,poly_point)
�        LDMIA   r11,{r6-r8}
�         LDR     r0,[sp,#4*3]
�        CMP     r0,#0
�'        LDREQ   r0,[r10,#surf_type]
�        CMPEQ   r0,#0
�         BNE     not_new_poly
�        MOV     r0,#8
�        BL      malloc
�        STRVS   r0,[sp]
�%        LDMVSFD (sp)!,{r0-r11,pc}
�        MOV     r4,r0
�        MOV     r0,#0
        �str(0,total_z)

        �str(0,total_zno)
        MOV     r0,#0
        STR     r0,[r4,#4]
(         CMP     r7,r8,LSL #2
2(        BNE     dont_extend_rp_table
<        MOV     r0,r6
F"        MOV     r1,#poly_chunk
P        BL      realloc
Z        STRVS   r0,[sp]
d%        LDMVSFD (sp)!,{r0-r11,pc}
n        MOV     r6,r0
x%        ADD     r7,r7,#poly_chunk
�        STMIA   r11,{r6-r8}
�.dont_extend_rp_table
�%        STR     r4,[r6,r8,LSL #2]
�        ADD     r8,r8,#1
�        STR     r8,[r11,#8]
�        MOV     r0,#8
�        �str(0,rp_ptr)
�.not_new_poly
�        SUB     r2,r8,#1
�%        LDR     r0,[r6,r2,LSL #2]
�         MOV     r1,r9,LSL #3
�        ADD     r1,r1,#8
�        BL      realloc
        STRVS   r0,[sp]
%        LDMVSFD (sp)!,{r0-r11,pc}
%        STR     r0,[r6,r2,LSL #2]
"        MOV     r4,r0
,        �ldr(3,rp_ptr)
6)        LDR     r0,[r10,#surf_colour]
@        STR     r0,[r4,r3]
J        ADD     r3,r3,#4
T        STR     r9,[r4,r3]
^        ADD     r3,r3,#4
h        �adrl(14,s)
r!        LDMIA   r14,{r10,r11}
|.persp_loop
�        LDMIA   r5!,{r6-r8}
�        �ldr(0,total_z)
�        ADD     r0,r0,r8
�        �str(0,total_z)
�        �ldr(1,total_zno)
�        ADD     r1,r1,#1
�        �str(1,total_zno)
�        BL      divide
�        STR     r2,[r4]
�        MUL     r0,r6,r10
�        ADD     r1,r8,r11
�        BL      divide
�        STR     r2,[r4,r3]
        ADD     r3,r3,#4
        MUL     r0,r7,r10
        ADD     r1,r8,r11
&        BL      divide
0        STR     r2,[r4,r3]
:        ADD     r3,r3,#4
D        SUBS    r9,r9,#1
N        BNE     persp_loop
X        LDR     r0,[r4,#4]
b        ADD     r0,r0,#1
l        STR     r0,[r4,#4]
v        �str(3,rp_ptr)
�%        LDMFD   (sp)!,{r0-r11,pc}
�
�.read_screen_limits
�'        STMFD   (sp)!,{r0-r11,link}
�        ADR     r0,vdu_list
�        �adrl(1,gwx0)
�*        SWI     "XOS_ReadVduVariables"
�        LDMIA   r1,{r2-r9}
�         MOV     r2,r2,LSL r8
�        SUB     r2,r2,r6
�        SUB     r2,r2,#64
�         MOV     r3,r3,LSL r9
�        SUB     r3,r3,r7
        SUB     r3,r3,#64
         MOV     r4,r4,LSL r8
        SUB     r4,r4,r6
         ADD     r4,r4,#64
*         MOV     r5,r5,LSL r9
4        SUB     r5,r5,r7
>        ADD     r5,r5,#64
H        �adrl(1,scr_minx)
R        STMIA   r1,{r2-r5}
\%        LDMFD   (sp)!,{r0-r11,pc}
f
p
.vdu_list
z        DCD     128
�        DCD     129
�        DCD     130
�        DCD     131
�        DCD     136
�        DCD     137
�        DCD     4
�        DCD     5
�        DCD     -1
�
�'.rotate STMFD   (sp)!,{r0-r11,link}
�        LDMIA   r0,{r3-r5}
�        LDR     r8,[r1,#4]
�        CMP     r8,#0
        STMEQIA r2,{r3-r5}
        BEQ     no_rotate
        �sin(9,8)
$        �cos(10,8)
.        MOVS    r6,r3
8        RSBMI   r6,r6,#0
B        MOVS    r7,r4
L        RSBMI   r7,r7,#0
V        �R     r6,r6,r7
`        MOVS    r8,r5
j        RSBMI   r8,r8,#0
t        �R     r6,r6,r8
~        MOV     r11,#0
�.rotate_reduce
�)        CMP     r6,#(1<<(30-ang_acc))
�        BLT     rotate_ok
�         MOV     r6,r6,ASR #1
�        ADD     r11,r11,#1
�         CMP     r11,#ang_acc
�!        BLT     rotate_reduce
�.rotate_ok
�!        MOV     r3,r3,ASR r11
�!        MOV     r5,r5,ASR r11
�$        RSB     r11,r11,#ang_acc
�        MUL     r6,r3,r10
        MLA     r6,r5,r9,r6

        RSB     r9,r9,#0
        MUL     r8,r3,r9
         MLA     r8,r5,r10,r8
(!        MOV     r6,r6,ASR r11
2        MOV     r7,r4
<!        MOV     r8,r8,ASR r11
F        STMIA   r2,{r6-r8}
P.no_rotate
Z%        LDMFD   (sp)!,{r0-r11,pc}
d
n
x".sin_tab �table(4*real_angles)
�]
�� pass%>4 �
� � i=0 � real_angles-1
�  a=2*�*(i/real_angles)
�)  sin_tab!(code%+4*i)=(1<<ang_acc)*�a
� �
��
�=0
�:
�� �sin(reg1,reg2)
�[OPT pass%
�/        MOV     r14,reg2,LSL #(32-ang_bits)
�8        MOV     r14,r14,LSR #(32-ang_bits+ang_shift)
         ADR     reg1,sin_tab
*        LDR     reg1,[reg1,r14,LSL #2]
]
"=0
,:
6� �cos(reg1,reg2)
@[OPT pass%
J(        ADD     r14,reg2,#angles � 4
T.        MOV     r14,r14,LSL #(32-ang_bits)
^8        MOV     r14,r14,LSR #(32-ang_bits+ang_shift)
h         ADR     reg1,sin_tab
r*        LDR     reg1,[reg1,r14,LSL #2]
|]
�=0
�:
�� �str(reg,off)
�[OPT pass%
�'        ADD     r14,wp,#off � &FF00
�*        STR     reg,[r14,#off � &00FF]
�]
�=0
�:
�� �ldr(reg,off)
�[OPT pass%
�'        ADD     r14,wp,#off � &FF00
�*        LDR     reg,[r14,#off � &00FF]
 ]
 =0
�
00000000  0d 00 0a 13 f4 20 3e 53  6f 75 72 63 65 2e 53 57  |..... >Source.SW|
00000010  49 30 37 0d 00 14 19 f4  20 42 41 55 33 44 5f 52  |I07..... BAU3D_R|
00000020  65 6e 64 65 72 20 73 6f  75 72 63 65 0d 00 1e 0c  |ender source....|
00000030  f4 20 62 79 20 44 43 41  0d 00 28 19 f4 20 66 6f  |. by DCA..(.. fo|
00000040  72 20 33 32 2d 62 69 74  20 6d 61 63 68 69 6e 65  |r 32-bit machine|
00000050  73 0d 00 32 19 f4 20 28  63 29 20 42 41 55 20 41  |s..2.. (c) BAU A|
00000060  75 67 75 73 74 20 31 39  39 33 0d 00 3c 05 3a 0d  |ugust 1993..<.:.|
00000070  00 46 11 dd 20 a4 73 77  69 30 37 5f 6e 61 6d 65  |.F.. .swi07_name|
00000080  0d 00 50 0d 3d 22 52 65  6e 64 65 72 22 0d 00 5a  |..P.="Render"..Z|
00000090  05 3a 0d 00 64 11 dd 20  a4 73 77 69 30 37 5f 76  |.:..d.. .swi07_v|
000000a0  61 72 73 0d 00 6e 13 70  6f 6c 79 5f 63 68 75 6e  |ars..n.poly_chun|
000000b0  6b 3d 31 30 32 34 0d 00  78 15 70 6f 6c 79 5f 70  |k=1024..x.poly_p|
000000c0  6f 69 6e 74 3d a4 77 6b  28 34 29 0d 00 82 1a 70  |oint=.wk(4)....p|
000000d0  6f 6c 79 5f 70 6f 69 6e  74 5f 73 69 7a 65 3d a4  |oly_point_size=.|
000000e0  77 6b 28 34 29 0d 00 8c  15 70 6f 6c 79 5f 66 61  |wk(4)....poly_fa|
000000f0  63 65 73 3d a4 77 6b 28  34 29 0d 00 96 11 61 6e  |ces=.wk(4)....an|
00000100  67 6c 65 73 3d 26 31 30  30 30 30 0d 00 a0 0f 61  |gles=&10000....a|
00000110  6e 67 5f 62 69 74 73 3d  31 36 0d 00 aa 0e 61 6e  |ng_bits=16....an|
00000120  67 5f 61 63 63 3d 31 36  0d 00 b4 14 72 65 61 6c  |g_acc=16....real|
00000130  5f 61 6e 67 5f 62 69 74  73 3d 31 30 0d 00 be 24  |_ang_bits=10...$|
00000140  61 6e 67 5f 73 68 69 66  74 3d 61 6e 67 5f 62 69  |ang_shift=ang_bi|
00000150  74 73 2d 72 65 61 6c 5f  61 6e 67 5f 62 69 74 73  |ts-real_ang_bits|
00000160  0d 00 c8 20 72 65 61 6c  5f 61 6e 67 6c 65 73 3d  |... real_angles=|
00000170  31 3c 3c 72 65 61 6c 5f  61 6e 67 5f 62 69 74 73  |1<<real_ang_bits|
00000180  0d 00 d2 0f 67 77 78 30  3d a4 77 6b 28 34 29 0d  |....gwx0=.wk(4).|
00000190  00 dc 0f 67 77 79 30 3d  a4 77 6b 28 34 29 0d 00  |...gwy0=.wk(4)..|
000001a0  e6 0f 67 77 78 31 3d a4  77 6b 28 34 29 0d 00 f0  |..gwx1=.wk(4)...|
000001b0  0f 67 77 79 31 3d a4 77  6b 28 34 29 0d 00 fa 0f  |.gwy1=.wk(4)....|
000001c0  6f 72 67 78 3d a4 77 6b  28 34 29 0d 01 04 0f 6f  |orgx=.wk(4)....o|
000001d0  72 67 79 3d a4 77 6b 28  34 29 0d 01 0e 0f 78 65  |rgy=.wk(4)....xe|
000001e0  69 67 3d a4 77 6b 28 34  29 0d 01 18 0f 79 65 69  |ig=.wk(4)....yei|
000001f0  67 3d a4 77 6b 28 34 29  0d 01 22 13 73 63 72 5f  |g=.wk(4)..".scr_|
00000200  6d 69 6e 78 3d a4 77 6b  28 34 29 0d 01 2c 13 73  |minx=.wk(4)..,.s|
00000210  63 72 5f 6d 69 6e 79 3d  a4 77 6b 28 34 29 0d 01  |cr_miny=.wk(4)..|
00000220  36 13 73 63 72 5f 6d 61  78 78 3d a4 77 6b 28 34  |6.scr_maxx=.wk(4|
00000230  29 0d 01 40 13 73 63 72  5f 6d 61 78 79 3d a4 77  |)..@.scr_maxy=.w|
00000240  6b 28 34 29 0d 01 4a 11  72 70 5f 70 74 72 3d a4  |k(4)..J.rp_ptr=.|
00000250  77 6b 28 34 29 0d 01 54  12 74 6f 74 61 6c 5f 7a  |wk(4)..T.total_z|
00000260  3d a4 77 6b 28 34 29 0d  01 5e 14 74 6f 74 61 6c  |=.wk(4)..^.total|
00000270  5f 7a 6e 6f 3d a4 77 6b  28 34 29 0d 01 68 04 0d  |_zno=.wk(4)..h..|
00000280  01 72 10 62 69 74 5f 6d  65 72 67 65 3d 36 34 0d  |.r.bit_merge=64.|
00000290  01 7c 10 62 69 74 5f 73  75 72 66 3d 31 32 38 0d  |.|.bit_surf=128.|
000002a0  01 86 04 0d 01 90 0e 6f  62 6a 5f 6c 69 73 74 3d  |.......obj_list=|
000002b0  30 0d 01 9a 0e 6f 62 6a  5f 6e 61 6d 65 3d 34 0d  |0....obj_name=4.|
000002c0  01 a4 0d 6f 62 6a 5f 72  65 71 3d 38 0d 01 ae 0f  |...obj_req=8....|
000002d0  73 75 72 66 5f 74 79 70  65 3d 30 0d 01 b8 11 73  |surf_type=0....s|
000002e0  75 72 66 5f 63 6f 6c 6f  75 72 3d 34 0d 01 c2 0c  |urf_colour=4....|
000002f0  73 75 72 66 5f 6e 3d 38  0d 01 cc 12 73 75 72 66  |surf_n=8....surf|
00000300  5f 63 6f 6f 72 64 73 3d  31 32 0d 01 d6 0f 73 75  |_coords=12....su|
00000310  72 66 5f 72 65 71 3d 31  32 0d 01 e0 11 73 75 62  |rf_req=12....sub|
00000320  6f 62 6a 5f 6e 65 78 74  3d 30 0d 01 ea 11 73 75  |obj_next=0....su|
00000330  62 6f 62 6a 5f 74 79 70  65 3d 34 0d 01 f4 12 73  |bobj_type=4....s|
00000340  75 62 6f 62 6a 5f 66 6c  61 67 73 3d 38 0d 01 fe  |ubobj_flags=8...|
00000350  14 73 75 62 6f 62 6a 5f  6f 66 66 73 65 74 3d 31  |.subobj_offset=1|
00000360  32 0d 02 08 13 73 75 62  6f 62 6a 5f 61 6e 67 6c  |2....subobj_angl|
00000370  65 3d 32 34 0d 02 12 15  73 75 62 6f 62 6a 5f 73  |e=24....subobj_s|
00000380  75 72 66 72 65 71 3d 33  36 0d 02 1c 14 73 75 62  |urfreq=36....sub|
00000390  6f 62 6a 5f 62 6f 75 6e  64 73 3d 33 36 0d 02 26  |obj_bounds=36..&|
000003a0  12 73 75 62 6f 62 6a 5f  72 65 71 3d 31 33 32 0d  |.subobj_req=132.|
000003b0  02 30 14 73 6c 69 64 65  5f 6c 69 6d 69 74 3d 31  |.0.slide_limit=1|
000003c0  36 5e 32 0d 02 3a 06 3d  30 0d 02 44 05 3a 0d 02  |6^2..:.=0..D.:..|
000003d0  4e 11 dd 20 a4 73 77 69  30 37 5f 63 6f 64 65 0d  |N.. .swi07_code.|
000003e0  02 58 09 ea 20 69 2c 61  0d 02 62 0e 5b 4f 50 54  |.X.. i,a..b.[OPT|
000003f0  20 70 61 73 73 25 0d 02  6c 0b 2e 72 65 6e 64 65  | pass%..l..rende|
00000400  72 0d 02 76 27 20 20 20  20 20 20 20 20 53 54 4d  |r..v'        STM|
00000410  46 44 20 20 20 28 73 70  29 21 2c 7b 72 30 2d 72  |FD   (sp)!,{r0-r|
00000420  31 31 2c 6c 69 6e 6b 7d  0d 02 80 22 20 20 20 20  |11,link}..."    |
00000430  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 23  |    MOV     r0,#|
00000440  70 6f 6c 79 5f 63 68 75  6e 6b 0d 02 8a 1a 20 20  |poly_chunk....  |
00000450  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 6d 61  |      BL      ma|
00000460  6c 6c 6f 63 0d 02 94 25  20 20 20 20 20 20 20 20  |lloc...%        |
00000470  4c 44 4d 56 53 46 44 20  28 73 70 29 21 2c 7b 72  |LDMVSFD (sp)!,{r|
00000480  30 2d 72 31 31 2c 70 63  7d 0d 02 9e 19 20 20 20  |0-r11,pc}....   |
00000490  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 33 2c  |     MOV     r3,|
000004a0  72 30 0d 02 a8 22 20 20  20 20 20 20 20 20 4d 4f  |r0..."        MO|
000004b0  56 20 20 20 20 20 72 34  2c 23 70 6f 6c 79 5f 63  |V     r4,#poly_c|
000004c0  68 75 6e 6b 0d 02 b2 19  20 20 20 20 20 20 20 20  |hunk....        |
000004d0  4d 4f 56 20 20 20 20 20  72 35 2c 23 30 0d 02 bc  |MOV     r5,#0...|
000004e0  20 20 20 20 20 20 20 20  20 a4 61 64 72 6c 28 31  |         .adrl(1|
000004f0  34 2c 70 6f 6c 79 5f 70  6f 69 6e 74 29 0d 02 c6  |4,poly_point)...|
00000500  1f 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 20  |.        STMIA  |
00000510  20 72 31 34 2c 7b 72 33  2d 72 35 7d 0d 02 d0 26  | r14,{r3-r5}...&|
00000520  20 20 20 20 20 20 20 20  42 4c 20 20 20 20 20 20  |        BL      |
00000530  72 65 61 64 5f 73 63 72  65 65 6e 5f 6c 69 6d 69  |read_screen_limi|
00000540  74 73 0d 02 da 1e 20 20  20 20 20 20 20 20 4c 44  |ts....        LD|
00000550  4d 49 41 20 20 20 73 70  2c 7b 72 30 2d 72 32 7d  |MIA   sp,{r0-r2}|
00000560  0d 02 e4 1e 20 20 20 20  20 20 20 20 4c 44 4d 49  |....        LDMI|
00000570  41 20 20 20 72 31 2c 7b  72 33 2d 72 35 7d 0d 02  |A   r1,{r3-r5}..|
00000580  ee 1e 20 20 20 20 20 20  20 20 4c 44 4d 49 41 20  |..        LDMIA |
00000590  20 20 72 32 2c 7b 72 36  2d 72 38 7d 0d 02 f8 1f  |  r2,{r6-r8}....|
000005a0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000005b0  72 30 2c 23 6f 62 6a 5f  72 65 71 0d 03 02 1a 20  |r0,#obj_req.... |
000005c0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 6d  |       BL      m|
000005d0  61 6c 6c 6f 63 0d 03 0c  1f 20 20 20 20 20 20 20  |alloc....       |
000005e0  20 42 56 53 20 20 20 20  20 72 65 6e 64 65 72 5f  | BVS     render_|
000005f0  64 6f 6e 65 0d 03 16 1a  20 20 20 20 20 20 20 20  |done....        |
00000600  4d 4f 56 20 20 20 20 20  72 31 31 2c 72 30 0d 03  |MOV     r11,r0..|
00000610  20 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  | .        MOV   |
00000620  20 20 72 30 2c 23 30 0d  03 2a 26 20 20 20 20 20  |  r0,#0..*&     |
00000630  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
00000640  31 31 2c 23 6f 62 6a 5f  6c 69 73 74 5d 0d 03 34  |11,#obj_list]..4|
00000650  26 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |&        STR    |
00000660  20 72 30 2c 5b 72 31 31  2c 23 6f 62 6a 5f 6e 61  | r0,[r11,#obj_na|
00000670  6d 65 5d 0d 03 3e 19 20  20 20 20 20 20 20 20 4d  |me]..>.        M|
00000680  4f 56 20 20 20 20 20 72  39 2c 23 30 0d 03 48 1c  |OV     r9,#0..H.|
00000690  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000006a0  72 31 30 2c 5b 73 70 5d  0d 03 52 18 20 20 20 20  |r10,[sp]..R.    |
000006b0  20 20 20 20 42 4c 20 20  20 20 20 20 63 6c 69 70  |    BL      clip|
000006c0  0d 03 5c 1f 20 20 20 20  20 20 20 20 42 56 53 20  |..\.        BVS |
000006d0  20 20 20 20 72 65 6e 64  65 72 5f 64 6f 6e 65 0d  |    render_done.|
000006e0  03 66 1b 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.f.        MOV  |
000006f0  20 20 20 72 31 30 2c 72  31 31 0d 03 70 1e 20 20  |   r10,r11..p.  |
00000700  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 73 70  |      LDMIA   sp|
00000710  2c 7b 72 30 2d 72 32 7d  0d 03 7a 19 20 20 20 20  |,{r0-r2}..z.    |
00000720  20 20 20 20 4d 4f 56 20  20 20 20 20 72 39 2c 23  |    MOV     r9,#|
00000730  30 0d 03 84 1a 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
00000740  20 20 20 20 20 72 31 31  2c 23 30 0d 03 8e 1e 20  |     r11,#0.... |
00000750  20 20 20 20 20 20 20 4c  44 4d 49 41 20 20 20 72  |       LDMIA   r|
00000760  31 2c 7b 72 33 2d 72 35  7d 0d 03 98 1e 20 20 20  |1,{r3-r5}....   |
00000770  20 20 20 20 20 4c 44 4d  49 41 20 20 20 72 32 2c  |     LDMIA   r2,|
00000780  7b 72 36 2d 72 38 7d 0d  03 a2 1e 20 20 20 20 20  |{r6-r8}....     |
00000790  20 20 20 42 4c 20 20 20  20 20 20 72 65 6e 64 65  |   BL      rende|
000007a0  72 5f 6f 62 6a 0d 03 ac  1b 20 20 20 20 20 20 20  |r_obj....       |
000007b0  20 4d 4f 56 20 20 20 20  20 72 31 31 2c 72 31 30  | MOV     r11,r10|
000007c0  0d 03 b6 1d 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
000007d0  20 20 20 20 66 72 65 65  5f 74 72 65 65 0d 03 c0  |    free_tree...|
000007e0  1e 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
000007f0  20 70 6c 6f 74 5f 66 61  63 65 73 0d 03 ca 20 20  | plot_faces...  |
00000800  20 20 20 20 20 20 20 a4  61 64 72 6c 28 31 30 2c  |       .adrl(10,|
00000810  70 6f 6c 79 5f 70 6f 69  6e 74 29 0d 03 d4 1f 20  |poly_point).... |
00000820  20 20 20 20 20 20 20 4c  44 4d 49 41 20 20 20 72  |       LDMIA   r|
00000830  31 30 2c 7b 72 34 2d 72  36 7d 0d 03 de 13 2e 66  |10,{r4-r6}.....f|
00000840  72 65 65 5f 70 6f 6c 79  5f 6c 6f 6f 70 0d 03 e8  |ree_poly_loop...|
00000850  1c 20 20 20 20 20 20 20  20 53 55 42 53 20 20 20  |.        SUBS   |
00000860  20 72 36 2c 72 36 2c 23  31 0d 03 f2 23 20 20 20  | r6,r6,#1...#   |
00000870  20 20 20 20 20 42 4d 49  20 20 20 20 20 66 72 65  |     BMI     fre|
00000880  65 64 5f 70 6f 6c 79 5f  6c 69 73 74 0d 03 fc 1e  |ed_poly_list....|
00000890  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000008a0  72 30 2c 5b 72 34 5d 2c  23 34 0d 04 06 18 20 20  |r0,[r4],#4....  |
000008b0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 66 72  |      BL      fr|
000008c0  65 65 0d 04 10 22 20 20  20 20 20 20 20 20 42 20  |ee..."        B |
000008d0  20 20 20 20 20 20 66 72  65 65 5f 70 6f 6c 79 5f  |      free_poly_|
000008e0  6c 6f 6f 70 0d 04 1a 14  2e 66 72 65 65 64 5f 70  |loop.....freed_p|
000008f0  6f 6c 79 5f 6c 69 73 74  0d 04 24 1c 20 20 20 20  |oly_list..$.    |
00000900  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00000910  72 31 30 5d 0d 04 2e 18  20 20 20 20 20 20 20 20  |r10]....        |
00000920  42 4c 20 20 20 20 20 20  66 72 65 65 0d 04 38 10  |BL      free..8.|
00000930  2e 72 65 6e 64 65 72 5f  64 6f 6e 65 0d 04 42 1b  |.render_done..B.|
00000940  20 20 20 20 20 20 20 20  53 54 52 56 53 20 20 20  |        STRVS   |
00000950  72 30 2c 5b 73 70 5d 0d  04 4c 25 20 20 20 20 20  |r0,[sp]..L%     |
00000960  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
00000970  2c 7b 72 30 2d 72 31 31  2c 70 63 7d 0d 04 56 04  |,{r0-r11,pc}..V.|
00000980  0d 04 60 0f 2e 72 65 6e  64 65 72 5f 6f 62 6a 0d  |..`..render_obj.|
00000990  04 6a 27 20 20 20 20 20  20 20 20 53 54 4d 46 44  |.j'        STMFD|
000009a0  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 31  |   (sp)!,{r0-r11|
000009b0  2c 6c 69 6e 6b 7d 0d 04  74 27 20 20 20 20 20 20  |,link}..t'      |
000009c0  20 20 4c 44 52 20 20 20  20 20 72 31 30 2c 5b 72  |  LDR     r10,[r|
000009d0  31 30 2c 23 6f 62 6a 5f  6c 69 73 74 5d 0d 04 7e  |10,#obj_list]..~|
000009e0  14 2e 72 65 6e 64 65 72  5f 6f 62 6a 5f 6c 6f 6f  |..render_obj_loo|
000009f0  70 0d 04 88 1a 20 20 20  20 20 20 20 20 43 4d 50  |p....        CMP|
00000a00  20 20 20 20 20 72 31 30  2c 23 30 0d 04 92 25 20  |     r10,#0...% |
00000a10  20 20 20 20 20 20 20 4c  44 4d 45 51 46 44 20 28  |       LDMEQFD (|
00000a20  73 70 29 21 2c 7b 72 30  2d 72 31 31 2c 70 63 7d  |sp)!,{r0-r11,pc}|
00000a30  0d 04 9c 2a 20 20 20 20  20 20 20 20 4c 44 52 20  |...*        LDR |
00000a40  20 20 20 20 72 30 2c 5b  72 31 30 2c 23 73 75 62  |    r0,[r10,#sub|
00000a50  6f 62 6a 5f 66 6c 61 67  73 5d 0d 04 a6 20 20 20  |obj_flags]...   |
00000a60  20 20 20 20 20 20 54 53  54 20 20 20 20 20 72 30  |      TST     r0|
00000a70  2c 23 62 69 74 5f 73 75  72 66 0d 04 b0 21 20 20  |,#bit_surf...!  |
00000a80  20 20 20 20 20 20 42 45  51 20 20 20 20 20 72 65  |      BEQ     re|
00000a90  6e 64 65 72 5f 73 75 62  6f 62 6a 0d 04 ba 10 2e  |nder_subobj.....|
00000aa0  72 65 6e 64 65 72 5f 73  75 72 66 0d 04 c4 29 20  |render_surf...) |
00000ab0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
00000ac0  30 2c 5b 72 31 30 2c 23  73 75 62 6f 62 6a 5f 74  |0,[r10,#subobj_t|
00000ad0  79 70 65 5d 0d 04 ce 1e  20 20 20 20 20 20 20 20  |ype]....        |
00000ae0  41 44 44 20 20 20 20 20  72 31 2c 73 70 2c 23 34  |ADD     r1,sp,#4|
00000af0  2a 33 0d 04 d8 1e 20 20  20 20 20 20 20 20 41 44  |*3....        AD|
00000b00  44 20 20 20 20 20 72 32  2c 73 70 2c 23 34 2a 36  |D     r2,sp,#4*6|
00000b10  0d 04 e2 1a 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00000b20  20 20 20 20 72 33 2c 72  31 31 0d 04 ec 19 20 20  |    r3,r11....  |
00000b30  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 34  |      MOV     r4|
00000b40  2c 72 39 0d 04 f6 24 20  20 20 20 20 20 20 20 42  |,r9...$        B|
00000b50  4c 20 20 20 20 20 20 72  65 67 69 73 74 65 72 5f  |L      register_|
00000b60  70 6f 6c 79 67 6f 6e 0d  05 00 1f 20 20 20 20 20  |polygon....     |
00000b70  20 20 20 41 44 44 20 20  20 20 20 72 31 34 2c 73  |   ADD     r14,s|
00000b80  70 2c 23 34 2a 32 0d 05  0a 1f 20 20 20 20 20 20  |p,#4*2....      |
00000b90  20 20 4c 44 4d 49 41 20  20 20 72 31 34 2c 7b 72  |  LDMIA   r14,{r|
00000ba0  33 2c 72 34 7d 0d 05 14  1f 20 20 20 20 20 20 20  |3,r4}....       |
00000bb0  20 42 20 20 20 20 20 20  20 72 65 6e 64 65 72 5f  | B       render_|
00000bc0  6e 65 78 74 0d 05 1e 12  2e 72 65 6e 64 65 72 5f  |next.....render_|
00000bd0  73 75 62 6f 62 6a 0d 05  28 20 20 20 20 20 20 20  |subobj..(       |
00000be0  20 20 53 55 42 20 20 20  20 20 73 70 2c 73 70 2c  |  SUB     sp,sp,|
00000bf0  23 31 32 2b 31 32 0d 05  32 29 20 20 20 20 20 20  |#12+12..2)      |
00000c00  20 20 41 44 44 20 20 20  20 20 72 30 2c 72 31 30  |  ADD     r0,r10|
00000c10  2c 23 73 75 62 6f 62 6a  5f 6f 66 66 73 65 74 0d  |,#subobj_offset.|
00000c20  05 3c 24 20 20 20 20 20  20 20 20 41 44 44 20 20  |.<$        ADD  |
00000c30  20 20 20 72 31 2c 73 70  2c 23 31 32 2b 31 32 2b  |   r1,sp,#12+12+|
00000c40  34 2a 36 0d 05 46 1d 20  20 20 20 20 20 20 20 41  |4*6..F.        A|
00000c50  44 44 20 20 20 20 20 72  32 2c 73 70 2c 23 31 32  |DD     r2,sp,#12|
00000c60  0d 05 50 1a 20 20 20 20  20 20 20 20 42 4c 20 20  |..P.        BL  |
00000c70  20 20 20 20 72 6f 74 61  74 65 0d 05 5a 1d 20 20  |    rotate..Z.  |
00000c80  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 30  |      ADD     r0|
00000c90  2c 73 70 2c 23 31 32 0d  05 64 24 20 20 20 20 20  |,sp,#12..d$     |
00000ca0  20 20 20 41 44 44 20 20  20 20 20 72 31 2c 73 70  |   ADD     r1,sp|
00000cb0  2c 23 31 32 2b 31 32 2b  34 2a 33 0d 05 6e 19 20  |,#12+12+4*3..n. |
00000cc0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00000cd0  32 2c 72 30 0d 05 78 17  20 20 20 20 20 20 20 20  |2,r0..x.        |
00000ce0  42 4c 20 20 20 20 20 20  61 64 64 0d 05 82 28 20  |BL      add...( |
00000cf0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00000d00  30 2c 72 31 30 2c 23 73  75 62 6f 62 6a 5f 61 6e  |0,r10,#subobj_an|
00000d10  67 6c 65 0d 05 8c 24 20  20 20 20 20 20 20 20 41  |gle...$        A|
00000d20  44 44 20 20 20 20 20 72  31 2c 73 70 2c 23 31 32  |DD     r1,sp,#12|
00000d30  2b 31 32 2b 34 2a 36 0d  05 96 19 20 20 20 20 20  |+12+4*6....     |
00000d40  20 20 20 4d 4f 56 20 20  20 20 20 72 32 2c 73 70  |   MOV     r2,sp|
00000d50  0d 05 a0 17 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00000d60  20 20 20 20 61 64 64 0d  05 aa 21 20 20 20 20 20  |    add...!     |
00000d70  20 20 20 4c 44 4d 49 41  20 20 20 28 73 70 29 21  |   LDMIA   (sp)!|
00000d80  2c 7b 72 36 2d 72 38 7d  0d 05 b4 21 20 20 20 20  |,{r6-r8}...!    |
00000d90  20 20 20 20 4c 44 4d 49  41 20 20 20 28 73 70 29  |    LDMIA   (sp)|
00000da0  21 2c 7b 72 33 2d 72 35  7d 0d 05 be 22 20 20 20  |!,{r3-r5}..."   |
00000db0  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00000dc0  29 21 2c 7b 72 39 2d 72  31 31 7d 0d 05 c8 2a 20  |)!,{r9-r11}...* |
00000dd0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 72  |       LDR     r|
00000de0  39 2c 5b 72 31 30 2c 23  73 75 62 6f 62 6a 5f 66  |9,[r10,#subobj_f|
00000df0  6c 61 67 73 5d 0d 05 d2  2a 20 20 20 20 20 20 20  |lags]...*       |
00000e00  20 4c 44 52 20 20 20 20  20 72 31 30 2c 5b 72 31  | LDR     r10,[r1|
00000e10  30 2c 23 73 75 62 6f 62  6a 5f 74 79 70 65 5d 0d  |0,#subobj_type].|
00000e20  05 dc 23 20 20 20 20 20  20 20 20 80 20 20 20 20  |..#        .    |
00000e30  20 72 31 34 2c 72 39 2c  23 62 69 74 5f 6d 65 72  | r14,r9,#bit_mer|
00000e40  67 65 0d 05 e6 1e 20 20  20 20 20 20 20 20 84 52  |ge....        .R|
00000e50  20 20 20 20 20 72 31 31  2c 72 31 31 2c 72 31 34  |     r11,r11,r14|
00000e60  0d 05 f0 1b 20 20 20 20  20 20 20 20 80 20 20 20  |....        .   |
00000e70  20 20 72 39 2c 72 39 2c  23 36 33 0d 05 fa 1e 20  |  r9,r9,#63.... |
00000e80  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 72  |       BL      r|
00000e90  65 6e 64 65 72 5f 6f 62  6a 0d 06 04 22 20 20 20  |ender_obj..."   |
00000ea0  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00000eb0  29 21 2c 7b 72 39 2d 72  31 31 7d 0d 06 0e 1f 20  |)!,{r9-r11}.... |
00000ec0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00000ed0  31 34 2c 73 70 2c 23 34  2a 33 0d 06 18 1f 20 20  |14,sp,#4*3....  |
00000ee0  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 72 31  |      LDMIA   r1|
00000ef0  34 2c 7b 72 33 2d 72 38  7d 0d 06 22 10 2e 72 65  |4,{r3-r8}.."..re|
00000f00  6e 64 65 72 5f 6e 65 78  74 0d 06 2c 2a 20 20 20  |nder_next..,*   |
00000f10  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 30  |     LDR     r10|
00000f20  2c 5b 72 31 30 2c 23 73  75 62 6f 62 6a 5f 6e 65  |,[r10,#subobj_ne|
00000f30  78 74 5d 0d 06 36 23 20  20 20 20 20 20 20 20 42  |xt]..6#        B|
00000f40  20 20 20 20 20 20 20 72  65 6e 64 65 72 5f 6f 62  |       render_ob|
00000f50  6a 5f 6c 6f 6f 70 0d 06  40 04 0d 06 4a 27 2e 63  |j_loop..@...J'.c|
00000f60  6c 69 70 20 20 20 53 54  4d 46 44 20 20 20 28 73  |lip   STMFD   (s|
00000f70  70 29 21 2c 7b 72 30 2d  72 31 31 2c 6c 69 6e 6b  |p)!,{r0-r11,link|
00000f80  7d 0d 06 54 23 20 20 20  20 20 20 20 20 53 55 42  |}..T#        SUB|
00000f90  20 20 20 20 20 73 70 2c  73 70 2c 23 31 32 2b 31  |     sp,sp,#12+1|
00000fa0  32 2b 39 36 0d 06 5e 26  20 20 20 20 20 20 20 20  |2+96..^&        |
00000fb0  4c 44 52 20 20 20 20 20  72 38 2c 5b 72 31 30 2c  |LDR     r8,[r10,|
00000fc0  23 6f 62 6a 5f 6c 69 73  74 5d 0d 06 68 0e 2e 63  |#obj_list]..h..c|
00000fd0  6c 69 70 5f 6c 6f 6f 70  0d 06 72 19 20 20 20 20  |lip_loop..r.    |
00000fe0  20 20 20 20 43 4d 50 20  20 20 20 20 72 38 2c 23  |    CMP     r8,#|
00000ff0  30 0d 06 7c 1d 20 20 20  20 20 20 20 20 42 45 51  |0..|.        BEQ|
00001000  20 20 20 20 20 63 6c 69  70 5f 65 78 69 74 0d 06  |     clip_exit..|
00001010  86 29 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |.)        LDR   |
00001020  20 20 72 39 2c 5b 73 70  2c 23 31 32 2b 31 32 2b  |  r9,[sp,#12+12+|
00001030  39 36 2b 34 2a 39 5d 0d  06 90 29 20 20 20 20 20  |96+4*9]...)     |
00001040  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 72  |   LDR     r0,[r|
00001050  38 2c 23 73 75 62 6f 62  6a 5f 66 6c 61 67 73 5d  |8,#subobj_flags]|
00001060  0d 06 9a 20 20 20 20 20  20 20 20 20 54 53 54 20  |...         TST |
00001070  20 20 20 20 72 30 2c 23  62 69 74 5f 73 75 72 66  |    r0,#bit_surf|
00001080  0d 06 a4 1f 20 20 20 20  20 20 20 20 42 45 51 20  |....        BEQ |
00001090  20 20 20 20 63 6c 69 70  5f 73 75 62 6f 62 6a 0d  |    clip_subobj.|
000010a0  06 ae 0e 2e 63 6c 69 70  5f 73 75 72 66 0d 06 b8  |....clip_surf...|
000010b0  26 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |&        MOV    |
000010c0  20 72 30 2c 23 73 75 62  6f 62 6a 5f 73 75 72 66  | r0,#subobj_surf|
000010d0  72 65 71 0d 06 c2 1f 20  20 20 20 20 20 20 20 42  |req....        B|
000010e0  4c 20 20 20 20 20 20 63  6f 70 79 5f 73 75 62 6f  |L      copy_subo|
000010f0  62 6a 0d 06 cc 1d 20 20  20 20 20 20 20 20 42 56  |bj....        BV|
00001100  53 20 20 20 20 20 63 6c  69 70 5f 65 78 69 74 0d  |S     clip_exit.|
00001110  06 d6 1d 20 20 20 20 20  20 20 20 42 20 20 20 20  |...        B    |
00001120  20 20 20 63 6c 69 70 5f  6e 65 78 74 0d 06 e0 10  |   clip_next....|
00001130  2e 63 6c 69 70 5f 73 75  62 6f 62 6a 0d 06 ea 27  |.clip_subobj...'|
00001140  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00001150  72 30 2c 72 38 2c 23 73  75 62 6f 62 6a 5f 61 6e  |r0,r8,#subobj_an|
00001160  67 6c 65 0d 06 f4 27 20  20 20 20 20 20 20 20 41  |gle...'        A|
00001170  44 44 20 20 20 20 20 72  31 2c 73 70 2c 23 31 32  |DD     r1,sp,#12|
00001180  2b 31 32 2b 39 36 2b 36  2a 34 0d 06 fe 19 20 20  |+12+96+6*4....  |
00001190  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 32  |      MOV     r2|
000011a0  2c 73 70 0d 07 08 17 20  20 20 20 20 20 20 20 42  |,sp....        B|
000011b0  4c 20 20 20 20 20 20 61  64 64 0d 07 12 28 20 20  |L      add...(  |
000011c0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 30  |      ADD     r0|
000011d0  2c 72 38 2c 23 73 75 62  6f 62 6a 5f 6f 66 66 73  |,r8,#subobj_offs|
000011e0  65 74 0d 07 1c 27 20 20  20 20 20 20 20 20 41 44  |et...'        AD|
000011f0  44 20 20 20 20 20 72 31  2c 73 70 2c 23 31 32 2b  |D     r1,sp,#12+|
00001200  31 32 2b 39 36 2b 36 2a  34 0d 07 26 1d 20 20 20  |12+96+6*4..&.   |
00001210  20 20 20 20 20 41 44 44  20 20 20 20 20 72 32 2c  |     ADD     r2,|
00001220  73 70 2c 23 31 32 0d 07  30 1a 20 20 20 20 20 20  |sp,#12..0.      |
00001230  20 20 42 4c 20 20 20 20  20 20 72 6f 74 61 74 65  |  BL      rotate|
00001240  0d 07 3a 1d 20 20 20 20  20 20 20 20 41 44 44 20  |..:.        ADD |
00001250  20 20 20 20 72 30 2c 73  70 2c 23 31 32 0d 07 44  |    r0,sp,#12..D|
00001260  27 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |'        ADD    |
00001270  20 72 31 2c 73 70 2c 23  31 32 2b 31 32 2b 39 36  | r1,sp,#12+12+96|
00001280  2b 33 2a 34 0d 07 4e 19  20 20 20 20 20 20 20 20  |+3*4..N.        |
00001290  4d 4f 56 20 20 20 20 20  72 32 2c 72 30 0d 07 58  |MOV     r2,r0..X|
000012a0  17 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
000012b0  20 61 64 64 0d 07 62 1d  20 20 20 20 20 20 20 20  | add..b.        |
000012c0  4d 4f 56 20 20 20 20 20  72 33 2c 23 31 32 2b 31  |MOV     r3,#12+1|
000012d0  32 0d 07 6c 28 20 20 20  20 20 20 20 20 41 44 44  |2..l(        ADD|
000012e0  20 20 20 20 20 72 34 2c  72 38 2c 23 73 75 62 6f  |     r4,r8,#subo|
000012f0  62 6a 5f 62 6f 75 6e 64  73 0d 07 76 12 2e 72 6f  |bj_bounds..v..ro|
00001300  74 61 74 65 5f 62 6f 75  6e 64 73 0d 07 80 19 20  |tate_bounds.... |
00001310  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00001320  30 2c 72 34 0d 07 8a 19  20 20 20 20 20 20 20 20  |0,r4....        |
00001330  4d 4f 56 20 20 20 20 20  72 31 2c 73 70 0d 07 94  |MOV     r1,sp...|
00001340  1c 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00001350  20 72 32 2c 73 70 2c 72  33 0d 07 9e 1a 20 20 20  | r2,sp,r3....   |
00001360  20 20 20 20 20 42 4c 20  20 20 20 20 20 72 6f 74  |     BL      rot|
00001370  61 74 65 0d 07 a8 1c 20  20 20 20 20 20 20 20 41  |ate....        A|
00001380  44 44 20 20 20 20 20 72  30 2c 73 70 2c 72 33 0d  |DD     r0,sp,r3.|
00001390  07 b2 1d 20 20 20 20 20  20 20 20 41 44 44 20 20  |...        ADD  |
000013a0  20 20 20 72 31 2c 73 70  2c 23 31 32 0d 07 bc 19  |   r1,sp,#12....|
000013b0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000013c0  72 32 2c 72 30 0d 07 c6  17 20 20 20 20 20 20 20  |r2,r0....       |
000013d0  20 42 4c 20 20 20 20 20  20 61 64 64 0d 07 d0 1d  | BL      add....|
000013e0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000013f0  72 34 2c 72 34 2c 23 31  32 0d 07 da 1d 20 20 20  |r4,r4,#12....   |
00001400  20 20 20 20 20 41 44 44  20 20 20 20 20 72 33 2c  |     ADD     r3,|
00001410  72 33 2c 23 31 32 0d 07  e4 20 20 20 20 20 20 20  |r3,#12...       |
00001420  20 20 43 4d 50 20 20 20  20 20 72 33 2c 23 31 32  |  CMP     r3,#12|
00001430  2b 31 32 2b 39 36 0d 07  ee 21 20 20 20 20 20 20  |+12+96...!      |
00001440  20 20 42 4c 54 20 20 20  20 20 72 6f 74 61 74 65  |  BLT     rotate|
00001450  5f 62 6f 75 6e 64 73 0d  07 f8 19 20 20 20 20 20  |_bounds....     |
00001460  20 20 20 4d 4f 56 20 20  20 20 20 72 35 2c 23 30  |   MOV     r5,#0|
00001470  0d 08 02 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |....        MOV |
00001480  20 20 20 20 72 37 2c 23  30 0d 08 0c 16 2e 63 68  |    r7,#0.....ch|
00001490  65 63 6b 5f 62 6f 75 6e  64 5f 6c 6f 6f 70 31 0d  |eck_bound_loop1.|
000014a0  08 16 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000014b0  20 20 20 72 31 34 2c 23  31 0d 08 20 21 20 20 20  |   r14,#1.. !   |
000014c0  20 20 20 20 20 54 53 54  20 20 20 20 20 72 39 2c  |     TST     r9,|
000014d0  72 31 34 2c 4c 53 4c 20  72 37 0d 08 2a 22 20 20  |r14,LSL r7..*"  |
000014e0  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 77 68  |      BNE     wh|
000014f0  6f 6c 6c 79 5f 76 69 73  69 62 6c 65 0d 08 34 1d  |olly_visible..4.|
00001500  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001510  72 33 2c 23 31 32 2b 31  32 0d 08 3e 19 20 20 20  |r3,#12+12..>.   |
00001520  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 36 2c  |     MOV     r6,|
00001530  23 30 0d 08 48 16 2e 63  68 65 63 6b 5f 62 6f 75  |#0..H..check_bou|
00001540  6e 64 5f 6c 6f 6f 70 32  0d 08 52 20 20 20 20 20  |nd_loop2..R     |
00001550  20 20 20 20 4d 4f 56 20  20 20 20 20 72 35 2c 72  |    MOV     r5,r|
00001560  35 2c 4c 53 4c 20 23 31  0d 08 5c 22 20 20 20 20  |5,LSL #1..\"    |
00001570  20 20 20 20 54 53 54 20  20 20 20 20 72 35 2c 23  |    TST     r5,#|
00001580  25 31 30 30 30 30 30 30  30 30 0d 08 66 1c 20 20  |%100000000..f.  |
00001590  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 77 61  |      BNE     wa|
000015a0  73 5f 62 61 64 7a 0d 08  70 1c 20 20 20 20 20 20  |s_badz..p.      |
000015b0  20 20 41 44 44 20 20 20  20 20 72 30 2c 73 70 2c  |  ADD     r0,sp,|
000015c0  72 33 0d 08 7a 19 20 20  20 20 20 20 20 20 4d 4f  |r3..z.        MO|
000015d0  56 20 20 20 20 20 72 31  2c 72 37 0d 08 84 1d 20  |V     r1,r7.... |
000015e0  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 69  |       BL      i|
000015f0  6e 76 69 73 69 62 6c 65  0d 08 8e 1d 20 20 20 20  |nvisible....    |
00001600  20 20 20 20 42 4e 45 20  20 20 20 20 6e 6f 74 5f  |    BNE     not_|
00001610  69 6e 76 69 73 0d 08 98  1c 20 20 20 20 20 20 20  |invis....       |
00001620  20 41 44 44 20 20 20 20  20 72 36 2c 72 36 2c 23  | ADD     r6,r6,#|
00001630  31 0d 08 a2 19 20 20 20  20 20 20 20 20 43 4d 50  |1....        CMP|
00001640  20 20 20 20 20 72 37 2c  23 32 0d 08 ac 1b 20 20  |     r7,#2....  |
00001650  20 20 20 20 20 20 84 52  4c 54 20 20 20 72 35 2c  |      .RLT   r5,|
00001660  72 35 2c 23 31 0d 08 b6  0e 2e 6e 6f 74 5f 69 6e  |r5,#1.....not_in|
00001670  76 69 73 0d 08 c0 0d 2e  77 61 73 5f 62 61 64 7a  |vis.....was_badz|
00001680  0d 08 ca 1d 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00001690  20 20 20 20 72 33 2c 72  33 2c 23 31 32 0d 08 d4  |    r3,r3,#12...|
000016a0  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
000016b0  20 72 33 2c 23 31 32 2b  31 32 2b 39 36 0d 08 de  | r3,#12+12+96...|
000016c0  25 20 20 20 20 20 20 20  20 42 4c 54 20 20 20 20  |%        BLT    |
000016d0  20 63 68 65 63 6b 5f 62  6f 75 6e 64 5f 6c 6f 6f  | check_bound_loo|
000016e0  70 32 0d 08 e8 22 20 20  20 20 20 20 20 20 84 52  |p2..."        .R|
000016f0  20 20 20 20 20 72 35 2c  72 35 2c 72 35 2c 4c 53  |     r5,r5,r5,LS|
00001700  52 20 23 38 0d 08 f2 20  20 20 20 20 20 20 20 20  |R #8...         |
00001710  42 49 43 20 20 20 20 20  72 35 2c 72 35 2c 23 26  |BIC     r5,r5,#&|
00001720  46 46 30 30 0d 08 fc 19  20 20 20 20 20 20 20 20  |FF00....        |
00001730  43 4d 50 20 20 20 20 20  72 36 2c 23 38 0d 09 06  |CMP     r6,#8...|
00001740  1d 20 20 20 20 20 20 20  20 42 45 51 20 20 20 20  |.        BEQ    |
00001750  20 63 6c 69 70 5f 6e 65  78 74 0d 09 10 19 20 20  | clip_next....  |
00001760  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 35  |      CMP     r5|
00001770  2c 23 30 0d 09 1a 1f 20  20 20 20 20 20 20 20 42  |,#0....        B|
00001780  4e 45 20 20 20 20 20 77  68 61 63 6b 79 5f 7a 65  |NE     whacky_ze|
00001790  64 73 0d 09 24 19 20 20  20 20 20 20 20 20 43 4d  |ds..$.        CM|
000017a0  50 20 20 20 20 20 72 36  2c 23 30 0d 09 2e 17 20  |P     r6,#0.... |
000017b0  20 20 20 20 20 20 20 ec  51 20 20 20 72 31 34 2c  |       .Q   r14,|
000017c0  23 31 0d 09 38 23 20 20  20 20 20 20 20 20 84 52  |#1..8#        .R|
000017d0  45 51 20 20 20 72 39 2c  72 39 2c 72 31 34 2c 4c  |EQ   r9,r9,r14,L|
000017e0  53 4c 20 72 37 0d 09 42  10 2e 77 68 61 63 6b 79  |SL r7..B..whacky|
000017f0  5f 7a 65 64 73 0d 09 4c  13 2e 77 68 6f 6c 6c 79  |_zeds..L..wholly|
00001800  5f 76 69 73 69 62 6c 65  0d 09 56 1c 20 20 20 20  |_visible..V.    |
00001810  20 20 20 20 41 44 44 20  20 20 20 20 72 37 2c 72  |    ADD     r7,r|
00001820  37 2c 23 31 0d 09 60 19  20 20 20 20 20 20 20 20  |7,#1..`.        |
00001830  43 4d 50 20 20 20 20 20  72 37 2c 23 36 0d 09 6a  |CMP     r7,#6..j|
00001840  25 20 20 20 20 20 20 20  20 42 4c 54 20 20 20 20  |%        BLT    |
00001850  20 63 68 65 63 6b 5f 62  6f 75 6e 64 5f 6c 6f 6f  | check_bound_loo|
00001860  70 31 0d 09 74 1f 20 20  20 20 20 20 20 20 4d 4f  |p1..t.        MO|
00001870  56 20 20 20 20 20 72 30  2c 23 6f 62 6a 5f 72 65  |V     r0,#obj_re|
00001880  71 0d 09 7e 1a 20 20 20  20 20 20 20 20 42 4c 20  |q..~.        BL |
00001890  20 20 20 20 20 6d 61 6c  6c 6f 63 0d 09 88 1d 20  |     malloc.... |
000018a0  20 20 20 20 20 20 20 42  56 53 20 20 20 20 20 63  |       BVS     c|
000018b0  6c 69 70 5f 65 78 69 74  0d 09 92 19 20 20 20 20  |lip_exit....    |
000018c0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 37 2c 72  |    MOV     r7,r|
000018d0  30 0d 09 9c 19 20 20 20  20 20 20 20 20 4d 4f 56  |0....        MOV|
000018e0  20 20 20 20 20 72 30 2c  23 30 0d 09 a6 25 20 20  |     r0,#0...%  |
000018f0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 30  |      STR     r0|
00001900  2c 5b 72 37 2c 23 6f 62  6a 5f 6c 69 73 74 5d 0d  |,[r7,#obj_list].|
00001910  09 b0 25 20 20 20 20 20  20 20 20 53 54 52 20 20  |..%        STR  |
00001920  20 20 20 72 30 2c 5b 72  37 2c 23 6f 62 6a 5f 6e  |   r0,[r7,#obj_n|
00001930  61 6d 65 5d 0d 09 ba 22  20 20 20 20 20 20 20 20  |ame]..."        |
00001940  4d 4f 56 20 20 20 20 20  72 30 2c 23 73 75 62 6f  |MOV     r0,#subo|
00001950  62 6a 5f 72 65 71 0d 09  c4 1f 20 20 20 20 20 20  |bj_req....      |
00001960  20 20 42 4c 20 20 20 20  20 20 63 6f 70 79 5f 73  |  BL      copy_s|
00001970  75 62 6f 62 6a 0d 09 ce  1d 20 20 20 20 20 20 20  |ubobj....       |
00001980  20 42 56 53 20 20 20 20  20 63 6c 69 70 5f 65 78  | BVS     clip_ex|
00001990  69 74 0d 09 d8 28 20 20  20 20 20 20 20 20 53 54  |it...(        ST|
000019a0  52 20 20 20 20 20 72 37  2c 5b 72 30 2c 23 73 75  |R     r7,[r0,#su|
000019b0  62 6f 62 6a 5f 74 79 70  65 5d 0d 09 e2 29 20 20  |bobj_type]...)  |
000019c0  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 31  |      LDR     r1|
000019d0  2c 5b 72 30 2c 23 73 75  62 6f 62 6a 5f 66 6c 61  |,[r0,#subobj_fla|
000019e0  67 73 5d 0d 09 ec 1d 20  20 20 20 20 20 20 20 42  |gs]....        B|
000019f0  49 43 20 20 20 20 20 72  31 2c 72 31 2c 23 36 33  |IC     r1,r1,#63|
00001a00  0d 09 f6 1b 20 20 20 20  20 20 20 20 84 52 20 20  |....        .R  |
00001a10  20 20 20 72 31 2c 72 31  2c 72 39 0d 0a 00 29 20  |   r1,r1,r9...) |
00001a20  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00001a30  31 2c 5b 72 30 2c 23 73  75 62 6f 62 6a 5f 66 6c  |1,[r0,#subobj_fl|
00001a40  61 67 73 5d 0d 0a 0a 22  20 20 20 20 20 20 20 20  |ags]..."        |
00001a50  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
00001a60  38 2d 72 31 31 7d 0d 0a  14 29 20 20 20 20 20 20  |8-r11}...)      |
00001a70  20 20 4c 44 52 20 20 20  20 20 72 31 30 2c 5b 72  |  LDR     r10,[r|
00001a80  38 2c 23 73 75 62 6f 62  6a 5f 74 79 70 65 5d 0d  |8,#subobj_type].|
00001a90  0a 1e 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00001aa0  20 20 20 72 31 31 2c 72  37 0d 0a 28 1d 20 20 20  |   r11,r7..(.   |
00001ab0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 30 2c  |     ADD     r0,|
00001ac0  73 70 2c 23 31 36 0d 0a  32 1f 20 20 20 20 20 20  |sp,#16..2.      |
00001ad0  20 20 4c 44 4d 49 41 20  20 20 72 30 21 2c 7b 72  |  LDMIA   r0!,{r|
00001ae0  36 2d 72 38 7d 0d 0a 3c  1f 20 20 20 20 20 20 20  |6-r8}..<.       |
00001af0  20 4c 44 4d 49 41 20 20  20 72 30 21 2c 7b 72 33  | LDMIA   r0!,{r3|
00001b00  2d 72 35 7d 0d 0a 46 18  20 20 20 20 20 20 20 20  |-r5}..F.        |
00001b10  42 4c 20 20 20 20 20 20  63 6c 69 70 0d 0a 50 22  |BL      clip..P"|
00001b20  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 20 20  |        LDMFD   |
00001b30  28 73 70 29 21 2c 7b 72  38 2d 72 31 31 7d 0d 0a  |(sp)!,{r8-r11}..|
00001b40  5a 1d 20 20 20 20 20 20  20 20 42 56 53 20 20 20  |Z.        BVS   |
00001b50  20 20 63 6c 69 70 5f 65  78 69 74 0d 0a 64 0e 2e  |  clip_exit..d..|
00001b60  63 6c 69 70 5f 6e 65 78  74 0d 0a 6e 28 20 20 20  |clip_next..n(   |
00001b70  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 38 2c  |     LDR     r8,|
00001b80  5b 72 38 2c 23 73 75 62  6f 62 6a 5f 6e 65 78 74  |[r8,#subobj_next|
00001b90  5d 0d 0a 78 1d 20 20 20  20 20 20 20 20 42 20 20  |]..x.        B  |
00001ba0  20 20 20 20 20 63 6c 69  70 5f 6c 6f 6f 70 0d 0a  |     clip_loop..|
00001bb0  82 0e 2e 63 6c 69 70 5f  65 78 69 74 0d 0a 8c 23  |...clip_exit...#|
00001bc0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00001bd0  73 70 2c 73 70 2c 23 31  32 2b 31 32 2b 39 36 0d  |sp,sp,#12+12+96.|
00001be0  0a 96 1f 20 20 20 20 20  20 20 20 41 44 52 56 53  |...        ADRVS|
00001bf0  20 20 20 72 30 2c 63 6c  69 70 5f 65 72 72 0d 0a  |   r0,clip_err..|
00001c00  a0 1b 20 20 20 20 20 20  20 20 53 54 52 56 53 20  |..        STRVS |
00001c10  20 20 72 30 2c 5b 73 70  5d 0d 0a aa 25 20 20 20  |  r0,[sp]...%   |
00001c20  20 20 20 20 20 4c 44 4d  46 44 20 20 20 28 73 70  |     LDMFD   (sp|
00001c30  29 21 2c 7b 72 30 2d 72  31 31 2c 70 63 7d 0d 0a  |)!,{r0-r11,pc}..|
00001c40  b4 0d 2e 63 6c 69 70 5f  65 72 72 0d 0a be 18 20  |...clip_err.... |
00001c50  20 20 20 20 20 20 20 44  43 44 20 20 20 20 20 26  |       DCD     &|
00001c60  31 38 34 0d 0a c8 23 20  20 20 20 20 20 20 20 45  |184...#        E|
00001c70  51 55 53 20 20 20 20 22  4f 75 74 20 6f 66 20 6d  |QUS    "Out of m|
00001c80  65 6d 6f 72 79 22 0d 0a  d2 15 20 20 20 20 20 20  |emory"....      |
00001c90  20 20 44 43 42 20 20 20  20 20 30 0d 0a dc 11 20  |  DCB     0.... |
00001ca0  20 20 20 20 20 20 20 41  4c 49 47 4e 0d 0a e6 04  |       ALIGN....|
00001cb0  0d 0a f0 10 2e 63 6f 70  79 5f 73 75 62 6f 62 6a  |.....copy_subobj|
00001cc0  0d 0a fa 26 20 20 20 20  20 20 20 20 53 54 4d 46  |...&        STMF|
00001cd0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 36  |D   (sp)!,{r0-r6|
00001ce0  2c 6c 69 6e 6b 7d 0d 0b  04 19 20 20 20 20 20 20  |,link}....      |
00001cf0  20 20 4d 4f 56 20 20 20  20 20 72 36 2c 72 30 0d  |  MOV     r6,r0.|
00001d00  0b 0e 1a 20 20 20 20 20  20 20 20 42 4c 20 20 20  |...        BL   |
00001d10  20 20 20 6d 61 6c 6c 6f  63 0d 0b 18 24 20 20 20  |   malloc...$   |
00001d20  20 20 20 20 20 4c 44 4d  56 53 46 44 20 28 73 70  |     LDMVSFD (sp|
00001d30  29 21 2c 7b 72 30 2d 72  36 2c 70 63 7d 0d 0b 22  |)!,{r0-r6,pc}.."|
00001d40  1b 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
00001d50  20 72 30 2c 5b 73 70 5d  0d 0b 2c 19 20 20 20 20  | r0,[sp]..,.    |
00001d60  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 2c 23  |    MOV     r1,#|
00001d70  30 0d 0b 36 1e 20 20 20  20 20 20 20 20 53 54 52  |0..6.        STR|
00001d80  20 20 20 20 20 72 31 2c  5b 72 30 5d 2c 23 34 0d  |     r1,[r0],#4.|
00001d90  0b 40 1d 20 20 20 20 20  20 20 20 41 44 44 20 20  |.@.        ADD  |
00001da0  20 20 20 72 31 34 2c 72  38 2c 23 34 0d 0b 4a 1c  |   r14,r8,#4..J.|
00001db0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
00001dc0  72 31 2c 72 36 2c 23 34  0d 0b 54 16 2e 63 6f 70  |r1,r6,#4..T..cop|
00001dd0  79 5f 73 75 62 6f 62 6a  5f 6c 6f 6f 70 31 0d 0b  |y_subobj_loop1..|
00001de0  5e 1a 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |^.        CMP   |
00001df0  20 20 72 31 2c 23 31 36  0d 0b 68 20 20 20 20 20  |  r1,#16..h     |
00001e00  20 20 20 20 4c 44 4d 47  45 49 41 20 72 31 34 21  |    LDMGEIA r14!|
00001e10  2c 7b 72 32 2d 72 35 7d  0d 0b 72 1f 20 20 20 20  |,{r2-r5}..r.    |
00001e20  20 20 20 20 53 54 4d 47  45 49 41 20 72 30 21 2c  |    STMGEIA r0!,|
00001e30  7b 72 32 2d 72 35 7d 0d  0b 7c 1d 20 20 20 20 20  |{r2-r5}..|.     |
00001e40  20 20 20 53 55 42 47 45  20 20 20 72 31 2c 72 31  |   SUBGE   r1,r1|
00001e50  2c 23 31 36 0d 0b 86 25  20 20 20 20 20 20 20 20  |,#16...%        |
00001e60  42 47 45 20 20 20 20 20  63 6f 70 79 5f 73 75 62  |BGE     copy_sub|
00001e70  6f 62 6a 5f 6c 6f 6f 70  31 0d 0b 90 16 2e 63 6f  |obj_loop1.....co|
00001e80  70 79 5f 73 75 62 6f 62  6a 5f 6c 6f 6f 70 32 0d  |py_subobj_loop2.|
00001e90  0b 9a 19 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00001ea0  20 20 20 72 31 2c 23 34  0d 0b a4 1f 20 20 20 20  |   r1,#4....    |
00001eb0  20 20 20 20 4c 44 52 47  45 20 20 20 72 32 2c 5b  |    LDRGE   r2,[|
00001ec0  72 31 34 5d 2c 23 34 0d  0b ae 1e 20 20 20 20 20  |r14],#4....     |
00001ed0  20 20 20 53 54 52 47 45  20 20 20 72 32 2c 5b 72  |   STRGE   r2,[r|
00001ee0  30 5d 2c 23 34 0d 0b b8  25 20 20 20 20 20 20 20  |0],#4...%       |
00001ef0  20 42 47 45 20 20 20 20  20 63 6f 70 79 5f 73 75  | BGE     copy_su|
00001f00  62 6f 62 6a 5f 6c 6f 6f  70 32 0d 0b c2 1c 20 20  |bobj_loop2....  |
00001f10  20 20 20 20 20 20 53 55  42 20 20 20 20 20 72 30  |      SUB     r0|
00001f20  2c 72 30 2c 72 36 0d 0b  cc 24 20 20 20 20 20 20  |,r0,r6...$      |
00001f30  20 20 41 44 44 20 20 20  20 20 72 31 2c 72 31 31  |  ADD     r1,r11|
00001f40  2c 23 6f 62 6a 5f 6c 69  73 74 0d 0b d6 16 2e 61  |,#obj_list.....a|
00001f50  64 64 5f 73 75 62 6f 62  6a 5f 74 6f 5f 65 6e 64  |dd_subobj_to_end|
00001f60  0d 0b e0 1b 20 20 20 20  20 20 20 20 4c 44 52 20  |....        LDR |
00001f70  20 20 20 20 72 32 2c 5b  72 31 5d 0d 0b ea 19 20  |    r2,[r1].... |
00001f80  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00001f90  32 2c 23 30 0d 0b f4 26  20 20 20 20 20 20 20 20  |2,#0...&        |
00001fa0  41 44 44 4e 45 20 20 20  72 31 2c 72 32 2c 23 73  |ADDNE   r1,r2,#s|
00001fb0  75 62 6f 62 6a 5f 6e 65  78 74 0d 0b fe 25 20 20  |ubobj_next...%  |
00001fc0  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 61 64  |      BNE     ad|
00001fd0  64 5f 73 75 62 6f 62 6a  5f 74 6f 5f 65 6e 64 0d  |d_subobj_to_end.|
00001fe0  0c 08 1b 20 20 20 20 20  20 20 20 53 54 52 20 20  |...        STR  |
00001ff0  20 20 20 72 30 2c 5b 72  31 5d 0d 0c 12 24 20 20  |   r0,[r1]...$  |
00002000  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00002010  70 29 21 2c 7b 72 30 2d  72 36 2c 70 63 7d 0d 0c  |p)!,{r0-r6,pc}..|
00002020  1c 04 0d 0c 26 26 2e 61  64 64 20 20 20 20 53 54  |....&&.add    ST|
00002030  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00002040  72 38 2c 6c 69 6e 6b 7d  0d 0c 30 1e 20 20 20 20  |r8,link}..0.    |
00002050  20 20 20 20 4c 44 4d 49  41 20 20 20 72 30 2c 7b  |    LDMIA   r0,{|
00002060  72 33 2d 72 35 7d 0d 0c  3a 1e 20 20 20 20 20 20  |r3-r5}..:.      |
00002070  20 20 4c 44 4d 49 41 20  20 20 72 31 2c 7b 72 36  |  LDMIA   r1,{r6|
00002080  2d 72 38 7d 0d 0c 44 1c  20 20 20 20 20 20 20 20  |-r8}..D.        |
00002090  41 44 44 20 20 20 20 20  72 33 2c 72 33 2c 72 36  |ADD     r3,r3,r6|
000020a0  0d 0c 4e 1c 20 20 20 20  20 20 20 20 41 44 44 20  |..N.        ADD |
000020b0  20 20 20 20 72 34 2c 72  34 2c 72 37 0d 0c 58 1c  |    r4,r4,r7..X.|
000020c0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000020d0  72 35 2c 72 35 2c 72 38  0d 0c 62 1e 20 20 20 20  |r5,r5,r8..b.    |
000020e0  20 20 20 20 53 54 4d 49  41 20 20 20 72 32 2c 7b  |    STMIA   r2,{|
000020f0  72 33 2d 72 35 7d 0d 0c  6c 24 20 20 20 20 20 20  |r3-r5}..l$      |
00002100  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
00002110  7b 72 30 2d 72 38 2c 70  63 7d 0d 0c 76 04 0d 0c  |{r0-r8,pc}..v...|
00002120  80 0e 2e 66 72 65 65 5f  74 72 65 65 0d 0c 8a 27  |...free_tree...'|
00002130  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 20 20  |        STMFD   |
00002140  28 73 70 29 21 2c 7b 72  30 2d 72 31 31 2c 6c 69  |(sp)!,{r0-r11,li|
00002150  6e 6b 7d 0d 0c 94 26 20  20 20 20 20 20 20 20 4c  |nk}...&        L|
00002160  44 52 20 20 20 20 20 72  30 2c 5b 72 31 31 2c 23  |DR     r0,[r11,#|
00002170  6f 62 6a 5f 6e 61 6d 65  5d 0d 0c 9e 19 20 20 20  |obj_name]....   |
00002180  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00002190  23 30 0d 0c a8 18 20 20  20 20 20 20 20 20 42 4c  |#0....        BL|
000021a0  4e 45 20 20 20 20 66 72  65 65 0d 0c b2 26 20 20  |NE    free...&  |
000021b0  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 38  |      LDR     r8|
000021c0  2c 5b 72 31 31 2c 23 6f  62 6a 5f 6c 69 73 74 5d  |,[r11,#obj_list]|
000021d0  0d 0c bc 13 2e 66 72 65  65 5f 74 72 65 65 5f 6c  |.....free_tree_l|
000021e0  6f 6f 70 0d 0c c6 19 20  20 20 20 20 20 20 20 43  |oop....        C|
000021f0  4d 50 20 20 20 20 20 72  38 2c 23 30 0d 0c d0 1e  |MP     r8,#0....|
00002200  20 20 20 20 20 20 20 20  42 45 51 20 20 20 20 20  |        BEQ     |
00002210  66 72 65 65 64 5f 6c 69  73 74 0d 0c da 29 20 20  |freed_list...)  |
00002220  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 30  |      LDR     r0|
00002230  2c 5b 72 38 2c 23 73 75  62 6f 62 6a 5f 66 6c 61  |,[r8,#subobj_fla|
00002240  67 73 5d 0d 0c e4 20 20  20 20 20 20 20 20 20 54  |gs]...         T|
00002250  53 54 20 20 20 20 20 72  30 2c 23 62 69 74 5f 73  |ST     r0,#bit_s|
00002260  75 72 66 0d 0c ee 1e 20  20 20 20 20 20 20 20 42  |urf....        B|
00002270  4e 45 20 20 20 20 20 66  72 65 65 5f 74 72 65 65  |NE     free_tree|
00002280  32 0d 0c f8 1b 20 20 20  20 20 20 20 20 4d 4f 56  |2....        MOV|
00002290  20 20 20 20 20 72 31 30  2c 72 31 31 0d 0d 02 29  |     r10,r11...)|
000022a0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
000022b0  72 31 31 2c 5b 72 38 2c  23 73 75 62 6f 62 6a 5f  |r11,[r8,#subobj_|
000022c0  74 79 70 65 5d 0d 0d 0c  1d 20 20 20 20 20 20 20  |type]....       |
000022d0  20 42 4c 20 20 20 20 20  20 66 72 65 65 5f 74 72  | BL      free_tr|
000022e0  65 65 0d 0d 16 1b 20 20  20 20 20 20 20 20 4d 4f  |ee....        MO|
000022f0  56 20 20 20 20 20 72 31  31 2c 72 31 30 0d 0d 20  |V     r11,r10.. |
00002300  0f 2e 66 72 65 65 5f 74  72 65 65 32 0d 0d 2a 28  |..free_tree2..*(|
00002310  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00002320  72 37 2c 5b 72 38 2c 23  73 75 62 6f 62 6a 5f 6e  |r7,[r8,#subobj_n|
00002330  65 78 74 5d 0d 0d 34 19  20 20 20 20 20 20 20 20  |ext]..4.        |
00002340  4d 4f 56 20 20 20 20 20  72 30 2c 72 38 0d 0d 3e  |MOV     r0,r8..>|
00002350  18 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
00002360  20 66 72 65 65 0d 0d 48  19 20 20 20 20 20 20 20  | free..H.       |
00002370  20 4d 4f 56 20 20 20 20  20 72 38 2c 72 37 0d 0d  | MOV     r8,r7..|
00002380  52 22 20 20 20 20 20 20  20 20 42 20 20 20 20 20  |R"        B     |
00002390  20 20 66 72 65 65 5f 74  72 65 65 5f 6c 6f 6f 70  |  free_tree_loop|
000023a0  0d 0d 5c 0f 2e 66 72 65  65 64 5f 6c 69 73 74 0d  |..\..freed_list.|
000023b0  0d 66 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.f.        MOV  |
000023c0  20 20 20 72 30 2c 72 31  31 0d 0d 70 18 20 20 20  |   r0,r11..p.   |
000023d0  20 20 20 20 20 42 4c 20  20 20 20 20 20 66 72 65  |     BL      fre|
000023e0  65 0d 0d 7a 25 20 20 20  20 20 20 20 20 4c 44 4d  |e..z%        LDM|
000023f0  46 44 20 20 20 28 73 70  29 21 2c 7b 72 30 2d 72  |FD   (sp)!,{r0-r|
00002400  31 31 2c 70 63 7d 0d 0d  84 04 0d 0d 8e 0f 2e 70  |11,pc}.........p|
00002410  6c 6f 74 5f 66 61 63 65  73 0d 0d 98 27 20 20 20  |lot_faces...'   |
00002420  20 20 20 20 20 53 54 4d  46 44 20 20 20 28 73 70  |     STMFD   (sp|
00002430  29 21 2c 7b 72 30 2d 72  31 31 2c 6c 69 6e 6b 7d  |)!,{r0-r11,link}|
00002440  0d 0d a2 20 20 20 20 20  20 20 20 20 a4 61 64 72  |...         .adr|
00002450  6c 28 31 34 2c 70 6f 6c  79 5f 70 6f 69 6e 74 29  |l(14,poly_point)|
00002460  0d 0d ac 20 20 20 20 20  20 20 20 20 4c 44 4d 49  |...         LDMI|
00002470  41 20 20 20 72 31 34 2c  7b 72 39 2d 72 31 31 7d  |A   r14,{r9-r11}|
00002480  0d 0d b6 1a 20 20 20 20  20 20 20 20 43 4d 50 20  |....        CMP |
00002490  20 20 20 20 72 31 31 2c  23 30 0d 0d c0 19 20 20  |    r11,#0....  |
000024a0  20 20 20 20 20 20 43 4d  50 4e 45 20 20 20 72 39  |      CMPNE   r9|
000024b0  2c 23 30 0d 0d ca 25 20  20 20 20 20 20 20 20 4c  |,#0...%        L|
000024c0  44 4d 45 51 46 44 20 28  73 70 29 21 2c 7b 72 30  |DMEQFD (sp)!,{r0|
000024d0  2d 72 31 31 2c 70 63 7d  0d 0d d4 1a 20 20 20 20  |-r11,pc}....    |
000024e0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 30 2c 72  |    MOV     r0,r|
000024f0  31 31 0d 0d de 19 20 20  20 20 20 20 20 20 4d 4f  |11....        MO|
00002500  56 20 20 20 20 20 72 31  2c 72 39 0d 0d e8 1e 20  |V     r1,r9.... |
00002510  20 20 20 20 20 20 20 41  44 52 20 20 20 20 20 72  |       ADR     r|
00002520  32 2c 63 6f 6d 70 61 72  65 0d 0d f2 22 20 20 20  |2,compare..."   |
00002530  20 20 20 20 20 53 57 49  20 20 20 20 20 22 58 4f  |     SWI     "XO|
00002540  53 5f 48 65 61 70 53 6f  72 74 22 0d 0d fc 1b 20  |S_HeapSort".... |
00002550  20 20 20 20 20 20 20 a4  61 64 72 6c 28 31 34 2c  |       .adrl(14,|
00002560  66 6c 61 67 73 29 0d 0e  06 1c 20 20 20 20 20 20  |flags)....      |
00002570  20 20 4c 44 52 20 20 20  20 20 72 33 2c 5b 72 31  |  LDR     r3,[r1|
00002580  34 5d 0d 0e 10 13 2e 70  6c 6f 74 5f 66 61 63 65  |4].....plot_face|
00002590  5f 6c 6f 6f 70 0d 0e 1a  1e 20 20 20 20 20 20 20  |_loop....       |
000025a0  20 4c 44 52 20 20 20 20  20 72 38 2c 5b 72 39 5d  | LDR     r8,[r9]|
000025b0  2c 23 34 0d 0e 24 1e 20  20 20 20 20 20 20 20 4c  |,#4..$.        L|
000025c0  44 52 20 20 20 20 20 72  37 2c 5b 72 38 2c 23 34  |DR     r7,[r8,#4|
000025d0  5d 0d 0e 2e 1c 20 20 20  20 20 20 20 20 41 44 44  |]....        ADD|
000025e0  20 20 20 20 20 72 38 2c  72 38 2c 23 38 0d 0e 38  |     r8,r8,#8..8|
000025f0  14 2e 70 6c 6f 74 5f 66  61 63 65 5f 6c 6f 6f 70  |..plot_face_loop|
00002600  32 0d 0e 42 1f 20 20 20  20 20 20 20 20 4c 44 4d  |2..B.        LDM|
00002610  49 41 20 20 20 72 38 21  2c 7b 72 32 2c 72 36 7d  |IA   r8!,{r2,r6}|
00002620  0d 0e 4c 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..L.        MOV |
00002630  20 20 20 20 72 30 2c 72  36 0d 0e 56 19 20 20 20  |    r0,r6..V.   |
00002640  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 31 2c  |     MOV     r1,|
00002650  72 38 0d 0e 60 1b 20 20  20 20 20 20 20 20 42 4c  |r8..`.        BL|
00002660  20 20 20 20 20 20 73 77  69 28 30 30 29 0d 0e 6a  |      swi(00)..j|
00002670  23 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |#        ADD    |
00002680  20 72 38 2c 72 38 2c 72  36 2c 4c 53 4c 20 23 33  | r8,r8,r6,LSL #3|
00002690  0d 0e 74 1c 20 20 20 20  20 20 20 20 53 55 42 53  |..t.        SUBS|
000026a0  20 20 20 20 72 37 2c 72  37 2c 23 31 0d 0e 7e 23  |    r7,r7,#1..~#|
000026b0  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
000026c0  70 6c 6f 74 5f 66 61 63  65 5f 6c 6f 6f 70 32 0d  |plot_face_loop2.|
000026d0  0e 88 1e 20 20 20 20 20  20 20 20 53 55 42 53 20  |...        SUBS |
000026e0  20 20 20 72 31 31 2c 72  31 31 2c 23 31 0d 0e 92  |   r11,r11,#1...|
000026f0  22 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |"        BNE    |
00002700  20 70 6c 6f 74 5f 66 61  63 65 5f 6c 6f 6f 70 0d  | plot_face_loop.|
00002710  0e 9c 25 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |..%        LDMFD|
00002720  20 20 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 31  |   (sp)!,{r0-r11|
00002730  2c 70 63 7d 0d 0e a6 04  0d 0e b0 0c 2e 63 6f 6d  |,pc}.........com|
00002740  70 61 72 65 0d 0e ba 1b  20 20 20 20 20 20 20 20  |pare....        |
00002750  4c 44 52 20 20 20 20 20  72 32 2c 5b 72 30 5d 0d  |LDR     r2,[r0].|
00002760  0e c4 1b 20 20 20 20 20  20 20 20 4c 44 52 20 20  |...        LDR  |
00002770  20 20 20 72 33 2c 5b 72  31 5d 0d 0e ce 19 20 20  |   r3,[r1]....  |
00002780  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 33  |      CMP     r3|
00002790  2c 72 32 0d 0e d8 1b 20  20 20 20 20 20 20 20 4d  |,r2....        M|
000027a0  4f 56 20 20 20 20 20 70  63 2c 6c 69 6e 6b 0d 0e  |OV     pc,link..|
000027b0  e2 04 0d 0e ec 0e 2e 69  6e 76 69 73 69 62 6c 65  |.......invisible|
000027c0  0d 0e f6 27 20 20 20 20  20 20 20 20 53 54 4d 46  |...'        STMF|
000027d0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
000027e0  31 2c 6c 69 6e 6b 7d 0d  0f 00 1e 20 20 20 20 20  |1,link}....     |
000027f0  20 20 20 4c 44 4d 49 41  20 20 20 72 30 2c 7b 72  |   LDMIA   r0,{r|
00002800  37 2d 72 39 7d 0d 0f 0a  17 20 20 20 20 20 20 20  |7-r9}....       |
00002810  20 a4 61 64 72 6c 28 31  34 2c 73 29 0d 0f 14 21  | .adrl(14,s)...!|
00002820  20 20 20 20 20 20 20 20  4c 44 4d 49 41 20 20 20  |        LDMIA   |
00002830  72 31 34 2c 7b 72 31 30  2c 72 31 31 7d 0d 0f 1e  |r14,{r10,r11}...|
00002840  23 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |#        ADD    |
00002850  20 70 63 2c 70 63 2c 72  31 2c 4c 53 4c 20 23 32  | pc,pc,r1,LSL #2|
00002860  0d 0f 28 15 20 20 20 20  20 20 20 20 44 43 44 20  |..(.        DCD |
00002870  20 20 20 20 30 0d 0f 32  1e 20 20 20 20 20 20 20  |    0..2.       |
00002880  20 42 20 20 20 20 20 20  20 63 68 65 63 6b 5f 6d  | B       check_m|
00002890  61 78 7a 0d 0f 3c 1e 20  20 20 20 20 20 20 20 42  |axz..<.        B|
000028a0  20 20 20 20 20 20 20 63  68 65 63 6b 5f 6d 69 6e  |       check_min|
000028b0  7a 0d 0f 46 1e 20 20 20  20 20 20 20 20 42 20 20  |z..F.        B  |
000028c0  20 20 20 20 20 63 68 65  63 6b 5f 6d 69 6e 78 0d  |     check_minx.|
000028d0  0f 50 1e 20 20 20 20 20  20 20 20 42 20 20 20 20  |.P.        B    |
000028e0  20 20 20 63 68 65 63 6b  5f 6d 61 78 78 0d 0f 5a  |   check_maxx..Z|
000028f0  1e 20 20 20 20 20 20 20  20 42 20 20 20 20 20 20  |.        B      |
00002900  20 63 68 65 63 6b 5f 6d  69 6e 79 0d 0f 64 1e 20  | check_miny..d. |
00002910  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 63  |       B       c|
00002920  68 65 63 6b 5f 6d 61 78  79 0d 0f 6e 0f 2e 63 68  |heck_maxy..n..ch|
00002930  65 63 6b 5f 6d 61 78 7a  0d 0f 78 1e 20 20 20 20  |eck_maxz..x.    |
00002940  20 20 20 20 4c 44 52 20  20 20 20 20 72 32 2c 5b  |    LDR     r2,[|
00002950  72 30 2c 23 38 5d 0d 0f  82 1a 20 20 20 20 20 20  |r0,#8]....      |
00002960  20 20 a4 61 64 72 6c 28  33 2c 6d 61 78 5f 7a 29  |  .adrl(3,max_z)|
00002970  0d 0f 8c 1b 20 20 20 20  20 20 20 20 4c 44 52 20  |....        LDR |
00002980  20 20 20 20 72 33 2c 5b  72 33 5d 0d 0f 96 19 20  |    r3,[r3].... |
00002990  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000029a0  32 2c 72 33 0d 0f a0 1e  20 20 20 20 20 20 20 20  |2,r3....        |
000029b0  42 4c 54 20 20 20 20 20  69 73 5f 76 69 73 69 62  |BLT     is_visib|
000029c0  6c 65 0d 0f aa 20 20 20  20 20 20 20 20 20 42 20  |le...         B |
000029d0  20 20 20 20 20 20 69 73  5f 69 6e 76 69 73 69 62  |      is_invisib|
000029e0  6c 65 0d 0f b4 0f 2e 63  68 65 63 6b 5f 6d 69 6e  |le.....check_min|
000029f0  7a 0d 0f be 1e 20 20 20  20 20 20 20 20 4c 44 52  |z....        LDR|
00002a00  20 20 20 20 20 72 32 2c  5b 72 30 2c 23 38 5d 0d  |     r2,[r0,#8].|
00002a10  0f c8 1a 20 20 20 20 20  20 20 20 a4 61 64 72 6c  |...        .adrl|
00002a20  28 33 2c 6d 69 6e 5f 7a  29 0d 0f d2 1b 20 20 20  |(3,min_z)....   |
00002a30  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 33 2c  |     LDR     r3,|
00002a40  5b 72 33 5d 0d 0f dc 19  20 20 20 20 20 20 20 20  |[r3]....        |
00002a50  43 4d 50 20 20 20 20 20  72 32 2c 72 33 0d 0f e6  |CMP     r2,r3...|
00002a60  1e 20 20 20 20 20 20 20  20 42 47 54 20 20 20 20  |.        BGT    |
00002a70  20 69 73 5f 76 69 73 69  62 6c 65 0d 0f f0 20 20  | is_visible...  |
00002a80  20 20 20 20 20 20 20 42  20 20 20 20 20 20 20 69  |       B       i|
00002a90  73 5f 69 6e 76 69 73 69  62 6c 65 0d 0f fa 0f 2e  |s_invisible.....|
00002aa0  63 68 65 63 6b 5f 6d 69  6e 78 0d 10 04 1d 20 20  |check_minx....  |
00002ab0  20 20 20 20 20 20 4d 55  4c 20 20 20 20 20 72 30  |      MUL     r0|
00002ac0  2c 72 31 30 2c 72 37 0d  10 0e 1d 20 20 20 20 20  |,r10,r7....     |
00002ad0  20 20 20 41 44 44 20 20  20 20 20 72 31 2c 72 39  |   ADD     r1,r9|
00002ae0  2c 72 31 31 0d 10 18 1a  20 20 20 20 20 20 20 20  |,r11....        |
00002af0  42 4c 20 20 20 20 20 20  64 69 76 69 64 65 0d 10  |BL      divide..|
00002b00  22 1e 20 20 20 20 20 20  20 20 a4 61 64 72 6c 28  |".        .adrl(|
00002b10  31 34 2c 73 63 72 5f 6d  69 6e 78 29 0d 10 2c 1d  |14,scr_minx)..,.|
00002b20  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00002b30  72 31 34 2c 5b 72 31 34  5d 0d 10 36 1a 20 20 20  |r14,[r14]..6.   |
00002b40  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 32 2c  |     CMP     r2,|
00002b50  72 31 34 0d 10 40 1e 20  20 20 20 20 20 20 20 42  |r14..@.        B|
00002b60  47 54 20 20 20 20 20 69  73 5f 76 69 73 69 62 6c  |GT     is_visibl|
00002b70  65 0d 10 4a 20 20 20 20  20 20 20 20 20 42 20 20  |e..J         B  |
00002b80  20 20 20 20 20 69 73 5f  69 6e 76 69 73 69 62 6c  |     is_invisibl|
00002b90  65 0d 10 54 0f 2e 63 68  65 63 6b 5f 6d 61 78 78  |e..T..check_maxx|
00002ba0  0d 10 5e 1d 20 20 20 20  20 20 20 20 4d 55 4c 20  |..^.        MUL |
00002bb0  20 20 20 20 72 30 2c 72  31 30 2c 72 37 0d 10 68  |    r0,r10,r7..h|
00002bc0  1d 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00002bd0  20 72 31 2c 72 39 2c 72  31 31 0d 10 72 1a 20 20  | r1,r9,r11..r.  |
00002be0  20 20 20 20 20 20 42 4c  20 20 20 20 20 20 64 69  |      BL      di|
00002bf0  76 69 64 65 0d 10 7c 1e  20 20 20 20 20 20 20 20  |vide..|.        |
00002c00  a4 61 64 72 6c 28 31 34  2c 73 63 72 5f 6d 61 78  |.adrl(14,scr_max|
00002c10  78 29 0d 10 86 1d 20 20  20 20 20 20 20 20 4c 44  |x)....        LD|
00002c20  52 20 20 20 20 20 72 31  34 2c 5b 72 31 34 5d 0d  |R     r14,[r14].|
00002c30  10 90 1a 20 20 20 20 20  20 20 20 43 4d 50 20 20  |...        CMP  |
00002c40  20 20 20 72 32 2c 72 31  34 0d 10 9a 1e 20 20 20  |   r2,r14....   |
00002c50  20 20 20 20 20 42 4c 54  20 20 20 20 20 69 73 5f  |     BLT     is_|
00002c60  76 69 73 69 62 6c 65 0d  10 a4 20 20 20 20 20 20  |visible...      |
00002c70  20 20 20 42 20 20 20 20  20 20 20 69 73 5f 69 6e  |   B       is_in|
00002c80  76 69 73 69 62 6c 65 0d  10 ae 0f 2e 63 68 65 63  |visible.....chec|
00002c90  6b 5f 6d 69 6e 79 0d 10  b8 1d 20 20 20 20 20 20  |k_miny....      |
00002ca0  20 20 4d 55 4c 20 20 20  20 20 72 30 2c 72 31 30  |  MUL     r0,r10|
00002cb0  2c 72 38 0d 10 c2 1d 20  20 20 20 20 20 20 20 41  |,r8....        A|
00002cc0  44 44 20 20 20 20 20 72  31 2c 72 39 2c 72 31 31  |DD     r1,r9,r11|
00002cd0  0d 10 cc 1a 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00002ce0  20 20 20 20 64 69 76 69  64 65 0d 10 d6 1e 20 20  |    divide....  |
00002cf0  20 20 20 20 20 20 a4 61  64 72 6c 28 31 34 2c 73  |      .adrl(14,s|
00002d00  63 72 5f 6d 69 6e 79 29  0d 10 e0 1d 20 20 20 20  |cr_miny)....    |
00002d10  20 20 20 20 4c 44 52 20  20 20 20 20 72 31 34 2c  |    LDR     r14,|
00002d20  5b 72 31 34 5d 0d 10 ea  1a 20 20 20 20 20 20 20  |[r14]....       |
00002d30  20 43 4d 50 20 20 20 20  20 72 32 2c 72 31 34 0d  | CMP     r2,r14.|
00002d40  10 f4 1e 20 20 20 20 20  20 20 20 42 47 54 20 20  |...        BGT  |
00002d50  20 20 20 69 73 5f 76 69  73 69 62 6c 65 0d 10 fe  |   is_visible...|
00002d60  20 20 20 20 20 20 20 20  20 42 20 20 20 20 20 20  |         B      |
00002d70  20 69 73 5f 69 6e 76 69  73 69 62 6c 65 0d 11 08  | is_invisible...|
00002d80  0f 2e 63 68 65 63 6b 5f  6d 61 78 79 0d 11 12 1d  |..check_maxy....|
00002d90  20 20 20 20 20 20 20 20  4d 55 4c 20 20 20 20 20  |        MUL     |
00002da0  72 30 2c 72 31 30 2c 72  38 0d 11 1c 1d 20 20 20  |r0,r10,r8....   |
00002db0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 2c  |     ADD     r1,|
00002dc0  72 39 2c 72 31 31 0d 11  26 1a 20 20 20 20 20 20  |r9,r11..&.      |
00002dd0  20 20 42 4c 20 20 20 20  20 20 64 69 76 69 64 65  |  BL      divide|
00002de0  0d 11 30 1e 20 20 20 20  20 20 20 20 a4 61 64 72  |..0.        .adr|
00002df0  6c 28 31 34 2c 73 63 72  5f 6d 61 78 79 29 0d 11  |l(14,scr_maxy)..|
00002e00  3a 1d 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |:.        LDR   |
00002e10  20 20 72 31 34 2c 5b 72  31 34 5d 0d 11 44 1a 20  |  r14,[r14]..D. |
00002e20  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
00002e30  32 2c 72 31 34 0d 11 4e  1e 20 20 20 20 20 20 20  |2,r14..N.       |
00002e40  20 42 4c 54 20 20 20 20  20 69 73 5f 76 69 73 69  | BLT     is_visi|
00002e50  62 6c 65 0d 11 58 11 2e  69 73 5f 69 6e 76 69 73  |ble..X..is_invis|
00002e60  69 62 6c 65 0d 11 62 19  20 20 20 20 20 20 20 20  |ible..b.        |
00002e70  43 4d 50 20 20 20 20 20  72 30 2c 72 30 0d 11 6c  |CMP     r0,r0..l|
00002e80  25 20 20 20 20 20 20 20  20 4c 44 4d 46 44 20 20  |%        LDMFD  |
00002e90  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 31 2c 70  | (sp)!,{r0-r11,p|
00002ea0  63 7d 0d 11 76 0f 2e 69  73 5f 76 69 73 69 62 6c  |c}..v..is_visibl|
00002eb0  65 0d 11 80 19 20 20 20  20 20 20 20 20 43 4d 4e  |e....        CMN|
00002ec0  20 20 20 20 20 70 63 2c  23 30 0d 11 8a 25 20 20  |     pc,#0...%  |
00002ed0  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 28 73  |      LDMFD   (s|
00002ee0  70 29 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |p)!,{r0-r11,pc}.|
00002ef0  11 94 04 0d 11 9e 27 2e  73 6c 69 64 65 20 20 53  |......'.slide  S|
00002f00  54 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |TMFD   (sp)!,{r0|
00002f10  2d 72 31 31 2c 6c 69 6e  6b 7d 0d 11 a8 1a 20 20  |-r11,link}....  |
00002f20  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 31  |      MOV     r1|
00002f30  31 2c 72 33 0d 11 b2 1e  20 20 20 20 20 20 20 20  |1,r3....        |
00002f40  4c 44 4d 49 41 20 20 20  72 30 2c 7b 72 35 2d 72  |LDMIA   r0,{r5-r|
00002f50  37 7d 0d 11 bc 1f 20 20  20 20 20 20 20 20 4c 44  |7}....        LD|
00002f60  4d 49 41 20 20 20 72 31  2c 7b 72 38 2d 72 31 30  |MIA   r1,{r8-r10|
00002f70  7d 0d 11 c6 0f 2e 73 6c  69 64 65 5f 6c 6f 6f 70  |}.....slide_loop|
00002f80  0d 11 d0 1c 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00002f90  20 20 20 20 72 32 2c 72  35 2c 72 38 0d 11 da 1c  |    r2,r5,r8....|
00002fa0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00002fb0  72 33 2c 72 36 2c 72 39  0d 11 e4 1d 20 20 20 20  |r3,r6,r9....    |
00002fc0  20 20 20 20 41 44 44 20  20 20 20 20 72 34 2c 72  |    ADD     r4,r|
00002fd0  37 2c 72 31 30 0d 11 ee  20 20 20 20 20 20 20 20  |7,r10...        |
00002fe0  20 4d 4f 56 20 20 20 20  20 72 32 2c 72 32 2c 41  | MOV     r2,r2,A|
00002ff0  53 52 20 23 31 0d 11 f8  20 20 20 20 20 20 20 20  |SR #1...        |
00003000  20 4d 4f 56 20 20 20 20  20 72 33 2c 72 33 2c 41  | MOV     r3,r3,A|
00003010  53 52 20 23 31 0d 12 02  20 20 20 20 20 20 20 20  |SR #1...        |
00003020  20 4d 4f 56 20 20 20 20  20 72 34 2c 72 34 2c 41  | MOV     r4,r4,A|
00003030  53 52 20 23 31 0d 12 0c  1c 20 20 20 20 20 20 20  |SR #1....       |
00003040  20 53 55 42 20 20 20 20  20 72 30 2c 72 35 2c 72  | SUB     r0,r5,r|
00003050  38 0d 12 16 1a 20 20 20  20 20 20 20 20 4d 4f 56  |8....        MOV|
00003060  20 20 20 20 20 72 31 34  2c 72 30 0d 12 20 1d 20  |     r14,r0.. . |
00003070  20 20 20 20 20 20 20 4d  55 4c 20 20 20 20 20 72  |       MUL     r|
00003080  31 2c 72 30 2c 72 31 34  0d 12 2a 1c 20 20 20 20  |1,r0,r14..*.    |
00003090  20 20 20 20 53 55 42 20  20 20 20 20 72 30 2c 72  |    SUB     r0,r|
000030a0  36 2c 72 39 0d 12 34 1a  20 20 20 20 20 20 20 20  |6,r9..4.        |
000030b0  4d 4f 56 20 20 20 20 20  72 31 34 2c 72 30 0d 12  |MOV     r14,r0..|
000030c0  3e 20 20 20 20 20 20 20  20 20 4d 4c 41 20 20 20  |>         MLA   |
000030d0  20 20 72 31 2c 72 30 2c  72 31 34 2c 72 31 0d 12  |  r1,r0,r14,r1..|
000030e0  48 1d 20 20 20 20 20 20  20 20 53 55 42 20 20 20  |H.        SUB   |
000030f0  20 20 72 30 2c 72 37 2c  72 31 30 0d 12 52 1a 20  |  r0,r7,r10..R. |
00003100  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00003110  31 34 2c 72 30 0d 12 5c  20 20 20 20 20 20 20 20  |14,r0..\        |
00003120  20 4d 4c 41 20 20 20 20  20 72 31 2c 72 30 2c 72  | MLA     r1,r0,r|
00003130  31 34 2c 72 31 0d 12 66  23 20 20 20 20 20 20 20  |14,r1..f#       |
00003140  20 43 4d 50 20 20 20 20  20 72 31 2c 23 73 6c 69  | CMP     r1,#sli|
00003150  64 65 5f 6c 69 6d 69 74  0d 12 70 1d 20 20 20 20  |de_limit..p.    |
00003160  20 20 20 20 42 4c 54 20  20 20 20 20 77 65 6c 6c  |    BLT     well|
00003170  5f 73 6c 69 64 0d 12 7a  21 20 20 20 20 20 20 20  |_slid..z!       |
00003180  20 53 54 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | STMFD   (sp)!,{|
00003190  72 32 2d 72 34 7d 0d 12  84 19 20 20 20 20 20 20  |r2-r4}....      |
000031a0  20 20 4d 4f 56 20 20 20  20 20 72 30 2c 73 70 0d  |  MOV     r0,sp.|
000031b0  12 8e 1a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000031c0  20 20 20 72 31 2c 72 31  31 0d 12 98 1d 20 20 20  |   r1,r11....   |
000031d0  20 20 20 20 20 42 4c 20  20 20 20 20 20 69 6e 76  |     BL      inv|
000031e0  69 73 69 62 6c 65 0d 12  a2 21 20 20 20 20 20 20  |isible...!      |
000031f0  20 20 4c 44 4d 45 51 46  44 20 28 73 70 29 21 2c  |  LDMEQFD (sp)!,|
00003200  7b 72 35 2d 72 37 7d 0d  12 ac 22 20 20 20 20 20  |{r5-r7}..."     |
00003210  20 20 20 4c 44 4d 4e 45  46 44 20 28 73 70 29 21  |   LDMNEFD (sp)!|
00003220  2c 7b 72 38 2d 72 31 30  7d 0d 12 b6 1e 20 20 20  |,{r8-r10}....   |
00003230  20 20 20 20 20 42 20 20  20 20 20 20 20 73 6c 69  |     B       sli|
00003240  64 65 5f 6c 6f 6f 70 0d  12 c0 0e 2e 77 65 6c 6c  |de_loop.....well|
00003250  5f 73 6c 69 64 0d 12 ca  20 20 20 20 20 20 20 20  |_slid...        |
00003260  20 4c 44 52 20 20 20 20  20 72 30 2c 5b 73 70 2c  | LDR     r0,[sp,|
00003270  23 34 2a 32 5d 0d 12 d4  1e 20 20 20 20 20 20 20  |#4*2]....       |
00003280  20 53 54 4d 49 41 20 20  20 72 30 2c 7b 72 32 2d  | STMIA   r0,{r2-|
00003290  72 34 7d 0d 12 de 25 20  20 20 20 20 20 20 20 4c  |r4}...%        L|
000032a0  44 4d 46 44 20 20 20 28  73 70 29 21 2c 7b 72 30  |DMFD   (sp)!,{r0|
000032b0  2d 72 31 31 2c 70 63 7d  0d 12 e8 04 0d 12 f2 15  |-r11,pc}........|
000032c0  2e 72 65 67 69 73 74 65  72 5f 70 6f 6c 79 67 6f  |.register_polygo|
000032d0  6e 0d 12 fc 27 20 20 20  20 20 20 20 20 53 54 4d  |n...'        STM|
000032e0  46 44 20 20 20 28 73 70  29 21 2c 7b 72 30 2d 72  |FD   (sp)!,{r0-r|
000032f0  31 31 2c 6c 69 6e 6b 7d  0d 13 06 1a 20 20 20 20  |11,link}....    |
00003300  20 20 20 20 4d 4f 56 20  20 20 20 20 72 31 30 2c  |    MOV     r10,|
00003310  72 30 0d 13 10 24 20 20  20 20 20 20 20 20 4c 44  |r0...$        LD|
00003320  52 20 20 20 20 20 72 39  2c 5b 72 31 30 2c 23 73  |R     r9,[r10,#s|
00003330  75 72 66 5f 6e 5d 0d 13  1a 1d 20 20 20 20 20 20  |urf_n]....      |
00003340  20 20 a4 61 64 72 6c 28  35 2c 76 65 72 74 69 63  |  .adrl(5,vertic|
00003350  65 73 29 0d 13 24 19 20  20 20 20 20 20 20 20 4d  |es)..$.        M|
00003360  4f 56 20 20 20 20 20 72  33 2c 72 39 0d 13 2e 19  |OV     r3,r9....|
00003370  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00003380  72 34 2c 23 30 0d 13 38  15 2e 72 70 5f 63 6f 70  |r4,#0..8..rp_cop|
00003390  79 5f 76 65 72 74 69 63  65 73 0d 13 42 24 20 20  |y_vertices..B$  |
000033a0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 30  |      ADD     r0|
000033b0  2c 72 31 30 2c 23 73 75  72 66 5f 72 65 71 0d 13  |,r10,#surf_req..|
000033c0  4c 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |L.        ADD   |
000033d0  20 20 72 30 2c 72 30 2c  72 34 0d 13 56 20 20 20  |  r0,r0,r4..V   |
000033e0  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 31  |      LDR     r1|
000033f0  2c 5b 73 70 2c 23 34 2a  32 5d 0d 13 60 1c 20 20  |,[sp,#4*2]..`.  |
00003400  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 32  |      ADD     r2|
00003410  2c 72 35 2c 72 34 0d 13  6a 1a 20 20 20 20 20 20  |,r5,r4..j.      |
00003420  20 20 42 4c 20 20 20 20  20 20 72 6f 74 61 74 65  |  BL      rotate|
00003430  0d 13 74 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..t.        MOV |
00003440  20 20 20 20 72 30 2c 72  32 0d 13 7e 20 20 20 20  |    r0,r2..~    |
00003450  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 31 2c  |     LDR     r1,|
00003460  5b 73 70 2c 23 34 2a 31  5d 0d 13 88 17 20 20 20  |[sp,#4*1]....   |
00003470  20 20 20 20 20 42 4c 20  20 20 20 20 20 61 64 64  |     BL      add|
00003480  0d 13 92 1d 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00003490  20 20 20 20 72 34 2c 72  34 2c 23 31 32 0d 13 9c  |    r4,r4,#12...|
000034a0  1c 20 20 20 20 20 20 20  20 53 55 42 53 20 20 20  |.        SUBS   |
000034b0  20 72 33 2c 72 33 2c 23  31 0d 13 a6 24 20 20 20  | r3,r3,#1...$   |
000034c0  20 20 20 20 20 42 4e 45  20 20 20 20 20 72 70 5f  |     BNE     rp_|
000034d0  63 6f 70 79 5f 76 65 72  74 69 63 65 73 0d 13 b0  |copy_vertices...|
000034e0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000034f0  20 72 31 2c 23 30 0d 13  ba 11 2e 72 70 5f 63 6c  | r1,#0.....rp_cl|
00003500  69 70 5f 6c 6f 6f 70 0d  13 c4 20 20 20 20 20 20  |ip_loop...      |
00003510  20 20 20 4c 44 52 20 20  20 20 20 72 30 2c 5b 73  |   LDR     r0,[s|
00003520  70 2c 23 34 2a 34 5d 0d  13 ce 1a 20 20 20 20 20  |p,#4*4]....     |
00003530  20 20 20 4d 4f 56 20 20  20 20 20 72 31 34 2c 23  |   MOV     r14,#|
00003540  31 0d 13 d8 21 20 20 20  20 20 20 20 20 54 53 54  |1...!        TST|
00003550  20 20 20 20 20 72 30 2c  72 31 34 2c 4c 53 4c 20  |     r0,r14,LSL |
00003560  72 31 0d 13 e2 26 20 20  20 20 20 20 20 20 42 4e  |r1...&        BN|
00003570  45 20 20 20 20 20 72 70  5f 6e 6f 5f 6e 65 65 64  |E     rp_no_need|
00003580  5f 74 6f 5f 63 6c 69 70  0d 13 ec 19 20 20 20 20  |_to_clip....    |
00003590  20 20 20 20 4d 4f 56 20  20 20 20 20 72 33 2c 23  |    MOV     r3,#|
000035a0  30 0d 13 f6 0d 2e 72 70  5f 6c 6f 6f 70 31 0d 14  |0.....rp_loop1..|
000035b0  00 19 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |..        CMP   |
000035c0  20 20 72 39 2c 23 32 0d  14 0a 25 20 20 20 20 20  |  r9,#2...%     |
000035d0  20 20 20 4c 44 4d 4c 45  46 44 20 28 73 70 29 21  |   LDMLEFD (sp)!|
000035e0  2c 7b 72 30 2d 72 31 31  2c 70 63 7d 0d 14 14 19  |,{r0-r11,pc}....|
000035f0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00003600  72 33 2c 72 39 0d 14 1e  21 20 20 20 20 20 20 20  |r3,r9...!       |
00003610  20 42 47 45 20 20 20 20  20 64 6f 6e 65 5f 72 70  | BGE     done_rp|
00003620  5f 6c 6f 6f 70 31 0d 14  28 23 20 20 20 20 20 20  |_loop1..(#      |
00003630  20 20 41 44 44 20 20 20  20 20 72 30 2c 72 35 2c  |  ADD     r0,r5,|
00003640  72 33 2c 4c 53 4c 20 23  33 0d 14 32 23 20 20 20  |r3,LSL #3..2#   |
00003650  20 20 20 20 20 41 44 44  20 20 20 20 20 72 30 2c  |     ADD     r0,|
00003660  72 30 2c 72 33 2c 4c 53  4c 20 23 32 0d 14 3c 1d  |r0,r3,LSL #2..<.|
00003670  20 20 20 20 20 20 20 20  42 4c 20 20 20 20 20 20  |        BL      |
00003680  69 6e 76 69 73 69 62 6c  65 0d 14 46 21 20 20 20  |invisible..F!   |
00003690  20 20 20 20 20 42 4e 45  20 20 20 20 20 6e 65 78  |     BNE     nex|
000036a0  74 5f 72 70 5f 6c 6f 6f  70 31 0d 14 50 1d 20 20  |t_rp_loop1..P.  |
000036b0  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 31  |      ADD     r1|
000036c0  34 2c 72 33 2c 23 31 0d  14 5a 1a 20 20 20 20 20  |4,r3,#1..Z.     |
000036d0  20 20 20 43 4d 50 20 20  20 20 20 72 31 34 2c 72  |   CMP     r14,r|
000036e0  39 0d 14 64 17 20 20 20  20 20 20 20 20 ec 51 20  |9..d.        .Q |
000036f0  20 20 72 31 34 2c 23 30  0d 14 6e 24 20 20 20 20  |  r14,#0..n$    |
00003700  20 20 20 20 41 44 44 20  20 20 20 20 72 30 2c 72  |    ADD     r0,r|
00003710  35 2c 72 31 34 2c 4c 53  4c 20 23 33 0d 14 78 24  |5,r14,LSL #3..x$|
00003720  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003730  72 30 2c 72 30 2c 72 31  34 2c 4c 53 4c 20 23 32  |r0,r0,r14,LSL #2|
00003740  0d 14 82 1d 20 20 20 20  20 20 20 20 42 4c 20 20  |....        BL  |
00003750  20 20 20 20 69 6e 76 69  73 69 62 6c 65 0d 14 8c  |    invisible...|
00003760  21 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 20  |!        BNE    |
00003770  20 6e 65 78 74 5f 72 70  5f 6c 6f 6f 70 31 0d 14  | next_rp_loop1..|
00003780  96 1d 20 20 20 20 20 20  20 20 53 55 42 53 20 20  |..        SUBS  |
00003790  20 20 72 31 34 2c 72 33  2c 23 31 0d 14 a0 1e 20  |  r14,r3,#1.... |
000037a0  20 20 20 20 20 20 20 41  44 44 4d 49 20 20 20 72  |       ADDMI   r|
000037b0  31 34 2c 72 31 34 2c 72  39 0d 14 aa 24 20 20 20  |14,r14,r9...$   |
000037c0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 30 2c  |     ADD     r0,|
000037d0  72 35 2c 72 31 34 2c 4c  53 4c 20 23 33 0d 14 b4  |r5,r14,LSL #3...|
000037e0  24 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |$        ADD    |
000037f0  20 72 30 2c 72 30 2c 72  31 34 2c 4c 53 4c 20 23  | r0,r0,r14,LSL #|
00003800  32 0d 14 be 1d 20 20 20  20 20 20 20 20 42 4c 20  |2....        BL |
00003810  20 20 20 20 20 69 6e 76  69 73 69 62 6c 65 0d 14  |     invisible..|
00003820  c8 21 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |.!        BNE   |
00003830  20 20 6e 65 78 74 5f 72  70 5f 6c 6f 6f 70 31 0d  |  next_rp_loop1.|
00003840  14 d2 1d 20 20 20 20 20  20 20 20 41 44 44 20 20  |...        ADD  |
00003850  20 20 20 72 31 34 2c 72  33 2c 23 31 0d 14 dc 1a  |   r14,r3,#1....|
00003860  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00003870  72 31 34 2c 72 39 0d 14  e6 25 20 20 20 20 20 20  |r14,r9...%      |
00003880  20 20 42 47 45 20 20 20  20 20 72 70 5f 69 73 5f  |  BGE     rp_is_|
00003890  6c 61 73 74 5f 61 6e 79  77 61 79 0d 14 f0 2c 20  |last_anyway..., |
000038a0  20 20 20 20 20 20 20 53  54 4d 46 44 20 20 20 28  |       STMFD   (|
000038b0  73 70 29 21 2c 7b 72 31  2c 72 37 2c 72 38 2c 72  |sp)!,{r1,r7,r8,r|
000038c0  31 30 2d 72 31 31 7d 0d  14 fa 1a 20 20 20 20 20  |10-r11}....     |
000038d0  20 20 20 4d 4f 56 20 20  20 20 20 72 31 30 2c 72  |   MOV     r10,r|
000038e0  33 0d 15 04 1d 20 20 20  20 20 20 20 20 53 55 42  |3....        SUB|
000038f0  20 20 20 20 20 72 31 31  2c 72 39 2c 23 32 0d 15  |     r11,r9,#2..|
00003900  0e 23 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |.#        ADD   |
00003910  20 20 72 37 2c 72 35 2c  72 33 2c 4c 53 4c 20 23  |  r7,r5,r3,LSL #|
00003920  33 0d 15 18 23 20 20 20  20 20 20 20 20 41 44 44  |3...#        ADD|
00003930  20 20 20 20 20 72 37 2c  72 37 2c 72 33 2c 4c 53  |     r7,r7,r3,LS|
00003940  4c 20 23 32 0d 15 22 1d  20 20 20 20 20 20 20 20  |L #2..".        |
00003950  41 44 44 20 20 20 20 20  72 38 2c 72 37 2c 23 31  |ADD     r8,r7,#1|
00003960  32 0d 15 2c 10 2e 72 70  5f 64 65 6c 5f 6c 6f 6f  |2..,..rp_del_loo|
00003970  70 0d 15 36 1f 20 20 20  20 20 20 20 20 4c 44 4d  |p..6.        LDM|
00003980  49 41 20 20 20 72 38 21  2c 7b 72 30 2d 72 32 7d  |IA   r8!,{r0-r2}|
00003990  0d 15 40 1f 20 20 20 20  20 20 20 20 53 54 4d 49  |..@.        STMI|
000039a0  41 20 20 20 72 37 21 2c  7b 72 30 2d 72 32 7d 0d  |A   r7!,{r0-r2}.|
000039b0  15 4a 1e 20 20 20 20 20  20 20 20 41 44 44 20 20  |.J.        ADD  |
000039c0  20 20 20 72 31 30 2c 72  31 30 2c 23 31 0d 15 54  |   r10,r10,#1..T|
000039d0  1b 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
000039e0  20 72 31 30 2c 72 31 31  0d 15 5e 1f 20 20 20 20  | r10,r11..^.    |
000039f0  20 20 20 20 42 4c 45 20  20 20 20 20 72 70 5f 64  |    BLE     rp_d|
00003a00  65 6c 5f 6c 6f 6f 70 0d  15 68 2c 20 20 20 20 20  |el_loop..h,     |
00003a10  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
00003a20  2c 7b 72 31 2c 72 37 2c  72 38 2c 72 31 30 2d 72  |,{r1,r7,r8,r10-r|
00003a30  31 31 7d 0d 15 72 16 2e  72 70 5f 69 73 5f 6c 61  |11}..r..rp_is_la|
00003a40  73 74 5f 61 6e 79 77 61  79 0d 15 7c 1c 20 20 20  |st_anyway..|.   |
00003a50  20 20 20 20 20 53 55 42  20 20 20 20 20 72 39 2c  |     SUB     r9,|
00003a60  72 39 2c 23 31 0d 15 86  1c 20 20 20 20 20 20 20  |r9,#1....       |
00003a70  20 42 20 20 20 20 20 20  20 72 70 5f 6c 6f 6f 70  | B       rp_loop|
00003a80  31 0d 15 90 12 2e 6e 65  78 74 5f 72 70 5f 6c 6f  |1.....next_rp_lo|
00003a90  6f 70 31 0d 15 9a 1c 20  20 20 20 20 20 20 20 41  |op1....        A|
00003aa0  44 44 20 20 20 20 20 72  33 2c 72 33 2c 23 31 0d  |DD     r3,r3,#1.|
00003ab0  15 a4 1c 20 20 20 20 20  20 20 20 42 20 20 20 20  |...        B    |
00003ac0  20 20 20 72 70 5f 6c 6f  6f 70 31 0d 15 ae 12 2e  |   rp_loop1.....|
00003ad0  64 6f 6e 65 5f 72 70 5f  6c 6f 6f 70 31 0d 15 b8  |done_rp_loop1...|
00003ae0  19 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003af0  20 72 33 2c 23 30 0d 15  c2 0d 2e 72 70 5f 6c 6f  | r3,#0.....rp_lo|
00003b00  6f 70 32 0d 15 cc 19 20  20 20 20 20 20 20 20 43  |op2....        C|
00003b10  4d 50 20 20 20 20 20 72  33 2c 72 39 0d 15 d6 21  |MP     r3,r9...!|
00003b20  20 20 20 20 20 20 20 20  42 47 45 20 20 20 20 20  |        BGE     |
00003b30  64 6f 6e 65 5f 72 70 5f  6c 6f 6f 70 32 0d 15 e0  |done_rp_loop2...|
00003b40  23 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |#        ADD    |
00003b50  20 72 30 2c 72 35 2c 72  33 2c 4c 53 4c 20 23 33  | r0,r5,r3,LSL #3|
00003b60  0d 15 ea 23 20 20 20 20  20 20 20 20 41 44 44 20  |...#        ADD |
00003b70  20 20 20 20 72 30 2c 72  30 2c 72 33 2c 4c 53 4c  |    r0,r0,r3,LSL|
00003b80  20 23 32 0d 15 f4 1d 20  20 20 20 20 20 20 20 42  | #2....        B|
00003b90  4c 20 20 20 20 20 20 69  6e 76 69 73 69 62 6c 65  |L      invisible|
00003ba0  0d 15 fe 21 20 20 20 20  20 20 20 20 42 4e 45 20  |...!        BNE |
00003bb0  20 20 20 20 6e 65 78 74  5f 72 70 5f 6c 6f 6f 70  |    next_rp_loop|
00003bc0  32 0d 16 08 1d 20 20 20  20 20 20 20 20 53 55 42  |2....        SUB|
00003bd0  53 20 20 20 20 72 31 34  2c 72 33 2c 23 31 0d 16  |S    r14,r3,#1..|
00003be0  12 1e 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |..        ADDMI |
00003bf0  20 20 72 31 34 2c 72 31  34 2c 72 39 0d 16 1c 24  |  r14,r14,r9...$|
00003c00  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003c10  72 30 2c 72 35 2c 72 31  34 2c 4c 53 4c 20 23 33  |r0,r5,r14,LSL #3|
00003c20  0d 16 26 24 20 20 20 20  20 20 20 20 41 44 44 20  |..&$        ADD |
00003c30  20 20 20 20 72 30 2c 72  30 2c 72 31 34 2c 4c 53  |    r0,r0,r14,LS|
00003c40  4c 20 23 32 0d 16 30 1d  20 20 20 20 20 20 20 20  |L #2..0.        |
00003c50  42 4c 20 20 20 20 20 20  69 6e 76 69 73 69 62 6c  |BL      invisibl|
00003c60  65 0d 16 3a 21 20 20 20  20 20 20 20 20 42 45 51  |e..:!        BEQ|
00003c70  20 20 20 20 20 6e 65 78  74 5f 72 70 5f 6c 6f 6f  |     next_rp_loo|
00003c80  70 32 0d 16 44 1d 20 20  20 20 20 20 20 20 41 44  |p2..D.        AD|
00003c90  44 20 20 20 20 20 72 31  34 2c 72 33 2c 23 31 0d  |D     r14,r3,#1.|
00003ca0  16 4e 1a 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.N.        CMP  |
00003cb0  20 20 20 72 31 34 2c 72  39 0d 16 58 17 20 20 20  |   r14,r9..X.   |
00003cc0  20 20 20 20 20 ec 51 20  20 20 72 31 34 2c 23 30  |     .Q   r14,#0|
00003cd0  0d 16 62 24 20 20 20 20  20 20 20 20 41 44 44 20  |..b$        ADD |
00003ce0  20 20 20 20 72 30 2c 72  35 2c 72 31 34 2c 4c 53  |    r0,r5,r14,LS|
00003cf0  4c 20 23 33 0d 16 6c 24  20 20 20 20 20 20 20 20  |L #3..l$        |
00003d00  41 44 44 20 20 20 20 20  72 30 2c 72 30 2c 72 31  |ADD     r0,r0,r1|
00003d10  34 2c 4c 53 4c 20 23 32  0d 16 76 1d 20 20 20 20  |4,LSL #2..v.    |
00003d20  20 20 20 20 42 4c 20 20  20 20 20 20 69 6e 76 69  |    BL      invi|
00003d30  73 69 62 6c 65 0d 16 80  22 20 20 20 20 20 20 20  |sible..."       |
00003d40  20 42 45 51 20 20 20 20  20 6e 6f 5f 6e 65 65 64  | BEQ     no_need|
00003d50  5f 74 6f 5f 69 6e 73 0d  16 8a 28 20 20 20 20 20  |_to_ins...(     |
00003d60  20 20 20 53 54 4d 46 44  20 20 20 28 73 70 29 21  |   STMFD   (sp)!|
00003d70  2c 7b 72 31 2c 72 37 2c  72 38 2c 72 31 30 7d 0d  |,{r1,r7,r8,r10}.|
00003d80  16 94 1d 20 20 20 20 20  20 20 20 53 55 42 20 20  |...        SUB  |
00003d90  20 20 20 72 31 30 2c 72  39 2c 23 31 0d 16 9e 24  |   r10,r9,#1...$|
00003da0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003db0  72 37 2c 72 35 2c 72 31  30 2c 4c 53 4c 20 23 33  |r7,r5,r10,LSL #3|
00003dc0  0d 16 a8 24 20 20 20 20  20 20 20 20 41 44 44 20  |...$        ADD |
00003dd0  20 20 20 20 72 37 2c 72  37 2c 72 31 30 2c 4c 53  |    r7,r7,r10,LS|
00003de0  4c 20 23 32 0d 16 b2 1d  20 20 20 20 20 20 20 20  |L #2....        |
00003df0  41 44 44 20 20 20 20 20  72 38 2c 72 37 2c 23 31  |ADD     r8,r7,#1|
00003e00  32 0d 16 bc 10 2e 72 70  5f 69 6e 73 5f 6c 6f 6f  |2.....rp_ins_loo|
00003e10  70 0d 16 c6 1e 20 20 20  20 20 20 20 20 4c 44 4d  |p....        LDM|
00003e20  49 41 20 20 20 72 37 2c  7b 72 30 2d 72 32 7d 0d  |IA   r7,{r0-r2}.|
00003e30  16 d0 1e 20 20 20 20 20  20 20 20 53 54 4d 49 41  |...        STMIA|
00003e40  20 20 20 72 38 2c 7b 72  30 2d 72 32 7d 0d 16 da  |   r8,{r0-r2}...|
00003e50  1d 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
00003e60  20 72 37 2c 72 37 2c 23  31 32 0d 16 e4 1d 20 20  | r7,r7,#12....  |
00003e70  20 20 20 20 20 20 53 55  42 20 20 20 20 20 72 38  |      SUB     r8|
00003e80  2c 72 38 2c 23 31 32 0d  16 ee 1e 20 20 20 20 20  |,r8,#12....     |
00003e90  20 20 20 53 55 42 20 20  20 20 20 72 31 30 2c 72  |   SUB     r10,r|
00003ea0  31 30 2c 23 31 0d 16 f8  1a 20 20 20 20 20 20 20  |10,#1....       |
00003eb0  20 43 4d 50 20 20 20 20  20 72 31 30 2c 72 33 0d  | CMP     r10,r3.|
00003ec0  17 02 1f 20 20 20 20 20  20 20 20 42 47 45 20 20  |...        BGE  |
00003ed0  20 20 20 72 70 5f 69 6e  73 5f 6c 6f 6f 70 0d 17  |   rp_ins_loop..|
00003ee0  0c 28 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |.(        LDMFD |
00003ef0  20 20 28 73 70 29 21 2c  7b 72 31 2c 72 37 2c 72  |  (sp)!,{r1,r7,r|
00003f00  38 2c 72 31 30 7d 0d 17  16 1c 20 20 20 20 20 20  |8,r10}....      |
00003f10  20 20 41 44 44 20 20 20  20 20 72 39 2c 72 39 2c  |  ADD     r9,r9,|
00003f20  23 31 0d 17 20 13 2e 6e  6f 5f 6e 65 65 64 5f 74  |#1.. ..no_need_t|
00003f30  6f 5f 69 6e 73 0d 17 2a  21 20 20 20 20 20 20 20  |o_ins..*!       |
00003f40  20 53 54 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | STMFD   (sp)!,{|
00003f50  72 30 2d 72 33 7d 0d 17  34 23 20 20 20 20 20 20  |r0-r3}..4#      |
00003f60  20 20 41 44 44 20 20 20  20 20 72 30 2c 72 35 2c  |  ADD     r0,r5,|
00003f70  72 33 2c 4c 53 4c 20 23  33 0d 17 3e 23 20 20 20  |r3,LSL #3..>#   |
00003f80  20 20 20 20 20 41 44 44  20 20 20 20 20 72 30 2c  |     ADD     r0,|
00003f90  72 30 2c 72 33 2c 4c 53  4c 20 23 32 0d 17 48 1d  |r0,r3,LSL #2..H.|
00003fa0  20 20 20 20 20 20 20 20  53 55 42 53 20 20 20 20  |        SUBS    |
00003fb0  72 31 34 2c 72 33 2c 23  31 0d 17 52 1e 20 20 20  |r14,r3,#1..R.   |
00003fc0  20 20 20 20 20 41 44 44  4d 49 20 20 20 72 31 34  |     ADDMI   r14|
00003fd0  2c 72 31 34 2c 72 39 0d  17 5c 24 20 20 20 20 20  |,r14,r9..\$     |
00003fe0  20 20 20 41 44 44 20 20  20 20 20 72 31 2c 72 35  |   ADD     r1,r5|
00003ff0  2c 72 31 34 2c 4c 53 4c  20 23 33 0d 17 66 24 20  |,r14,LSL #3..f$ |
00004000  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00004010  31 2c 72 31 2c 72 31 34  2c 4c 53 4c 20 23 32 0d  |1,r1,r14,LSL #2.|
00004020  17 70 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.p.        MOV  |
00004030  20 20 20 72 32 2c 72 30  0d 17 7a 1e 20 20 20 20  |   r2,r0..z.    |
00004040  20 20 20 20 4c 44 52 20  20 20 20 20 72 33 2c 5b  |    LDR     r3,[|
00004050  73 70 2c 23 34 5d 0d 17  84 19 20 20 20 20 20 20  |sp,#4]....      |
00004060  20 20 42 4c 20 20 20 20  20 20 73 6c 69 64 65 0d  |  BL      slide.|
00004070  17 8e 1f 20 20 20 20 20  20 20 20 4c 44 52 20 20  |...        LDR  |
00004080  20 20 20 72 33 2c 5b 73  70 2c 23 31 32 5d 0d 17  |   r3,[sp,#12]..|
00004090  98 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
000040a0  20 20 72 33 2c 72 33 2c  23 31 0d 17 a2 19 20 20  |  r3,r3,#1....  |
000040b0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 33  |      CMP     r3|
000040c0  2c 72 39 0d 17 ac 16 20  20 20 20 20 20 20 20 ec  |,r9....        .|
000040d0  51 20 20 20 72 33 2c 23  30 0d 17 b6 23 20 20 20  |Q   r3,#0...#   |
000040e0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 30 2c  |     ADD     r0,|
000040f0  72 35 2c 72 33 2c 4c 53  4c 20 23 33 0d 17 c0 23  |r5,r3,LSL #3...#|
00004100  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00004110  72 30 2c 72 30 2c 72 33  2c 4c 53 4c 20 23 32 0d  |r0,r0,r3,LSL #2.|
00004120  17 ca 1d 20 20 20 20 20  20 20 20 41 44 44 20 20  |...        ADD  |
00004130  20 20 20 72 31 34 2c 72  33 2c 23 31 0d 17 d4 1a  |   r14,r3,#1....|
00004140  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00004150  72 31 34 2c 72 39 0d 17  de 17 20 20 20 20 20 20  |r14,r9....      |
00004160  20 20 ec 51 20 20 20 72  31 34 2c 23 30 0d 17 e8  |  .Q   r14,#0...|
00004170  24 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |$        ADD    |
00004180  20 72 31 2c 72 35 2c 72  31 34 2c 4c 53 4c 20 23  | r1,r5,r14,LSL #|
00004190  33 0d 17 f2 24 20 20 20  20 20 20 20 20 41 44 44  |3...$        ADD|
000041a0  20 20 20 20 20 72 31 2c  72 31 2c 72 31 34 2c 4c  |     r1,r1,r14,L|
000041b0  53 4c 20 23 32 0d 17 fc  19 20 20 20 20 20 20 20  |SL #2....       |
000041c0  20 4d 4f 56 20 20 20 20  20 72 32 2c 72 30 0d 18  | MOV     r2,r0..|
000041d0  06 1e 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |..        LDR   |
000041e0  20 20 72 33 2c 5b 73 70  2c 23 34 5d 0d 18 10 19  |  r3,[sp,#4]....|
000041f0  20 20 20 20 20 20 20 20  42 4c 20 20 20 20 20 20  |        BL      |
00004200  73 6c 69 64 65 0d 18 1a  21 20 20 20 20 20 20 20  |slide...!       |
00004210  20 4c 44 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | LDMFD   (sp)!,{|
00004220  72 30 2d 72 33 7d 0d 18  24 1c 20 20 20 20 20 20  |r0-r3}..$.      |
00004230  20 20 41 44 44 20 20 20  20 20 72 33 2c 72 33 2c  |  ADD     r3,r3,|
00004240  23 32 0d 18 2e 12 2e 6e  65 78 74 5f 72 70 5f 6c  |#2.....next_rp_l|
00004250  6f 6f 70 32 0d 18 38 1c  20 20 20 20 20 20 20 20  |oop2..8.        |
00004260  41 44 44 20 20 20 20 20  72 33 2c 72 33 2c 23 31  |ADD     r3,r3,#1|
00004270  0d 18 42 1c 20 20 20 20  20 20 20 20 42 20 20 20  |..B.        B   |
00004280  20 20 20 20 72 70 5f 6c  6f 6f 70 32 0d 18 4c 12  |    rp_loop2..L.|
00004290  2e 64 6f 6e 65 5f 72 70  5f 6c 6f 6f 70 32 0d 18  |.done_rp_loop2..|
000042a0  56 17 2e 72 70 5f 6e 6f  5f 6e 65 65 64 5f 74 6f  |V..rp_no_need_to|
000042b0  5f 63 6c 69 70 0d 18 60  1c 20 20 20 20 20 20 20  |_clip..`.       |
000042c0  20 41 44 44 20 20 20 20  20 72 31 2c 72 31 2c 23  | ADD     r1,r1,#|
000042d0  31 0d 18 6a 19 20 20 20  20 20 20 20 20 43 4d 50  |1..j.        CMP|
000042e0  20 20 20 20 20 72 31 2c  23 36 0d 18 74 20 20 20  |     r1,#6..t   |
000042f0  20 20 20 20 20 20 42 4c  54 20 20 20 20 20 72 70  |      BLT     rp|
00004300  5f 63 6c 69 70 5f 6c 6f  6f 70 0d 18 7e 20 20 20  |_clip_loop..~   |
00004310  20 20 20 20 20 20 a4 61  64 72 6c 28 31 31 2c 70  |      .adrl(11,p|
00004320  6f 6c 79 5f 70 6f 69 6e  74 29 0d 18 88 1f 20 20  |oly_point)....  |
00004330  20 20 20 20 20 20 4c 44  4d 49 41 20 20 20 72 31  |      LDMIA   r1|
00004340  31 2c 7b 72 36 2d 72 38  7d 0d 18 92 20 20 20 20  |1,{r6-r8}...    |
00004350  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 30 2c  |     LDR     r0,|
00004360  5b 73 70 2c 23 34 2a 33  5d 0d 18 9c 19 20 20 20  |[sp,#4*3]....   |
00004370  20 20 20 20 20 43 4d 50  20 20 20 20 20 72 30 2c  |     CMP     r0,|
00004380  23 30 0d 18 a6 27 20 20  20 20 20 20 20 20 4c 44  |#0...'        LD|
00004390  52 45 51 20 20 20 72 30  2c 5b 72 31 30 2c 23 73  |REQ   r0,[r10,#s|
000043a0  75 72 66 5f 74 79 70 65  5d 0d 18 b0 19 20 20 20  |urf_type]....   |
000043b0  20 20 20 20 20 43 4d 50  45 51 20 20 20 72 30 2c  |     CMPEQ   r0,|
000043c0  23 30 0d 18 ba 20 20 20  20 20 20 20 20 20 42 4e  |#0...         BN|
000043d0  45 20 20 20 20 20 6e 6f  74 5f 6e 65 77 5f 70 6f  |E     not_new_po|
000043e0  6c 79 0d 18 c4 19 20 20  20 20 20 20 20 20 4d 4f  |ly....        MO|
000043f0  56 20 20 20 20 20 72 30  2c 23 38 0d 18 ce 1a 20  |V     r0,#8.... |
00004400  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 6d  |       BL      m|
00004410  61 6c 6c 6f 63 0d 18 d8  1b 20 20 20 20 20 20 20  |alloc....       |
00004420  20 53 54 52 56 53 20 20  20 72 30 2c 5b 73 70 5d  | STRVS   r0,[sp]|
00004430  0d 18 e2 25 20 20 20 20  20 20 20 20 4c 44 4d 56  |...%        LDMV|
00004440  53 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |SFD (sp)!,{r0-r1|
00004450  31 2c 70 63 7d 0d 18 ec  19 20 20 20 20 20 20 20  |1,pc}....       |
00004460  20 4d 4f 56 20 20 20 20  20 72 34 2c 72 30 0d 18  | MOV     r4,r0..|
00004470  f6 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00004480  20 20 72 30 2c 23 30 0d  19 00 1b 20 20 20 20 20  |  r0,#0....     |
00004490  20 20 20 a4 73 74 72 28  30 2c 74 6f 74 61 6c 5f  |   .str(0,total_|
000044a0  7a 29 0d 19 0a 1d 20 20  20 20 20 20 20 20 a4 73  |z)....        .s|
000044b0  74 72 28 30 2c 74 6f 74  61 6c 5f 7a 6e 6f 29 0d  |tr(0,total_zno).|
000044c0  19 14 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
000044d0  20 20 20 72 30 2c 23 30  0d 19 1e 1e 20 20 20 20  |   r0,#0....    |
000044e0  20 20 20 20 53 54 52 20  20 20 20 20 72 30 2c 5b  |    STR     r0,[|
000044f0  72 34 2c 23 34 5d 0d 19  28 20 20 20 20 20 20 20  |r4,#4]..(       |
00004500  20 20 43 4d 50 20 20 20  20 20 72 37 2c 72 38 2c  |  CMP     r7,r8,|
00004510  4c 53 4c 20 23 32 0d 19  32 28 20 20 20 20 20 20  |LSL #2..2(      |
00004520  20 20 42 4e 45 20 20 20  20 20 64 6f 6e 74 5f 65  |  BNE     dont_e|
00004530  78 74 65 6e 64 5f 72 70  5f 74 61 62 6c 65 0d 19  |xtend_rp_table..|
00004540  3c 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |<.        MOV   |
00004550  20 20 72 30 2c 72 36 0d  19 46 22 20 20 20 20 20  |  r0,r6..F"     |
00004560  20 20 20 4d 4f 56 20 20  20 20 20 72 31 2c 23 70  |   MOV     r1,#p|
00004570  6f 6c 79 5f 63 68 75 6e  6b 0d 19 50 1b 20 20 20  |oly_chunk..P.   |
00004580  20 20 20 20 20 42 4c 20  20 20 20 20 20 72 65 61  |     BL      rea|
00004590  6c 6c 6f 63 0d 19 5a 1b  20 20 20 20 20 20 20 20  |lloc..Z.        |
000045a0  53 54 52 56 53 20 20 20  72 30 2c 5b 73 70 5d 0d  |STRVS   r0,[sp].|
000045b0  19 64 25 20 20 20 20 20  20 20 20 4c 44 4d 56 53  |.d%        LDMVS|
000045c0  46 44 20 28 73 70 29 21  2c 7b 72 30 2d 72 31 31  |FD (sp)!,{r0-r11|
000045d0  2c 70 63 7d 0d 19 6e 19  20 20 20 20 20 20 20 20  |,pc}..n.        |
000045e0  4d 4f 56 20 20 20 20 20  72 36 2c 72 30 0d 19 78  |MOV     r6,r0..x|
000045f0  25 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |%        ADD    |
00004600  20 72 37 2c 72 37 2c 23  70 6f 6c 79 5f 63 68 75  | r7,r7,#poly_chu|
00004610  6e 6b 0d 19 82 1f 20 20  20 20 20 20 20 20 53 54  |nk....        ST|
00004620  4d 49 41 20 20 20 72 31  31 2c 7b 72 36 2d 72 38  |MIA   r11,{r6-r8|
00004630  7d 0d 19 8c 19 2e 64 6f  6e 74 5f 65 78 74 65 6e  |}.....dont_exten|
00004640  64 5f 72 70 5f 74 61 62  6c 65 0d 19 96 25 20 20  |d_rp_table...%  |
00004650  20 20 20 20 20 20 53 54  52 20 20 20 20 20 72 34  |      STR     r4|
00004660  2c 5b 72 36 2c 72 38 2c  4c 53 4c 20 23 32 5d 0d  |,[r6,r8,LSL #2].|
00004670  19 a0 1c 20 20 20 20 20  20 20 20 41 44 44 20 20  |...        ADD  |
00004680  20 20 20 72 38 2c 72 38  2c 23 31 0d 19 aa 1f 20  |   r8,r8,#1.... |
00004690  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
000046a0  38 2c 5b 72 31 31 2c 23  38 5d 0d 19 b4 19 20 20  |8,[r11,#8]....  |
000046b0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
000046c0  2c 23 38 0d 19 be 1a 20  20 20 20 20 20 20 20 a4  |,#8....        .|
000046d0  73 74 72 28 30 2c 72 70  5f 70 74 72 29 0d 19 c8  |str(0,rp_ptr)...|
000046e0  11 2e 6e 6f 74 5f 6e 65  77 5f 70 6f 6c 79 0d 19  |..not_new_poly..|
000046f0  d2 1c 20 20 20 20 20 20  20 20 53 55 42 20 20 20  |..        SUB   |
00004700  20 20 72 32 2c 72 38 2c  23 31 0d 19 dc 25 20 20  |  r2,r8,#1...%  |
00004710  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 30  |      LDR     r0|
00004720  2c 5b 72 36 2c 72 32 2c  4c 53 4c 20 23 32 5d 0d  |,[r6,r2,LSL #2].|
00004730  19 e6 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |..         MOV  |
00004740  20 20 20 72 31 2c 72 39  2c 4c 53 4c 20 23 33 0d  |   r1,r9,LSL #3.|
00004750  19 f0 1c 20 20 20 20 20  20 20 20 41 44 44 20 20  |...        ADD  |
00004760  20 20 20 72 31 2c 72 31  2c 23 38 0d 19 fa 1b 20  |   r1,r1,#8.... |
00004770  20 20 20 20 20 20 20 42  4c 20 20 20 20 20 20 72  |       BL      r|
00004780  65 61 6c 6c 6f 63 0d 1a  04 1b 20 20 20 20 20 20  |ealloc....      |
00004790  20 20 53 54 52 56 53 20  20 20 72 30 2c 5b 73 70  |  STRVS   r0,[sp|
000047a0  5d 0d 1a 0e 25 20 20 20  20 20 20 20 20 4c 44 4d  |]...%        LDM|
000047b0  56 53 46 44 20 28 73 70  29 21 2c 7b 72 30 2d 72  |VSFD (sp)!,{r0-r|
000047c0  31 31 2c 70 63 7d 0d 1a  18 25 20 20 20 20 20 20  |11,pc}...%      |
000047d0  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 72 36  |  STR     r0,[r6|
000047e0  2c 72 32 2c 4c 53 4c 20  23 32 5d 0d 1a 22 19 20  |,r2,LSL #2]..". |
000047f0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00004800  34 2c 72 30 0d 1a 2c 1a  20 20 20 20 20 20 20 20  |4,r0..,.        |
00004810  a4 6c 64 72 28 33 2c 72  70 5f 70 74 72 29 0d 1a  |.ldr(3,rp_ptr)..|
00004820  36 29 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |6)        LDR   |
00004830  20 20 72 30 2c 5b 72 31  30 2c 23 73 75 72 66 5f  |  r0,[r10,#surf_|
00004840  63 6f 6c 6f 75 72 5d 0d  1a 40 1e 20 20 20 20 20  |colour]..@.     |
00004850  20 20 20 53 54 52 20 20  20 20 20 72 30 2c 5b 72  |   STR     r0,[r|
00004860  34 2c 72 33 5d 0d 1a 4a  1c 20 20 20 20 20 20 20  |4,r3]..J.       |
00004870  20 41 44 44 20 20 20 20  20 72 33 2c 72 33 2c 23  | ADD     r3,r3,#|
00004880  34 0d 1a 54 1e 20 20 20  20 20 20 20 20 53 54 52  |4..T.        STR|
00004890  20 20 20 20 20 72 39 2c  5b 72 34 2c 72 33 5d 0d  |     r9,[r4,r3].|
000048a0  1a 5e 1c 20 20 20 20 20  20 20 20 41 44 44 20 20  |.^.        ADD  |
000048b0  20 20 20 72 33 2c 72 33  2c 23 34 0d 1a 68 17 20  |   r3,r3,#4..h. |
000048c0  20 20 20 20 20 20 20 a4  61 64 72 6c 28 31 34 2c  |       .adrl(14,|
000048d0  73 29 0d 1a 72 21 20 20  20 20 20 20 20 20 4c 44  |s)..r!        LD|
000048e0  4d 49 41 20 20 20 72 31  34 2c 7b 72 31 30 2c 72  |MIA   r14,{r10,r|
000048f0  31 31 7d 0d 1a 7c 0f 2e  70 65 72 73 70 5f 6c 6f  |11}..|..persp_lo|
00004900  6f 70 0d 1a 86 1f 20 20  20 20 20 20 20 20 4c 44  |op....        LD|
00004910  4d 49 41 20 20 20 72 35  21 2c 7b 72 36 2d 72 38  |MIA   r5!,{r6-r8|
00004920  7d 0d 1a 90 1b 20 20 20  20 20 20 20 20 a4 6c 64  |}....        .ld|
00004930  72 28 30 2c 74 6f 74 61  6c 5f 7a 29 0d 1a 9a 1c  |r(0,total_z)....|
00004940  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00004950  72 30 2c 72 30 2c 72 38  0d 1a a4 1b 20 20 20 20  |r0,r0,r8....    |
00004960  20 20 20 20 a4 73 74 72  28 30 2c 74 6f 74 61 6c  |    .str(0,total|
00004970  5f 7a 29 0d 1a ae 1d 20  20 20 20 20 20 20 20 a4  |_z)....        .|
00004980  6c 64 72 28 31 2c 74 6f  74 61 6c 5f 7a 6e 6f 29  |ldr(1,total_zno)|
00004990  0d 1a b8 1c 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
000049a0  20 20 20 20 72 31 2c 72  31 2c 23 31 0d 1a c2 1d  |    r1,r1,#1....|
000049b0  20 20 20 20 20 20 20 20  a4 73 74 72 28 31 2c 74  |        .str(1,t|
000049c0  6f 74 61 6c 5f 7a 6e 6f  29 0d 1a cc 1a 20 20 20  |otal_zno)....   |
000049d0  20 20 20 20 20 42 4c 20  20 20 20 20 20 64 69 76  |     BL      div|
000049e0  69 64 65 0d 1a d6 1b 20  20 20 20 20 20 20 20 53  |ide....        S|
000049f0  54 52 20 20 20 20 20 72  32 2c 5b 72 34 5d 0d 1a  |TR     r2,[r4]..|
00004a00  e0 1d 20 20 20 20 20 20  20 20 4d 55 4c 20 20 20  |..        MUL   |
00004a10  20 20 72 30 2c 72 36 2c  72 31 30 0d 1a ea 1d 20  |  r0,r6,r10.... |
00004a20  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00004a30  31 2c 72 38 2c 72 31 31  0d 1a f4 1a 20 20 20 20  |1,r8,r11....    |
00004a40  20 20 20 20 42 4c 20 20  20 20 20 20 64 69 76 69  |    BL      divi|
00004a50  64 65 0d 1a fe 1e 20 20  20 20 20 20 20 20 53 54  |de....        ST|
00004a60  52 20 20 20 20 20 72 32  2c 5b 72 34 2c 72 33 5d  |R     r2,[r4,r3]|
00004a70  0d 1b 08 1c 20 20 20 20  20 20 20 20 41 44 44 20  |....        ADD |
00004a80  20 20 20 20 72 33 2c 72  33 2c 23 34 0d 1b 12 1d  |    r3,r3,#4....|
00004a90  20 20 20 20 20 20 20 20  4d 55 4c 20 20 20 20 20  |        MUL     |
00004aa0  72 30 2c 72 37 2c 72 31  30 0d 1b 1c 1d 20 20 20  |r0,r7,r10....   |
00004ab0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 2c  |     ADD     r1,|
00004ac0  72 38 2c 72 31 31 0d 1b  26 1a 20 20 20 20 20 20  |r8,r11..&.      |
00004ad0  20 20 42 4c 20 20 20 20  20 20 64 69 76 69 64 65  |  BL      divide|
00004ae0  0d 1b 30 1e 20 20 20 20  20 20 20 20 53 54 52 20  |..0.        STR |
00004af0  20 20 20 20 72 32 2c 5b  72 34 2c 72 33 5d 0d 1b  |    r2,[r4,r3]..|
00004b00  3a 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |:.        ADD   |
00004b10  20 20 72 33 2c 72 33 2c  23 34 0d 1b 44 1c 20 20  |  r3,r3,#4..D.  |
00004b20  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 39  |      SUBS    r9|
00004b30  2c 72 39 2c 23 31 0d 1b  4e 1e 20 20 20 20 20 20  |,r9,#1..N.      |
00004b40  20 20 42 4e 45 20 20 20  20 20 70 65 72 73 70 5f  |  BNE     persp_|
00004b50  6c 6f 6f 70 0d 1b 58 1e  20 20 20 20 20 20 20 20  |loop..X.        |
00004b60  4c 44 52 20 20 20 20 20  72 30 2c 5b 72 34 2c 23  |LDR     r0,[r4,#|
00004b70  34 5d 0d 1b 62 1c 20 20  20 20 20 20 20 20 41 44  |4]..b.        AD|
00004b80  44 20 20 20 20 20 72 30  2c 72 30 2c 23 31 0d 1b  |D     r0,r0,#1..|
00004b90  6c 1e 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |l.        STR   |
00004ba0  20 20 72 30 2c 5b 72 34  2c 23 34 5d 0d 1b 76 1a  |  r0,[r4,#4]..v.|
00004bb0  20 20 20 20 20 20 20 20  a4 73 74 72 28 33 2c 72  |        .str(3,r|
00004bc0  70 5f 70 74 72 29 0d 1b  80 25 20 20 20 20 20 20  |p_ptr)...%      |
00004bd0  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
00004be0  7b 72 30 2d 72 31 31 2c  70 63 7d 0d 1b 8a 04 0d  |{r0-r11,pc}.....|
00004bf0  1b 94 17 2e 72 65 61 64  5f 73 63 72 65 65 6e 5f  |....read_screen_|
00004c00  6c 69 6d 69 74 73 0d 1b  9e 27 20 20 20 20 20 20  |limits...'      |
00004c10  20 20 53 54 4d 46 44 20  20 20 28 73 70 29 21 2c  |  STMFD   (sp)!,|
00004c20  7b 72 30 2d 72 31 31 2c  6c 69 6e 6b 7d 0d 1b a8  |{r0-r11,link}...|
00004c30  1f 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |.        ADR    |
00004c40  20 72 30 2c 76 64 75 5f  6c 69 73 74 0d 1b b2 19  | r0,vdu_list....|
00004c50  20 20 20 20 20 20 20 20  a4 61 64 72 6c 28 31 2c  |        .adrl(1,|
00004c60  67 77 78 30 29 0d 1b bc  2a 20 20 20 20 20 20 20  |gwx0)...*       |
00004c70  20 53 57 49 20 20 20 20  20 22 58 4f 53 5f 52 65  | SWI     "XOS_Re|
00004c80  61 64 56 64 75 56 61 72  69 61 62 6c 65 73 22 0d  |adVduVariables".|
00004c90  1b c6 1e 20 20 20 20 20  20 20 20 4c 44 4d 49 41  |...        LDMIA|
00004ca0  20 20 20 72 31 2c 7b 72  32 2d 72 39 7d 0d 1b d0  |   r1,{r2-r9}...|
00004cb0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
00004cc0  20 72 32 2c 72 32 2c 4c  53 4c 20 72 38 0d 1b da  | r2,r2,LSL r8...|
00004cd0  1c 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
00004ce0  20 72 32 2c 72 32 2c 72  36 0d 1b e4 1d 20 20 20  | r2,r2,r6....   |
00004cf0  20 20 20 20 20 53 55 42  20 20 20 20 20 72 32 2c  |     SUB     r2,|
00004d00  72 32 2c 23 36 34 0d 1b  ee 20 20 20 20 20 20 20  |r2,#64...       |
00004d10  20 20 4d 4f 56 20 20 20  20 20 72 33 2c 72 33 2c  |  MOV     r3,r3,|
00004d20  4c 53 4c 20 72 39 0d 1b  f8 1c 20 20 20 20 20 20  |LSL r9....      |
00004d30  20 20 53 55 42 20 20 20  20 20 72 33 2c 72 33 2c  |  SUB     r3,r3,|
00004d40  72 37 0d 1c 02 1d 20 20  20 20 20 20 20 20 53 55  |r7....        SU|
00004d50  42 20 20 20 20 20 72 33  2c 72 33 2c 23 36 34 0d  |B     r3,r3,#64.|
00004d60  1c 0c 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |..         MOV  |
00004d70  20 20 20 72 34 2c 72 34  2c 4c 53 4c 20 72 38 0d  |   r4,r4,LSL r8.|
00004d80  1c 16 1c 20 20 20 20 20  20 20 20 53 55 42 20 20  |...        SUB  |
00004d90  20 20 20 72 34 2c 72 34  2c 72 36 0d 1c 20 1d 20  |   r4,r4,r6.. . |
00004da0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 72  |       ADD     r|
00004db0  34 2c 72 34 2c 23 36 34  0d 1c 2a 20 20 20 20 20  |4,r4,#64..*     |
00004dc0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 35 2c 72  |    MOV     r5,r|
00004dd0  35 2c 4c 53 4c 20 72 39  0d 1c 34 1c 20 20 20 20  |5,LSL r9..4.    |
00004de0  20 20 20 20 53 55 42 20  20 20 20 20 72 35 2c 72  |    SUB     r5,r|
00004df0  35 2c 72 37 0d 1c 3e 1d  20 20 20 20 20 20 20 20  |5,r7..>.        |
00004e00  41 44 44 20 20 20 20 20  72 35 2c 72 35 2c 23 36  |ADD     r5,r5,#6|
00004e10  34 0d 1c 48 1d 20 20 20  20 20 20 20 20 a4 61 64  |4..H.        .ad|
00004e20  72 6c 28 31 2c 73 63 72  5f 6d 69 6e 78 29 0d 1c  |rl(1,scr_minx)..|
00004e30  52 1e 20 20 20 20 20 20  20 20 53 54 4d 49 41 20  |R.        STMIA |
00004e40  20 20 72 31 2c 7b 72 32  2d 72 35 7d 0d 1c 5c 25  |  r1,{r2-r5}..\%|
00004e50  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 20 20  |        LDMFD   |
00004e60  28 73 70 29 21 2c 7b 72  30 2d 72 31 31 2c 70 63  |(sp)!,{r0-r11,pc|
00004e70  7d 0d 1c 66 04 0d 1c 70  0d 2e 76 64 75 5f 6c 69  |}..f...p..vdu_li|
00004e80  73 74 0d 1c 7a 17 20 20  20 20 20 20 20 20 44 43  |st..z.        DC|
00004e90  44 20 20 20 20 20 31 32  38 0d 1c 84 17 20 20 20  |D     128....   |
00004ea0  20 20 20 20 20 44 43 44  20 20 20 20 20 31 32 39  |     DCD     129|
00004eb0  0d 1c 8e 17 20 20 20 20  20 20 20 20 44 43 44 20  |....        DCD |
00004ec0  20 20 20 20 31 33 30 0d  1c 98 17 20 20 20 20 20  |    130....     |
00004ed0  20 20 20 44 43 44 20 20  20 20 20 31 33 31 0d 1c  |   DCD     131..|
00004ee0  a2 17 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |..        DCD   |
00004ef0  20 20 31 33 36 0d 1c ac  17 20 20 20 20 20 20 20  |  136....       |
00004f00  20 44 43 44 20 20 20 20  20 31 33 37 0d 1c b6 15  | DCD     137....|
00004f10  20 20 20 20 20 20 20 20  44 43 44 20 20 20 20 20  |        DCD     |
00004f20  34 0d 1c c0 15 20 20 20  20 20 20 20 20 44 43 44  |4....        DCD|
00004f30  20 20 20 20 20 35 0d 1c  ca 16 20 20 20 20 20 20  |     5....      |
00004f40  20 20 44 43 44 20 20 20  20 20 2d 31 0d 1c d4 04  |  DCD     -1....|
00004f50  0d 1c de 27 2e 72 6f 74  61 74 65 20 53 54 4d 46  |...'.rotate STMF|
00004f60  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |D   (sp)!,{r0-r1|
00004f70  31 2c 6c 69 6e 6b 7d 0d  1c e8 1e 20 20 20 20 20  |1,link}....     |
00004f80  20 20 20 4c 44 4d 49 41  20 20 20 72 30 2c 7b 72  |   LDMIA   r0,{r|
00004f90  33 2d 72 35 7d 0d 1c f2  1e 20 20 20 20 20 20 20  |3-r5}....       |
00004fa0  20 4c 44 52 20 20 20 20  20 72 38 2c 5b 72 31 2c  | LDR     r8,[r1,|
00004fb0  23 34 5d 0d 1c fc 19 20  20 20 20 20 20 20 20 43  |#4]....        C|
00004fc0  4d 50 20 20 20 20 20 72  38 2c 23 30 0d 1d 06 1e  |MP     r8,#0....|
00004fd0  20 20 20 20 20 20 20 20  53 54 4d 45 51 49 41 20  |        STMEQIA |
00004fe0  72 32 2c 7b 72 33 2d 72  35 7d 0d 1d 10 1d 20 20  |r2,{r3-r5}....  |
00004ff0  20 20 20 20 20 20 42 45  51 20 20 20 20 20 6e 6f  |      BEQ     no|
00005000  5f 72 6f 74 61 74 65 0d  1d 1a 15 20 20 20 20 20  |_rotate....     |
00005010  20 20 20 a4 73 69 6e 28  39 2c 38 29 0d 1d 24 16  |   .sin(9,8)..$.|
00005020  20 20 20 20 20 20 20 20  a4 63 6f 73 28 31 30 2c  |        .cos(10,|
00005030  38 29 0d 1d 2e 19 20 20  20 20 20 20 20 20 4d 4f  |8)....        MO|
00005040  56 53 20 20 20 20 72 36  2c 72 33 0d 1d 38 1c 20  |VS    r6,r3..8. |
00005050  20 20 20 20 20 20 20 52  53 42 4d 49 20 20 20 72  |       RSBMI   r|
00005060  36 2c 72 36 2c 23 30 0d  1d 42 19 20 20 20 20 20  |6,r6,#0..B.     |
00005070  20 20 20 4d 4f 56 53 20  20 20 20 72 37 2c 72 34  |   MOVS    r7,r4|
00005080  0d 1d 4c 1c 20 20 20 20  20 20 20 20 52 53 42 4d  |..L.        RSBM|
00005090  49 20 20 20 72 37 2c 72  37 2c 23 30 0d 1d 56 1b  |I   r7,r7,#0..V.|
000050a0  20 20 20 20 20 20 20 20  84 52 20 20 20 20 20 72  |        .R     r|
000050b0  36 2c 72 36 2c 72 37 0d  1d 60 19 20 20 20 20 20  |6,r6,r7..`.     |
000050c0  20 20 20 4d 4f 56 53 20  20 20 20 72 38 2c 72 35  |   MOVS    r8,r5|
000050d0  0d 1d 6a 1c 20 20 20 20  20 20 20 20 52 53 42 4d  |..j.        RSBM|
000050e0  49 20 20 20 72 38 2c 72  38 2c 23 30 0d 1d 74 1b  |I   r8,r8,#0..t.|
000050f0  20 20 20 20 20 20 20 20  84 52 20 20 20 20 20 72  |        .R     r|
00005100  36 2c 72 36 2c 72 38 0d  1d 7e 1a 20 20 20 20 20  |6,r6,r8..~.     |
00005110  20 20 20 4d 4f 56 20 20  20 20 20 72 31 31 2c 23  |   MOV     r11,#|
00005120  30 0d 1d 88 12 2e 72 6f  74 61 74 65 5f 72 65 64  |0.....rotate_red|
00005130  75 63 65 0d 1d 92 29 20  20 20 20 20 20 20 20 43  |uce...)        C|
00005140  4d 50 20 20 20 20 20 72  36 2c 23 28 31 3c 3c 28  |MP     r6,#(1<<(|
00005150  33 30 2d 61 6e 67 5f 61  63 63 29 29 0d 1d 9c 1d  |30-ang_acc))....|
00005160  20 20 20 20 20 20 20 20  42 4c 54 20 20 20 20 20  |        BLT     |
00005170  72 6f 74 61 74 65 5f 6f  6b 0d 1d a6 20 20 20 20  |rotate_ok...    |
00005180  20 20 20 20 20 4d 4f 56  20 20 20 20 20 72 36 2c  |     MOV     r6,|
00005190  72 36 2c 41 53 52 20 23  31 0d 1d b0 1e 20 20 20  |r6,ASR #1....   |
000051a0  20 20 20 20 20 41 44 44  20 20 20 20 20 72 31 31  |     ADD     r11|
000051b0  2c 72 31 31 2c 23 31 0d  1d ba 20 20 20 20 20 20  |,r11,#1...      |
000051c0  20 20 20 43 4d 50 20 20  20 20 20 72 31 31 2c 23  |   CMP     r11,#|
000051d0  61 6e 67 5f 61 63 63 0d  1d c4 21 20 20 20 20 20  |ang_acc...!     |
000051e0  20 20 20 42 4c 54 20 20  20 20 20 72 6f 74 61 74  |   BLT     rotat|
000051f0  65 5f 72 65 64 75 63 65  0d 1d ce 0e 2e 72 6f 74  |e_reduce.....rot|
00005200  61 74 65 5f 6f 6b 0d 1d  d8 21 20 20 20 20 20 20  |ate_ok...!      |
00005210  20 20 4d 4f 56 20 20 20  20 20 72 33 2c 72 33 2c  |  MOV     r3,r3,|
00005220  41 53 52 20 72 31 31 0d  1d e2 21 20 20 20 20 20  |ASR r11...!     |
00005230  20 20 20 4d 4f 56 20 20  20 20 20 72 35 2c 72 35  |   MOV     r5,r5|
00005240  2c 41 53 52 20 72 31 31  0d 1d ec 24 20 20 20 20  |,ASR r11...$    |
00005250  20 20 20 20 52 53 42 20  20 20 20 20 72 31 31 2c  |    RSB     r11,|
00005260  72 31 31 2c 23 61 6e 67  5f 61 63 63 0d 1d f6 1d  |r11,#ang_acc....|
00005270  20 20 20 20 20 20 20 20  4d 55 4c 20 20 20 20 20  |        MUL     |
00005280  72 36 2c 72 33 2c 72 31  30 0d 1e 00 1f 20 20 20  |r6,r3,r10....   |
00005290  20 20 20 20 20 4d 4c 41  20 20 20 20 20 72 36 2c  |     MLA     r6,|
000052a0  72 35 2c 72 39 2c 72 36  0d 1e 0a 1c 20 20 20 20  |r5,r9,r6....    |
000052b0  20 20 20 20 52 53 42 20  20 20 20 20 72 39 2c 72  |    RSB     r9,r|
000052c0  39 2c 23 30 0d 1e 14 1c  20 20 20 20 20 20 20 20  |9,#0....        |
000052d0  4d 55 4c 20 20 20 20 20  72 38 2c 72 33 2c 72 39  |MUL     r8,r3,r9|
000052e0  0d 1e 1e 20 20 20 20 20  20 20 20 20 4d 4c 41 20  |...         MLA |
000052f0  20 20 20 20 72 38 2c 72  35 2c 72 31 30 2c 72 38  |    r8,r5,r10,r8|
00005300  0d 1e 28 21 20 20 20 20  20 20 20 20 4d 4f 56 20  |..(!        MOV |
00005310  20 20 20 20 72 36 2c 72  36 2c 41 53 52 20 72 31  |    r6,r6,ASR r1|
00005320  31 0d 1e 32 19 20 20 20  20 20 20 20 20 4d 4f 56  |1..2.        MOV|
00005330  20 20 20 20 20 72 37 2c  72 34 0d 1e 3c 21 20 20  |     r7,r4..<!  |
00005340  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 38  |      MOV     r8|
00005350  2c 72 38 2c 41 53 52 20  72 31 31 0d 1e 46 1e 20  |,r8,ASR r11..F. |
00005360  20 20 20 20 20 20 20 53  54 4d 49 41 20 20 20 72  |       STMIA   r|
00005370  32 2c 7b 72 36 2d 72 38  7d 0d 1e 50 0e 2e 6e 6f  |2,{r6-r8}..P..no|
00005380  5f 72 6f 74 61 74 65 0d  1e 5a 25 20 20 20 20 20  |_rotate..Z%     |
00005390  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
000053a0  2c 7b 72 30 2d 72 31 31  2c 70 63 7d 0d 1e 64 04  |,{r0-r11,pc}..d.|
000053b0  0d 1e 6e 04 0d 1e 78 22  2e 73 69 6e 5f 74 61 62  |..n...x".sin_tab|
000053c0  20 a4 74 61 62 6c 65 28  34 2a 72 65 61 6c 5f 61  | .table(4*real_a|
000053d0  6e 67 6c 65 73 29 0d 1e  82 05 5d 0d 1e 8c 0f e7  |ngles)....].....|
000053e0  20 70 61 73 73 25 3e 34  20 8c 0d 1e 96 1a 20 e3  | pass%>4 ..... .|
000053f0  20 69 3d 30 20 b8 20 72  65 61 6c 5f 61 6e 67 6c  | i=0 . real_angl|
00005400  65 73 2d 31 0d 1e a0 1b  20 20 61 3d 32 2a af 2a  |es-1....  a=2*.*|
00005410  28 69 2f 72 65 61 6c 5f  61 6e 67 6c 65 73 29 0d  |(i/real_angles).|
00005420  1e aa 29 20 20 73 69 6e  5f 74 61 62 21 28 63 6f  |..)  sin_tab!(co|
00005430  64 65 25 2b 34 2a 69 29  3d 28 31 3c 3c 61 6e 67  |de%+4*i)=(1<<ang|
00005440  5f 61 63 63 29 2a b5 61  0d 1e b4 06 20 ed 0d 1e  |_acc)*.a.... ...|
00005450  be 05 cd 0d 1e c8 06 3d  30 0d 1e d2 05 3a 0d 1e  |.......=0....:..|
00005460  dc 15 dd 20 a4 73 69 6e  28 72 65 67 31 2c 72 65  |... .sin(reg1,re|
00005470  67 32 29 0d 1e e6 0e 5b  4f 50 54 20 70 61 73 73  |g2)....[OPT pass|
00005480  25 0d 1e f0 2f 20 20 20  20 20 20 20 20 4d 4f 56  |%.../        MOV|
00005490  20 20 20 20 20 72 31 34  2c 72 65 67 32 2c 4c 53  |     r14,reg2,LS|
000054a0  4c 20 23 28 33 32 2d 61  6e 67 5f 62 69 74 73 29  |L #(32-ang_bits)|
000054b0  0d 1e fa 38 20 20 20 20  20 20 20 20 4d 4f 56 20  |...8        MOV |
000054c0  20 20 20 20 72 31 34 2c  72 31 34 2c 4c 53 52 20  |    r14,r14,LSR |
000054d0  23 28 33 32 2d 61 6e 67  5f 62 69 74 73 2b 61 6e  |#(32-ang_bits+an|
000054e0  67 5f 73 68 69 66 74 29  0d 1f 04 20 20 20 20 20  |g_shift)...     |
000054f0  20 20 20 20 41 44 52 20  20 20 20 20 72 65 67 31  |    ADR     reg1|
00005500  2c 73 69 6e 5f 74 61 62  0d 1f 0e 2a 20 20 20 20  |,sin_tab...*    |
00005510  20 20 20 20 4c 44 52 20  20 20 20 20 72 65 67 31  |    LDR     reg1|
00005520  2c 5b 72 65 67 31 2c 72  31 34 2c 4c 53 4c 20 23  |,[reg1,r14,LSL #|
00005530  32 5d 0d 1f 18 05 5d 0d  1f 22 06 3d 30 0d 1f 2c  |2]....]..".=0..,|
00005540  05 3a 0d 1f 36 15 dd 20  a4 63 6f 73 28 72 65 67  |.:..6.. .cos(reg|
00005550  31 2c 72 65 67 32 29 0d  1f 40 0e 5b 4f 50 54 20  |1,reg2)..@.[OPT |
00005560  70 61 73 73 25 0d 1f 4a  28 20 20 20 20 20 20 20  |pass%..J(       |
00005570  20 41 44 44 20 20 20 20  20 72 31 34 2c 72 65 67  | ADD     r14,reg|
00005580  32 2c 23 61 6e 67 6c 65  73 20 81 20 34 0d 1f 54  |2,#angles . 4..T|
00005590  2e 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000055a0  20 72 31 34 2c 72 31 34  2c 4c 53 4c 20 23 28 33  | r14,r14,LSL #(3|
000055b0  32 2d 61 6e 67 5f 62 69  74 73 29 0d 1f 5e 38 20  |2-ang_bits)..^8 |
000055c0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000055d0  31 34 2c 72 31 34 2c 4c  53 52 20 23 28 33 32 2d  |14,r14,LSR #(32-|
000055e0  61 6e 67 5f 62 69 74 73  2b 61 6e 67 5f 73 68 69  |ang_bits+ang_shi|
000055f0  66 74 29 0d 1f 68 20 20  20 20 20 20 20 20 20 41  |ft)..h         A|
00005600  44 52 20 20 20 20 20 72  65 67 31 2c 73 69 6e 5f  |DR     reg1,sin_|
00005610  74 61 62 0d 1f 72 2a 20  20 20 20 20 20 20 20 4c  |tab..r*        L|
00005620  44 52 20 20 20 20 20 72  65 67 31 2c 5b 72 65 67  |DR     reg1,[reg|
00005630  31 2c 72 31 34 2c 4c 53  4c 20 23 32 5d 0d 1f 7c  |1,r14,LSL #2]..||
00005640  05 5d 0d 1f 86 06 3d 30  0d 1f 90 05 3a 0d 1f 9a  |.]....=0....:...|
00005650  13 dd 20 a4 73 74 72 28  72 65 67 2c 6f 66 66 29  |.. .str(reg,off)|
00005660  0d 1f a4 0e 5b 4f 50 54  20 70 61 73 73 25 0d 1f  |....[OPT pass%..|
00005670  ae 27 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |.'        ADD   |
00005680  20 20 72 31 34 2c 77 70  2c 23 6f 66 66 20 80 20  |  r14,wp,#off . |
00005690  26 46 46 30 30 0d 1f b8  2a 20 20 20 20 20 20 20  |&FF00...*       |
000056a0  20 53 54 52 20 20 20 20  20 72 65 67 2c 5b 72 31  | STR     reg,[r1|
000056b0  34 2c 23 6f 66 66 20 80  20 26 30 30 46 46 5d 0d  |4,#off . &00FF].|
000056c0  1f c2 05 5d 0d 1f cc 06  3d 30 0d 1f d6 05 3a 0d  |...]....=0....:.|
000056d0  1f e0 13 dd 20 a4 6c 64  72 28 72 65 67 2c 6f 66  |.... .ldr(reg,of|
000056e0  66 29 0d 1f ea 0e 5b 4f  50 54 20 70 61 73 73 25  |f)....[OPT pass%|
000056f0  0d 1f f4 27 20 20 20 20  20 20 20 20 41 44 44 20  |...'        ADD |
00005700  20 20 20 20 72 31 34 2c  77 70 2c 23 6f 66 66 20  |    r14,wp,#off |
00005710  80 20 26 46 46 30 30 0d  1f fe 2a 20 20 20 20 20  |. &FF00...*     |
00005720  20 20 20 4c 44 52 20 20  20 20 20 72 65 67 2c 5b  |   LDR     reg,[|
00005730  72 31 34 2c 23 6f 66 66  20 80 20 26 30 30 46 46  |r14,#off . &00FF|
00005740  5d 0d 20 08 05 5d 0d 20  12 06 3d 30 0d ff        |]. ..]. ..=0..|
0000574e