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
dP%=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