Home » Archimedes archive » Acorn User » AU 1998-03 A.adf » Features » DiffDim2/Pipes
DiffDim2/Pipes
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 1998-03 A.adf » Features |
Filename: | DiffDim2/Pipes |
Read OK: | ✔ |
File size: | 3946 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM Pipes 20REM 30REM Demonstrate a use for the Z-buffer algorithm 40: 50ON ERROR PRINT REPORT$;" at line ";ERL:END 60PROCassemble 70OFF 80angd%=20:ang=360/angd%:texd=262000/angd% 90DIM i_1(angd%),i_2(angd%),i_3(angd%) 100radius=0.5 110CALL clear_z_buffer 120REPEAT 130dir%=0:x%=0:y%=0:z%=0:num%=0 140angx%=RND(360):angy%=RND(360):angz%=RND(360) 150cosx=COSRAD(angx%):sinx=SINRAD(angx%) 160cosy=COSRAD(angy%):siny=SINRAD(angy%) 170cosz=COSRAD(angz%):sinz=SINRAD(angz%) 180xx=cosy*cosz:xy=cosy*sinz:xz=-siny 190yx=sinx*siny*cosz-cosx*sinz:yy=sinx*siny*sinz+cosx*cosz:yz=sinx*cosy 200zx=cosx*siny*cosz+sinx*sinz:zy=-sinx*cosz:zz=cosx*cosy 210REPEAT 220l_x=RND(1):l_y=RND(1):l_z=1-l_x*l_x-l_y*l_y 230UNTIL l_z>0 240l_z=-SQR(l_z) 250lx=xx*l_x+xy*l_y+xz*l_z 260ly=yx*l_x+yy*l_y+yz*l_z 270lz=zx*l_x+zy*l_y+zz*l_z 280FORn%=0 TO angd% 290i_1(n%)=0.5+0.6*(ly*COSRAD(n%*ang)+lz*SINRAD(n%*ang)) 300i_2(n%)=0.5+0.6*(lx*COSRAD(n%*ang)+lz*SINRAD(n%*ang)) 310i_3(n%)=0.5+0.6*(lx*COSRAD(n%*ang)+ly*SINRAD(n%*ang)) 320IF i_1(n%)<0.1 i_1(n%)=0.1 330IF i_2(n%)<0.1 i_2(n%)=0.1 340IF i_3(n%)<0.1 i_3(n%)=0.1 350i_1(n%)=991*1024*i_1(n%)^2 360i_2(n%)=991*1024*i_2(n%)^2 370i_3(n%)=991*1024*i_3(n%)^2 380IF i_1(n%)>991*1024 i_1(n%)=991*1024 390IF i_2(n%)>991*1024 i_2(n%)=991*1024 400IF i_2(n%)>991*1024 i_2(n%)=991*1024 410NEXT 420REPEAT 430l%=RND(5)+2 440CASE dir% OF 450WHEN 0 : ex%=x%+l%:PROCpipe1(x%,y%,z%,ex%,y%,z%,radius):x%=ex% 460WHEN 1 : ex%=x%-l%:PROCpipe1(ex%,y%,z%,x%,y%,z%,radius):x%=ex% 470WHEN 2 : ey%=y%+l%:PROCpipe2(x%,y%,z%,x%,ey%,z%,radius):y%=ey% 480WHEN 3 : ey%=y%-l%:PROCpipe2(x%,ey%,z%,x%,y%,z%,radius):y%=ey% 490WHEN 4 : ez%=z%+l%:PROCpipe3(x%,y%,ez%,x%,y%,z%,radius):z%=ez% 500WHEN 5 : ez%=z%-l%:PROCpipe3(x%,y%,z%,x%,y%,ez%,radius):z%=ez% 510ENDCASE 520num%+=1 530REPEAT 540d%=RND(6)-1 550UNTIL (d% AND 6)<>(dir% AND 6) 560CASE (d% AND 6) OF 570WHEN 0 : IF x%>0 dir%=1 EOR FNprob(x%) ELSE dir%=0 EOR FNprob(-x%) 580WHEN 2 : IF y%>0 dir%=3 EOR FNprob(y%) ELSE dir%=2 EOR FNprob(-y%) 590WHEN 4 : IF z%>0 dir%=5 EOR FNprob(z%*2) ELSE dir%=4 EOR FNprob(-z%*2) 600ENDCASE 610UNTIL INKEY-99 OR num%>400 620CALL clear_z_buffer:CLS 630UNTIL FALSE 640END 650: 660DEFFNprob(s%) 670IF RND(15)>s% =1 ELSE =0 680: 690DEFPROCpipe1(sx,sy,sz,ex,ey,ez,rad) 700IF sx>ex THEN SWAP sx,ex:SWAP sy,ey:SWAP sz,ez 710FORn%=0 TO angd%-1 720!au=n%*texd+texd:!av=262000:!ai=i_1(n%+1) 730!bu=n%*texd:!bv=262000:!bi=i_1(n%) 740!cu=n%*texd:!cv=0:!ci=i_1(n%) 750PROCtriangle(sx,sy+rad*COSRAD(n%*ang+ang),sz+rad*SINRAD(n%*ang+ang),sx,sy+rad*COSRAD(n%*ang),sz+rad*SINRAD(n%*ang),ex,ey+rad*COSRAD(n%*ang),ez+rad*SINRAD(n%*ang)) 760!au=n%*texd:!av=0:!ai=i_1(n%) 770!bu=n%*texd+texd:!bv=0:!bi=i_1(n%+1) 780!cu=n%*texd+texd:!cv=262000:!ci=i_1(n%+1) 790PROCtriangle(ex,ey+rad*COSRAD(n%*ang),ez+rad*SINRAD(n%*ang),ex,ey+rad*COSRAD(n%*ang+ang),ez+rad*SINRAD(n%*ang+ang),sx,sy+rad*COSRAD(n%*ang+ang),sz+rad*SINRAD(n%*ang+ang)) 800NEXT 810ENDPROC 820: 830DEFPROCpipe2(sx,sy,sz,ex,ey,ez,rad) 840IF sy>ey THEN SWAP sx,ex:SWAP sy,ey:SWAP sz,ez 850FORn%=0 TO angd%-1 860!au=n%*texd:!av=0:!ai=i_2(n%) 870!bu=n%*texd+texd:!bv=0:!bi=i_2(n%+1) 880!cu=n%*texd:!cv=262000:!ci=i_2(n%) 890PROCtriangle(sx+rad*COSRAD(n%*ang),sy,sz+rad*SINRAD(n%*ang),sx+rad*COSRAD(n%*ang+ang),sy,sz+rad*SINRAD(n%*ang+ang),ex+rad*COSRAD(n%*ang),ey,ez+rad*SINRAD(n%*ang)) 900!au=n%*texd+texd:!av=262000:!ai=i_2(n%+1) 910!bu=n%*texd:!bv=262000:!bi=i_2(n%) 920!cu=n%*texd+texd:!cv=0:!ci=i_2(n%+1) 930PROCtriangle(ex+rad*COSRAD(n%*ang+ang),ey,ez+rad*SINRAD(n%*ang+ang),ex+rad*COSRAD(n%*ang),ey,ez+rad*SINRAD(n%*ang),sx+rad*COSRAD(n%*ang+ang),sy,sz+rad*SINRAD(n%*ang+ang)) 940NEXT 950ENDPROC 960: 970DEFPROCpipe3(sx,sy,sz,ex,ey,ez,rad) 980IF ez>sz THEN SWAP sx,ex:SWAP sy,ey:SWAP sz,ez 990FORn%=0 TO angd%-1 1000!au=n%*texd:!av=0:!ai=i_2(n%) 1010!bu=n%*texd+texd:!bv=0:!bi=i_2(n%+1) 1020!cu=n%*texd:!cv=262000:!ci=i_2(n%) 1030PROCtriangle(sx+rad*COSRAD(n%*ang),sy+rad*SINRAD(n%*ang),sz,sx+rad*COSRAD(n%*ang+ang),sy+rad*SINRAD(n%*ang+ang),sz,ex+rad*COSRAD(n%*ang),ey+rad*SINRAD(n%*ang),ez) 1040!au=n%*texd+texd:!av=262000:!ai=i_2(n%+1) 1050!bu=n%*texd:!bv=262000:!bi=i_2(n%) 1060!cu=n%*texd+texd:!cv=0:!ci=i_2(n%+1) 1070PROCtriangle(ex+rad*COSRAD(n%*ang+ang),ey+rad*SINRAD(n%*ang+ang),ez,ex+rad*COSRAD(n%*ang),ey+rad*SINRAD(n%*ang),ez,sx+rad*COSRAD(n%*ang+ang),sy+rad*SINRAD(n%*ang+ang),sz) 1080NEXT 1090ENDPROC 1100: 1110DEFPROCtriangle(x_1,y_1,z_1,x_2,y_2,z_2,x_3,y_3,z_3) 1120x1=xx*x_1+xy*y_1+xz*z_1 1130y1=yx*x_1+yy*y_1+yz*z_1 1140z1=zx*x_1+zy*y_1+zz*z_1+20 1150x2=xx*x_2+xy*y_2+xz*z_2 1160y2=yx*x_2+yy*y_2+yz*z_2 1170z2=zx*x_2+zy*y_2+zz*z_2+20 1180x3=xx*x_3+xy*y_3+xz*z_3 1190y3=yx*x_3+yy*y_3+yz*z_3 1200z3=zx*x_3+zy*y_3+zz*z_3+20 1210IF z1<1 OR z2<1 OR z3<1 THEN ENDPROC 1220!ax=(x_off%+v%*x1/z1)*1024 1230!ay=y_off%+v%*y1/z1 1240!az=z1*4096 1250!bx=(x_off%+v%*x2/z2)*1024 1260!by=y_off%+v%*y2/z2 1270!bz=z2*4096 1280!cx=(x_off%+v%*x3/z3)*1024 1290!cy=y_off%+v%*y3/z3 1300!cz=z3*4096 1310IF !bx*!cy+!cx*!ay+!ax*!by<!bx*!ay+!cx*!by+!ax*!cy ENDPROC 1320CALL plot_tri 1330ENDPROC 1340: 1350DEFPROCassemble 1360DIM code% 2048,texture% 65592,div_table% 163840*4,coltable% 8192 1370FORpass%=0 TO 2 STEP 2 1380P%=code% 1390[OPT pass% 1400.check_mode 1410mov r0,#0 1420adr r1,modeblockRPC 1430swi"XOS_ScreenMode" 1440adrvc r0,RPC_details 1450movvc pc,r14 1460swi 256+22 1470swi 256+21+&20000 1480adrvc r0,HIGH_details 1490movvc pc,r14 1500swi 256+22 1510swi 256+15+&20000 1520adrvc r0,MED_details 1530movvc pc,r14 1540swi 256+22 1550swi 256+13+&20000 1560adrvc r0,LOW_details 1570movvc pc,r14 1580adr r0,mode_error 1590orrs pc,r14,#1<<28 1600.modeblockRPC 1610dcd 1 1620dcd 1024:dcd 768 1630dcd 3 1640dcd -1 1650dcd 0:dcd 128 1660dcd 3:dcd 255 1670dcd -1 1680.RPC_details:dcd 1024:dcd 410:dcd 512:dcd 384 1690.HIGH_details:dcd 640:dcd 256:dcd 320:dcd 256 1700.MED_details:dcd 640:dcd 160:dcd 320:dcd 128 1710.LOW_details:dcd 320:dcd 128:dcd 160:dcd 128 1720.mode_error 1730dcd 0 1740equs"Pipes could not find a suitable screen mode to run in. Requires either 1024x768, 640x512, 640x256 or 320x256 in 256 colours."+CHR$&D+CHR$0 1750ALIGN 1760] 1770NEXT 1780det%=USR(check_mode) 1790wid%=!det%:v%=det%!4:x_off%=det%!8:y_off%=det%!12 1800DIM z_buffer% wid%*y_off%*8 1810FORpass%=0 TO 2 STEP 2 1820P%=code% 1830[OPT pass% 1840.setup 1850ldr r0,div_table 1860mov r2,#1 1870.dl 1880; divide r4 by r2 1890mov r4,#1048576 1900mov r5,#0 ; remainder 1910mov r6,#0 ; quotient 1920mov r7,#1<<31 1930.div_loop 1940movs r4,r4,lsl#1 1950adc r5,r5,r5 1960cmp r5,r2 1970subge r5,r5,r2 1980orrge r6,r6,r7 1990movs r7,r7,lsr#1 2000bne div_loop 2010; r6 = r4 div r2 = s 2020str r6,[r0,#4]! 2030add r2,r2,#1 2040cmp r2,#163840 2050ble dl 2060mov pc,r14 2070.clear_z_buffer 2080ldr r0,z_buffer 2090mov r1,#1<<30 ; max Z value 2100add r2,r0,#wid%*y_off%*8 2110.loop 2120str r1,[r0],#4 2130cmp r0,r2 2140blt loop 2150mov pc,r14 2160.z_buffer:dcd z_buffer% 2170.texture_sprite:dcd texture%+56 2180.r_index:dcd 0 2190.l_index:dcd 0 2200.sc_end:dcd 0 2210.sc_other:dcd 0 2220.sc_absolute_end:dcd 0 2230.sc_cur:dcd 0 2240.screen_adr:dcd FNscreenadr 2250.div_table:dcd div_table% 2260.coltable:dcd coltable% 2270.ay:dcd 0:.ax:dcd 0:.au:dcd 0:.av:dcd 0:.ai:dcd 0:.az:dcd 0 2280.by:dcd 0:.bx:dcd 0:.bu:dcd 0:.bv:dcd 0:.bi:dcd 0:.bz:dcd 0 2290.cy:dcd 0:.cx:dcd 0:.cu:dcd 0:.cv:dcd 0:.ci:dcd 0:.cz:dcd 0 2300.verts:dcd ay:dcd by:dcd cy 2310.plot_tri 2320adr r4,ay:adr r5,by:adr r6,cy:adr r9,verts 2330stmfd r13!,{r0,r11,r12,r14} 2340str r13,stackp2 2350ldr r0,[r4] 2360ldr r2,[r5] 2370cmp r2,r0 2380movlt r0,r2 2390movge r1,#0 2400movlt r1,#1 2410ldr r2,[r6] 2420cmp r2,r0 2430movlt r0,r2 2440movlt r1,#2 2450ldr r2,[r9,r1,lsl#2] 2460ldmib r2,{r2-r6} 2470subs r1,r1,#1 2480ldrlt r8,[r9,#8] 2490ldrge r8,[r9,r1,lsl#2] 2500str r8,l_index 2510movlt r1,#2 2520subs r1,r1,#1 2530ldrlt r9,[r9,#8] 2540ldrge r9,[r9,r1,lsl#2] 2550str r9,r_index 2560ldmia r8,{r8-r13} 2570ldr r1,div_table2 2580subs r8,r8,r0 2590ldrgt r8,[r1,r8,lsl#2] 2600str r2,lx 2610sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,dlx 2620adr r9,left_stuff+8 2630stmia r9!,{r3-r6} 2640sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 2650sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 2660sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 2670sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 2680stmia r9,{r10-r13} 2690ldr r8,r_index 2700ldmia r8,{r8-r13} 2710subs r8,r8,r0 2720ldrgt r8,[r1,r8,lsl#2] 2730str r2,rx 2740sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,drx 2750adr r9,right_stuff+8 2760stmia r9!,{r3-r6} 2770sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 2780sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 2790sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 2800sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 2810stmia r9,{r10-r13} 2820ldr r2,screen_adr 2830ldr r3,l_index 2840ldr r4,r_index 2850] 2860CASE wid% OF 2870WHEN 1024 : [OPT pass%:add r13,r2,r0,lsl#10:] 2880WHEN 640 :[OPT pass%:add r13,r2,r0,lsl#9:add r13,r13,r0,lsl#7:] 2890WHEN 320 :[OPT pass%:add r13,r2,r0,lsl#8:add r13,r13,r0,lsl#6:] 2900ENDCASE 2910[OPT pass% 2920ldr r3,[r3] 2930ldr r4,[r4] 2940] 2950CASE wid% OF 2960WHEN 1024 : [OPT pass%:add r5,r2,r3,lsl#10:add r6,r2,r4,lsl#10:] 2970WHEN 640 :[OPT pass%:add r5,r2,r3,lsl#9:add r6,r2,r4,lsl#9:add r5,r5,r3,lsl#7:add r6,r6,r4,lsl#7:] 2980WHEN 320 :[OPT pass%:add r5,r2,r3,lsl#8:add r6,r2,r4,lsl#8:add r5,r5,r3,lsl#6:add r6,r6,r4,lsl#6:] 2990ENDCASE 3000[OPT pass% 3010cmp r3,r4 3020strlt r5,sc_end 3030strge r6,sc_end 3040strlt r6,sc_other 3050strge r5,sc_other 3060add r2,r2,#wid%*y_off%*2 3070str r2,sc_absolute_end 3080bge method_2 3090beq last_bit1 3100.method_1 3110cmp r13,r5 3120beq last_bit1 3130bl tri_yloop 3140.last_bit1 3150ldr r2,l_index 3160ldr r8,r_index 3170ldmia r2,{r0,r2-r6} 3180ldmia r8,{r8-r13} 3190subs r8,r8,r0 3200ldrgt r8,[r1,r8,lsl#2] 3210add r2,r2,#512:str r2,lx 3220sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,dlx 3230adr r9,left_stuff+8 3240stmia r9!,{r3-r6} 3250sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 3260sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 3270sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 3280sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 3290ldr r0,sc_other 3300stmia r9,{r10-r13} 3310ldr r13,sc_end 3320str r0,sc_end 3330bl tri_yloop 3340ldr r13,stackp2 3350ldmfd r13!,{r0,r11,r12,r15} 3360.method_2 3370cmp r13,r6 3380beq last_bit2 3390bl tri_yloop 3400.last_bit2 3410ldr r2,r_index 3420ldr r8,l_index 3430ldmia r2,{r0,r2-r6} 3440ldmia r8,{r8-r13} 3450subs r8,r8,r0 3460ldrgt r8,[r1,r8,lsl#2] 3470add r2,r2,#512:str r2,rx 3480sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,drx 3490adr r9,right_stuff+8 3500stmia r9!,{r3-r6} 3510sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 3520sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 3530sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 3540sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 3550ldr r0,sc_other 3560stmia r9,{r10-r13} 3570ldr r13,sc_end 3580str r0,sc_end 3590bl tri_yloop 3600ldr r13,stackp2 3610ldmfd r13!,{r0,r11,r12,r15} 3620.left_stuff 3630.lx:dcd 0:.dlx:dcd 0 3640.lu:dcd 0:.lv:dcd 0:.li:dcd 0:.lz:dcd 0 3650.dlu:dcd 0:.dlv:dcd 0:.dli:dcd 0:.dlz:dcd 0 3660.right_stuff 3670.rx:dcd 0:.drx:dcd 0 3680.ru:dcd 0:.rv:dcd 0:.ri:dcd 0:.rz:dcd 0 3690.dru:dcd 0:.drv:dcd 0:.dri:dcd 0:.drz:dcd 0 3700.right_adr:dcd 0 3710.link:dcd 0 3720.stackp2:dcd 0 3730.div_table2:dcd div_table% 3740.tri_yloop 3750str r14,link 3760.y_loop_inner 3770ldr r2,sc_absolute_end 3780cmp r13,r2 3790ldrge r13,stackp2 3800ldmgefd r13!,{r0,r11,r12,r15} 3810ldr r2,lx:ldr r3,rx:sub r4,r3,r2 3820cmp r2,#0:blt x_loop_reverse 3830.x_loop_normal 3840ldr r6,dlx 3850add r5,r13,r2,asr#10 3860add r2,r2,r6,asr#10 3870str r2,lx 3880cmp r3,#wid%<<10 3890addlt r6,r13,r3,asr#10 3900add r13,r13,#wid% 3910ldr r2,drx 3920subge r6,r13,#1 3930add r3,r3,r2,asr#10 3940movs r2,r4,asr#4 3950str r3,rx 3960ldrgt r2,[r1,r2,lsl#2] 3970ldr r4,lu:ldr r3,dlu:ldr r7,dru 3980add r3,r4,r3,asr#10 3990str r3,lu:ldr r3,ru 4000add r7,r3,r7,asr#10 4010sub r3,r3,r4 4020str r7,ru 4030mov r4,r4,lsl#14 4040mul r3,r2,r3 4050ldr r7,lv:ldr r8,dlv:ldr r9,drv 4060add r8,r7,r8,asr#10 4070str r8,lv:ldr r8,rv 4080add r9,r8,r9,asr#10 4090sub r8,r8,r7 4100str r9,rv 4110mov r7,r7,lsl#14 4120mul r8,r2,r8 4130ldr r9,li:ldr r10,dli:ldr r11,dri 4140mov r2,r2,asr#2 4150add r10,r9,r10,asr#10 4160str r10,li:ldr r10,ri 4170add r11,r10,r11,asr#10 4180sub r10,r10,r9 4190str r11,ri 4200mov r9,r9,lsl#12 4210mul r10,r2,r10 4220ldr r11,lz:ldr r12,dlz:ldr r14,drz 4230add r12,r11,r12,asr#10 4240str r12,lz:ldr r12,rz 4250add r14,r12,r14,asr#10 4260sub r12,r12,r11 4270str r14,rz 4280mov r11,r11,lsl#12 4290mul r12,r2,r12 4300str r13,sc_cur 4310ldr r2,screen_adr 4320cmp r13,r2 4330cmpgt r13,r5 4340ble skip_x_loop 4350ldr r14,z_buffer 4360sub r2,r5,r2 4370add r14,r14,r2,lsl#2 4380tst r5,#1 4390moveq r13,#1<<31 4400movne r13,#0 4410ldr r2,texture_sprite 4420ldr r1,coltable 4430.xloop 4440ldr r0,[r14],#4 4450cmp r0,r11 4460addlt r5,r5,#1 4470blt skip_x_pix 4480and r0,r7,#255<<24 4490orr r0,r0,r4,lsr#8 4500ldrb r0,[r2,r0,lsr#16] 4510add r0,r1,r0,lsl#5 4520add r0,r0,r13,lsr#31 4530ldrb r0,[r0,r9,lsr#27] 4540strb r0,[r5],#1 4550str r11,[r14,#-4] 4560.skip_x_pix 4570cmp r5,r6 4580addle r13,r13,#1<<31 4590addle r4,r4,r3 4600addle r7,r7,r8 4610addle r9,r9,r10 4620addle r11,r11,r12 4630ble xloop 4640.skip_x_loop 4650ldr r1,div_table2 4660ldr r13,sc_cur 4670ldr r0,sc_end 4680cmp r13,r0 4690blt y_loop_inner 4700ldr r15,link 4710.y_reverse_loop 4720str r14,link 4730.y_reverse_loop_inner 4740ldr r2,sc_absolute_end 4750cmp r13,r2 4760ldrge r13,stackp2 4770ldmgefd r13!,{r0,r11,r12,r15} 4780ldr r2,lx:ldr r3,rx:sub r4,r3,r2 4790cmp r2,#0:bge x_loop_normal 4800.x_loop_reverse 4810ldr r6,dlx 4820mov r5,r13 4830add r2,r2,r6,asr#10 4840str r2,lx 4850cmp r3,#wid%<<10 4860addlt r6,r13,r3,asr#10 4870add r13,r13,#wid% 4880ldr r2,drx 4890subge r6,r13,#1 4900add r3,r3,r2,asr#10 4910movs r2,r4,asr#4 4920str r3,rx 4930ldrgt r2,[r1,r2,lsl#2] 4940ldr r4,ru:ldr r3,dru:ldr r7,dlu 4950add r3,r4,r3,asr#10 4960str r3,ru:ldr r3,lu 4970add r7,r3,r7,asr#10 4980sub r3,r3,r4 4990str r7,lu 5000mov r4,r4,lsl#14 5010mul r3,r2,r3 5020ldr r7,rv:ldr r8,drv:ldr r9,dlv 5030add r8,r7,r8,asr#10 5040str r8,rv:ldr r8,lv 5050add r9,r8,r9,asr#10 5060sub r8,r8,r7 5070str r9,lv 5080mov r7,r7,lsl#14 5090mul r8,r2,r8 5100ldr r9,ri:ldr r10,dri:ldr r11,dli 5110mov r2,r2,asr#2 5120add r10,r9,r10,asr#10 5130str r10,ri:ldr r10,li 5140add r11,r10,r11,asr#10 5150sub r10,r10,r9 5160str r11,li 5170mov r9,r9,lsl#12 5180mul r10,r2,r10 5190ldr r11,rz:ldr r12,drz:ldr r14,dlz 5200add r12,r11,r12,asr#10 5210str r12,rz:ldr r12,lz 5220add r14,r12,r14,asr#10 5230sub r12,r12,r11 5240str r14,lz 5250mov r11,r11,lsl#12 5260mul r12,r2,r12 5270str r13,sc_cur 5280ldr r2,screen_adr 5290cmp r13,r2 5300cmpgt r6,r5 5310ble skip_x_reverse_loop 5320ldr r14,z_buffer 5330sub r2,r6,r2 5340add r14,r14,r2,lsl#2 5350tst r6,#1 5360moveq r13,#1<<31 5370movne r13,#0 5380ldr r2,texture_sprite 5390ldr r1,coltable 5400.xloop 5410ldr r0,[r14],#-4 5420cmp r0,r11 5430sublt r6,r6,#1 5440blt skip_x_reverse_pix 5450and r0,r7,#255<<24 5460orr r0,r0,r4,lsr#8 5470ldrb r0,[r2,r0,lsr#16] 5480add r0,r1,r0,lsl#5 5490add r0,r0,r13,lsr#31 5500ldrb r0,[r0,r9,lsr#27] 5510strb r0,[r6],#-1 5520str r11,[r14,#4] 5530.skip_x_reverse_pix 5540cmp r6,r5 5550addge r13,r13,#1<<31 5560addge r4,r4,r3 5570addge r7,r7,r8 5580addge r9,r9,r10 5590addge r11,r11,r12 5600bge xloop 5610.skip_x_reverse_loop 5620ldr r1,div_table2 5630ldr r13,sc_cur 5640ldr r0,sc_end 5650cmp r13,r0 5660blt y_reverse_loop_inner 5670ldr r15,link 5680] 5690NEXT 5700SYS"OS_File",16,"ColTab",coltable% 5710SYS"OS_File",16,"Tex1",texture% 5720CALL setup 5730ENDPROC 5740: 5750DEFFNscreenadr 5760DIM q% 8 5770!q%=148:q%!4=-1 5780SYS"OS_ReadVduVariables",q%,q% 5790=!q%
� Pipes � 2� Demonstrate a use for the Z-buffer algorithm (: 2� � � �$;" at line ";�:� < �assemble F� P,angd%=20:ang=360/angd%:texd=262000/angd% Z&� i_1(angd%),i_2(angd%),i_3(angd%) dradius=0.5 n� clear_z_buffer x� � dir%=0:x%=0:y%=0:z%=0:num%=0 �*angx%=�(360):angy%=�(360):angz%=�(360) �!cosx=��(angx%):sinx=��(angx%) �!cosy=��(angy%):siny=��(angy%) �!cosz=��(angz%):sinz=��(angz%) �&xx=cosy*cosz:xy=cosy*sinz:xz=-siny �Hyx=sinx*siny*cosz-cosx*sinz:yy=sinx*siny*sinz+cosx*cosz:yz=sinx*cosy �:zx=cosx*siny*cosz+sinx*sinz:zy=-sinx*cosz:zz=cosx*cosy �� �+l_x=�(1):l_y=�(1):l_z=1-l_x*l_x-l_y*l_y �� l_z>0 �l_z=-�(l_z) �lx=xx*l_x+xy*l_y+xz*l_z ly=yx*l_x+yy*l_y+yz*l_z lz=zx*l_x+zy*l_y+zz*l_z �n%=0 � angd% "1i_1(n%)=0.5+0.6*(ly*��(n%*ang)+lz*��(n%*ang)) ,1i_2(n%)=0.5+0.6*(lx*��(n%*ang)+lz*��(n%*ang)) 61i_3(n%)=0.5+0.6*(lx*��(n%*ang)+ly*��(n%*ang)) @� i_1(n%)<0.1 i_1(n%)=0.1 J� i_2(n%)<0.1 i_2(n%)=0.1 T� i_3(n%)<0.1 i_3(n%)=0.1 ^i_1(n%)=991*1024*i_1(n%)^2 hi_2(n%)=991*1024*i_2(n%)^2 ri_3(n%)=991*1024*i_3(n%)^2 |'� i_1(n%)>991*1024 i_1(n%)=991*1024 �'� i_2(n%)>991*1024 i_2(n%)=991*1024 �'� i_2(n%)>991*1024 i_2(n%)=991*1024 �� �� � l%=�(5)+2 � Ȏ dir% � �<� 0 : ex%=x%+l%:�pipe1(x%,y%,z%,ex%,y%,z%,radius):x%=ex% �<� 1 : ex%=x%-l%:�pipe1(ex%,y%,z%,x%,y%,z%,radius):x%=ex% �<� 2 : ey%=y%+l%:�pipe2(x%,y%,z%,x%,ey%,z%,radius):y%=ey% �<� 3 : ey%=y%-l%:�pipe2(x%,ey%,z%,x%,y%,z%,radius):y%=ey% �<� 4 : ez%=z%+l%:�pipe3(x%,y%,ez%,x%,y%,z%,radius):z%=ez% �<� 5 : ez%=z%-l%:�pipe3(x%,y%,z%,x%,y%,ez%,radius):z%=ez% �� num%+=1 � d%=�(6)-1 &� (d% � 6)<>(dir% � 6) 0Ȏ (d% � 6) � :9� 0 : � x%>0 dir%=1 � �prob(x%) � dir%=0 � �prob(-x%) D9� 2 : � y%>0 dir%=3 � �prob(y%) � dir%=2 � �prob(-y%) N=� 4 : � z%>0 dir%=5 � �prob(z%*2) � dir%=4 � �prob(-z%*2) X� b� �-99 � num%>400 l� clear_z_buffer:� v� � �� �: �ݤprob(s%) �� �(15)>s% =1 � =0 �: �"��pipe1(sx,sy,sz,ex,ey,ez,rad) �(� sx>ex � Ȕ sx,ex:Ȕ sy,ey:Ȕ sz,ez ��n%=0 � angd%-1 �-!au=n%*texd+texd:!av=262000:!ai=i_1(n%+1) �&!bu=n%*texd:!bv=262000:!bi=i_1(n%) �!!cu=n%*texd:!cv=0:!ci=i_1(n%) ��triangle(sx,sy+rad*��(n%*ang+ang),sz+rad*��(n%*ang+ang),sx,sy+rad*��(n%*ang),sz+rad*��(n%*ang),ex,ey+rad*��(n%*ang),ez+rad*��(n%*ang)) �!!au=n%*texd:!av=0:!ai=i_1(n%) (!bu=n%*texd+texd:!bv=0:!bi=i_1(n%+1) -!cu=n%*texd+texd:!cv=262000:!ci=i_1(n%+1) ��triangle(ex,ey+rad*��(n%*ang),ez+rad*��(n%*ang),ex,ey+rad*��(n%*ang+ang),ez+rad*��(n%*ang+ang),sx,sy+rad*��(n%*ang+ang),sz+rad*��(n%*ang+ang)) � *� 4: >"��pipe2(sx,sy,sz,ex,ey,ez,rad) H(� sy>ey � Ȕ sx,ex:Ȕ sy,ey:Ȕ sz,ez R�n%=0 � angd%-1 \!!au=n%*texd:!av=0:!ai=i_2(n%) f(!bu=n%*texd+texd:!bv=0:!bi=i_2(n%+1) p&!cu=n%*texd:!cv=262000:!ci=i_2(n%) z��triangle(sx+rad*��(n%*ang),sy,sz+rad*��(n%*ang),sx+rad*��(n%*ang+ang),sy,sz+rad*��(n%*ang+ang),ex+rad*��(n%*ang),ey,ez+rad*��(n%*ang)) �-!au=n%*texd+texd:!av=262000:!ai=i_2(n%+1) �&!bu=n%*texd:!bv=262000:!bi=i_2(n%) �(!cu=n%*texd+texd:!cv=0:!ci=i_2(n%+1) ���triangle(ex+rad*��(n%*ang+ang),ey,ez+rad*��(n%*ang+ang),ex+rad*��(n%*ang),ey,ez+rad*��(n%*ang),sx+rad*��(n%*ang+ang),sy,sz+rad*��(n%*ang+ang)) �� �� �: �"��pipe3(sx,sy,sz,ex,ey,ez,rad) �(� ez>sz � Ȕ sx,ex:Ȕ sy,ey:Ȕ sz,ez ��n%=0 � angd%-1 �!!au=n%*texd:!av=0:!ai=i_2(n%) �(!bu=n%*texd+texd:!bv=0:!bi=i_2(n%+1) �&!cu=n%*texd:!cv=262000:!ci=i_2(n%) ��triangle(sx+rad*��(n%*ang),sy+rad*��(n%*ang),sz,sx+rad*��(n%*ang+ang),sy+rad*��(n%*ang+ang),sz,ex+rad*��(n%*ang),ey+rad*��(n%*ang),ez) -!au=n%*texd+texd:!av=262000:!ai=i_2(n%+1) &!bu=n%*texd:!bv=262000:!bi=i_2(n%) $(!cu=n%*texd+texd:!cv=0:!ci=i_2(n%+1) .��triangle(ex+rad*��(n%*ang+ang),ey+rad*��(n%*ang+ang),ez,ex+rad*��(n%*ang),ey+rad*��(n%*ang),ez,sx+rad*��(n%*ang+ang),sy+rad*��(n%*ang+ang),sz) 8� B� L: V3��triangle(x_1,y_1,z_1,x_2,y_2,z_2,x_3,y_3,z_3) `x1=xx*x_1+xy*y_1+xz*z_1 jy1=yx*x_1+yy*y_1+yz*z_1 tz1=zx*x_1+zy*y_1+zz*z_1+20 ~x2=xx*x_2+xy*y_2+xz*z_2 �y2=yx*x_2+yy*y_2+yz*z_2 �z2=zx*x_2+zy*y_2+zz*z_2+20 �x3=xx*x_3+xy*y_3+xz*z_3 �y3=yx*x_3+yy*y_3+yz*z_3 �z3=zx*x_3+zy*y_3+zz*z_3+20 �� z1<1 � z2<1 � z3<1 � � �!ax=(x_off%+v%*x1/z1)*1024 �!ay=y_off%+v%*y1/z1 �!az=z1*4096 �!bx=(x_off%+v%*x2/z2)*1024 �!by=y_off%+v%*y2/z2 �!bz=z2*4096 !cx=(x_off%+v%*x3/z3)*1024 !cy=y_off%+v%*y3/z3 !cz=z3*4096 7� !bx*!cy+!cx*!ay+!ax*!by<!bx*!ay+!cx*!by+!ax*!cy � (� plot_tri 2� <: F��assemble PB� code% 2048,texture% 65592,div_table% 163840*4,coltable% 8192 Z�pass%=0 � 2 � 2 dP%=code% n[OPT pass% x.check_mode � mov r0,#0 �adr r1,modeblockRPC �swi"XOS_ScreenMode" �adrvc r0,RPC_details �movvc pc,r14 �swi 256+22 �swi 256+21+&20000 �adrvc r0,HIGH_details �movvc pc,r14 �swi 256+22 �swi 256+15+&20000 �adrvc r0,MED_details �movvc pc,r14 swi 256+22 swi 256+13+&20000 adrvc r0,LOW_details "movvc pc,r14 ,adr r0,mode_error 6orrs pc,r14,#1<<28 @.modeblockRPC J dcd 1 Tdcd 1024:dcd 768 ^ dcd 3 h dcd -1 rdcd 0:dcd 128 |dcd 3:dcd 255 � dcd -1 �1.RPC_details:dcd 1024:dcd 410:dcd 512:dcd 384 �1.HIGH_details:dcd 640:dcd 256:dcd 320:dcd 256 �0.MED_details:dcd 640:dcd 160:dcd 320:dcd 128 �0.LOW_details:dcd 320:dcd 128:dcd 160:dcd 128 �.mode_error � dcd 0 ̍equs"Pipes could not find a suitable screen mode to run in. Requires either 1024x768, 640x512, 640x256 or 320x256 in 256 colours."+�&D+�0 � ALIGN �] �� �det%=�(check_mode) �5wid%=!det%:v%=det%!4:x_off%=det%!8:y_off%=det%!12 � z_buffer% wid%*y_off%*8 �pass%=0 � 2 � 2 P%=code% &[OPT pass% 0 .setup :ldr r0,div_table D mov r2,#1 N.dl X; divide r4 by r2 bmov r4,#1048576 l'mov r5,#0 ; remainder v&mov r6,#0 ; quotient �mov r7,#1<<31 � .div_loop �movs r4,r4,lsl#1 �adc r5,r5,r5 � cmp r5,r2 �subge r5,r5,r2 �orrge r6,r6,r7 �movs r7,r7,lsr#1 �bne div_loop �; r6 = r4 div r2 = s �str r6,[r0,#4]! �add r2,r2,#1 �cmp r2,#163840 ble dl mov pc,r14 .clear_z_buffer ldr r0,z_buffer *1mov r1,#1<<30 ; max Z value 4add r2,r0,#wid%*y_off%*8 > .loop Hstr r1,[r0],#4 R cmp r0,r2 \blt loop fmov pc,r14 p.z_buffer:dcd z_buffer% z#.texture_sprite:dcd texture%+56 �.r_index:dcd 0 �.l_index:dcd 0 �.sc_end:dcd 0 �.sc_other:dcd 0 �.sc_absolute_end:dcd 0 �.sc_cur:dcd 0 �.screen_adr:dcd �screenadr �.div_table:dcd div_table% �.coltable:dcd coltable% �?.ay:dcd 0:.ax:dcd 0:.au:dcd 0:.av:dcd 0:.ai:dcd 0:.az:dcd 0 �?.by:dcd 0:.bx:dcd 0:.bu:dcd 0:.bv:dcd 0:.bi:dcd 0:.bz:dcd 0 �?.cy:dcd 0:.cx:dcd 0:.cu:dcd 0:.cv:dcd 0:.ci:dcd 0:.cz:dcd 0 �.verts:dcd ay:dcd by:dcd cy .plot_tri .adr r4,ay:adr r5,by:adr r6,cy:adr r9,verts stmfd r13!,{r0,r11,r12,r14} $str r13,stackp2 .ldr r0,[r4] 8ldr r2,[r5] B cmp r2,r0 Lmovlt r0,r2 Vmovge r1,#0 `movlt r1,#1 jldr r2,[r6] t cmp r2,r0 ~movlt r0,r2 �movlt r1,#2 �ldr r2,[r9,r1,lsl#2] �ldmib r2,{r2-r6} �subs r1,r1,#1 �ldrlt r8,[r9,#8] �ldrge r8,[r9,r1,lsl#2] �str r8,l_index �movlt r1,#2 �subs r1,r1,#1 �ldrlt r9,[r9,#8] �ldrge r9,[r9,r1,lsl#2] �str r9,r_index ldmia r8,{r8-r13} ldr r1,div_table2 subs r8,r8,r0 ldrgt r8,[r1,r8,lsl#2] ( str r2,lx 29sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,dlx <adr r9,left_stuff+8 Fstmia r9!,{r3-r6} P4sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 Z4sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 d4sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 n4sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 xstmia r9,{r10-r13} �ldr r8,r_index �ldmia r8,{r8-r13} �subs r8,r8,r0 �ldrgt r8,[r1,r8,lsl#2] � str r2,rx �9sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,drx �adr r9,right_stuff+8 �stmia r9!,{r3-r6} �4sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 �4sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 �4sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 �4sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 �stmia r9,{r10-r13} ldr r2,screen_adr ldr r3,l_index ldr r4,r_index "] , Ȏ wid% � 6.� 1024 : [OPT pass%:add r13,r2,r0,lsl#10:] @@� 640 :[OPT pass%:add r13,r2,r0,lsl#9:add r13,r13,r0,lsl#7:] J@� 320 :[OPT pass%:add r13,r2,r0,lsl#8:add r13,r13,r0,lsl#6:] T� ^[OPT pass% hldr r3,[r3] rldr r4,[r4] |] � Ȏ wid% � �A� 1024 : [OPT pass%:add r5,r2,r3,lsl#10:add r6,r2,r4,lsl#10:] �c� 640 :[OPT pass%:add r5,r2,r3,lsl#9:add r6,r2,r4,lsl#9:add r5,r5,r3,lsl#7:add r6,r6,r4,lsl#7:] �c� 320 :[OPT pass%:add r5,r2,r3,lsl#8:add r6,r2,r4,lsl#8:add r5,r5,r3,lsl#6:add r6,r6,r4,lsl#6:] �� �[OPT pass% � cmp r3,r4 �strlt r5,sc_end �strge r6,sc_end �strlt r6,sc_other �strge r5,sc_other �add r2,r2,#wid%*y_off%*2 �str r2,sc_absolute_end bge method_2 beq last_bit1 .method_1 &cmp r13,r5 0beq last_bit1 :bl tri_yloop D.last_bit1 Nldr r2,l_index Xldr r8,r_index bldmia r2,{r0,r2-r6} lldmia r8,{r8-r13} vsubs r8,r8,r0 �ldrgt r8,[r1,r8,lsl#2] �add r2,r2,#512:str r2,lx �9sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,dlx �adr r9,left_stuff+8 �stmia r9!,{r3-r6} �4sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 �4sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 �4sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 �4sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 �ldr r0,sc_other �stmia r9,{r10-r13} �ldr r13,sc_end �str r0,sc_end bl tri_yloop ldr r13,stackp2 ldmfd r13!,{r0,r11,r12,r15} .method_2 *cmp r13,r6 4beq last_bit2 >bl tri_yloop H.last_bit2 Rldr r2,r_index \ldr r8,l_index fldmia r2,{r0,r2-r6} pldmia r8,{r8-r13} zsubs r8,r8,r0 �ldrgt r8,[r1,r8,lsl#2] �add r2,r2,#512:str r2,rx �9sub r9,r9,r2:mov r9,r9,asr#10:mul r9,r8,r9:str r9,drx �adr r9,right_stuff+8 �stmia r9!,{r3-r6} �4sub r10,r10,r3:mov r10,r10,asr#10:mul r10,r8,r10 �4sub r11,r11,r4:mov r11,r11,asr#10:mul r11,r8,r11 �4sub r12,r12,r5:mov r12,r12,asr#10:mul r12,r8,r12 �4sub r13,r13,r6:mov r13,r13,asr#10:mul r13,r8,r13 �ldr r0,sc_other �stmia r9,{r10-r13} �ldr r13,sc_end �str r0,sc_end bl tri_yloop ldr r13,stackp2 ldmfd r13!,{r0,r11,r12,r15} $.left_stuff ..lx:dcd 0:.dlx:dcd 0 8+.lu:dcd 0:.lv:dcd 0:.li:dcd 0:.lz:dcd 0 B/.dlu:dcd 0:.dlv:dcd 0:.dli:dcd 0:.dlz:dcd 0 L.right_stuff V.rx:dcd 0:.drx:dcd 0 `+.ru:dcd 0:.rv:dcd 0:.ri:dcd 0:.rz:dcd 0 j/.dru:dcd 0:.drv:dcd 0:.dri:dcd 0:.drz:dcd 0 t.right_adr:dcd 0 ~.link:dcd 0 �.stackp2:dcd 0 �.div_table2:dcd div_table% �.tri_yloop �str r14,link �.y_loop_inner �ldr r2,sc_absolute_end �cmp r13,r2 �ldrge r13,stackp2 �!ldmgefd r13!,{r0,r11,r12,r15} �$ldr r2,lx:ldr r3,rx:sub r4,r3,r2 � cmp r2,#0:blt x_loop_reverse �.x_loop_normal ldr r6,dlx add r5,r13,r2,asr#10 add r2,r2,r6,asr#10 str r2,lx (cmp r3,#wid%<<10 2addlt r6,r13,r3,asr#10 <add r13,r13,#wid% Fldr r2,drx Psubge r6,r13,#1 Zadd r3,r3,r2,asr#10 dmovs r2,r4,asr#4 n str r3,rx xldrgt r2,[r1,r2,lsl#2] �#ldr r4,lu:ldr r3,dlu:ldr r7,dru �add r3,r4,r3,asr#10 �str r3,lu:ldr r3,ru �add r7,r3,r7,asr#10 �sub r3,r3,r4 � str r7,ru �mov r4,r4,lsl#14 �mul r3,r2,r3 �#ldr r7,lv:ldr r8,dlv:ldr r9,drv �add r8,r7,r8,asr#10 �str r8,lv:ldr r8,rv �add r9,r8,r9,asr#10 �sub r8,r8,r7 str r9,rv mov r7,r7,lsl#14 mul r8,r2,r8 "%ldr r9,li:ldr r10,dli:ldr r11,dri ,mov r2,r2,asr#2 6add r10,r9,r10,asr#10 @str r10,li:ldr r10,ri Jadd r11,r10,r11,asr#10 Tsub r10,r10,r9 ^str r11,ri hmov r9,r9,lsl#12 rmul r10,r2,r10 |&ldr r11,lz:ldr r12,dlz:ldr r14,drz �add r12,r11,r12,asr#10 �str r12,lz:ldr r12,rz �add r14,r12,r14,asr#10 �sub r12,r12,r11 �str r14,rz �mov r11,r11,lsl#12 �mul r12,r2,r12 �str r13,sc_cur �ldr r2,screen_adr �cmp r13,r2 �cmpgt r13,r5 �ble skip_x_loop �ldr r14,z_buffer sub r2,r5,r2 add r14,r14,r2,lsl#2 tst r5,#1 &moveq r13,#1<<31 0movne r13,#0 :ldr r2,texture_sprite Dldr r1,coltable N .xloop Xldr r0,[r14],#4 bcmp r0,r11 laddlt r5,r5,#1 vblt skip_x_pix �and r0,r7,#255<<24 �orr r0,r0,r4,lsr#8 �ldrb r0,[r2,r0,lsr#16] �add r0,r1,r0,lsl#5 �add r0,r0,r13,lsr#31 �ldrb r0,[r0,r9,lsr#27] �strb r0,[r5],#1 �str r11,[r14,#-4] �.skip_x_pix � cmp r5,r6 �addle r13,r13,#1<<31 �addle r4,r4,r3 �addle r7,r7,r8 addle r9,r9,r10 addle r11,r11,r12 ble xloop .skip_x_loop *ldr r1,div_table2 4ldr r13,sc_cur >ldr r0,sc_end Hcmp r13,r0 Rblt y_loop_inner \ldr r15,link f.y_reverse_loop pstr r14,link z.y_reverse_loop_inner �ldr r2,sc_absolute_end �cmp r13,r2 �ldrge r13,stackp2 �!ldmgefd r13!,{r0,r11,r12,r15} �$ldr r2,lx:ldr r3,rx:sub r4,r3,r2 �cmp r2,#0:bge x_loop_normal �.x_loop_reverse �ldr r6,dlx �mov r5,r13 �add r2,r2,r6,asr#10 � str r2,lx �cmp r3,#wid%<<10 �addlt r6,r13,r3,asr#10 add r13,r13,#wid% ldr r2,drx subge r6,r13,#1 $add r3,r3,r2,asr#10 .movs r2,r4,asr#4 8 str r3,rx Bldrgt r2,[r1,r2,lsl#2] L#ldr r4,ru:ldr r3,dru:ldr r7,dlu Vadd r3,r4,r3,asr#10 `str r3,ru:ldr r3,lu jadd r7,r3,r7,asr#10 tsub r3,r3,r4 ~ str r7,lu �mov r4,r4,lsl#14 �mul r3,r2,r3 �#ldr r7,rv:ldr r8,drv:ldr r9,dlv �add r8,r7,r8,asr#10 �str r8,rv:ldr r8,lv �add r9,r8,r9,asr#10 �sub r8,r8,r7 � str r9,lv �mov r7,r7,lsl#14 �mul r8,r2,r8 �%ldr r9,ri:ldr r10,dri:ldr r11,dli �mov r2,r2,asr#2 add r10,r9,r10,asr#10 str r10,ri:ldr r10,li add r11,r10,r11,asr#10 sub r10,r10,r9 (str r11,li 2mov r9,r9,lsl#12 <mul r10,r2,r10 F&ldr r11,rz:ldr r12,drz:ldr r14,dlz Padd r12,r11,r12,asr#10 Zstr r12,rz:ldr r12,lz dadd r14,r12,r14,asr#10 nsub r12,r12,r11 xstr r14,lz �mov r11,r11,lsl#12 �mul r12,r2,r12 �str r13,sc_cur �ldr r2,screen_adr �cmp r13,r2 �cmpgt r6,r5 �ble skip_x_reverse_loop �ldr r14,z_buffer �sub r2,r6,r2 �add r14,r14,r2,lsl#2 � tst r6,#1 �moveq r13,#1<<31 �movne r13,#0 ldr r2,texture_sprite ldr r1,coltable .xloop "ldr r0,[r14],#-4 ,cmp r0,r11 6sublt r6,r6,#1 @blt skip_x_reverse_pix Jand r0,r7,#255<<24 Torr r0,r0,r4,lsr#8 ^ldrb r0,[r2,r0,lsr#16] hadd r0,r1,r0,lsl#5 radd r0,r0,r13,lsr#31 |ldrb r0,[r0,r9,lsr#27] �strb r0,[r6],#-1 �str r11,[r14,#4] �.skip_x_reverse_pix � cmp r6,r5 �addge r13,r13,#1<<31 �addge r4,r4,r3 �addge r7,r7,r8 �addge r9,r9,r10 �addge r11,r11,r12 � bge xloop �.skip_x_reverse_loop �ldr r1,div_table2 �ldr r13,sc_cur ldr r0,sc_end cmp r13,r0 blt y_reverse_loop_inner &ldr r15,link 0] :� D%ș"OS_File",16,"ColTab",coltable% N"ș"OS_File",16,"Tex1",texture% X� setup b� l: vݤscreenadr � � q% 8 �!q%=148:q%!4=-1 �!ș"OS_ReadVduVariables",q%,q% �=!q% �
00000000 0d 00 0a 0b f4 20 50 69 70 65 73 0d 00 14 05 f4 |..... Pipes.....| 00000010 0d 00 1e 32 f4 20 44 65 6d 6f 6e 73 74 72 61 74 |...2. Demonstrat| 00000020 65 20 61 20 75 73 65 20 66 6f 72 20 74 68 65 20 |e a use for the | 00000030 5a 2d 62 75 66 66 65 72 20 61 6c 67 6f 72 69 74 |Z-buffer algorit| 00000040 68 6d 0d 00 28 05 3a 0d 00 32 1c ee 20 85 20 f1 |hm..(.:..2.. . .| 00000050 20 f6 24 3b 22 20 61 74 20 6c 69 6e 65 20 22 3b | .$;" at line ";| 00000060 9e 3a e0 0d 00 3c 0d f2 61 73 73 65 6d 62 6c 65 |.:...<..assemble| 00000070 0d 00 46 05 87 0d 00 50 2c 61 6e 67 64 25 3d 32 |..F....P,angd%=2| 00000080 30 3a 61 6e 67 3d 33 36 30 2f 61 6e 67 64 25 3a |0:ang=360/angd%:| 00000090 74 65 78 64 3d 32 36 32 30 30 30 2f 61 6e 67 64 |texd=262000/angd| 000000a0 25 0d 00 5a 26 de 20 69 5f 31 28 61 6e 67 64 25 |%..Z&. i_1(angd%| 000000b0 29 2c 69 5f 32 28 61 6e 67 64 25 29 2c 69 5f 33 |),i_2(angd%),i_3| 000000c0 28 61 6e 67 64 25 29 0d 00 64 0e 72 61 64 69 75 |(angd%)..d.radiu| 000000d0 73 3d 30 2e 35 0d 00 6e 14 d6 20 63 6c 65 61 72 |s=0.5..n.. clear| 000000e0 5f 7a 5f 62 75 66 66 65 72 0d 00 78 05 f5 0d 00 |_z_buffer..x....| 000000f0 82 20 64 69 72 25 3d 30 3a 78 25 3d 30 3a 79 25 |. dir%=0:x%=0:y%| 00000100 3d 30 3a 7a 25 3d 30 3a 6e 75 6d 25 3d 30 0d 00 |=0:z%=0:num%=0..| 00000110 8c 2a 61 6e 67 78 25 3d b3 28 33 36 30 29 3a 61 |.*angx%=.(360):a| 00000120 6e 67 79 25 3d b3 28 33 36 30 29 3a 61 6e 67 7a |ngy%=.(360):angz| 00000130 25 3d b3 28 33 36 30 29 0d 00 96 21 63 6f 73 78 |%=.(360)...!cosx| 00000140 3d 9b b2 28 61 6e 67 78 25 29 3a 73 69 6e 78 3d |=..(angx%):sinx=| 00000150 b5 b2 28 61 6e 67 78 25 29 0d 00 a0 21 63 6f 73 |..(angx%)...!cos| 00000160 79 3d 9b b2 28 61 6e 67 79 25 29 3a 73 69 6e 79 |y=..(angy%):siny| 00000170 3d b5 b2 28 61 6e 67 79 25 29 0d 00 aa 21 63 6f |=..(angy%)...!co| 00000180 73 7a 3d 9b b2 28 61 6e 67 7a 25 29 3a 73 69 6e |sz=..(angz%):sin| 00000190 7a 3d b5 b2 28 61 6e 67 7a 25 29 0d 00 b4 26 78 |z=..(angz%)...&x| 000001a0 78 3d 63 6f 73 79 2a 63 6f 73 7a 3a 78 79 3d 63 |x=cosy*cosz:xy=c| 000001b0 6f 73 79 2a 73 69 6e 7a 3a 78 7a 3d 2d 73 69 6e |osy*sinz:xz=-sin| 000001c0 79 0d 00 be 48 79 78 3d 73 69 6e 78 2a 73 69 6e |y...Hyx=sinx*sin| 000001d0 79 2a 63 6f 73 7a 2d 63 6f 73 78 2a 73 69 6e 7a |y*cosz-cosx*sinz| 000001e0 3a 79 79 3d 73 69 6e 78 2a 73 69 6e 79 2a 73 69 |:yy=sinx*siny*si| 000001f0 6e 7a 2b 63 6f 73 78 2a 63 6f 73 7a 3a 79 7a 3d |nz+cosx*cosz:yz=| 00000200 73 69 6e 78 2a 63 6f 73 79 0d 00 c8 3a 7a 78 3d |sinx*cosy...:zx=| 00000210 63 6f 73 78 2a 73 69 6e 79 2a 63 6f 73 7a 2b 73 |cosx*siny*cosz+s| 00000220 69 6e 78 2a 73 69 6e 7a 3a 7a 79 3d 2d 73 69 6e |inx*sinz:zy=-sin| 00000230 78 2a 63 6f 73 7a 3a 7a 7a 3d 63 6f 73 78 2a 63 |x*cosz:zz=cosx*c| 00000240 6f 73 79 0d 00 d2 05 f5 0d 00 dc 2b 6c 5f 78 3d |osy........+l_x=| 00000250 b3 28 31 29 3a 6c 5f 79 3d b3 28 31 29 3a 6c 5f |.(1):l_y=.(1):l_| 00000260 7a 3d 31 2d 6c 5f 78 2a 6c 5f 78 2d 6c 5f 79 2a |z=1-l_x*l_x-l_y*| 00000270 6c 5f 79 0d 00 e6 0b fd 20 6c 5f 7a 3e 30 0d 00 |l_y..... l_z>0..| 00000280 f0 0f 6c 5f 7a 3d 2d b6 28 6c 5f 7a 29 0d 00 fa |..l_z=-.(l_z)...| 00000290 1b 6c 78 3d 78 78 2a 6c 5f 78 2b 78 79 2a 6c 5f |.lx=xx*l_x+xy*l_| 000002a0 79 2b 78 7a 2a 6c 5f 7a 0d 01 04 1b 6c 79 3d 79 |y+xz*l_z....ly=y| 000002b0 78 2a 6c 5f 78 2b 79 79 2a 6c 5f 79 2b 79 7a 2a |x*l_x+yy*l_y+yz*| 000002c0 6c 5f 7a 0d 01 0e 1b 6c 7a 3d 7a 78 2a 6c 5f 78 |l_z....lz=zx*l_x| 000002d0 2b 7a 79 2a 6c 5f 79 2b 7a 7a 2a 6c 5f 7a 0d 01 |+zy*l_y+zz*l_z..| 000002e0 18 11 e3 6e 25 3d 30 20 b8 20 61 6e 67 64 25 0d |...n%=0 . angd%.| 000002f0 01 22 31 69 5f 31 28 6e 25 29 3d 30 2e 35 2b 30 |."1i_1(n%)=0.5+0| 00000300 2e 36 2a 28 6c 79 2a 9b b2 28 6e 25 2a 61 6e 67 |.6*(ly*..(n%*ang| 00000310 29 2b 6c 7a 2a b5 b2 28 6e 25 2a 61 6e 67 29 29 |)+lz*..(n%*ang))| 00000320 0d 01 2c 31 69 5f 32 28 6e 25 29 3d 30 2e 35 2b |..,1i_2(n%)=0.5+| 00000330 30 2e 36 2a 28 6c 78 2a 9b b2 28 6e 25 2a 61 6e |0.6*(lx*..(n%*an| 00000340 67 29 2b 6c 7a 2a b5 b2 28 6e 25 2a 61 6e 67 29 |g)+lz*..(n%*ang)| 00000350 29 0d 01 36 31 69 5f 33 28 6e 25 29 3d 30 2e 35 |)..61i_3(n%)=0.5| 00000360 2b 30 2e 36 2a 28 6c 78 2a 9b b2 28 6e 25 2a 61 |+0.6*(lx*..(n%*a| 00000370 6e 67 29 2b 6c 79 2a b5 b2 28 6e 25 2a 61 6e 67 |ng)+ly*..(n%*ang| 00000380 29 29 0d 01 40 1d e7 20 69 5f 31 28 6e 25 29 3c |))..@.. i_1(n%)<| 00000390 30 2e 31 20 69 5f 31 28 6e 25 29 3d 30 2e 31 0d |0.1 i_1(n%)=0.1.| 000003a0 01 4a 1d e7 20 69 5f 32 28 6e 25 29 3c 30 2e 31 |.J.. i_2(n%)<0.1| 000003b0 20 69 5f 32 28 6e 25 29 3d 30 2e 31 0d 01 54 1d | i_2(n%)=0.1..T.| 000003c0 e7 20 69 5f 33 28 6e 25 29 3c 30 2e 31 20 69 5f |. i_3(n%)<0.1 i_| 000003d0 33 28 6e 25 29 3d 30 2e 31 0d 01 5e 1e 69 5f 31 |3(n%)=0.1..^.i_1| 000003e0 28 6e 25 29 3d 39 39 31 2a 31 30 32 34 2a 69 5f |(n%)=991*1024*i_| 000003f0 31 28 6e 25 29 5e 32 0d 01 68 1e 69 5f 32 28 6e |1(n%)^2..h.i_2(n| 00000400 25 29 3d 39 39 31 2a 31 30 32 34 2a 69 5f 32 28 |%)=991*1024*i_2(| 00000410 6e 25 29 5e 32 0d 01 72 1e 69 5f 33 28 6e 25 29 |n%)^2..r.i_3(n%)| 00000420 3d 39 39 31 2a 31 30 32 34 2a 69 5f 33 28 6e 25 |=991*1024*i_3(n%| 00000430 29 5e 32 0d 01 7c 27 e7 20 69 5f 31 28 6e 25 29 |)^2..|'. i_1(n%)| 00000440 3e 39 39 31 2a 31 30 32 34 20 69 5f 31 28 6e 25 |>991*1024 i_1(n%| 00000450 29 3d 39 39 31 2a 31 30 32 34 0d 01 86 27 e7 20 |)=991*1024...'. | 00000460 69 5f 32 28 6e 25 29 3e 39 39 31 2a 31 30 32 34 |i_2(n%)>991*1024| 00000470 20 69 5f 32 28 6e 25 29 3d 39 39 31 2a 31 30 32 | i_2(n%)=991*102| 00000480 34 0d 01 90 27 e7 20 69 5f 32 28 6e 25 29 3e 39 |4...'. i_2(n%)>9| 00000490 39 31 2a 31 30 32 34 20 69 5f 32 28 6e 25 29 3d |91*1024 i_2(n%)=| 000004a0 39 39 31 2a 31 30 32 34 0d 01 9a 05 ed 0d 01 a4 |991*1024........| 000004b0 05 f5 0d 01 ae 0d 6c 25 3d b3 28 35 29 2b 32 0d |......l%=.(5)+2.| 000004c0 01 b8 0d c8 8e 20 64 69 72 25 20 ca 0d 01 c2 3c |..... dir% ....<| 000004d0 c9 20 30 20 3a 20 65 78 25 3d 78 25 2b 6c 25 3a |. 0 : ex%=x%+l%:| 000004e0 f2 70 69 70 65 31 28 78 25 2c 79 25 2c 7a 25 2c |.pipe1(x%,y%,z%,| 000004f0 65 78 25 2c 79 25 2c 7a 25 2c 72 61 64 69 75 73 |ex%,y%,z%,radius| 00000500 29 3a 78 25 3d 65 78 25 0d 01 cc 3c c9 20 31 20 |):x%=ex%...<. 1 | 00000510 3a 20 65 78 25 3d 78 25 2d 6c 25 3a f2 70 69 70 |: ex%=x%-l%:.pip| 00000520 65 31 28 65 78 25 2c 79 25 2c 7a 25 2c 78 25 2c |e1(ex%,y%,z%,x%,| 00000530 79 25 2c 7a 25 2c 72 61 64 69 75 73 29 3a 78 25 |y%,z%,radius):x%| 00000540 3d 65 78 25 0d 01 d6 3c c9 20 32 20 3a 20 65 79 |=ex%...<. 2 : ey| 00000550 25 3d 79 25 2b 6c 25 3a f2 70 69 70 65 32 28 78 |%=y%+l%:.pipe2(x| 00000560 25 2c 79 25 2c 7a 25 2c 78 25 2c 65 79 25 2c 7a |%,y%,z%,x%,ey%,z| 00000570 25 2c 72 61 64 69 75 73 29 3a 79 25 3d 65 79 25 |%,radius):y%=ey%| 00000580 0d 01 e0 3c c9 20 33 20 3a 20 65 79 25 3d 79 25 |...<. 3 : ey%=y%| 00000590 2d 6c 25 3a f2 70 69 70 65 32 28 78 25 2c 65 79 |-l%:.pipe2(x%,ey| 000005a0 25 2c 7a 25 2c 78 25 2c 79 25 2c 7a 25 2c 72 61 |%,z%,x%,y%,z%,ra| 000005b0 64 69 75 73 29 3a 79 25 3d 65 79 25 0d 01 ea 3c |dius):y%=ey%...<| 000005c0 c9 20 34 20 3a 20 65 7a 25 3d 7a 25 2b 6c 25 3a |. 4 : ez%=z%+l%:| 000005d0 f2 70 69 70 65 33 28 78 25 2c 79 25 2c 65 7a 25 |.pipe3(x%,y%,ez%| 000005e0 2c 78 25 2c 79 25 2c 7a 25 2c 72 61 64 69 75 73 |,x%,y%,z%,radius| 000005f0 29 3a 7a 25 3d 65 7a 25 0d 01 f4 3c c9 20 35 20 |):z%=ez%...<. 5 | 00000600 3a 20 65 7a 25 3d 7a 25 2d 6c 25 3a f2 70 69 70 |: ez%=z%-l%:.pip| 00000610 65 33 28 78 25 2c 79 25 2c 7a 25 2c 78 25 2c 79 |e3(x%,y%,z%,x%,y| 00000620 25 2c 65 7a 25 2c 72 61 64 69 75 73 29 3a 7a 25 |%,ez%,radius):z%| 00000630 3d 65 7a 25 0d 01 fe 05 cb 0d 02 08 0b 6e 75 6d |=ez%.........num| 00000640 25 2b 3d 31 0d 02 12 05 f5 0d 02 1c 0d 64 25 3d |%+=1.........d%=| 00000650 b3 28 36 29 2d 31 0d 02 26 1a fd 20 28 64 25 20 |.(6)-1..&.. (d% | 00000660 80 20 36 29 3c 3e 28 64 69 72 25 20 80 20 36 29 |. 6)<>(dir% . 6)| 00000670 0d 02 30 11 c8 8e 20 28 64 25 20 80 20 36 29 20 |..0... (d% . 6) | 00000680 ca 0d 02 3a 39 c9 20 30 20 3a 20 e7 20 78 25 3e |...:9. 0 : . x%>| 00000690 30 20 64 69 72 25 3d 31 20 82 20 a4 70 72 6f 62 |0 dir%=1 . .prob| 000006a0 28 78 25 29 20 8b 20 64 69 72 25 3d 30 20 82 20 |(x%) . dir%=0 . | 000006b0 a4 70 72 6f 62 28 2d 78 25 29 0d 02 44 39 c9 20 |.prob(-x%)..D9. | 000006c0 32 20 3a 20 e7 20 79 25 3e 30 20 64 69 72 25 3d |2 : . y%>0 dir%=| 000006d0 33 20 82 20 a4 70 72 6f 62 28 79 25 29 20 8b 20 |3 . .prob(y%) . | 000006e0 64 69 72 25 3d 32 20 82 20 a4 70 72 6f 62 28 2d |dir%=2 . .prob(-| 000006f0 79 25 29 0d 02 4e 3d c9 20 34 20 3a 20 e7 20 7a |y%)..N=. 4 : . z| 00000700 25 3e 30 20 64 69 72 25 3d 35 20 82 20 a4 70 72 |%>0 dir%=5 . .pr| 00000710 6f 62 28 7a 25 2a 32 29 20 8b 20 64 69 72 25 3d |ob(z%*2) . dir%=| 00000720 34 20 82 20 a4 70 72 6f 62 28 2d 7a 25 2a 32 29 |4 . .prob(-z%*2)| 00000730 0d 02 58 05 cb 0d 02 62 15 fd 20 a6 2d 39 39 20 |..X....b.. .-99 | 00000740 84 20 6e 75 6d 25 3e 34 30 30 0d 02 6c 16 d6 20 |. num%>400..l.. | 00000750 63 6c 65 61 72 5f 7a 5f 62 75 66 66 65 72 3a db |clear_z_buffer:.| 00000760 0d 02 76 07 fd 20 a3 0d 02 80 05 e0 0d 02 8a 05 |..v.. ..........| 00000770 3a 0d 02 94 0e dd a4 70 72 6f 62 28 73 25 29 0d |:......prob(s%).| 00000780 02 9e 16 e7 20 b3 28 31 35 29 3e 73 25 20 3d 31 |.... .(15)>s% =1| 00000790 20 8b 20 3d 30 0d 02 a8 05 3a 0d 02 b2 22 dd f2 | . =0....:..."..| 000007a0 70 69 70 65 31 28 73 78 2c 73 79 2c 73 7a 2c 65 |pipe1(sx,sy,sz,e| 000007b0 78 2c 65 79 2c 65 7a 2c 72 61 64 29 0d 02 bc 28 |x,ey,ez,rad)...(| 000007c0 e7 20 73 78 3e 65 78 20 8c 20 c8 94 20 73 78 2c |. sx>ex . .. sx,| 000007d0 65 78 3a c8 94 20 73 79 2c 65 79 3a c8 94 20 73 |ex:.. sy,ey:.. s| 000007e0 7a 2c 65 7a 0d 02 c6 13 e3 6e 25 3d 30 20 b8 20 |z,ez.....n%=0 . | 000007f0 61 6e 67 64 25 2d 31 0d 02 d0 2d 21 61 75 3d 6e |angd%-1...-!au=n| 00000800 25 2a 74 65 78 64 2b 74 65 78 64 3a 21 61 76 3d |%*texd+texd:!av=| 00000810 32 36 32 30 30 30 3a 21 61 69 3d 69 5f 31 28 6e |262000:!ai=i_1(n| 00000820 25 2b 31 29 0d 02 da 26 21 62 75 3d 6e 25 2a 74 |%+1)...&!bu=n%*t| 00000830 65 78 64 3a 21 62 76 3d 32 36 32 30 30 30 3a 21 |exd:!bv=262000:!| 00000840 62 69 3d 69 5f 31 28 6e 25 29 0d 02 e4 21 21 63 |bi=i_1(n%)...!!c| 00000850 75 3d 6e 25 2a 74 65 78 64 3a 21 63 76 3d 30 3a |u=n%*texd:!cv=0:| 00000860 21 63 69 3d 69 5f 31 28 6e 25 29 0d 02 ee 8b f2 |!ci=i_1(n%).....| 00000870 74 72 69 61 6e 67 6c 65 28 73 78 2c 73 79 2b 72 |triangle(sx,sy+r| 00000880 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 |ad*..(n%*ang+ang| 00000890 29 2c 73 7a 2b 72 61 64 2a b5 b2 28 6e 25 2a 61 |),sz+rad*..(n%*a| 000008a0 6e 67 2b 61 6e 67 29 2c 73 78 2c 73 79 2b 72 61 |ng+ang),sx,sy+ra| 000008b0 64 2a 9b b2 28 6e 25 2a 61 6e 67 29 2c 73 7a 2b |d*..(n%*ang),sz+| 000008c0 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 29 2c 65 |rad*..(n%*ang),e| 000008d0 78 2c 65 79 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 |x,ey+rad*..(n%*a| 000008e0 6e 67 29 2c 65 7a 2b 72 61 64 2a b5 b2 28 6e 25 |ng),ez+rad*..(n%| 000008f0 2a 61 6e 67 29 29 0d 02 f8 21 21 61 75 3d 6e 25 |*ang))...!!au=n%| 00000900 2a 74 65 78 64 3a 21 61 76 3d 30 3a 21 61 69 3d |*texd:!av=0:!ai=| 00000910 69 5f 31 28 6e 25 29 0d 03 02 28 21 62 75 3d 6e |i_1(n%)...(!bu=n| 00000920 25 2a 74 65 78 64 2b 74 65 78 64 3a 21 62 76 3d |%*texd+texd:!bv=| 00000930 30 3a 21 62 69 3d 69 5f 31 28 6e 25 2b 31 29 0d |0:!bi=i_1(n%+1).| 00000940 03 0c 2d 21 63 75 3d 6e 25 2a 74 65 78 64 2b 74 |..-!cu=n%*texd+t| 00000950 65 78 64 3a 21 63 76 3d 32 36 32 30 30 30 3a 21 |exd:!cv=262000:!| 00000960 63 69 3d 69 5f 31 28 6e 25 2b 31 29 0d 03 16 93 |ci=i_1(n%+1)....| 00000970 f2 74 72 69 61 6e 67 6c 65 28 65 78 2c 65 79 2b |.triangle(ex,ey+| 00000980 72 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 29 2c 65 |rad*..(n%*ang),e| 00000990 7a 2b 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 29 |z+rad*..(n%*ang)| 000009a0 2c 65 78 2c 65 79 2b 72 61 64 2a 9b b2 28 6e 25 |,ex,ey+rad*..(n%| 000009b0 2a 61 6e 67 2b 61 6e 67 29 2c 65 7a 2b 72 61 64 |*ang+ang),ez+rad| 000009c0 2a b5 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c |*..(n%*ang+ang),| 000009d0 73 78 2c 73 79 2b 72 61 64 2a 9b b2 28 6e 25 2a |sx,sy+rad*..(n%*| 000009e0 61 6e 67 2b 61 6e 67 29 2c 73 7a 2b 72 61 64 2a |ang+ang),sz+rad*| 000009f0 b5 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 29 0d |..(n%*ang+ang)).| 00000a00 03 20 05 ed 0d 03 2a 05 e1 0d 03 34 05 3a 0d 03 |. ....*....4.:..| 00000a10 3e 22 dd f2 70 69 70 65 32 28 73 78 2c 73 79 2c |>"..pipe2(sx,sy,| 00000a20 73 7a 2c 65 78 2c 65 79 2c 65 7a 2c 72 61 64 29 |sz,ex,ey,ez,rad)| 00000a30 0d 03 48 28 e7 20 73 79 3e 65 79 20 8c 20 c8 94 |..H(. sy>ey . ..| 00000a40 20 73 78 2c 65 78 3a c8 94 20 73 79 2c 65 79 3a | sx,ex:.. sy,ey:| 00000a50 c8 94 20 73 7a 2c 65 7a 0d 03 52 13 e3 6e 25 3d |.. sz,ez..R..n%=| 00000a60 30 20 b8 20 61 6e 67 64 25 2d 31 0d 03 5c 21 21 |0 . angd%-1..\!!| 00000a70 61 75 3d 6e 25 2a 74 65 78 64 3a 21 61 76 3d 30 |au=n%*texd:!av=0| 00000a80 3a 21 61 69 3d 69 5f 32 28 6e 25 29 0d 03 66 28 |:!ai=i_2(n%)..f(| 00000a90 21 62 75 3d 6e 25 2a 74 65 78 64 2b 74 65 78 64 |!bu=n%*texd+texd| 00000aa0 3a 21 62 76 3d 30 3a 21 62 69 3d 69 5f 32 28 6e |:!bv=0:!bi=i_2(n| 00000ab0 25 2b 31 29 0d 03 70 26 21 63 75 3d 6e 25 2a 74 |%+1)..p&!cu=n%*t| 00000ac0 65 78 64 3a 21 63 76 3d 32 36 32 30 30 30 3a 21 |exd:!cv=262000:!| 00000ad0 63 69 3d 69 5f 32 28 6e 25 29 0d 03 7a 8b f2 74 |ci=i_2(n%)..z..t| 00000ae0 72 69 61 6e 67 6c 65 28 73 78 2b 72 61 64 2a 9b |riangle(sx+rad*.| 00000af0 b2 28 6e 25 2a 61 6e 67 29 2c 73 79 2c 73 7a 2b |.(n%*ang),sy,sz+| 00000b00 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 29 2c 73 |rad*..(n%*ang),s| 00000b10 78 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 2b |x+rad*..(n%*ang+| 00000b20 61 6e 67 29 2c 73 79 2c 73 7a 2b 72 61 64 2a b5 |ang),sy,sz+rad*.| 00000b30 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c 65 78 |.(n%*ang+ang),ex| 00000b40 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 29 2c |+rad*..(n%*ang),| 00000b50 65 79 2c 65 7a 2b 72 61 64 2a b5 b2 28 6e 25 2a |ey,ez+rad*..(n%*| 00000b60 61 6e 67 29 29 0d 03 84 2d 21 61 75 3d 6e 25 2a |ang))...-!au=n%*| 00000b70 74 65 78 64 2b 74 65 78 64 3a 21 61 76 3d 32 36 |texd+texd:!av=26| 00000b80 32 30 30 30 3a 21 61 69 3d 69 5f 32 28 6e 25 2b |2000:!ai=i_2(n%+| 00000b90 31 29 0d 03 8e 26 21 62 75 3d 6e 25 2a 74 65 78 |1)...&!bu=n%*tex| 00000ba0 64 3a 21 62 76 3d 32 36 32 30 30 30 3a 21 62 69 |d:!bv=262000:!bi| 00000bb0 3d 69 5f 32 28 6e 25 29 0d 03 98 28 21 63 75 3d |=i_2(n%)...(!cu=| 00000bc0 6e 25 2a 74 65 78 64 2b 74 65 78 64 3a 21 63 76 |n%*texd+texd:!cv| 00000bd0 3d 30 3a 21 63 69 3d 69 5f 32 28 6e 25 2b 31 29 |=0:!ci=i_2(n%+1)| 00000be0 0d 03 a2 93 f2 74 72 69 61 6e 67 6c 65 28 65 78 |.....triangle(ex| 00000bf0 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 2b 61 |+rad*..(n%*ang+a| 00000c00 6e 67 29 2c 65 79 2c 65 7a 2b 72 61 64 2a b5 b2 |ng),ey,ez+rad*..| 00000c10 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c 65 78 2b |(n%*ang+ang),ex+| 00000c20 72 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 29 2c 65 |rad*..(n%*ang),e| 00000c30 79 2c 65 7a 2b 72 61 64 2a b5 b2 28 6e 25 2a 61 |y,ez+rad*..(n%*a| 00000c40 6e 67 29 2c 73 78 2b 72 61 64 2a 9b b2 28 6e 25 |ng),sx+rad*..(n%| 00000c50 2a 61 6e 67 2b 61 6e 67 29 2c 73 79 2c 73 7a 2b |*ang+ang),sy,sz+| 00000c60 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 2b 61 6e |rad*..(n%*ang+an| 00000c70 67 29 29 0d 03 ac 05 ed 0d 03 b6 05 e1 0d 03 c0 |g)).............| 00000c80 05 3a 0d 03 ca 22 dd f2 70 69 70 65 33 28 73 78 |.:..."..pipe3(sx| 00000c90 2c 73 79 2c 73 7a 2c 65 78 2c 65 79 2c 65 7a 2c |,sy,sz,ex,ey,ez,| 00000ca0 72 61 64 29 0d 03 d4 28 e7 20 65 7a 3e 73 7a 20 |rad)...(. ez>sz | 00000cb0 8c 20 c8 94 20 73 78 2c 65 78 3a c8 94 20 73 79 |. .. sx,ex:.. sy| 00000cc0 2c 65 79 3a c8 94 20 73 7a 2c 65 7a 0d 03 de 13 |,ey:.. sz,ez....| 00000cd0 e3 6e 25 3d 30 20 b8 20 61 6e 67 64 25 2d 31 0d |.n%=0 . angd%-1.| 00000ce0 03 e8 21 21 61 75 3d 6e 25 2a 74 65 78 64 3a 21 |..!!au=n%*texd:!| 00000cf0 61 76 3d 30 3a 21 61 69 3d 69 5f 32 28 6e 25 29 |av=0:!ai=i_2(n%)| 00000d00 0d 03 f2 28 21 62 75 3d 6e 25 2a 74 65 78 64 2b |...(!bu=n%*texd+| 00000d10 74 65 78 64 3a 21 62 76 3d 30 3a 21 62 69 3d 69 |texd:!bv=0:!bi=i| 00000d20 5f 32 28 6e 25 2b 31 29 0d 03 fc 26 21 63 75 3d |_2(n%+1)...&!cu=| 00000d30 6e 25 2a 74 65 78 64 3a 21 63 76 3d 32 36 32 30 |n%*texd:!cv=2620| 00000d40 30 30 3a 21 63 69 3d 69 5f 32 28 6e 25 29 0d 04 |00:!ci=i_2(n%)..| 00000d50 06 8b f2 74 72 69 61 6e 67 6c 65 28 73 78 2b 72 |...triangle(sx+r| 00000d60 61 64 2a 9b b2 28 6e 25 2a 61 6e 67 29 2c 73 79 |ad*..(n%*ang),sy| 00000d70 2b 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 29 2c |+rad*..(n%*ang),| 00000d80 73 7a 2c 73 78 2b 72 61 64 2a 9b b2 28 6e 25 2a |sz,sx+rad*..(n%*| 00000d90 61 6e 67 2b 61 6e 67 29 2c 73 79 2b 72 61 64 2a |ang+ang),sy+rad*| 00000da0 b5 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c 73 |..(n%*ang+ang),s| 00000db0 7a 2c 65 78 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 |z,ex+rad*..(n%*a| 00000dc0 6e 67 29 2c 65 79 2b 72 61 64 2a b5 b2 28 6e 25 |ng),ey+rad*..(n%| 00000dd0 2a 61 6e 67 29 2c 65 7a 29 0d 04 10 2d 21 61 75 |*ang),ez)...-!au| 00000de0 3d 6e 25 2a 74 65 78 64 2b 74 65 78 64 3a 21 61 |=n%*texd+texd:!a| 00000df0 76 3d 32 36 32 30 30 30 3a 21 61 69 3d 69 5f 32 |v=262000:!ai=i_2| 00000e00 28 6e 25 2b 31 29 0d 04 1a 26 21 62 75 3d 6e 25 |(n%+1)...&!bu=n%| 00000e10 2a 74 65 78 64 3a 21 62 76 3d 32 36 32 30 30 30 |*texd:!bv=262000| 00000e20 3a 21 62 69 3d 69 5f 32 28 6e 25 29 0d 04 24 28 |:!bi=i_2(n%)..$(| 00000e30 21 63 75 3d 6e 25 2a 74 65 78 64 2b 74 65 78 64 |!cu=n%*texd+texd| 00000e40 3a 21 63 76 3d 30 3a 21 63 69 3d 69 5f 32 28 6e |:!cv=0:!ci=i_2(n| 00000e50 25 2b 31 29 0d 04 2e 93 f2 74 72 69 61 6e 67 6c |%+1).....triangl| 00000e60 65 28 65 78 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 |e(ex+rad*..(n%*a| 00000e70 6e 67 2b 61 6e 67 29 2c 65 79 2b 72 61 64 2a b5 |ng+ang),ey+rad*.| 00000e80 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c 65 7a |.(n%*ang+ang),ez| 00000e90 2c 65 78 2b 72 61 64 2a 9b b2 28 6e 25 2a 61 6e |,ex+rad*..(n%*an| 00000ea0 67 29 2c 65 79 2b 72 61 64 2a b5 b2 28 6e 25 2a |g),ey+rad*..(n%*| 00000eb0 61 6e 67 29 2c 65 7a 2c 73 78 2b 72 61 64 2a 9b |ang),ez,sx+rad*.| 00000ec0 b2 28 6e 25 2a 61 6e 67 2b 61 6e 67 29 2c 73 79 |.(n%*ang+ang),sy| 00000ed0 2b 72 61 64 2a b5 b2 28 6e 25 2a 61 6e 67 2b 61 |+rad*..(n%*ang+a| 00000ee0 6e 67 29 2c 73 7a 29 0d 04 38 05 ed 0d 04 42 05 |ng),sz)..8....B.| 00000ef0 e1 0d 04 4c 05 3a 0d 04 56 33 dd f2 74 72 69 61 |...L.:..V3..tria| 00000f00 6e 67 6c 65 28 78 5f 31 2c 79 5f 31 2c 7a 5f 31 |ngle(x_1,y_1,z_1| 00000f10 2c 78 5f 32 2c 79 5f 32 2c 7a 5f 32 2c 78 5f 33 |,x_2,y_2,z_2,x_3| 00000f20 2c 79 5f 33 2c 7a 5f 33 29 0d 04 60 1b 78 31 3d |,y_3,z_3)..`.x1=| 00000f30 78 78 2a 78 5f 31 2b 78 79 2a 79 5f 31 2b 78 7a |xx*x_1+xy*y_1+xz| 00000f40 2a 7a 5f 31 0d 04 6a 1b 79 31 3d 79 78 2a 78 5f |*z_1..j.y1=yx*x_| 00000f50 31 2b 79 79 2a 79 5f 31 2b 79 7a 2a 7a 5f 31 0d |1+yy*y_1+yz*z_1.| 00000f60 04 74 1e 7a 31 3d 7a 78 2a 78 5f 31 2b 7a 79 2a |.t.z1=zx*x_1+zy*| 00000f70 79 5f 31 2b 7a 7a 2a 7a 5f 31 2b 32 30 0d 04 7e |y_1+zz*z_1+20..~| 00000f80 1b 78 32 3d 78 78 2a 78 5f 32 2b 78 79 2a 79 5f |.x2=xx*x_2+xy*y_| 00000f90 32 2b 78 7a 2a 7a 5f 32 0d 04 88 1b 79 32 3d 79 |2+xz*z_2....y2=y| 00000fa0 78 2a 78 5f 32 2b 79 79 2a 79 5f 32 2b 79 7a 2a |x*x_2+yy*y_2+yz*| 00000fb0 7a 5f 32 0d 04 92 1e 7a 32 3d 7a 78 2a 78 5f 32 |z_2....z2=zx*x_2| 00000fc0 2b 7a 79 2a 79 5f 32 2b 7a 7a 2a 7a 5f 32 2b 32 |+zy*y_2+zz*z_2+2| 00000fd0 30 0d 04 9c 1b 78 33 3d 78 78 2a 78 5f 33 2b 78 |0....x3=xx*x_3+x| 00000fe0 79 2a 79 5f 33 2b 78 7a 2a 7a 5f 33 0d 04 a6 1b |y*y_3+xz*z_3....| 00000ff0 79 33 3d 79 78 2a 78 5f 33 2b 79 79 2a 79 5f 33 |y3=yx*x_3+yy*y_3| 00001000 2b 79 7a 2a 7a 5f 33 0d 04 b0 1e 7a 33 3d 7a 78 |+yz*z_3....z3=zx| 00001010 2a 78 5f 33 2b 7a 79 2a 79 5f 33 2b 7a 7a 2a 7a |*x_3+zy*y_3+zz*z| 00001020 5f 33 2b 32 30 0d 04 ba 1c e7 20 7a 31 3c 31 20 |_3+20..... z1<1 | 00001030 84 20 7a 32 3c 31 20 84 20 7a 33 3c 31 20 8c 20 |. z2<1 . z3<1 . | 00001040 e1 0d 04 c4 1e 21 61 78 3d 28 78 5f 6f 66 66 25 |.....!ax=(x_off%| 00001050 2b 76 25 2a 78 31 2f 7a 31 29 2a 31 30 32 34 0d |+v%*x1/z1)*1024.| 00001060 04 ce 17 21 61 79 3d 79 5f 6f 66 66 25 2b 76 25 |...!ay=y_off%+v%| 00001070 2a 79 31 2f 7a 31 0d 04 d8 0f 21 61 7a 3d 7a 31 |*y1/z1....!az=z1| 00001080 2a 34 30 39 36 0d 04 e2 1e 21 62 78 3d 28 78 5f |*4096....!bx=(x_| 00001090 6f 66 66 25 2b 76 25 2a 78 32 2f 7a 32 29 2a 31 |off%+v%*x2/z2)*1| 000010a0 30 32 34 0d 04 ec 17 21 62 79 3d 79 5f 6f 66 66 |024....!by=y_off| 000010b0 25 2b 76 25 2a 79 32 2f 7a 32 0d 04 f6 0f 21 62 |%+v%*y2/z2....!b| 000010c0 7a 3d 7a 32 2a 34 30 39 36 0d 05 00 1e 21 63 78 |z=z2*4096....!cx| 000010d0 3d 28 78 5f 6f 66 66 25 2b 76 25 2a 78 33 2f 7a |=(x_off%+v%*x3/z| 000010e0 33 29 2a 31 30 32 34 0d 05 0a 17 21 63 79 3d 79 |3)*1024....!cy=y| 000010f0 5f 6f 66 66 25 2b 76 25 2a 79 33 2f 7a 33 0d 05 |_off%+v%*y3/z3..| 00001100 14 0f 21 63 7a 3d 7a 33 2a 34 30 39 36 0d 05 1e |..!cz=z3*4096...| 00001110 37 e7 20 21 62 78 2a 21 63 79 2b 21 63 78 2a 21 |7. !bx*!cy+!cx*!| 00001120 61 79 2b 21 61 78 2a 21 62 79 3c 21 62 78 2a 21 |ay+!ax*!by<!bx*!| 00001130 61 79 2b 21 63 78 2a 21 62 79 2b 21 61 78 2a 21 |ay+!cx*!by+!ax*!| 00001140 63 79 20 e1 0d 05 28 0e d6 20 70 6c 6f 74 5f 74 |cy ...(.. plot_t| 00001150 72 69 0d 05 32 05 e1 0d 05 3c 05 3a 0d 05 46 0e |ri..2....<.:..F.| 00001160 dd f2 61 73 73 65 6d 62 6c 65 0d 05 50 42 de 20 |..assemble..PB. | 00001170 63 6f 64 65 25 20 32 30 34 38 2c 74 65 78 74 75 |code% 2048,textu| 00001180 72 65 25 20 36 35 35 39 32 2c 64 69 76 5f 74 61 |re% 65592,div_ta| 00001190 62 6c 65 25 20 31 36 33 38 34 30 2a 34 2c 63 6f |ble% 163840*4,co| 000011a0 6c 74 61 62 6c 65 25 20 38 31 39 32 0d 05 5a 14 |ltable% 8192..Z.| 000011b0 e3 70 61 73 73 25 3d 30 20 b8 20 32 20 88 20 32 |.pass%=0 . 2 . 2| 000011c0 0d 05 64 0c 50 25 3d 63 6f 64 65 25 0d 05 6e 0e |..d.P%=code%..n.| 000011d0 5b 4f 50 54 20 70 61 73 73 25 0d 05 78 0f 2e 63 |[OPT pass%..x..c| 000011e0 68 65 63 6b 5f 6d 6f 64 65 0d 05 82 0d 6d 6f 76 |heck_mode....mov| 000011f0 20 72 30 2c 23 30 0d 05 8c 17 61 64 72 20 72 31 | r0,#0....adr r1| 00001200 2c 6d 6f 64 65 62 6c 6f 63 6b 52 50 43 0d 05 96 |,modeblockRPC...| 00001210 17 73 77 69 22 58 4f 53 5f 53 63 72 65 65 6e 4d |.swi"XOS_ScreenM| 00001220 6f 64 65 22 0d 05 a0 18 61 64 72 76 63 20 72 30 |ode"....adrvc r0| 00001230 2c 52 50 43 5f 64 65 74 61 69 6c 73 0d 05 aa 10 |,RPC_details....| 00001240 6d 6f 76 76 63 20 70 63 2c 72 31 34 0d 05 b4 0e |movvc pc,r14....| 00001250 73 77 69 20 32 35 36 2b 32 32 0d 05 be 15 73 77 |swi 256+22....sw| 00001260 69 20 32 35 36 2b 32 31 2b 26 32 30 30 30 30 0d |i 256+21+&20000.| 00001270 05 c8 19 61 64 72 76 63 20 72 30 2c 48 49 47 48 |...adrvc r0,HIGH| 00001280 5f 64 65 74 61 69 6c 73 0d 05 d2 10 6d 6f 76 76 |_details....movv| 00001290 63 20 70 63 2c 72 31 34 0d 05 dc 0e 73 77 69 20 |c pc,r14....swi | 000012a0 32 35 36 2b 32 32 0d 05 e6 15 73 77 69 20 32 35 |256+22....swi 25| 000012b0 36 2b 31 35 2b 26 32 30 30 30 30 0d 05 f0 18 61 |6+15+&20000....a| 000012c0 64 72 76 63 20 72 30 2c 4d 45 44 5f 64 65 74 61 |drvc r0,MED_deta| 000012d0 69 6c 73 0d 05 fa 10 6d 6f 76 76 63 20 70 63 2c |ils....movvc pc,| 000012e0 72 31 34 0d 06 04 0e 73 77 69 20 32 35 36 2b 32 |r14....swi 256+2| 000012f0 32 0d 06 0e 15 73 77 69 20 32 35 36 2b 31 33 2b |2....swi 256+13+| 00001300 26 32 30 30 30 30 0d 06 18 18 61 64 72 76 63 20 |&20000....adrvc | 00001310 72 30 2c 4c 4f 57 5f 64 65 74 61 69 6c 73 0d 06 |r0,LOW_details..| 00001320 22 10 6d 6f 76 76 63 20 70 63 2c 72 31 34 0d 06 |".movvc pc,r14..| 00001330 2c 15 61 64 72 20 72 30 2c 6d 6f 64 65 5f 65 72 |,.adr r0,mode_er| 00001340 72 6f 72 0d 06 36 16 6f 72 72 73 20 70 63 2c 72 |ror..6.orrs pc,r| 00001350 31 34 2c 23 31 3c 3c 32 38 0d 06 40 11 2e 6d 6f |14,#1<<28..@..mo| 00001360 64 65 62 6c 6f 63 6b 52 50 43 0d 06 4a 09 64 63 |deblockRPC..J.dc| 00001370 64 20 31 0d 06 54 14 64 63 64 20 31 30 32 34 3a |d 1..T.dcd 1024:| 00001380 64 63 64 20 37 36 38 0d 06 5e 09 64 63 64 20 33 |dcd 768..^.dcd 3| 00001390 0d 06 68 0a 64 63 64 20 2d 31 0d 06 72 11 64 63 |..h.dcd -1..r.dc| 000013a0 64 20 30 3a 64 63 64 20 31 32 38 0d 06 7c 11 64 |d 0:dcd 128..|.d| 000013b0 63 64 20 33 3a 64 63 64 20 32 35 35 0d 06 86 0a |cd 3:dcd 255....| 000013c0 64 63 64 20 2d 31 0d 06 90 31 2e 52 50 43 5f 64 |dcd -1...1.RPC_d| 000013d0 65 74 61 69 6c 73 3a 64 63 64 20 31 30 32 34 3a |etails:dcd 1024:| 000013e0 64 63 64 20 34 31 30 3a 64 63 64 20 35 31 32 3a |dcd 410:dcd 512:| 000013f0 64 63 64 20 33 38 34 0d 06 9a 31 2e 48 49 47 48 |dcd 384...1.HIGH| 00001400 5f 64 65 74 61 69 6c 73 3a 64 63 64 20 36 34 30 |_details:dcd 640| 00001410 3a 64 63 64 20 32 35 36 3a 64 63 64 20 33 32 30 |:dcd 256:dcd 320| 00001420 3a 64 63 64 20 32 35 36 0d 06 a4 30 2e 4d 45 44 |:dcd 256...0.MED| 00001430 5f 64 65 74 61 69 6c 73 3a 64 63 64 20 36 34 30 |_details:dcd 640| 00001440 3a 64 63 64 20 31 36 30 3a 64 63 64 20 33 32 30 |:dcd 160:dcd 320| 00001450 3a 64 63 64 20 31 32 38 0d 06 ae 30 2e 4c 4f 57 |:dcd 128...0.LOW| 00001460 5f 64 65 74 61 69 6c 73 3a 64 63 64 20 33 32 30 |_details:dcd 320| 00001470 3a 64 63 64 20 31 32 38 3a 64 63 64 20 31 36 30 |:dcd 128:dcd 160| 00001480 3a 64 63 64 20 31 32 38 0d 06 b8 0f 2e 6d 6f 64 |:dcd 128.....mod| 00001490 65 5f 65 72 72 6f 72 0d 06 c2 09 64 63 64 20 30 |e_error....dcd 0| 000014a0 0d 06 cc 8d 65 71 75 73 22 50 69 70 65 73 20 63 |....equs"Pipes c| 000014b0 6f 75 6c 64 20 6e 6f 74 20 66 69 6e 64 20 61 20 |ould not find a | 000014c0 73 75 69 74 61 62 6c 65 20 73 63 72 65 65 6e 20 |suitable screen | 000014d0 6d 6f 64 65 20 74 6f 20 72 75 6e 20 69 6e 2e 20 |mode to run in. | 000014e0 52 65 71 75 69 72 65 73 20 65 69 74 68 65 72 20 |Requires either | 000014f0 31 30 32 34 78 37 36 38 2c 20 36 34 30 78 35 31 |1024x768, 640x51| 00001500 32 2c 20 36 34 30 78 32 35 36 20 6f 72 20 33 32 |2, 640x256 or 32| 00001510 30 78 32 35 36 20 69 6e 20 32 35 36 20 63 6f 6c |0x256 in 256 col| 00001520 6f 75 72 73 2e 22 2b bd 26 44 2b bd 30 0d 06 d6 |ours."+.&D+.0...| 00001530 09 41 4c 49 47 4e 0d 06 e0 05 5d 0d 06 ea 05 ed |.ALIGN....].....| 00001540 0d 06 f4 16 64 65 74 25 3d ba 28 63 68 65 63 6b |....det%=.(check| 00001550 5f 6d 6f 64 65 29 0d 06 fe 35 77 69 64 25 3d 21 |_mode)...5wid%=!| 00001560 64 65 74 25 3a 76 25 3d 64 65 74 25 21 34 3a 78 |det%:v%=det%!4:x| 00001570 5f 6f 66 66 25 3d 64 65 74 25 21 38 3a 79 5f 6f |_off%=det%!8:y_o| 00001580 66 66 25 3d 64 65 74 25 21 31 32 0d 07 08 1d de |ff%=det%!12.....| 00001590 20 7a 5f 62 75 66 66 65 72 25 20 77 69 64 25 2a | z_buffer% wid%*| 000015a0 79 5f 6f 66 66 25 2a 38 0d 07 12 14 e3 70 61 73 |y_off%*8.....pas| 000015b0 73 25 3d 30 20 b8 20 32 20 88 20 32 0d 07 1c 0c |s%=0 . 2 . 2....| 000015c0 50 25 3d 63 6f 64 65 25 0d 07 26 0e 5b 4f 50 54 |P%=code%..&.[OPT| 000015d0 20 70 61 73 73 25 0d 07 30 0a 2e 73 65 74 75 70 | pass%..0..setup| 000015e0 0d 07 3a 14 6c 64 72 20 72 30 2c 64 69 76 5f 74 |..:.ldr r0,div_t| 000015f0 61 62 6c 65 0d 07 44 0d 6d 6f 76 20 72 32 2c 23 |able..D.mov r2,#| 00001600 31 0d 07 4e 07 2e 64 6c 0d 07 58 15 3b 20 64 69 |1..N..dl..X.; di| 00001610 76 69 64 65 20 72 34 20 62 79 20 72 32 0d 07 62 |vide r4 by r2..b| 00001620 13 6d 6f 76 20 72 34 2c 23 31 30 34 38 35 37 36 |.mov r4,#1048576| 00001630 0d 07 6c 27 6d 6f 76 20 72 35 2c 23 30 20 20 20 |..l'mov r5,#0 | 00001640 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 72 65 | ; re| 00001650 6d 61 69 6e 64 65 72 0d 07 76 26 6d 6f 76 20 72 |mainder..v&mov r| 00001660 36 2c 23 30 20 20 20 20 20 20 20 20 20 20 20 20 |6,#0 | 00001670 20 20 20 3b 20 71 75 6f 74 69 65 6e 74 0d 07 80 | ; quotient...| 00001680 11 6d 6f 76 20 72 37 2c 23 31 3c 3c 33 31 0d 07 |.mov r7,#1<<31..| 00001690 8a 0d 2e 64 69 76 5f 6c 6f 6f 70 0d 07 94 14 6d |...div_loop....m| 000016a0 6f 76 73 20 72 34 2c 72 34 2c 6c 73 6c 23 31 0d |ovs r4,r4,lsl#1.| 000016b0 07 9e 10 61 64 63 20 72 35 2c 72 35 2c 72 35 0d |...adc r5,r5,r5.| 000016c0 07 a8 0d 63 6d 70 20 72 35 2c 72 32 0d 07 b2 12 |...cmp r5,r2....| 000016d0 73 75 62 67 65 20 72 35 2c 72 35 2c 72 32 0d 07 |subge r5,r5,r2..| 000016e0 bc 12 6f 72 72 67 65 20 72 36 2c 72 36 2c 72 37 |..orrge r6,r6,r7| 000016f0 0d 07 c6 14 6d 6f 76 73 20 72 37 2c 72 37 2c 6c |....movs r7,r7,l| 00001700 73 72 23 31 0d 07 d0 10 62 6e 65 20 64 69 76 5f |sr#1....bne div_| 00001710 6c 6f 6f 70 0d 07 da 18 3b 20 72 36 20 3d 20 72 |loop....; r6 = r| 00001720 34 20 64 69 76 20 72 32 20 3d 20 73 0d 07 e4 13 |4 div r2 = s....| 00001730 73 74 72 20 72 36 2c 5b 72 30 2c 23 34 5d 21 0d |str r6,[r0,#4]!.| 00001740 07 ee 10 61 64 64 20 72 32 2c 72 32 2c 23 31 0d |...add r2,r2,#1.| 00001750 07 f8 12 63 6d 70 20 72 32 2c 23 31 36 33 38 34 |...cmp r2,#16384| 00001760 30 0d 08 02 0a 62 6c 65 20 64 6c 0d 08 0c 0e 6d |0....ble dl....m| 00001770 6f 76 20 70 63 2c 72 31 34 0d 08 16 13 2e 63 6c |ov pc,r14.....cl| 00001780 65 61 72 5f 7a 5f 62 75 66 66 65 72 0d 08 20 13 |ear_z_buffer.. .| 00001790 6c 64 72 20 72 30 2c 7a 5f 62 75 66 66 65 72 0d |ldr r0,z_buffer.| 000017a0 08 2a 31 6d 6f 76 20 72 31 2c 23 31 3c 3c 33 30 |.*1mov r1,#1<<30| 000017b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000017c0 20 20 20 3b 20 6d 61 78 20 5a 20 76 61 6c 75 65 | ; max Z value| 000017d0 0d 08 34 1c 61 64 64 20 72 32 2c 72 30 2c 23 77 |..4.add r2,r0,#w| 000017e0 69 64 25 2a 79 5f 6f 66 66 25 2a 38 0d 08 3e 09 |id%*y_off%*8..>.| 000017f0 2e 6c 6f 6f 70 0d 08 48 12 73 74 72 20 72 31 2c |.loop..H.str r1,| 00001800 5b 72 30 5d 2c 23 34 0d 08 52 0d 63 6d 70 20 72 |[r0],#4..R.cmp r| 00001810 30 2c 72 32 0d 08 5c 0c 62 6c 74 20 6c 6f 6f 70 |0,r2..\.blt loop| 00001820 0d 08 66 0e 6d 6f 76 20 70 63 2c 72 31 34 0d 08 |..f.mov pc,r14..| 00001830 70 1b 2e 7a 5f 62 75 66 66 65 72 3a 64 63 64 20 |p..z_buffer:dcd | 00001840 7a 5f 62 75 66 66 65 72 25 0d 08 7a 23 2e 74 65 |z_buffer%..z#.te| 00001850 78 74 75 72 65 5f 73 70 72 69 74 65 3a 64 63 64 |xture_sprite:dcd| 00001860 20 74 65 78 74 75 72 65 25 2b 35 36 0d 08 84 12 | texture%+56....| 00001870 2e 72 5f 69 6e 64 65 78 3a 64 63 64 20 30 0d 08 |.r_index:dcd 0..| 00001880 8e 12 2e 6c 5f 69 6e 64 65 78 3a 64 63 64 20 30 |...l_index:dcd 0| 00001890 0d 08 98 11 2e 73 63 5f 65 6e 64 3a 64 63 64 20 |.....sc_end:dcd | 000018a0 30 0d 08 a2 13 2e 73 63 5f 6f 74 68 65 72 3a 64 |0.....sc_other:d| 000018b0 63 64 20 30 0d 08 ac 1a 2e 73 63 5f 61 62 73 6f |cd 0.....sc_abso| 000018c0 6c 75 74 65 5f 65 6e 64 3a 64 63 64 20 30 0d 08 |lute_end:dcd 0..| 000018d0 b6 11 2e 73 63 5f 63 75 72 3a 64 63 64 20 30 0d |...sc_cur:dcd 0.| 000018e0 08 c0 1e 2e 73 63 72 65 65 6e 5f 61 64 72 3a 64 |....screen_adr:d| 000018f0 63 64 20 a4 73 63 72 65 65 6e 61 64 72 0d 08 ca |cd .screenadr...| 00001900 1d 2e 64 69 76 5f 74 61 62 6c 65 3a 64 63 64 20 |..div_table:dcd | 00001910 64 69 76 5f 74 61 62 6c 65 25 0d 08 d4 1b 2e 63 |div_table%.....c| 00001920 6f 6c 74 61 62 6c 65 3a 64 63 64 20 63 6f 6c 74 |oltable:dcd colt| 00001930 61 62 6c 65 25 0d 08 de 3f 2e 61 79 3a 64 63 64 |able%...?.ay:dcd| 00001940 20 30 3a 2e 61 78 3a 64 63 64 20 30 3a 2e 61 75 | 0:.ax:dcd 0:.au| 00001950 3a 64 63 64 20 30 3a 2e 61 76 3a 64 63 64 20 30 |:dcd 0:.av:dcd 0| 00001960 3a 2e 61 69 3a 64 63 64 20 30 3a 2e 61 7a 3a 64 |:.ai:dcd 0:.az:d| 00001970 63 64 20 30 0d 08 e8 3f 2e 62 79 3a 64 63 64 20 |cd 0...?.by:dcd | 00001980 30 3a 2e 62 78 3a 64 63 64 20 30 3a 2e 62 75 3a |0:.bx:dcd 0:.bu:| 00001990 64 63 64 20 30 3a 2e 62 76 3a 64 63 64 20 30 3a |dcd 0:.bv:dcd 0:| 000019a0 2e 62 69 3a 64 63 64 20 30 3a 2e 62 7a 3a 64 63 |.bi:dcd 0:.bz:dc| 000019b0 64 20 30 0d 08 f2 3f 2e 63 79 3a 64 63 64 20 30 |d 0...?.cy:dcd 0| 000019c0 3a 2e 63 78 3a 64 63 64 20 30 3a 2e 63 75 3a 64 |:.cx:dcd 0:.cu:d| 000019d0 63 64 20 30 3a 2e 63 76 3a 64 63 64 20 30 3a 2e |cd 0:.cv:dcd 0:.| 000019e0 63 69 3a 64 63 64 20 30 3a 2e 63 7a 3a 64 63 64 |ci:dcd 0:.cz:dcd| 000019f0 20 30 0d 08 fc 1f 2e 76 65 72 74 73 3a 64 63 64 | 0.....verts:dcd| 00001a00 20 61 79 3a 64 63 64 20 62 79 3a 64 63 64 20 63 | ay:dcd by:dcd c| 00001a10 79 0d 09 06 0d 2e 70 6c 6f 74 5f 74 72 69 0d 09 |y.....plot_tri..| 00001a20 10 2e 61 64 72 20 72 34 2c 61 79 3a 61 64 72 20 |..adr r4,ay:adr | 00001a30 72 35 2c 62 79 3a 61 64 72 20 72 36 2c 63 79 3a |r5,by:adr r6,cy:| 00001a40 61 64 72 20 72 39 2c 76 65 72 74 73 0d 09 1a 1f |adr r9,verts....| 00001a50 73 74 6d 66 64 20 72 31 33 21 2c 7b 72 30 2c 72 |stmfd r13!,{r0,r| 00001a60 31 31 2c 72 31 32 2c 72 31 34 7d 0d 09 24 13 73 |11,r12,r14}..$.s| 00001a70 74 72 20 72 31 33 2c 73 74 61 63 6b 70 32 0d 09 |tr r13,stackp2..| 00001a80 2e 0f 6c 64 72 20 72 30 2c 5b 72 34 5d 0d 09 38 |..ldr r0,[r4]..8| 00001a90 0f 6c 64 72 20 72 32 2c 5b 72 35 5d 0d 09 42 0d |.ldr r2,[r5]..B.| 00001aa0 63 6d 70 20 72 32 2c 72 30 0d 09 4c 0f 6d 6f 76 |cmp r2,r0..L.mov| 00001ab0 6c 74 20 72 30 2c 72 32 0d 09 56 0f 6d 6f 76 67 |lt r0,r2..V.movg| 00001ac0 65 20 72 31 2c 23 30 0d 09 60 0f 6d 6f 76 6c 74 |e r1,#0..`.movlt| 00001ad0 20 72 31 2c 23 31 0d 09 6a 0f 6c 64 72 20 72 32 | r1,#1..j.ldr r2| 00001ae0 2c 5b 72 36 5d 0d 09 74 0d 63 6d 70 20 72 32 2c |,[r6]..t.cmp r2,| 00001af0 72 30 0d 09 7e 0f 6d 6f 76 6c 74 20 72 30 2c 72 |r0..~.movlt r0,r| 00001b00 32 0d 09 88 0f 6d 6f 76 6c 74 20 72 31 2c 23 32 |2....movlt r1,#2| 00001b10 0d 09 92 18 6c 64 72 20 72 32 2c 5b 72 39 2c 72 |....ldr r2,[r9,r| 00001b20 31 2c 6c 73 6c 23 32 5d 0d 09 9c 14 6c 64 6d 69 |1,lsl#2]....ldmi| 00001b30 62 20 72 32 2c 7b 72 32 2d 72 36 7d 0d 09 a6 11 |b r2,{r2-r6}....| 00001b40 73 75 62 73 20 72 31 2c 72 31 2c 23 31 0d 09 b0 |subs r1,r1,#1...| 00001b50 14 6c 64 72 6c 74 20 72 38 2c 5b 72 39 2c 23 38 |.ldrlt r8,[r9,#8| 00001b60 5d 0d 09 ba 1a 6c 64 72 67 65 20 72 38 2c 5b 72 |]....ldrge r8,[r| 00001b70 39 2c 72 31 2c 6c 73 6c 23 32 5d 0d 09 c4 12 73 |9,r1,lsl#2]....s| 00001b80 74 72 20 72 38 2c 6c 5f 69 6e 64 65 78 0d 09 ce |tr r8,l_index...| 00001b90 0f 6d 6f 76 6c 74 20 72 31 2c 23 32 0d 09 d8 11 |.movlt r1,#2....| 00001ba0 73 75 62 73 20 72 31 2c 72 31 2c 23 31 0d 09 e2 |subs r1,r1,#1...| 00001bb0 14 6c 64 72 6c 74 20 72 39 2c 5b 72 39 2c 23 38 |.ldrlt r9,[r9,#8| 00001bc0 5d 0d 09 ec 1a 6c 64 72 67 65 20 72 39 2c 5b 72 |]....ldrge r9,[r| 00001bd0 39 2c 72 31 2c 6c 73 6c 23 32 5d 0d 09 f6 12 73 |9,r1,lsl#2]....s| 00001be0 74 72 20 72 39 2c 72 5f 69 6e 64 65 78 0d 0a 00 |tr r9,r_index...| 00001bf0 15 6c 64 6d 69 61 20 72 38 2c 7b 72 38 2d 72 31 |.ldmia r8,{r8-r1| 00001c00 33 7d 0d 0a 0a 15 6c 64 72 20 72 31 2c 64 69 76 |3}....ldr r1,div| 00001c10 5f 74 61 62 6c 65 32 0d 0a 14 11 73 75 62 73 20 |_table2....subs | 00001c20 72 38 2c 72 38 2c 72 30 0d 0a 1e 1a 6c 64 72 67 |r8,r8,r0....ldrg| 00001c30 74 20 72 38 2c 5b 72 31 2c 72 38 2c 6c 73 6c 23 |t r8,[r1,r8,lsl#| 00001c40 32 5d 0d 0a 28 0d 73 74 72 20 72 32 2c 6c 78 0d |2]..(.str r2,lx.| 00001c50 0a 32 39 73 75 62 20 72 39 2c 72 39 2c 72 32 3a |.29sub r9,r9,r2:| 00001c60 6d 6f 76 20 72 39 2c 72 39 2c 61 73 72 23 31 30 |mov r9,r9,asr#10| 00001c70 3a 6d 75 6c 20 72 39 2c 72 38 2c 72 39 3a 73 74 |:mul r9,r8,r9:st| 00001c80 72 20 72 39 2c 64 6c 78 0d 0a 3c 17 61 64 72 20 |r r9,dlx..<.adr | 00001c90 72 39 2c 6c 65 66 74 5f 73 74 75 66 66 2b 38 0d |r9,left_stuff+8.| 00001ca0 0a 46 15 73 74 6d 69 61 20 72 39 21 2c 7b 72 33 |.F.stmia r9!,{r3| 00001cb0 2d 72 36 7d 0d 0a 50 34 73 75 62 20 72 31 30 2c |-r6}..P4sub r10,| 00001cc0 72 31 30 2c 72 33 3a 6d 6f 76 20 72 31 30 2c 72 |r10,r3:mov r10,r| 00001cd0 31 30 2c 61 73 72 23 31 30 3a 6d 75 6c 20 72 31 |10,asr#10:mul r1| 00001ce0 30 2c 72 38 2c 72 31 30 0d 0a 5a 34 73 75 62 20 |0,r8,r10..Z4sub | 00001cf0 72 31 31 2c 72 31 31 2c 72 34 3a 6d 6f 76 20 72 |r11,r11,r4:mov r| 00001d00 31 31 2c 72 31 31 2c 61 73 72 23 31 30 3a 6d 75 |11,r11,asr#10:mu| 00001d10 6c 20 72 31 31 2c 72 38 2c 72 31 31 0d 0a 64 34 |l r11,r8,r11..d4| 00001d20 73 75 62 20 72 31 32 2c 72 31 32 2c 72 35 3a 6d |sub r12,r12,r5:m| 00001d30 6f 76 20 72 31 32 2c 72 31 32 2c 61 73 72 23 31 |ov r12,r12,asr#1| 00001d40 30 3a 6d 75 6c 20 72 31 32 2c 72 38 2c 72 31 32 |0:mul r12,r8,r12| 00001d50 0d 0a 6e 34 73 75 62 20 72 31 33 2c 72 31 33 2c |..n4sub r13,r13,| 00001d60 72 36 3a 6d 6f 76 20 72 31 33 2c 72 31 33 2c 61 |r6:mov r13,r13,a| 00001d70 73 72 23 31 30 3a 6d 75 6c 20 72 31 33 2c 72 38 |sr#10:mul r13,r8| 00001d80 2c 72 31 33 0d 0a 78 16 73 74 6d 69 61 20 72 39 |,r13..x.stmia r9| 00001d90 2c 7b 72 31 30 2d 72 31 33 7d 0d 0a 82 12 6c 64 |,{r10-r13}....ld| 00001da0 72 20 72 38 2c 72 5f 69 6e 64 65 78 0d 0a 8c 15 |r r8,r_index....| 00001db0 6c 64 6d 69 61 20 72 38 2c 7b 72 38 2d 72 31 33 |ldmia r8,{r8-r13| 00001dc0 7d 0d 0a 96 11 73 75 62 73 20 72 38 2c 72 38 2c |}....subs r8,r8,| 00001dd0 72 30 0d 0a a0 1a 6c 64 72 67 74 20 72 38 2c 5b |r0....ldrgt r8,[| 00001de0 72 31 2c 72 38 2c 6c 73 6c 23 32 5d 0d 0a aa 0d |r1,r8,lsl#2]....| 00001df0 73 74 72 20 72 32 2c 72 78 0d 0a b4 39 73 75 62 |str r2,rx...9sub| 00001e00 20 72 39 2c 72 39 2c 72 32 3a 6d 6f 76 20 72 39 | r9,r9,r2:mov r9| 00001e10 2c 72 39 2c 61 73 72 23 31 30 3a 6d 75 6c 20 72 |,r9,asr#10:mul r| 00001e20 39 2c 72 38 2c 72 39 3a 73 74 72 20 72 39 2c 64 |9,r8,r9:str r9,d| 00001e30 72 78 0d 0a be 18 61 64 72 20 72 39 2c 72 69 67 |rx....adr r9,rig| 00001e40 68 74 5f 73 74 75 66 66 2b 38 0d 0a c8 15 73 74 |ht_stuff+8....st| 00001e50 6d 69 61 20 72 39 21 2c 7b 72 33 2d 72 36 7d 0d |mia r9!,{r3-r6}.| 00001e60 0a d2 34 73 75 62 20 72 31 30 2c 72 31 30 2c 72 |..4sub r10,r10,r| 00001e70 33 3a 6d 6f 76 20 72 31 30 2c 72 31 30 2c 61 73 |3:mov r10,r10,as| 00001e80 72 23 31 30 3a 6d 75 6c 20 72 31 30 2c 72 38 2c |r#10:mul r10,r8,| 00001e90 72 31 30 0d 0a dc 34 73 75 62 20 72 31 31 2c 72 |r10...4sub r11,r| 00001ea0 31 31 2c 72 34 3a 6d 6f 76 20 72 31 31 2c 72 31 |11,r4:mov r11,r1| 00001eb0 31 2c 61 73 72 23 31 30 3a 6d 75 6c 20 72 31 31 |1,asr#10:mul r11| 00001ec0 2c 72 38 2c 72 31 31 0d 0a e6 34 73 75 62 20 72 |,r8,r11...4sub r| 00001ed0 31 32 2c 72 31 32 2c 72 35 3a 6d 6f 76 20 72 31 |12,r12,r5:mov r1| 00001ee0 32 2c 72 31 32 2c 61 73 72 23 31 30 3a 6d 75 6c |2,r12,asr#10:mul| 00001ef0 20 72 31 32 2c 72 38 2c 72 31 32 0d 0a f0 34 73 | r12,r8,r12...4s| 00001f00 75 62 20 72 31 33 2c 72 31 33 2c 72 36 3a 6d 6f |ub r13,r13,r6:mo| 00001f10 76 20 72 31 33 2c 72 31 33 2c 61 73 72 23 31 30 |v r13,r13,asr#10| 00001f20 3a 6d 75 6c 20 72 31 33 2c 72 38 2c 72 31 33 0d |:mul r13,r8,r13.| 00001f30 0a fa 16 73 74 6d 69 61 20 72 39 2c 7b 72 31 30 |...stmia r9,{r10| 00001f40 2d 72 31 33 7d 0d 0b 04 15 6c 64 72 20 72 32 2c |-r13}....ldr r2,| 00001f50 73 63 72 65 65 6e 5f 61 64 72 0d 0b 0e 12 6c 64 |screen_adr....ld| 00001f60 72 20 72 33 2c 6c 5f 69 6e 64 65 78 0d 0b 18 12 |r r3,l_index....| 00001f70 6c 64 72 20 72 34 2c 72 5f 69 6e 64 65 78 0d 0b |ldr r4,r_index..| 00001f80 22 05 5d 0d 0b 2c 0d c8 8e 20 77 69 64 25 20 ca |".]..,... wid% .| 00001f90 0d 0b 36 2e c9 20 31 30 32 34 20 3a 20 5b 4f 50 |..6.. 1024 : [OP| 00001fa0 54 20 70 61 73 73 25 3a 61 64 64 20 72 31 33 2c |T pass%:add r13,| 00001fb0 72 32 2c 72 30 2c 6c 73 6c 23 31 30 3a 5d 0d 0b |r2,r0,lsl#10:]..| 00001fc0 40 40 c9 20 36 34 30 20 3a 5b 4f 50 54 20 70 61 |@@. 640 :[OPT pa| 00001fd0 73 73 25 3a 61 64 64 20 72 31 33 2c 72 32 2c 72 |ss%:add r13,r2,r| 00001fe0 30 2c 6c 73 6c 23 39 3a 61 64 64 20 72 31 33 2c |0,lsl#9:add r13,| 00001ff0 72 31 33 2c 72 30 2c 6c 73 6c 23 37 3a 5d 0d 0b |r13,r0,lsl#7:]..| 00002000 4a 40 c9 20 33 32 30 20 3a 5b 4f 50 54 20 70 61 |J@. 320 :[OPT pa| 00002010 73 73 25 3a 61 64 64 20 72 31 33 2c 72 32 2c 72 |ss%:add r13,r2,r| 00002020 30 2c 6c 73 6c 23 38 3a 61 64 64 20 72 31 33 2c |0,lsl#8:add r13,| 00002030 72 31 33 2c 72 30 2c 6c 73 6c 23 36 3a 5d 0d 0b |r13,r0,lsl#6:]..| 00002040 54 05 cb 0d 0b 5e 0e 5b 4f 50 54 20 70 61 73 73 |T....^.[OPT pass| 00002050 25 0d 0b 68 0f 6c 64 72 20 72 33 2c 5b 72 33 5d |%..h.ldr r3,[r3]| 00002060 0d 0b 72 0f 6c 64 72 20 72 34 2c 5b 72 34 5d 0d |..r.ldr r4,[r4].| 00002070 0b 7c 05 5d 0d 0b 86 0d c8 8e 20 77 69 64 25 20 |.|.]...... wid% | 00002080 ca 0d 0b 90 41 c9 20 31 30 32 34 20 3a 20 5b 4f |....A. 1024 : [O| 00002090 50 54 20 70 61 73 73 25 3a 61 64 64 20 72 35 2c |PT pass%:add r5,| 000020a0 72 32 2c 72 33 2c 6c 73 6c 23 31 30 3a 61 64 64 |r2,r3,lsl#10:add| 000020b0 20 72 36 2c 72 32 2c 72 34 2c 6c 73 6c 23 31 30 | r6,r2,r4,lsl#10| 000020c0 3a 5d 0d 0b 9a 63 c9 20 36 34 30 20 3a 5b 4f 50 |:]...c. 640 :[OP| 000020d0 54 20 70 61 73 73 25 3a 61 64 64 20 72 35 2c 72 |T pass%:add r5,r| 000020e0 32 2c 72 33 2c 6c 73 6c 23 39 3a 61 64 64 20 72 |2,r3,lsl#9:add r| 000020f0 36 2c 72 32 2c 72 34 2c 6c 73 6c 23 39 3a 61 64 |6,r2,r4,lsl#9:ad| 00002100 64 20 72 35 2c 72 35 2c 72 33 2c 6c 73 6c 23 37 |d r5,r5,r3,lsl#7| 00002110 3a 61 64 64 20 72 36 2c 72 36 2c 72 34 2c 6c 73 |:add r6,r6,r4,ls| 00002120 6c 23 37 3a 5d 0d 0b a4 63 c9 20 33 32 30 20 3a |l#7:]...c. 320 :| 00002130 5b 4f 50 54 20 70 61 73 73 25 3a 61 64 64 20 72 |[OPT pass%:add r| 00002140 35 2c 72 32 2c 72 33 2c 6c 73 6c 23 38 3a 61 64 |5,r2,r3,lsl#8:ad| 00002150 64 20 72 36 2c 72 32 2c 72 34 2c 6c 73 6c 23 38 |d r6,r2,r4,lsl#8| 00002160 3a 61 64 64 20 72 35 2c 72 35 2c 72 33 2c 6c 73 |:add r5,r5,r3,ls| 00002170 6c 23 36 3a 61 64 64 20 72 36 2c 72 36 2c 72 34 |l#6:add r6,r6,r4| 00002180 2c 6c 73 6c 23 36 3a 5d 0d 0b ae 05 cb 0d 0b b8 |,lsl#6:]........| 00002190 0e 5b 4f 50 54 20 70 61 73 73 25 0d 0b c2 0d 63 |.[OPT pass%....c| 000021a0 6d 70 20 72 33 2c 72 34 0d 0b cc 13 73 74 72 6c |mp r3,r4....strl| 000021b0 74 20 72 35 2c 73 63 5f 65 6e 64 0d 0b d6 13 73 |t r5,sc_end....s| 000021c0 74 72 67 65 20 72 36 2c 73 63 5f 65 6e 64 0d 0b |trge r6,sc_end..| 000021d0 e0 15 73 74 72 6c 74 20 72 36 2c 73 63 5f 6f 74 |..strlt r6,sc_ot| 000021e0 68 65 72 0d 0b ea 15 73 74 72 67 65 20 72 35 2c |her....strge r5,| 000021f0 73 63 5f 6f 74 68 65 72 0d 0b f4 1c 61 64 64 20 |sc_other....add | 00002200 72 32 2c 72 32 2c 23 77 69 64 25 2a 79 5f 6f 66 |r2,r2,#wid%*y_of| 00002210 66 25 2a 32 0d 0b fe 1a 73 74 72 20 72 32 2c 73 |f%*2....str r2,s| 00002220 63 5f 61 62 73 6f 6c 75 74 65 5f 65 6e 64 0d 0c |c_absolute_end..| 00002230 08 10 62 67 65 20 6d 65 74 68 6f 64 5f 32 0d 0c |..bge method_2..| 00002240 12 11 62 65 71 20 6c 61 73 74 5f 62 69 74 31 0d |..beq last_bit1.| 00002250 0c 1c 0d 2e 6d 65 74 68 6f 64 5f 31 0d 0c 26 0e |....method_1..&.| 00002260 63 6d 70 20 72 31 33 2c 72 35 0d 0c 30 11 62 65 |cmp r13,r5..0.be| 00002270 71 20 6c 61 73 74 5f 62 69 74 31 0d 0c 3a 10 62 |q last_bit1..:.b| 00002280 6c 20 74 72 69 5f 79 6c 6f 6f 70 0d 0c 44 0e 2e |l tri_yloop..D..| 00002290 6c 61 73 74 5f 62 69 74 31 0d 0c 4e 12 6c 64 72 |last_bit1..N.ldr| 000022a0 20 72 32 2c 6c 5f 69 6e 64 65 78 0d 0c 58 12 6c | r2,l_index..X.l| 000022b0 64 72 20 72 38 2c 72 5f 69 6e 64 65 78 0d 0c 62 |dr r8,r_index..b| 000022c0 17 6c 64 6d 69 61 20 72 32 2c 7b 72 30 2c 72 32 |.ldmia r2,{r0,r2| 000022d0 2d 72 36 7d 0d 0c 6c 15 6c 64 6d 69 61 20 72 38 |-r6}..l.ldmia r8| 000022e0 2c 7b 72 38 2d 72 31 33 7d 0d 0c 76 11 73 75 62 |,{r8-r13}..v.sub| 000022f0 73 20 72 38 2c 72 38 2c 72 30 0d 0c 80 1a 6c 64 |s r8,r8,r0....ld| 00002300 72 67 74 20 72 38 2c 5b 72 31 2c 72 38 2c 6c 73 |rgt r8,[r1,r8,ls| 00002310 6c 23 32 5d 0d 0c 8a 1c 61 64 64 20 72 32 2c 72 |l#2]....add r2,r| 00002320 32 2c 23 35 31 32 3a 73 74 72 20 72 32 2c 6c 78 |2,#512:str r2,lx| 00002330 0d 0c 94 39 73 75 62 20 72 39 2c 72 39 2c 72 32 |...9sub r9,r9,r2| 00002340 3a 6d 6f 76 20 72 39 2c 72 39 2c 61 73 72 23 31 |:mov r9,r9,asr#1| 00002350 30 3a 6d 75 6c 20 72 39 2c 72 38 2c 72 39 3a 73 |0:mul r9,r8,r9:s| 00002360 74 72 20 72 39 2c 64 6c 78 0d 0c 9e 17 61 64 72 |tr r9,dlx....adr| 00002370 20 72 39 2c 6c 65 66 74 5f 73 74 75 66 66 2b 38 | r9,left_stuff+8| 00002380 0d 0c a8 15 73 74 6d 69 61 20 72 39 21 2c 7b 72 |....stmia r9!,{r| 00002390 33 2d 72 36 7d 0d 0c b2 34 73 75 62 20 72 31 30 |3-r6}...4sub r10| 000023a0 2c 72 31 30 2c 72 33 3a 6d 6f 76 20 72 31 30 2c |,r10,r3:mov r10,| 000023b0 72 31 30 2c 61 73 72 23 31 30 3a 6d 75 6c 20 72 |r10,asr#10:mul r| 000023c0 31 30 2c 72 38 2c 72 31 30 0d 0c bc 34 73 75 62 |10,r8,r10...4sub| 000023d0 20 72 31 31 2c 72 31 31 2c 72 34 3a 6d 6f 76 20 | r11,r11,r4:mov | 000023e0 72 31 31 2c 72 31 31 2c 61 73 72 23 31 30 3a 6d |r11,r11,asr#10:m| 000023f0 75 6c 20 72 31 31 2c 72 38 2c 72 31 31 0d 0c c6 |ul r11,r8,r11...| 00002400 34 73 75 62 20 72 31 32 2c 72 31 32 2c 72 35 3a |4sub r12,r12,r5:| 00002410 6d 6f 76 20 72 31 32 2c 72 31 32 2c 61 73 72 23 |mov r12,r12,asr#| 00002420 31 30 3a 6d 75 6c 20 72 31 32 2c 72 38 2c 72 31 |10:mul r12,r8,r1| 00002430 32 0d 0c d0 34 73 75 62 20 72 31 33 2c 72 31 33 |2...4sub r13,r13| 00002440 2c 72 36 3a 6d 6f 76 20 72 31 33 2c 72 31 33 2c |,r6:mov r13,r13,| 00002450 61 73 72 23 31 30 3a 6d 75 6c 20 72 31 33 2c 72 |asr#10:mul r13,r| 00002460 38 2c 72 31 33 0d 0c da 13 6c 64 72 20 72 30 2c |8,r13....ldr r0,| 00002470 73 63 5f 6f 74 68 65 72 0d 0c e4 16 73 74 6d 69 |sc_other....stmi| 00002480 61 20 72 39 2c 7b 72 31 30 2d 72 31 33 7d 0d 0c |a r9,{r10-r13}..| 00002490 ee 12 6c 64 72 20 72 31 33 2c 73 63 5f 65 6e 64 |..ldr r13,sc_end| 000024a0 0d 0c f8 11 73 74 72 20 72 30 2c 73 63 5f 65 6e |....str r0,sc_en| 000024b0 64 0d 0d 02 10 62 6c 20 74 72 69 5f 79 6c 6f 6f |d....bl tri_yloo| 000024c0 70 0d 0d 0c 13 6c 64 72 20 72 31 33 2c 73 74 61 |p....ldr r13,sta| 000024d0 63 6b 70 32 0d 0d 16 1f 6c 64 6d 66 64 20 72 31 |ckp2....ldmfd r1| 000024e0 33 21 2c 7b 72 30 2c 72 31 31 2c 72 31 32 2c 72 |3!,{r0,r11,r12,r| 000024f0 31 35 7d 0d 0d 20 0d 2e 6d 65 74 68 6f 64 5f 32 |15}.. ..method_2| 00002500 0d 0d 2a 0e 63 6d 70 20 72 31 33 2c 72 36 0d 0d |..*.cmp r13,r6..| 00002510 34 11 62 65 71 20 6c 61 73 74 5f 62 69 74 32 0d |4.beq last_bit2.| 00002520 0d 3e 10 62 6c 20 74 72 69 5f 79 6c 6f 6f 70 0d |.>.bl tri_yloop.| 00002530 0d 48 0e 2e 6c 61 73 74 5f 62 69 74 32 0d 0d 52 |.H..last_bit2..R| 00002540 12 6c 64 72 20 72 32 2c 72 5f 69 6e 64 65 78 0d |.ldr r2,r_index.| 00002550 0d 5c 12 6c 64 72 20 72 38 2c 6c 5f 69 6e 64 65 |.\.ldr r8,l_inde| 00002560 78 0d 0d 66 17 6c 64 6d 69 61 20 72 32 2c 7b 72 |x..f.ldmia r2,{r| 00002570 30 2c 72 32 2d 72 36 7d 0d 0d 70 15 6c 64 6d 69 |0,r2-r6}..p.ldmi| 00002580 61 20 72 38 2c 7b 72 38 2d 72 31 33 7d 0d 0d 7a |a r8,{r8-r13}..z| 00002590 11 73 75 62 73 20 72 38 2c 72 38 2c 72 30 0d 0d |.subs r8,r8,r0..| 000025a0 84 1a 6c 64 72 67 74 20 72 38 2c 5b 72 31 2c 72 |..ldrgt r8,[r1,r| 000025b0 38 2c 6c 73 6c 23 32 5d 0d 0d 8e 1c 61 64 64 20 |8,lsl#2]....add | 000025c0 72 32 2c 72 32 2c 23 35 31 32 3a 73 74 72 20 72 |r2,r2,#512:str r| 000025d0 32 2c 72 78 0d 0d 98 39 73 75 62 20 72 39 2c 72 |2,rx...9sub r9,r| 000025e0 39 2c 72 32 3a 6d 6f 76 20 72 39 2c 72 39 2c 61 |9,r2:mov r9,r9,a| 000025f0 73 72 23 31 30 3a 6d 75 6c 20 72 39 2c 72 38 2c |sr#10:mul r9,r8,| 00002600 72 39 3a 73 74 72 20 72 39 2c 64 72 78 0d 0d a2 |r9:str r9,drx...| 00002610 18 61 64 72 20 72 39 2c 72 69 67 68 74 5f 73 74 |.adr r9,right_st| 00002620 75 66 66 2b 38 0d 0d ac 15 73 74 6d 69 61 20 72 |uff+8....stmia r| 00002630 39 21 2c 7b 72 33 2d 72 36 7d 0d 0d b6 34 73 75 |9!,{r3-r6}...4su| 00002640 62 20 72 31 30 2c 72 31 30 2c 72 33 3a 6d 6f 76 |b r10,r10,r3:mov| 00002650 20 72 31 30 2c 72 31 30 2c 61 73 72 23 31 30 3a | r10,r10,asr#10:| 00002660 6d 75 6c 20 72 31 30 2c 72 38 2c 72 31 30 0d 0d |mul r10,r8,r10..| 00002670 c0 34 73 75 62 20 72 31 31 2c 72 31 31 2c 72 34 |.4sub r11,r11,r4| 00002680 3a 6d 6f 76 20 72 31 31 2c 72 31 31 2c 61 73 72 |:mov r11,r11,asr| 00002690 23 31 30 3a 6d 75 6c 20 72 31 31 2c 72 38 2c 72 |#10:mul r11,r8,r| 000026a0 31 31 0d 0d ca 34 73 75 62 20 72 31 32 2c 72 31 |11...4sub r12,r1| 000026b0 32 2c 72 35 3a 6d 6f 76 20 72 31 32 2c 72 31 32 |2,r5:mov r12,r12| 000026c0 2c 61 73 72 23 31 30 3a 6d 75 6c 20 72 31 32 2c |,asr#10:mul r12,| 000026d0 72 38 2c 72 31 32 0d 0d d4 34 73 75 62 20 72 31 |r8,r12...4sub r1| 000026e0 33 2c 72 31 33 2c 72 36 3a 6d 6f 76 20 72 31 33 |3,r13,r6:mov r13| 000026f0 2c 72 31 33 2c 61 73 72 23 31 30 3a 6d 75 6c 20 |,r13,asr#10:mul | 00002700 72 31 33 2c 72 38 2c 72 31 33 0d 0d de 13 6c 64 |r13,r8,r13....ld| 00002710 72 20 72 30 2c 73 63 5f 6f 74 68 65 72 0d 0d e8 |r r0,sc_other...| 00002720 16 73 74 6d 69 61 20 72 39 2c 7b 72 31 30 2d 72 |.stmia r9,{r10-r| 00002730 31 33 7d 0d 0d f2 12 6c 64 72 20 72 31 33 2c 73 |13}....ldr r13,s| 00002740 63 5f 65 6e 64 0d 0d fc 11 73 74 72 20 72 30 2c |c_end....str r0,| 00002750 73 63 5f 65 6e 64 0d 0e 06 10 62 6c 20 74 72 69 |sc_end....bl tri| 00002760 5f 79 6c 6f 6f 70 0d 0e 10 13 6c 64 72 20 72 31 |_yloop....ldr r1| 00002770 33 2c 73 74 61 63 6b 70 32 0d 0e 1a 1f 6c 64 6d |3,stackp2....ldm| 00002780 66 64 20 72 31 33 21 2c 7b 72 30 2c 72 31 31 2c |fd r13!,{r0,r11,| 00002790 72 31 32 2c 72 31 35 7d 0d 0e 24 0f 2e 6c 65 66 |r12,r15}..$..lef| 000027a0 74 5f 73 74 75 66 66 0d 0e 2e 18 2e 6c 78 3a 64 |t_stuff.....lx:d| 000027b0 63 64 20 30 3a 2e 64 6c 78 3a 64 63 64 20 30 0d |cd 0:.dlx:dcd 0.| 000027c0 0e 38 2b 2e 6c 75 3a 64 63 64 20 30 3a 2e 6c 76 |.8+.lu:dcd 0:.lv| 000027d0 3a 64 63 64 20 30 3a 2e 6c 69 3a 64 63 64 20 30 |:dcd 0:.li:dcd 0| 000027e0 3a 2e 6c 7a 3a 64 63 64 20 30 0d 0e 42 2f 2e 64 |:.lz:dcd 0..B/.d| 000027f0 6c 75 3a 64 63 64 20 30 3a 2e 64 6c 76 3a 64 63 |lu:dcd 0:.dlv:dc| 00002800 64 20 30 3a 2e 64 6c 69 3a 64 63 64 20 30 3a 2e |d 0:.dli:dcd 0:.| 00002810 64 6c 7a 3a 64 63 64 20 30 0d 0e 4c 10 2e 72 69 |dlz:dcd 0..L..ri| 00002820 67 68 74 5f 73 74 75 66 66 0d 0e 56 18 2e 72 78 |ght_stuff..V..rx| 00002830 3a 64 63 64 20 30 3a 2e 64 72 78 3a 64 63 64 20 |:dcd 0:.drx:dcd | 00002840 30 0d 0e 60 2b 2e 72 75 3a 64 63 64 20 30 3a 2e |0..`+.ru:dcd 0:.| 00002850 72 76 3a 64 63 64 20 30 3a 2e 72 69 3a 64 63 64 |rv:dcd 0:.ri:dcd| 00002860 20 30 3a 2e 72 7a 3a 64 63 64 20 30 0d 0e 6a 2f | 0:.rz:dcd 0..j/| 00002870 2e 64 72 75 3a 64 63 64 20 30 3a 2e 64 72 76 3a |.dru:dcd 0:.drv:| 00002880 64 63 64 20 30 3a 2e 64 72 69 3a 64 63 64 20 30 |dcd 0:.dri:dcd 0| 00002890 3a 2e 64 72 7a 3a 64 63 64 20 30 0d 0e 74 14 2e |:.drz:dcd 0..t..| 000028a0 72 69 67 68 74 5f 61 64 72 3a 64 63 64 20 30 0d |right_adr:dcd 0.| 000028b0 0e 7e 0f 2e 6c 69 6e 6b 3a 64 63 64 20 30 0d 0e |.~..link:dcd 0..| 000028c0 88 12 2e 73 74 61 63 6b 70 32 3a 64 63 64 20 30 |...stackp2:dcd 0| 000028d0 0d 0e 92 1e 2e 64 69 76 5f 74 61 62 6c 65 32 3a |.....div_table2:| 000028e0 64 63 64 20 64 69 76 5f 74 61 62 6c 65 25 0d 0e |dcd div_table%..| 000028f0 9c 0e 2e 74 72 69 5f 79 6c 6f 6f 70 0d 0e a6 10 |...tri_yloop....| 00002900 73 74 72 20 72 31 34 2c 6c 69 6e 6b 0d 0e b0 11 |str r14,link....| 00002910 2e 79 5f 6c 6f 6f 70 5f 69 6e 6e 65 72 0d 0e ba |.y_loop_inner...| 00002920 1a 6c 64 72 20 72 32 2c 73 63 5f 61 62 73 6f 6c |.ldr r2,sc_absol| 00002930 75 74 65 5f 65 6e 64 0d 0e c4 0e 63 6d 70 20 72 |ute_end....cmp r| 00002940 31 33 2c 72 32 0d 0e ce 15 6c 64 72 67 65 20 72 |13,r2....ldrge r| 00002950 31 33 2c 73 74 61 63 6b 70 32 0d 0e d8 21 6c 64 |13,stackp2...!ld| 00002960 6d 67 65 66 64 20 72 31 33 21 2c 7b 72 30 2c 72 |mgefd r13!,{r0,r| 00002970 31 31 2c 72 31 32 2c 72 31 35 7d 0d 0e e2 24 6c |11,r12,r15}...$l| 00002980 64 72 20 72 32 2c 6c 78 3a 6c 64 72 20 72 33 2c |dr r2,lx:ldr r3,| 00002990 72 78 3a 73 75 62 20 72 34 2c 72 33 2c 72 32 0d |rx:sub r4,r3,r2.| 000029a0 0e ec 20 63 6d 70 20 72 32 2c 23 30 3a 62 6c 74 |.. cmp r2,#0:blt| 000029b0 20 78 5f 6c 6f 6f 70 5f 72 65 76 65 72 73 65 0d | x_loop_reverse.| 000029c0 0e f6 12 2e 78 5f 6c 6f 6f 70 5f 6e 6f 72 6d 61 |....x_loop_norma| 000029d0 6c 0d 0f 00 0e 6c 64 72 20 72 36 2c 64 6c 78 0d |l....ldr r6,dlx.| 000029e0 0f 0a 18 61 64 64 20 72 35 2c 72 31 33 2c 72 32 |...add r5,r13,r2| 000029f0 2c 61 73 72 23 31 30 0d 0f 14 17 61 64 64 20 72 |,asr#10....add r| 00002a00 32 2c 72 32 2c 72 36 2c 61 73 72 23 31 30 0d 0f |2,r2,r6,asr#10..| 00002a10 1e 0d 73 74 72 20 72 32 2c 6c 78 0d 0f 28 14 63 |..str r2,lx..(.c| 00002a20 6d 70 20 72 33 2c 23 77 69 64 25 3c 3c 31 30 0d |mp r3,#wid%<<10.| 00002a30 0f 32 1a 61 64 64 6c 74 20 72 36 2c 72 31 33 2c |.2.addlt r6,r13,| 00002a40 72 33 2c 61 73 72 23 31 30 0d 0f 3c 15 61 64 64 |r3,asr#10..<.add| 00002a50 20 72 31 33 2c 72 31 33 2c 23 77 69 64 25 0d 0f | r13,r13,#wid%..| 00002a60 46 0e 6c 64 72 20 72 32 2c 64 72 78 0d 0f 50 13 |F.ldr r2,drx..P.| 00002a70 73 75 62 67 65 20 72 36 2c 72 31 33 2c 23 31 0d |subge r6,r13,#1.| 00002a80 0f 5a 17 61 64 64 20 72 33 2c 72 33 2c 72 32 2c |.Z.add r3,r3,r2,| 00002a90 61 73 72 23 31 30 0d 0f 64 14 6d 6f 76 73 20 72 |asr#10..d.movs r| 00002aa0 32 2c 72 34 2c 61 73 72 23 34 0d 0f 6e 0d 73 74 |2,r4,asr#4..n.st| 00002ab0 72 20 72 33 2c 72 78 0d 0f 78 1a 6c 64 72 67 74 |r r3,rx..x.ldrgt| 00002ac0 20 72 32 2c 5b 72 31 2c 72 32 2c 6c 73 6c 23 32 | r2,[r1,r2,lsl#2| 00002ad0 5d 0d 0f 82 23 6c 64 72 20 72 34 2c 6c 75 3a 6c |]...#ldr r4,lu:l| 00002ae0 64 72 20 72 33 2c 64 6c 75 3a 6c 64 72 20 72 37 |dr r3,dlu:ldr r7| 00002af0 2c 64 72 75 0d 0f 8c 17 61 64 64 20 72 33 2c 72 |,dru....add r3,r| 00002b00 34 2c 72 33 2c 61 73 72 23 31 30 0d 0f 96 17 73 |4,r3,asr#10....s| 00002b10 74 72 20 72 33 2c 6c 75 3a 6c 64 72 20 72 33 2c |tr r3,lu:ldr r3,| 00002b20 72 75 0d 0f a0 17 61 64 64 20 72 37 2c 72 33 2c |ru....add r7,r3,| 00002b30 72 37 2c 61 73 72 23 31 30 0d 0f aa 10 73 75 62 |r7,asr#10....sub| 00002b40 20 72 33 2c 72 33 2c 72 34 0d 0f b4 0d 73 74 72 | r3,r3,r4....str| 00002b50 20 72 37 2c 72 75 0d 0f be 14 6d 6f 76 20 72 34 | r7,ru....mov r4| 00002b60 2c 72 34 2c 6c 73 6c 23 31 34 0d 0f c8 10 6d 75 |,r4,lsl#14....mu| 00002b70 6c 20 72 33 2c 72 32 2c 72 33 0d 0f d2 23 6c 64 |l r3,r2,r3...#ld| 00002b80 72 20 72 37 2c 6c 76 3a 6c 64 72 20 72 38 2c 64 |r r7,lv:ldr r8,d| 00002b90 6c 76 3a 6c 64 72 20 72 39 2c 64 72 76 0d 0f dc |lv:ldr r9,drv...| 00002ba0 17 61 64 64 20 72 38 2c 72 37 2c 72 38 2c 61 73 |.add r8,r7,r8,as| 00002bb0 72 23 31 30 0d 0f e6 17 73 74 72 20 72 38 2c 6c |r#10....str r8,l| 00002bc0 76 3a 6c 64 72 20 72 38 2c 72 76 0d 0f f0 17 61 |v:ldr r8,rv....a| 00002bd0 64 64 20 72 39 2c 72 38 2c 72 39 2c 61 73 72 23 |dd r9,r8,r9,asr#| 00002be0 31 30 0d 0f fa 10 73 75 62 20 72 38 2c 72 38 2c |10....sub r8,r8,| 00002bf0 72 37 0d 10 04 0d 73 74 72 20 72 39 2c 72 76 0d |r7....str r9,rv.| 00002c00 10 0e 14 6d 6f 76 20 72 37 2c 72 37 2c 6c 73 6c |...mov r7,r7,lsl| 00002c10 23 31 34 0d 10 18 10 6d 75 6c 20 72 38 2c 72 32 |#14....mul r8,r2| 00002c20 2c 72 38 0d 10 22 25 6c 64 72 20 72 39 2c 6c 69 |,r8.."%ldr r9,li| 00002c30 3a 6c 64 72 20 72 31 30 2c 64 6c 69 3a 6c 64 72 |:ldr r10,dli:ldr| 00002c40 20 72 31 31 2c 64 72 69 0d 10 2c 13 6d 6f 76 20 | r11,dri..,.mov | 00002c50 72 32 2c 72 32 2c 61 73 72 23 32 0d 10 36 19 61 |r2,r2,asr#2..6.a| 00002c60 64 64 20 72 31 30 2c 72 39 2c 72 31 30 2c 61 73 |dd r10,r9,r10,as| 00002c70 72 23 31 30 0d 10 40 19 73 74 72 20 72 31 30 2c |r#10..@.str r10,| 00002c80 6c 69 3a 6c 64 72 20 72 31 30 2c 72 69 0d 10 4a |li:ldr r10,ri..J| 00002c90 1a 61 64 64 20 72 31 31 2c 72 31 30 2c 72 31 31 |.add r11,r10,r11| 00002ca0 2c 61 73 72 23 31 30 0d 10 54 12 73 75 62 20 72 |,asr#10..T.sub r| 00002cb0 31 30 2c 72 31 30 2c 72 39 0d 10 5e 0e 73 74 72 |10,r10,r9..^.str| 00002cc0 20 72 31 31 2c 72 69 0d 10 68 14 6d 6f 76 20 72 | r11,ri..h.mov r| 00002cd0 39 2c 72 39 2c 6c 73 6c 23 31 32 0d 10 72 12 6d |9,r9,lsl#12..r.m| 00002ce0 75 6c 20 72 31 30 2c 72 32 2c 72 31 30 0d 10 7c |ul r10,r2,r10..|| 00002cf0 26 6c 64 72 20 72 31 31 2c 6c 7a 3a 6c 64 72 20 |&ldr r11,lz:ldr | 00002d00 72 31 32 2c 64 6c 7a 3a 6c 64 72 20 72 31 34 2c |r12,dlz:ldr r14,| 00002d10 64 72 7a 0d 10 86 1a 61 64 64 20 72 31 32 2c 72 |drz....add r12,r| 00002d20 31 31 2c 72 31 32 2c 61 73 72 23 31 30 0d 10 90 |11,r12,asr#10...| 00002d30 19 73 74 72 20 72 31 32 2c 6c 7a 3a 6c 64 72 20 |.str r12,lz:ldr | 00002d40 72 31 32 2c 72 7a 0d 10 9a 1a 61 64 64 20 72 31 |r12,rz....add r1| 00002d50 34 2c 72 31 32 2c 72 31 34 2c 61 73 72 23 31 30 |4,r12,r14,asr#10| 00002d60 0d 10 a4 13 73 75 62 20 72 31 32 2c 72 31 32 2c |....sub r12,r12,| 00002d70 72 31 31 0d 10 ae 0e 73 74 72 20 72 31 34 2c 72 |r11....str r14,r| 00002d80 7a 0d 10 b8 16 6d 6f 76 20 72 31 31 2c 72 31 31 |z....mov r11,r11| 00002d90 2c 6c 73 6c 23 31 32 0d 10 c2 12 6d 75 6c 20 72 |,lsl#12....mul r| 00002da0 31 32 2c 72 32 2c 72 31 32 0d 10 cc 12 73 74 72 |12,r2,r12....str| 00002db0 20 72 31 33 2c 73 63 5f 63 75 72 0d 10 d6 15 6c | r13,sc_cur....l| 00002dc0 64 72 20 72 32 2c 73 63 72 65 65 6e 5f 61 64 72 |dr r2,screen_adr| 00002dd0 0d 10 e0 0e 63 6d 70 20 72 31 33 2c 72 32 0d 10 |....cmp r13,r2..| 00002de0 ea 10 63 6d 70 67 74 20 72 31 33 2c 72 35 0d 10 |..cmpgt r13,r5..| 00002df0 f4 13 62 6c 65 20 73 6b 69 70 5f 78 5f 6c 6f 6f |..ble skip_x_loo| 00002e00 70 0d 10 fe 14 6c 64 72 20 72 31 34 2c 7a 5f 62 |p....ldr r14,z_b| 00002e10 75 66 66 65 72 0d 11 08 10 73 75 62 20 72 32 2c |uffer....sub r2,| 00002e20 72 35 2c 72 32 0d 11 12 18 61 64 64 20 72 31 34 |r5,r2....add r14| 00002e30 2c 72 31 34 2c 72 32 2c 6c 73 6c 23 32 0d 11 1c |,r14,r2,lsl#2...| 00002e40 0d 74 73 74 20 72 35 2c 23 31 0d 11 26 14 6d 6f |.tst r5,#1..&.mo| 00002e50 76 65 71 20 72 31 33 2c 23 31 3c 3c 33 31 0d 11 |veq r13,#1<<31..| 00002e60 30 10 6d 6f 76 6e 65 20 72 31 33 2c 23 30 0d 11 |0.movne r13,#0..| 00002e70 3a 19 6c 64 72 20 72 32 2c 74 65 78 74 75 72 65 |:.ldr r2,texture| 00002e80 5f 73 70 72 69 74 65 0d 11 44 13 6c 64 72 20 72 |_sprite..D.ldr r| 00002e90 31 2c 63 6f 6c 74 61 62 6c 65 0d 11 4e 0a 2e 78 |1,coltable..N..x| 00002ea0 6c 6f 6f 70 0d 11 58 13 6c 64 72 20 72 30 2c 5b |loop..X.ldr r0,[| 00002eb0 72 31 34 5d 2c 23 34 0d 11 62 0e 63 6d 70 20 72 |r14],#4..b.cmp r| 00002ec0 30 2c 72 31 31 0d 11 6c 12 61 64 64 6c 74 20 72 |0,r11..l.addlt r| 00002ed0 35 2c 72 35 2c 23 31 0d 11 76 12 62 6c 74 20 73 |5,r5,#1..v.blt s| 00002ee0 6b 69 70 5f 78 5f 70 69 78 0d 11 80 16 61 6e 64 |kip_x_pix....and| 00002ef0 20 72 30 2c 72 37 2c 23 32 35 35 3c 3c 32 34 0d | r0,r7,#255<<24.| 00002f00 11 8a 16 6f 72 72 20 72 30 2c 72 30 2c 72 34 2c |...orr r0,r0,r4,| 00002f10 6c 73 72 23 38 0d 11 94 1a 6c 64 72 62 20 72 30 |lsr#8....ldrb r0| 00002f20 2c 5b 72 32 2c 72 30 2c 6c 73 72 23 31 36 5d 0d |,[r2,r0,lsr#16].| 00002f30 11 9e 16 61 64 64 20 72 30 2c 72 31 2c 72 30 2c |...add r0,r1,r0,| 00002f40 6c 73 6c 23 35 0d 11 a8 18 61 64 64 20 72 30 2c |lsl#5....add r0,| 00002f50 72 30 2c 72 31 33 2c 6c 73 72 23 33 31 0d 11 b2 |r0,r13,lsr#31...| 00002f60 1a 6c 64 72 62 20 72 30 2c 5b 72 30 2c 72 39 2c |.ldrb r0,[r0,r9,| 00002f70 6c 73 72 23 32 37 5d 0d 11 bc 13 73 74 72 62 20 |lsr#27]....strb | 00002f80 72 30 2c 5b 72 35 5d 2c 23 31 0d 11 c6 15 73 74 |r0,[r5],#1....st| 00002f90 72 20 72 31 31 2c 5b 72 31 34 2c 23 2d 34 5d 0d |r r11,[r14,#-4].| 00002fa0 11 d0 0f 2e 73 6b 69 70 5f 78 5f 70 69 78 0d 11 |....skip_x_pix..| 00002fb0 da 0d 63 6d 70 20 72 35 2c 72 36 0d 11 e4 18 61 |..cmp r5,r6....a| 00002fc0 64 64 6c 65 20 72 31 33 2c 72 31 33 2c 23 31 3c |ddle r13,r13,#1<| 00002fd0 3c 33 31 0d 11 ee 12 61 64 64 6c 65 20 72 34 2c |<31....addle r4,| 00002fe0 72 34 2c 72 33 0d 11 f8 12 61 64 64 6c 65 20 72 |r4,r3....addle r| 00002ff0 37 2c 72 37 2c 72 38 0d 12 02 13 61 64 64 6c 65 |7,r7,r8....addle| 00003000 20 72 39 2c 72 39 2c 72 31 30 0d 12 0c 15 61 64 | r9,r9,r10....ad| 00003010 64 6c 65 20 72 31 31 2c 72 31 31 2c 72 31 32 0d |dle r11,r11,r12.| 00003020 12 16 0d 62 6c 65 20 78 6c 6f 6f 70 0d 12 20 10 |...ble xloop.. .| 00003030 2e 73 6b 69 70 5f 78 5f 6c 6f 6f 70 0d 12 2a 15 |.skip_x_loop..*.| 00003040 6c 64 72 20 72 31 2c 64 69 76 5f 74 61 62 6c 65 |ldr r1,div_table| 00003050 32 0d 12 34 12 6c 64 72 20 72 31 33 2c 73 63 5f |2..4.ldr r13,sc_| 00003060 63 75 72 0d 12 3e 11 6c 64 72 20 72 30 2c 73 63 |cur..>.ldr r0,sc| 00003070 5f 65 6e 64 0d 12 48 0e 63 6d 70 20 72 31 33 2c |_end..H.cmp r13,| 00003080 72 30 0d 12 52 14 62 6c 74 20 79 5f 6c 6f 6f 70 |r0..R.blt y_loop| 00003090 5f 69 6e 6e 65 72 0d 12 5c 10 6c 64 72 20 72 31 |_inner..\.ldr r1| 000030a0 35 2c 6c 69 6e 6b 0d 12 66 13 2e 79 5f 72 65 76 |5,link..f..y_rev| 000030b0 65 72 73 65 5f 6c 6f 6f 70 0d 12 70 10 73 74 72 |erse_loop..p.str| 000030c0 20 72 31 34 2c 6c 69 6e 6b 0d 12 7a 19 2e 79 5f | r14,link..z..y_| 000030d0 72 65 76 65 72 73 65 5f 6c 6f 6f 70 5f 69 6e 6e |reverse_loop_inn| 000030e0 65 72 0d 12 84 1a 6c 64 72 20 72 32 2c 73 63 5f |er....ldr r2,sc_| 000030f0 61 62 73 6f 6c 75 74 65 5f 65 6e 64 0d 12 8e 0e |absolute_end....| 00003100 63 6d 70 20 72 31 33 2c 72 32 0d 12 98 15 6c 64 |cmp r13,r2....ld| 00003110 72 67 65 20 72 31 33 2c 73 74 61 63 6b 70 32 0d |rge r13,stackp2.| 00003120 12 a2 21 6c 64 6d 67 65 66 64 20 72 31 33 21 2c |..!ldmgefd r13!,| 00003130 7b 72 30 2c 72 31 31 2c 72 31 32 2c 72 31 35 7d |{r0,r11,r12,r15}| 00003140 0d 12 ac 24 6c 64 72 20 72 32 2c 6c 78 3a 6c 64 |...$ldr r2,lx:ld| 00003150 72 20 72 33 2c 72 78 3a 73 75 62 20 72 34 2c 72 |r r3,rx:sub r4,r| 00003160 33 2c 72 32 0d 12 b6 1f 63 6d 70 20 72 32 2c 23 |3,r2....cmp r2,#| 00003170 30 3a 62 67 65 20 78 5f 6c 6f 6f 70 5f 6e 6f 72 |0:bge x_loop_nor| 00003180 6d 61 6c 0d 12 c0 13 2e 78 5f 6c 6f 6f 70 5f 72 |mal.....x_loop_r| 00003190 65 76 65 72 73 65 0d 12 ca 0e 6c 64 72 20 72 36 |everse....ldr r6| 000031a0 2c 64 6c 78 0d 12 d4 0e 6d 6f 76 20 72 35 2c 72 |,dlx....mov r5,r| 000031b0 31 33 0d 12 de 17 61 64 64 20 72 32 2c 72 32 2c |13....add r2,r2,| 000031c0 72 36 2c 61 73 72 23 31 30 0d 12 e8 0d 73 74 72 |r6,asr#10....str| 000031d0 20 72 32 2c 6c 78 0d 12 f2 14 63 6d 70 20 72 33 | r2,lx....cmp r3| 000031e0 2c 23 77 69 64 25 3c 3c 31 30 0d 12 fc 1a 61 64 |,#wid%<<10....ad| 000031f0 64 6c 74 20 72 36 2c 72 31 33 2c 72 33 2c 61 73 |dlt r6,r13,r3,as| 00003200 72 23 31 30 0d 13 06 15 61 64 64 20 72 31 33 2c |r#10....add r13,| 00003210 72 31 33 2c 23 77 69 64 25 0d 13 10 0e 6c 64 72 |r13,#wid%....ldr| 00003220 20 72 32 2c 64 72 78 0d 13 1a 13 73 75 62 67 65 | r2,drx....subge| 00003230 20 72 36 2c 72 31 33 2c 23 31 0d 13 24 17 61 64 | r6,r13,#1..$.ad| 00003240 64 20 72 33 2c 72 33 2c 72 32 2c 61 73 72 23 31 |d r3,r3,r2,asr#1| 00003250 30 0d 13 2e 14 6d 6f 76 73 20 72 32 2c 72 34 2c |0....movs r2,r4,| 00003260 61 73 72 23 34 0d 13 38 0d 73 74 72 20 72 33 2c |asr#4..8.str r3,| 00003270 72 78 0d 13 42 1a 6c 64 72 67 74 20 72 32 2c 5b |rx..B.ldrgt r2,[| 00003280 72 31 2c 72 32 2c 6c 73 6c 23 32 5d 0d 13 4c 23 |r1,r2,lsl#2]..L#| 00003290 6c 64 72 20 72 34 2c 72 75 3a 6c 64 72 20 72 33 |ldr r4,ru:ldr r3| 000032a0 2c 64 72 75 3a 6c 64 72 20 72 37 2c 64 6c 75 0d |,dru:ldr r7,dlu.| 000032b0 13 56 17 61 64 64 20 72 33 2c 72 34 2c 72 33 2c |.V.add r3,r4,r3,| 000032c0 61 73 72 23 31 30 0d 13 60 17 73 74 72 20 72 33 |asr#10..`.str r3| 000032d0 2c 72 75 3a 6c 64 72 20 72 33 2c 6c 75 0d 13 6a |,ru:ldr r3,lu..j| 000032e0 17 61 64 64 20 72 37 2c 72 33 2c 72 37 2c 61 73 |.add r7,r3,r7,as| 000032f0 72 23 31 30 0d 13 74 10 73 75 62 20 72 33 2c 72 |r#10..t.sub r3,r| 00003300 33 2c 72 34 0d 13 7e 0d 73 74 72 20 72 37 2c 6c |3,r4..~.str r7,l| 00003310 75 0d 13 88 14 6d 6f 76 20 72 34 2c 72 34 2c 6c |u....mov r4,r4,l| 00003320 73 6c 23 31 34 0d 13 92 10 6d 75 6c 20 72 33 2c |sl#14....mul r3,| 00003330 72 32 2c 72 33 0d 13 9c 23 6c 64 72 20 72 37 2c |r2,r3...#ldr r7,| 00003340 72 76 3a 6c 64 72 20 72 38 2c 64 72 76 3a 6c 64 |rv:ldr r8,drv:ld| 00003350 72 20 72 39 2c 64 6c 76 0d 13 a6 17 61 64 64 20 |r r9,dlv....add | 00003360 72 38 2c 72 37 2c 72 38 2c 61 73 72 23 31 30 0d |r8,r7,r8,asr#10.| 00003370 13 b0 17 73 74 72 20 72 38 2c 72 76 3a 6c 64 72 |...str r8,rv:ldr| 00003380 20 72 38 2c 6c 76 0d 13 ba 17 61 64 64 20 72 39 | r8,lv....add r9| 00003390 2c 72 38 2c 72 39 2c 61 73 72 23 31 30 0d 13 c4 |,r8,r9,asr#10...| 000033a0 10 73 75 62 20 72 38 2c 72 38 2c 72 37 0d 13 ce |.sub r8,r8,r7...| 000033b0 0d 73 74 72 20 72 39 2c 6c 76 0d 13 d8 14 6d 6f |.str r9,lv....mo| 000033c0 76 20 72 37 2c 72 37 2c 6c 73 6c 23 31 34 0d 13 |v r7,r7,lsl#14..| 000033d0 e2 10 6d 75 6c 20 72 38 2c 72 32 2c 72 38 0d 13 |..mul r8,r2,r8..| 000033e0 ec 25 6c 64 72 20 72 39 2c 72 69 3a 6c 64 72 20 |.%ldr r9,ri:ldr | 000033f0 72 31 30 2c 64 72 69 3a 6c 64 72 20 72 31 31 2c |r10,dri:ldr r11,| 00003400 64 6c 69 0d 13 f6 13 6d 6f 76 20 72 32 2c 72 32 |dli....mov r2,r2| 00003410 2c 61 73 72 23 32 0d 14 00 19 61 64 64 20 72 31 |,asr#2....add r1| 00003420 30 2c 72 39 2c 72 31 30 2c 61 73 72 23 31 30 0d |0,r9,r10,asr#10.| 00003430 14 0a 19 73 74 72 20 72 31 30 2c 72 69 3a 6c 64 |...str r10,ri:ld| 00003440 72 20 72 31 30 2c 6c 69 0d 14 14 1a 61 64 64 20 |r r10,li....add | 00003450 72 31 31 2c 72 31 30 2c 72 31 31 2c 61 73 72 23 |r11,r10,r11,asr#| 00003460 31 30 0d 14 1e 12 73 75 62 20 72 31 30 2c 72 31 |10....sub r10,r1| 00003470 30 2c 72 39 0d 14 28 0e 73 74 72 20 72 31 31 2c |0,r9..(.str r11,| 00003480 6c 69 0d 14 32 14 6d 6f 76 20 72 39 2c 72 39 2c |li..2.mov r9,r9,| 00003490 6c 73 6c 23 31 32 0d 14 3c 12 6d 75 6c 20 72 31 |lsl#12..<.mul r1| 000034a0 30 2c 72 32 2c 72 31 30 0d 14 46 26 6c 64 72 20 |0,r2,r10..F&ldr | 000034b0 72 31 31 2c 72 7a 3a 6c 64 72 20 72 31 32 2c 64 |r11,rz:ldr r12,d| 000034c0 72 7a 3a 6c 64 72 20 72 31 34 2c 64 6c 7a 0d 14 |rz:ldr r14,dlz..| 000034d0 50 1a 61 64 64 20 72 31 32 2c 72 31 31 2c 72 31 |P.add r12,r11,r1| 000034e0 32 2c 61 73 72 23 31 30 0d 14 5a 19 73 74 72 20 |2,asr#10..Z.str | 000034f0 72 31 32 2c 72 7a 3a 6c 64 72 20 72 31 32 2c 6c |r12,rz:ldr r12,l| 00003500 7a 0d 14 64 1a 61 64 64 20 72 31 34 2c 72 31 32 |z..d.add r14,r12| 00003510 2c 72 31 34 2c 61 73 72 23 31 30 0d 14 6e 13 73 |,r14,asr#10..n.s| 00003520 75 62 20 72 31 32 2c 72 31 32 2c 72 31 31 0d 14 |ub r12,r12,r11..| 00003530 78 0e 73 74 72 20 72 31 34 2c 6c 7a 0d 14 82 16 |x.str r14,lz....| 00003540 6d 6f 76 20 72 31 31 2c 72 31 31 2c 6c 73 6c 23 |mov r11,r11,lsl#| 00003550 31 32 0d 14 8c 12 6d 75 6c 20 72 31 32 2c 72 32 |12....mul r12,r2| 00003560 2c 72 31 32 0d 14 96 12 73 74 72 20 72 31 33 2c |,r12....str r13,| 00003570 73 63 5f 63 75 72 0d 14 a0 15 6c 64 72 20 72 32 |sc_cur....ldr r2| 00003580 2c 73 63 72 65 65 6e 5f 61 64 72 0d 14 aa 0e 63 |,screen_adr....c| 00003590 6d 70 20 72 31 33 2c 72 32 0d 14 b4 0f 63 6d 70 |mp r13,r2....cmp| 000035a0 67 74 20 72 36 2c 72 35 0d 14 be 1b 62 6c 65 20 |gt r6,r5....ble | 000035b0 73 6b 69 70 5f 78 5f 72 65 76 65 72 73 65 5f 6c |skip_x_reverse_l| 000035c0 6f 6f 70 0d 14 c8 14 6c 64 72 20 72 31 34 2c 7a |oop....ldr r14,z| 000035d0 5f 62 75 66 66 65 72 0d 14 d2 10 73 75 62 20 72 |_buffer....sub r| 000035e0 32 2c 72 36 2c 72 32 0d 14 dc 18 61 64 64 20 72 |2,r6,r2....add r| 000035f0 31 34 2c 72 31 34 2c 72 32 2c 6c 73 6c 23 32 0d |14,r14,r2,lsl#2.| 00003600 14 e6 0d 74 73 74 20 72 36 2c 23 31 0d 14 f0 14 |...tst r6,#1....| 00003610 6d 6f 76 65 71 20 72 31 33 2c 23 31 3c 3c 33 31 |moveq r13,#1<<31| 00003620 0d 14 fa 10 6d 6f 76 6e 65 20 72 31 33 2c 23 30 |....movne r13,#0| 00003630 0d 15 04 19 6c 64 72 20 72 32 2c 74 65 78 74 75 |....ldr r2,textu| 00003640 72 65 5f 73 70 72 69 74 65 0d 15 0e 13 6c 64 72 |re_sprite....ldr| 00003650 20 72 31 2c 63 6f 6c 74 61 62 6c 65 0d 15 18 0a | r1,coltable....| 00003660 2e 78 6c 6f 6f 70 0d 15 22 14 6c 64 72 20 72 30 |.xloop..".ldr r0| 00003670 2c 5b 72 31 34 5d 2c 23 2d 34 0d 15 2c 0e 63 6d |,[r14],#-4..,.cm| 00003680 70 20 72 30 2c 72 31 31 0d 15 36 12 73 75 62 6c |p r0,r11..6.subl| 00003690 74 20 72 36 2c 72 36 2c 23 31 0d 15 40 1a 62 6c |t r6,r6,#1..@.bl| 000036a0 74 20 73 6b 69 70 5f 78 5f 72 65 76 65 72 73 65 |t skip_x_reverse| 000036b0 5f 70 69 78 0d 15 4a 16 61 6e 64 20 72 30 2c 72 |_pix..J.and r0,r| 000036c0 37 2c 23 32 35 35 3c 3c 32 34 0d 15 54 16 6f 72 |7,#255<<24..T.or| 000036d0 72 20 72 30 2c 72 30 2c 72 34 2c 6c 73 72 23 38 |r r0,r0,r4,lsr#8| 000036e0 0d 15 5e 1a 6c 64 72 62 20 72 30 2c 5b 72 32 2c |..^.ldrb r0,[r2,| 000036f0 72 30 2c 6c 73 72 23 31 36 5d 0d 15 68 16 61 64 |r0,lsr#16]..h.ad| 00003700 64 20 72 30 2c 72 31 2c 72 30 2c 6c 73 6c 23 35 |d r0,r1,r0,lsl#5| 00003710 0d 15 72 18 61 64 64 20 72 30 2c 72 30 2c 72 31 |..r.add r0,r0,r1| 00003720 33 2c 6c 73 72 23 33 31 0d 15 7c 1a 6c 64 72 62 |3,lsr#31..|.ldrb| 00003730 20 72 30 2c 5b 72 30 2c 72 39 2c 6c 73 72 23 32 | r0,[r0,r9,lsr#2| 00003740 37 5d 0d 15 86 14 73 74 72 62 20 72 30 2c 5b 72 |7]....strb r0,[r| 00003750 36 5d 2c 23 2d 31 0d 15 90 14 73 74 72 20 72 31 |6],#-1....str r1| 00003760 31 2c 5b 72 31 34 2c 23 34 5d 0d 15 9a 17 2e 73 |1,[r14,#4].....s| 00003770 6b 69 70 5f 78 5f 72 65 76 65 72 73 65 5f 70 69 |kip_x_reverse_pi| 00003780 78 0d 15 a4 0d 63 6d 70 20 72 36 2c 72 35 0d 15 |x....cmp r6,r5..| 00003790 ae 18 61 64 64 67 65 20 72 31 33 2c 72 31 33 2c |..addge r13,r13,| 000037a0 23 31 3c 3c 33 31 0d 15 b8 12 61 64 64 67 65 20 |#1<<31....addge | 000037b0 72 34 2c 72 34 2c 72 33 0d 15 c2 12 61 64 64 67 |r4,r4,r3....addg| 000037c0 65 20 72 37 2c 72 37 2c 72 38 0d 15 cc 13 61 64 |e r7,r7,r8....ad| 000037d0 64 67 65 20 72 39 2c 72 39 2c 72 31 30 0d 15 d6 |dge r9,r9,r10...| 000037e0 15 61 64 64 67 65 20 72 31 31 2c 72 31 31 2c 72 |.addge r11,r11,r| 000037f0 31 32 0d 15 e0 0d 62 67 65 20 78 6c 6f 6f 70 0d |12....bge xloop.| 00003800 15 ea 18 2e 73 6b 69 70 5f 78 5f 72 65 76 65 72 |....skip_x_rever| 00003810 73 65 5f 6c 6f 6f 70 0d 15 f4 15 6c 64 72 20 72 |se_loop....ldr r| 00003820 31 2c 64 69 76 5f 74 61 62 6c 65 32 0d 15 fe 12 |1,div_table2....| 00003830 6c 64 72 20 72 31 33 2c 73 63 5f 63 75 72 0d 16 |ldr r13,sc_cur..| 00003840 08 11 6c 64 72 20 72 30 2c 73 63 5f 65 6e 64 0d |..ldr r0,sc_end.| 00003850 16 12 0e 63 6d 70 20 72 31 33 2c 72 30 0d 16 1c |...cmp r13,r0...| 00003860 1c 62 6c 74 20 79 5f 72 65 76 65 72 73 65 5f 6c |.blt y_reverse_l| 00003870 6f 6f 70 5f 69 6e 6e 65 72 0d 16 26 10 6c 64 72 |oop_inner..&.ldr| 00003880 20 72 31 35 2c 6c 69 6e 6b 0d 16 30 05 5d 0d 16 | r15,link..0.]..| 00003890 3a 05 ed 0d 16 44 25 c8 99 22 4f 53 5f 46 69 6c |:....D%.."OS_Fil| 000038a0 65 22 2c 31 36 2c 22 43 6f 6c 54 61 62 22 2c 63 |e",16,"ColTab",c| 000038b0 6f 6c 74 61 62 6c 65 25 0d 16 4e 22 c8 99 22 4f |oltable%..N".."O| 000038c0 53 5f 46 69 6c 65 22 2c 31 36 2c 22 54 65 78 31 |S_File",16,"Tex1| 000038d0 22 2c 74 65 78 74 75 72 65 25 0d 16 58 0b d6 20 |",texture%..X.. | 000038e0 73 65 74 75 70 0d 16 62 05 e1 0d 16 6c 05 3a 0d |setup..b....l.:.| 000038f0 16 76 0f dd a4 73 63 72 65 65 6e 61 64 72 0d 16 |.v...screenadr..| 00003900 80 0a de 20 71 25 20 38 0d 16 8a 13 21 71 25 3d |... q% 8....!q%=| 00003910 31 34 38 3a 71 25 21 34 3d 2d 31 0d 16 94 21 c8 |148:q%!4=-1...!.| 00003920 99 22 4f 53 5f 52 65 61 64 56 64 75 56 61 72 69 |."OS_ReadVduVari| 00003930 61 62 6c 65 73 22 2c 71 25 2c 71 25 0d 16 9e 08 |ables",q%,q%....| 00003940 3d 21 71 25 0d ff |=!q%..| 00003946