Home » Archimedes archive » Acorn User » AU 1993-09.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-09.adf » !3DGraphic_3DGraphic |
Filename: | Source/SWI07 |
Read OK: | ✔ |
File size: | 5972 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=12 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) 340ang_list=FNwk(64) 350 360bit_merge=64 370bit_surf=128 380bit_disp=256 390bit_dispall=512 400bit_closed=1024 410 420obj_list=0 430obj_name=4 440obj_req=8 450surf_type=0 460surf_colour=4 470surf_n=8 480surf_coords=12 490surf_req=12 500subobj_next=0 510subobj_type=4 520subobj_flags=8 530subobj_offset=12 540subobj_angle=24 550subobj_surfreq=36 560subobj_bounds=36 570subobj_req=132 580slide_limit=16^2 590 600disp_minz=0 610disp_maxz=4 620disp_n=8 630disp_dat=12 640disp_req=disp_dat 650 660DIM rot_lab(2) 670=0 680: 690DEF FNswi07_code 700LOCAL i,a 710[OPT pass% 720.render 730 STMFD (sp)!,{r0-r11,link} 740 MOV r0,#poly_chunk 750 BL malloc 760 LDMVSFD (sp)!,{r0-r11,pc} 770 MOV r3,r0 780 MOV r4,#poly_chunk 790 MOV r5,#0 800 FNadrl(14,poly_point) 810 STMIA r14,{r3-r5} 820 BL read_screen_limits 830 840 FNadrl(8,ang_list) 850 LDR r2,[sp,#4*2] 860 MVN r0,#0 870 STMIA r8!,{r0,r2} 880 LDR r7,[sp,#4*1] 890 MOV r9,#0 900 LDR r10,[sp] 910 BL clip 920 930 FNadrl(8,ang_list) 940 LDR r1,[sp,#4*2] 950 MVN r0,#0 960 STMIA r8!,{r0,r2} 970 MOV r9,#0 980 LDR r7,[sp,#4*1] 990 LDR r10,[sp] 1000 BL do_render_obj 1010 1020 BL plot_faces 1030 FNadrl(10,poly_point) 1040 LDMIA r10,{r4-r6} 1050.free_poly_loop 1060 SUBS r6,r6,#1 1070 BMI freed_poly_list 1080 LDR r0,[r4],#4 1090 BL free 1100 B free_poly_loop 1110.freed_poly_list 1120 LDR r0,[r10] 1130 BL free 1140.render_done 1150 STRVS r0,[sp] 1160 LDMFD (sp)!,{r0-r11,pc} 1170 1180.do_render_obj 1190 STMFD (sp)!,{r0-r11,link} 1200 BL render_obj 1210 LDMFD (sp)!,{r0-r11,pc} 1220 1230 ; r8-> angle list, full descending stack of pointers to 12-byte angles, 1240 ; terminated by -1 1250 ; r7-> offset 1260 ; r9=flags (including bit_dispall) 1270 ; r10-> tree to render 1280 1290.render_obj 1300 STMFD (sp)!,{r7,r8,link} 1310 LDR r10,[r10,#obj_list] 1320.render_obj_loop 1330 CMP r10,#0 1340 LDMEQFD (sp)!,{r7,r8,pc} 1350 LDR r0,[r10,#subobj_flags] 1360 TST r0,#bit_disp 1370 TSTEQ r9,#bit_dispall 1380 BEQ render_next 1390 TST r0,#bit_surf 1400 BEQ render_subobj 1410.render_surf 1420 LDR r0,[r10,#subobj_type] 1430 MOV r1,r7 1440 BL register_polygon 1450 ADD r14,sp,#4*2 1460 LDMIA r14,{r3,r4} 1470 B render_next 1480.render_subobj 1490 SUB sp,sp,#12 1500 1510 ADD r0,r10,#subobj_offset 1520 MOV r2,sp 1530 BL rotate_by_list 1540 MOV r0,sp 1550 MOV r1,r7 1560 BL add 1570 1580 ADD r14,r10,#subobj_angle 1590 LDMIA r14,{r0-r2} 1600 ORRS r0,r0,r1 1610 CMPEQ r2,#0 1620 STRNE r14,[r8],#4 ; add angle to list 1630 1640 TST r9,#bit_closed 1650 BEQ not_flat 1660 1670 LDR r0,[r10,#subobj_bounds+8] 1680 LDR r1,[r10,#subobj_bounds+20] 1690 CMP r0,r1 1700 BNE not_flat 1710 1720 MOV r0,#0 1730 MOV r1,#0 1740 MOV r2,#&100 1750 STMDB (sp)!,{r0-r2} 1760 MOV r0,sp 1770 MOV r2,r0 1780 BL rotate_by_list 1790 1800 ; now find scalar product between vector to origin of bounding cube 1810 ; and this normal... 1820 1830 LDMIA r7,{r0-r2} 1840 ADD r14,r10,#subobj_bounds 1850 LDMIA r14,{r3-r5} 1860 ADD r0,r0,r3 1870 ADD r1,r1,r4 1880 ADD r2,r2,r5 1890 LDMIA (sp)!,{r3-r5} 1900 MUL r3,r0,r3 1910 MLA r3,r1,r4,r3 1920 MLAS r3,r2,r5,r3 1930 BMI rendered_sub_obj 1940 1950.not_flat 1960 1970 MOV r7,sp 1980 STMFD (sp)!,{r9-r11} 1990 LDR r14,[r10,#subobj_flags] 2000 ORR r9,r9,r14 2010 LDR r10,[r10,#subobj_type] 2020 BL render_obj 2030 LDMFD (sp)!,{r9-r11} 2040 2050.rendered_sub_obj 2060 ADD sp,sp,#12 2070 LDMIA sp,{r7,r8} 2080.render_next 2090 LDR r10,[r10,#subobj_next] 2100 B render_obj_loop 2110 2120 ; r7->offset, r8->angle list, r10->object 2130 ; r9=flags 2140 2150.clip STMFD (sp)!,{r0-r11,link} 2160 SUB sp,sp,#12+12+96 2170 LDR r10,[r10,#obj_list] 2180.clip_loop 2190 CMP r10,#0 2200 BEQ clip_exit 2210 LDR r11,[r10,#subobj_flags] 2220 BIC r11,r11,#bit_disp+bit_dispall 2230 TST r11,#bit_surf 2240 BNE register_clip 2250.clip_subobj 2260 ADD r14,r10,#subobj_angle 2270 LDMIA r14,{r0-r2} 2280 ORRS r0,r0,r1 2290 CMPEQ r2,#0 2300 STRNE r14,[r8],#4 ; add angle to list 2310 2320 ADD r0,r10,#subobj_offset 2330 ADD r2,sp,#12 2340 BL rotate_by_list 2350 MOV r0,r2 2360 MOV r1,r7 2370 BL add 2380 2390 ; sp+12 now contains correct origin of subobject 2400 2410 MOV r3,#12+12 2420 ADD r4,r10,#subobj_bounds 2430.rotate_bounds 2440 MOV r0,r4 2450 ADD r2,sp,r3 2460 BL rotate_by_list 2470 MOV r0,r2 2480 ADD r1,sp,#12 2490 BL add 2500 ADD r4,r4,#12 2510 ADD r3,r3,#12 2520 CMP r3,#12+12+96 2530 BLT rotate_bounds 2540 2550 MOV r5,#0 2560 MOV r7,#0 2570.check_bound_loop1 2580 MOV r14,#1 2590 TST r9,r14,LSL r7 2600 BNE wholly_visible 2610 2620 MOV r3,#12+12 2630 MOV r6,#0 2640.check_bound_loop2 2650 MOV r5,r5,LSL #1 2660 TST r5,#%100000000 2670 BNE was_badz 2680 ADD r0,sp,r3 2690 MOV r1,r7 2700 BL invisible 2710 BNE not_invis 2720 ADD r6,r6,#1 2730 CMP r7,#2 2740 ORRLT r5,r5,#1 2750.not_invis 2760.was_badz 2770 ADD r3,r3,#12 2780 CMP r3,#12+12+96 2790 BLT check_bound_loop2 2800 ORR r5,r5,r5,LSR #8 2810 BIC r5,r5,#&FF00 2820 CMP r6,#8 2830 BEQ clip_next 2840 CMP r5,#0 2850 BNE whacky_zeds 2860 CMP r6,#0 2870 MOVEQ r14,#1 2880 ORREQ r9,r9,r14,LSL r7 2890.whacky_zeds 2900.wholly_visible 2910 ADD r7,r7,#1 2920 CMP r7,#6 2930 BLT check_bound_loop1 2940 CMP r9,#%111111 ; completely visible 2950 ORREQ r11,r11,#bit_dispall 2960 BEQ register_clip 2970 ADD r7,sp,#12 2980 STMFD (sp)!,{r10} 2990 LDR r10,[r10,#subobj_type] 3000 BL clip 3010 LDMFD (sp)!,{r10} 3020.register_clip 3030 ORR r11,r11,#bit_disp 3040.clip_next 3050 STR r11,[r10,#subobj_flags] 3060 ADD r14,sp,#12+12+96+4*7 3070 LDMIA r14,{r7,r8} 3080 LDR r10,[r10,#subobj_next] 3090 B clip_loop 3100.clip_exit 3110 ADD sp,sp,#12+12+96 3120 LDMFD (sp)!,{r0-r11,pc} 3130 3140.add STMFD (sp)!,{r0-r8,link} 3150 LDMIA r0,{r3-r5} 3160 LDMIA r1,{r6-r8} 3170 ADD r3,r3,r6 3180 ADD r4,r4,r7 3190 ADD r5,r5,r8 3200 STMIA r2,{r3-r5} 3210 LDMFD (sp)!,{r0-r8,pc} 3220 3230.free_tree 3240 STMFD (sp)!,{r0-r11,link} 3250 LDR r0,[r11,#obj_name] 3260 CMP r0,#0 3270 BLNE free 3280 LDR r8,[r11,#obj_list] 3290.free_tree_loop 3300 CMP r8,#0 3310 BEQ freed_list 3320 LDR r0,[r8,#subobj_flags] 3330 TST r0,#bit_surf 3340 BNE free_tree2 3350 MOV r10,r11 3360 LDR r11,[r8,#subobj_type] 3370 BL free_tree 3380 MOV r11,r10 3390.free_tree2 3400 LDR r7,[r8,#subobj_next] 3410 MOV r0,r8 3420 BL free 3430 MOV r8,r7 3440 B free_tree_loop 3450.freed_list 3460 MOV r0,r11 3470 BL free 3480 LDMFD (sp)!,{r0-r11,pc} 3490 3500.plot_faces 3510 STMFD (sp)!,{r0-r11,link} 3520 FNadrl(14,poly_point) 3530 LDMIA r14,{r9-r11} 3540 CMP r11,#0 3550 CMPNE r9,#0 3560 LDMEQFD (sp)!,{r0-r11,pc} 3570 MOV r0,r11 3580 MOV r1,r9 3590 ADR r2,compare 3600 SWI "XOS_HeapSort" 3610 FNadrl(14,flags) 3620 LDR r3,[r14] 3630.plot_face_loop 3640 LDR r8,[r9],#4 3650 LDR r7,[r8,#disp_n] 3660 ADD r8,r8,#disp_dat 3670.plot_face_loop2 3680 LDMIA r8!,{r2,r6} 3690 MOV r0,r6 3700 MOV r1,r8 3710 BL swi(00) 3720 ADD r8,r8,r6,LSL #3 3730 SUBS r7,r7,#1 3740 BNE plot_face_loop2 3750 SUBS r11,r11,#1 3760 BNE plot_face_loop 3770 LDMFD (sp)!,{r0-r11,pc} 3780 3790.compare 3800 LDMIA r0,{r2,r3} 3810 LDMIA r1,{r0,r1} 3820 CMP r2,r1 3830 BGE comp_retlt 3840 CMP r0,r3 3850 BGE comp_retgt 3860 CMP r2,r0 3870 BLT comp_retgt 3880.comp_retlt 3890 MVN r0,#0 3900 CMP r0,#0 3910 MOV pc,link 3920.comp_retgt 3930 MOV r0,#1 3940 CMP r0,#0 3950 MOV pc,link 3960 3970.invisible 3980 STMFD (sp)!,{r0-r11,link} 3990 LDMIA r0,{r7-r9} 4000 FNadrl(14,s) 4010 LDMIA r14,{r10,r11} 4020 ADD pc,pc,r1,LSL #2 4030 DCD 0 4040 B check_maxz 4050 B check_minz 4060 B check_minx 4070 B check_maxx 4080 B check_miny 4090 B check_maxy 4100.check_maxz 4110 LDR r2,[r0,#8] 4120 FNadrl(3,max_z) 4130 LDR r3,[r3] 4140 CMP r2,r3 4150 BLT is_visible 4160 B is_invisible 4170.check_minz 4180 LDR r2,[r0,#8] 4190 FNadrl(3,min_z) 4200 LDR r3,[r3] 4210 CMP r2,r3 4220 BGT is_visible 4230 B is_invisible 4240.check_minx 4250 MUL r0,r10,r7 4260 ADD r1,r9,r11 4270 BL divide 4280 FNadrl(14,scr_minx) 4290 LDR r14,[r14] 4300 CMP r2,r14 4310 BGT is_visible 4320 B is_invisible 4330.check_maxx 4340 MUL r0,r10,r7 4350 ADD r1,r9,r11 4360 BL divide 4370 FNadrl(14,scr_maxx) 4380 LDR r14,[r14] 4390 CMP r2,r14 4400 BLT is_visible 4410 B is_invisible 4420.check_miny 4430 MUL r0,r10,r8 4440 ADD r1,r9,r11 4450 BL divide 4460 FNadrl(14,scr_miny) 4470 LDR r14,[r14] 4480 CMP r2,r14 4490 BGT is_visible 4500 B is_invisible 4510.check_maxy 4520 MUL r0,r10,r8 4530 ADD r1,r9,r11 4540 BL divide 4550 FNadrl(14,scr_maxy) 4560 LDR r14,[r14] 4570 CMP r2,r14 4580 BLT is_visible 4590.is_invisible 4600 CMP r0,r0 4610 LDMFD (sp)!,{r0-r11,pc} 4620.is_visible 4630 CMN pc,#0 4640 LDMFD (sp)!,{r0-r11,pc} 4650 4660.slide STMFD (sp)!,{r0-r11,link} 4670 MOV r11,r3 4680 LDMIA r0,{r5-r7} 4690 LDMIA r1,{r8-r10} 4700.slide_loop 4710 ADD r2,r5,r8 4720 ADD r3,r6,r9 4730 ADD r4,r7,r10 4740 MOV r2,r2,ASR #1 4750 MOV r3,r3,ASR #1 4760 MOV r4,r4,ASR #1 4770 SUB r0,r5,r8 4780 MOV r14,r0 4790 MUL r1,r0,r14 4800 SUB r0,r6,r9 4810 MOV r14,r0 4820 MLA r1,r0,r14,r1 4830 SUB r0,r7,r10 4840 MOV r14,r0 4850 MLA r1,r0,r14,r1 4860 CMP r1,#slide_limit 4870 BLT well_slid 4880 STMFD (sp)!,{r2-r4} 4890 MOV r0,sp 4900 MOV r1,r11 4910 BL invisible 4920 LDMEQFD (sp)!,{r5-r7} 4930 LDMNEFD (sp)!,{r8-r10} 4940 B slide_loop 4950.well_slid 4960 LDR r0,[sp,#4*2] 4970 STMIA r0,{r2-r4} 4980 LDMFD (sp)!,{r0-r11,pc} 4990 5000 ; r8->angle list 5010 5020.register_polygon 5030 STMFD (sp)!,{r0-r11,link} 5040 MOV r10,r0 5050 LDR r9,[r10,#surf_n] 5060 FNadrl(5,vertices) 5070 MOV r3,r9 5080 MOV r4,#0 5090.rp_copy_vertices 5100 ADD r0,r10,#surf_req 5110 ADD r0,r0,r4 5120 ADD r2,r5,r4 5130 BL rotate_by_list 5140 MOV r0,r2 5150 LDR r1,[sp,#4*1] 5160 BL add 5170 ADD r4,r4,#12 5180 SUBS r3,r3,#1 5190 BNE rp_copy_vertices 5200 MOV r1,#0 5210.rp_clip_loop 5220 LDR r0,[sp,#4*9] 5230 MOV r14,#1 5240 TST r0,r14,LSL r1 5250 BNE rp_no_need_to_clip 5260 MOV r3,#0 5270.rp_loop1 5280 CMP r9,#2 5290 LDMLEFD (sp)!,{r0-r11,pc} 5300 CMP r3,r9 5310 BGE done_rp_loop1 5320 ADD r0,r5,r3,LSL #3 5330 ADD r0,r0,r3,LSL #2 5340 BL invisible 5350 BNE next_rp_loop1 5360 ADD r14,r3,#1 5370 CMP r14,r9 5380 MOVEQ r14,#0 5390 ADD r0,r5,r14,LSL #3 5400 ADD r0,r0,r14,LSL #2 5410 BL invisible 5420 BNE next_rp_loop1 5430 SUBS r14,r3,#1 5440 ADDMI r14,r14,r9 5450 ADD r0,r5,r14,LSL #3 5460 ADD r0,r0,r14,LSL #2 5470 BL invisible 5480 BNE next_rp_loop1 5490 ADD r14,r3,#1 5500 CMP r14,r9 5510 BGE rp_is_last_anyway 5520 STMFD (sp)!,{r1,r7,r8,r10-r11} 5530 MOV r10,r3 5540 SUB r11,r9,#2 5550 ADD r7,r5,r3,LSL #3 5560 ADD r7,r7,r3,LSL #2 5570 ADD r8,r7,#12 5580.rp_del_loop 5590 LDMIA r8!,{r0-r2} 5600 STMIA r7!,{r0-r2} 5610 ADD r10,r10,#1 5620 CMP r10,r11 5630 BLE rp_del_loop 5640 LDMFD (sp)!,{r1,r7,r8,r10-r11} 5650.rp_is_last_anyway 5660 SUB r9,r9,#1 5670 B rp_loop1 5680.next_rp_loop1 5690 ADD r3,r3,#1 5700 B rp_loop1 5710.done_rp_loop1 5720 MOV r3,#0 5730.rp_loop2 5740 CMP r3,r9 5750 BGE done_rp_loop2 5760 ADD r0,r5,r3,LSL #3 5770 ADD r0,r0,r3,LSL #2 5780 BL invisible 5790 BNE next_rp_loop2 5800 SUBS r14,r3,#1 5810 ADDMI r14,r14,r9 5820 ADD r0,r5,r14,LSL #3 5830 ADD r0,r0,r14,LSL #2 5840 BL invisible 5850 BEQ next_rp_loop2 5860 ADD r14,r3,#1 5870 CMP r14,r9 5880 MOVEQ r14,#0 5890 ADD r0,r5,r14,LSL #3 5900 ADD r0,r0,r14,LSL #2 5910 BL invisible 5920 BEQ no_need_to_ins 5930 STMFD (sp)!,{r1,r7,r8,r10} 5940 SUB r10,r9,#1 5950 ADD r7,r5,r10,LSL #3 5960 ADD r7,r7,r10,LSL #2 5970 ADD r8,r7,#12 5980.rp_ins_loop 5990 LDMIA r7,{r0-r2} 6000 STMIA r8,{r0-r2} 6010 SUB r7,r7,#12 6020 SUB r8,r8,#12 6030 SUB r10,r10,#1 6040 CMP r10,r3 6050 BGE rp_ins_loop 6060 LDMFD (sp)!,{r1,r7,r8,r10} 6070 ADD r9,r9,#1 6080.no_need_to_ins 6090 STMFD (sp)!,{r0-r3} 6100 ADD r0,r5,r3,LSL #3 6110 ADD r0,r0,r3,LSL #2 6120 SUBS r14,r3,#1 6130 ADDMI r14,r14,r9 6140 ADD r1,r5,r14,LSL #3 6150 ADD r1,r1,r14,LSL #2 6160 MOV r2,r0 6170 LDR r3,[sp,#4] 6180 BL slide 6190 LDR r3,[sp,#12] 6200 ADD r3,r3,#1 6210 CMP r3,r9 6220 MOVEQ r3,#0 6230 ADD r0,r5,r3,LSL #3 6240 ADD r0,r0,r3,LSL #2 6250 ADD r14,r3,#1 6260 CMP r14,r9 6270 MOVEQ r14,#0 6280 ADD r1,r5,r14,LSL #3 6290 ADD r1,r1,r14,LSL #2 6300 MOV r2,r0 6310 LDR r3,[sp,#4] 6320 BL slide 6330 LDMFD (sp)!,{r0-r3} 6340 ADD r3,r3,#2 6350.next_rp_loop2 6360 ADD r3,r3,#1 6370 B rp_loop2 6380.done_rp_loop2 6390.rp_no_need_to_clip 6400 ADD r1,r1,#1 6410 CMP r1,#6 6420 BLT rp_clip_loop 6430 FNadrl(11,poly_point) 6440 LDMIA r11,{r6-r8} 6450 LDR r0,[sp,#4*9] 6460 TST r0,#bit_merge 6470 LDREQ r0,[r10,#surf_type] 6480 CMPEQ r0,#0 6490 BNE not_new_poly 6500 MOV r0,#disp_req 6510 BL malloc 6520 STRVS r0,[sp] 6530 LDMVSFD (sp)!,{r0-r11,pc} 6540 MOV r4,r0 6550 MOV r0,#&70000000 6560 RSB r1,r0,#0 6570 MOV r2,#0 6580 STMIA r4,{r0-r2} 6590 CMP r7,r8,LSL #2 6600 BNE dont_extend_rp_table 6610 MOV r0,r6 6620 MOV r1,#poly_chunk 6630 BL realloc 6640 STRVS r0,[sp] 6650 LDMVSFD (sp)!,{r0-r11,pc} 6660 MOV r6,r0 6670 ADD r7,r7,#poly_chunk 6680 STMIA r11,{r6-r8} 6690.dont_extend_rp_table 6700 STR r4,[r6,r8,LSL #2] 6710 ADD r8,r8,#1 6720 STR r8,[r11,#8] 6730 MOV r0,#disp_dat 6740 FNstr(0,rp_ptr) 6750.not_new_poly 6760 SUB r2,r8,#1 6770 LDR r0,[r6,r2,LSL #2] 6780 MOV r1,r9,LSL #3 6790 ADD r1,r1,#8 6800 BL realloc 6810 STRVS r0,[sp] 6820 LDMVSFD (sp)!,{r0-r11,pc} 6830 STR r0,[r6,r2,LSL #2] 6840 MOV r4,r0 6850 FNldr(3,rp_ptr) 6860 LDR r0,[r10,#surf_colour] 6870 STR r0,[r4,r3] 6880 ADD r3,r3,#4 6890 STR r9,[r4,r3] 6900 ADD r3,r3,#4 6910 6920 LDR r0,[r4,#disp_n] 6930 ADD r0,r0,#1 6940 STR r0,[r4,#disp_n] 6950 6960 FNadrl(14,s) 6970 LDMIA r14,{r10,r11} 6980.persp_loop 6990 LDMIA r5!,{r6-r8} 7000 LDMIA r4,{r0,r1} 7010 CMP r8,r0 7020 MOVLT r0,r8 7030 CMP r8,r1 7040 MOVGT r1,r8 7050 STMIA r4,{r0,r1} 7060 MUL r0,r6,r10 7070 ADD r1,r8,r11 7080 BL divide 7090 STR r2,[r4,r3] 7100 ADD r3,r3,#4 7110 MUL r0,r7,r10 7120 ADD r1,r8,r11 7130 BL divide 7140 STR r2,[r4,r3] 7150 ADD r3,r3,#4 7160 SUBS r9,r9,#1 7170 BNE persp_loop 7180 FNstr(3,rp_ptr) 7190 LDMFD (sp)!,{r0-r11,pc} 7200 7210.zmin DCD 0 7220.zmax DCD 0 7230 7240.read_screen_limits 7250 STMFD (sp)!,{r0-r11,link} 7260 ADR r0,vdu_list 7270 FNadrl(1,gwx0) 7280 SWI "XOS_ReadVduVariables" 7290 LDMIA r1,{r2-r9} 7300 MOV r2,r2,LSL r8 7310 SUB r2,r2,r6 7320 SUB r2,r2,#64 7330 MOV r3,r3,LSL r9 7340 SUB r3,r3,r7 7350 SUB r3,r3,#64 7360 MOV r4,r4,LSL r8 7370 SUB r4,r4,r6 7380 ADD r4,r4,#64 7390 MOV r5,r5,LSL r9 7400 SUB r5,r5,r7 7410 ADD r5,r5,#64 7420 FNadrl(1,scr_minx) 7430 STMIA r1,{r2-r5} 7440 LDMFD (sp)!,{r0-r11,pc} 7450 7460.vdu_list 7470 DCD 128 7480 DCD 129 7490 DCD 130 7500 DCD 131 7510 DCD 136 7520 DCD 137 7530 DCD 4 7540 DCD 5 7550 DCD -1 7560 7570 ; r8->list of angles, r0->point to rotate, r2->where to put result 7580 7590.rotate_by_list 7600 STMFD (sp)!,{r0-r2,r8,link} 7610.rotate_by_list_loop 7620 LDR r1,[r8,#-4]! 7630 CMP r1,#0 7640 LDMLTFD (sp)!,{r0-r2,r8,pc} 7650 BL rotate 7660 MOV r0,r2 7670 B rotate_by_list_loop 7680 7690.rotate STMFD (sp)!,{r0-r11,link} 7700 LDMIA r0,{r3-r5} 7710 7720 MOVS r6,r3 7730 RSBMI r6,r6,#0 7740 MOVS r7,r4 7750 RSBMI r7,r7,#0 7760 ORR r6,r6,r7 7770 MOVS r8,r5 7780 RSBMI r8,r8,#0 7790 ORR r6,r6,r8 7800 7810 MOV r11,#0 7820 MOV r14,#(1<<(30-ang_acc)) 7830.rotate_reduce 7840 CMP r14,r6,ASR r11 7850 ADDLE r11,r11,#1 7860 BLE rotate_reduce 7870 7880 LDR r8,[r1,#0] 7890 FNrotate(0,1,2,FALSE) 7900 LDR r8,[r1,#4] 7910 FNrotate(1,0,2,TRUE) 7920 LDR r8,[r1,#8] 7930 FNrotate(2,0,1,FALSE) 7940 7950 STMIA r2,{r3-r5} 7960 LDMFD (sp)!,{r0-r11,pc} 7970 7980 7990.sin_tab FNtable(4*real_angles) 8000] 8010IF pass%>4 THEN 8020 FOR i=0 TO real_angles-1 8030 a=2*PI*(i/real_angles) 8040 sin_tab!(code%+4*i)=(1<<ang_acc)*SINa 8050 NEXT 8060ENDIF 8070=0 8080: 8090DEF FNrotate(r,a0,a1,minus) 8100LOCAL x,y,x2,y2 8110x=a0+3 8120y=a1+3 8130x2=a0+6 8140y2=a1+6 8150[OPT pass% 8160 CMP r8,#0 8170 BEQ rot_lab(r) 8180 FNsin(9,8) 8190 FNcos(10,8) 8200 MOV x,x,ASR r11 8210 MOV y,y,ASR r11 8220 MUL x2,x,r10 8230] 8240IF minus THEN 8250 [OPT pass% 8260 RSB r9,r9,#0 8270 ] 8280ENDIF 8290[OPT pass% 8300 MLA x2,y,r9,x2 8310 RSB r9,r9,#0 8320 MUL y2,x,r9 8330 MLA y2,y,r10,y2 8340 RSB r14,r11,#ang_acc 8350 MOV x,x2,ASR r14 8360 MOV y,y2,ASR r14 8370.rot_lab(r) 8380] 8390=0 8400: 8410DEF FNsin(reg1,reg2) 8420[OPT pass% 8430 MOV r14,reg2,LSL #(32-ang_bits) 8440 MOV r14,r14,LSR #(32-ang_bits+ang_shift) 8450 ADR reg1,sin_tab 8460 LDR reg1,[reg1,r14,LSL #2] 8470] 8480=0 8490: 8500DEF FNcos(reg1,reg2) 8510[OPT pass% 8520 ADD r14,reg2,#angles DIV 4 8530 MOV r14,r14,LSL #(32-ang_bits) 8540 MOV r14,r14,LSR #(32-ang_bits+ang_shift) 8550 ADR reg1,sin_tab 8560 LDR reg1,[reg1,r14,LSL #2] 8570] 8580=0 8590: 8600DEF FNstr(reg,off) 8610[OPT pass% 8620 ADD r14,wp,#off AND &FF00 8630 STR reg,[r14,#off AND &00FF] 8640] 8650=0 8660: 8670DEF FNldr(reg,off) 8680[OPT pass% 8690 ADD r14,wp,#off AND &FF00 8700 LDR reg,[r14,#off AND &00FF] 8710] 8720=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=12 �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) Tang_list=�wk(64) ^ hbit_merge=64 rbit_surf=128 |bit_disp=256 �bit_dispall=512 �bit_closed=1024 � �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 0subobj_bounds=36 :subobj_req=132 Dslide_limit=16^2 N Xdisp_minz=0 bdisp_maxz=4 ldisp_n=8 vdisp_dat=12 �disp_req=disp_dat � �� rot_lab(2) �=0 �: �� �swi07_code � � i,a �[OPT pass% �.render �' 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} 4& BL read_screen_limits > H �adrl(8,ang_list) R LDR r2,[sp,#4*2] \ MVN r0,#0 f STMIA r8!,{r0,r2} p LDR r7,[sp,#4*1] z MOV r9,#0 � LDR r10,[sp] � BL clip � � �adrl(8,ang_list) � LDR r1,[sp,#4*2] � MVN r0,#0 � STMIA r8!,{r0,r2} � MOV r9,#0 � LDR r7,[sp,#4*1] � LDR r10,[sp] �! BL do_render_obj � � BL plot_faces �adrl(10,poly_point) LDMIA r10,{r4-r6} .free_poly_loop $ SUBS r6,r6,#1 .# BMI freed_poly_list 8 LDR r0,[r4],#4 B BL free L" B free_poly_loop V.freed_poly_list ` LDR r0,[r10] j BL free t.render_done ~ STRVS r0,[sp] �% LDMFD (sp)!,{r0-r11,pc} � �.do_render_obj �' STMFD (sp)!,{r0-r11,link} � BL render_obj �% LDMFD (sp)!,{r0-r11,pc} � �L ; r8-> angle list, full descending stack of pointers to 12-byte angles, � ; terminated by -1 � ; r7-> offset �' ; r9=flags (including bit_dispall) � ; r10-> tree to render .render_obj & STMFD (sp)!,{r7,r8,link} ' LDR r10,[r10,#obj_list] (.render_obj_loop 2 CMP r10,#0 <$ LDMEQFD (sp)!,{r7,r8,pc} F* LDR r0,[r10,#subobj_flags] P TST r0,#bit_disp Z# TSTEQ r9,#bit_dispall d BEQ render_next n TST r0,#bit_surf x! BEQ render_subobj �.render_surf �) LDR r0,[r10,#subobj_type] � MOV r1,r7 �$ BL register_polygon � ADD r14,sp,#4*2 � LDMIA r14,{r3,r4} � B render_next �.render_subobj � SUB sp,sp,#12 � �) ADD r0,r10,#subobj_offset � MOV r2,sp �" BL rotate_by_list MOV r0,sp MOV r1,r7 BL add " ,) ADD r14,r10,#subobj_angle 6 LDMIA r14,{r0-r2} @ �RS r0,r0,r1 J CMPEQ r2,#0 T3 STRNE r14,[r8],#4 ; add angle to list ^ h" TST r9,#bit_closed r BEQ not_flat | �- LDR r0,[r10,#subobj_bounds+8] �. LDR r1,[r10,#subobj_bounds+20] � CMP r0,r1 � BNE not_flat � � MOV r0,#0 � MOV r1,#0 � MOV r2,#&100 �! STMDB (sp)!,{r0-r2} � MOV r0,sp � MOV r2,r0 �" BL rotate_by_list � I ; now find scalar product between vector to origin of bounding cube ; and this normal... & LDMIA r7,{r0-r2} 0* ADD r14,r10,#subobj_bounds : LDMIA r14,{r3-r5} D ADD r0,r0,r3 N ADD r1,r1,r4 X ADD r2,r2,r5 b! LDMIA (sp)!,{r3-r5} l MUL r3,r0,r3 v MLA r3,r1,r4,r3 � MLAS r3,r2,r5,r3 �$ BMI rendered_sub_obj � � .not_flat � � MOV r7,sp �" STMFD (sp)!,{r9-r11} �+ LDR r14,[r10,#subobj_flags] � �R r9,r9,r14 �* LDR r10,[r10,#subobj_type] � BL render_obj �" LDMFD (sp)!,{r9-r11} � .rendered_sub_obj ADD sp,sp,#12 LDMIA sp,{r7,r8} .render_next ** LDR r10,[r10,#subobj_next] 4# B render_obj_loop > H. ; r7->offset, r8->angle list, r10->object R ; r9=flags \ f'.clip STMFD (sp)!,{r0-r11,link} p# SUB sp,sp,#12+12+96 z' LDR r10,[r10,#obj_list] �.clip_loop � CMP r10,#0 � BEQ clip_exit �+ LDR r11,[r10,#subobj_flags] �1 BIC r11,r11,#bit_disp+bit_dispall �! TST r11,#bit_surf �! BNE register_clip �.clip_subobj �) ADD r14,r10,#subobj_angle � LDMIA r14,{r0-r2} � �RS r0,r0,r1 � CMPEQ r2,#0 �3 STRNE r14,[r8],#4 ; add angle to list ) ADD r0,r10,#subobj_offset ADD r2,sp,#12 $" BL rotate_by_list . MOV r0,r2 8 MOV r1,r7 B BL add L V5 ; sp+12 now contains correct origin of subobject ` j MOV r3,#12+12 t) ADD r4,r10,#subobj_bounds ~.rotate_bounds � MOV r0,r4 � ADD r2,sp,r3 �" BL rotate_by_list � MOV r0,r2 � ADD r1,sp,#12 � 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 2 < MOV r3,#12+12 F MOV r6,#0 P.check_bound_loop2 Z MOV r5,r5,LSL #1 d" TST r5,#%100000000 n BNE was_badz x ADD r0,sp,r3 � 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 6 �Q r14,#1 @# �REQ r9,r9,r14,LSL r7 J.whacky_zeds T.wholly_visible ^ ADD r7,r7,#1 h CMP r7,#6 r% BLT check_bound_loop1 |4 CMP r9,#%111111 ; completely visible �' �REQ r11,r11,#bit_dispall �! BEQ register_clip � ADD r7,sp,#12 � STMFD (sp)!,{r10} �* LDR r10,[r10,#subobj_type] � BL clip � LDMFD (sp)!,{r10} �.register_clip �$ �R r11,r11,#bit_disp �.clip_next �+ STR r11,[r10,#subobj_flags] �( ADD r14,sp,#12+12+96+4*7 � LDMIA r14,{r7,r8} * LDR r10,[r10,#subobj_next] B clip_loop .clip_exit &# ADD sp,sp,#12+12+96 0% LDMFD (sp)!,{r0-r11,pc} : D&.add STMFD (sp)!,{r0-r8,link} N LDMIA r0,{r3-r5} X LDMIA r1,{r6-r8} b ADD r3,r3,r6 l ADD r4,r4,r7 v ADD r5,r5,r8 � STMIA r2,{r3-r5} �$ LDMFD (sp)!,{r0-r8,pc} � �.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 4 MOV r11,r10 >.free_tree2 H( LDR r7,[r8,#subobj_next] R MOV r0,r8 \ BL free f MOV r8,r7 p" B free_tree_loop z.freed_list � MOV r0,r11 � BL free �% 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 8 LDR r8,[r9],#4 B# LDR r7,[r8,#disp_n] L# ADD r8,r8,#disp_dat V.plot_face_loop2 ` LDMIA r8!,{r2,r6} j MOV r0,r6 t MOV r1,r8 ~ BL swi(00) �# ADD r8,r8,r6,LSL #3 � SUBS r7,r7,#1 �# BNE plot_face_loop2 � SUBS r11,r11,#1 �" BNE plot_face_loop �% LDMFD (sp)!,{r0-r11,pc} � �.compare � LDMIA r0,{r2,r3} � LDMIA r1,{r0,r1} � CMP r2,r1 � BGE comp_retlt CMP r0,r3 BGE comp_retgt CMP r2,r0 BLT comp_retgt (.comp_retlt 2 MVN r0,#0 < CMP r0,#0 F MOV pc,link P.comp_retgt Z MOV r0,#1 d CMP r0,#0 n MOV pc,link x �.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 � B check_maxz � B check_minz � B check_minx � B check_maxx � B check_miny � B check_maxy .check_maxz LDR r2,[r0,#8] �adrl(3,max_z) " LDR r3,[r3] , CMP r2,r3 6 BLT is_visible @ B is_invisible J.check_minz T LDR r2,[r0,#8] ^ �adrl(3,min_z) h LDR r3,[r3] r 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] � CMP r2,r14 � BGT is_visible � B is_invisible �.check_maxx � MUL r0,r10,r7 � ADD r1,r9,r11 BL divide �adrl(14,scr_maxx) LDR r14,[r14] & CMP r2,r14 0 BLT is_visible : B is_invisible D.check_miny N MUL r0,r10,r8 X ADD r1,r9,r11 b BL divide l �adrl(14,scr_miny) v LDR r14,[r14] � CMP r2,r14 � BGT is_visible � B is_invisible �.check_maxy � MUL r0,r10,r8 � ADD r1,r9,r11 � BL divide � �adrl(14,scr_maxy) � LDR r14,[r14] � CMP r2,r14 � BLT is_visible �.is_invisible � CMP r0,r0 % LDMFD (sp)!,{r0-r11,pc} .is_visible CMN pc,#0 % LDMFD (sp)!,{r0-r11,pc} * 4'.slide STMFD (sp)!,{r0-r11,link} > MOV r11,r3 H LDMIA r0,{r5-r7} R LDMIA r1,{r8-r10} \.slide_loop f ADD r2,r5,r8 p ADD r3,r6,r9 z 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 � MOV r14,r0 � MLA r1,r0,r14,r1 � SUB r0,r7,r10 � MOV r14,r0 � MLA r1,r0,r14,r1 �# CMP r1,#slide_limit BLT well_slid ! STMFD (sp)!,{r2-r4} MOV r0,sp $ MOV r1,r11 . BL invisible 8! LDMEQFD (sp)!,{r5-r7} B" LDMNEFD (sp)!,{r8-r10} L B slide_loop V.well_slid ` LDR r0,[sp,#4*2] j STMIA r0,{r2-r4} t% LDMFD (sp)!,{r0-r11,pc} ~ � ; r8->angle list � �.register_polygon �' STMFD (sp)!,{r0-r11,link} � MOV r10,r0 �$ LDR r9,[r10,#surf_n] � �adrl(5,vertices) � MOV r3,r9 � MOV r4,#0 �.rp_copy_vertices �$ ADD r0,r10,#surf_req � ADD r0,r0,r4 ADD r2,r5,r4 " BL rotate_by_list MOV r0,r2 LDR r1,[sp,#4*1] ( BL add 2 ADD r4,r4,#12 < SUBS r3,r3,#1 F$ BNE rp_copy_vertices P MOV r1,#0 Z.rp_clip_loop d LDR r0,[sp,#4*9] n MOV r14,#1 x! 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 �# ADD r0,r0,r3,LSL #2 � BL invisible �! BNE next_rp_loop1 � ADD r14,r3,#1 � CMP r14,r9 �Q r14,#0 $ ADD r0,r5,r14,LSL #3 $ ADD r0,r0,r14,LSL #2 " BL invisible ,! BNE next_rp_loop1 6 SUBS r14,r3,#1 @ ADDMI r14,r14,r9 J$ ADD r0,r5,r14,LSL #3 T$ ADD r0,r0,r14,LSL #2 ^ BL invisible h! BNE next_rp_loop1 r 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 � LDMIA r8!,{r0-r2} � STMIA r7!,{r0-r2} � ADD r10,r10,#1 � CMP r10,r11 � BLE rp_del_loop , LDMFD (sp)!,{r1,r7,r8,r10-r11} .rp_is_last_anyway SUB r9,r9,#1 & B rp_loop1 0.next_rp_loop1 : ADD r3,r3,#1 D B rp_loop1 N.done_rp_loop1 X MOV r3,#0 b .rp_loop2 l CMP r3,r9 v! 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 � BL invisible �! BEQ next_rp_loop2 � ADD r14,r3,#1 � CMP r14,r9 � �Q r14,#0 $ ADD r0,r5,r14,LSL #3 $ ADD r0,r0,r14,LSL #2 BL invisible " BEQ no_need_to_ins *( STMFD (sp)!,{r1,r7,r8,r10} 4 SUB r10,r9,#1 >$ ADD r7,r5,r10,LSL #3 H$ ADD r7,r7,r10,LSL #2 R ADD r8,r7,#12 \.rp_ins_loop f LDMIA r7,{r0-r2} p STMIA r8,{r0-r2} z 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} �# ADD r0,r5,r3,LSL #3 �# ADD r0,r0,r3,LSL #2 � SUBS r14,r3,#1 � ADDMI r14,r14,r9 �$ ADD r1,r5,r14,LSL #3 $ ADD r1,r1,r14,LSL #2 MOV r2,r0 LDR r3,[sp,#4] $ BL slide . LDR r3,[sp,#12] 8 ADD r3,r3,#1 B CMP r3,r9 L �Q r3,#0 V# ADD r0,r5,r3,LSL #3 `# ADD r0,r0,r3,LSL #2 j ADD r14,r3,#1 t 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 � ADD r3,r3,#1 � B rp_loop2 �.done_rp_loop2 �.rp_no_need_to_clip ADD r1,r1,#1 CMP r1,#6 BLT rp_clip_loop �adrl(11,poly_point) ( LDMIA r11,{r6-r8} 2 LDR r0,[sp,#4*9] <! TST r0,#bit_merge F' LDREQ r0,[r10,#surf_type] P CMPEQ r0,#0 Z BNE not_new_poly d MOV r0,#disp_req n BL malloc x STRVS r0,[sp] �% LDMVSFD (sp)!,{r0-r11,pc} � MOV r4,r0 �! MOV r0,#&70000000 � RSB r1,r0,#0 � MOV r2,#0 � STMIA r4,{r0-r2} � CMP r7,r8,LSL #2 �( BNE dont_extend_rp_table � MOV r0,r6 �" MOV r1,#poly_chunk � BL realloc � STRVS r0,[sp] �% LDMVSFD (sp)!,{r0-r11,pc} MOV r6,r0 % ADD r7,r7,#poly_chunk STMIA r11,{r6-r8} ".dont_extend_rp_table ,% STR r4,[r6,r8,LSL #2] 6 ADD r8,r8,#1 @ STR r8,[r11,#8] J MOV r0,#disp_dat T �str(0,rp_ptr) ^.not_new_poly h SUB r2,r8,#1 r% 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) �) LDR r0,[r10,#surf_colour] � STR r0,[r4,r3] � ADD r3,r3,#4 � STR r9,[r4,r3] � ADD r3,r3,#4 � # LDR r0,[r4,#disp_n] ADD r0,r0,#1 # STR r0,[r4,#disp_n] & 0 �adrl(14,s) :! LDMIA r14,{r10,r11} D.persp_loop N LDMIA r5!,{r6-r8} X LDMIA r4,{r0,r1} b CMP r8,r0 l MOVLT r0,r8 v CMP r8,r1 � MOVGT r1,r8 � STMIA r4,{r0,r1} � 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 � STR r2,[r4,r3] � ADD r3,r3,#4 � SUBS r9,r9,#1 BNE persp_loop �str(3,rp_ptr) % LDMFD (sp)!,{r0-r11,pc} *.zmin DCD 0 4.zmax DCD 0 > H.read_screen_limits R' STMFD (sp)!,{r0-r11,link} \ ADR r0,vdu_list f �adrl(1,gwx0) p* SWI "XOS_ReadVduVariables" z 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 � SUB r5,r5,r7 � ADD r5,r5,#64 � �adrl(1,scr_minx) STMIA r1,{r2-r5} % LDMFD (sp)!,{r0-r11,pc} $ .vdu_list . DCD 128 8 DCD 129 B DCD 130 L DCD 131 V DCD 136 ` DCD 137 j DCD 4 t DCD 5 ~ DCD -1 � �G ; r8->list of angles, r0->point to rotate, r2->where to put result � �.rotate_by_list �) STMFD (sp)!,{r0-r2,r8,link} �.rotate_by_list_loop � LDR r1,[r8,#-4]! � CMP r1,#0 �' LDMLTFD (sp)!,{r0-r2,r8,pc} � BL rotate � MOV r0,r2 �' B rotate_by_list_loop '.rotate STMFD (sp)!,{r0-r11,link} LDMIA r0,{r3-r5} ( MOVS r6,r3 2 RSBMI r6,r6,#0 < MOVS r7,r4 F RSBMI r7,r7,#0 P �R r6,r6,r7 Z MOVS r8,r5 d RSBMI r8,r8,#0 n �R r6,r6,r8 x � MOV r11,#0 �* MOV r14,#(1<<(30-ang_acc)) �.rotate_reduce �" CMP r14,r6,ASR r11 � ADDLE r11,r11,#1 �! BLE rotate_reduce � � LDR r8,[r1,#0] � �rotate(0,1,2,�) � LDR r8,[r1,#4] � �rotate(1,0,2,�) � LDR r8,[r1,#8] � �rotate(2,0,1,�) STMIA r2,{r3-r5} % LDMFD (sp)!,{r0-r11,pc} " , 6".sin_tab �table(4*real_angles) @] J� pass%>4 � T � i=0 � real_angles-1 ^ a=2*�*(i/real_angles) h) sin_tab!(code%+4*i)=(1<<ang_acc)*�a r � |� �=0 �: �� �rotate(r,a0,a1,minus) �� x,y,x2,y2 � x=a0+3 � y=a1+3 �x2=a0+6 �y2=a1+6 �[OPT pass% � CMP r8,#0 � BEQ rot_lab(r) � �sin(9,8) � �cos(10,8) MOV x,x,ASR r11 MOV y,y,ASR r11 MUL x2,x,r10 &] 0 � minus � : [OPT pass% D RSB r9,r9,#0 N ] X� b[OPT pass% l MLA x2,y,r9,x2 v RSB r9,r9,#0 � MUL y2,x,r9 � MLA y2,y,r10,y2 �$ RSB r14,r11,#ang_acc � MOV x,x2,ASR r14 � MOV y,y2,ASR r14 �.rot_lab(r) �] �=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 !*: !4� �cos(reg1,reg2) !>[OPT pass% !H( ADD r14,reg2,#angles � 4 !R. MOV r14,r14,LSL #(32-ang_bits) !\8 MOV r14,r14,LSR #(32-ang_bits+ang_shift) !f ADR reg1,sin_tab !p* LDR reg1,[reg1,r14,LSL #2] !z] !�=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 32 0d 00 b4 14 72 65 61 6c |g_acc=12....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 14 61 6e 67 5f 6c 69 73 |wk(4)..T.ang_lis| 00000260 74 3d a4 77 6b 28 36 34 29 0d 01 5e 04 0d 01 68 |t=.wk(64)..^...h| 00000270 10 62 69 74 5f 6d 65 72 67 65 3d 36 34 0d 01 72 |.bit_merge=64..r| 00000280 10 62 69 74 5f 73 75 72 66 3d 31 32 38 0d 01 7c |.bit_surf=128..|| 00000290 10 62 69 74 5f 64 69 73 70 3d 32 35 36 0d 01 86 |.bit_disp=256...| 000002a0 13 62 69 74 5f 64 69 73 70 61 6c 6c 3d 35 31 32 |.bit_dispall=512| 000002b0 0d 01 90 13 62 69 74 5f 63 6c 6f 73 65 64 3d 31 |....bit_closed=1| 000002c0 30 32 34 0d 01 9a 04 0d 01 a4 0e 6f 62 6a 5f 6c |024........obj_l| 000002d0 69 73 74 3d 30 0d 01 ae 0e 6f 62 6a 5f 6e 61 6d |ist=0....obj_nam| 000002e0 65 3d 34 0d 01 b8 0d 6f 62 6a 5f 72 65 71 3d 38 |e=4....obj_req=8| 000002f0 0d 01 c2 0f 73 75 72 66 5f 74 79 70 65 3d 30 0d |....surf_type=0.| 00000300 01 cc 11 73 75 72 66 5f 63 6f 6c 6f 75 72 3d 34 |...surf_colour=4| 00000310 0d 01 d6 0c 73 75 72 66 5f 6e 3d 38 0d 01 e0 12 |....surf_n=8....| 00000320 73 75 72 66 5f 63 6f 6f 72 64 73 3d 31 32 0d 01 |surf_coords=12..| 00000330 ea 0f 73 75 72 66 5f 72 65 71 3d 31 32 0d 01 f4 |..surf_req=12...| 00000340 11 73 75 62 6f 62 6a 5f 6e 65 78 74 3d 30 0d 01 |.subobj_next=0..| 00000350 fe 11 73 75 62 6f 62 6a 5f 74 79 70 65 3d 34 0d |..subobj_type=4.| 00000360 02 08 12 73 75 62 6f 62 6a 5f 66 6c 61 67 73 3d |...subobj_flags=| 00000370 38 0d 02 12 14 73 75 62 6f 62 6a 5f 6f 66 66 73 |8....subobj_offs| 00000380 65 74 3d 31 32 0d 02 1c 13 73 75 62 6f 62 6a 5f |et=12....subobj_| 00000390 61 6e 67 6c 65 3d 32 34 0d 02 26 15 73 75 62 6f |angle=24..&.subo| 000003a0 62 6a 5f 73 75 72 66 72 65 71 3d 33 36 0d 02 30 |bj_surfreq=36..0| 000003b0 14 73 75 62 6f 62 6a 5f 62 6f 75 6e 64 73 3d 33 |.subobj_bounds=3| 000003c0 36 0d 02 3a 12 73 75 62 6f 62 6a 5f 72 65 71 3d |6..:.subobj_req=| 000003d0 31 33 32 0d 02 44 14 73 6c 69 64 65 5f 6c 69 6d |132..D.slide_lim| 000003e0 69 74 3d 31 36 5e 32 0d 02 4e 04 0d 02 58 0f 64 |it=16^2..N...X.d| 000003f0 69 73 70 5f 6d 69 6e 7a 3d 30 0d 02 62 0f 64 69 |isp_minz=0..b.di| 00000400 73 70 5f 6d 61 78 7a 3d 34 0d 02 6c 0c 64 69 73 |sp_maxz=4..l.dis| 00000410 70 5f 6e 3d 38 0d 02 76 0f 64 69 73 70 5f 64 61 |p_n=8..v.disp_da| 00000420 74 3d 31 32 0d 02 80 15 64 69 73 70 5f 72 65 71 |t=12....disp_req| 00000430 3d 64 69 73 70 5f 64 61 74 0d 02 8a 04 0d 02 94 |=disp_dat.......| 00000440 10 de 20 72 6f 74 5f 6c 61 62 28 32 29 0d 02 9e |.. rot_lab(2)...| 00000450 06 3d 30 0d 02 a8 05 3a 0d 02 b2 11 dd 20 a4 73 |.=0....:..... .s| 00000460 77 69 30 37 5f 63 6f 64 65 0d 02 bc 09 ea 20 69 |wi07_code..... i| 00000470 2c 61 0d 02 c6 0e 5b 4f 50 54 20 70 61 73 73 25 |,a....[OPT pass%| 00000480 0d 02 d0 0b 2e 72 65 6e 64 65 72 0d 02 da 27 20 |.....render...' | 00000490 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 000004a0 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 6c 69 6e |sp)!,{r0-r11,lin| 000004b0 6b 7d 0d 02 e4 22 20 20 20 20 20 20 20 20 4d 4f |k}..." MO| 000004c0 56 20 20 20 20 20 72 30 2c 23 70 6f 6c 79 5f 63 |V r0,#poly_c| 000004d0 68 75 6e 6b 0d 02 ee 1a 20 20 20 20 20 20 20 20 |hunk.... | 000004e0 42 4c 20 20 20 20 20 20 6d 61 6c 6c 6f 63 0d 02 |BL malloc..| 000004f0 f8 25 20 20 20 20 20 20 20 20 4c 44 4d 56 53 46 |.% LDMVSF| 00000500 44 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c |D (sp)!,{r0-r11,| 00000510 70 63 7d 0d 03 02 19 20 20 20 20 20 20 20 20 4d |pc}.... M| 00000520 4f 56 20 20 20 20 20 72 33 2c 72 30 0d 03 0c 22 |OV r3,r0..."| 00000530 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 | MOV | 00000540 72 34 2c 23 70 6f 6c 79 5f 63 68 75 6e 6b 0d 03 |r4,#poly_chunk..| 00000550 16 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00000560 20 20 72 35 2c 23 30 0d 03 20 20 20 20 20 20 20 | r5,#0.. | 00000570 20 20 20 a4 61 64 72 6c 28 31 34 2c 70 6f 6c 79 | .adrl(14,poly| 00000580 5f 70 6f 69 6e 74 29 0d 03 2a 1f 20 20 20 20 20 |_point)..*. | 00000590 20 20 20 53 54 4d 49 41 20 20 20 72 31 34 2c 7b | STMIA r14,{| 000005a0 72 33 2d 72 35 7d 0d 03 34 26 20 20 20 20 20 20 |r3-r5}..4& | 000005b0 20 20 42 4c 20 20 20 20 20 20 72 65 61 64 5f 73 | BL read_s| 000005c0 63 72 65 65 6e 5f 6c 69 6d 69 74 73 0d 03 3e 04 |creen_limits..>.| 000005d0 0d 03 48 1d 20 20 20 20 20 20 20 20 a4 61 64 72 |..H. .adr| 000005e0 6c 28 38 2c 61 6e 67 5f 6c 69 73 74 29 0d 03 52 |l(8,ang_list)..R| 000005f0 20 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 | LDR | 00000600 20 72 32 2c 5b 73 70 2c 23 34 2a 32 5d 0d 03 5c | r2,[sp,#4*2]..\| 00000610 19 20 20 20 20 20 20 20 20 4d 56 4e 20 20 20 20 |. MVN | 00000620 20 72 30 2c 23 30 0d 03 66 1f 20 20 20 20 20 20 | r0,#0..f. | 00000630 20 20 53 54 4d 49 41 20 20 20 72 38 21 2c 7b 72 | STMIA r8!,{r| 00000640 30 2c 72 32 7d 0d 03 70 20 20 20 20 20 20 20 20 |0,r2}..p | 00000650 20 4c 44 52 20 20 20 20 20 72 37 2c 5b 73 70 2c | LDR r7,[sp,| 00000660 23 34 2a 31 5d 0d 03 7a 19 20 20 20 20 20 20 20 |#4*1]..z. | 00000670 20 4d 4f 56 20 20 20 20 20 72 39 2c 23 30 0d 03 | MOV r9,#0..| 00000680 84 1c 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 |.. LDR | 00000690 20 20 72 31 30 2c 5b 73 70 5d 0d 03 8e 18 20 20 | r10,[sp].... | 000006a0 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 63 6c | BL cl| 000006b0 69 70 0d 03 98 04 0d 03 a2 1d 20 20 20 20 20 20 |ip........ | 000006c0 20 20 a4 61 64 72 6c 28 38 2c 61 6e 67 5f 6c 69 | .adrl(8,ang_li| 000006d0 73 74 29 0d 03 ac 20 20 20 20 20 20 20 20 20 4c |st)... L| 000006e0 44 52 20 20 20 20 20 72 31 2c 5b 73 70 2c 23 34 |DR r1,[sp,#4| 000006f0 2a 32 5d 0d 03 b6 19 20 20 20 20 20 20 20 20 4d |*2].... M| 00000700 56 4e 20 20 20 20 20 72 30 2c 23 30 0d 03 c0 1f |VN r0,#0....| 00000710 20 20 20 20 20 20 20 20 53 54 4d 49 41 20 20 20 | STMIA | 00000720 72 38 21 2c 7b 72 30 2c 72 32 7d 0d 03 ca 19 20 |r8!,{r0,r2}.... | 00000730 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00000740 39 2c 23 30 0d 03 d4 20 20 20 20 20 20 20 20 20 |9,#0... | 00000750 4c 44 52 20 20 20 20 20 72 37 2c 5b 73 70 2c 23 |LDR r7,[sp,#| 00000760 34 2a 31 5d 0d 03 de 1c 20 20 20 20 20 20 20 20 |4*1].... | 00000770 4c 44 52 20 20 20 20 20 72 31 30 2c 5b 73 70 5d |LDR r10,[sp]| 00000780 0d 03 e8 21 20 20 20 20 20 20 20 20 42 4c 20 20 |...! BL | 00000790 20 20 20 20 64 6f 5f 72 65 6e 64 65 72 5f 6f 62 | do_render_ob| 000007a0 6a 0d 03 f2 04 0d 03 fc 1e 20 20 20 20 20 20 20 |j........ | 000007b0 20 42 4c 20 20 20 20 20 20 70 6c 6f 74 5f 66 61 | BL plot_fa| 000007c0 63 65 73 0d 04 06 20 20 20 20 20 20 20 20 20 a4 |ces... .| 000007d0 61 64 72 6c 28 31 30 2c 70 6f 6c 79 5f 70 6f 69 |adrl(10,poly_poi| 000007e0 6e 74 29 0d 04 10 1f 20 20 20 20 20 20 20 20 4c |nt).... L| 000007f0 44 4d 49 41 20 20 20 72 31 30 2c 7b 72 34 2d 72 |DMIA r10,{r4-r| 00000800 36 7d 0d 04 1a 13 2e 66 72 65 65 5f 70 6f 6c 79 |6}.....free_poly| 00000810 5f 6c 6f 6f 70 0d 04 24 1c 20 20 20 20 20 20 20 |_loop..$. | 00000820 20 53 55 42 53 20 20 20 20 72 36 2c 72 36 2c 23 | SUBS r6,r6,#| 00000830 31 0d 04 2e 23 20 20 20 20 20 20 20 20 42 4d 49 |1...# BMI| 00000840 20 20 20 20 20 66 72 65 65 64 5f 70 6f 6c 79 5f | freed_poly_| 00000850 6c 69 73 74 0d 04 38 1e 20 20 20 20 20 20 20 20 |list..8. | 00000860 4c 44 52 20 20 20 20 20 72 30 2c 5b 72 34 5d 2c |LDR r0,[r4],| 00000870 23 34 0d 04 42 18 20 20 20 20 20 20 20 20 42 4c |#4..B. BL| 00000880 20 20 20 20 20 20 66 72 65 65 0d 04 4c 22 20 20 | free..L" | 00000890 20 20 20 20 20 20 42 20 20 20 20 20 20 20 66 72 | B fr| 000008a0 65 65 5f 70 6f 6c 79 5f 6c 6f 6f 70 0d 04 56 14 |ee_poly_loop..V.| 000008b0 2e 66 72 65 65 64 5f 70 6f 6c 79 5f 6c 69 73 74 |.freed_poly_list| 000008c0 0d 04 60 1c 20 20 20 20 20 20 20 20 4c 44 52 20 |..`. LDR | 000008d0 20 20 20 20 72 30 2c 5b 72 31 30 5d 0d 04 6a 18 | r0,[r10]..j.| 000008e0 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 | BL | 000008f0 66 72 65 65 0d 04 74 10 2e 72 65 6e 64 65 72 5f |free..t..render_| 00000900 64 6f 6e 65 0d 04 7e 1b 20 20 20 20 20 20 20 20 |done..~. | 00000910 53 54 52 56 53 20 20 20 72 30 2c 5b 73 70 5d 0d |STRVS r0,[sp].| 00000920 04 88 25 20 20 20 20 20 20 20 20 4c 44 4d 46 44 |..% LDMFD| 00000930 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 | (sp)!,{r0-r11| 00000940 2c 70 63 7d 0d 04 92 05 20 0d 04 9c 12 2e 64 6f |,pc}.... .....do| 00000950 5f 72 65 6e 64 65 72 5f 6f 62 6a 0d 04 a6 27 20 |_render_obj...' | 00000960 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 00000970 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 6c 69 6e |sp)!,{r0-r11,lin| 00000980 6b 7d 0d 04 b0 1e 20 20 20 20 20 20 20 20 42 4c |k}.... BL| 00000990 20 20 20 20 20 20 72 65 6e 64 65 72 5f 6f 62 6a | render_obj| 000009a0 0d 04 ba 25 20 20 20 20 20 20 20 20 4c 44 4d 46 |...% LDMF| 000009b0 44 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 |D (sp)!,{r0-r1| 000009c0 31 2c 70 63 7d 0d 04 c4 04 0d 04 ce 4c 20 3b 20 |1,pc}.......L ; | 000009d0 72 38 2d 3e 20 61 6e 67 6c 65 20 6c 69 73 74 2c |r8-> angle list,| 000009e0 20 66 75 6c 6c 20 64 65 73 63 65 6e 64 69 6e 67 | full descending| 000009f0 20 73 74 61 63 6b 20 6f 66 20 70 6f 69 6e 74 65 | stack of pointe| 00000a00 72 73 20 74 6f 20 31 32 2d 62 79 74 65 20 61 6e |rs to 12-byte an| 00000a10 67 6c 65 73 2c 0d 04 d8 17 20 3b 20 74 65 72 6d |gles,.... ; term| 00000a20 69 6e 61 74 65 64 20 62 79 20 2d 31 0d 04 e2 12 |inated by -1....| 00000a30 20 3b 20 72 37 2d 3e 20 6f 66 66 73 65 74 0d 04 | ; r7-> offset..| 00000a40 ec 27 20 3b 20 72 39 3d 66 6c 61 67 73 20 28 69 |.' ; r9=flags (i| 00000a50 6e 63 6c 75 64 69 6e 67 20 62 69 74 5f 64 69 73 |ncluding bit_dis| 00000a60 70 61 6c 6c 29 0d 04 f6 1b 20 3b 20 72 31 30 2d |pall).... ; r10-| 00000a70 3e 20 74 72 65 65 20 74 6f 20 72 65 6e 64 65 72 |> tree to render| 00000a80 0d 05 00 04 0d 05 0a 0f 2e 72 65 6e 64 65 72 5f |.........render_| 00000a90 6f 62 6a 0d 05 14 26 20 20 20 20 20 20 20 20 53 |obj...& S| 00000aa0 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 37 |TMFD (sp)!,{r7| 00000ab0 2c 72 38 2c 6c 69 6e 6b 7d 0d 05 1e 27 20 20 20 |,r8,link}...' | 00000ac0 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 31 30 | LDR r10| 00000ad0 2c 5b 72 31 30 2c 23 6f 62 6a 5f 6c 69 73 74 5d |,[r10,#obj_list]| 00000ae0 0d 05 28 14 2e 72 65 6e 64 65 72 5f 6f 62 6a 5f |..(..render_obj_| 00000af0 6c 6f 6f 70 0d 05 32 1a 20 20 20 20 20 20 20 20 |loop..2. | 00000b00 43 4d 50 20 20 20 20 20 72 31 30 2c 23 30 0d 05 |CMP r10,#0..| 00000b10 3c 24 20 20 20 20 20 20 20 20 4c 44 4d 45 51 46 |<$ LDMEQF| 00000b20 44 20 28 73 70 29 21 2c 7b 72 37 2c 72 38 2c 70 |D (sp)!,{r7,r8,p| 00000b30 63 7d 0d 05 46 2a 20 20 20 20 20 20 20 20 4c 44 |c}..F* LD| 00000b40 52 20 20 20 20 20 72 30 2c 5b 72 31 30 2c 23 73 |R r0,[r10,#s| 00000b50 75 62 6f 62 6a 5f 66 6c 61 67 73 5d 0d 05 50 20 |ubobj_flags]..P | 00000b60 20 20 20 20 20 20 20 20 54 53 54 20 20 20 20 20 | TST | 00000b70 72 30 2c 23 62 69 74 5f 64 69 73 70 0d 05 5a 23 |r0,#bit_disp..Z#| 00000b80 20 20 20 20 20 20 20 20 54 53 54 45 51 20 20 20 | TSTEQ | 00000b90 72 39 2c 23 62 69 74 5f 64 69 73 70 61 6c 6c 0d |r9,#bit_dispall.| 00000ba0 05 64 1f 20 20 20 20 20 20 20 20 42 45 51 20 20 |.d. BEQ | 00000bb0 20 20 20 72 65 6e 64 65 72 5f 6e 65 78 74 0d 05 | render_next..| 00000bc0 6e 20 20 20 20 20 20 20 20 20 54 53 54 20 20 20 |n TST | 00000bd0 20 20 72 30 2c 23 62 69 74 5f 73 75 72 66 0d 05 | r0,#bit_surf..| 00000be0 78 21 20 20 20 20 20 20 20 20 42 45 51 20 20 20 |x! BEQ | 00000bf0 20 20 72 65 6e 64 65 72 5f 73 75 62 6f 62 6a 0d | render_subobj.| 00000c00 05 82 10 2e 72 65 6e 64 65 72 5f 73 75 72 66 0d |....render_surf.| 00000c10 05 8c 29 20 20 20 20 20 20 20 20 4c 44 52 20 20 |..) LDR | 00000c20 20 20 20 72 30 2c 5b 72 31 30 2c 23 73 75 62 6f | r0,[r10,#subo| 00000c30 62 6a 5f 74 79 70 65 5d 0d 05 96 19 20 20 20 20 |bj_type].... | 00000c40 20 20 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 72 | MOV r1,r| 00000c50 37 0d 05 a0 24 20 20 20 20 20 20 20 20 42 4c 20 |7...$ BL | 00000c60 20 20 20 20 20 72 65 67 69 73 74 65 72 5f 70 6f | register_po| 00000c70 6c 79 67 6f 6e 0d 05 aa 1f 20 20 20 20 20 20 20 |lygon.... | 00000c80 20 41 44 44 20 20 20 20 20 72 31 34 2c 73 70 2c | ADD r14,sp,| 00000c90 23 34 2a 32 0d 05 b4 1f 20 20 20 20 20 20 20 20 |#4*2.... | 00000ca0 4c 44 4d 49 41 20 20 20 72 31 34 2c 7b 72 33 2c |LDMIA r14,{r3,| 00000cb0 72 34 7d 0d 05 be 1f 20 20 20 20 20 20 20 20 42 |r4}.... B| 00000cc0 20 20 20 20 20 20 20 72 65 6e 64 65 72 5f 6e 65 | render_ne| 00000cd0 78 74 0d 05 c8 12 2e 72 65 6e 64 65 72 5f 73 75 |xt.....render_su| 00000ce0 62 6f 62 6a 0d 05 d2 1d 20 20 20 20 20 20 20 20 |bobj.... | 00000cf0 53 55 42 20 20 20 20 20 73 70 2c 73 70 2c 23 31 |SUB sp,sp,#1| 00000d00 32 0d 05 dc 04 0d 05 e6 29 20 20 20 20 20 20 20 |2.......) | 00000d10 20 41 44 44 20 20 20 20 20 72 30 2c 72 31 30 2c | ADD r0,r10,| 00000d20 23 73 75 62 6f 62 6a 5f 6f 66 66 73 65 74 0d 05 |#subobj_offset..| 00000d30 f0 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00000d40 20 20 72 32 2c 73 70 0d 05 fa 22 20 20 20 20 20 | r2,sp..." | 00000d50 20 20 20 42 4c 20 20 20 20 20 20 72 6f 74 61 74 | BL rotat| 00000d60 65 5f 62 79 5f 6c 69 73 74 0d 06 04 19 20 20 20 |e_by_list.... | 00000d70 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c | MOV r0,| 00000d80 73 70 0d 06 0e 19 20 20 20 20 20 20 20 20 4d 4f |sp.... MO| 00000d90 56 20 20 20 20 20 72 31 2c 72 37 0d 06 18 17 20 |V r1,r7.... | 00000da0 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 61 | BL a| 00000db0 64 64 0d 06 22 05 20 0d 06 2c 29 20 20 20 20 20 |dd..". ..,) | 00000dc0 20 20 20 41 44 44 20 20 20 20 20 72 31 34 2c 72 | ADD r14,r| 00000dd0 31 30 2c 23 73 75 62 6f 62 6a 5f 61 6e 67 6c 65 |10,#subobj_angle| 00000de0 0d 06 36 1f 20 20 20 20 20 20 20 20 4c 44 4d 49 |..6. LDMI| 00000df0 41 20 20 20 72 31 34 2c 7b 72 30 2d 72 32 7d 0d |A r14,{r0-r2}.| 00000e00 06 40 1b 20 20 20 20 20 20 20 20 84 52 53 20 20 |.@. .RS | 00000e10 20 20 72 30 2c 72 30 2c 72 31 0d 06 4a 19 20 20 | r0,r0,r1..J. | 00000e20 20 20 20 20 20 20 43 4d 50 45 51 20 20 20 72 32 | CMPEQ r2| 00000e30 2c 23 30 0d 06 54 33 20 20 20 20 20 20 20 20 53 |,#0..T3 S| 00000e40 54 52 4e 45 20 20 20 72 31 34 2c 5b 72 38 5d 2c |TRNE r14,[r8],| 00000e50 23 34 20 3b 20 61 64 64 20 61 6e 67 6c 65 20 74 |#4 ; add angle t| 00000e60 6f 20 6c 69 73 74 0d 06 5e 04 0d 06 68 22 20 20 |o list..^...h" | 00000e70 20 20 20 20 20 20 54 53 54 20 20 20 20 20 72 39 | TST r9| 00000e80 2c 23 62 69 74 5f 63 6c 6f 73 65 64 0d 06 72 1c |,#bit_closed..r.| 00000e90 20 20 20 20 20 20 20 20 42 45 51 20 20 20 20 20 | BEQ | 00000ea0 6e 6f 74 5f 66 6c 61 74 0d 06 7c 04 0d 06 86 2d |not_flat..|....-| 00000eb0 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 00000ec0 72 30 2c 5b 72 31 30 2c 23 73 75 62 6f 62 6a 5f |r0,[r10,#subobj_| 00000ed0 62 6f 75 6e 64 73 2b 38 5d 0d 06 90 2e 20 20 20 |bounds+8].... | 00000ee0 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 31 2c | LDR r1,| 00000ef0 5b 72 31 30 2c 23 73 75 62 6f 62 6a 5f 62 6f 75 |[r10,#subobj_bou| 00000f00 6e 64 73 2b 32 30 5d 0d 06 9a 19 20 20 20 20 20 |nds+20].... | 00000f10 20 20 20 43 4d 50 20 20 20 20 20 72 30 2c 72 31 | CMP r0,r1| 00000f20 0d 06 a4 1c 20 20 20 20 20 20 20 20 42 4e 45 20 |.... BNE | 00000f30 20 20 20 20 6e 6f 74 5f 66 6c 61 74 0d 06 ae 05 | not_flat....| 00000f40 20 0d 06 b8 19 20 20 20 20 20 20 20 20 4d 4f 56 | .... MOV| 00000f50 20 20 20 20 20 72 30 2c 23 30 0d 06 c2 19 20 20 | r0,#0.... | 00000f60 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 31 | MOV r1| 00000f70 2c 23 30 0d 06 cc 1c 20 20 20 20 20 20 20 20 4d |,#0.... M| 00000f80 4f 56 20 20 20 20 20 72 32 2c 23 26 31 30 30 0d |OV r2,#&100.| 00000f90 06 d6 21 20 20 20 20 20 20 20 20 53 54 4d 44 42 |..! STMDB| 00000fa0 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 32 7d | (sp)!,{r0-r2}| 00000fb0 0d 06 e0 19 20 20 20 20 20 20 20 20 4d 4f 56 20 |.... MOV | 00000fc0 20 20 20 20 72 30 2c 73 70 0d 06 ea 19 20 20 20 | r0,sp.... | 00000fd0 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 32 2c | MOV r2,| 00000fe0 72 30 0d 06 f4 22 20 20 20 20 20 20 20 20 42 4c |r0..." BL| 00000ff0 20 20 20 20 20 20 72 6f 74 61 74 65 5f 62 79 5f | rotate_by_| 00001000 6c 69 73 74 0d 06 fe 05 20 0d 07 08 49 20 20 3b |list.... ...I ;| 00001010 20 6e 6f 77 20 66 69 6e 64 20 73 63 61 6c 61 72 | now find scalar| 00001020 20 70 72 6f 64 75 63 74 20 62 65 74 77 65 65 6e | product between| 00001030 20 76 65 63 74 6f 72 20 74 6f 20 6f 72 69 67 69 | vector to origi| 00001040 6e 20 6f 66 20 62 6f 75 6e 64 69 6e 67 20 63 75 |n of bounding cu| 00001050 62 65 0d 07 12 1a 20 20 3b 20 61 6e 64 20 74 68 |be.... ; and th| 00001060 69 73 20 6e 6f 72 6d 61 6c 2e 2e 2e 0d 07 1c 05 |is normal.......| 00001070 20 0d 07 26 1e 20 20 20 20 20 20 20 20 4c 44 4d | ..&. LDM| 00001080 49 41 20 20 20 72 37 2c 7b 72 30 2d 72 32 7d 0d |IA r7,{r0-r2}.| 00001090 07 30 2a 20 20 20 20 20 20 20 20 41 44 44 20 20 |.0* ADD | 000010a0 20 20 20 72 31 34 2c 72 31 30 2c 23 73 75 62 6f | r14,r10,#subo| 000010b0 62 6a 5f 62 6f 75 6e 64 73 0d 07 3a 1f 20 20 20 |bj_bounds..:. | 000010c0 20 20 20 20 20 4c 44 4d 49 41 20 20 20 72 31 34 | LDMIA r14| 000010d0 2c 7b 72 33 2d 72 35 7d 0d 07 44 1c 20 20 20 20 |,{r3-r5}..D. | 000010e0 20 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 | ADD r0,r| 000010f0 30 2c 72 33 0d 07 4e 1c 20 20 20 20 20 20 20 20 |0,r3..N. | 00001100 41 44 44 20 20 20 20 20 72 31 2c 72 31 2c 72 34 |ADD r1,r1,r4| 00001110 0d 07 58 1c 20 20 20 20 20 20 20 20 41 44 44 20 |..X. ADD | 00001120 20 20 20 20 72 32 2c 72 32 2c 72 35 0d 07 62 21 | r2,r2,r5..b!| 00001130 20 20 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 | LDMIA | 00001140 28 73 70 29 21 2c 7b 72 33 2d 72 35 7d 0d 07 6c |(sp)!,{r3-r5}..l| 00001150 1c 20 20 20 20 20 20 20 20 4d 55 4c 20 20 20 20 |. MUL | 00001160 20 72 33 2c 72 30 2c 72 33 0d 07 76 1f 20 20 20 | r3,r0,r3..v. | 00001170 20 20 20 20 20 4d 4c 41 20 20 20 20 20 72 33 2c | MLA r3,| 00001180 72 31 2c 72 34 2c 72 33 0d 07 80 1f 20 20 20 20 |r1,r4,r3.... | 00001190 20 20 20 20 4d 4c 41 53 20 20 20 20 72 33 2c 72 | MLAS r3,r| 000011a0 32 2c 72 35 2c 72 33 0d 07 8a 24 20 20 20 20 20 |2,r5,r3...$ | 000011b0 20 20 20 42 4d 49 20 20 20 20 20 72 65 6e 64 65 | BMI rende| 000011c0 72 65 64 5f 73 75 62 5f 6f 62 6a 0d 07 94 05 20 |red_sub_obj.... | 000011d0 0d 07 9e 0d 2e 6e 6f 74 5f 66 6c 61 74 0d 07 a8 |.....not_flat...| 000011e0 05 20 0d 07 b2 19 20 20 20 20 20 20 20 20 4d 4f |. .... MO| 000011f0 56 20 20 20 20 20 72 37 2c 73 70 0d 07 bc 22 20 |V r7,sp..." | 00001200 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 00001210 73 70 29 21 2c 7b 72 39 2d 72 31 31 7d 0d 07 c6 |sp)!,{r9-r11}...| 00001220 2b 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 |+ LDR | 00001230 20 72 31 34 2c 5b 72 31 30 2c 23 73 75 62 6f 62 | r14,[r10,#subob| 00001240 6a 5f 66 6c 61 67 73 5d 0d 07 d0 1c 20 20 20 20 |j_flags].... | 00001250 20 20 20 20 84 52 20 20 20 20 20 72 39 2c 72 39 | .R r9,r9| 00001260 2c 72 31 34 0d 07 da 2a 20 20 20 20 20 20 20 20 |,r14...* | 00001270 4c 44 52 20 20 20 20 20 72 31 30 2c 5b 72 31 30 |LDR r10,[r10| 00001280 2c 23 73 75 62 6f 62 6a 5f 74 79 70 65 5d 0d 07 |,#subobj_type]..| 00001290 e4 1e 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 |.. BL | 000012a0 20 20 72 65 6e 64 65 72 5f 6f 62 6a 0d 07 ee 22 | render_obj..."| 000012b0 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 000012c0 28 73 70 29 21 2c 7b 72 39 2d 72 31 31 7d 0d 07 |(sp)!,{r9-r11}..| 000012d0 f8 05 20 0d 08 02 15 2e 72 65 6e 64 65 72 65 64 |.. .....rendered| 000012e0 5f 73 75 62 5f 6f 62 6a 0d 08 0c 1d 20 20 20 20 |_sub_obj.... | 000012f0 20 20 20 20 41 44 44 20 20 20 20 20 73 70 2c 73 | ADD sp,s| 00001300 70 2c 23 31 32 0d 08 16 1e 20 20 20 20 20 20 20 |p,#12.... | 00001310 20 4c 44 4d 49 41 20 20 20 73 70 2c 7b 72 37 2c | LDMIA sp,{r7,| 00001320 72 38 7d 0d 08 20 10 2e 72 65 6e 64 65 72 5f 6e |r8}.. ..render_n| 00001330 65 78 74 0d 08 2a 2a 20 20 20 20 20 20 20 20 4c |ext..** L| 00001340 44 52 20 20 20 20 20 72 31 30 2c 5b 72 31 30 2c |DR r10,[r10,| 00001350 23 73 75 62 6f 62 6a 5f 6e 65 78 74 5d 0d 08 34 |#subobj_next]..4| 00001360 23 20 20 20 20 20 20 20 20 42 20 20 20 20 20 20 |# B | 00001370 20 72 65 6e 64 65 72 5f 6f 62 6a 5f 6c 6f 6f 70 | render_obj_loop| 00001380 0d 08 3e 04 0d 08 48 2e 20 3b 20 72 37 2d 3e 6f |..>...H. ; r7->o| 00001390 66 66 73 65 74 2c 20 72 38 2d 3e 61 6e 67 6c 65 |ffset, r8->angle| 000013a0 20 6c 69 73 74 2c 20 72 31 30 2d 3e 6f 62 6a 65 | list, r10->obje| 000013b0 63 74 0d 08 52 0f 20 3b 20 72 39 3d 66 6c 61 67 |ct..R. ; r9=flag| 000013c0 73 0d 08 5c 04 0d 08 66 27 2e 63 6c 69 70 20 20 |s..\...f'.clip | 000013d0 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b | STMFD (sp)!,{| 000013e0 72 30 2d 72 31 31 2c 6c 69 6e 6b 7d 0d 08 70 23 |r0-r11,link}..p#| 000013f0 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 | SUB | 00001400 73 70 2c 73 70 2c 23 31 32 2b 31 32 2b 39 36 0d |sp,sp,#12+12+96.| 00001410 08 7a 27 20 20 20 20 20 20 20 20 4c 44 52 20 20 |.z' LDR | 00001420 20 20 20 72 31 30 2c 5b 72 31 30 2c 23 6f 62 6a | r10,[r10,#obj| 00001430 5f 6c 69 73 74 5d 0d 08 84 0e 2e 63 6c 69 70 5f |_list].....clip_| 00001440 6c 6f 6f 70 0d 08 8e 1a 20 20 20 20 20 20 20 20 |loop.... | 00001450 43 4d 50 20 20 20 20 20 72 31 30 2c 23 30 0d 08 |CMP r10,#0..| 00001460 98 1d 20 20 20 20 20 20 20 20 42 45 51 20 20 20 |.. BEQ | 00001470 20 20 63 6c 69 70 5f 65 78 69 74 0d 08 a2 2b 20 | clip_exit...+ | 00001480 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 | LDR r| 00001490 31 31 2c 5b 72 31 30 2c 23 73 75 62 6f 62 6a 5f |11,[r10,#subobj_| 000014a0 66 6c 61 67 73 5d 0d 08 ac 31 20 20 20 20 20 20 |flags]...1 | 000014b0 20 20 42 49 43 20 20 20 20 20 72 31 31 2c 72 31 | BIC r11,r1| 000014c0 31 2c 23 62 69 74 5f 64 69 73 70 2b 62 69 74 5f |1,#bit_disp+bit_| 000014d0 64 69 73 70 61 6c 6c 0d 08 b6 21 20 20 20 20 20 |dispall...! | 000014e0 20 20 20 54 53 54 20 20 20 20 20 72 31 31 2c 23 | TST r11,#| 000014f0 62 69 74 5f 73 75 72 66 0d 08 c0 21 20 20 20 20 |bit_surf...! | 00001500 20 20 20 20 42 4e 45 20 20 20 20 20 72 65 67 69 | BNE regi| 00001510 73 74 65 72 5f 63 6c 69 70 0d 08 ca 10 2e 63 6c |ster_clip.....cl| 00001520 69 70 5f 73 75 62 6f 62 6a 0d 08 d4 29 20 20 20 |ip_subobj...) | 00001530 20 20 20 20 20 41 44 44 20 20 20 20 20 72 31 34 | ADD r14| 00001540 2c 72 31 30 2c 23 73 75 62 6f 62 6a 5f 61 6e 67 |,r10,#subobj_ang| 00001550 6c 65 0d 08 de 1f 20 20 20 20 20 20 20 20 4c 44 |le.... LD| 00001560 4d 49 41 20 20 20 72 31 34 2c 7b 72 30 2d 72 32 |MIA r14,{r0-r2| 00001570 7d 0d 08 e8 1b 20 20 20 20 20 20 20 20 84 52 53 |}.... .RS| 00001580 20 20 20 20 72 30 2c 72 30 2c 72 31 0d 08 f2 19 | r0,r0,r1....| 00001590 20 20 20 20 20 20 20 20 43 4d 50 45 51 20 20 20 | CMPEQ | 000015a0 72 32 2c 23 30 0d 08 fc 33 20 20 20 20 20 20 20 |r2,#0...3 | 000015b0 20 53 54 52 4e 45 20 20 20 72 31 34 2c 5b 72 38 | STRNE r14,[r8| 000015c0 5d 2c 23 34 20 3b 20 61 64 64 20 61 6e 67 6c 65 |],#4 ; add angle| 000015d0 20 74 6f 20 6c 69 73 74 0d 09 06 04 0d 09 10 29 | to list.......)| 000015e0 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 000015f0 72 30 2c 72 31 30 2c 23 73 75 62 6f 62 6a 5f 6f |r0,r10,#subobj_o| 00001600 66 66 73 65 74 0d 09 1a 1d 20 20 20 20 20 20 20 |ffset.... | 00001610 20 41 44 44 20 20 20 20 20 72 32 2c 73 70 2c 23 | ADD r2,sp,#| 00001620 31 32 0d 09 24 22 20 20 20 20 20 20 20 20 42 4c |12..$" BL| 00001630 20 20 20 20 20 20 72 6f 74 61 74 65 5f 62 79 5f | rotate_by_| 00001640 6c 69 73 74 0d 09 2e 19 20 20 20 20 20 20 20 20 |list.... | 00001650 4d 4f 56 20 20 20 20 20 72 30 2c 72 32 0d 09 38 |MOV r0,r2..8| 00001660 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |. MOV | 00001670 20 72 31 2c 72 37 0d 09 42 17 20 20 20 20 20 20 | r1,r7..B. | 00001680 20 20 42 4c 20 20 20 20 20 20 61 64 64 0d 09 4c | BL add..L| 00001690 04 0d 09 56 35 20 3b 20 73 70 2b 31 32 20 6e 6f |...V5 ; sp+12 no| 000016a0 77 20 63 6f 6e 74 61 69 6e 73 20 63 6f 72 72 65 |w contains corre| 000016b0 63 74 20 6f 72 69 67 69 6e 20 6f 66 20 73 75 62 |ct origin of sub| 000016c0 6f 62 6a 65 63 74 0d 09 60 04 0d 09 6a 1d 20 20 |object..`...j. | 000016d0 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 33 | MOV r3| 000016e0 2c 23 31 32 2b 31 32 0d 09 74 29 20 20 20 20 20 |,#12+12..t) | 000016f0 20 20 20 41 44 44 20 20 20 20 20 72 34 2c 72 31 | ADD r4,r1| 00001700 30 2c 23 73 75 62 6f 62 6a 5f 62 6f 75 6e 64 73 |0,#subobj_bounds| 00001710 0d 09 7e 12 2e 72 6f 74 61 74 65 5f 62 6f 75 6e |..~..rotate_boun| 00001720 64 73 0d 09 88 19 20 20 20 20 20 20 20 20 4d 4f |ds.... MO| 00001730 56 20 20 20 20 20 72 30 2c 72 34 0d 09 92 1c 20 |V r0,r4.... | 00001740 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 00001750 32 2c 73 70 2c 72 33 0d 09 9c 22 20 20 20 20 20 |2,sp,r3..." | 00001760 20 20 20 42 4c 20 20 20 20 20 20 72 6f 74 61 74 | BL rotat| 00001770 65 5f 62 79 5f 6c 69 73 74 0d 09 a6 19 20 20 20 |e_by_list.... | 00001780 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c | MOV r0,| 00001790 72 32 0d 09 b0 1d 20 20 20 20 20 20 20 20 41 44 |r2.... AD| 000017a0 44 20 20 20 20 20 72 31 2c 73 70 2c 23 31 32 0d |D r1,sp,#12.| 000017b0 09 ba 17 20 20 20 20 20 20 20 20 42 4c 20 20 20 |... BL | 000017c0 20 20 20 61 64 64 0d 09 c4 1d 20 20 20 20 20 20 | add.... | 000017d0 20 20 41 44 44 20 20 20 20 20 72 34 2c 72 34 2c | ADD r4,r4,| 000017e0 23 31 32 0d 09 ce 1d 20 20 20 20 20 20 20 20 41 |#12.... A| 000017f0 44 44 20 20 20 20 20 72 33 2c 72 33 2c 23 31 32 |DD r3,r3,#12| 00001800 0d 09 d8 20 20 20 20 20 20 20 20 20 43 4d 50 20 |... CMP | 00001810 20 20 20 20 72 33 2c 23 31 32 2b 31 32 2b 39 36 | r3,#12+12+96| 00001820 0d 09 e2 21 20 20 20 20 20 20 20 20 42 4c 54 20 |...! BLT | 00001830 20 20 20 20 72 6f 74 61 74 65 5f 62 6f 75 6e 64 | rotate_bound| 00001840 73 0d 09 ec 04 0d 09 f6 19 20 20 20 20 20 20 20 |s........ | 00001850 20 4d 4f 56 20 20 20 20 20 72 35 2c 23 30 0d 0a | MOV r5,#0..| 00001860 00 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00001870 20 20 72 37 2c 23 30 0d 0a 0a 16 2e 63 68 65 63 | r7,#0.....chec| 00001880 6b 5f 62 6f 75 6e 64 5f 6c 6f 6f 70 31 0d 0a 14 |k_bound_loop1...| 00001890 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |. MOV | 000018a0 20 72 31 34 2c 23 31 0d 0a 1e 21 20 20 20 20 20 | r14,#1...! | 000018b0 20 20 20 54 53 54 20 20 20 20 20 72 39 2c 72 31 | TST r9,r1| 000018c0 34 2c 4c 53 4c 20 72 37 0d 0a 28 22 20 20 20 20 |4,LSL r7..(" | 000018d0 20 20 20 20 42 4e 45 20 20 20 20 20 77 68 6f 6c | BNE whol| 000018e0 6c 79 5f 76 69 73 69 62 6c 65 0d 0a 32 04 0d 0a |ly_visible..2...| 000018f0 3c 1d 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |<. MOV | 00001900 20 20 72 33 2c 23 31 32 2b 31 32 0d 0a 46 19 20 | r3,#12+12..F. | 00001910 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00001920 36 2c 23 30 0d 0a 50 16 2e 63 68 65 63 6b 5f 62 |6,#0..P..check_b| 00001930 6f 75 6e 64 5f 6c 6f 6f 70 32 0d 0a 5a 20 20 20 |ound_loop2..Z | 00001940 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 35 | MOV r5| 00001950 2c 72 35 2c 4c 53 4c 20 23 31 0d 0a 64 22 20 20 |,r5,LSL #1..d" | 00001960 20 20 20 20 20 20 54 53 54 20 20 20 20 20 72 35 | TST r5| 00001970 2c 23 25 31 30 30 30 30 30 30 30 30 0d 0a 6e 1c |,#%100000000..n.| 00001980 20 20 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 | BNE | 00001990 77 61 73 5f 62 61 64 7a 0d 0a 78 1c 20 20 20 20 |was_badz..x. | 000019a0 20 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 73 | ADD r0,s| 000019b0 70 2c 72 33 0d 0a 82 19 20 20 20 20 20 20 20 20 |p,r3.... | 000019c0 4d 4f 56 20 20 20 20 20 72 31 2c 72 37 0d 0a 8c |MOV r1,r7...| 000019d0 1d 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 |. BL | 000019e0 20 69 6e 76 69 73 69 62 6c 65 0d 0a 96 1d 20 20 | invisible.... | 000019f0 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 6e 6f | BNE no| 00001a00 74 5f 69 6e 76 69 73 0d 0a a0 1c 20 20 20 20 20 |t_invis.... | 00001a10 20 20 20 41 44 44 20 20 20 20 20 72 36 2c 72 36 | ADD r6,r6| 00001a20 2c 23 31 0d 0a aa 19 20 20 20 20 20 20 20 20 43 |,#1.... C| 00001a30 4d 50 20 20 20 20 20 72 37 2c 23 32 0d 0a b4 1b |MP r7,#2....| 00001a40 20 20 20 20 20 20 20 20 84 52 4c 54 20 20 20 72 | .RLT r| 00001a50 35 2c 72 35 2c 23 31 0d 0a be 0e 2e 6e 6f 74 5f |5,r5,#1.....not_| 00001a60 69 6e 76 69 73 0d 0a c8 0d 2e 77 61 73 5f 62 61 |invis.....was_ba| 00001a70 64 7a 0d 0a d2 1d 20 20 20 20 20 20 20 20 41 44 |dz.... AD| 00001a80 44 20 20 20 20 20 72 33 2c 72 33 2c 23 31 32 0d |D r3,r3,#12.| 00001a90 0a dc 20 20 20 20 20 20 20 20 20 43 4d 50 20 20 |.. CMP | 00001aa0 20 20 20 72 33 2c 23 31 32 2b 31 32 2b 39 36 0d | r3,#12+12+96.| 00001ab0 0a e6 25 20 20 20 20 20 20 20 20 42 4c 54 20 20 |..% BLT | 00001ac0 20 20 20 63 68 65 63 6b 5f 62 6f 75 6e 64 5f 6c | check_bound_l| 00001ad0 6f 6f 70 32 0d 0a f0 22 20 20 20 20 20 20 20 20 |oop2..." | 00001ae0 84 52 20 20 20 20 20 72 35 2c 72 35 2c 72 35 2c |.R r5,r5,r5,| 00001af0 4c 53 52 20 23 38 0d 0a fa 20 20 20 20 20 20 20 |LSR #8... | 00001b00 20 20 42 49 43 20 20 20 20 20 72 35 2c 72 35 2c | BIC r5,r5,| 00001b10 23 26 46 46 30 30 0d 0b 04 19 20 20 20 20 20 20 |#&FF00.... | 00001b20 20 20 43 4d 50 20 20 20 20 20 72 36 2c 23 38 0d | CMP r6,#8.| 00001b30 0b 0e 1d 20 20 20 20 20 20 20 20 42 45 51 20 20 |... BEQ | 00001b40 20 20 20 63 6c 69 70 5f 6e 65 78 74 0d 0b 18 19 | clip_next....| 00001b50 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 00001b60 72 35 2c 23 30 0d 0b 22 1f 20 20 20 20 20 20 20 |r5,#0..". | 00001b70 20 42 4e 45 20 20 20 20 20 77 68 61 63 6b 79 5f | BNE whacky_| 00001b80 7a 65 64 73 0d 0b 2c 19 20 20 20 20 20 20 20 20 |zeds..,. | 00001b90 43 4d 50 20 20 20 20 20 72 36 2c 23 30 0d 0b 36 |CMP r6,#0..6| 00001ba0 17 20 20 20 20 20 20 20 20 ec 51 20 20 20 72 31 |. .Q r1| 00001bb0 34 2c 23 31 0d 0b 40 23 20 20 20 20 20 20 20 20 |4,#1..@# | 00001bc0 84 52 45 51 20 20 20 72 39 2c 72 39 2c 72 31 34 |.REQ r9,r9,r14| 00001bd0 2c 4c 53 4c 20 72 37 0d 0b 4a 10 2e 77 68 61 63 |,LSL r7..J..whac| 00001be0 6b 79 5f 7a 65 64 73 0d 0b 54 13 2e 77 68 6f 6c |ky_zeds..T..whol| 00001bf0 6c 79 5f 76 69 73 69 62 6c 65 0d 0b 5e 1c 20 20 |ly_visible..^. | 00001c00 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 37 | ADD r7| 00001c10 2c 72 37 2c 23 31 0d 0b 68 19 20 20 20 20 20 20 |,r7,#1..h. | 00001c20 20 20 43 4d 50 20 20 20 20 20 72 37 2c 23 36 0d | CMP r7,#6.| 00001c30 0b 72 25 20 20 20 20 20 20 20 20 42 4c 54 20 20 |.r% BLT | 00001c40 20 20 20 63 68 65 63 6b 5f 62 6f 75 6e 64 5f 6c | check_bound_l| 00001c50 6f 6f 70 31 0d 0b 7c 34 20 20 20 20 20 20 20 20 |oop1..|4 | 00001c60 43 4d 50 20 20 20 20 20 72 39 2c 23 25 31 31 31 |CMP r9,#%111| 00001c70 31 31 31 20 3b 20 63 6f 6d 70 6c 65 74 65 6c 79 |111 ; completely| 00001c80 20 76 69 73 69 62 6c 65 0d 0b 86 27 20 20 20 20 | visible...' | 00001c90 20 20 20 20 84 52 45 51 20 20 20 72 31 31 2c 72 | .REQ r11,r| 00001ca0 31 31 2c 23 62 69 74 5f 64 69 73 70 61 6c 6c 0d |11,#bit_dispall.| 00001cb0 0b 90 21 20 20 20 20 20 20 20 20 42 45 51 20 20 |..! BEQ | 00001cc0 20 20 20 72 65 67 69 73 74 65 72 5f 63 6c 69 70 | register_clip| 00001cd0 0d 0b 9a 1d 20 20 20 20 20 20 20 20 41 44 44 20 |.... ADD | 00001ce0 20 20 20 20 72 37 2c 73 70 2c 23 31 32 0d 0b a4 | r7,sp,#12...| 00001cf0 1f 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 |. STMFD | 00001d00 20 28 73 70 29 21 2c 7b 72 31 30 7d 0d 0b ae 2a | (sp)!,{r10}...*| 00001d10 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 00001d20 72 31 30 2c 5b 72 31 30 2c 23 73 75 62 6f 62 6a |r10,[r10,#subobj| 00001d30 5f 74 79 70 65 5d 0d 0b b8 18 20 20 20 20 20 20 |_type].... | 00001d40 20 20 42 4c 20 20 20 20 20 20 63 6c 69 70 0d 0b | BL clip..| 00001d50 c2 1f 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 |.. LDMFD | 00001d60 20 20 28 73 70 29 21 2c 7b 72 31 30 7d 0d 0b cc | (sp)!,{r10}...| 00001d70 12 2e 72 65 67 69 73 74 65 72 5f 63 6c 69 70 0d |..register_clip.| 00001d80 0b d6 24 20 20 20 20 20 20 20 20 84 52 20 20 20 |..$ .R | 00001d90 20 20 72 31 31 2c 72 31 31 2c 23 62 69 74 5f 64 | r11,r11,#bit_d| 00001da0 69 73 70 0d 0b e0 0e 2e 63 6c 69 70 5f 6e 65 78 |isp.....clip_nex| 00001db0 74 0d 0b ea 2b 20 20 20 20 20 20 20 20 53 54 52 |t...+ STR| 00001dc0 20 20 20 20 20 72 31 31 2c 5b 72 31 30 2c 23 73 | r11,[r10,#s| 00001dd0 75 62 6f 62 6a 5f 66 6c 61 67 73 5d 0d 0b f4 28 |ubobj_flags]...(| 00001de0 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 00001df0 72 31 34 2c 73 70 2c 23 31 32 2b 31 32 2b 39 36 |r14,sp,#12+12+96| 00001e00 2b 34 2a 37 0d 0b fe 1f 20 20 20 20 20 20 20 20 |+4*7.... | 00001e10 4c 44 4d 49 41 20 20 20 72 31 34 2c 7b 72 37 2c |LDMIA r14,{r7,| 00001e20 72 38 7d 0d 0c 08 2a 20 20 20 20 20 20 20 20 4c |r8}...* L| 00001e30 44 52 20 20 20 20 20 72 31 30 2c 5b 72 31 30 2c |DR r10,[r10,| 00001e40 23 73 75 62 6f 62 6a 5f 6e 65 78 74 5d 0d 0c 12 |#subobj_next]...| 00001e50 1d 20 20 20 20 20 20 20 20 42 20 20 20 20 20 20 |. B | 00001e60 20 63 6c 69 70 5f 6c 6f 6f 70 0d 0c 1c 0e 2e 63 | clip_loop.....c| 00001e70 6c 69 70 5f 65 78 69 74 0d 0c 26 23 20 20 20 20 |lip_exit..&# | 00001e80 20 20 20 20 41 44 44 20 20 20 20 20 73 70 2c 73 | ADD sp,s| 00001e90 70 2c 23 31 32 2b 31 32 2b 39 36 0d 0c 30 25 20 |p,#12+12+96..0% | 00001ea0 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 28 | LDMFD (| 00001eb0 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 70 63 7d |sp)!,{r0-r11,pc}| 00001ec0 0d 0c 3a 04 0d 0c 44 26 2e 61 64 64 20 20 20 20 |..:...D&.add | 00001ed0 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 |STMFD (sp)!,{r| 00001ee0 30 2d 72 38 2c 6c 69 6e 6b 7d 0d 0c 4e 1e 20 20 |0-r8,link}..N. | 00001ef0 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 72 30 | LDMIA r0| 00001f00 2c 7b 72 33 2d 72 35 7d 0d 0c 58 1e 20 20 20 20 |,{r3-r5}..X. | 00001f10 20 20 20 20 4c 44 4d 49 41 20 20 20 72 31 2c 7b | LDMIA r1,{| 00001f20 72 36 2d 72 38 7d 0d 0c 62 1c 20 20 20 20 20 20 |r6-r8}..b. | 00001f30 20 20 41 44 44 20 20 20 20 20 72 33 2c 72 33 2c | ADD r3,r3,| 00001f40 72 36 0d 0c 6c 1c 20 20 20 20 20 20 20 20 41 44 |r6..l. AD| 00001f50 44 20 20 20 20 20 72 34 2c 72 34 2c 72 37 0d 0c |D r4,r4,r7..| 00001f60 76 1c 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |v. ADD | 00001f70 20 20 72 35 2c 72 35 2c 72 38 0d 0c 80 1e 20 20 | r5,r5,r8.... | 00001f80 20 20 20 20 20 20 53 54 4d 49 41 20 20 20 72 32 | STMIA r2| 00001f90 2c 7b 72 33 2d 72 35 7d 0d 0c 8a 24 20 20 20 20 |,{r3-r5}...$ | 00001fa0 20 20 20 20 4c 44 4d 46 44 20 20 20 28 73 70 29 | LDMFD (sp)| 00001fb0 21 2c 7b 72 30 2d 72 38 2c 70 63 7d 0d 0c 94 04 |!,{r0-r8,pc}....| 00001fc0 0d 0c 9e 0e 2e 66 72 65 65 5f 74 72 65 65 0d 0c |.....free_tree..| 00001fd0 a8 27 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |.' STMFD | 00001fe0 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c | (sp)!,{r0-r11,| 00001ff0 6c 69 6e 6b 7d 0d 0c b2 26 20 20 20 20 20 20 20 |link}...& | 00002000 20 4c 44 52 20 20 20 20 20 72 30 2c 5b 72 31 31 | LDR r0,[r11| 00002010 2c 23 6f 62 6a 5f 6e 61 6d 65 5d 0d 0c bc 19 20 |,#obj_name].... | 00002020 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 | CMP r| 00002030 30 2c 23 30 0d 0c c6 18 20 20 20 20 20 20 20 20 |0,#0.... | 00002040 42 4c 4e 45 20 20 20 20 66 72 65 65 0d 0c d0 26 |BLNE free...&| 00002050 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 00002060 72 38 2c 5b 72 31 31 2c 23 6f 62 6a 5f 6c 69 73 |r8,[r11,#obj_lis| 00002070 74 5d 0d 0c da 13 2e 66 72 65 65 5f 74 72 65 65 |t].....free_tree| 00002080 5f 6c 6f 6f 70 0d 0c e4 19 20 20 20 20 20 20 20 |_loop.... | 00002090 20 43 4d 50 20 20 20 20 20 72 38 2c 23 30 0d 0c | CMP r8,#0..| 000020a0 ee 1e 20 20 20 20 20 20 20 20 42 45 51 20 20 20 |.. BEQ | 000020b0 20 20 66 72 65 65 64 5f 6c 69 73 74 0d 0c f8 29 | freed_list...)| 000020c0 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 000020d0 72 30 2c 5b 72 38 2c 23 73 75 62 6f 62 6a 5f 66 |r0,[r8,#subobj_f| 000020e0 6c 61 67 73 5d 0d 0d 02 20 20 20 20 20 20 20 20 |lags]... | 000020f0 20 54 53 54 20 20 20 20 20 72 30 2c 23 62 69 74 | TST r0,#bit| 00002100 5f 73 75 72 66 0d 0d 0c 1e 20 20 20 20 20 20 20 |_surf.... | 00002110 20 42 4e 45 20 20 20 20 20 66 72 65 65 5f 74 72 | BNE free_tr| 00002120 65 65 32 0d 0d 16 1b 20 20 20 20 20 20 20 20 4d |ee2.... M| 00002130 4f 56 20 20 20 20 20 72 31 30 2c 72 31 31 0d 0d |OV r10,r11..| 00002140 20 29 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 | ) LDR | 00002150 20 20 72 31 31 2c 5b 72 38 2c 23 73 75 62 6f 62 | r11,[r8,#subob| 00002160 6a 5f 74 79 70 65 5d 0d 0d 2a 1d 20 20 20 20 20 |j_type]..*. | 00002170 20 20 20 42 4c 20 20 20 20 20 20 66 72 65 65 5f | BL free_| 00002180 74 72 65 65 0d 0d 34 1b 20 20 20 20 20 20 20 20 |tree..4. | 00002190 4d 4f 56 20 20 20 20 20 72 31 31 2c 72 31 30 0d |MOV r11,r10.| 000021a0 0d 3e 0f 2e 66 72 65 65 5f 74 72 65 65 32 0d 0d |.>..free_tree2..| 000021b0 48 28 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 |H( LDR | 000021c0 20 20 72 37 2c 5b 72 38 2c 23 73 75 62 6f 62 6a | r7,[r8,#subobj| 000021d0 5f 6e 65 78 74 5d 0d 0d 52 19 20 20 20 20 20 20 |_next]..R. | 000021e0 20 20 4d 4f 56 20 20 20 20 20 72 30 2c 72 38 0d | MOV r0,r8.| 000021f0 0d 5c 18 20 20 20 20 20 20 20 20 42 4c 20 20 20 |.\. BL | 00002200 20 20 20 66 72 65 65 0d 0d 66 19 20 20 20 20 20 | free..f. | 00002210 20 20 20 4d 4f 56 20 20 20 20 20 72 38 2c 72 37 | MOV r8,r7| 00002220 0d 0d 70 22 20 20 20 20 20 20 20 20 42 20 20 20 |..p" B | 00002230 20 20 20 20 66 72 65 65 5f 74 72 65 65 5f 6c 6f | free_tree_lo| 00002240 6f 70 0d 0d 7a 0f 2e 66 72 65 65 64 5f 6c 69 73 |op..z..freed_lis| 00002250 74 0d 0d 84 1a 20 20 20 20 20 20 20 20 4d 4f 56 |t.... MOV| 00002260 20 20 20 20 20 72 30 2c 72 31 31 0d 0d 8e 18 20 | r0,r11.... | 00002270 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 66 | BL f| 00002280 72 65 65 0d 0d 98 25 20 20 20 20 20 20 20 20 4c |ree...% L| 00002290 44 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 30 |DMFD (sp)!,{r0| 000022a0 2d 72 31 31 2c 70 63 7d 0d 0d a2 04 0d 0d ac 0f |-r11,pc}........| 000022b0 2e 70 6c 6f 74 5f 66 61 63 65 73 0d 0d b6 27 20 |.plot_faces...' | 000022c0 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 | STMFD (| 000022d0 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 6c 69 6e |sp)!,{r0-r11,lin| 000022e0 6b 7d 0d 0d c0 20 20 20 20 20 20 20 20 20 a4 61 |k}... .a| 000022f0 64 72 6c 28 31 34 2c 70 6f 6c 79 5f 70 6f 69 6e |drl(14,poly_poin| 00002300 74 29 0d 0d ca 20 20 20 20 20 20 20 20 20 4c 44 |t)... LD| 00002310 4d 49 41 20 20 20 72 31 34 2c 7b 72 39 2d 72 31 |MIA r14,{r9-r1| 00002320 31 7d 0d 0d d4 1a 20 20 20 20 20 20 20 20 43 4d |1}.... CM| 00002330 50 20 20 20 20 20 72 31 31 2c 23 30 0d 0d de 19 |P r11,#0....| 00002340 20 20 20 20 20 20 20 20 43 4d 50 4e 45 20 20 20 | CMPNE | 00002350 72 39 2c 23 30 0d 0d e8 25 20 20 20 20 20 20 20 |r9,#0...% | 00002360 20 4c 44 4d 45 51 46 44 20 28 73 70 29 21 2c 7b | LDMEQFD (sp)!,{| 00002370 72 30 2d 72 31 31 2c 70 63 7d 0d 0d f2 1a 20 20 |r0-r11,pc}.... | 00002380 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 | MOV r0| 00002390 2c 72 31 31 0d 0d fc 19 20 20 20 20 20 20 20 20 |,r11.... | 000023a0 4d 4f 56 20 20 20 20 20 72 31 2c 72 39 0d 0e 06 |MOV r1,r9...| 000023b0 1e 20 20 20 20 20 20 20 20 41 44 52 20 20 20 20 |. ADR | 000023c0 20 72 32 2c 63 6f 6d 70 61 72 65 0d 0e 10 22 20 | r2,compare..." | 000023d0 20 20 20 20 20 20 20 53 57 49 20 20 20 20 20 22 | SWI "| 000023e0 58 4f 53 5f 48 65 61 70 53 6f 72 74 22 0d 0e 1a |XOS_HeapSort"...| 000023f0 1b 20 20 20 20 20 20 20 20 a4 61 64 72 6c 28 31 |. .adrl(1| 00002400 34 2c 66 6c 61 67 73 29 0d 0e 24 1c 20 20 20 20 |4,flags)..$. | 00002410 20 20 20 20 4c 44 52 20 20 20 20 20 72 33 2c 5b | LDR r3,[| 00002420 72 31 34 5d 0d 0e 2e 13 2e 70 6c 6f 74 5f 66 61 |r14].....plot_fa| 00002430 63 65 5f 6c 6f 6f 70 0d 0e 38 1e 20 20 20 20 20 |ce_loop..8. | 00002440 20 20 20 4c 44 52 20 20 20 20 20 72 38 2c 5b 72 | LDR r8,[r| 00002450 39 5d 2c 23 34 0d 0e 42 23 20 20 20 20 20 20 20 |9],#4..B# | 00002460 20 4c 44 52 20 20 20 20 20 72 37 2c 5b 72 38 2c | LDR r7,[r8,| 00002470 23 64 69 73 70 5f 6e 5d 0d 0e 4c 23 20 20 20 20 |#disp_n]..L# | 00002480 20 20 20 20 41 44 44 20 20 20 20 20 72 38 2c 72 | ADD r8,r| 00002490 38 2c 23 64 69 73 70 5f 64 61 74 0d 0e 56 14 2e |8,#disp_dat..V..| 000024a0 70 6c 6f 74 5f 66 61 63 65 5f 6c 6f 6f 70 32 0d |plot_face_loop2.| 000024b0 0e 60 1f 20 20 20 20 20 20 20 20 4c 44 4d 49 41 |.`. LDMIA| 000024c0 20 20 20 72 38 21 2c 7b 72 32 2c 72 36 7d 0d 0e | r8!,{r2,r6}..| 000024d0 6a 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |j. MOV | 000024e0 20 20 72 30 2c 72 36 0d 0e 74 19 20 20 20 20 20 | r0,r6..t. | 000024f0 20 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 72 38 | MOV r1,r8| 00002500 0d 0e 7e 1b 20 20 20 20 20 20 20 20 42 4c 20 20 |..~. BL | 00002510 20 20 20 20 73 77 69 28 30 30 29 0d 0e 88 23 20 | swi(00)...# | 00002520 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 00002530 38 2c 72 38 2c 72 36 2c 4c 53 4c 20 23 33 0d 0e |8,r8,r6,LSL #3..| 00002540 92 1c 20 20 20 20 20 20 20 20 53 55 42 53 20 20 |.. SUBS | 00002550 20 20 72 37 2c 72 37 2c 23 31 0d 0e 9c 23 20 20 | r7,r7,#1...# | 00002560 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 70 6c | BNE pl| 00002570 6f 74 5f 66 61 63 65 5f 6c 6f 6f 70 32 0d 0e a6 |ot_face_loop2...| 00002580 1e 20 20 20 20 20 20 20 20 53 55 42 53 20 20 20 |. SUBS | 00002590 20 72 31 31 2c 72 31 31 2c 23 31 0d 0e b0 22 20 | r11,r11,#1..." | 000025a0 20 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 70 | BNE p| 000025b0 6c 6f 74 5f 66 61 63 65 5f 6c 6f 6f 70 0d 0e ba |lot_face_loop...| 000025c0 25 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 |% LDMFD | 000025d0 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 70 | (sp)!,{r0-r11,p| 000025e0 63 7d 0d 0e c4 04 0d 0e ce 0c 2e 63 6f 6d 70 61 |c}.........compa| 000025f0 72 65 0d 0e d8 1e 20 20 20 20 20 20 20 20 4c 44 |re.... LD| 00002600 4d 49 41 20 20 20 72 30 2c 7b 72 32 2c 72 33 7d |MIA r0,{r2,r3}| 00002610 0d 0e e2 1e 20 20 20 20 20 20 20 20 4c 44 4d 49 |.... LDMI| 00002620 41 20 20 20 72 31 2c 7b 72 30 2c 72 31 7d 0d 0e |A r1,{r0,r1}..| 00002630 ec 19 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 |.. CMP | 00002640 20 20 72 32 2c 72 31 0d 0e f6 1e 20 20 20 20 20 | r2,r1.... | 00002650 20 20 20 42 47 45 20 20 20 20 20 63 6f 6d 70 5f | BGE comp_| 00002660 72 65 74 6c 74 0d 0f 00 19 20 20 20 20 20 20 20 |retlt.... | 00002670 20 43 4d 50 20 20 20 20 20 72 30 2c 72 33 0d 0f | CMP r0,r3..| 00002680 0a 1e 20 20 20 20 20 20 20 20 42 47 45 20 20 20 |.. BGE | 00002690 20 20 63 6f 6d 70 5f 72 65 74 67 74 0d 0f 14 19 | comp_retgt....| 000026a0 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 000026b0 72 32 2c 72 30 0d 0f 1e 1e 20 20 20 20 20 20 20 |r2,r0.... | 000026c0 20 42 4c 54 20 20 20 20 20 63 6f 6d 70 5f 72 65 | BLT comp_re| 000026d0 74 67 74 0d 0f 28 0f 2e 63 6f 6d 70 5f 72 65 74 |tgt..(..comp_ret| 000026e0 6c 74 0d 0f 32 19 20 20 20 20 20 20 20 20 4d 56 |lt..2. MV| 000026f0 4e 20 20 20 20 20 72 30 2c 23 30 0d 0f 3c 19 20 |N r0,#0..<. | 00002700 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 | CMP r| 00002710 30 2c 23 30 0d 0f 46 1b 20 20 20 20 20 20 20 20 |0,#0..F. | 00002720 4d 4f 56 20 20 20 20 20 70 63 2c 6c 69 6e 6b 0d |MOV pc,link.| 00002730 0f 50 0f 2e 63 6f 6d 70 5f 72 65 74 67 74 0d 0f |.P..comp_retgt..| 00002740 5a 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |Z. MOV | 00002750 20 20 72 30 2c 23 31 0d 0f 64 19 20 20 20 20 20 | r0,#1..d. | 00002760 20 20 20 43 4d 50 20 20 20 20 20 72 30 2c 23 30 | CMP r0,#0| 00002770 0d 0f 6e 1b 20 20 20 20 20 20 20 20 4d 4f 56 20 |..n. MOV | 00002780 20 20 20 20 70 63 2c 6c 69 6e 6b 0d 0f 78 04 0d | pc,link..x..| 00002790 0f 82 0e 2e 69 6e 76 69 73 69 62 6c 65 0d 0f 8c |....invisible...| 000027a0 27 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 20 |' STMFD | 000027b0 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 6c | (sp)!,{r0-r11,l| 000027c0 69 6e 6b 7d 0d 0f 96 1e 20 20 20 20 20 20 20 20 |ink}.... | 000027d0 4c 44 4d 49 41 20 20 20 72 30 2c 7b 72 37 2d 72 |LDMIA r0,{r7-r| 000027e0 39 7d 0d 0f a0 17 20 20 20 20 20 20 20 20 a4 61 |9}.... .a| 000027f0 64 72 6c 28 31 34 2c 73 29 0d 0f aa 21 20 20 20 |drl(14,s)...! | 00002800 20 20 20 20 20 4c 44 4d 49 41 20 20 20 72 31 34 | LDMIA r14| 00002810 2c 7b 72 31 30 2c 72 31 31 7d 0d 0f b4 23 20 20 |,{r10,r11}...# | 00002820 20 20 20 20 20 20 41 44 44 20 20 20 20 20 70 63 | ADD pc| 00002830 2c 70 63 2c 72 31 2c 4c 53 4c 20 23 32 0d 0f be |,pc,r1,LSL #2...| 00002840 15 20 20 20 20 20 20 20 20 44 43 44 20 20 20 20 |. DCD | 00002850 20 30 0d 0f c8 1e 20 20 20 20 20 20 20 20 42 20 | 0.... B | 00002860 20 20 20 20 20 20 63 68 65 63 6b 5f 6d 61 78 7a | check_maxz| 00002870 0d 0f d2 1e 20 20 20 20 20 20 20 20 42 20 20 20 |.... B | 00002880 20 20 20 20 63 68 65 63 6b 5f 6d 69 6e 7a 0d 0f | check_minz..| 00002890 dc 1e 20 20 20 20 20 20 20 20 42 20 20 20 20 20 |.. B | 000028a0 20 20 63 68 65 63 6b 5f 6d 69 6e 78 0d 0f e6 1e | check_minx....| 000028b0 20 20 20 20 20 20 20 20 42 20 20 20 20 20 20 20 | B | 000028c0 63 68 65 63 6b 5f 6d 61 78 78 0d 0f f0 1e 20 20 |check_maxx.... | 000028d0 20 20 20 20 20 20 42 20 20 20 20 20 20 20 63 68 | B ch| 000028e0 65 63 6b 5f 6d 69 6e 79 0d 0f fa 1e 20 20 20 20 |eck_miny.... | 000028f0 20 20 20 20 42 20 20 20 20 20 20 20 63 68 65 63 | B chec| 00002900 6b 5f 6d 61 78 79 0d 10 04 0f 2e 63 68 65 63 6b |k_maxy.....check| 00002910 5f 6d 61 78 7a 0d 10 0e 1e 20 20 20 20 20 20 20 |_maxz.... | 00002920 20 4c 44 52 20 20 20 20 20 72 32 2c 5b 72 30 2c | LDR r2,[r0,| 00002930 23 38 5d 0d 10 18 1a 20 20 20 20 20 20 20 20 a4 |#8].... .| 00002940 61 64 72 6c 28 33 2c 6d 61 78 5f 7a 29 0d 10 22 |adrl(3,max_z).."| 00002950 1b 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 |. LDR | 00002960 20 72 33 2c 5b 72 33 5d 0d 10 2c 19 20 20 20 20 | r3,[r3]..,. | 00002970 20 20 20 20 43 4d 50 20 20 20 20 20 72 32 2c 72 | CMP r2,r| 00002980 33 0d 10 36 1e 20 20 20 20 20 20 20 20 42 4c 54 |3..6. BLT| 00002990 20 20 20 20 20 69 73 5f 76 69 73 69 62 6c 65 0d | is_visible.| 000029a0 10 40 20 20 20 20 20 20 20 20 20 42 20 20 20 20 |.@ B | 000029b0 20 20 20 69 73 5f 69 6e 76 69 73 69 62 6c 65 0d | is_invisible.| 000029c0 10 4a 0f 2e 63 68 65 63 6b 5f 6d 69 6e 7a 0d 10 |.J..check_minz..| 000029d0 54 1e 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 |T. LDR | 000029e0 20 20 72 32 2c 5b 72 30 2c 23 38 5d 0d 10 5e 1a | r2,[r0,#8]..^.| 000029f0 20 20 20 20 20 20 20 20 a4 61 64 72 6c 28 33 2c | .adrl(3,| 00002a00 6d 69 6e 5f 7a 29 0d 10 68 1b 20 20 20 20 20 20 |min_z)..h. | 00002a10 20 20 4c 44 52 20 20 20 20 20 72 33 2c 5b 72 33 | LDR r3,[r3| 00002a20 5d 0d 10 72 19 20 20 20 20 20 20 20 20 43 4d 50 |]..r. CMP| 00002a30 20 20 20 20 20 72 32 2c 72 33 0d 10 7c 1e 20 20 | r2,r3..|. | 00002a40 20 20 20 20 20 20 42 47 54 20 20 20 20 20 69 73 | BGT is| 00002a50 5f 76 69 73 69 62 6c 65 0d 10 86 20 20 20 20 20 |_visible... | 00002a60 20 20 20 20 42 20 20 20 20 20 20 20 69 73 5f 69 | B is_i| 00002a70 6e 76 69 73 69 62 6c 65 0d 10 90 0f 2e 63 68 65 |nvisible.....che| 00002a80 63 6b 5f 6d 69 6e 78 0d 10 9a 1d 20 20 20 20 20 |ck_minx.... | 00002a90 20 20 20 4d 55 4c 20 20 20 20 20 72 30 2c 72 31 | MUL r0,r1| 00002aa0 30 2c 72 37 0d 10 a4 1d 20 20 20 20 20 20 20 20 |0,r7.... | 00002ab0 41 44 44 20 20 20 20 20 72 31 2c 72 39 2c 72 31 |ADD r1,r9,r1| 00002ac0 31 0d 10 ae 1a 20 20 20 20 20 20 20 20 42 4c 20 |1.... BL | 00002ad0 20 20 20 20 20 64 69 76 69 64 65 0d 10 b8 1e 20 | divide.... | 00002ae0 20 20 20 20 20 20 20 a4 61 64 72 6c 28 31 34 2c | .adrl(14,| 00002af0 73 63 72 5f 6d 69 6e 78 29 0d 10 c2 1d 20 20 20 |scr_minx).... | 00002b00 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 31 34 | LDR r14| 00002b10 2c 5b 72 31 34 5d 0d 10 cc 1a 20 20 20 20 20 20 |,[r14].... | 00002b20 20 20 43 4d 50 20 20 20 20 20 72 32 2c 72 31 34 | CMP r2,r14| 00002b30 0d 10 d6 1e 20 20 20 20 20 20 20 20 42 47 54 20 |.... BGT | 00002b40 20 20 20 20 69 73 5f 76 69 73 69 62 6c 65 0d 10 | is_visible..| 00002b50 e0 20 20 20 20 20 20 20 20 20 42 20 20 20 20 20 |. B | 00002b60 20 20 69 73 5f 69 6e 76 69 73 69 62 6c 65 0d 10 | is_invisible..| 00002b70 ea 0f 2e 63 68 65 63 6b 5f 6d 61 78 78 0d 10 f4 |...check_maxx...| 00002b80 1d 20 20 20 20 20 20 20 20 4d 55 4c 20 20 20 20 |. MUL | 00002b90 20 72 30 2c 72 31 30 2c 72 37 0d 10 fe 1d 20 20 | r0,r10,r7.... | 00002ba0 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 31 | ADD r1| 00002bb0 2c 72 39 2c 72 31 31 0d 11 08 1a 20 20 20 20 20 |,r9,r11.... | 00002bc0 20 20 20 42 4c 20 20 20 20 20 20 64 69 76 69 64 | BL divid| 00002bd0 65 0d 11 12 1e 20 20 20 20 20 20 20 20 a4 61 64 |e.... .ad| 00002be0 72 6c 28 31 34 2c 73 63 72 5f 6d 61 78 78 29 0d |rl(14,scr_maxx).| 00002bf0 11 1c 1d 20 20 20 20 20 20 20 20 4c 44 52 20 20 |... LDR | 00002c00 20 20 20 72 31 34 2c 5b 72 31 34 5d 0d 11 26 1a | r14,[r14]..&.| 00002c10 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 00002c20 72 32 2c 72 31 34 0d 11 30 1e 20 20 20 20 20 20 |r2,r14..0. | 00002c30 20 20 42 4c 54 20 20 20 20 20 69 73 5f 76 69 73 | BLT is_vis| 00002c40 69 62 6c 65 0d 11 3a 20 20 20 20 20 20 20 20 20 |ible..: | 00002c50 42 20 20 20 20 20 20 20 69 73 5f 69 6e 76 69 73 |B is_invis| 00002c60 69 62 6c 65 0d 11 44 0f 2e 63 68 65 63 6b 5f 6d |ible..D..check_m| 00002c70 69 6e 79 0d 11 4e 1d 20 20 20 20 20 20 20 20 4d |iny..N. M| 00002c80 55 4c 20 20 20 20 20 72 30 2c 72 31 30 2c 72 38 |UL r0,r10,r8| 00002c90 0d 11 58 1d 20 20 20 20 20 20 20 20 41 44 44 20 |..X. ADD | 00002ca0 20 20 20 20 72 31 2c 72 39 2c 72 31 31 0d 11 62 | r1,r9,r11..b| 00002cb0 1a 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 |. BL | 00002cc0 20 64 69 76 69 64 65 0d 11 6c 1e 20 20 20 20 20 | divide..l. | 00002cd0 20 20 20 a4 61 64 72 6c 28 31 34 2c 73 63 72 5f | .adrl(14,scr_| 00002ce0 6d 69 6e 79 29 0d 11 76 1d 20 20 20 20 20 20 20 |miny)..v. | 00002cf0 20 4c 44 52 20 20 20 20 20 72 31 34 2c 5b 72 31 | LDR r14,[r1| 00002d00 34 5d 0d 11 80 1a 20 20 20 20 20 20 20 20 43 4d |4].... CM| 00002d10 50 20 20 20 20 20 72 32 2c 72 31 34 0d 11 8a 1e |P r2,r14....| 00002d20 20 20 20 20 20 20 20 20 42 47 54 20 20 20 20 20 | BGT | 00002d30 69 73 5f 76 69 73 69 62 6c 65 0d 11 94 20 20 20 |is_visible... | 00002d40 20 20 20 20 20 20 42 20 20 20 20 20 20 20 69 73 | B is| 00002d50 5f 69 6e 76 69 73 69 62 6c 65 0d 11 9e 0f 2e 63 |_invisible.....c| 00002d60 68 65 63 6b 5f 6d 61 78 79 0d 11 a8 1d 20 20 20 |heck_maxy.... | 00002d70 20 20 20 20 20 4d 55 4c 20 20 20 20 20 72 30 2c | MUL r0,| 00002d80 72 31 30 2c 72 38 0d 11 b2 1d 20 20 20 20 20 20 |r10,r8.... | 00002d90 20 20 41 44 44 20 20 20 20 20 72 31 2c 72 39 2c | ADD r1,r9,| 00002da0 72 31 31 0d 11 bc 1a 20 20 20 20 20 20 20 20 42 |r11.... B| 00002db0 4c 20 20 20 20 20 20 64 69 76 69 64 65 0d 11 c6 |L divide...| 00002dc0 1e 20 20 20 20 20 20 20 20 a4 61 64 72 6c 28 31 |. .adrl(1| 00002dd0 34 2c 73 63 72 5f 6d 61 78 79 29 0d 11 d0 1d 20 |4,scr_maxy).... | 00002de0 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 | LDR r| 00002df0 31 34 2c 5b 72 31 34 5d 0d 11 da 1a 20 20 20 20 |14,[r14].... | 00002e00 20 20 20 20 43 4d 50 20 20 20 20 20 72 32 2c 72 | CMP r2,r| 00002e10 31 34 0d 11 e4 1e 20 20 20 20 20 20 20 20 42 4c |14.... BL| 00002e20 54 20 20 20 20 20 69 73 5f 76 69 73 69 62 6c 65 |T is_visible| 00002e30 0d 11 ee 11 2e 69 73 5f 69 6e 76 69 73 69 62 6c |.....is_invisibl| 00002e40 65 0d 11 f8 19 20 20 20 20 20 20 20 20 43 4d 50 |e.... CMP| 00002e50 20 20 20 20 20 72 30 2c 72 30 0d 12 02 25 20 20 | r0,r0...% | 00002e60 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 28 73 | LDMFD (s| 00002e70 70 29 21 2c 7b 72 30 2d 72 31 31 2c 70 63 7d 0d |p)!,{r0-r11,pc}.| 00002e80 12 0c 0f 2e 69 73 5f 76 69 73 69 62 6c 65 0d 12 |....is_visible..| 00002e90 16 19 20 20 20 20 20 20 20 20 43 4d 4e 20 20 20 |.. CMN | 00002ea0 20 20 70 63 2c 23 30 0d 12 20 25 20 20 20 20 20 | pc,#0.. % | 00002eb0 20 20 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 | LDMFD (sp)!| 00002ec0 2c 7b 72 30 2d 72 31 31 2c 70 63 7d 0d 12 2a 04 |,{r0-r11,pc}..*.| 00002ed0 0d 12 34 27 2e 73 6c 69 64 65 20 20 53 54 4d 46 |..4'.slide STMF| 00002ee0 44 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 |D (sp)!,{r0-r1| 00002ef0 31 2c 6c 69 6e 6b 7d 0d 12 3e 1a 20 20 20 20 20 |1,link}..>. | 00002f00 20 20 20 4d 4f 56 20 20 20 20 20 72 31 31 2c 72 | MOV r11,r| 00002f10 33 0d 12 48 1e 20 20 20 20 20 20 20 20 4c 44 4d |3..H. LDM| 00002f20 49 41 20 20 20 72 30 2c 7b 72 35 2d 72 37 7d 0d |IA r0,{r5-r7}.| 00002f30 12 52 1f 20 20 20 20 20 20 20 20 4c 44 4d 49 41 |.R. LDMIA| 00002f40 20 20 20 72 31 2c 7b 72 38 2d 72 31 30 7d 0d 12 | r1,{r8-r10}..| 00002f50 5c 0f 2e 73 6c 69 64 65 5f 6c 6f 6f 70 0d 12 66 |\..slide_loop..f| 00002f60 1c 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |. ADD | 00002f70 20 72 32 2c 72 35 2c 72 38 0d 12 70 1c 20 20 20 | r2,r5,r8..p. | 00002f80 20 20 20 20 20 41 44 44 20 20 20 20 20 72 33 2c | ADD r3,| 00002f90 72 36 2c 72 39 0d 12 7a 1d 20 20 20 20 20 20 20 |r6,r9..z. | 00002fa0 20 41 44 44 20 20 20 20 20 72 34 2c 72 37 2c 72 | ADD r4,r7,r| 00002fb0 31 30 0d 12 84 20 20 20 20 20 20 20 20 20 4d 4f |10... MO| 00002fc0 56 20 20 20 20 20 72 32 2c 72 32 2c 41 53 52 20 |V r2,r2,ASR | 00002fd0 23 31 0d 12 8e 20 20 20 20 20 20 20 20 20 4d 4f |#1... MO| 00002fe0 56 20 20 20 20 20 72 33 2c 72 33 2c 41 53 52 20 |V r3,r3,ASR | 00002ff0 23 31 0d 12 98 20 20 20 20 20 20 20 20 20 4d 4f |#1... MO| 00003000 56 20 20 20 20 20 72 34 2c 72 34 2c 41 53 52 20 |V r4,r4,ASR | 00003010 23 31 0d 12 a2 1c 20 20 20 20 20 20 20 20 53 55 |#1.... SU| 00003020 42 20 20 20 20 20 72 30 2c 72 35 2c 72 38 0d 12 |B r0,r5,r8..| 00003030 ac 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00003040 20 20 72 31 34 2c 72 30 0d 12 b6 1d 20 20 20 20 | r14,r0.... | 00003050 20 20 20 20 4d 55 4c 20 20 20 20 20 72 31 2c 72 | MUL r1,r| 00003060 30 2c 72 31 34 0d 12 c0 1c 20 20 20 20 20 20 20 |0,r14.... | 00003070 20 53 55 42 20 20 20 20 20 72 30 2c 72 36 2c 72 | SUB r0,r6,r| 00003080 39 0d 12 ca 1a 20 20 20 20 20 20 20 20 4d 4f 56 |9.... MOV| 00003090 20 20 20 20 20 72 31 34 2c 72 30 0d 12 d4 20 20 | r14,r0... | 000030a0 20 20 20 20 20 20 20 4d 4c 41 20 20 20 20 20 72 | MLA r| 000030b0 31 2c 72 30 2c 72 31 34 2c 72 31 0d 12 de 1d 20 |1,r0,r14,r1.... | 000030c0 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 72 | SUB r| 000030d0 30 2c 72 37 2c 72 31 30 0d 12 e8 1a 20 20 20 20 |0,r7,r10.... | 000030e0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 31 34 2c | MOV r14,| 000030f0 72 30 0d 12 f2 20 20 20 20 20 20 20 20 20 4d 4c |r0... ML| 00003100 41 20 20 20 20 20 72 31 2c 72 30 2c 72 31 34 2c |A r1,r0,r14,| 00003110 72 31 0d 12 fc 23 20 20 20 20 20 20 20 20 43 4d |r1...# CM| 00003120 50 20 20 20 20 20 72 31 2c 23 73 6c 69 64 65 5f |P r1,#slide_| 00003130 6c 69 6d 69 74 0d 13 06 1d 20 20 20 20 20 20 20 |limit.... | 00003140 20 42 4c 54 20 20 20 20 20 77 65 6c 6c 5f 73 6c | BLT well_sl| 00003150 69 64 0d 13 10 21 20 20 20 20 20 20 20 20 53 54 |id...! ST| 00003160 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 32 2d |MFD (sp)!,{r2-| 00003170 72 34 7d 0d 13 1a 19 20 20 20 20 20 20 20 20 4d |r4}.... M| 00003180 4f 56 20 20 20 20 20 72 30 2c 73 70 0d 13 24 1a |OV r0,sp..$.| 00003190 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 | MOV | 000031a0 72 31 2c 72 31 31 0d 13 2e 1d 20 20 20 20 20 20 |r1,r11.... | 000031b0 20 20 42 4c 20 20 20 20 20 20 69 6e 76 69 73 69 | BL invisi| 000031c0 62 6c 65 0d 13 38 21 20 20 20 20 20 20 20 20 4c |ble..8! L| 000031d0 44 4d 45 51 46 44 20 28 73 70 29 21 2c 7b 72 35 |DMEQFD (sp)!,{r5| 000031e0 2d 72 37 7d 0d 13 42 22 20 20 20 20 20 20 20 20 |-r7}..B" | 000031f0 4c 44 4d 4e 45 46 44 20 28 73 70 29 21 2c 7b 72 |LDMNEFD (sp)!,{r| 00003200 38 2d 72 31 30 7d 0d 13 4c 1e 20 20 20 20 20 20 |8-r10}..L. | 00003210 20 20 42 20 20 20 20 20 20 20 73 6c 69 64 65 5f | B slide_| 00003220 6c 6f 6f 70 0d 13 56 0e 2e 77 65 6c 6c 5f 73 6c |loop..V..well_sl| 00003230 69 64 0d 13 60 20 20 20 20 20 20 20 20 20 4c 44 |id..` LD| 00003240 52 20 20 20 20 20 72 30 2c 5b 73 70 2c 23 34 2a |R r0,[sp,#4*| 00003250 32 5d 0d 13 6a 1e 20 20 20 20 20 20 20 20 53 54 |2]..j. ST| 00003260 4d 49 41 20 20 20 72 30 2c 7b 72 32 2d 72 34 7d |MIA r0,{r2-r4}| 00003270 0d 13 74 25 20 20 20 20 20 20 20 20 4c 44 4d 46 |..t% LDMF| 00003280 44 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 |D (sp)!,{r0-r1| 00003290 31 2c 70 63 7d 0d 13 7e 04 0d 13 88 15 20 3b 20 |1,pc}..~..... ; | 000032a0 72 38 2d 3e 61 6e 67 6c 65 20 6c 69 73 74 0d 13 |r8->angle list..| 000032b0 92 04 0d 13 9c 15 2e 72 65 67 69 73 74 65 72 5f |.......register_| 000032c0 70 6f 6c 79 67 6f 6e 0d 13 a6 27 20 20 20 20 20 |polygon...' | 000032d0 20 20 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 | STMFD (sp)!| 000032e0 2c 7b 72 30 2d 72 31 31 2c 6c 69 6e 6b 7d 0d 13 |,{r0-r11,link}..| 000032f0 b0 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00003300 20 20 72 31 30 2c 72 30 0d 13 ba 24 20 20 20 20 | r10,r0...$ | 00003310 20 20 20 20 4c 44 52 20 20 20 20 20 72 39 2c 5b | LDR r9,[| 00003320 72 31 30 2c 23 73 75 72 66 5f 6e 5d 0d 13 c4 1d |r10,#surf_n]....| 00003330 20 20 20 20 20 20 20 20 a4 61 64 72 6c 28 35 2c | .adrl(5,| 00003340 76 65 72 74 69 63 65 73 29 0d 13 ce 19 20 20 20 |vertices).... | 00003350 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 33 2c | MOV r3,| 00003360 72 39 0d 13 d8 19 20 20 20 20 20 20 20 20 4d 4f |r9.... MO| 00003370 56 20 20 20 20 20 72 34 2c 23 30 0d 13 e2 15 2e |V r4,#0.....| 00003380 72 70 5f 63 6f 70 79 5f 76 65 72 74 69 63 65 73 |rp_copy_vertices| 00003390 0d 13 ec 24 20 20 20 20 20 20 20 20 41 44 44 20 |...$ ADD | 000033a0 20 20 20 20 72 30 2c 72 31 30 2c 23 73 75 72 66 | r0,r10,#surf| 000033b0 5f 72 65 71 0d 13 f6 1c 20 20 20 20 20 20 20 20 |_req.... | 000033c0 41 44 44 20 20 20 20 20 72 30 2c 72 30 2c 72 34 |ADD r0,r0,r4| 000033d0 0d 14 00 1c 20 20 20 20 20 20 20 20 41 44 44 20 |.... ADD | 000033e0 20 20 20 20 72 32 2c 72 35 2c 72 34 0d 14 0a 22 | r2,r5,r4..."| 000033f0 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 | BL | 00003400 72 6f 74 61 74 65 5f 62 79 5f 6c 69 73 74 0d 14 |rotate_by_list..| 00003410 14 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00003420 20 20 72 30 2c 72 32 0d 14 1e 20 20 20 20 20 20 | r0,r2... | 00003430 20 20 20 4c 44 52 20 20 20 20 20 72 31 2c 5b 73 | LDR r1,[s| 00003440 70 2c 23 34 2a 31 5d 0d 14 28 17 20 20 20 20 20 |p,#4*1]..(. | 00003450 20 20 20 42 4c 20 20 20 20 20 20 61 64 64 0d 14 | BL add..| 00003460 32 1d 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |2. ADD | 00003470 20 20 72 34 2c 72 34 2c 23 31 32 0d 14 3c 1c 20 | r4,r4,#12..<. | 00003480 20 20 20 20 20 20 20 53 55 42 53 20 20 20 20 72 | SUBS r| 00003490 33 2c 72 33 2c 23 31 0d 14 46 24 20 20 20 20 20 |3,r3,#1..F$ | 000034a0 20 20 20 42 4e 45 20 20 20 20 20 72 70 5f 63 6f | BNE rp_co| 000034b0 70 79 5f 76 65 72 74 69 63 65 73 0d 14 50 19 20 |py_vertices..P. | 000034c0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 000034d0 31 2c 23 30 0d 14 5a 11 2e 72 70 5f 63 6c 69 70 |1,#0..Z..rp_clip| 000034e0 5f 6c 6f 6f 70 0d 14 64 20 20 20 20 20 20 20 20 |_loop..d | 000034f0 20 4c 44 52 20 20 20 20 20 72 30 2c 5b 73 70 2c | LDR r0,[sp,| 00003500 23 34 2a 39 5d 0d 14 6e 1a 20 20 20 20 20 20 20 |#4*9]..n. | 00003510 20 4d 4f 56 20 20 20 20 20 72 31 34 2c 23 31 0d | MOV r14,#1.| 00003520 14 78 21 20 20 20 20 20 20 20 20 54 53 54 20 20 |.x! TST | 00003530 20 20 20 72 30 2c 72 31 34 2c 4c 53 4c 20 72 31 | r0,r14,LSL r1| 00003540 0d 14 82 26 20 20 20 20 20 20 20 20 42 4e 45 20 |...& BNE | 00003550 20 20 20 20 72 70 5f 6e 6f 5f 6e 65 65 64 5f 74 | rp_no_need_t| 00003560 6f 5f 63 6c 69 70 0d 14 8c 19 20 20 20 20 20 20 |o_clip.... | 00003570 20 20 4d 4f 56 20 20 20 20 20 72 33 2c 23 30 0d | MOV r3,#0.| 00003580 14 96 0d 2e 72 70 5f 6c 6f 6f 70 31 0d 14 a0 19 |....rp_loop1....| 00003590 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 000035a0 72 39 2c 23 32 0d 14 aa 25 20 20 20 20 20 20 20 |r9,#2...% | 000035b0 20 4c 44 4d 4c 45 46 44 20 28 73 70 29 21 2c 7b | LDMLEFD (sp)!,{| 000035c0 72 30 2d 72 31 31 2c 70 63 7d 0d 14 b4 19 20 20 |r0-r11,pc}.... | 000035d0 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 33 | CMP r3| 000035e0 2c 72 39 0d 14 be 21 20 20 20 20 20 20 20 20 42 |,r9...! B| 000035f0 47 45 20 20 20 20 20 64 6f 6e 65 5f 72 70 5f 6c |GE done_rp_l| 00003600 6f 6f 70 31 0d 14 c8 23 20 20 20 20 20 20 20 20 |oop1...# | 00003610 41 44 44 20 20 20 20 20 72 30 2c 72 35 2c 72 33 |ADD r0,r5,r3| 00003620 2c 4c 53 4c 20 23 33 0d 14 d2 23 20 20 20 20 20 |,LSL #3...# | 00003630 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 30 | ADD r0,r0| 00003640 2c 72 33 2c 4c 53 4c 20 23 32 0d 14 dc 1d 20 20 |,r3,LSL #2.... | 00003650 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 69 6e | BL in| 00003660 76 69 73 69 62 6c 65 0d 14 e6 21 20 20 20 20 20 |visible...! | 00003670 20 20 20 42 4e 45 20 20 20 20 20 6e 65 78 74 5f | BNE next_| 00003680 72 70 5f 6c 6f 6f 70 31 0d 14 f0 1d 20 20 20 20 |rp_loop1.... | 00003690 20 20 20 20 41 44 44 20 20 20 20 20 72 31 34 2c | ADD r14,| 000036a0 72 33 2c 23 31 0d 14 fa 1a 20 20 20 20 20 20 20 |r3,#1.... | 000036b0 20 43 4d 50 20 20 20 20 20 72 31 34 2c 72 39 0d | CMP r14,r9.| 000036c0 15 04 17 20 20 20 20 20 20 20 20 ec 51 20 20 20 |... .Q | 000036d0 72 31 34 2c 23 30 0d 15 0e 24 20 20 20 20 20 20 |r14,#0...$ | 000036e0 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 35 2c | ADD r0,r5,| 000036f0 72 31 34 2c 4c 53 4c 20 23 33 0d 15 18 24 20 20 |r14,LSL #3...$ | 00003700 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 30 | ADD r0| 00003710 2c 72 30 2c 72 31 34 2c 4c 53 4c 20 23 32 0d 15 |,r0,r14,LSL #2..| 00003720 22 1d 20 20 20 20 20 20 20 20 42 4c 20 20 20 20 |". BL | 00003730 20 20 69 6e 76 69 73 69 62 6c 65 0d 15 2c 21 20 | invisible..,! | 00003740 20 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 6e | BNE n| 00003750 65 78 74 5f 72 70 5f 6c 6f 6f 70 31 0d 15 36 1d |ext_rp_loop1..6.| 00003760 20 20 20 20 20 20 20 20 53 55 42 53 20 20 20 20 | SUBS | 00003770 72 31 34 2c 72 33 2c 23 31 0d 15 40 1e 20 20 20 |r14,r3,#1..@. | 00003780 20 20 20 20 20 41 44 44 4d 49 20 20 20 72 31 34 | ADDMI r14| 00003790 2c 72 31 34 2c 72 39 0d 15 4a 24 20 20 20 20 20 |,r14,r9..J$ | 000037a0 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 35 | ADD r0,r5| 000037b0 2c 72 31 34 2c 4c 53 4c 20 23 33 0d 15 54 24 20 |,r14,LSL #3..T$ | 000037c0 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 000037d0 30 2c 72 30 2c 72 31 34 2c 4c 53 4c 20 23 32 0d |0,r0,r14,LSL #2.| 000037e0 15 5e 1d 20 20 20 20 20 20 20 20 42 4c 20 20 20 |.^. BL | 000037f0 20 20 20 69 6e 76 69 73 69 62 6c 65 0d 15 68 21 | invisible..h!| 00003800 20 20 20 20 20 20 20 20 42 4e 45 20 20 20 20 20 | BNE | 00003810 6e 65 78 74 5f 72 70 5f 6c 6f 6f 70 31 0d 15 72 |next_rp_loop1..r| 00003820 1d 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |. ADD | 00003830 20 72 31 34 2c 72 33 2c 23 31 0d 15 7c 1a 20 20 | r14,r3,#1..|. | 00003840 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 31 | CMP r1| 00003850 34 2c 72 39 0d 15 86 25 20 20 20 20 20 20 20 20 |4,r9...% | 00003860 42 47 45 20 20 20 20 20 72 70 5f 69 73 5f 6c 61 |BGE rp_is_la| 00003870 73 74 5f 61 6e 79 77 61 79 0d 15 90 2c 20 20 20 |st_anyway..., | 00003880 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 73 70 | STMFD (sp| 00003890 29 21 2c 7b 72 31 2c 72 37 2c 72 38 2c 72 31 30 |)!,{r1,r7,r8,r10| 000038a0 2d 72 31 31 7d 0d 15 9a 1a 20 20 20 20 20 20 20 |-r11}.... | 000038b0 20 4d 4f 56 20 20 20 20 20 72 31 30 2c 72 33 0d | MOV r10,r3.| 000038c0 15 a4 1d 20 20 20 20 20 20 20 20 53 55 42 20 20 |... SUB | 000038d0 20 20 20 72 31 31 2c 72 39 2c 23 32 0d 15 ae 23 | r11,r9,#2...#| 000038e0 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 000038f0 72 37 2c 72 35 2c 72 33 2c 4c 53 4c 20 23 33 0d |r7,r5,r3,LSL #3.| 00003900 15 b8 23 20 20 20 20 20 20 20 20 41 44 44 20 20 |..# ADD | 00003910 20 20 20 72 37 2c 72 37 2c 72 33 2c 4c 53 4c 20 | r7,r7,r3,LSL | 00003920 23 32 0d 15 c2 1d 20 20 20 20 20 20 20 20 41 44 |#2.... AD| 00003930 44 20 20 20 20 20 72 38 2c 72 37 2c 23 31 32 0d |D r8,r7,#12.| 00003940 15 cc 10 2e 72 70 5f 64 65 6c 5f 6c 6f 6f 70 0d |....rp_del_loop.| 00003950 15 d6 1f 20 20 20 20 20 20 20 20 4c 44 4d 49 41 |... LDMIA| 00003960 20 20 20 72 38 21 2c 7b 72 30 2d 72 32 7d 0d 15 | r8!,{r0-r2}..| 00003970 e0 1f 20 20 20 20 20 20 20 20 53 54 4d 49 41 20 |.. STMIA | 00003980 20 20 72 37 21 2c 7b 72 30 2d 72 32 7d 0d 15 ea | r7!,{r0-r2}...| 00003990 1e 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |. ADD | 000039a0 20 72 31 30 2c 72 31 30 2c 23 31 0d 15 f4 1b 20 | r10,r10,#1.... | 000039b0 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 | CMP r| 000039c0 31 30 2c 72 31 31 0d 15 fe 1f 20 20 20 20 20 20 |10,r11.... | 000039d0 20 20 42 4c 45 20 20 20 20 20 72 70 5f 64 65 6c | BLE rp_del| 000039e0 5f 6c 6f 6f 70 0d 16 08 2c 20 20 20 20 20 20 20 |_loop..., | 000039f0 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 7b | LDMFD (sp)!,{| 00003a00 72 31 2c 72 37 2c 72 38 2c 72 31 30 2d 72 31 31 |r1,r7,r8,r10-r11| 00003a10 7d 0d 16 12 16 2e 72 70 5f 69 73 5f 6c 61 73 74 |}.....rp_is_last| 00003a20 5f 61 6e 79 77 61 79 0d 16 1c 1c 20 20 20 20 20 |_anyway.... | 00003a30 20 20 20 53 55 42 20 20 20 20 20 72 39 2c 72 39 | SUB r9,r9| 00003a40 2c 23 31 0d 16 26 1c 20 20 20 20 20 20 20 20 42 |,#1..&. B| 00003a50 20 20 20 20 20 20 20 72 70 5f 6c 6f 6f 70 31 0d | rp_loop1.| 00003a60 16 30 12 2e 6e 65 78 74 5f 72 70 5f 6c 6f 6f 70 |.0..next_rp_loop| 00003a70 31 0d 16 3a 1c 20 20 20 20 20 20 20 20 41 44 44 |1..:. ADD| 00003a80 20 20 20 20 20 72 33 2c 72 33 2c 23 31 0d 16 44 | r3,r3,#1..D| 00003a90 1c 20 20 20 20 20 20 20 20 42 20 20 20 20 20 20 |. B | 00003aa0 20 72 70 5f 6c 6f 6f 70 31 0d 16 4e 12 2e 64 6f | rp_loop1..N..do| 00003ab0 6e 65 5f 72 70 5f 6c 6f 6f 70 31 0d 16 58 19 20 |ne_rp_loop1..X. | 00003ac0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00003ad0 33 2c 23 30 0d 16 62 0d 2e 72 70 5f 6c 6f 6f 70 |3,#0..b..rp_loop| 00003ae0 32 0d 16 6c 19 20 20 20 20 20 20 20 20 43 4d 50 |2..l. CMP| 00003af0 20 20 20 20 20 72 33 2c 72 39 0d 16 76 21 20 20 | r3,r9..v! | 00003b00 20 20 20 20 20 20 42 47 45 20 20 20 20 20 64 6f | BGE do| 00003b10 6e 65 5f 72 70 5f 6c 6f 6f 70 32 0d 16 80 23 20 |ne_rp_loop2...# | 00003b20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 00003b30 30 2c 72 35 2c 72 33 2c 4c 53 4c 20 23 33 0d 16 |0,r5,r3,LSL #3..| 00003b40 8a 23 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |.# ADD | 00003b50 20 20 72 30 2c 72 30 2c 72 33 2c 4c 53 4c 20 23 | r0,r0,r3,LSL #| 00003b60 32 0d 16 94 1d 20 20 20 20 20 20 20 20 42 4c 20 |2.... BL | 00003b70 20 20 20 20 20 69 6e 76 69 73 69 62 6c 65 0d 16 | invisible..| 00003b80 9e 21 20 20 20 20 20 20 20 20 42 4e 45 20 20 20 |.! BNE | 00003b90 20 20 6e 65 78 74 5f 72 70 5f 6c 6f 6f 70 32 0d | next_rp_loop2.| 00003ba0 16 a8 1d 20 20 20 20 20 20 20 20 53 55 42 53 20 |... SUBS | 00003bb0 20 20 20 72 31 34 2c 72 33 2c 23 31 0d 16 b2 1e | r14,r3,#1....| 00003bc0 20 20 20 20 20 20 20 20 41 44 44 4d 49 20 20 20 | ADDMI | 00003bd0 72 31 34 2c 72 31 34 2c 72 39 0d 16 bc 24 20 20 |r14,r14,r9...$ | 00003be0 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 30 | ADD r0| 00003bf0 2c 72 35 2c 72 31 34 2c 4c 53 4c 20 23 33 0d 16 |,r5,r14,LSL #3..| 00003c00 c6 24 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |.$ ADD | 00003c10 20 20 72 30 2c 72 30 2c 72 31 34 2c 4c 53 4c 20 | r0,r0,r14,LSL | 00003c20 23 32 0d 16 d0 1d 20 20 20 20 20 20 20 20 42 4c |#2.... BL| 00003c30 20 20 20 20 20 20 69 6e 76 69 73 69 62 6c 65 0d | invisible.| 00003c40 16 da 21 20 20 20 20 20 20 20 20 42 45 51 20 20 |..! BEQ | 00003c50 20 20 20 6e 65 78 74 5f 72 70 5f 6c 6f 6f 70 32 | next_rp_loop2| 00003c60 0d 16 e4 1d 20 20 20 20 20 20 20 20 41 44 44 20 |.... ADD | 00003c70 20 20 20 20 72 31 34 2c 72 33 2c 23 31 0d 16 ee | r14,r3,#1...| 00003c80 1a 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 |. CMP | 00003c90 20 72 31 34 2c 72 39 0d 16 f8 17 20 20 20 20 20 | r14,r9.... | 00003ca0 20 20 20 ec 51 20 20 20 72 31 34 2c 23 30 0d 17 | .Q r14,#0..| 00003cb0 02 24 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |.$ ADD | 00003cc0 20 20 72 30 2c 72 35 2c 72 31 34 2c 4c 53 4c 20 | r0,r5,r14,LSL | 00003cd0 23 33 0d 17 0c 24 20 20 20 20 20 20 20 20 41 44 |#3...$ AD| 00003ce0 44 20 20 20 20 20 72 30 2c 72 30 2c 72 31 34 2c |D r0,r0,r14,| 00003cf0 4c 53 4c 20 23 32 0d 17 16 1d 20 20 20 20 20 20 |LSL #2.... | 00003d00 20 20 42 4c 20 20 20 20 20 20 69 6e 76 69 73 69 | BL invisi| 00003d10 62 6c 65 0d 17 20 22 20 20 20 20 20 20 20 20 42 |ble.. " B| 00003d20 45 51 20 20 20 20 20 6e 6f 5f 6e 65 65 64 5f 74 |EQ no_need_t| 00003d30 6f 5f 69 6e 73 0d 17 2a 28 20 20 20 20 20 20 20 |o_ins..*( | 00003d40 20 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b | STMFD (sp)!,{| 00003d50 72 31 2c 72 37 2c 72 38 2c 72 31 30 7d 0d 17 34 |r1,r7,r8,r10}..4| 00003d60 1d 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 |. SUB | 00003d70 20 72 31 30 2c 72 39 2c 23 31 0d 17 3e 24 20 20 | r10,r9,#1..>$ | 00003d80 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 37 | ADD r7| 00003d90 2c 72 35 2c 72 31 30 2c 4c 53 4c 20 23 33 0d 17 |,r5,r10,LSL #3..| 00003da0 48 24 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |H$ ADD | 00003db0 20 20 72 37 2c 72 37 2c 72 31 30 2c 4c 53 4c 20 | r7,r7,r10,LSL | 00003dc0 23 32 0d 17 52 1d 20 20 20 20 20 20 20 20 41 44 |#2..R. AD| 00003dd0 44 20 20 20 20 20 72 38 2c 72 37 2c 23 31 32 0d |D r8,r7,#12.| 00003de0 17 5c 10 2e 72 70 5f 69 6e 73 5f 6c 6f 6f 70 0d |.\..rp_ins_loop.| 00003df0 17 66 1e 20 20 20 20 20 20 20 20 4c 44 4d 49 41 |.f. LDMIA| 00003e00 20 20 20 72 37 2c 7b 72 30 2d 72 32 7d 0d 17 70 | r7,{r0-r2}..p| 00003e10 1e 20 20 20 20 20 20 20 20 53 54 4d 49 41 20 20 |. STMIA | 00003e20 20 72 38 2c 7b 72 30 2d 72 32 7d 0d 17 7a 1d 20 | r8,{r0-r2}..z. | 00003e30 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 72 | SUB r| 00003e40 37 2c 72 37 2c 23 31 32 0d 17 84 1d 20 20 20 20 |7,r7,#12.... | 00003e50 20 20 20 20 53 55 42 20 20 20 20 20 72 38 2c 72 | SUB r8,r| 00003e60 38 2c 23 31 32 0d 17 8e 1e 20 20 20 20 20 20 20 |8,#12.... | 00003e70 20 53 55 42 20 20 20 20 20 72 31 30 2c 72 31 30 | SUB r10,r10| 00003e80 2c 23 31 0d 17 98 1a 20 20 20 20 20 20 20 20 43 |,#1.... C| 00003e90 4d 50 20 20 20 20 20 72 31 30 2c 72 33 0d 17 a2 |MP r10,r3...| 00003ea0 1f 20 20 20 20 20 20 20 20 42 47 45 20 20 20 20 |. BGE | 00003eb0 20 72 70 5f 69 6e 73 5f 6c 6f 6f 70 0d 17 ac 28 | rp_ins_loop...(| 00003ec0 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 00003ed0 28 73 70 29 21 2c 7b 72 31 2c 72 37 2c 72 38 2c |(sp)!,{r1,r7,r8,| 00003ee0 72 31 30 7d 0d 17 b6 1c 20 20 20 20 20 20 20 20 |r10}.... | 00003ef0 41 44 44 20 20 20 20 20 72 39 2c 72 39 2c 23 31 |ADD r9,r9,#1| 00003f00 0d 17 c0 13 2e 6e 6f 5f 6e 65 65 64 5f 74 6f 5f |.....no_need_to_| 00003f10 69 6e 73 0d 17 ca 21 20 20 20 20 20 20 20 20 53 |ins...! S| 00003f20 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 30 |TMFD (sp)!,{r0| 00003f30 2d 72 33 7d 0d 17 d4 23 20 20 20 20 20 20 20 20 |-r3}...# | 00003f40 41 44 44 20 20 20 20 20 72 30 2c 72 35 2c 72 33 |ADD r0,r5,r3| 00003f50 2c 4c 53 4c 20 23 33 0d 17 de 23 20 20 20 20 20 |,LSL #3...# | 00003f60 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 30 | ADD r0,r0| 00003f70 2c 72 33 2c 4c 53 4c 20 23 32 0d 17 e8 1d 20 20 |,r3,LSL #2.... | 00003f80 20 20 20 20 20 20 53 55 42 53 20 20 20 20 72 31 | SUBS r1| 00003f90 34 2c 72 33 2c 23 31 0d 17 f2 1e 20 20 20 20 20 |4,r3,#1.... | 00003fa0 20 20 20 41 44 44 4d 49 20 20 20 72 31 34 2c 72 | ADDMI r14,r| 00003fb0 31 34 2c 72 39 0d 17 fc 24 20 20 20 20 20 20 20 |14,r9...$ | 00003fc0 20 41 44 44 20 20 20 20 20 72 31 2c 72 35 2c 72 | ADD r1,r5,r| 00003fd0 31 34 2c 4c 53 4c 20 23 33 0d 18 06 24 20 20 20 |14,LSL #3...$ | 00003fe0 20 20 20 20 20 41 44 44 20 20 20 20 20 72 31 2c | ADD r1,| 00003ff0 72 31 2c 72 31 34 2c 4c 53 4c 20 23 32 0d 18 10 |r1,r14,LSL #2...| 00004000 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |. MOV | 00004010 20 72 32 2c 72 30 0d 18 1a 1e 20 20 20 20 20 20 | r2,r0.... | 00004020 20 20 4c 44 52 20 20 20 20 20 72 33 2c 5b 73 70 | LDR r3,[sp| 00004030 2c 23 34 5d 0d 18 24 19 20 20 20 20 20 20 20 20 |,#4]..$. | 00004040 42 4c 20 20 20 20 20 20 73 6c 69 64 65 0d 18 2e |BL slide...| 00004050 1f 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 |. LDR | 00004060 20 72 33 2c 5b 73 70 2c 23 31 32 5d 0d 18 38 1c | r3,[sp,#12]..8.| 00004070 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 00004080 72 33 2c 72 33 2c 23 31 0d 18 42 19 20 20 20 20 |r3,r3,#1..B. | 00004090 20 20 20 20 43 4d 50 20 20 20 20 20 72 33 2c 72 | CMP r3,r| 000040a0 39 0d 18 4c 16 20 20 20 20 20 20 20 20 ec 51 20 |9..L. .Q | 000040b0 20 20 72 33 2c 23 30 0d 18 56 23 20 20 20 20 20 | r3,#0..V# | 000040c0 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 72 35 | ADD r0,r5| 000040d0 2c 72 33 2c 4c 53 4c 20 23 33 0d 18 60 23 20 20 |,r3,LSL #3..`# | 000040e0 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 30 | ADD r0| 000040f0 2c 72 30 2c 72 33 2c 4c 53 4c 20 23 32 0d 18 6a |,r0,r3,LSL #2..j| 00004100 1d 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |. ADD | 00004110 20 72 31 34 2c 72 33 2c 23 31 0d 18 74 1a 20 20 | r14,r3,#1..t. | 00004120 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 31 | CMP r1| 00004130 34 2c 72 39 0d 18 7e 17 20 20 20 20 20 20 20 20 |4,r9..~. | 00004140 ec 51 20 20 20 72 31 34 2c 23 30 0d 18 88 24 20 |.Q r14,#0...$ | 00004150 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 00004160 31 2c 72 35 2c 72 31 34 2c 4c 53 4c 20 23 33 0d |1,r5,r14,LSL #3.| 00004170 18 92 24 20 20 20 20 20 20 20 20 41 44 44 20 20 |..$ ADD | 00004180 20 20 20 72 31 2c 72 31 2c 72 31 34 2c 4c 53 4c | r1,r1,r14,LSL| 00004190 20 23 32 0d 18 9c 19 20 20 20 20 20 20 20 20 4d | #2.... M| 000041a0 4f 56 20 20 20 20 20 72 32 2c 72 30 0d 18 a6 1e |OV r2,r0....| 000041b0 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 000041c0 72 33 2c 5b 73 70 2c 23 34 5d 0d 18 b0 19 20 20 |r3,[sp,#4].... | 000041d0 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 73 6c | BL sl| 000041e0 69 64 65 0d 18 ba 21 20 20 20 20 20 20 20 20 4c |ide...! L| 000041f0 44 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 30 |DMFD (sp)!,{r0| 00004200 2d 72 33 7d 0d 18 c4 1c 20 20 20 20 20 20 20 20 |-r3}.... | 00004210 41 44 44 20 20 20 20 20 72 33 2c 72 33 2c 23 32 |ADD r3,r3,#2| 00004220 0d 18 ce 12 2e 6e 65 78 74 5f 72 70 5f 6c 6f 6f |.....next_rp_loo| 00004230 70 32 0d 18 d8 1c 20 20 20 20 20 20 20 20 41 44 |p2.... AD| 00004240 44 20 20 20 20 20 72 33 2c 72 33 2c 23 31 0d 18 |D r3,r3,#1..| 00004250 e2 1c 20 20 20 20 20 20 20 20 42 20 20 20 20 20 |.. B | 00004260 20 20 72 70 5f 6c 6f 6f 70 32 0d 18 ec 12 2e 64 | rp_loop2.....d| 00004270 6f 6e 65 5f 72 70 5f 6c 6f 6f 70 32 0d 18 f6 17 |one_rp_loop2....| 00004280 2e 72 70 5f 6e 6f 5f 6e 65 65 64 5f 74 6f 5f 63 |.rp_no_need_to_c| 00004290 6c 69 70 0d 19 00 1c 20 20 20 20 20 20 20 20 41 |lip.... A| 000042a0 44 44 20 20 20 20 20 72 31 2c 72 31 2c 23 31 0d |DD r1,r1,#1.| 000042b0 19 0a 19 20 20 20 20 20 20 20 20 43 4d 50 20 20 |... CMP | 000042c0 20 20 20 72 31 2c 23 36 0d 19 14 20 20 20 20 20 | r1,#6... | 000042d0 20 20 20 20 42 4c 54 20 20 20 20 20 72 70 5f 63 | BLT rp_c| 000042e0 6c 69 70 5f 6c 6f 6f 70 0d 19 1e 20 20 20 20 20 |lip_loop... | 000042f0 20 20 20 20 a4 61 64 72 6c 28 31 31 2c 70 6f 6c | .adrl(11,pol| 00004300 79 5f 70 6f 69 6e 74 29 0d 19 28 1f 20 20 20 20 |y_point)..(. | 00004310 20 20 20 20 4c 44 4d 49 41 20 20 20 72 31 31 2c | LDMIA r11,| 00004320 7b 72 36 2d 72 38 7d 0d 19 32 20 20 20 20 20 20 |{r6-r8}..2 | 00004330 20 20 20 4c 44 52 20 20 20 20 20 72 30 2c 5b 73 | LDR r0,[s| 00004340 70 2c 23 34 2a 39 5d 0d 19 3c 21 20 20 20 20 20 |p,#4*9]..<! | 00004350 20 20 20 54 53 54 20 20 20 20 20 72 30 2c 23 62 | TST r0,#b| 00004360 69 74 5f 6d 65 72 67 65 0d 19 46 27 20 20 20 20 |it_merge..F' | 00004370 20 20 20 20 4c 44 52 45 51 20 20 20 72 30 2c 5b | LDREQ r0,[| 00004380 72 31 30 2c 23 73 75 72 66 5f 74 79 70 65 5d 0d |r10,#surf_type].| 00004390 19 50 19 20 20 20 20 20 20 20 20 43 4d 50 45 51 |.P. CMPEQ| 000043a0 20 20 20 72 30 2c 23 30 0d 19 5a 20 20 20 20 20 | r0,#0..Z | 000043b0 20 20 20 20 42 4e 45 20 20 20 20 20 6e 6f 74 5f | BNE not_| 000043c0 6e 65 77 5f 70 6f 6c 79 0d 19 64 20 20 20 20 20 |new_poly..d | 000043d0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c 23 | MOV r0,#| 000043e0 64 69 73 70 5f 72 65 71 0d 19 6e 1a 20 20 20 20 |disp_req..n. | 000043f0 20 20 20 20 42 4c 20 20 20 20 20 20 6d 61 6c 6c | BL mall| 00004400 6f 63 0d 19 78 1b 20 20 20 20 20 20 20 20 53 54 |oc..x. ST| 00004410 52 56 53 20 20 20 72 30 2c 5b 73 70 5d 0d 19 82 |RVS r0,[sp]...| 00004420 25 20 20 20 20 20 20 20 20 4c 44 4d 56 53 46 44 |% LDMVSFD| 00004430 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 70 | (sp)!,{r0-r11,p| 00004440 63 7d 0d 19 8c 19 20 20 20 20 20 20 20 20 4d 4f |c}.... MO| 00004450 56 20 20 20 20 20 72 34 2c 72 30 0d 19 96 21 20 |V r4,r0...! | 00004460 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00004470 30 2c 23 26 37 30 30 30 30 30 30 30 0d 19 a0 1c |0,#&70000000....| 00004480 20 20 20 20 20 20 20 20 52 53 42 20 20 20 20 20 | RSB | 00004490 72 31 2c 72 30 2c 23 30 0d 19 aa 19 20 20 20 20 |r1,r0,#0.... | 000044a0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 32 2c 23 | MOV r2,#| 000044b0 30 0d 19 b4 1e 20 20 20 20 20 20 20 20 53 54 4d |0.... STM| 000044c0 49 41 20 20 20 72 34 2c 7b 72 30 2d 72 32 7d 0d |IA r4,{r0-r2}.| 000044d0 19 be 20 20 20 20 20 20 20 20 20 43 4d 50 20 20 |.. CMP | 000044e0 20 20 20 72 37 2c 72 38 2c 4c 53 4c 20 23 32 0d | r7,r8,LSL #2.| 000044f0 19 c8 28 20 20 20 20 20 20 20 20 42 4e 45 20 20 |..( BNE | 00004500 20 20 20 64 6f 6e 74 5f 65 78 74 65 6e 64 5f 72 | dont_extend_r| 00004510 70 5f 74 61 62 6c 65 0d 19 d2 19 20 20 20 20 20 |p_table.... | 00004520 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c 72 36 | MOV r0,r6| 00004530 0d 19 dc 22 20 20 20 20 20 20 20 20 4d 4f 56 20 |..." MOV | 00004540 20 20 20 20 72 31 2c 23 70 6f 6c 79 5f 63 68 75 | r1,#poly_chu| 00004550 6e 6b 0d 19 e6 1b 20 20 20 20 20 20 20 20 42 4c |nk.... BL| 00004560 20 20 20 20 20 20 72 65 61 6c 6c 6f 63 0d 19 f0 | realloc...| 00004570 1b 20 20 20 20 20 20 20 20 53 54 52 56 53 20 20 |. STRVS | 00004580 20 72 30 2c 5b 73 70 5d 0d 19 fa 25 20 20 20 20 | r0,[sp]...% | 00004590 20 20 20 20 4c 44 4d 56 53 46 44 20 28 73 70 29 | LDMVSFD (sp)| 000045a0 21 2c 7b 72 30 2d 72 31 31 2c 70 63 7d 0d 1a 04 |!,{r0-r11,pc}...| 000045b0 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |. MOV | 000045c0 20 72 36 2c 72 30 0d 1a 0e 25 20 20 20 20 20 20 | r6,r0...% | 000045d0 20 20 41 44 44 20 20 20 20 20 72 37 2c 72 37 2c | ADD r7,r7,| 000045e0 23 70 6f 6c 79 5f 63 68 75 6e 6b 0d 1a 18 1f 20 |#poly_chunk.... | 000045f0 20 20 20 20 20 20 20 53 54 4d 49 41 20 20 20 72 | STMIA r| 00004600 31 31 2c 7b 72 36 2d 72 38 7d 0d 1a 22 19 2e 64 |11,{r6-r8}.."..d| 00004610 6f 6e 74 5f 65 78 74 65 6e 64 5f 72 70 5f 74 61 |ont_extend_rp_ta| 00004620 62 6c 65 0d 1a 2c 25 20 20 20 20 20 20 20 20 53 |ble..,% S| 00004630 54 52 20 20 20 20 20 72 34 2c 5b 72 36 2c 72 38 |TR r4,[r6,r8| 00004640 2c 4c 53 4c 20 23 32 5d 0d 1a 36 1c 20 20 20 20 |,LSL #2]..6. | 00004650 20 20 20 20 41 44 44 20 20 20 20 20 72 38 2c 72 | ADD r8,r| 00004660 38 2c 23 31 0d 1a 40 1f 20 20 20 20 20 20 20 20 |8,#1..@. | 00004670 53 54 52 20 20 20 20 20 72 38 2c 5b 72 31 31 2c |STR r8,[r11,| 00004680 23 38 5d 0d 1a 4a 20 20 20 20 20 20 20 20 20 4d |#8]..J M| 00004690 4f 56 20 20 20 20 20 72 30 2c 23 64 69 73 70 5f |OV r0,#disp_| 000046a0 64 61 74 0d 1a 54 1a 20 20 20 20 20 20 20 20 a4 |dat..T. .| 000046b0 73 74 72 28 30 2c 72 70 5f 70 74 72 29 0d 1a 5e |str(0,rp_ptr)..^| 000046c0 11 2e 6e 6f 74 5f 6e 65 77 5f 70 6f 6c 79 0d 1a |..not_new_poly..| 000046d0 68 1c 20 20 20 20 20 20 20 20 53 55 42 20 20 20 |h. SUB | 000046e0 20 20 72 32 2c 72 38 2c 23 31 0d 1a 72 25 20 20 | r2,r8,#1..r% | 000046f0 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 30 | LDR r0| 00004700 2c 5b 72 36 2c 72 32 2c 4c 53 4c 20 23 32 5d 0d |,[r6,r2,LSL #2].| 00004710 1a 7c 20 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |.| MOV | 00004720 20 20 20 72 31 2c 72 39 2c 4c 53 4c 20 23 33 0d | r1,r9,LSL #3.| 00004730 1a 86 1c 20 20 20 20 20 20 20 20 41 44 44 20 20 |... ADD | 00004740 20 20 20 72 31 2c 72 31 2c 23 38 0d 1a 90 1b 20 | r1,r1,#8.... | 00004750 20 20 20 20 20 20 20 42 4c 20 20 20 20 20 20 72 | BL r| 00004760 65 61 6c 6c 6f 63 0d 1a 9a 1b 20 20 20 20 20 20 |ealloc.... | 00004770 20 20 53 54 52 56 53 20 20 20 72 30 2c 5b 73 70 | STRVS r0,[sp| 00004780 5d 0d 1a a4 25 20 20 20 20 20 20 20 20 4c 44 4d |]...% LDM| 00004790 56 53 46 44 20 28 73 70 29 21 2c 7b 72 30 2d 72 |VSFD (sp)!,{r0-r| 000047a0 31 31 2c 70 63 7d 0d 1a ae 25 20 20 20 20 20 20 |11,pc}...% | 000047b0 20 20 53 54 52 20 20 20 20 20 72 30 2c 5b 72 36 | STR r0,[r6| 000047c0 2c 72 32 2c 4c 53 4c 20 23 32 5d 0d 1a b8 19 20 |,r2,LSL #2].... | 000047d0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 000047e0 34 2c 72 30 0d 1a c2 1a 20 20 20 20 20 20 20 20 |4,r0.... | 000047f0 a4 6c 64 72 28 33 2c 72 70 5f 70 74 72 29 0d 1a |.ldr(3,rp_ptr)..| 00004800 cc 29 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 |.) LDR | 00004810 20 20 72 30 2c 5b 72 31 30 2c 23 73 75 72 66 5f | r0,[r10,#surf_| 00004820 63 6f 6c 6f 75 72 5d 0d 1a d6 1e 20 20 20 20 20 |colour].... | 00004830 20 20 20 53 54 52 20 20 20 20 20 72 30 2c 5b 72 | STR r0,[r| 00004840 34 2c 72 33 5d 0d 1a e0 1c 20 20 20 20 20 20 20 |4,r3].... | 00004850 20 41 44 44 20 20 20 20 20 72 33 2c 72 33 2c 23 | ADD r3,r3,#| 00004860 34 0d 1a ea 1e 20 20 20 20 20 20 20 20 53 54 52 |4.... STR| 00004870 20 20 20 20 20 72 39 2c 5b 72 34 2c 72 33 5d 0d | r9,[r4,r3].| 00004880 1a f4 1c 20 20 20 20 20 20 20 20 41 44 44 20 20 |... ADD | 00004890 20 20 20 72 33 2c 72 33 2c 23 34 0d 1a fe 04 0d | r3,r3,#4.....| 000048a0 1b 08 23 20 20 20 20 20 20 20 20 4c 44 52 20 20 |..# LDR | 000048b0 20 20 20 72 30 2c 5b 72 34 2c 23 64 69 73 70 5f | r0,[r4,#disp_| 000048c0 6e 5d 0d 1b 12 1c 20 20 20 20 20 20 20 20 41 44 |n].... AD| 000048d0 44 20 20 20 20 20 72 30 2c 72 30 2c 23 31 0d 1b |D r0,r0,#1..| 000048e0 1c 23 20 20 20 20 20 20 20 20 53 54 52 20 20 20 |.# STR | 000048f0 20 20 72 30 2c 5b 72 34 2c 23 64 69 73 70 5f 6e | r0,[r4,#disp_n| 00004900 5d 0d 1b 26 04 0d 1b 30 17 20 20 20 20 20 20 20 |]..&...0. | 00004910 20 a4 61 64 72 6c 28 31 34 2c 73 29 0d 1b 3a 21 | .adrl(14,s)..:!| 00004920 20 20 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 | LDMIA | 00004930 72 31 34 2c 7b 72 31 30 2c 72 31 31 7d 0d 1b 44 |r14,{r10,r11}..D| 00004940 0f 2e 70 65 72 73 70 5f 6c 6f 6f 70 0d 1b 4e 1f |..persp_loop..N.| 00004950 20 20 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 | LDMIA | 00004960 72 35 21 2c 7b 72 36 2d 72 38 7d 0d 1b 58 1e 20 |r5!,{r6-r8}..X. | 00004970 20 20 20 20 20 20 20 4c 44 4d 49 41 20 20 20 72 | LDMIA r| 00004980 34 2c 7b 72 30 2c 72 31 7d 0d 1b 62 19 20 20 20 |4,{r0,r1}..b. | 00004990 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 38 2c | CMP r8,| 000049a0 72 30 0d 1b 6c 19 20 20 20 20 20 20 20 20 4d 4f |r0..l. MO| 000049b0 56 4c 54 20 20 20 72 30 2c 72 38 0d 1b 76 19 20 |VLT r0,r8..v. | 000049c0 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 | CMP r| 000049d0 38 2c 72 31 0d 1b 80 19 20 20 20 20 20 20 20 20 |8,r1.... | 000049e0 4d 4f 56 47 54 20 20 20 72 31 2c 72 38 0d 1b 8a |MOVGT r1,r8...| 000049f0 1e 20 20 20 20 20 20 20 20 53 54 4d 49 41 20 20 |. STMIA | 00004a00 20 72 34 2c 7b 72 30 2c 72 31 7d 0d 1b 94 1d 20 | r4,{r0,r1}.... | 00004a10 20 20 20 20 20 20 20 4d 55 4c 20 20 20 20 20 72 | MUL r| 00004a20 30 2c 72 36 2c 72 31 30 0d 1b 9e 1d 20 20 20 20 |0,r6,r10.... | 00004a30 20 20 20 20 41 44 44 20 20 20 20 20 72 31 2c 72 | ADD r1,r| 00004a40 38 2c 72 31 31 0d 1b a8 1a 20 20 20 20 20 20 20 |8,r11.... | 00004a50 20 42 4c 20 20 20 20 20 20 64 69 76 69 64 65 0d | BL divide.| 00004a60 1b b2 1e 20 20 20 20 20 20 20 20 53 54 52 20 20 |... STR | 00004a70 20 20 20 72 32 2c 5b 72 34 2c 72 33 5d 0d 1b bc | r2,[r4,r3]...| 00004a80 1c 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 |. ADD | 00004a90 20 72 33 2c 72 33 2c 23 34 0d 1b c6 1d 20 20 20 | r3,r3,#4.... | 00004aa0 20 20 20 20 20 4d 55 4c 20 20 20 20 20 72 30 2c | MUL r0,| 00004ab0 72 37 2c 72 31 30 0d 1b d0 1d 20 20 20 20 20 20 |r7,r10.... | 00004ac0 20 20 41 44 44 20 20 20 20 20 72 31 2c 72 38 2c | ADD r1,r8,| 00004ad0 72 31 31 0d 1b da 1a 20 20 20 20 20 20 20 20 42 |r11.... B| 00004ae0 4c 20 20 20 20 20 20 64 69 76 69 64 65 0d 1b e4 |L divide...| 00004af0 1e 20 20 20 20 20 20 20 20 53 54 52 20 20 20 20 |. STR | 00004b00 20 72 32 2c 5b 72 34 2c 72 33 5d 0d 1b ee 1c 20 | r2,[r4,r3].... | 00004b10 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 72 | ADD r| 00004b20 33 2c 72 33 2c 23 34 0d 1b f8 1c 20 20 20 20 20 |3,r3,#4.... | 00004b30 20 20 20 53 55 42 53 20 20 20 20 72 39 2c 72 39 | SUBS r9,r9| 00004b40 2c 23 31 0d 1c 02 1e 20 20 20 20 20 20 20 20 42 |,#1.... B| 00004b50 4e 45 20 20 20 20 20 70 65 72 73 70 5f 6c 6f 6f |NE persp_loo| 00004b60 70 0d 1c 0c 1a 20 20 20 20 20 20 20 20 a4 73 74 |p.... .st| 00004b70 72 28 33 2c 72 70 5f 70 74 72 29 0d 1c 16 25 20 |r(3,rp_ptr)...% | 00004b80 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 28 | LDMFD (| 00004b90 73 70 29 21 2c 7b 72 30 2d 72 31 31 2c 70 63 7d |sp)!,{r0-r11,pc}| 00004ba0 0d 1c 20 04 0d 1c 2a 15 2e 7a 6d 69 6e 20 20 20 |.. ...*..zmin | 00004bb0 44 43 44 20 20 20 20 20 30 0d 1c 34 15 2e 7a 6d |DCD 0..4..zm| 00004bc0 61 78 20 20 20 44 43 44 20 20 20 20 20 30 0d 1c |ax DCD 0..| 00004bd0 3e 04 0d 1c 48 17 2e 72 65 61 64 5f 73 63 72 65 |>...H..read_scre| 00004be0 65 6e 5f 6c 69 6d 69 74 73 0d 1c 52 27 20 20 20 |en_limits..R' | 00004bf0 20 20 20 20 20 53 54 4d 46 44 20 20 20 28 73 70 | STMFD (sp| 00004c00 29 21 2c 7b 72 30 2d 72 31 31 2c 6c 69 6e 6b 7d |)!,{r0-r11,link}| 00004c10 0d 1c 5c 1f 20 20 20 20 20 20 20 20 41 44 52 20 |..\. ADR | 00004c20 20 20 20 20 72 30 2c 76 64 75 5f 6c 69 73 74 0d | r0,vdu_list.| 00004c30 1c 66 19 20 20 20 20 20 20 20 20 a4 61 64 72 6c |.f. .adrl| 00004c40 28 31 2c 67 77 78 30 29 0d 1c 70 2a 20 20 20 20 |(1,gwx0)..p* | 00004c50 20 20 20 20 53 57 49 20 20 20 20 20 22 58 4f 53 | SWI "XOS| 00004c60 5f 52 65 61 64 56 64 75 56 61 72 69 61 62 6c 65 |_ReadVduVariable| 00004c70 73 22 0d 1c 7a 1e 20 20 20 20 20 20 20 20 4c 44 |s"..z. LD| 00004c80 4d 49 41 20 20 20 72 31 2c 7b 72 32 2d 72 39 7d |MIA r1,{r2-r9}| 00004c90 0d 1c 84 20 20 20 20 20 20 20 20 20 4d 4f 56 20 |... MOV | 00004ca0 20 20 20 20 72 32 2c 72 32 2c 4c 53 4c 20 72 38 | r2,r2,LSL r8| 00004cb0 0d 1c 8e 1c 20 20 20 20 20 20 20 20 53 55 42 20 |.... SUB | 00004cc0 20 20 20 20 72 32 2c 72 32 2c 72 36 0d 1c 98 1d | r2,r2,r6....| 00004cd0 20 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 | SUB | 00004ce0 72 32 2c 72 32 2c 23 36 34 0d 1c a2 20 20 20 20 |r2,r2,#64... | 00004cf0 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 33 2c | MOV r3,| 00004d00 72 33 2c 4c 53 4c 20 72 39 0d 1c ac 1c 20 20 20 |r3,LSL r9.... | 00004d10 20 20 20 20 20 53 55 42 20 20 20 20 20 72 33 2c | SUB r3,| 00004d20 72 33 2c 72 37 0d 1c b6 1d 20 20 20 20 20 20 20 |r3,r7.... | 00004d30 20 53 55 42 20 20 20 20 20 72 33 2c 72 33 2c 23 | SUB r3,r3,#| 00004d40 36 34 0d 1c c0 20 20 20 20 20 20 20 20 20 4d 4f |64... MO| 00004d50 56 20 20 20 20 20 72 34 2c 72 34 2c 4c 53 4c 20 |V r4,r4,LSL | 00004d60 72 38 0d 1c ca 1c 20 20 20 20 20 20 20 20 53 55 |r8.... SU| 00004d70 42 20 20 20 20 20 72 34 2c 72 34 2c 72 36 0d 1c |B r4,r4,r6..| 00004d80 d4 1d 20 20 20 20 20 20 20 20 41 44 44 20 20 20 |.. ADD | 00004d90 20 20 72 34 2c 72 34 2c 23 36 34 0d 1c de 20 20 | r4,r4,#64... | 00004da0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00004db0 35 2c 72 35 2c 4c 53 4c 20 72 39 0d 1c e8 1c 20 |5,r5,LSL r9.... | 00004dc0 20 20 20 20 20 20 20 53 55 42 20 20 20 20 20 72 | SUB r| 00004dd0 35 2c 72 35 2c 72 37 0d 1c f2 1d 20 20 20 20 20 |5,r5,r7.... | 00004de0 20 20 20 41 44 44 20 20 20 20 20 72 35 2c 72 35 | ADD r5,r5| 00004df0 2c 23 36 34 0d 1c fc 1d 20 20 20 20 20 20 20 20 |,#64.... | 00004e00 a4 61 64 72 6c 28 31 2c 73 63 72 5f 6d 69 6e 78 |.adrl(1,scr_minx| 00004e10 29 0d 1d 06 1e 20 20 20 20 20 20 20 20 53 54 4d |).... STM| 00004e20 49 41 20 20 20 72 31 2c 7b 72 32 2d 72 35 7d 0d |IA r1,{r2-r5}.| 00004e30 1d 10 25 20 20 20 20 20 20 20 20 4c 44 4d 46 44 |..% LDMFD| 00004e40 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 | (sp)!,{r0-r11| 00004e50 2c 70 63 7d 0d 1d 1a 04 0d 1d 24 0d 2e 76 64 75 |,pc}......$..vdu| 00004e60 5f 6c 69 73 74 0d 1d 2e 17 20 20 20 20 20 20 20 |_list.... | 00004e70 20 44 43 44 20 20 20 20 20 31 32 38 0d 1d 38 17 | DCD 128..8.| 00004e80 20 20 20 20 20 20 20 20 44 43 44 20 20 20 20 20 | DCD | 00004e90 31 32 39 0d 1d 42 17 20 20 20 20 20 20 20 20 44 |129..B. D| 00004ea0 43 44 20 20 20 20 20 31 33 30 0d 1d 4c 17 20 20 |CD 130..L. | 00004eb0 20 20 20 20 20 20 44 43 44 20 20 20 20 20 31 33 | DCD 13| 00004ec0 31 0d 1d 56 17 20 20 20 20 20 20 20 20 44 43 44 |1..V. DCD| 00004ed0 20 20 20 20 20 31 33 36 0d 1d 60 17 20 20 20 20 | 136..`. | 00004ee0 20 20 20 20 44 43 44 20 20 20 20 20 31 33 37 0d | DCD 137.| 00004ef0 1d 6a 15 20 20 20 20 20 20 20 20 44 43 44 20 20 |.j. DCD | 00004f00 20 20 20 34 0d 1d 74 15 20 20 20 20 20 20 20 20 | 4..t. | 00004f10 44 43 44 20 20 20 20 20 35 0d 1d 7e 16 20 20 20 |DCD 5..~. | 00004f20 20 20 20 20 20 44 43 44 20 20 20 20 20 2d 31 0d | DCD -1.| 00004f30 1d 88 05 20 0d 1d 92 47 20 3b 20 72 38 2d 3e 6c |... ...G ; r8->l| 00004f40 69 73 74 20 6f 66 20 61 6e 67 6c 65 73 2c 20 72 |ist of angles, r| 00004f50 30 2d 3e 70 6f 69 6e 74 20 74 6f 20 72 6f 74 61 |0->point to rota| 00004f60 74 65 2c 20 72 32 2d 3e 77 68 65 72 65 20 74 6f |te, r2->where to| 00004f70 20 70 75 74 20 72 65 73 75 6c 74 0d 1d 9c 05 20 | put result.... | 00004f80 0d 1d a6 13 2e 72 6f 74 61 74 65 5f 62 79 5f 6c |.....rotate_by_l| 00004f90 69 73 74 0d 1d b0 29 20 20 20 20 20 20 20 20 53 |ist...) S| 00004fa0 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 30 |TMFD (sp)!,{r0| 00004fb0 2d 72 32 2c 72 38 2c 6c 69 6e 6b 7d 0d 1d ba 18 |-r2,r8,link}....| 00004fc0 2e 72 6f 74 61 74 65 5f 62 79 5f 6c 69 73 74 5f |.rotate_by_list_| 00004fd0 6c 6f 6f 70 0d 1d c4 20 20 20 20 20 20 20 20 20 |loop... | 00004fe0 4c 44 52 20 20 20 20 20 72 31 2c 5b 72 38 2c 23 |LDR r1,[r8,#| 00004ff0 2d 34 5d 21 0d 1d ce 19 20 20 20 20 20 20 20 20 |-4]!.... | 00005000 43 4d 50 20 20 20 20 20 72 31 2c 23 30 0d 1d d8 |CMP r1,#0...| 00005010 27 20 20 20 20 20 20 20 20 4c 44 4d 4c 54 46 44 |' LDMLTFD| 00005020 20 28 73 70 29 21 2c 7b 72 30 2d 72 32 2c 72 38 | (sp)!,{r0-r2,r8| 00005030 2c 70 63 7d 0d 1d e2 1a 20 20 20 20 20 20 20 20 |,pc}.... | 00005040 42 4c 20 20 20 20 20 20 72 6f 74 61 74 65 0d 1d |BL rotate..| 00005050 ec 19 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.. MOV | 00005060 20 20 72 30 2c 72 32 0d 1d f6 27 20 20 20 20 20 | r0,r2...' | 00005070 20 20 20 42 20 20 20 20 20 20 20 72 6f 74 61 74 | B rotat| 00005080 65 5f 62 79 5f 6c 69 73 74 5f 6c 6f 6f 70 0d 1e |e_by_list_loop..| 00005090 00 04 0d 1e 0a 27 2e 72 6f 74 61 74 65 20 53 54 |.....'.rotate ST| 000050a0 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 30 2d |MFD (sp)!,{r0-| 000050b0 72 31 31 2c 6c 69 6e 6b 7d 0d 1e 14 1e 20 20 20 |r11,link}.... | 000050c0 20 20 20 20 20 4c 44 4d 49 41 20 20 20 72 30 2c | LDMIA r0,| 000050d0 7b 72 33 2d 72 35 7d 0d 1e 1e 04 0d 1e 28 19 20 |{r3-r5}......(. | 000050e0 20 20 20 20 20 20 20 4d 4f 56 53 20 20 20 20 72 | MOVS r| 000050f0 36 2c 72 33 0d 1e 32 1c 20 20 20 20 20 20 20 20 |6,r3..2. | 00005100 52 53 42 4d 49 20 20 20 72 36 2c 72 36 2c 23 30 |RSBMI r6,r6,#0| 00005110 0d 1e 3c 19 20 20 20 20 20 20 20 20 4d 4f 56 53 |..<. MOVS| 00005120 20 20 20 20 72 37 2c 72 34 0d 1e 46 1c 20 20 20 | r7,r4..F. | 00005130 20 20 20 20 20 52 53 42 4d 49 20 20 20 72 37 2c | RSBMI r7,| 00005140 72 37 2c 23 30 0d 1e 50 1b 20 20 20 20 20 20 20 |r7,#0..P. | 00005150 20 84 52 20 20 20 20 20 72 36 2c 72 36 2c 72 37 | .R r6,r6,r7| 00005160 0d 1e 5a 19 20 20 20 20 20 20 20 20 4d 4f 56 53 |..Z. MOVS| 00005170 20 20 20 20 72 38 2c 72 35 0d 1e 64 1c 20 20 20 | r8,r5..d. | 00005180 20 20 20 20 20 52 53 42 4d 49 20 20 20 72 38 2c | RSBMI r8,| 00005190 72 38 2c 23 30 0d 1e 6e 1b 20 20 20 20 20 20 20 |r8,#0..n. | 000051a0 20 84 52 20 20 20 20 20 72 36 2c 72 36 2c 72 38 | .R r6,r6,r8| 000051b0 0d 1e 78 04 0d 1e 82 1a 20 20 20 20 20 20 20 20 |..x..... | 000051c0 4d 4f 56 20 20 20 20 20 72 31 31 2c 23 30 0d 1e |MOV r11,#0..| 000051d0 8c 2a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |.* MOV | 000051e0 20 20 72 31 34 2c 23 28 31 3c 3c 28 33 30 2d 61 | r14,#(1<<(30-a| 000051f0 6e 67 5f 61 63 63 29 29 0d 1e 96 12 2e 72 6f 74 |ng_acc)).....rot| 00005200 61 74 65 5f 72 65 64 75 63 65 0d 1e a0 22 20 20 |ate_reduce..." | 00005210 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 31 | CMP r1| 00005220 34 2c 72 36 2c 41 53 52 20 72 31 31 0d 1e aa 1e |4,r6,ASR r11....| 00005230 20 20 20 20 20 20 20 20 41 44 44 4c 45 20 20 20 | ADDLE | 00005240 72 31 31 2c 72 31 31 2c 23 31 0d 1e b4 21 20 20 |r11,r11,#1...! | 00005250 20 20 20 20 20 20 42 4c 45 20 20 20 20 20 72 6f | BLE ro| 00005260 74 61 74 65 5f 72 65 64 75 63 65 0d 1e be 04 0d |tate_reduce.....| 00005270 1e c8 1e 20 20 20 20 20 20 20 20 4c 44 52 20 20 |... LDR | 00005280 20 20 20 72 38 2c 5b 72 31 2c 23 30 5d 0d 1e d2 | r8,[r1,#0]...| 00005290 1c 20 20 20 20 20 20 20 20 a4 72 6f 74 61 74 65 |. .rotate| 000052a0 28 30 2c 31 2c 32 2c a3 29 0d 1e dc 1e 20 20 20 |(0,1,2,.).... | 000052b0 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 38 2c | LDR r8,| 000052c0 5b 72 31 2c 23 34 5d 0d 1e e6 1c 20 20 20 20 20 |[r1,#4].... | 000052d0 20 20 20 a4 72 6f 74 61 74 65 28 31 2c 30 2c 32 | .rotate(1,0,2| 000052e0 2c b9 29 0d 1e f0 1e 20 20 20 20 20 20 20 20 4c |,.).... L| 000052f0 44 52 20 20 20 20 20 72 38 2c 5b 72 31 2c 23 38 |DR r8,[r1,#8| 00005300 5d 0d 1e fa 1c 20 20 20 20 20 20 20 20 a4 72 6f |].... .ro| 00005310 74 61 74 65 28 32 2c 30 2c 31 2c a3 29 0d 1f 04 |tate(2,0,1,.)...| 00005320 04 0d 1f 0e 1e 20 20 20 20 20 20 20 20 53 54 4d |..... STM| 00005330 49 41 20 20 20 72 32 2c 7b 72 33 2d 72 35 7d 0d |IA r2,{r3-r5}.| 00005340 1f 18 25 20 20 20 20 20 20 20 20 4c 44 4d 46 44 |..% LDMFD| 00005350 20 20 20 28 73 70 29 21 2c 7b 72 30 2d 72 31 31 | (sp)!,{r0-r11| 00005360 2c 70 63 7d 0d 1f 22 04 0d 1f 2c 04 0d 1f 36 22 |,pc}.."...,...6"| 00005370 2e 73 69 6e 5f 74 61 62 20 a4 74 61 62 6c 65 28 |.sin_tab .table(| 00005380 34 2a 72 65 61 6c 5f 61 6e 67 6c 65 73 29 0d 1f |4*real_angles)..| 00005390 40 05 5d 0d 1f 4a 0f e7 20 70 61 73 73 25 3e 34 |@.]..J.. pass%>4| 000053a0 20 8c 0d 1f 54 1a 20 e3 20 69 3d 30 20 b8 20 72 | ...T. . i=0 . r| 000053b0 65 61 6c 5f 61 6e 67 6c 65 73 2d 31 0d 1f 5e 1b |eal_angles-1..^.| 000053c0 20 20 61 3d 32 2a af 2a 28 69 2f 72 65 61 6c 5f | a=2*.*(i/real_| 000053d0 61 6e 67 6c 65 73 29 0d 1f 68 29 20 20 73 69 6e |angles)..h) sin| 000053e0 5f 74 61 62 21 28 63 6f 64 65 25 2b 34 2a 69 29 |_tab!(code%+4*i)| 000053f0 3d 28 31 3c 3c 61 6e 67 5f 61 63 63 29 2a b5 61 |=(1<<ang_acc)*.a| 00005400 0d 1f 72 06 20 ed 0d 1f 7c 05 cd 0d 1f 86 06 3d |..r. ...|......=| 00005410 30 0d 1f 90 05 3a 0d 1f 9a 1c dd 20 a4 72 6f 74 |0....:..... .rot| 00005420 61 74 65 28 72 2c 61 30 2c 61 31 2c 6d 69 6e 75 |ate(r,a0,a1,minu| 00005430 73 29 0d 1f a4 0f ea 20 78 2c 79 2c 78 32 2c 79 |s)..... x,y,x2,y| 00005440 32 0d 1f ae 0a 78 3d 61 30 2b 33 0d 1f b8 0a 79 |2....x=a0+3....y| 00005450 3d 61 31 2b 33 0d 1f c2 0b 78 32 3d 61 30 2b 36 |=a1+3....x2=a0+6| 00005460 0d 1f cc 0b 79 32 3d 61 31 2b 36 0d 1f d6 0e 5b |....y2=a1+6....[| 00005470 4f 50 54 20 70 61 73 73 25 0d 1f e0 19 20 20 20 |OPT pass%.... | 00005480 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 38 2c | CMP r8,| 00005490 23 30 0d 1f ea 1e 20 20 20 20 20 20 20 20 42 45 |#0.... BE| 000054a0 51 20 20 20 20 20 72 6f 74 5f 6c 61 62 28 72 29 |Q rot_lab(r)| 000054b0 0d 1f f4 15 20 20 20 20 20 20 20 20 a4 73 69 6e |.... .sin| 000054c0 28 39 2c 38 29 0d 1f fe 16 20 20 20 20 20 20 20 |(9,8).... | 000054d0 20 a4 63 6f 73 28 31 30 2c 38 29 0d 20 08 1f 20 | .cos(10,8). .. | 000054e0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 78 | MOV x| 000054f0 2c 78 2c 41 53 52 20 72 31 31 0d 20 12 1f 20 20 |,x,ASR r11. .. | 00005500 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 79 2c | MOV y,| 00005510 79 2c 41 53 52 20 72 31 31 0d 20 1c 1c 20 20 20 |y,ASR r11. .. | 00005520 20 20 20 20 20 4d 55 4c 20 20 20 20 20 78 32 2c | MUL x2,| 00005530 78 2c 72 31 30 0d 20 26 05 5d 0d 20 30 0d e7 20 |x,r10. &.]. 0.. | 00005540 6d 69 6e 75 73 20 8c 0d 20 3a 0f 20 5b 4f 50 54 |minus .. :. [OPT| 00005550 20 70 61 73 73 25 0d 20 44 1c 20 20 20 20 20 20 | pass%. D. | 00005560 20 20 52 53 42 20 20 20 20 20 72 39 2c 72 39 2c | RSB r9,r9,| 00005570 23 30 0d 20 4e 06 20 5d 0d 20 58 05 cd 0d 20 62 |#0. N. ]. X... b| 00005580 0e 5b 4f 50 54 20 70 61 73 73 25 0d 20 6c 1e 20 |.[OPT pass%. l. | 00005590 20 20 20 20 20 20 20 4d 4c 41 20 20 20 20 20 78 | MLA x| 000055a0 32 2c 79 2c 72 39 2c 78 32 0d 20 76 1c 20 20 20 |2,y,r9,x2. v. | 000055b0 20 20 20 20 20 52 53 42 20 20 20 20 20 72 39 2c | RSB r9,| 000055c0 72 39 2c 23 30 0d 20 80 1b 20 20 20 20 20 20 20 |r9,#0. .. | 000055d0 20 4d 55 4c 20 20 20 20 20 79 32 2c 78 2c 72 39 | MUL y2,x,r9| 000055e0 0d 20 8a 1f 20 20 20 20 20 20 20 20 4d 4c 41 20 |. .. MLA | 000055f0 20 20 20 20 79 32 2c 79 2c 72 31 30 2c 79 32 0d | y2,y,r10,y2.| 00005600 20 94 24 20 20 20 20 20 20 20 20 52 53 42 20 20 | .$ RSB | 00005610 20 20 20 72 31 34 2c 72 31 31 2c 23 61 6e 67 5f | r14,r11,#ang_| 00005620 61 63 63 0d 20 9e 20 20 20 20 20 20 20 20 20 4d |acc. . M| 00005630 4f 56 20 20 20 20 20 78 2c 78 32 2c 41 53 52 20 |OV x,x2,ASR | 00005640 72 31 34 0d 20 a8 20 20 20 20 20 20 20 20 20 4d |r14. . M| 00005650 4f 56 20 20 20 20 20 79 2c 79 32 2c 41 53 52 20 |OV y,y2,ASR | 00005660 72 31 34 0d 20 b2 0f 2e 72 6f 74 5f 6c 61 62 28 |r14. ...rot_lab(| 00005670 72 29 0d 20 bc 05 5d 0d 20 c6 06 3d 30 0d 20 d0 |r). ..]. ..=0. .| 00005680 05 3a 0d 20 da 15 dd 20 a4 73 69 6e 28 72 65 67 |.:. ... .sin(reg| 00005690 31 2c 72 65 67 32 29 0d 20 e4 0e 5b 4f 50 54 20 |1,reg2). ..[OPT | 000056a0 70 61 73 73 25 0d 20 ee 2f 20 20 20 20 20 20 20 |pass%. ./ | 000056b0 20 4d 4f 56 20 20 20 20 20 72 31 34 2c 72 65 67 | MOV r14,reg| 000056c0 32 2c 4c 53 4c 20 23 28 33 32 2d 61 6e 67 5f 62 |2,LSL #(32-ang_b| 000056d0 69 74 73 29 0d 20 f8 38 20 20 20 20 20 20 20 20 |its). .8 | 000056e0 4d 4f 56 20 20 20 20 20 72 31 34 2c 72 31 34 2c |MOV r14,r14,| 000056f0 4c 53 52 20 23 28 33 32 2d 61 6e 67 5f 62 69 74 |LSR #(32-ang_bit| 00005700 73 2b 61 6e 67 5f 73 68 69 66 74 29 0d 21 02 20 |s+ang_shift).!. | 00005710 20 20 20 20 20 20 20 20 41 44 52 20 20 20 20 20 | ADR | 00005720 72 65 67 31 2c 73 69 6e 5f 74 61 62 0d 21 0c 2a |reg1,sin_tab.!.*| 00005730 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 | LDR | 00005740 72 65 67 31 2c 5b 72 65 67 31 2c 72 31 34 2c 4c |reg1,[reg1,r14,L| 00005750 53 4c 20 23 32 5d 0d 21 16 05 5d 0d 21 20 06 3d |SL #2].!..].! .=| 00005760 30 0d 21 2a 05 3a 0d 21 34 15 dd 20 a4 63 6f 73 |0.!*.:.!4.. .cos| 00005770 28 72 65 67 31 2c 72 65 67 32 29 0d 21 3e 0e 5b |(reg1,reg2).!>.[| 00005780 4f 50 54 20 70 61 73 73 25 0d 21 48 28 20 20 20 |OPT pass%.!H( | 00005790 20 20 20 20 20 41 44 44 20 20 20 20 20 72 31 34 | ADD r14| 000057a0 2c 72 65 67 32 2c 23 61 6e 67 6c 65 73 20 81 20 |,reg2,#angles . | 000057b0 34 0d 21 52 2e 20 20 20 20 20 20 20 20 4d 4f 56 |4.!R. MOV| 000057c0 20 20 20 20 20 72 31 34 2c 72 31 34 2c 4c 53 4c | r14,r14,LSL| 000057d0 20 23 28 33 32 2d 61 6e 67 5f 62 69 74 73 29 0d | #(32-ang_bits).| 000057e0 21 5c 38 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |!\8 MOV | 000057f0 20 20 20 72 31 34 2c 72 31 34 2c 4c 53 52 20 23 | r14,r14,LSR #| 00005800 28 33 32 2d 61 6e 67 5f 62 69 74 73 2b 61 6e 67 |(32-ang_bits+ang| 00005810 5f 73 68 69 66 74 29 0d 21 66 20 20 20 20 20 20 |_shift).!f | 00005820 20 20 20 41 44 52 20 20 20 20 20 72 65 67 31 2c | ADR reg1,| 00005830 73 69 6e 5f 74 61 62 0d 21 70 2a 20 20 20 20 20 |sin_tab.!p* | 00005840 20 20 20 4c 44 52 20 20 20 20 20 72 65 67 31 2c | LDR reg1,| 00005850 5b 72 65 67 31 2c 72 31 34 2c 4c 53 4c 20 23 32 |[reg1,r14,LSL #2| 00005860 5d 0d 21 7a 05 5d 0d 21 84 06 3d 30 0d 21 8e 05 |].!z.].!..=0.!..| 00005870 3a 0d 21 98 13 dd 20 a4 73 74 72 28 72 65 67 2c |:.!... .str(reg,| 00005880 6f 66 66 29 0d 21 a2 0e 5b 4f 50 54 20 70 61 73 |off).!..[OPT pas| 00005890 73 25 0d 21 ac 27 20 20 20 20 20 20 20 20 41 44 |s%.!.' AD| 000058a0 44 20 20 20 20 20 72 31 34 2c 77 70 2c 23 6f 66 |D r14,wp,#of| 000058b0 66 20 80 20 26 46 46 30 30 0d 21 b6 2a 20 20 20 |f . &FF00.!.* | 000058c0 20 20 20 20 20 53 54 52 20 20 20 20 20 72 65 67 | STR reg| 000058d0 2c 5b 72 31 34 2c 23 6f 66 66 20 80 20 26 30 30 |,[r14,#off . &00| 000058e0 46 46 5d 0d 21 c0 05 5d 0d 21 ca 06 3d 30 0d 21 |FF].!..].!..=0.!| 000058f0 d4 05 3a 0d 21 de 13 dd 20 a4 6c 64 72 28 72 65 |..:.!... .ldr(re| 00005900 67 2c 6f 66 66 29 0d 21 e8 0e 5b 4f 50 54 20 70 |g,off).!..[OPT p| 00005910 61 73 73 25 0d 21 f2 27 20 20 20 20 20 20 20 20 |ass%.!.' | 00005920 41 44 44 20 20 20 20 20 72 31 34 2c 77 70 2c 23 |ADD r14,wp,#| 00005930 6f 66 66 20 80 20 26 46 46 30 30 0d 21 fc 2a 20 |off . &FF00.!.* | 00005940 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 | LDR r| 00005950 65 67 2c 5b 72 31 34 2c 23 6f 66 66 20 80 20 26 |eg,[r14,#off . &| 00005960 30 30 46 46 5d 0d 22 06 05 5d 0d 22 10 06 3d 30 |00FF]."..]."..=0| 00005970 0d ff |..| 00005972