Home » Archimedes archive » Acorn User » AU 1995-04.adf » !StarInfo_StarInfo » Turnbull/Ring
Turnbull/Ring
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 1995-04.adf » !StarInfo_StarInfo |
Filename: | Turnbull/Ring |
Read OK: | ✔ |
File size: | 4013 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10MODE9 20DIMspace%&90000:endspace%=space%+&90000 30PRINT"Thinking..." 31PRINT''"This program requires over 1044k of system sprite memory" 32SYS "XOS_CLI","SNew" 40PROCassemble 50PROCsetupscene 60PROCsetupcolours 70bank%=1:A%=0 80FORA%=0TO31 90A=2*PI*A%/64:C%=COS(A)*(1<<VC%)*.9:S%=SIN(A)*(1<<VC%)*.9 100matrix%!0=C%:matrix%!8=S%:matrix%!24=-S%:matrix%!32=C% 110CALLproject%:CLS:CALLtoscreen% 120MOVE128,0:MOVEBY1023,1023:VDU23,27,1,A%| 130NEXT 140REPEAT:FORA%=0TO31:VDU23,27,0,A%|:WAIT:PLOT&ED,128,0:NEXT:UNTIL0 150END 160: 170: 180DEFPROCtestlines 190U%=scene%+scene%!8+4 200FORT%=1TOU%!-4:X%=U%!16:DX%=U%!20 210IFU%!12<=U%!8THENFORY%=U%!12TOU%!8:POINT640+(X%>>SC%-2),512+(Y%<<2):X%+=DX%:NEXT 220U%+=24:NEXT 230ENDPROC 240: 250DEFPROCtestcalc 260REMOSCLI("MEMORY "+STR$~test%+" +30") 270X1=test%!0/(1<<SC%):Y1=test%!4/(1<<SC%) 280X2=test%!8/(1<<SC%):Y2=test%!12/(1<<SC%) 290A=X1*Y2-Y1*X2 300PRINT'A;" = ";(test%!16+2^32*(test%!20-(test%!16<0)))/2^(SC%+SC%) 310PRINT'Y2/A;" = ";test%!44/(1<<FC%) 320PRINT-X2/A;" = ";test%!40/(1<<FC%) 330PRINT-Y1/A;" = ";test%!36/(1<<FC%) 340PRINTX1/A;" = ";test%!32/(1<<FC%) 350PRINT'A;" = ";(test%!48+2^32*(test%!52-(test%!48<0)))/2^(SC%+SC%);" * ";test%!56 360ENDPROC 370: 380DEFPROCsetupcolours 390COLOUR0,64,64,128:FORT%=1TO15:COLOURT%,T%<<3,T%<<4,T%<<3:NEXT 400U%=col% 410!U%=14:U%+=4 420FORT%=0TO14:FORS%=0TO3:?U%=T%+1:U%+=1:NEXT, 430ENDPROC 440: 450DEFPROCsetupscene 460MA%=20:MB%=12 470U%=scene%+16 480REM Points 490scene%!0=U%-scene%:!U%=MA%*MB%:U%+=4 500FORA%=0TOMA%-1:A=2*PI*A%/MA%:CA=COS(A):SA=SIN(A) 510FORB%=0TOMB%-1:B=2*PI*B%/MB%:R=80+40*COS(B) 520U%!0=R*CA:U%!4=R*SA:U%!8=40*SIN(B) 530U%+=24:NEXT, 540REM Light vectors 550scene%!4=U%-scene%:!U%=MA%*MB%:U%+=4 560FORA%=0TOMA%-1:A=2*PI*A%/MA%:CA=COS(A):SA=SIN(A) 570FORB%=0TOMB%-1:B=2*PI*B%/MB%:R=COS(B)*(1<<VC%) 580U%!0=CA*R:U%!4=SA*R:U%!8=SIN(B)*(1<<VC%) 590U%+=16:NEXT, 600REM Lines 610scene%!8=U%-scene%:!U%=MA%*MB%*3:U%+=4 620V%=scene%+scene%!0+4 630FORA%=0TOMA%-1:IFA%<MA%-1THENAA%=A%+1ELSEAA%=0 640FORB%=0TOMB%-1:IFB%<MB%-1THENBB%=B%+1ELSEBB%=0 650U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(B%+MB%*AA%)-U%:U%+=24 660U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(BB%+MB%*A%)-U%:U%+=24 670U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(BB%+MB%*AA%)-U%:U%+=24 680NEXT, 690REM Polygons 700scene%!12=U%-scene%:!U%=MA%*MB%*2:U%+=4 710V%=scene%+scene%!0+4 720W%=scene%+scene%!4+4 730X%=scene%+scene%!8+4 740FORA%=0TOMA%-1:IFA%<MA%-1THENAA%=A%+1ELSEAA%=0 750FORB%=0TOMB%-1:IFB%<MB%-1THENBB%=B%+1ELSEBB%=0 760PROCtriangle(A%*MB%+B%,AA%*MB%+B%,AA%*MB%+BB%,A%*MB%+B%,AA%*MB%+B%,AA%*MB%+BB%,3*(A%*MB%+B%),3*(A%*MB%+B%)+2,3*(AA%*MB%+B%)+1) 770PROCtriangle(A%*MB%+B%,A%*MB%+BB%,AA%*MB%+BB%,A%*MB%+B%,A%*MB%+BB%,AA%*MB%+BB%,3*(A%*MB%+B%)+1,3*(A%*MB%+B%)+2,3*(A%*MB%+BB%)) 780NEXT, 790IFU%>endscene%THENERROR255,"Scene isn't big enough" 800ENDPROC 810: 820DEFPROCtriangle(P1%,P2%,P3%,V1%,V2%,V3%,L1%,L2%,L3%) 830U%!0=92:U%!4=3 840U%!12=1:REM Gourad 850U%!16=V%+24*P1%-U%:U%!20=V%+24*P2%-U%:U%!24=V%+24*P3%-U% 860U%!28=W%+16*V1%-U%:U%!32=W%+16*V2%-U%:U%!36=W%+16*V3%-U% 870U%!64=col% 880U%!80=X%+24*L1%-U%:U%!84=X%+24*L2%-U%:U%!88=X%+24*L3%-U% 890U%+=92 900ENDPROC 910: 920DEFFNadr(R%,A%,I%) 930IF(P%AND3)<>0THENPRINT"Code isn't word aligned!":END 940LOCALN%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15 950FORU%=1TOI%:IFH%=0THEN 960[OPT T%:MOV R%,O%:] 970ELSEWHILE(H%AND3)=0:H%=H%>>2:N%+=2:ENDWHILE 980IF(H%AND256)=0THEN 990[OPT T%:ADD R%,O%,#(H%AND255)<<N%:]:H%-=H%AND255 1000ELSE[OPT T%:SUB R%,O%,#(256-H%AND255)<<N%:]:H%+=256-H%AND255 1010ENDIF 1020ENDIF:O%=R%:NEXT 1030IFH%<>0THENPRINT"Could not ADR to ";A%;" in ";I%;" instructions (R%=";R%;")":END 1040=T% 1050: 1060DEFPROCassemble 1070SC%=16:CC%=SC%+8:VC%=12:FC%=26 1080DIMgskip%(7) 1090code%=space%:space%+=&2000:endcode%=space% 1100test%=space%:space%+=64 1110zbuff%=space%:space%+=4096*4 1120ibuff%=space%:space%+=128*4 1130plot%=space%:space%+=&40000 1140scene%=space%:space%+=&40000:endscene%=space% 1150IFspace%>endspace%THENPRINT"Space isn't big enough":END 1160FORT%=1TO1:col%=space%:space%+=15*4:NEXT 1170FORT%=0TO2STEP2:P%=code% 1180PROCtoscreencode 1190PROCprojectcode 1200IFP%>endcode%THENERROR255,"Code isn't big enough" 1210NEXT 1220ENDPROC 1230: 1240DEFPROCtoscreencode 1250[OPT T% 1260.vduvars%:EQUD 148:EQUD -1 1270: 1280.window% 1290EQUD -160:EQUD 160:EQUD 160:; Left, Right, OriginX 1300EQUD -128:EQUD 128:EQUD 128:; Bottom, Top, OriginY 1310.screen% 1320EQUD -1:EQUD 160:EQUD 256:REM Addr, Line inc., Height 1330: 1340.rnd%:EQUD 1 1350: 1360.toscreen% 1370STMFD R13!,{R14} 1380OPT FNadr(9,plot%,2) 1390LDR R8,[R9] 1400CMP R8,#0 1410LDMLEFD R13!,{PC}:; Nothing to draw 1420LDR R0,window%+12:; Bottom 1430LDR R1,window%+20:; Originy 1440ADD R1,R0,R1 1450LDR R2,screen%+8:; Screen height 1460SUB R2,R2,#1 1470RSB R2,R1,R2 1480LDR R12,screen% 1490LDR R3,screen%+4:; Line increment 1500MLA R12,R3,R2,R12 1510OPT FNadr(11,zbuff%,2) 1520LDR R10,rnd% 1530.yloop% 1540; Blank z-buffer 1550STMFD R13!,{R0} 1560OPT FNadr(0,window%,2) 1570LDMIA R0,{R0-R1,R2}:; Left, Right, OriginX 1580ADD R0,R0,R2 1590ADD R1,R1,R2 1600MOV R0,R0,ASR#3 1610RSB R9,R0,R1,ASR#3 1620ADD R8,R11,R0,ASL#5 1630]:FORU%=0TO7:[OPT T% 1640MOV U%,#0 1650]:NEXT:[OPT T% 1660.blankloop% 1670STMIA R8!,{R0-R7} 1680SUBS R9,R9,#1 1690BGE blankloop% 1700LDMFD R13!,{R0} 1710; Look at each polygon in turn 1720OPT FNadr(9,plot%,2) 1730LDR R8,[R9],#4 1740.polyloop% 1750LDMIA R9,{R1-R2,R3} 1760CMP R1,R0 1770CMPGE R0,R2 1780BLGE plotpoly% 1790ADD R9,R9,R3 1800SUBS R8,R8,#1 1810BGT polyloop% 1820LDR R3,screen%+4:; Line increment 1830SUB R12,R12,R3 1840ADD R0,R0,#1 1850LDR R1,window%+16:; Top 1860CMP R0,R1 1870BLT yloop% 1880STR R10,rnd% 1890LDMFD R13!,{PC} 1900: 1910.plotpoly% 1920STMFD R13!,{R0,R3,R8,R9,R14} 1930; Find intersections 1940ADD R8,R9,#96 1950LDR R7,[R9,#28] 1960OPT FNadr(6,ibuff%,2) 1970MOV R5,R6 1980.lineloop% 1990LDMIA R8!,{R1-R4} 2000CMP R1,R0 2010SUBGES R2,R0,R2 2020MLAGE R3,R2,R4,R3 2030STRGE R3,[R6],#4 2040SUBS R7,R7,#1 2050BGT lineloop% 2060CMP R6,R5 2070BEQ endpoly% 2080MOV R3,#&80000000 2090STR R3,[R6] 2100; Sort them 2110LDMDB R6!,{R2-R3} 2120CMP R2,R3 2130MOVGT R4,R2 2140MOVGT R2,R3 2150MOVGT R3,R4 2160CMP R6,R5 2170BEQ endsort% 2180.outloop% 2190MOV R7,R5 2200.inloop% 2210LDR R1,[R7],#4 2220CMP R1,R2 2230BGT swap% 2240CMP R7,R6 2250BLT inloop% 2260B endswap% 2270: 2280.swap% 2290STR R2,[R7,#-4] 2300CMP R1,R3 2310MOVGT R2,R3 2320MOVGT R3,R1 2330MOVLT R2,R1 2340CMP R7,R6 2350BLT inloop% 2360.endswap% 2370STMIA R6,{R2-R3} 2380LDMDB R6!,{R2-R3} 2390CMP R2,R3 2400MOVGT R4,R2 2410MOVGT R2,R3 2420MOVGT R3,R4 2430CMP R6,R5 2440BGT outloop% 2450.endsort% 2460STMIA R6,{R2-R3} 2470; Round them, Clip them, Weed out doublets 2480OPT FNadr(5,window%,2) 2490LDMIA R5,{R5-R6}:; Left, Right 2500OPT FNadr(8,ibuff%,2) 2510MOV R7,R8 2520.searchloop% 2530LDMIA R8!,{R1-R2} 2540CMP R1,#&80000000 2550BEQ endpoly% 2560ADD R1,R1,#1<<SC%-1 2570MOV R1,R1,ASR#SC% 2580CMP R1,R5 2590MOVLT R1,R5 2600ADD R2,R2,#1<<SC%-1 2610MOV R2,R2,ASR#SC% 2620CMP R2,R6 2630MOVGT R2,R6 2640CMP R1,R2 2650BGE searchloop% 2660.iloop% 2670.searchloop% 2680LDMIA R8!,{R3-R4} 2690CMP R3,#&80000000 2700BEQ endiloop% 2710ADD R3,R3,#1<<SC%-1 2720MOV R3,R3,ASR#SC% 2730CMP R3,R5 2740MOVLT R3,R5 2750ADD R4,R4,#1<<SC%-1 2760MOV R4,R4,ASR#SC% 2770CMP R4,R6 2780MOVGT R4,R6 2790CMP R3,R4 2800BGE searchloop% 2810CMP R2,R3 2820MOVGE R2,R4 2830BGE searchloop% 2840SUB R2,R2,#1 2850STMIA R7!,{R1-R2} 2860MOV R1,R3 2870MOV R2,R4 2880B iloop% 2890: 2900.endiloop% 2910SUB R2,R2,#1 2920STMIA R7!,{R1-R3} 2930; Type checking goes here 2940; Work out line variables 2950ADD R2,R9,#16 2960LDMIA R2,{R2-R4}:; Nearness, -dx, -dy 2970MLA R2,R0,R4,R2 2980ADD R4,R9,#32 2990LDMIA R4,{R4,R5-R7}:; BaseCol, Colour, -dx, -dy 3000MLA R5,R0,R7,R5 3010; Draw them 3020OPT FNadr(14,ibuff%,2) 3030LDMIA R14!,{R0,R1} 3040CMP R0,#&80000000 3050BEQ endpoly% 3060.hlineloop% 3070STMFD R13!,{R2,R5,R11,R12,R14} 3080SUB R14,R1,R0 3090MLA R2,R0,R3,R2 3100MLA R5,R0,R6,R5 3110LDR R1,window%+8:; OriginX 3120ADD R0,R0,R1 3130ADD R11,R11,R0,ASL#2 3140AND R1,R0,#7 3150MOV R0,R0,ASR#3 3160ADD R12,R12,R0,ASL#2 3170LDR R9,[R12] 3180ADR R0,gouradj% 3190LDR R1,[R0,R1,ASL#2] 3200ADD PC,R0,R1 3210: 3220.hlinereturn% 3230STR R9,[R12] 3240LDMFD R13!,{R2,R5,R11,R12,R14} 3250LDMIA R14!,{R0-R1} 3260CMP R0,#&80000000 3270BNE hlineloop% 3280.endpoly% 3290LDMFD R13!,{R0,R3,R8,R9,PC} 3300: 3310.gouradj% 3320]:FORU%=0TO7:[OPT T% 3330EQUD hlinereturn%-gouradj% 3340]:NEXT:[OPT T% 3350: 3360.newword% 3370]:FORU%=0TO7:gouradj%!(U%<<2)=P%-gouradj%:[OPT T% 3380LDR R0,[R11],#4 3390CMP R2,R0 3400BLT gskip%(U%) 3410STR R2,[R11,#-4] 3420ADD R10,R10,R10,ASL#4 3430CMP R5,#0 3440ADDGT R0,R5,R10,LSR#32-CC% 3450RSBLT R0,R5,R10,LSR#32-CC% 3460ADD R10,R10,R10,ASL#4 3470EOR R0,R0,R10,LSR#32-CC% 3480LDRB R0,[R4,R0,LSR#CC%-2] 3490BIC R9,R9,#&F<<(U%<<2) 3500ORR R9,R9,R0,LSL#U%<<2 3510.gskip%(U%) 3520SUBS R14,R14,#1 3530BLT hlinereturn% 3540ADD R2,R2,R3 3550ADD R5,R5,R6 3560]:NEXT:[OPT T% 3570STR R9,[R12],#4 3580LDR R9,[R12] 3590B newword% 3600] 3610SYS"OS_ReadVduVariables",vduvars%,screen% 3620ENDPROC 3630: 3640DEFPROCprojectcode 3650[OPT T% 3660.matrix% 3670EQUD 1<<VC%:EQUD 0:EQUD 0:; X-vector 3680EQUD 0:EQUD (1<<VC%)*.9:EQUD 0:; Y-vector 3690EQUD 0:EQUD 0:EQUD 1<<VC%:; Z-vector 3700EQUD 0:EQUD 0:EQUD 0:; Position 3710EQUD 1/3*(1<<VC%):EQUD 2/3*(1<<VC%):EQUD -2/3*(1<<VC%):; Light 3720: 3730.project% 3740STMFD R13!,{R14} 3750OPT FNadr(12,scene%,2) 3760BL parallaxcalc% 3770BL lightcalc% 3780BL linecalc% 3790BL polycalc% 3800LDMFD R13!,{PC} 3810: 3820.parallaxcalc% 3830STMFD R13!,{R12,R14} 3840LDR R0,[R12,#0] 3850ADD R12,R12,R0:; Point base address 3860LDR R11,[R12],#4:; Number of points 3870CMP R11,#0 3880BLE endparallaxcalc% 3890OPT FNadr(10,matrix%,2) 3900.pointloop% 3910LDMIA R12!,{R0-R2} 3920LDMIA R10!,{R3-R5} 3930MUL R6,R3,R0 3940MUL R7,R4,R0 3950MUL R8,R5,R0 3960LDMIA R10!,{R3-R5} 3970MLA R6,R3,R1,R6 3980MLA R7,R4,R1,R7 3990MLA R8,R5,R1,R8 4000LDMIA R10!,{R3-R5} 4010MLA R6,R3,R2,R6 4020MLA R7,R4,R2,R7 4030MLA R8,R5,R2,R8 4040LDMIA R10!,{R3-R5} 4050ADD R6,R6,R3,ASL#VC% 4060ADD R7,R7,R4,ASL#VC% 4070ADD R8,R8,R5,ASL#VC% 4080SUB R10,R10,#48 4090MOV R0,R6,ASL#SC%-VC% 4100MOV R1,R7,ASL#SC%-VC% 4110MOV R2,R8,ASL#SC%-VC% 4120RSB R2,R2,#1<<30 4130STMIA R12!,{R0-R2} 4140SUBS R11,R11,#1 4150BGT pointloop% 4160.endparallaxcalc% 4170LDMFD R13!,{R12,PC} 4180: 4190.lightcalc% 4200STMFD R13!,{R12,R14} 4210LDR R0,[R12,#4] 4220ADD R12,R12,R0 4230LDR R11,[R12],#4 4240OPT FNadr(10,matrix%,2) 4250ADD R3,R10,#48 4260LDMIA R3,{R3-R5}:; Light vector 4270LDMIA R10!,{R0-R2} 4280MUL R6,R3,R0 4290MLA R6,R4,R1,R6 4300MLA R6,R5,R2,R6 4310LDMIA R10!,{R0-R2} 4320MUL R7,R3,R0 4330MLA R7,R4,R1,R7 4340MLA R7,R5,R2,R7 4350LDMIA R10!,{R0-R2} 4360MUL R8,R3,R0 4370MLA R8,R4,R1,R8 4380MLA R8,R5,R2,R8 4390MOV R3,R6,ASR#VC% 4400MOV R4,R7,ASR#VC% 4410MOV R5,R8,ASR#VC% 4420.vectorloop% 4430LDMIA R12,{R0-R2} 4440MUL R6,R0,R3 4450MLA R6,R1,R4,R6 4460MLA R6,R2,R5,R6 4470MOV R6,R6,ASL#CC%-VC%-VC% 4480STR R6,[R12,#12] 4490ADD R12,R12,#16 4500SUBS R11,R11,#1 4510BGT vectorloop% 4520LDMFD R13!,{R12,PC} 4530: 4540.linecalc% 4550STMFD R13!,{R12,R14} 4560LDR R0,[R12,#8] 4570ADD R12,R12,R0 4580LDR R11,[R12],#4 4590.lineloop% 4600LDMIA R12,{R2,R4} 4610ADD R2,R12,R2 4620ADD R2,R2,#12 4630LDMIA R2,{R2-R3} 4640ADD R4,R12,R4 4650ADD R4,R4,#12 4660LDMIA R4,{R4-R5} 4670SUB R4,R4,R2 4680SUBS R5,R5,R3 4690ADDLT R2,R2,R4 4700ADDLT R3,R3,R5 4710RSBLT R4,R4,#0 4720RSBLT R5,R5,#0 4730ADD R1,R3,#1<<SC%-1 4740MOV R1,R1,ASR#SC% 4750ADD R0,R3,R5 4760SUB R0,R0,#1<<SC%-1 4770MOV R0,R0,ASR#SC% 4780CMP R0,R1 4790BLT skipline% 4800MOV R6,#0 4810MOV R7,#1 4820CMP R4,#0 4830RSBLT R4,R4,#0 4840RSBLT R7,R7,#0 4850]:FORU%=12TO1STEP-1:[OPT T% 4860CMP R5,R4,ASR#U% 4870SUBLE R4,R4,R5,ASL#U% 4880ADDLE R6,R6,R7,ASL#SC%+U% 4890]:NEXT:[OPT T% 4900SUBS R4,R4,R5 4910]:FORU%=SC%TO0STEP-1:[OPT T% 4920SUBGE R4,R4,R5 4930ADDGE R6,R6,R7,ASL#U% 4940ADDS R4,R5,R4,ASL#1 4950]:NEXT:[OPT T% 4960ADDGE R6,R6,#1 4970RSB R3,R3,R1,ASL#SC% 4980ADD R3,R3,#1<<SC%-1 4990MOV R3,R3,ASR#SC%-4 5000MUL R4,R3,R6 5010ADD R2,R2,R4,ASR#4 5020.skipline% 5030ADD R3,R12,#8 5040STMIA R3,{R0-R1,R2,R6} 5050ADD R12,R12,#24 5060SUBS R11,R11,#1 5070BGT lineloop% 5080LDMFD R13!,{R12,PC} 5090: 5100.polycalc% 5110STMFD R13!,{R12,R14} 5120LDR R0,[R12,#12] 5130ADD R12,R12,R0 5140LDR R11,[R12],#4 5150OPT FNadr(10,plot%,2) 5160STR R11,[R10],#4 5170.polyloop% 5180ADD R0,R12,#16 5190LDMIA R0,{R0,R2,R4}:; Points to interpolate from 5200ADD R0,R12,R0 5210ADD R0,R0,#12 5220LDMIA R0,{R0-R1,R6} 5230ADD R2,R12,R2 5240ADD R2,R2,#12 5250LDMIA R2,{R2-R3,R7} 5260ADD R4,R12,R4 5270ADD R4,R4,#12 5280LDMIA R4,{R4-R5,R8} 5290ADR R9,temp% 5300STMIA R9,{R0-R1,R6-R8}:; Origin, Nearness for later use 5310SUB R2,R2,R0:; DX1<<SC% 5320SUB R3,R3,R1 5330SUB R4,R4,R0:; DX2<<SC% 5340SUB R5,R5,R1 5350; R6,R7 = Area = (DX1,DY1)x(DX2,DY2) 5360MOV R0,R2,ASR#16 5370MOV R1,R5,ASR#16 5380MUL R7,R0,R1 5390SUB R0,R2,R0,ASL#16 5400MUL R8,R0,R1 5410MOV R6,R8,ASL#16 5420ADD R7,R7,R8,ASR#16 5430SUB R1,R5,R1,ASL#16 5440MUL R8,R0,R1 5450ADDS R6,R6,R8 5460ADC R7,R7,#0 5470MOV R0,R2,ASR#16 5480MUL R8,R0,R1 5490ADDS R6,R6,R8,ASL#16 5500ADC R7,R7,R8,ASR#16 5510MOV R0,R3,ASR#16 5520MOV R1,R4,ASR#16 5530MUL R8,R0,R1 5540SUB R7,R7,R8 5550SUB R0,R3,R0,ASL#16 5560MUL R8,R0,R1 5570SUBS R6,R6,R8,ASL#16 5580SBC R7,R7,R8,ASR#16 5590SUB R1,R4,R1,ASL#16 5600MUL R8,R0,R1 5610SUBS R6,R6,R8 5620SBC R7,R7,#0 5630MOV R0,R3,ASR#16 5640MUL R8,R0,R1 5650SUBS R6,R6,R8,ASL#16 5660SBC R7,R7,R8,ASR#16 5670OPT FNadr(0,test%,2) 5680STMIA R0,{R2-R5,R6-R7} 5690MOV R8,#1 5700CMP R7,#0 5710CMPEQ R6,#0 5720BGE dontflip% 5730RSB R8,R8,#0 5740RSBS R6,R6,#0 5750RSC R7,R7,#0 5760.dontflip% 5770; R5 = DF1/DX = (1,0)x(DX2,DY2) / (DX1,DY1)x(DX2,DY2) <<FC% 5780MOV R9,R5 5790BL longdiv% 5800MOV R5,R9 5810; R4 = DF1/DY = (0,1)x(DX2,DY2) / (DX1,DY1)x(DX2,DY2) <<FC% 5820RSB R9,R4,#0 5830BL longdiv% 5840MOV R4,R9 5850; R3 = DF2/DX = (DX1,DY1)x(1,0) / (DX1,DY1)x(DX2,DY2) <<FC% 5860RSB R9,R3,#0 5870BL longdiv% 5880MOV R3,R9 5890; R2 = DF2/DY = (DX1,DY1)x(0,1) / (DX1,DY1)x(DX2,DY2) <<FC% 5900MOV R9,R2 5910BL longdiv% 5920MOV R2,R9 5930OPT FNadr(0,test%+32,2) 5940STMIA R0,{R2-R5,R6-R7,R8} 5950; Calculation of nearness -dx -dy 5960ADR R9,temp%+8 5970LDMIA R9,{R6-R8} 5980BL mapq% 5990ADD R9,R10,#16 6000STMIA R9,{R6-R8} 6010; Type checking goes here 6020ADD R9,R12,#28 6030LDMIA R9,{R6-R8} 6040ADD R6,R12,R6 6050LDR R6,[R6,#12] 6060ADD R7,R12,R7 6070LDR R7,[R7,#12] 6080ADD R8,R12,R8 6090LDR R8,[R8,#12] 6100BL mapq% 6110LDR R0,[R12,#64]:; Colour base 6120LDR R1,[R0],#4 6130STR R0,[R10,#32] 6140MUL R6,R1,R6 6150MUL R7,R1,R7 6160MUL R8,R1,R8 6170ADD R9,R10,#36 6180STMIA R9,{R6-R8} 6190LDR R7,[R12,#4]:; Number of lines 6200STR R7,[R10,#28] 6210; Copy lines and work out top and bottom 6220ADD R9,R12,#80 6230ADD R8,R10,#96 6240LDR R0,[R9],#4 6250ADD R0,R12,R0 6260ADD R0,R0,#8 6270LDMIA R0,{R0-R1,R4-R5} 6280STMIA R8!,{R0-R1,R4-R5} 6290SUB R7,R7,#1 6300.lineloop% 6310LDR R2,[R9],#4 6320ADD R2,R12,R2 6330ADD R2,R2,#8 6340LDMIA R2,{R2-R5} 6350STMIA R8!,{R2-R5} 6360CMP R2,R0 6370MOVGT R0,R2 6380CMP R3,R1 6390MOVLT R1,R3 6400SUBS R7,R7,#1 6410BGT lineloop% 6420SUB R2,R8,R10:; Offset to next plot entry 6430LDR R3,[R12,#12]:; Fill type 6440STMIA R10,{R0-R1,R2,R3}:; Top, Bottom, Next, Type 6450ADD R10,R10,R2 6460; Update R12 6470LDR R0,[R12] 6480ADD R12,R12,R0 6490SUBS R11,R11,#1 6500BGT polyloop% 6510LDMFD R13!,{R12,PC} 6520: 6530.temp% 6540EQUD 0:EQUD 0:EQUD 0:EQUD 0 6550EQUD 0:EQUD 0:EQUD 0:EQUD 0 6560: 6570; Expects temp% to have X1,Y1 6580; Expects R5,R4,R3,R2 to be mapping matrix 6590; Expects R6,R7,R8 to be Q1,Q2,Q3 6600; Answer is in R6,R7,R8 6610; Corrupts R0,R1,R9 6620.mapq% 6630STMFD R13!,{R14} 6640MOV R6,R6,ASR#SC%-4 6650MOV R7,R7,ASR#SC%-4 6660MOV R8,R8,ASR#SC%-4 6670SUB R7,R7,R6 6680SUB R8,R8,R6 6690MOV R6,R6,ASL#SC%-4 6700; DQ/DX = DQ1*DF1/DX + DQ2*DF2/DX 6710MOV R9,R5,ASR#16 6720MUL R14,R9,R7 6730MOV R0,R14,ASL#(SC%-4)-FC%+16 6740SUB R9,R5,R9,ASL#16 6750MUL R14,R9,R7 6760ADD R0,R0,R14,ASR#FC%-(SC%-4) 6770MOV R9,R3,ASR#16 6780MUL R14,R9,R8 6790ADD R0,R0,R14,ASL#(SC%-4)-FC%+16 6800SUB R9,R3,R9,ASL#16 6810MUL R14,R9,R8 6820ADD R0,R0,R14,ASR#FC%-(SC%-4) 6830; DQ/DY = DQ1*DF1/DY + DQ2*DF2/DY 6840MOV R9,R4,ASR#16 6850MUL R14,R9,R7 6860MOV R1,R14,ASL#(SC%-4)-FC%+16 6870SUB R9,R4,R9,ASL#16 6880MUL R14,R9,R7 6890ADD R1,R1,R14,ASR#FC%-(SC%-4) 6900MOV R9,R2,ASR#16 6910MUL R14,R9,R8 6920ADD R1,R1,R14,ASL#(SC%-4)-FC%+16 6930SUB R9,R2,R9,ASL#16 6940MUL R14,R9,R8 6950ADD R1,R1,R14,ASR#FC%-(SC%-4) 6960MOV R7,R0:; DZ/DX<<SC% 6970MOV R8,R1:; DZ/DY<<SC% 6980; Q0 = Q - X*DQ/DX - Y*DQ/DY 6990ADR R9,temp% 7000LDMIA R9,{R0-R1} 7010MOV R9,R0,ASR#SC% 7020MUL R14,R9,R7 7030SUB R6,R6,R14 7040SUB R9,R0,R9,ASL#SC% 7050MOV R14,R7,ASR#16 7060MUL R14,R9,R14 7070SUB R6,R6,R14,ASL#16-SC% 7080MOV R9,R1,ASR#SC% 7090MUL R14,R9,R8 7100SUB R6,R6,R14 7110SUB R9,R1,R9,ASL#SC% 7120MOV R14,R8,ASR#16 7130MUL R14,R9,R14 7140SUB R6,R6,R14,ASL#16-SC% 7150ADD R6,R6,R7,ASR#1 7160ADD R6,R6,R8,ASR#1 7170LDMFD R13!,{PC} 7180: 7190; Expects R9 to be numerator>>32 7200; Expects R6,R7 to be ABS(denominator), and R8 to be its SGN 7210; Answer is in R9 7220; R0,R1 corrupted 7230.longdiv% 7240STMFD R13!,{R8,R14} 7250CMP R9,#0 7260RSBLT R8,R8,#0 7270RSBLT R9,R9,#0 7280MOV R0,R9,ASL#(SC%-4) 7290MOV R1,R9,ASR#32-(SC%-4) 7300MOV R9,#0 7310]:FORU%=4TO-FC%STEP-1:[OPT T% 7320CMP R1,R7 7330CMPEQ R0,R6 7340BLO P%+16 7350SUBS R0,R0,R6 7360SBC R1,R1,R7 7370ADD R9,R9,R8,ASL#U%+FC% 7380; This is refered to above as P%+16 7390ADDS R0,R0,R0 7400ADC R1,R1,R1 7410]:NEXT:[OPT T% 7420CMP R1,R7 7430CMPEQ R0,R6 7440ADDHS R9,R9,R8 7450LDMFD R13!,{R8,PC} 7460] 7470ENDPROC
�9 )�space%&90000:endspace%=space%+&90000 �"Thinking..." A�''"This program requires over 1044k of system sprite memory" ș "XOS_CLI","SNew" ( �assemble 2�setupscene <�setupcolours Fbank%=1:A%=0 P�A%=0�31 Z7A=2*�*A%/64:C%=�(A)*(1<<VC%)*.9:S%=�(A)*(1<<VC%)*.9 d:matrix%!0=C%:matrix%!8=S%:matrix%!24=-S%:matrix%!32=C% n�project%:�:�toscreen% x$�128,0:�BY1023,1023:�23,27,1,A%| �� �.�:�A%=0�31:�23,27,0,A%|:Ȗ:�&ED,128,0:�:�0 �� �: �: ���testlines �U%=scene%+scene%!8+4 �"�T%=1�U%!-4:X%=U%!16:DX%=U%!20 �G�U%!12<=U%!8��Y%=U%!12�U%!8:Ȓ640+(X%>>SC%-2),512+(Y%<<2):X%+=DX%:� �U%+=24:� �� �: ���testcalc '�OSCLI("MEMORY "+STR$~test%+" +30") +X1=test%!0/(1<<SC%):Y1=test%!4/(1<<SC%) ,X2=test%!8/(1<<SC%):Y2=test%!12/(1<<SC%) "A=X1*Y2-Y1*X2 ,A�'A;" = ";(test%!16+2^32*(test%!20-(test%!16<0)))/2^(SC%+SC%) 6"�'Y2/A;" = ";test%!44/(1<<FC%) @"�-X2/A;" = ";test%!40/(1<<FC%) J"�-Y1/A;" = ";test%!36/(1<<FC%) T!�X1/A;" = ";test%!32/(1<<FC%) ^P�'A;" = ";(test%!48+2^32*(test%!52-(test%!48<0)))/2^(SC%+SC%);" * ";test%!56 h� r: |��setupcolours �1�0,64,64,128:�T%=1�15:�T%,T%<<3,T%<<4,T%<<3:� �U%=col% �!U%=14:U%+=4 �&�T%=0�14:�S%=0�3:?U%=T%+1:U%+=1:�, �� �: ���setupscene �MA%=20:MB%=12 �U%=scene%+16 �� Points �(scene%!0=U%-scene%:!U%=MA%*MB%:U%+=4 �,�A%=0�MA%-1:A=2*�*A%/MA%:CA=�(A):SA=�(A) �)�B%=0�MB%-1:B=2*�*B%/MB%:R=80+40*�(B) $U%!0=R*CA:U%!4=R*SA:U%!8=40*�(B) U%+=24:�, � Light vectors &(scene%!4=U%-scene%:!U%=MA%*MB%:U%+=4 0,�A%=0�MA%-1:A=2*�*A%/MA%:CA=�(A):SA=�(A) :,�B%=0�MB%-1:B=2*�*B%/MB%:R=�(B)*(1<<VC%) D*U%!0=CA*R:U%!4=SA*R:U%!8=�(B)*(1<<VC%) N U%+=16:�, X� Lines b*scene%!8=U%-scene%:!U%=MA%*MB%*3:U%+=4 lV%=scene%+scene%!0+4 v(�A%=0�MA%-1:�A%<MA%-1�AA%=A%+1�AA%=0 �(�B%=0�MB%-1:�B%<MB%-1�BB%=B%+1�BB%=0 �?U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(B%+MB%*AA%)-U%:U%+=24 �?U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(BB%+MB%*A%)-U%:U%+=24 �@U%!0=V%+24*(B%+MB%*A%)-U%:U%!4=V%+24*(BB%+MB%*AA%)-U%:U%+=24 ��, �� Polygons �+scene%!12=U%-scene%:!U%=MA%*MB%*2:U%+=4 �V%=scene%+scene%!0+4 �W%=scene%+scene%!4+4 �X%=scene%+scene%!8+4 �(�A%=0�MA%-1:�A%<MA%-1�AA%=A%+1�AA%=0 �(�B%=0�MB%-1:�B%<MB%-1�BB%=B%+1�BB%=0 ��triangle(A%*MB%+B%,AA%*MB%+B%,AA%*MB%+BB%,A%*MB%+B%,AA%*MB%+B%,AA%*MB%+BB%,3*(A%*MB%+B%),3*(A%*MB%+B%)+2,3*(AA%*MB%+B%)+1) �triangle(A%*MB%+B%,A%*MB%+BB%,AA%*MB%+BB%,A%*MB%+B%,A%*MB%+BB%,AA%*MB%+BB%,3*(A%*MB%+B%)+1,3*(A%*MB%+B%)+2,3*(A%*MB%+BB%)) �, /�U%>endscene%��255,"Scene isn't big enough" � *: 43��triangle(P1%,P2%,P3%,V1%,V2%,V3%,L1%,L2%,L3%) >U%!0=92:U%!4=3 HU%!12=1:� Gourad R<U%!16=V%+24*P1%-U%:U%!20=V%+24*P2%-U%:U%!24=V%+24*P3%-U% \<U%!28=W%+16*V1%-U%:U%!32=W%+16*V2%-U%:U%!36=W%+16*V3%-U% fU%!64=col% p<U%!80=X%+24*L1%-U%:U%!84=X%+24*L2%-U%:U%!88=X%+24*L3%-U% z U%+=92 �� �: �ݤadr(R%,A%,I%) �,�(P%�3)<>0��"Code isn't word aligned!":� �(�N%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15 ��U%=1�I%:�H%=0� �[OPT T%:MOV R%,O%:] � �ȕ(H%�3)=0:H%=H%>>2:N%+=2:� ��(H%�256)=0� �0[OPT T%:ADD R%,O%,#(H%�255)<<N%:]:H%-=H%�255 �9�[OPT T%:SUB R%,O%,#(256-H%�255)<<N%:]:H%+=256-H%�255 �� � �:O%=R%:� J�H%<>0��"Could not ADR to ";A%;" in ";I%;" instructions (R%=";R%;")":� =T% : $��assemble ."SC%=16:CC%=SC%+8:VC%=12:FC%=26 8�gskip%(7) B.code%=space%:space%+=&2000:endcode%=space% Ltest%=space%:space%+=64 V zbuff%=space%:space%+=4096*4 `ibuff%=space%:space%+=128*4 jplot%=space%:space%+=&40000 t1scene%=space%:space%+=&40000:endscene%=space% ~1�space%>endspace%��"Space isn't big enough":� �&�T%=1�1:col%=space%:space%+=15*4:� ��T%=0�2�2:P%=code% ��toscreencode ��projectcode �-�P%>endcode%��255,"Code isn't big enough" �� �� �: ���toscreencode �[OPT T% �.vduvars%:EQUD 148:EQUD -1 �: .window% 6EQUD -160:EQUD 160:EQUD 160:; Left, Right, OriginX 6EQUD -128:EQUD 128:EQUD 128:; Bottom, Top, OriginY .screen% (7EQUD -1:EQUD 160:EQUD 256:� Addr, Line inc., Height 2: <.rnd%:EQUD 1 F: P.toscreen% ZSTMFD R13!,{R14} dOPT �adr(9,plot%,2) nLDR R8,[R9] x CMP R8,#0 �'LDMLEFD R13!,{PC}:; Nothing to draw �LDR R0,window%+12:; Bottom �LDR R1,window%+20:; Originy �ADD R1,R0,R1 �$LDR R2,screen%+8:; Screen height �SUB R2,R2,#1 �RSB R2,R1,R2 �LDR R12,screen% �%LDR R3,screen%+4:; Line increment �MLA R12,R3,R2,R12 �OPT �adr(11,zbuff%,2) �LDR R10,rnd% �.yloop% ; Blank z-buffer STMFD R13!,{R0} OPT �adr(0,window%,2) ".LDMIA R0,{R0-R1,R2}:; Left, Right, OriginX ,ADD R0,R0,R2 6ADD R1,R1,R2 @MOV R0,R0,ASR#3 JRSB R9,R0,R1,ASR#3 TADD R8,R11,R0,ASL#5 ^]:�U%=0�7:[OPT T% h MOV U%,#0 r]:�:[OPT T% |.blankloop% �STMIA R8!,{R0-R7} �SUBS R9,R9,#1 �BGE blankloop% �LDMFD R13!,{R0} �"; Look at each polygon in turn �OPT �adr(9,plot%,2) �LDR R8,[R9],#4 �.polyloop% �LDMIA R9,{R1-R2,R3} � CMP R1,R0 �CMPGE R0,R2 �BLGE plotpoly% �ADD R9,R9,R3 SUBS R8,R8,#1 BGT polyloop% %LDR R3,screen%+4:; Line increment &SUB R12,R12,R3 0ADD R0,R0,#1 :LDR R1,window%+16:; Top D CMP R0,R1 NBLT yloop% XSTR R10,rnd% bLDMFD R13!,{PC} l: v.plotpoly% � STMFD R13!,{R0,R3,R8,R9,R14} �; Find intersections �ADD R8,R9,#96 �LDR R7,[R9,#28] �OPT �adr(6,ibuff%,2) � MOV R5,R6 �.lineloop% �LDMIA R8!,{R1-R4} � CMP R1,R0 �SUBGES R2,R0,R2 �MLAGE R3,R2,R4,R3 �STRGE R3,[R6],#4 �SUBS R7,R7,#1 BGT lineloop% CMP R6,R5 BEQ endpoly% MOV R3,#&80000000 *STR R3,[R6] 4; Sort them >LDMDB R6!,{R2-R3} H CMP R2,R3 RMOVGT R4,R2 \MOVGT R2,R3 fMOVGT R3,R4 p CMP R6,R5 zBEQ endsort% � .outloop% � MOV R7,R5 �.inloop% �LDR R1,[R7],#4 � CMP R1,R2 � BGT swap% � CMP R7,R6 �BLT inloop% �B endswap% �: � .swap% �STR R2,[R7,#-4] � CMP R1,R3 MOVGT R2,R3 MOVGT R3,R1 MOVLT R2,R1 $ CMP R7,R6 .BLT inloop% 8 .endswap% BSTMIA R6,{R2-R3} LLDMDB R6!,{R2-R3} V CMP R2,R3 `MOVGT R4,R2 jMOVGT R2,R3 tMOVGT R3,R4 ~ CMP R6,R5 �BGT outloop% � .endsort% �STMIA R6,{R2-R3} �.; Round them, Clip them, Weed out doublets �OPT �adr(5,window%,2) �"LDMIA R5,{R5-R6}:; Left, Right �OPT �adr(8,ibuff%,2) � MOV R7,R8 �.searchloop% �LDMIA R8!,{R1-R2} �CMP R1,#&80000000 �BEQ endpoly% ADD R1,R1,#1<<SC%-1 MOV R1,R1,ASR#SC% CMP R1,R5 MOVLT R1,R5 (ADD R2,R2,#1<<SC%-1 2MOV R2,R2,ASR#SC% < CMP R2,R6 FMOVGT R2,R6 P CMP R1,R2 ZBGE searchloop% d.iloop% n.searchloop% xLDMIA R8!,{R3-R4} �CMP R3,#&80000000 �BEQ endiloop% �ADD R3,R3,#1<<SC%-1 �MOV R3,R3,ASR#SC% � CMP R3,R5 �MOVLT R3,R5 �ADD R4,R4,#1<<SC%-1 �MOV R4,R4,ASR#SC% � CMP R4,R6 �MOVGT R4,R6 � CMP R3,R4 �BGE searchloop% � CMP R2,R3 MOVGE R2,R4 BGE searchloop% SUB R2,R2,#1 "STMIA R7!,{R1-R2} , MOV R1,R3 6 MOV R2,R4 @B iloop% J: T.endiloop% ^SUB R2,R2,#1 hSTMIA R7!,{R1-R3} r; Type checking goes here |; Work out line variables �ADD R2,R9,#16 �)LDMIA R2,{R2-R4}:; Nearness, -dx, -dy �MLA R2,R0,R4,R2 �ADD R4,R9,#32 �3LDMIA R4,{R4,R5-R7}:; BaseCol, Colour, -dx, -dy �MLA R5,R0,R7,R5 �; Draw them �OPT �adr(14,ibuff%,2) �LDMIA R14!,{R0,R1} �CMP R0,#&80000000 �BEQ endpoly% �.hlineloop% �"STMFD R13!,{R2,R5,R11,R12,R14} SUB R14,R1,R0 MLA R2,R0,R3,R2 MLA R5,R0,R6,R5 &LDR R1,window%+8:; OriginX 0ADD R0,R0,R1 :ADD R11,R11,R0,ASL#2 D� R1,R0,#7 NMOV R0,R0,ASR#3 XADD R12,R12,R0,ASL#2 bLDR R9,[R12] lADR R0,gouradj% vLDR R1,[R0,R1,ASL#2] �ADD PC,R0,R1 �: �.hlinereturn% �STR R9,[R12] �"LDMFD R13!,{R2,R5,R11,R12,R14} �LDMIA R14!,{R0-R1} �CMP R0,#&80000000 �BNE hlineloop% � .endpoly% �LDMFD R13!,{R0,R3,R8,R9,PC} �: � .gouradj% �]:�U%=0�7:[OPT T% EQUD hlinereturn%-gouradj% ]:�:[OPT T% : .newword% *2]:�U%=0�7:gouradj%!(U%<<2)=P%-gouradj%:[OPT T% 4LDR R0,[R11],#4 > CMP R2,R0 HBLT gskip%(U%) RSTR R2,[R11,#-4] \ADD R10,R10,R10,ASL#4 f CMP R5,#0 pADDGT R0,R5,R10,LSR#32-CC% zRSBLT R0,R5,R10,LSR#32-CC% �ADD R10,R10,R10,ASL#4 �� R0,R0,R10,LSR#32-CC% �LDRB R0,[R4,R0,LSR#CC%-2] �BIC R9,R9,#&F<<(U%<<2) ��R R9,R9,R0,LSL#U%<<2 �.gskip%(U%) �SUBS R14,R14,#1 �BLT hlinereturn% �ADD R2,R2,R3 �ADD R5,R5,R6 �]:�:[OPT T% �STR R9,[R12],#4 �LDR R9,[R12] B newword% ] ,ș"OS_ReadVduVariables",vduvars%,screen% $� .: 8��projectcode B[OPT T% L.matrix% V(EQUD 1<<VC%:EQUD 0:EQUD 0:; X-vector `-EQUD 0:EQUD (1<<VC%)*.9:EQUD 0:; Y-vector j(EQUD 0:EQUD 0:EQUD 1<<VC%:; Z-vector t#EQUD 0:EQUD 0:EQUD 0:; Position ~BEQUD 1/3*(1<<VC%):EQUD 2/3*(1<<VC%):EQUD -2/3*(1<<VC%):; Light �: � .project% �STMFD R13!,{R14} �OPT �adr(12,scene%,2) �BL parallaxcalc% �BL lightcalc% �BL linecalc% �BL polycalc% �LDMFD R13!,{PC} �: �.parallaxcalc% �STMFD R13!,{R12,R14} LDR R0,[R12,#0] 'ADD R12,R12,R0:; Point base address 'LDR R11,[R12],#4:; Number of points CMP R11,#0 (BLE endparallaxcalc% 2OPT �adr(10,matrix%,2) <.pointloop% FLDMIA R12!,{R0-R2} PLDMIA R10!,{R3-R5} ZMUL R6,R3,R0 dMUL R7,R4,R0 nMUL R8,R5,R0 xLDMIA R10!,{R3-R5} �MLA R6,R3,R1,R6 �MLA R7,R4,R1,R7 �MLA R8,R5,R1,R8 �LDMIA R10!,{R3-R5} �MLA R6,R3,R2,R6 �MLA R7,R4,R2,R7 �MLA R8,R5,R2,R8 �LDMIA R10!,{R3-R5} �ADD R6,R6,R3,ASL#VC% �ADD R7,R7,R4,ASL#VC% �ADD R8,R8,R5,ASL#VC% �SUB R10,R10,#48 �MOV R0,R6,ASL#SC%-VC% MOV R1,R7,ASL#SC%-VC% MOV R2,R8,ASL#SC%-VC% RSB R2,R2,#1<<30 "STMIA R12!,{R0-R2} ,SUBS R11,R11,#1 6BGT pointloop% @.endparallaxcalc% JLDMFD R13!,{R12,PC} T: ^.lightcalc% hSTMFD R13!,{R12,R14} rLDR R0,[R12,#4] |ADD R12,R12,R0 �LDR R11,[R12],#4 �OPT �adr(10,matrix%,2) �ADD R3,R10,#48 �#LDMIA R3,{R3-R5}:; Light vector �LDMIA R10!,{R0-R2} �MUL R6,R3,R0 �MLA R6,R4,R1,R6 �MLA R6,R5,R2,R6 �LDMIA R10!,{R0-R2} �MUL R7,R3,R0 �MLA R7,R4,R1,R7 �MLA R7,R5,R2,R7 �LDMIA R10!,{R0-R2} MUL R8,R3,R0 MLA R8,R4,R1,R8 MLA R8,R5,R2,R8 &MOV R3,R6,ASR#VC% 0MOV R4,R7,ASR#VC% :MOV R5,R8,ASR#VC% D.vectorloop% NLDMIA R12,{R0-R2} XMUL R6,R0,R3 bMLA R6,R1,R4,R6 lMLA R6,R2,R5,R6 vMOV R6,R6,ASL#CC%-VC%-VC% �STR R6,[R12,#12] �ADD R12,R12,#16 �SUBS R11,R11,#1 �BGT vectorloop% �LDMFD R13!,{R12,PC} �: �.linecalc% �STMFD R13!,{R12,R14} �LDR R0,[R12,#8] �ADD R12,R12,R0 �LDR R11,[R12],#4 �.lineloop% �LDMIA R12,{R2,R4} ADD R2,R12,R2 ADD R2,R2,#12 LDMIA R2,{R2-R3} ADD R4,R12,R4 *ADD R4,R4,#12 4LDMIA R4,{R4-R5} >SUB R4,R4,R2 HSUBS R5,R5,R3 RADDLT R2,R2,R4 \ADDLT R3,R3,R5 fRSBLT R4,R4,#0 pRSBLT R5,R5,#0 zADD R1,R3,#1<<SC%-1 �MOV R1,R1,ASR#SC% �ADD R0,R3,R5 �SUB R0,R0,#1<<SC%-1 �MOV R0,R0,ASR#SC% � CMP R0,R1 �BLT skipline% � MOV R6,#0 � MOV R7,#1 � CMP R4,#0 �RSBLT R4,R4,#0 �RSBLT R7,R7,#0 �]:�U%=12�1�-1:[OPT T% �CMP R5,R4,ASR#U% SUBLE R4,R4,R5,ASL#U% ADDLE R6,R6,R7,ASL#SC%+U% ]:�:[OPT T% $SUBS R4,R4,R5 .]:�U%=SC%�0�-1:[OPT T% 8SUBGE R4,R4,R5 BADDGE R6,R6,R7,ASL#U% LADDS R4,R5,R4,ASL#1 V]:�:[OPT T% `ADDGE R6,R6,#1 jRSB R3,R3,R1,ASL#SC% tADD R3,R3,#1<<SC%-1 ~MOV R3,R3,ASR#SC%-4 �MUL R4,R3,R6 �ADD R2,R2,R4,ASR#4 �.skipline% �ADD R3,R12,#8 �STMIA R3,{R0-R1,R2,R6} �ADD R12,R12,#24 �SUBS R11,R11,#1 �BGT lineloop% �LDMFD R13!,{R12,PC} �: �.polycalc% �STMFD R13!,{R12,R14} LDR R0,[R12,#12] ADD R12,R12,R0 LDR R11,[R12],#4 OPT �adr(10,plot%,2) (STR R11,[R10],#4 2.polyloop% <ADD R0,R12,#16 F4LDMIA R0,{R0,R2,R4}:; Points to interpolate from PADD R0,R12,R0 ZADD R0,R0,#12 dLDMIA R0,{R0-R1,R6} nADD R2,R12,R2 xADD R2,R2,#12 �LDMIA R2,{R2-R3,R7} �ADD R4,R12,R4 �ADD R4,R4,#12 �LDMIA R4,{R4-R5,R8} �ADR R9,temp% �;STMIA R9,{R0-R1,R6-R8}:; Origin, Nearness for later use �SUB R2,R2,R0:; DX1<<SC% �SUB R3,R3,R1 �SUB R4,R4,R0:; DX2<<SC% �SUB R5,R5,R1 �(; R6,R7 = Area = (DX1,DY1)x(DX2,DY2) �MOV R0,R2,ASR#16 �MOV R1,R5,ASR#16 MUL R7,R0,R1 SUB R0,R2,R0,ASL#16 MUL R8,R0,R1 "MOV R6,R8,ASL#16 ,ADD R7,R7,R8,ASR#16 6SUB R1,R5,R1,ASL#16 @MUL R8,R0,R1 JADDS R6,R6,R8 TADC R7,R7,#0 ^MOV R0,R2,ASR#16 hMUL R8,R0,R1 rADDS R6,R6,R8,ASL#16 |ADC R7,R7,R8,ASR#16 �MOV R0,R3,ASR#16 �MOV R1,R4,ASR#16 �MUL R8,R0,R1 �SUB R7,R7,R8 �SUB R0,R3,R0,ASL#16 �MUL R8,R0,R1 �SUBS R6,R6,R8,ASL#16 �SBC R7,R7,R8,ASR#16 �SUB R1,R4,R1,ASL#16 �MUL R8,R0,R1 �SUBS R6,R6,R8 �SBC R7,R7,#0 �MOV R0,R3,ASR#16 MUL R8,R0,R1 SUBS R6,R6,R8,ASL#16 SBC R7,R7,R8,ASR#16 &OPT �adr(0,test%,2) 0STMIA R0,{R2-R5,R6-R7} : MOV R8,#1 D CMP R7,#0 NCMPEQ R6,#0 XBGE dontflip% bRSB R8,R8,#0 lRSBS R6,R6,#0 vRSC R7,R7,#0 �.dontflip% �?; R5 = DF1/DX = (1,0)x(DX2,DY2) / (DX1,DY1)x(DX2,DY2) <<FC% � MOV R9,R5 �BL longdiv% � MOV R5,R9 �?; R4 = DF1/DY = (0,1)x(DX2,DY2) / (DX1,DY1)x(DX2,DY2) <<FC% �RSB R9,R4,#0 �BL longdiv% � MOV R4,R9 �?; R3 = DF2/DX = (DX1,DY1)x(1,0) / (DX1,DY1)x(DX2,DY2) <<FC% �RSB R9,R3,#0 �BL longdiv% � MOV R3,R9 ?; R2 = DF2/DY = (DX1,DY1)x(0,1) / (DX1,DY1)x(DX2,DY2) <<FC% MOV R9,R2 BL longdiv% MOV R2,R9 *OPT �adr(0,test%+32,2) 4STMIA R0,{R2-R5,R6-R7,R8} >%; Calculation of nearness -dx -dy HADR R9,temp%+8 RLDMIA R9,{R6-R8} \BL mapq% fADD R9,R10,#16 pSTMIA R9,{R6-R8} z; Type checking goes here �ADD R9,R12,#28 �LDMIA R9,{R6-R8} �ADD R6,R12,R6 �LDR R6,[R6,#12] �ADD R7,R12,R7 �LDR R7,[R7,#12] �ADD R8,R12,R8 �LDR R8,[R8,#12] �BL mapq% �"LDR R0,[R12,#64]:; Colour base �LDR R1,[R0],#4 �STR R0,[R10,#32] �MUL R6,R1,R6 MUL R7,R1,R7 MUL R8,R1,R8 ADD R9,R10,#36 $STMIA R9,{R6-R8} .%LDR R7,[R12,#4]:; Number of lines 8STR R7,[R10,#28] B,; Copy lines and work out top and bottom LADD R9,R12,#80 VADD R8,R10,#96 `LDR R0,[R9],#4 jADD R0,R12,R0 tADD R0,R0,#8 ~LDMIA R0,{R0-R1,R4-R5} �STMIA R8!,{R0-R1,R4-R5} �SUB R7,R7,#1 �.lineloop% �LDR R2,[R9],#4 �ADD R2,R12,R2 �ADD R2,R2,#8 �LDMIA R2,{R2-R5} �STMIA R8!,{R2-R5} � CMP R2,R0 �MOVGT R0,R2 � CMP R3,R1 �MOVLT R1,R3 SUBS R7,R7,#1 BGT lineloop% -SUB R2,R8,R10:; Offset to next plot entry LDR R3,[R12,#12]:; Fill type (5STMIA R10,{R0-R1,R2,R3}:; Top, Bottom, Next, Type 2ADD R10,R10,R2 <; Update R12 FLDR R0,[R12] PADD R12,R12,R0 ZSUBS R11,R11,#1 dBGT polyloop% nLDMFD R13!,{R12,PC} x: � .temp% �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �EQUD 0:EQUD 0:EQUD 0:EQUD 0 �: �!; Expects temp% to have X1,Y1 �.; Expects R5,R4,R3,R2 to be mapping matrix �%; Expects R6,R7,R8 to be Q1,Q2,Q3 �; Answer is in R6,R7,R8 �; Corrupts R0,R1,R9 � .mapq% �STMFD R13!,{R14} �MOV R6,R6,ASR#SC%-4 �MOV R7,R7,ASR#SC%-4 MOV R8,R8,ASR#SC%-4 SUB R7,R7,R6 SUB R8,R8,R6 "MOV R6,R6,ASL#SC%-4 ,%; DQ/DX = DQ1*DF1/DX + DQ2*DF2/DX 6MOV R9,R5,ASR#16 @MUL R14,R9,R7 J!MOV R0,R14,ASL#(SC%-4)-FC%+16 TSUB R9,R5,R9,ASL#16 ^MUL R14,R9,R7 h!ADD R0,R0,R14,ASR#FC%-(SC%-4) rMOV R9,R3,ASR#16 |MUL R14,R9,R8 �$ADD R0,R0,R14,ASL#(SC%-4)-FC%+16 �SUB R9,R3,R9,ASL#16 �MUL R14,R9,R8 �!ADD R0,R0,R14,ASR#FC%-(SC%-4) �%; DQ/DY = DQ1*DF1/DY + DQ2*DF2/DY �MOV R9,R4,ASR#16 �MUL R14,R9,R7 �!MOV R1,R14,ASL#(SC%-4)-FC%+16 �SUB R9,R4,R9,ASL#16 �MUL R14,R9,R7 �!ADD R1,R1,R14,ASR#FC%-(SC%-4) �MOV R9,R2,ASR#16 �MUL R14,R9,R8 $ADD R1,R1,R14,ASL#(SC%-4)-FC%+16 SUB R9,R2,R9,ASL#16 MUL R14,R9,R8 &!ADD R1,R1,R14,ASR#FC%-(SC%-4) 0MOV R7,R0:; DZ/DX<<SC% :MOV R8,R1:; DZ/DY<<SC% D ; Q0 = Q - X*DQ/DX - Y*DQ/DY NADR R9,temp% XLDMIA R9,{R0-R1} bMOV R9,R0,ASR#SC% lMUL R14,R9,R7 vSUB R6,R6,R14 �SUB R9,R0,R9,ASL#SC% �MOV R14,R7,ASR#16 �MUL R14,R9,R14 �SUB R6,R6,R14,ASL#16-SC% �MOV R9,R1,ASR#SC% �MUL R14,R9,R8 �SUB R6,R6,R14 �SUB R9,R1,R9,ASL#SC% �MOV R14,R8,ASR#16 �MUL R14,R9,R14 �SUB R6,R6,R14,ASL#16-SC% �ADD R6,R6,R7,ASR#1 �ADD R6,R6,R8,ASR#1 LDMFD R13!,{PC} : $; Expects R9 to be numerator>>32 <; Expects R6,R7 to be �(denominator), and R8 to be its � *; Answer is in R9 4; R0,R1 corrupted > .longdiv% HSTMFD R13!,{R8,R14} R CMP R9,#0 \RSBLT R8,R8,#0 fRSBLT R9,R9,#0 pMOV R0,R9,ASL#(SC%-4) zMOV R1,R9,ASR#32-(SC%-4) � MOV R9,#0 �]:�U%=4�-FC%�-1:[OPT T% � CMP R1,R7 �CMPEQ R0,R6 � BLO P%+16 �SUBS R0,R0,R6 �SBC R1,R1,R7 �ADD R9,R9,R8,ASL#U%+FC% �'; This is refered to above as P%+16 �ADDS R0,R0,R0 �ADC R1,R1,R1 �]:�:[OPT T% � CMP R1,R7 CMPEQ R0,R6 ADDHS R9,R9,R8 LDMFD R13!,{R8,PC} $] .� �
00000000 0d 00 0a 06 eb 39 0d 00 14 29 de 73 70 61 63 65 |.....9...).space| 00000010 25 26 39 30 30 30 30 3a 65 6e 64 73 70 61 63 65 |%&90000:endspace| 00000020 25 3d 73 70 61 63 65 25 2b 26 39 30 30 30 30 0d |%=space%+&90000.| 00000030 00 1e 12 f1 22 54 68 69 6e 6b 69 6e 67 2e 2e 2e |...."Thinking...| 00000040 22 0d 00 1f 41 f1 27 27 22 54 68 69 73 20 70 72 |"...A.''"This pr| 00000050 6f 67 72 61 6d 20 72 65 71 75 69 72 65 73 20 6f |ogram requires o| 00000060 76 65 72 20 31 30 34 34 6b 20 6f 66 20 73 79 73 |ver 1044k of sys| 00000070 74 65 6d 20 73 70 72 69 74 65 20 6d 65 6d 6f 72 |tem sprite memor| 00000080 79 22 0d 00 20 17 c8 99 20 22 58 4f 53 5f 43 4c |y".. ... "XOS_CL| 00000090 49 22 2c 22 53 4e 65 77 22 0d 00 28 0d f2 61 73 |I","SNew"..(..as| 000000a0 73 65 6d 62 6c 65 0d 00 32 0f f2 73 65 74 75 70 |semble..2..setup| 000000b0 73 63 65 6e 65 0d 00 3c 11 f2 73 65 74 75 70 63 |scene..<..setupc| 000000c0 6f 6c 6f 75 72 73 0d 00 46 10 62 61 6e 6b 25 3d |olours..F.bank%=| 000000d0 31 3a 41 25 3d 30 0d 00 50 0c e3 41 25 3d 30 b8 |1:A%=0..P..A%=0.| 000000e0 33 31 0d 00 5a 37 41 3d 32 2a af 2a 41 25 2f 36 |31..Z7A=2*.*A%/6| 000000f0 34 3a 43 25 3d 9b 28 41 29 2a 28 31 3c 3c 56 43 |4:C%=.(A)*(1<<VC| 00000100 25 29 2a 2e 39 3a 53 25 3d b5 28 41 29 2a 28 31 |%)*.9:S%=.(A)*(1| 00000110 3c 3c 56 43 25 29 2a 2e 39 0d 00 64 3a 6d 61 74 |<<VC%)*.9..d:mat| 00000120 72 69 78 25 21 30 3d 43 25 3a 6d 61 74 72 69 78 |rix%!0=C%:matrix| 00000130 25 21 38 3d 53 25 3a 6d 61 74 72 69 78 25 21 32 |%!8=S%:matrix%!2| 00000140 34 3d 2d 53 25 3a 6d 61 74 72 69 78 25 21 33 32 |4=-S%:matrix%!32| 00000150 3d 43 25 0d 00 6e 1a d6 70 72 6f 6a 65 63 74 25 |=C%..n..project%| 00000160 3a db 3a d6 74 6f 73 63 72 65 65 6e 25 0d 00 78 |:.:.toscreen%..x| 00000170 24 ec 31 32 38 2c 30 3a ec 42 59 31 30 32 33 2c |$.128,0:.BY1023,| 00000180 31 30 32 33 3a ef 32 33 2c 32 37 2c 31 2c 41 25 |1023:.23,27,1,A%| 00000190 7c 0d 00 82 05 ed 0d 00 8c 2e f5 3a e3 41 25 3d ||..........:.A%=| 000001a0 30 b8 33 31 3a ef 32 33 2c 32 37 2c 30 2c 41 25 |0.31:.23,27,0,A%| 000001b0 7c 3a c8 96 3a f0 26 45 44 2c 31 32 38 2c 30 3a ||:..:.&ED,128,0:| 000001c0 ed 3a fd 30 0d 00 96 05 e0 0d 00 a0 05 3a 0d 00 |.:.0.........:..| 000001d0 aa 05 3a 0d 00 b4 0f dd f2 74 65 73 74 6c 69 6e |..:......testlin| 000001e0 65 73 0d 00 be 18 55 25 3d 73 63 65 6e 65 25 2b |es....U%=scene%+| 000001f0 73 63 65 6e 65 25 21 38 2b 34 0d 00 c8 22 e3 54 |scene%!8+4...".T| 00000200 25 3d 31 b8 55 25 21 2d 34 3a 58 25 3d 55 25 21 |%=1.U%!-4:X%=U%!| 00000210 31 36 3a 44 58 25 3d 55 25 21 32 30 0d 00 d2 47 |16:DX%=U%!20...G| 00000220 e7 55 25 21 31 32 3c 3d 55 25 21 38 8c e3 59 25 |.U%!12<=U%!8..Y%| 00000230 3d 55 25 21 31 32 b8 55 25 21 38 3a c8 92 36 34 |=U%!12.U%!8:..64| 00000240 30 2b 28 58 25 3e 3e 53 43 25 2d 32 29 2c 35 31 |0+(X%>>SC%-2),51| 00000250 32 2b 28 59 25 3c 3c 32 29 3a 58 25 2b 3d 44 58 |2+(Y%<<2):X%+=DX| 00000260 25 3a ed 0d 00 dc 0c 55 25 2b 3d 32 34 3a ed 0d |%:.....U%+=24:..| 00000270 00 e6 05 e1 0d 00 f0 05 3a 0d 00 fa 0e dd f2 74 |........:......t| 00000280 65 73 74 63 61 6c 63 0d 01 04 27 f4 4f 53 43 4c |estcalc...'.OSCL| 00000290 49 28 22 4d 45 4d 4f 52 59 20 22 2b 53 54 52 24 |I("MEMORY "+STR$| 000002a0 7e 74 65 73 74 25 2b 22 20 2b 33 30 22 29 0d 01 |~test%+" +30")..| 000002b0 0e 2b 58 31 3d 74 65 73 74 25 21 30 2f 28 31 3c |.+X1=test%!0/(1<| 000002c0 3c 53 43 25 29 3a 59 31 3d 74 65 73 74 25 21 34 |<SC%):Y1=test%!4| 000002d0 2f 28 31 3c 3c 53 43 25 29 0d 01 18 2c 58 32 3d |/(1<<SC%)...,X2=| 000002e0 74 65 73 74 25 21 38 2f 28 31 3c 3c 53 43 25 29 |test%!8/(1<<SC%)| 000002f0 3a 59 32 3d 74 65 73 74 25 21 31 32 2f 28 31 3c |:Y2=test%!12/(1<| 00000300 3c 53 43 25 29 0d 01 22 11 41 3d 58 31 2a 59 32 |<SC%)..".A=X1*Y2| 00000310 2d 59 31 2a 58 32 0d 01 2c 41 f1 27 41 3b 22 20 |-Y1*X2..,A.'A;" | 00000320 3d 20 22 3b 28 74 65 73 74 25 21 31 36 2b 32 5e |= ";(test%!16+2^| 00000330 33 32 2a 28 74 65 73 74 25 21 32 30 2d 28 74 65 |32*(test%!20-(te| 00000340 73 74 25 21 31 36 3c 30 29 29 29 2f 32 5e 28 53 |st%!16<0)))/2^(S| 00000350 43 25 2b 53 43 25 29 0d 01 36 22 f1 27 59 32 2f |C%+SC%)..6".'Y2/| 00000360 41 3b 22 20 3d 20 22 3b 74 65 73 74 25 21 34 34 |A;" = ";test%!44| 00000370 2f 28 31 3c 3c 46 43 25 29 0d 01 40 22 f1 2d 58 |/(1<<FC%)..@".-X| 00000380 32 2f 41 3b 22 20 3d 20 22 3b 74 65 73 74 25 21 |2/A;" = ";test%!| 00000390 34 30 2f 28 31 3c 3c 46 43 25 29 0d 01 4a 22 f1 |40/(1<<FC%)..J".| 000003a0 2d 59 31 2f 41 3b 22 20 3d 20 22 3b 74 65 73 74 |-Y1/A;" = ";test| 000003b0 25 21 33 36 2f 28 31 3c 3c 46 43 25 29 0d 01 54 |%!36/(1<<FC%)..T| 000003c0 21 f1 58 31 2f 41 3b 22 20 3d 20 22 3b 74 65 73 |!.X1/A;" = ";tes| 000003d0 74 25 21 33 32 2f 28 31 3c 3c 46 43 25 29 0d 01 |t%!32/(1<<FC%)..| 000003e0 5e 50 f1 27 41 3b 22 20 3d 20 22 3b 28 74 65 73 |^P.'A;" = ";(tes| 000003f0 74 25 21 34 38 2b 32 5e 33 32 2a 28 74 65 73 74 |t%!48+2^32*(test| 00000400 25 21 35 32 2d 28 74 65 73 74 25 21 34 38 3c 30 |%!52-(test%!48<0| 00000410 29 29 29 2f 32 5e 28 53 43 25 2b 53 43 25 29 3b |)))/2^(SC%+SC%);| 00000420 22 20 2a 20 22 3b 74 65 73 74 25 21 35 36 0d 01 |" * ";test%!56..| 00000430 68 05 e1 0d 01 72 05 3a 0d 01 7c 12 dd f2 73 65 |h....r.:..|...se| 00000440 74 75 70 63 6f 6c 6f 75 72 73 0d 01 86 31 fb 30 |tupcolours...1.0| 00000450 2c 36 34 2c 36 34 2c 31 32 38 3a e3 54 25 3d 31 |,64,64,128:.T%=1| 00000460 b8 31 35 3a fb 54 25 2c 54 25 3c 3c 33 2c 54 25 |.15:.T%,T%<<3,T%| 00000470 3c 3c 34 2c 54 25 3c 3c 33 3a ed 0d 01 90 0b 55 |<<4,T%<<3:.....U| 00000480 25 3d 63 6f 6c 25 0d 01 9a 10 21 55 25 3d 31 34 |%=col%....!U%=14| 00000490 3a 55 25 2b 3d 34 0d 01 a4 26 e3 54 25 3d 30 b8 |:U%+=4...&.T%=0.| 000004a0 31 34 3a e3 53 25 3d 30 b8 33 3a 3f 55 25 3d 54 |14:.S%=0.3:?U%=T| 000004b0 25 2b 31 3a 55 25 2b 3d 31 3a ed 2c 0d 01 ae 05 |%+1:U%+=1:.,....| 000004c0 e1 0d 01 b8 05 3a 0d 01 c2 10 dd f2 73 65 74 75 |.....:......setu| 000004d0 70 73 63 65 6e 65 0d 01 cc 11 4d 41 25 3d 32 30 |pscene....MA%=20| 000004e0 3a 4d 42 25 3d 31 32 0d 01 d6 10 55 25 3d 73 63 |:MB%=12....U%=sc| 000004f0 65 6e 65 25 2b 31 36 0d 01 e0 0c f4 20 50 6f 69 |ene%+16..... Poi| 00000500 6e 74 73 0d 01 ea 28 73 63 65 6e 65 25 21 30 3d |nts...(scene%!0=| 00000510 55 25 2d 73 63 65 6e 65 25 3a 21 55 25 3d 4d 41 |U%-scene%:!U%=MA| 00000520 25 2a 4d 42 25 3a 55 25 2b 3d 34 0d 01 f4 2c e3 |%*MB%:U%+=4...,.| 00000530 41 25 3d 30 b8 4d 41 25 2d 31 3a 41 3d 32 2a af |A%=0.MA%-1:A=2*.| 00000540 2a 41 25 2f 4d 41 25 3a 43 41 3d 9b 28 41 29 3a |*A%/MA%:CA=.(A):| 00000550 53 41 3d b5 28 41 29 0d 01 fe 29 e3 42 25 3d 30 |SA=.(A)...).B%=0| 00000560 b8 4d 42 25 2d 31 3a 42 3d 32 2a af 2a 42 25 2f |.MB%-1:B=2*.*B%/| 00000570 4d 42 25 3a 52 3d 38 30 2b 34 30 2a 9b 28 42 29 |MB%:R=80+40*.(B)| 00000580 0d 02 08 24 55 25 21 30 3d 52 2a 43 41 3a 55 25 |...$U%!0=R*CA:U%| 00000590 21 34 3d 52 2a 53 41 3a 55 25 21 38 3d 34 30 2a |!4=R*SA:U%!8=40*| 000005a0 b5 28 42 29 0d 02 12 0d 55 25 2b 3d 32 34 3a ed |.(B)....U%+=24:.| 000005b0 2c 0d 02 1c 13 f4 20 4c 69 67 68 74 20 76 65 63 |,..... Light vec| 000005c0 74 6f 72 73 0d 02 26 28 73 63 65 6e 65 25 21 34 |tors..&(scene%!4| 000005d0 3d 55 25 2d 73 63 65 6e 65 25 3a 21 55 25 3d 4d |=U%-scene%:!U%=M| 000005e0 41 25 2a 4d 42 25 3a 55 25 2b 3d 34 0d 02 30 2c |A%*MB%:U%+=4..0,| 000005f0 e3 41 25 3d 30 b8 4d 41 25 2d 31 3a 41 3d 32 2a |.A%=0.MA%-1:A=2*| 00000600 af 2a 41 25 2f 4d 41 25 3a 43 41 3d 9b 28 41 29 |.*A%/MA%:CA=.(A)| 00000610 3a 53 41 3d b5 28 41 29 0d 02 3a 2c e3 42 25 3d |:SA=.(A)..:,.B%=| 00000620 30 b8 4d 42 25 2d 31 3a 42 3d 32 2a af 2a 42 25 |0.MB%-1:B=2*.*B%| 00000630 2f 4d 42 25 3a 52 3d 9b 28 42 29 2a 28 31 3c 3c |/MB%:R=.(B)*(1<<| 00000640 56 43 25 29 0d 02 44 2a 55 25 21 30 3d 43 41 2a |VC%)..D*U%!0=CA*| 00000650 52 3a 55 25 21 34 3d 53 41 2a 52 3a 55 25 21 38 |R:U%!4=SA*R:U%!8| 00000660 3d b5 28 42 29 2a 28 31 3c 3c 56 43 25 29 0d 02 |=.(B)*(1<<VC%)..| 00000670 4e 0d 55 25 2b 3d 31 36 3a ed 2c 0d 02 58 0b f4 |N.U%+=16:.,..X..| 00000680 20 4c 69 6e 65 73 0d 02 62 2a 73 63 65 6e 65 25 | Lines..b*scene%| 00000690 21 38 3d 55 25 2d 73 63 65 6e 65 25 3a 21 55 25 |!8=U%-scene%:!U%| 000006a0 3d 4d 41 25 2a 4d 42 25 2a 33 3a 55 25 2b 3d 34 |=MA%*MB%*3:U%+=4| 000006b0 0d 02 6c 18 56 25 3d 73 63 65 6e 65 25 2b 73 63 |..l.V%=scene%+sc| 000006c0 65 6e 65 25 21 30 2b 34 0d 02 76 28 e3 41 25 3d |ene%!0+4..v(.A%=| 000006d0 30 b8 4d 41 25 2d 31 3a e7 41 25 3c 4d 41 25 2d |0.MA%-1:.A%<MA%-| 000006e0 31 8c 41 41 25 3d 41 25 2b 31 8b 41 41 25 3d 30 |1.AA%=A%+1.AA%=0| 000006f0 0d 02 80 28 e3 42 25 3d 30 b8 4d 42 25 2d 31 3a |...(.B%=0.MB%-1:| 00000700 e7 42 25 3c 4d 42 25 2d 31 8c 42 42 25 3d 42 25 |.B%<MB%-1.BB%=B%| 00000710 2b 31 8b 42 42 25 3d 30 0d 02 8a 3f 55 25 21 30 |+1.BB%=0...?U%!0| 00000720 3d 56 25 2b 32 34 2a 28 42 25 2b 4d 42 25 2a 41 |=V%+24*(B%+MB%*A| 00000730 25 29 2d 55 25 3a 55 25 21 34 3d 56 25 2b 32 34 |%)-U%:U%!4=V%+24| 00000740 2a 28 42 25 2b 4d 42 25 2a 41 41 25 29 2d 55 25 |*(B%+MB%*AA%)-U%| 00000750 3a 55 25 2b 3d 32 34 0d 02 94 3f 55 25 21 30 3d |:U%+=24...?U%!0=| 00000760 56 25 2b 32 34 2a 28 42 25 2b 4d 42 25 2a 41 25 |V%+24*(B%+MB%*A%| 00000770 29 2d 55 25 3a 55 25 21 34 3d 56 25 2b 32 34 2a |)-U%:U%!4=V%+24*| 00000780 28 42 42 25 2b 4d 42 25 2a 41 25 29 2d 55 25 3a |(BB%+MB%*A%)-U%:| 00000790 55 25 2b 3d 32 34 0d 02 9e 40 55 25 21 30 3d 56 |U%+=24...@U%!0=V| 000007a0 25 2b 32 34 2a 28 42 25 2b 4d 42 25 2a 41 25 29 |%+24*(B%+MB%*A%)| 000007b0 2d 55 25 3a 55 25 21 34 3d 56 25 2b 32 34 2a 28 |-U%:U%!4=V%+24*(| 000007c0 42 42 25 2b 4d 42 25 2a 41 41 25 29 2d 55 25 3a |BB%+MB%*AA%)-U%:| 000007d0 55 25 2b 3d 32 34 0d 02 a8 06 ed 2c 0d 02 b2 0e |U%+=24.....,....| 000007e0 f4 20 50 6f 6c 79 67 6f 6e 73 0d 02 bc 2b 73 63 |. Polygons...+sc| 000007f0 65 6e 65 25 21 31 32 3d 55 25 2d 73 63 65 6e 65 |ene%!12=U%-scene| 00000800 25 3a 21 55 25 3d 4d 41 25 2a 4d 42 25 2a 32 3a |%:!U%=MA%*MB%*2:| 00000810 55 25 2b 3d 34 0d 02 c6 18 56 25 3d 73 63 65 6e |U%+=4....V%=scen| 00000820 65 25 2b 73 63 65 6e 65 25 21 30 2b 34 0d 02 d0 |e%+scene%!0+4...| 00000830 18 57 25 3d 73 63 65 6e 65 25 2b 73 63 65 6e 65 |.W%=scene%+scene| 00000840 25 21 34 2b 34 0d 02 da 18 58 25 3d 73 63 65 6e |%!4+4....X%=scen| 00000850 65 25 2b 73 63 65 6e 65 25 21 38 2b 34 0d 02 e4 |e%+scene%!8+4...| 00000860 28 e3 41 25 3d 30 b8 4d 41 25 2d 31 3a e7 41 25 |(.A%=0.MA%-1:.A%| 00000870 3c 4d 41 25 2d 31 8c 41 41 25 3d 41 25 2b 31 8b |<MA%-1.AA%=A%+1.| 00000880 41 41 25 3d 30 0d 02 ee 28 e3 42 25 3d 30 b8 4d |AA%=0...(.B%=0.M| 00000890 42 25 2d 31 3a e7 42 25 3c 4d 42 25 2d 31 8c 42 |B%-1:.B%<MB%-1.B| 000008a0 42 25 3d 42 25 2b 31 8b 42 42 25 3d 30 0d 02 f8 |B%=B%+1.BB%=0...| 000008b0 7f f2 74 72 69 61 6e 67 6c 65 28 41 25 2a 4d 42 |..triangle(A%*MB| 000008c0 25 2b 42 25 2c 41 41 25 2a 4d 42 25 2b 42 25 2c |%+B%,AA%*MB%+B%,| 000008d0 41 41 25 2a 4d 42 25 2b 42 42 25 2c 41 25 2a 4d |AA%*MB%+BB%,A%*M| 000008e0 42 25 2b 42 25 2c 41 41 25 2a 4d 42 25 2b 42 25 |B%+B%,AA%*MB%+B%| 000008f0 2c 41 41 25 2a 4d 42 25 2b 42 42 25 2c 33 2a 28 |,AA%*MB%+BB%,3*(| 00000900 41 25 2a 4d 42 25 2b 42 25 29 2c 33 2a 28 41 25 |A%*MB%+B%),3*(A%| 00000910 2a 4d 42 25 2b 42 25 29 2b 32 2c 33 2a 28 41 41 |*MB%+B%)+2,3*(AA| 00000920 25 2a 4d 42 25 2b 42 25 29 2b 31 29 0d 03 02 7f |%*MB%+B%)+1)....| 00000930 f2 74 72 69 61 6e 67 6c 65 28 41 25 2a 4d 42 25 |.triangle(A%*MB%| 00000940 2b 42 25 2c 41 25 2a 4d 42 25 2b 42 42 25 2c 41 |+B%,A%*MB%+BB%,A| 00000950 41 25 2a 4d 42 25 2b 42 42 25 2c 41 25 2a 4d 42 |A%*MB%+BB%,A%*MB| 00000960 25 2b 42 25 2c 41 25 2a 4d 42 25 2b 42 42 25 2c |%+B%,A%*MB%+BB%,| 00000970 41 41 25 2a 4d 42 25 2b 42 42 25 2c 33 2a 28 41 |AA%*MB%+BB%,3*(A| 00000980 25 2a 4d 42 25 2b 42 25 29 2b 31 2c 33 2a 28 41 |%*MB%+B%)+1,3*(A| 00000990 25 2a 4d 42 25 2b 42 25 29 2b 32 2c 33 2a 28 41 |%*MB%+B%)+2,3*(A| 000009a0 25 2a 4d 42 25 2b 42 42 25 29 29 0d 03 0c 06 ed |%*MB%+BB%)).....| 000009b0 2c 0d 03 16 2f e7 55 25 3e 65 6e 64 73 63 65 6e |,.../.U%>endscen| 000009c0 65 25 8c 85 32 35 35 2c 22 53 63 65 6e 65 20 69 |e%..255,"Scene i| 000009d0 73 6e 27 74 20 62 69 67 20 65 6e 6f 75 67 68 22 |sn't big enough"| 000009e0 0d 03 20 05 e1 0d 03 2a 05 3a 0d 03 34 33 dd f2 |.. ....*.:..43..| 000009f0 74 72 69 61 6e 67 6c 65 28 50 31 25 2c 50 32 25 |triangle(P1%,P2%| 00000a00 2c 50 33 25 2c 56 31 25 2c 56 32 25 2c 56 33 25 |,P3%,V1%,V2%,V3%| 00000a10 2c 4c 31 25 2c 4c 32 25 2c 4c 33 25 29 0d 03 3e |,L1%,L2%,L3%)..>| 00000a20 12 55 25 21 30 3d 39 32 3a 55 25 21 34 3d 33 0d |.U%!0=92:U%!4=3.| 00000a30 03 48 14 55 25 21 31 32 3d 31 3a f4 20 47 6f 75 |.H.U%!12=1:. Gou| 00000a40 72 61 64 0d 03 52 3c 55 25 21 31 36 3d 56 25 2b |rad..R<U%!16=V%+| 00000a50 32 34 2a 50 31 25 2d 55 25 3a 55 25 21 32 30 3d |24*P1%-U%:U%!20=| 00000a60 56 25 2b 32 34 2a 50 32 25 2d 55 25 3a 55 25 21 |V%+24*P2%-U%:U%!| 00000a70 32 34 3d 56 25 2b 32 34 2a 50 33 25 2d 55 25 0d |24=V%+24*P3%-U%.| 00000a80 03 5c 3c 55 25 21 32 38 3d 57 25 2b 31 36 2a 56 |.\<U%!28=W%+16*V| 00000a90 31 25 2d 55 25 3a 55 25 21 33 32 3d 57 25 2b 31 |1%-U%:U%!32=W%+1| 00000aa0 36 2a 56 32 25 2d 55 25 3a 55 25 21 33 36 3d 57 |6*V2%-U%:U%!36=W| 00000ab0 25 2b 31 36 2a 56 33 25 2d 55 25 0d 03 66 0e 55 |%+16*V3%-U%..f.U| 00000ac0 25 21 36 34 3d 63 6f 6c 25 0d 03 70 3c 55 25 21 |%!64=col%..p<U%!| 00000ad0 38 30 3d 58 25 2b 32 34 2a 4c 31 25 2d 55 25 3a |80=X%+24*L1%-U%:| 00000ae0 55 25 21 38 34 3d 58 25 2b 32 34 2a 4c 32 25 2d |U%!84=X%+24*L2%-| 00000af0 55 25 3a 55 25 21 38 38 3d 58 25 2b 32 34 2a 4c |U%:U%!88=X%+24*L| 00000b00 33 25 2d 55 25 0d 03 7a 0a 55 25 2b 3d 39 32 0d |3%-U%..z.U%+=92.| 00000b10 03 84 05 e1 0d 03 8e 05 3a 0d 03 98 13 dd a4 61 |........:......a| 00000b20 64 72 28 52 25 2c 41 25 2c 49 25 29 0d 03 a2 2c |dr(R%,A%,I%)...,| 00000b30 e7 28 50 25 80 33 29 3c 3e 30 8c f1 22 43 6f 64 |.(P%.3)<>0.."Cod| 00000b40 65 20 69 73 6e 27 74 20 77 6f 72 64 20 61 6c 69 |e isn't word ali| 00000b50 67 6e 65 64 21 22 3a e0 0d 03 ac 28 ea 4e 25 2c |gned!":....(.N%,| 00000b60 4f 25 2c 48 25 2c 55 25 3a 48 25 3d 41 25 2d 28 |O%,H%,U%:H%=A%-(| 00000b70 50 25 2b 38 29 3a 4e 25 3d 30 3a 4f 25 3d 31 35 |P%+8):N%=0:O%=15| 00000b80 0d 03 b6 13 e3 55 25 3d 31 b8 49 25 3a e7 48 25 |.....U%=1.I%:.H%| 00000b90 3d 30 8c 0d 03 c0 17 5b 4f 50 54 20 54 25 3a 4d |=0.....[OPT T%:M| 00000ba0 4f 56 20 52 25 2c 4f 25 3a 5d 0d 03 ca 20 cc c8 |OV R%,O%:]... ..| 00000bb0 95 28 48 25 80 33 29 3d 30 3a 48 25 3d 48 25 3e |.(H%.3)=0:H%=H%>| 00000bc0 3e 32 3a 4e 25 2b 3d 32 3a ce 0d 03 d4 10 e7 28 |>2:N%+=2:......(| 00000bd0 48 25 80 32 35 36 29 3d 30 8c 0d 03 de 30 5b 4f |H%.256)=0....0[O| 00000be0 50 54 20 54 25 3a 41 44 44 20 52 25 2c 4f 25 2c |PT T%:ADD R%,O%,| 00000bf0 23 28 48 25 80 32 35 35 29 3c 3c 4e 25 3a 5d 3a |#(H%.255)<<N%:]:| 00000c00 48 25 2d 3d 48 25 80 32 35 35 0d 03 e8 39 cc 5b |H%-=H%.255...9.[| 00000c10 4f 50 54 20 54 25 3a 53 55 42 20 52 25 2c 4f 25 |OPT T%:SUB R%,O%| 00000c20 2c 23 28 32 35 36 2d 48 25 80 32 35 35 29 3c 3c |,#(256-H%.255)<<| 00000c30 4e 25 3a 5d 3a 48 25 2b 3d 32 35 36 2d 48 25 80 |N%:]:H%+=256-H%.| 00000c40 32 35 35 0d 03 f2 05 cd 0d 03 fc 0d cd 3a 4f 25 |255..........:O%| 00000c50 3d 52 25 3a ed 0d 04 06 4a e7 48 25 3c 3e 30 8c |=R%:....J.H%<>0.| 00000c60 f1 22 43 6f 75 6c 64 20 6e 6f 74 20 41 44 52 20 |."Could not ADR | 00000c70 74 6f 20 22 3b 41 25 3b 22 20 69 6e 20 22 3b 49 |to ";A%;" in ";I| 00000c80 25 3b 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 |%;" instructions| 00000c90 20 28 52 25 3d 22 3b 52 25 3b 22 29 22 3a e0 0d | (R%=";R%;")":..| 00000ca0 04 10 07 3d 54 25 0d 04 1a 05 3a 0d 04 24 0e dd |...=T%....:..$..| 00000cb0 f2 61 73 73 65 6d 62 6c 65 0d 04 2e 22 53 43 25 |.assemble..."SC%| 00000cc0 3d 31 36 3a 43 43 25 3d 53 43 25 2b 38 3a 56 43 |=16:CC%=SC%+8:VC| 00000cd0 25 3d 31 32 3a 46 43 25 3d 32 36 0d 04 38 0e de |%=12:FC%=26..8..| 00000ce0 67 73 6b 69 70 25 28 37 29 0d 04 42 2e 63 6f 64 |gskip%(7)..B.cod| 00000cf0 65 25 3d 73 70 61 63 65 25 3a 73 70 61 63 65 25 |e%=space%:space%| 00000d00 2b 3d 26 32 30 30 30 3a 65 6e 64 63 6f 64 65 25 |+=&2000:endcode%| 00000d10 3d 73 70 61 63 65 25 0d 04 4c 1b 74 65 73 74 25 |=space%..L.test%| 00000d20 3d 73 70 61 63 65 25 3a 73 70 61 63 65 25 2b 3d |=space%:space%+=| 00000d30 36 34 0d 04 56 20 7a 62 75 66 66 25 3d 73 70 61 |64..V zbuff%=spa| 00000d40 63 65 25 3a 73 70 61 63 65 25 2b 3d 34 30 39 36 |ce%:space%+=4096| 00000d50 2a 34 0d 04 60 1f 69 62 75 66 66 25 3d 73 70 61 |*4..`.ibuff%=spa| 00000d60 63 65 25 3a 73 70 61 63 65 25 2b 3d 31 32 38 2a |ce%:space%+=128*| 00000d70 34 0d 04 6a 1f 70 6c 6f 74 25 3d 73 70 61 63 65 |4..j.plot%=space| 00000d80 25 3a 73 70 61 63 65 25 2b 3d 26 34 30 30 30 30 |%:space%+=&40000| 00000d90 0d 04 74 31 73 63 65 6e 65 25 3d 73 70 61 63 65 |..t1scene%=space| 00000da0 25 3a 73 70 61 63 65 25 2b 3d 26 34 30 30 30 30 |%:space%+=&40000| 00000db0 3a 65 6e 64 73 63 65 6e 65 25 3d 73 70 61 63 65 |:endscene%=space| 00000dc0 25 0d 04 7e 31 e7 73 70 61 63 65 25 3e 65 6e 64 |%..~1.space%>end| 00000dd0 73 70 61 63 65 25 8c f1 22 53 70 61 63 65 20 69 |space%.."Space i| 00000de0 73 6e 27 74 20 62 69 67 20 65 6e 6f 75 67 68 22 |sn't big enough"| 00000df0 3a e0 0d 04 88 26 e3 54 25 3d 31 b8 31 3a 63 6f |:....&.T%=1.1:co| 00000e00 6c 25 3d 73 70 61 63 65 25 3a 73 70 61 63 65 25 |l%=space%:space%| 00000e10 2b 3d 31 35 2a 34 3a ed 0d 04 92 16 e3 54 25 3d |+=15*4:......T%=| 00000e20 30 b8 32 88 32 3a 50 25 3d 63 6f 64 65 25 0d 04 |0.2.2:P%=code%..| 00000e30 9c 11 f2 74 6f 73 63 72 65 65 6e 63 6f 64 65 0d |...toscreencode.| 00000e40 04 a6 10 f2 70 72 6f 6a 65 63 74 63 6f 64 65 0d |....projectcode.| 00000e50 04 b0 2d e7 50 25 3e 65 6e 64 63 6f 64 65 25 8c |..-.P%>endcode%.| 00000e60 85 32 35 35 2c 22 43 6f 64 65 20 69 73 6e 27 74 |.255,"Code isn't| 00000e70 20 62 69 67 20 65 6e 6f 75 67 68 22 0d 04 ba 05 | big enough"....| 00000e80 ed 0d 04 c4 05 e1 0d 04 ce 05 3a 0d 04 d8 12 dd |..........:.....| 00000e90 f2 74 6f 73 63 72 65 65 6e 63 6f 64 65 0d 04 e2 |.toscreencode...| 00000ea0 0b 5b 4f 50 54 20 54 25 0d 04 ec 1e 2e 76 64 75 |.[OPT T%.....vdu| 00000eb0 76 61 72 73 25 3a 45 51 55 44 20 31 34 38 3a 45 |vars%:EQUD 148:E| 00000ec0 51 55 44 20 2d 31 0d 04 f6 05 3a 0d 05 00 0c 2e |QUD -1....:.....| 00000ed0 77 69 6e 64 6f 77 25 0d 05 0a 36 45 51 55 44 20 |window%...6EQUD | 00000ee0 2d 31 36 30 3a 45 51 55 44 20 31 36 30 3a 45 51 |-160:EQUD 160:EQ| 00000ef0 55 44 20 31 36 30 3a 3b 20 4c 65 66 74 2c 20 52 |UD 160:; Left, R| 00000f00 69 67 68 74 2c 20 4f 72 69 67 69 6e 58 0d 05 14 |ight, OriginX...| 00000f10 36 45 51 55 44 20 2d 31 32 38 3a 45 51 55 44 20 |6EQUD -128:EQUD | 00000f20 31 32 38 3a 45 51 55 44 20 31 32 38 3a 3b 20 42 |128:EQUD 128:; B| 00000f30 6f 74 74 6f 6d 2c 20 54 6f 70 2c 20 4f 72 69 67 |ottom, Top, Orig| 00000f40 69 6e 59 0d 05 1e 0c 2e 73 63 72 65 65 6e 25 0d |inY.....screen%.| 00000f50 05 28 37 45 51 55 44 20 2d 31 3a 45 51 55 44 20 |.(7EQUD -1:EQUD | 00000f60 31 36 30 3a 45 51 55 44 20 32 35 36 3a f4 20 41 |160:EQUD 256:. A| 00000f70 64 64 72 2c 20 4c 69 6e 65 20 69 6e 63 2e 2c 20 |ddr, Line inc., | 00000f80 48 65 69 67 68 74 0d 05 32 05 3a 0d 05 3c 10 2e |Height..2.:..<..| 00000f90 72 6e 64 25 3a 45 51 55 44 20 31 0d 05 46 05 3a |rnd%:EQUD 1..F.:| 00000fa0 0d 05 50 0e 2e 74 6f 73 63 72 65 65 6e 25 0d 05 |..P..toscreen%..| 00000fb0 5a 14 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 |Z.STMFD R13!,{R1| 00000fc0 34 7d 0d 05 64 17 4f 50 54 20 a4 61 64 72 28 39 |4}..d.OPT .adr(9| 00000fd0 2c 70 6c 6f 74 25 2c 32 29 0d 05 6e 0f 4c 44 52 |,plot%,2)..n.LDR| 00000fe0 20 52 38 2c 5b 52 39 5d 0d 05 78 0d 43 4d 50 20 | R8,[R9]..x.CMP | 00000ff0 52 38 2c 23 30 0d 05 82 27 4c 44 4d 4c 45 46 44 |R8,#0...'LDMLEFD| 00001000 20 52 31 33 21 2c 7b 50 43 7d 3a 3b 20 4e 6f 74 | R13!,{PC}:; Not| 00001010 68 69 6e 67 20 74 6f 20 64 72 61 77 0d 05 8c 1e |hing to draw....| 00001020 4c 44 52 20 52 30 2c 77 69 6e 64 6f 77 25 2b 31 |LDR R0,window%+1| 00001030 32 3a 3b 20 42 6f 74 74 6f 6d 0d 05 96 1f 4c 44 |2:; Bottom....LD| 00001040 52 20 52 31 2c 77 69 6e 64 6f 77 25 2b 32 30 3a |R R1,window%+20:| 00001050 3b 20 4f 72 69 67 69 6e 79 0d 05 a0 10 41 44 44 |; Originy....ADD| 00001060 20 52 31 2c 52 30 2c 52 31 0d 05 aa 24 4c 44 52 | R1,R0,R1...$LDR| 00001070 20 52 32 2c 73 63 72 65 65 6e 25 2b 38 3a 3b 20 | R2,screen%+8:; | 00001080 53 63 72 65 65 6e 20 68 65 69 67 68 74 0d 05 b4 |Screen height...| 00001090 10 53 55 42 20 52 32 2c 52 32 2c 23 31 0d 05 be |.SUB R2,R2,#1...| 000010a0 10 52 53 42 20 52 32 2c 52 31 2c 52 32 0d 05 c8 |.RSB R2,R1,R2...| 000010b0 13 4c 44 52 20 52 31 32 2c 73 63 72 65 65 6e 25 |.LDR R12,screen%| 000010c0 0d 05 d2 25 4c 44 52 20 52 33 2c 73 63 72 65 65 |...%LDR R3,scree| 000010d0 6e 25 2b 34 3a 3b 20 4c 69 6e 65 20 69 6e 63 72 |n%+4:; Line incr| 000010e0 65 6d 65 6e 74 0d 05 dc 15 4d 4c 41 20 52 31 32 |ement....MLA R12| 000010f0 2c 52 33 2c 52 32 2c 52 31 32 0d 05 e6 19 4f 50 |,R3,R2,R12....OP| 00001100 54 20 a4 61 64 72 28 31 31 2c 7a 62 75 66 66 25 |T .adr(11,zbuff%| 00001110 2c 32 29 0d 05 f0 10 4c 44 52 20 52 31 30 2c 72 |,2)....LDR R10,r| 00001120 6e 64 25 0d 05 fa 0b 2e 79 6c 6f 6f 70 25 0d 06 |nd%.....yloop%..| 00001130 04 14 3b 20 42 6c 61 6e 6b 20 7a 2d 62 75 66 66 |..; Blank z-buff| 00001140 65 72 0d 06 0e 13 53 54 4d 46 44 20 52 31 33 21 |er....STMFD R13!| 00001150 2c 7b 52 30 7d 0d 06 18 19 4f 50 54 20 a4 61 64 |,{R0}....OPT .ad| 00001160 72 28 30 2c 77 69 6e 64 6f 77 25 2c 32 29 0d 06 |r(0,window%,2)..| 00001170 22 2e 4c 44 4d 49 41 20 52 30 2c 7b 52 30 2d 52 |".LDMIA R0,{R0-R| 00001180 31 2c 52 32 7d 3a 3b 20 4c 65 66 74 2c 20 52 69 |1,R2}:; Left, Ri| 00001190 67 68 74 2c 20 4f 72 69 67 69 6e 58 0d 06 2c 10 |ght, OriginX..,.| 000011a0 41 44 44 20 52 30 2c 52 30 2c 52 32 0d 06 36 10 |ADD R0,R0,R2..6.| 000011b0 41 44 44 20 52 31 2c 52 31 2c 52 32 0d 06 40 13 |ADD R1,R1,R2..@.| 000011c0 4d 4f 56 20 52 30 2c 52 30 2c 41 53 52 23 33 0d |MOV R0,R0,ASR#3.| 000011d0 06 4a 16 52 53 42 20 52 39 2c 52 30 2c 52 31 2c |.J.RSB R9,R0,R1,| 000011e0 41 53 52 23 33 0d 06 54 17 41 44 44 20 52 38 2c |ASR#3..T.ADD R8,| 000011f0 52 31 31 2c 52 30 2c 41 53 4c 23 35 0d 06 5e 15 |R11,R0,ASL#5..^.| 00001200 5d 3a e3 55 25 3d 30 b8 37 3a 5b 4f 50 54 20 54 |]:.U%=0.7:[OPT T| 00001210 25 0d 06 68 0d 4d 4f 56 20 55 25 2c 23 30 0d 06 |%..h.MOV U%,#0..| 00001220 72 0f 5d 3a ed 3a 5b 4f 50 54 20 54 25 0d 06 7c |r.]:.:[OPT T%..|| 00001230 0f 2e 62 6c 61 6e 6b 6c 6f 6f 70 25 0d 06 86 15 |..blankloop%....| 00001240 53 54 4d 49 41 20 52 38 21 2c 7b 52 30 2d 52 37 |STMIA R8!,{R0-R7| 00001250 7d 0d 06 90 11 53 55 42 53 20 52 39 2c 52 39 2c |}....SUBS R9,R9,| 00001260 23 31 0d 06 9a 12 42 47 45 20 62 6c 61 6e 6b 6c |#1....BGE blankl| 00001270 6f 6f 70 25 0d 06 a4 13 4c 44 4d 46 44 20 52 31 |oop%....LDMFD R1| 00001280 33 21 2c 7b 52 30 7d 0d 06 ae 22 3b 20 4c 6f 6f |3!,{R0}..."; Loo| 00001290 6b 20 61 74 20 65 61 63 68 20 70 6f 6c 79 67 6f |k at each polygo| 000012a0 6e 20 69 6e 20 74 75 72 6e 0d 06 b8 17 4f 50 54 |n in turn....OPT| 000012b0 20 a4 61 64 72 28 39 2c 70 6c 6f 74 25 2c 32 29 | .adr(9,plot%,2)| 000012c0 0d 06 c2 12 4c 44 52 20 52 38 2c 5b 52 39 5d 2c |....LDR R8,[R9],| 000012d0 23 34 0d 06 cc 0e 2e 70 6f 6c 79 6c 6f 6f 70 25 |#4.....polyloop%| 000012e0 0d 06 d6 17 4c 44 4d 49 41 20 52 39 2c 7b 52 31 |....LDMIA R9,{R1| 000012f0 2d 52 32 2c 52 33 7d 0d 06 e0 0d 43 4d 50 20 52 |-R2,R3}....CMP R| 00001300 31 2c 52 30 0d 06 ea 0f 43 4d 50 47 45 20 52 30 |1,R0....CMPGE R0| 00001310 2c 52 32 0d 06 f4 12 42 4c 47 45 20 70 6c 6f 74 |,R2....BLGE plot| 00001320 70 6f 6c 79 25 0d 06 fe 10 41 44 44 20 52 39 2c |poly%....ADD R9,| 00001330 52 39 2c 52 33 0d 07 08 11 53 55 42 53 20 52 38 |R9,R3....SUBS R8| 00001340 2c 52 38 2c 23 31 0d 07 12 11 42 47 54 20 70 6f |,R8,#1....BGT po| 00001350 6c 79 6c 6f 6f 70 25 0d 07 1c 25 4c 44 52 20 52 |lyloop%...%LDR R| 00001360 33 2c 73 63 72 65 65 6e 25 2b 34 3a 3b 20 4c 69 |3,screen%+4:; Li| 00001370 6e 65 20 69 6e 63 72 65 6d 65 6e 74 0d 07 26 12 |ne increment..&.| 00001380 53 55 42 20 52 31 32 2c 52 31 32 2c 52 33 0d 07 |SUB R12,R12,R3..| 00001390 30 10 41 44 44 20 52 30 2c 52 30 2c 23 31 0d 07 |0.ADD R0,R0,#1..| 000013a0 3a 1b 4c 44 52 20 52 31 2c 77 69 6e 64 6f 77 25 |:.LDR R1,window%| 000013b0 2b 31 36 3a 3b 20 54 6f 70 0d 07 44 0d 43 4d 50 |+16:; Top..D.CMP| 000013c0 20 52 30 2c 52 31 0d 07 4e 0e 42 4c 54 20 79 6c | R0,R1..N.BLT yl| 000013d0 6f 6f 70 25 0d 07 58 10 53 54 52 20 52 31 30 2c |oop%..X.STR R10,| 000013e0 72 6e 64 25 0d 07 62 13 4c 44 4d 46 44 20 52 31 |rnd%..b.LDMFD R1| 000013f0 33 21 2c 7b 50 43 7d 0d 07 6c 05 3a 0d 07 76 0e |3!,{PC}..l.:..v.| 00001400 2e 70 6c 6f 74 70 6f 6c 79 25 0d 07 80 20 53 54 |.plotpoly%... ST| 00001410 4d 46 44 20 52 31 33 21 2c 7b 52 30 2c 52 33 2c |MFD R13!,{R0,R3,| 00001420 52 38 2c 52 39 2c 52 31 34 7d 0d 07 8a 18 3b 20 |R8,R9,R14}....; | 00001430 46 69 6e 64 20 69 6e 74 65 72 73 65 63 74 69 6f |Find intersectio| 00001440 6e 73 0d 07 94 11 41 44 44 20 52 38 2c 52 39 2c |ns....ADD R8,R9,| 00001450 23 39 36 0d 07 9e 13 4c 44 52 20 52 37 2c 5b 52 |#96....LDR R7,[R| 00001460 39 2c 23 32 38 5d 0d 07 a8 18 4f 50 54 20 a4 61 |9,#28]....OPT .a| 00001470 64 72 28 36 2c 69 62 75 66 66 25 2c 32 29 0d 07 |dr(6,ibuff%,2)..| 00001480 b2 0d 4d 4f 56 20 52 35 2c 52 36 0d 07 bc 0e 2e |..MOV R5,R6.....| 00001490 6c 69 6e 65 6c 6f 6f 70 25 0d 07 c6 15 4c 44 4d |lineloop%....LDM| 000014a0 49 41 20 52 38 21 2c 7b 52 31 2d 52 34 7d 0d 07 |IA R8!,{R1-R4}..| 000014b0 d0 0d 43 4d 50 20 52 31 2c 52 30 0d 07 da 13 53 |..CMP R1,R0....S| 000014c0 55 42 47 45 53 20 52 32 2c 52 30 2c 52 32 0d 07 |UBGES R2,R0,R2..| 000014d0 e4 15 4d 4c 41 47 45 20 52 33 2c 52 32 2c 52 34 |..MLAGE R3,R2,R4| 000014e0 2c 52 33 0d 07 ee 14 53 54 52 47 45 20 52 33 2c |,R3....STRGE R3,| 000014f0 5b 52 36 5d 2c 23 34 0d 07 f8 11 53 55 42 53 20 |[R6],#4....SUBS | 00001500 52 37 2c 52 37 2c 23 31 0d 08 02 11 42 47 54 20 |R7,R7,#1....BGT | 00001510 6c 69 6e 65 6c 6f 6f 70 25 0d 08 0c 0d 43 4d 50 |lineloop%....CMP| 00001520 20 52 36 2c 52 35 0d 08 16 10 42 45 51 20 65 6e | R6,R5....BEQ en| 00001530 64 70 6f 6c 79 25 0d 08 20 15 4d 4f 56 20 52 33 |dpoly%.. .MOV R3| 00001540 2c 23 26 38 30 30 30 30 30 30 30 0d 08 2a 0f 53 |,#&80000000..*.S| 00001550 54 52 20 52 33 2c 5b 52 36 5d 0d 08 34 0f 3b 20 |TR R3,[R6]..4.; | 00001560 53 6f 72 74 20 74 68 65 6d 0d 08 3e 15 4c 44 4d |Sort them..>.LDM| 00001570 44 42 20 52 36 21 2c 7b 52 32 2d 52 33 7d 0d 08 |DB R6!,{R2-R3}..| 00001580 48 0d 43 4d 50 20 52 32 2c 52 33 0d 08 52 0f 4d |H.CMP R2,R3..R.M| 00001590 4f 56 47 54 20 52 34 2c 52 32 0d 08 5c 0f 4d 4f |OVGT R4,R2..\.MO| 000015a0 56 47 54 20 52 32 2c 52 33 0d 08 66 0f 4d 4f 56 |VGT R2,R3..f.MOV| 000015b0 47 54 20 52 33 2c 52 34 0d 08 70 0d 43 4d 50 20 |GT R3,R4..p.CMP | 000015c0 52 36 2c 52 35 0d 08 7a 10 42 45 51 20 65 6e 64 |R6,R5..z.BEQ end| 000015d0 73 6f 72 74 25 0d 08 84 0d 2e 6f 75 74 6c 6f 6f |sort%.....outloo| 000015e0 70 25 0d 08 8e 0d 4d 4f 56 20 52 37 2c 52 35 0d |p%....MOV R7,R5.| 000015f0 08 98 0c 2e 69 6e 6c 6f 6f 70 25 0d 08 a2 12 4c |....inloop%....L| 00001600 44 52 20 52 31 2c 5b 52 37 5d 2c 23 34 0d 08 ac |DR R1,[R7],#4...| 00001610 0d 43 4d 50 20 52 31 2c 52 32 0d 08 b6 0d 42 47 |.CMP R1,R2....BG| 00001620 54 20 73 77 61 70 25 0d 08 c0 0d 43 4d 50 20 52 |T swap%....CMP R| 00001630 37 2c 52 36 0d 08 ca 0f 42 4c 54 20 69 6e 6c 6f |7,R6....BLT inlo| 00001640 6f 70 25 0d 08 d4 0e 42 20 65 6e 64 73 77 61 70 |op%....B endswap| 00001650 25 0d 08 de 05 3a 0d 08 e8 0a 2e 73 77 61 70 25 |%....:.....swap%| 00001660 0d 08 f2 13 53 54 52 20 52 32 2c 5b 52 37 2c 23 |....STR R2,[R7,#| 00001670 2d 34 5d 0d 08 fc 0d 43 4d 50 20 52 31 2c 52 33 |-4]....CMP R1,R3| 00001680 0d 09 06 0f 4d 4f 56 47 54 20 52 32 2c 52 33 0d |....MOVGT R2,R3.| 00001690 09 10 0f 4d 4f 56 47 54 20 52 33 2c 52 31 0d 09 |...MOVGT R3,R1..| 000016a0 1a 0f 4d 4f 56 4c 54 20 52 32 2c 52 31 0d 09 24 |..MOVLT R2,R1..$| 000016b0 0d 43 4d 50 20 52 37 2c 52 36 0d 09 2e 0f 42 4c |.CMP R7,R6....BL| 000016c0 54 20 69 6e 6c 6f 6f 70 25 0d 09 38 0d 2e 65 6e |T inloop%..8..en| 000016d0 64 73 77 61 70 25 0d 09 42 14 53 54 4d 49 41 20 |dswap%..B.STMIA | 000016e0 52 36 2c 7b 52 32 2d 52 33 7d 0d 09 4c 15 4c 44 |R6,{R2-R3}..L.LD| 000016f0 4d 44 42 20 52 36 21 2c 7b 52 32 2d 52 33 7d 0d |MDB R6!,{R2-R3}.| 00001700 09 56 0d 43 4d 50 20 52 32 2c 52 33 0d 09 60 0f |.V.CMP R2,R3..`.| 00001710 4d 4f 56 47 54 20 52 34 2c 52 32 0d 09 6a 0f 4d |MOVGT R4,R2..j.M| 00001720 4f 56 47 54 20 52 32 2c 52 33 0d 09 74 0f 4d 4f |OVGT R2,R3..t.MO| 00001730 56 47 54 20 52 33 2c 52 34 0d 09 7e 0d 43 4d 50 |VGT R3,R4..~.CMP| 00001740 20 52 36 2c 52 35 0d 09 88 10 42 47 54 20 6f 75 | R6,R5....BGT ou| 00001750 74 6c 6f 6f 70 25 0d 09 92 0d 2e 65 6e 64 73 6f |tloop%.....endso| 00001760 72 74 25 0d 09 9c 14 53 54 4d 49 41 20 52 36 2c |rt%....STMIA R6,| 00001770 7b 52 32 2d 52 33 7d 0d 09 a6 2e 3b 20 52 6f 75 |{R2-R3}....; Rou| 00001780 6e 64 20 74 68 65 6d 2c 20 43 6c 69 70 20 74 68 |nd them, Clip th| 00001790 65 6d 2c 20 57 65 65 64 20 6f 75 74 20 64 6f 75 |em, Weed out dou| 000017a0 62 6c 65 74 73 0d 09 b0 19 4f 50 54 20 a4 61 64 |blets....OPT .ad| 000017b0 72 28 35 2c 77 69 6e 64 6f 77 25 2c 32 29 0d 09 |r(5,window%,2)..| 000017c0 ba 22 4c 44 4d 49 41 20 52 35 2c 7b 52 35 2d 52 |."LDMIA R5,{R5-R| 000017d0 36 7d 3a 3b 20 4c 65 66 74 2c 20 52 69 67 68 74 |6}:; Left, Right| 000017e0 0d 09 c4 18 4f 50 54 20 a4 61 64 72 28 38 2c 69 |....OPT .adr(8,i| 000017f0 62 75 66 66 25 2c 32 29 0d 09 ce 0d 4d 4f 56 20 |buff%,2)....MOV | 00001800 52 37 2c 52 38 0d 09 d8 10 2e 73 65 61 72 63 68 |R7,R8.....search| 00001810 6c 6f 6f 70 25 0d 09 e2 15 4c 44 4d 49 41 20 52 |loop%....LDMIA R| 00001820 38 21 2c 7b 52 31 2d 52 32 7d 0d 09 ec 15 43 4d |8!,{R1-R2}....CM| 00001830 50 20 52 31 2c 23 26 38 30 30 30 30 30 30 30 0d |P R1,#&80000000.| 00001840 09 f6 10 42 45 51 20 65 6e 64 70 6f 6c 79 25 0d |...BEQ endpoly%.| 00001850 0a 00 17 41 44 44 20 52 31 2c 52 31 2c 23 31 3c |...ADD R1,R1,#1<| 00001860 3c 53 43 25 2d 31 0d 0a 0a 15 4d 4f 56 20 52 31 |<SC%-1....MOV R1| 00001870 2c 52 31 2c 41 53 52 23 53 43 25 0d 0a 14 0d 43 |,R1,ASR#SC%....C| 00001880 4d 50 20 52 31 2c 52 35 0d 0a 1e 0f 4d 4f 56 4c |MP R1,R5....MOVL| 00001890 54 20 52 31 2c 52 35 0d 0a 28 17 41 44 44 20 52 |T R1,R5..(.ADD R| 000018a0 32 2c 52 32 2c 23 31 3c 3c 53 43 25 2d 31 0d 0a |2,R2,#1<<SC%-1..| 000018b0 32 15 4d 4f 56 20 52 32 2c 52 32 2c 41 53 52 23 |2.MOV R2,R2,ASR#| 000018c0 53 43 25 0d 0a 3c 0d 43 4d 50 20 52 32 2c 52 36 |SC%..<.CMP R2,R6| 000018d0 0d 0a 46 0f 4d 4f 56 47 54 20 52 32 2c 52 36 0d |..F.MOVGT R2,R6.| 000018e0 0a 50 0d 43 4d 50 20 52 31 2c 52 32 0d 0a 5a 13 |.P.CMP R1,R2..Z.| 000018f0 42 47 45 20 73 65 61 72 63 68 6c 6f 6f 70 25 0d |BGE searchloop%.| 00001900 0a 64 0b 2e 69 6c 6f 6f 70 25 0d 0a 6e 10 2e 73 |.d..iloop%..n..s| 00001910 65 61 72 63 68 6c 6f 6f 70 25 0d 0a 78 15 4c 44 |earchloop%..x.LD| 00001920 4d 49 41 20 52 38 21 2c 7b 52 33 2d 52 34 7d 0d |MIA R8!,{R3-R4}.| 00001930 0a 82 15 43 4d 50 20 52 33 2c 23 26 38 30 30 30 |...CMP R3,#&8000| 00001940 30 30 30 30 0d 0a 8c 11 42 45 51 20 65 6e 64 69 |0000....BEQ endi| 00001950 6c 6f 6f 70 25 0d 0a 96 17 41 44 44 20 52 33 2c |loop%....ADD R3,| 00001960 52 33 2c 23 31 3c 3c 53 43 25 2d 31 0d 0a a0 15 |R3,#1<<SC%-1....| 00001970 4d 4f 56 20 52 33 2c 52 33 2c 41 53 52 23 53 43 |MOV R3,R3,ASR#SC| 00001980 25 0d 0a aa 0d 43 4d 50 20 52 33 2c 52 35 0d 0a |%....CMP R3,R5..| 00001990 b4 0f 4d 4f 56 4c 54 20 52 33 2c 52 35 0d 0a be |..MOVLT R3,R5...| 000019a0 17 41 44 44 20 52 34 2c 52 34 2c 23 31 3c 3c 53 |.ADD R4,R4,#1<<S| 000019b0 43 25 2d 31 0d 0a c8 15 4d 4f 56 20 52 34 2c 52 |C%-1....MOV R4,R| 000019c0 34 2c 41 53 52 23 53 43 25 0d 0a d2 0d 43 4d 50 |4,ASR#SC%....CMP| 000019d0 20 52 34 2c 52 36 0d 0a dc 0f 4d 4f 56 47 54 20 | R4,R6....MOVGT | 000019e0 52 34 2c 52 36 0d 0a e6 0d 43 4d 50 20 52 33 2c |R4,R6....CMP R3,| 000019f0 52 34 0d 0a f0 13 42 47 45 20 73 65 61 72 63 68 |R4....BGE search| 00001a00 6c 6f 6f 70 25 0d 0a fa 0d 43 4d 50 20 52 32 2c |loop%....CMP R2,| 00001a10 52 33 0d 0b 04 0f 4d 4f 56 47 45 20 52 32 2c 52 |R3....MOVGE R2,R| 00001a20 34 0d 0b 0e 13 42 47 45 20 73 65 61 72 63 68 6c |4....BGE searchl| 00001a30 6f 6f 70 25 0d 0b 18 10 53 55 42 20 52 32 2c 52 |oop%....SUB R2,R| 00001a40 32 2c 23 31 0d 0b 22 15 53 54 4d 49 41 20 52 37 |2,#1..".STMIA R7| 00001a50 21 2c 7b 52 31 2d 52 32 7d 0d 0b 2c 0d 4d 4f 56 |!,{R1-R2}..,.MOV| 00001a60 20 52 31 2c 52 33 0d 0b 36 0d 4d 4f 56 20 52 32 | R1,R3..6.MOV R2| 00001a70 2c 52 34 0d 0b 40 0c 42 20 69 6c 6f 6f 70 25 0d |,R4..@.B iloop%.| 00001a80 0b 4a 05 3a 0d 0b 54 0e 2e 65 6e 64 69 6c 6f 6f |.J.:..T..endiloo| 00001a90 70 25 0d 0b 5e 10 53 55 42 20 52 32 2c 52 32 2c |p%..^.SUB R2,R2,| 00001aa0 23 31 0d 0b 68 15 53 54 4d 49 41 20 52 37 21 2c |#1..h.STMIA R7!,| 00001ab0 7b 52 31 2d 52 33 7d 0d 0b 72 1d 3b 20 54 79 70 |{R1-R3}..r.; Typ| 00001ac0 65 20 63 68 65 63 6b 69 6e 67 20 67 6f 65 73 20 |e checking goes | 00001ad0 68 65 72 65 0d 0b 7c 1d 3b 20 57 6f 72 6b 20 6f |here..|.; Work o| 00001ae0 75 74 20 6c 69 6e 65 20 76 61 72 69 61 62 6c 65 |ut line variable| 00001af0 73 0d 0b 86 11 41 44 44 20 52 32 2c 52 39 2c 23 |s....ADD R2,R9,#| 00001b00 31 36 0d 0b 90 29 4c 44 4d 49 41 20 52 32 2c 7b |16...)LDMIA R2,{| 00001b10 52 32 2d 52 34 7d 3a 3b 20 4e 65 61 72 6e 65 73 |R2-R4}:; Nearnes| 00001b20 73 2c 20 2d 64 78 2c 20 2d 64 79 0d 0b 9a 13 4d |s, -dx, -dy....M| 00001b30 4c 41 20 52 32 2c 52 30 2c 52 34 2c 52 32 0d 0b |LA R2,R0,R4,R2..| 00001b40 a4 11 41 44 44 20 52 34 2c 52 39 2c 23 33 32 0d |..ADD R4,R9,#32.| 00001b50 0b ae 33 4c 44 4d 49 41 20 52 34 2c 7b 52 34 2c |..3LDMIA R4,{R4,| 00001b60 52 35 2d 52 37 7d 3a 3b 20 42 61 73 65 43 6f 6c |R5-R7}:; BaseCol| 00001b70 2c 20 43 6f 6c 6f 75 72 2c 20 2d 64 78 2c 20 2d |, Colour, -dx, -| 00001b80 64 79 0d 0b b8 13 4d 4c 41 20 52 35 2c 52 30 2c |dy....MLA R5,R0,| 00001b90 52 37 2c 52 35 0d 0b c2 0f 3b 20 44 72 61 77 20 |R7,R5....; Draw | 00001ba0 74 68 65 6d 0d 0b cc 19 4f 50 54 20 a4 61 64 72 |them....OPT .adr| 00001bb0 28 31 34 2c 69 62 75 66 66 25 2c 32 29 0d 0b d6 |(14,ibuff%,2)...| 00001bc0 16 4c 44 4d 49 41 20 52 31 34 21 2c 7b 52 30 2c |.LDMIA R14!,{R0,| 00001bd0 52 31 7d 0d 0b e0 15 43 4d 50 20 52 30 2c 23 26 |R1}....CMP R0,#&| 00001be0 38 30 30 30 30 30 30 30 0d 0b ea 10 42 45 51 20 |80000000....BEQ | 00001bf0 65 6e 64 70 6f 6c 79 25 0d 0b f4 0f 2e 68 6c 69 |endpoly%.....hli| 00001c00 6e 65 6c 6f 6f 70 25 0d 0b fe 22 53 54 4d 46 44 |neloop%..."STMFD| 00001c10 20 52 31 33 21 2c 7b 52 32 2c 52 35 2c 52 31 31 | R13!,{R2,R5,R11| 00001c20 2c 52 31 32 2c 52 31 34 7d 0d 0c 08 11 53 55 42 |,R12,R14}....SUB| 00001c30 20 52 31 34 2c 52 31 2c 52 30 0d 0c 12 13 4d 4c | R14,R1,R0....ML| 00001c40 41 20 52 32 2c 52 30 2c 52 33 2c 52 32 0d 0c 1c |A R2,R0,R3,R2...| 00001c50 13 4d 4c 41 20 52 35 2c 52 30 2c 52 36 2c 52 35 |.MLA R5,R0,R6,R5| 00001c60 0d 0c 26 1e 4c 44 52 20 52 31 2c 77 69 6e 64 6f |..&.LDR R1,windo| 00001c70 77 25 2b 38 3a 3b 20 4f 72 69 67 69 6e 58 0d 0c |w%+8:; OriginX..| 00001c80 30 10 41 44 44 20 52 30 2c 52 30 2c 52 31 0d 0c |0.ADD R0,R0,R1..| 00001c90 3a 18 41 44 44 20 52 31 31 2c 52 31 31 2c 52 30 |:.ADD R11,R11,R0| 00001ca0 2c 41 53 4c 23 32 0d 0c 44 0e 80 20 52 31 2c 52 |,ASL#2..D.. R1,R| 00001cb0 30 2c 23 37 0d 0c 4e 13 4d 4f 56 20 52 30 2c 52 |0,#7..N.MOV R0,R| 00001cc0 30 2c 41 53 52 23 33 0d 0c 58 18 41 44 44 20 52 |0,ASR#3..X.ADD R| 00001cd0 31 32 2c 52 31 32 2c 52 30 2c 41 53 4c 23 32 0d |12,R12,R0,ASL#2.| 00001ce0 0c 62 10 4c 44 52 20 52 39 2c 5b 52 31 32 5d 0d |.b.LDR R9,[R12].| 00001cf0 0c 6c 13 41 44 52 20 52 30 2c 67 6f 75 72 61 64 |.l.ADR R0,gourad| 00001d00 6a 25 0d 0c 76 18 4c 44 52 20 52 31 2c 5b 52 30 |j%..v.LDR R1,[R0| 00001d10 2c 52 31 2c 41 53 4c 23 32 5d 0d 0c 80 10 41 44 |,R1,ASL#2]....AD| 00001d20 44 20 50 43 2c 52 30 2c 52 31 0d 0c 8a 05 3a 0d |D PC,R0,R1....:.| 00001d30 0c 94 11 2e 68 6c 69 6e 65 72 65 74 75 72 6e 25 |....hlinereturn%| 00001d40 0d 0c 9e 10 53 54 52 20 52 39 2c 5b 52 31 32 5d |....STR R9,[R12]| 00001d50 0d 0c a8 22 4c 44 4d 46 44 20 52 31 33 21 2c 7b |..."LDMFD R13!,{| 00001d60 52 32 2c 52 35 2c 52 31 31 2c 52 31 32 2c 52 31 |R2,R5,R11,R12,R1| 00001d70 34 7d 0d 0c b2 16 4c 44 4d 49 41 20 52 31 34 21 |4}....LDMIA R14!| 00001d80 2c 7b 52 30 2d 52 31 7d 0d 0c bc 15 43 4d 50 20 |,{R0-R1}....CMP | 00001d90 52 30 2c 23 26 38 30 30 30 30 30 30 30 0d 0c c6 |R0,#&80000000...| 00001da0 12 42 4e 45 20 68 6c 69 6e 65 6c 6f 6f 70 25 0d |.BNE hlineloop%.| 00001db0 0c d0 0d 2e 65 6e 64 70 6f 6c 79 25 0d 0c da 1f |....endpoly%....| 00001dc0 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 30 2c 52 |LDMFD R13!,{R0,R| 00001dd0 33 2c 52 38 2c 52 39 2c 50 43 7d 0d 0c e4 05 3a |3,R8,R9,PC}....:| 00001de0 0d 0c ee 0d 2e 67 6f 75 72 61 64 6a 25 0d 0c f8 |.....gouradj%...| 00001df0 15 5d 3a e3 55 25 3d 30 b8 37 3a 5b 4f 50 54 20 |.]:.U%=0.7:[OPT | 00001e00 54 25 0d 0d 02 1e 45 51 55 44 20 68 6c 69 6e 65 |T%....EQUD hline| 00001e10 72 65 74 75 72 6e 25 2d 67 6f 75 72 61 64 6a 25 |return%-gouradj%| 00001e20 0d 0d 0c 0f 5d 3a ed 3a 5b 4f 50 54 20 54 25 0d |....]:.:[OPT T%.| 00001e30 0d 16 05 3a 0d 0d 20 0d 2e 6e 65 77 77 6f 72 64 |...:.. ..newword| 00001e40 25 0d 0d 2a 32 5d 3a e3 55 25 3d 30 b8 37 3a 67 |%..*2]:.U%=0.7:g| 00001e50 6f 75 72 61 64 6a 25 21 28 55 25 3c 3c 32 29 3d |ouradj%!(U%<<2)=| 00001e60 50 25 2d 67 6f 75 72 61 64 6a 25 3a 5b 4f 50 54 |P%-gouradj%:[OPT| 00001e70 20 54 25 0d 0d 34 13 4c 44 52 20 52 30 2c 5b 52 | T%..4.LDR R0,[R| 00001e80 31 31 5d 2c 23 34 0d 0d 3e 0d 43 4d 50 20 52 32 |11],#4..>.CMP R2| 00001e90 2c 52 30 0d 0d 48 12 42 4c 54 20 67 73 6b 69 70 |,R0..H.BLT gskip| 00001ea0 25 28 55 25 29 0d 0d 52 14 53 54 52 20 52 32 2c |%(U%)..R.STR R2,| 00001eb0 5b 52 31 31 2c 23 2d 34 5d 0d 0d 5c 19 41 44 44 |[R11,#-4]..\.ADD| 00001ec0 20 52 31 30 2c 52 31 30 2c 52 31 30 2c 41 53 4c | R10,R10,R10,ASL| 00001ed0 23 34 0d 0d 66 0d 43 4d 50 20 52 35 2c 23 30 0d |#4..f.CMP R5,#0.| 00001ee0 0d 70 1e 41 44 44 47 54 20 52 30 2c 52 35 2c 52 |.p.ADDGT R0,R5,R| 00001ef0 31 30 2c 4c 53 52 23 33 32 2d 43 43 25 0d 0d 7a |10,LSR#32-CC%..z| 00001f00 1e 52 53 42 4c 54 20 52 30 2c 52 35 2c 52 31 30 |.RSBLT R0,R5,R10| 00001f10 2c 4c 53 52 23 33 32 2d 43 43 25 0d 0d 84 19 41 |,LSR#32-CC%....A| 00001f20 44 44 20 52 31 30 2c 52 31 30 2c 52 31 30 2c 41 |DD R10,R10,R10,A| 00001f30 53 4c 23 34 0d 0d 8e 1a 82 20 52 30 2c 52 30 2c |SL#4..... R0,R0,| 00001f40 52 31 30 2c 4c 53 52 23 33 32 2d 43 43 25 0d 0d |R10,LSR#32-CC%..| 00001f50 98 1d 4c 44 52 42 20 52 30 2c 5b 52 34 2c 52 30 |..LDRB R0,[R4,R0| 00001f60 2c 4c 53 52 23 43 43 25 2d 32 5d 0d 0d a2 1a 42 |,LSR#CC%-2]....B| 00001f70 49 43 20 52 39 2c 52 39 2c 23 26 46 3c 3c 28 55 |IC R9,R9,#&F<<(U| 00001f80 25 3c 3c 32 29 0d 0d ac 19 84 52 20 52 39 2c 52 |%<<2).....R R9,R| 00001f90 39 2c 52 30 2c 4c 53 4c 23 55 25 3c 3c 32 0d 0d |9,R0,LSL#U%<<2..| 00001fa0 b6 0f 2e 67 73 6b 69 70 25 28 55 25 29 0d 0d c0 |...gskip%(U%)...| 00001fb0 13 53 55 42 53 20 52 31 34 2c 52 31 34 2c 23 31 |.SUBS R14,R14,#1| 00001fc0 0d 0d ca 14 42 4c 54 20 68 6c 69 6e 65 72 65 74 |....BLT hlineret| 00001fd0 75 72 6e 25 0d 0d d4 10 41 44 44 20 52 32 2c 52 |urn%....ADD R2,R| 00001fe0 32 2c 52 33 0d 0d de 10 41 44 44 20 52 35 2c 52 |2,R3....ADD R5,R| 00001ff0 35 2c 52 36 0d 0d e8 0f 5d 3a ed 3a 5b 4f 50 54 |5,R6....]:.:[OPT| 00002000 20 54 25 0d 0d f2 13 53 54 52 20 52 39 2c 5b 52 | T%....STR R9,[R| 00002010 31 32 5d 2c 23 34 0d 0d fc 10 4c 44 52 20 52 39 |12],#4....LDR R9| 00002020 2c 5b 52 31 32 5d 0d 0e 06 0e 42 20 6e 65 77 77 |,[R12]....B neww| 00002030 6f 72 64 25 0d 0e 10 05 5d 0d 0e 1a 2c c8 99 22 |ord%....]...,.."| 00002040 4f 53 5f 52 65 61 64 56 64 75 56 61 72 69 61 62 |OS_ReadVduVariab| 00002050 6c 65 73 22 2c 76 64 75 76 61 72 73 25 2c 73 63 |les",vduvars%,sc| 00002060 72 65 65 6e 25 0d 0e 24 05 e1 0d 0e 2e 05 3a 0d |reen%..$......:.| 00002070 0e 38 11 dd f2 70 72 6f 6a 65 63 74 63 6f 64 65 |.8...projectcode| 00002080 0d 0e 42 0b 5b 4f 50 54 20 54 25 0d 0e 4c 0c 2e |..B.[OPT T%..L..| 00002090 6d 61 74 72 69 78 25 0d 0e 56 28 45 51 55 44 20 |matrix%..V(EQUD | 000020a0 31 3c 3c 56 43 25 3a 45 51 55 44 20 30 3a 45 51 |1<<VC%:EQUD 0:EQ| 000020b0 55 44 20 30 3a 3b 20 58 2d 76 65 63 74 6f 72 0d |UD 0:; X-vector.| 000020c0 0e 60 2d 45 51 55 44 20 30 3a 45 51 55 44 20 28 |.`-EQUD 0:EQUD (| 000020d0 31 3c 3c 56 43 25 29 2a 2e 39 3a 45 51 55 44 20 |1<<VC%)*.9:EQUD | 000020e0 30 3a 3b 20 59 2d 76 65 63 74 6f 72 0d 0e 6a 28 |0:; Y-vector..j(| 000020f0 45 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 |EQUD 0:EQUD 0:EQ| 00002100 55 44 20 31 3c 3c 56 43 25 3a 3b 20 5a 2d 76 65 |UD 1<<VC%:; Z-ve| 00002110 63 74 6f 72 0d 0e 74 23 45 51 55 44 20 30 3a 45 |ctor..t#EQUD 0:E| 00002120 51 55 44 20 30 3a 45 51 55 44 20 30 3a 3b 20 50 |QUD 0:EQUD 0:; P| 00002130 6f 73 69 74 69 6f 6e 0d 0e 7e 42 45 51 55 44 20 |osition..~BEQUD | 00002140 31 2f 33 2a 28 31 3c 3c 56 43 25 29 3a 45 51 55 |1/3*(1<<VC%):EQU| 00002150 44 20 32 2f 33 2a 28 31 3c 3c 56 43 25 29 3a 45 |D 2/3*(1<<VC%):E| 00002160 51 55 44 20 2d 32 2f 33 2a 28 31 3c 3c 56 43 25 |QUD -2/3*(1<<VC%| 00002170 29 3a 3b 20 4c 69 67 68 74 0d 0e 88 05 3a 0d 0e |):; Light....:..| 00002180 92 0d 2e 70 72 6f 6a 65 63 74 25 0d 0e 9c 14 53 |...project%....S| 00002190 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 7d 0d |TMFD R13!,{R14}.| 000021a0 0e a6 19 4f 50 54 20 a4 61 64 72 28 31 32 2c 73 |...OPT .adr(12,s| 000021b0 63 65 6e 65 25 2c 32 29 0d 0e b0 14 42 4c 20 70 |cene%,2)....BL p| 000021c0 61 72 61 6c 6c 61 78 63 61 6c 63 25 0d 0e ba 11 |arallaxcalc%....| 000021d0 42 4c 20 6c 69 67 68 74 63 61 6c 63 25 0d 0e c4 |BL lightcalc%...| 000021e0 10 42 4c 20 6c 69 6e 65 63 61 6c 63 25 0d 0e ce |.BL linecalc%...| 000021f0 10 42 4c 20 70 6f 6c 79 63 61 6c 63 25 0d 0e d8 |.BL polycalc%...| 00002200 13 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d |.LDMFD R13!,{PC}| 00002210 0d 0e e2 05 3a 0d 0e ec 12 2e 70 61 72 61 6c 6c |....:.....parall| 00002220 61 78 63 61 6c 63 25 0d 0e f6 18 53 54 4d 46 44 |axcalc%....STMFD| 00002230 20 52 31 33 21 2c 7b 52 31 32 2c 52 31 34 7d 0d | R13!,{R12,R14}.| 00002240 0f 00 13 4c 44 52 20 52 30 2c 5b 52 31 32 2c 23 |...LDR R0,[R12,#| 00002250 30 5d 0d 0f 0a 27 41 44 44 20 52 31 32 2c 52 31 |0]...'ADD R12,R1| 00002260 32 2c 52 30 3a 3b 20 50 6f 69 6e 74 20 62 61 73 |2,R0:; Point bas| 00002270 65 20 61 64 64 72 65 73 73 0d 0f 14 27 4c 44 52 |e address...'LDR| 00002280 20 52 31 31 2c 5b 52 31 32 5d 2c 23 34 3a 3b 20 | R11,[R12],#4:; | 00002290 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 73 |Number of points| 000022a0 0d 0f 1e 0e 43 4d 50 20 52 31 31 2c 23 30 0d 0f |....CMP R11,#0..| 000022b0 28 18 42 4c 45 20 65 6e 64 70 61 72 61 6c 6c 61 |(.BLE endparalla| 000022c0 78 63 61 6c 63 25 0d 0f 32 1a 4f 50 54 20 a4 61 |xcalc%..2.OPT .a| 000022d0 64 72 28 31 30 2c 6d 61 74 72 69 78 25 2c 32 29 |dr(10,matrix%,2)| 000022e0 0d 0f 3c 0f 2e 70 6f 69 6e 74 6c 6f 6f 70 25 0d |..<..pointloop%.| 000022f0 0f 46 16 4c 44 4d 49 41 20 52 31 32 21 2c 7b 52 |.F.LDMIA R12!,{R| 00002300 30 2d 52 32 7d 0d 0f 50 16 4c 44 4d 49 41 20 52 |0-R2}..P.LDMIA R| 00002310 31 30 21 2c 7b 52 33 2d 52 35 7d 0d 0f 5a 10 4d |10!,{R3-R5}..Z.M| 00002320 55 4c 20 52 36 2c 52 33 2c 52 30 0d 0f 64 10 4d |UL R6,R3,R0..d.M| 00002330 55 4c 20 52 37 2c 52 34 2c 52 30 0d 0f 6e 10 4d |UL R7,R4,R0..n.M| 00002340 55 4c 20 52 38 2c 52 35 2c 52 30 0d 0f 78 16 4c |UL R8,R5,R0..x.L| 00002350 44 4d 49 41 20 52 31 30 21 2c 7b 52 33 2d 52 35 |DMIA R10!,{R3-R5| 00002360 7d 0d 0f 82 13 4d 4c 41 20 52 36 2c 52 33 2c 52 |}....MLA R6,R3,R| 00002370 31 2c 52 36 0d 0f 8c 13 4d 4c 41 20 52 37 2c 52 |1,R6....MLA R7,R| 00002380 34 2c 52 31 2c 52 37 0d 0f 96 13 4d 4c 41 20 52 |4,R1,R7....MLA R| 00002390 38 2c 52 35 2c 52 31 2c 52 38 0d 0f a0 16 4c 44 |8,R5,R1,R8....LD| 000023a0 4d 49 41 20 52 31 30 21 2c 7b 52 33 2d 52 35 7d |MIA R10!,{R3-R5}| 000023b0 0d 0f aa 13 4d 4c 41 20 52 36 2c 52 33 2c 52 32 |....MLA R6,R3,R2| 000023c0 2c 52 36 0d 0f b4 13 4d 4c 41 20 52 37 2c 52 34 |,R6....MLA R7,R4| 000023d0 2c 52 32 2c 52 37 0d 0f be 13 4d 4c 41 20 52 38 |,R2,R7....MLA R8| 000023e0 2c 52 35 2c 52 32 2c 52 38 0d 0f c8 16 4c 44 4d |,R5,R2,R8....LDM| 000023f0 49 41 20 52 31 30 21 2c 7b 52 33 2d 52 35 7d 0d |IA R10!,{R3-R5}.| 00002400 0f d2 18 41 44 44 20 52 36 2c 52 36 2c 52 33 2c |...ADD R6,R6,R3,| 00002410 41 53 4c 23 56 43 25 0d 0f dc 18 41 44 44 20 52 |ASL#VC%....ADD R| 00002420 37 2c 52 37 2c 52 34 2c 41 53 4c 23 56 43 25 0d |7,R7,R4,ASL#VC%.| 00002430 0f e6 18 41 44 44 20 52 38 2c 52 38 2c 52 35 2c |...ADD R8,R8,R5,| 00002440 41 53 4c 23 56 43 25 0d 0f f0 13 53 55 42 20 52 |ASL#VC%....SUB R| 00002450 31 30 2c 52 31 30 2c 23 34 38 0d 0f fa 19 4d 4f |10,R10,#48....MO| 00002460 56 20 52 30 2c 52 36 2c 41 53 4c 23 53 43 25 2d |V R0,R6,ASL#SC%-| 00002470 56 43 25 0d 10 04 19 4d 4f 56 20 52 31 2c 52 37 |VC%....MOV R1,R7| 00002480 2c 41 53 4c 23 53 43 25 2d 56 43 25 0d 10 0e 19 |,ASL#SC%-VC%....| 00002490 4d 4f 56 20 52 32 2c 52 38 2c 41 53 4c 23 53 43 |MOV R2,R8,ASL#SC| 000024a0 25 2d 56 43 25 0d 10 18 14 52 53 42 20 52 32 2c |%-VC%....RSB R2,| 000024b0 52 32 2c 23 31 3c 3c 33 30 0d 10 22 16 53 54 4d |R2,#1<<30..".STM| 000024c0 49 41 20 52 31 32 21 2c 7b 52 30 2d 52 32 7d 0d |IA R12!,{R0-R2}.| 000024d0 10 2c 13 53 55 42 53 20 52 31 31 2c 52 31 31 2c |.,.SUBS R11,R11,| 000024e0 23 31 0d 10 36 12 42 47 54 20 70 6f 69 6e 74 6c |#1..6.BGT pointl| 000024f0 6f 6f 70 25 0d 10 40 15 2e 65 6e 64 70 61 72 61 |oop%..@..endpara| 00002500 6c 6c 61 78 63 61 6c 63 25 0d 10 4a 17 4c 44 4d |llaxcalc%..J.LDM| 00002510 46 44 20 52 31 33 21 2c 7b 52 31 32 2c 50 43 7d |FD R13!,{R12,PC}| 00002520 0d 10 54 05 3a 0d 10 5e 0f 2e 6c 69 67 68 74 63 |..T.:..^..lightc| 00002530 61 6c 63 25 0d 10 68 18 53 54 4d 46 44 20 52 31 |alc%..h.STMFD R1| 00002540 33 21 2c 7b 52 31 32 2c 52 31 34 7d 0d 10 72 13 |3!,{R12,R14}..r.| 00002550 4c 44 52 20 52 30 2c 5b 52 31 32 2c 23 34 5d 0d |LDR R0,[R12,#4].| 00002560 10 7c 12 41 44 44 20 52 31 32 2c 52 31 32 2c 52 |.|.ADD R12,R12,R| 00002570 30 0d 10 86 14 4c 44 52 20 52 31 31 2c 5b 52 31 |0....LDR R11,[R1| 00002580 32 5d 2c 23 34 0d 10 90 1a 4f 50 54 20 a4 61 64 |2],#4....OPT .ad| 00002590 72 28 31 30 2c 6d 61 74 72 69 78 25 2c 32 29 0d |r(10,matrix%,2).| 000025a0 10 9a 12 41 44 44 20 52 33 2c 52 31 30 2c 23 34 |...ADD R3,R10,#4| 000025b0 38 0d 10 a4 23 4c 44 4d 49 41 20 52 33 2c 7b 52 |8...#LDMIA R3,{R| 000025c0 33 2d 52 35 7d 3a 3b 20 4c 69 67 68 74 20 76 65 |3-R5}:; Light ve| 000025d0 63 74 6f 72 0d 10 ae 16 4c 44 4d 49 41 20 52 31 |ctor....LDMIA R1| 000025e0 30 21 2c 7b 52 30 2d 52 32 7d 0d 10 b8 10 4d 55 |0!,{R0-R2}....MU| 000025f0 4c 20 52 36 2c 52 33 2c 52 30 0d 10 c2 13 4d 4c |L R6,R3,R0....ML| 00002600 41 20 52 36 2c 52 34 2c 52 31 2c 52 36 0d 10 cc |A R6,R4,R1,R6...| 00002610 13 4d 4c 41 20 52 36 2c 52 35 2c 52 32 2c 52 36 |.MLA R6,R5,R2,R6| 00002620 0d 10 d6 16 4c 44 4d 49 41 20 52 31 30 21 2c 7b |....LDMIA R10!,{| 00002630 52 30 2d 52 32 7d 0d 10 e0 10 4d 55 4c 20 52 37 |R0-R2}....MUL R7| 00002640 2c 52 33 2c 52 30 0d 10 ea 13 4d 4c 41 20 52 37 |,R3,R0....MLA R7| 00002650 2c 52 34 2c 52 31 2c 52 37 0d 10 f4 13 4d 4c 41 |,R4,R1,R7....MLA| 00002660 20 52 37 2c 52 35 2c 52 32 2c 52 37 0d 10 fe 16 | R7,R5,R2,R7....| 00002670 4c 44 4d 49 41 20 52 31 30 21 2c 7b 52 30 2d 52 |LDMIA R10!,{R0-R| 00002680 32 7d 0d 11 08 10 4d 55 4c 20 52 38 2c 52 33 2c |2}....MUL R8,R3,| 00002690 52 30 0d 11 12 13 4d 4c 41 20 52 38 2c 52 34 2c |R0....MLA R8,R4,| 000026a0 52 31 2c 52 38 0d 11 1c 13 4d 4c 41 20 52 38 2c |R1,R8....MLA R8,| 000026b0 52 35 2c 52 32 2c 52 38 0d 11 26 15 4d 4f 56 20 |R5,R2,R8..&.MOV | 000026c0 52 33 2c 52 36 2c 41 53 52 23 56 43 25 0d 11 30 |R3,R6,ASR#VC%..0| 000026d0 15 4d 4f 56 20 52 34 2c 52 37 2c 41 53 52 23 56 |.MOV R4,R7,ASR#V| 000026e0 43 25 0d 11 3a 15 4d 4f 56 20 52 35 2c 52 38 2c |C%..:.MOV R5,R8,| 000026f0 41 53 52 23 56 43 25 0d 11 44 10 2e 76 65 63 74 |ASR#VC%..D..vect| 00002700 6f 72 6c 6f 6f 70 25 0d 11 4e 15 4c 44 4d 49 41 |orloop%..N.LDMIA| 00002710 20 52 31 32 2c 7b 52 30 2d 52 32 7d 0d 11 58 10 | R12,{R0-R2}..X.| 00002720 4d 55 4c 20 52 36 2c 52 30 2c 52 33 0d 11 62 13 |MUL R6,R0,R3..b.| 00002730 4d 4c 41 20 52 36 2c 52 31 2c 52 34 2c 52 36 0d |MLA R6,R1,R4,R6.| 00002740 11 6c 13 4d 4c 41 20 52 36 2c 52 32 2c 52 35 2c |.l.MLA R6,R2,R5,| 00002750 52 36 0d 11 76 1d 4d 4f 56 20 52 36 2c 52 36 2c |R6..v.MOV R6,R6,| 00002760 41 53 4c 23 43 43 25 2d 56 43 25 2d 56 43 25 0d |ASL#CC%-VC%-VC%.| 00002770 11 80 14 53 54 52 20 52 36 2c 5b 52 31 32 2c 23 |...STR R6,[R12,#| 00002780 31 32 5d 0d 11 8a 13 41 44 44 20 52 31 32 2c 52 |12]....ADD R12,R| 00002790 31 32 2c 23 31 36 0d 11 94 13 53 55 42 53 20 52 |12,#16....SUBS R| 000027a0 31 31 2c 52 31 31 2c 23 31 0d 11 9e 13 42 47 54 |11,R11,#1....BGT| 000027b0 20 76 65 63 74 6f 72 6c 6f 6f 70 25 0d 11 a8 17 | vectorloop%....| 000027c0 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 31 32 2c |LDMFD R13!,{R12,| 000027d0 50 43 7d 0d 11 b2 05 3a 0d 11 bc 0e 2e 6c 69 6e |PC}....:.....lin| 000027e0 65 63 61 6c 63 25 0d 11 c6 18 53 54 4d 46 44 20 |ecalc%....STMFD | 000027f0 52 31 33 21 2c 7b 52 31 32 2c 52 31 34 7d 0d 11 |R13!,{R12,R14}..| 00002800 d0 13 4c 44 52 20 52 30 2c 5b 52 31 32 2c 23 38 |..LDR R0,[R12,#8| 00002810 5d 0d 11 da 12 41 44 44 20 52 31 32 2c 52 31 32 |]....ADD R12,R12| 00002820 2c 52 30 0d 11 e4 14 4c 44 52 20 52 31 31 2c 5b |,R0....LDR R11,[| 00002830 52 31 32 5d 2c 23 34 0d 11 ee 0e 2e 6c 69 6e 65 |R12],#4.....line| 00002840 6c 6f 6f 70 25 0d 11 f8 15 4c 44 4d 49 41 20 52 |loop%....LDMIA R| 00002850 31 32 2c 7b 52 32 2c 52 34 7d 0d 12 02 11 41 44 |12,{R2,R4}....AD| 00002860 44 20 52 32 2c 52 31 32 2c 52 32 0d 12 0c 11 41 |D R2,R12,R2....A| 00002870 44 44 20 52 32 2c 52 32 2c 23 31 32 0d 12 16 14 |DD R2,R2,#12....| 00002880 4c 44 4d 49 41 20 52 32 2c 7b 52 32 2d 52 33 7d |LDMIA R2,{R2-R3}| 00002890 0d 12 20 11 41 44 44 20 52 34 2c 52 31 32 2c 52 |.. .ADD R4,R12,R| 000028a0 34 0d 12 2a 11 41 44 44 20 52 34 2c 52 34 2c 23 |4..*.ADD R4,R4,#| 000028b0 31 32 0d 12 34 14 4c 44 4d 49 41 20 52 34 2c 7b |12..4.LDMIA R4,{| 000028c0 52 34 2d 52 35 7d 0d 12 3e 10 53 55 42 20 52 34 |R4-R5}..>.SUB R4| 000028d0 2c 52 34 2c 52 32 0d 12 48 11 53 55 42 53 20 52 |,R4,R2..H.SUBS R| 000028e0 35 2c 52 35 2c 52 33 0d 12 52 12 41 44 44 4c 54 |5,R5,R3..R.ADDLT| 000028f0 20 52 32 2c 52 32 2c 52 34 0d 12 5c 12 41 44 44 | R2,R2,R4..\.ADD| 00002900 4c 54 20 52 33 2c 52 33 2c 52 35 0d 12 66 12 52 |LT R3,R3,R5..f.R| 00002910 53 42 4c 54 20 52 34 2c 52 34 2c 23 30 0d 12 70 |SBLT R4,R4,#0..p| 00002920 12 52 53 42 4c 54 20 52 35 2c 52 35 2c 23 30 0d |.RSBLT R5,R5,#0.| 00002930 12 7a 17 41 44 44 20 52 31 2c 52 33 2c 23 31 3c |.z.ADD R1,R3,#1<| 00002940 3c 53 43 25 2d 31 0d 12 84 15 4d 4f 56 20 52 31 |<SC%-1....MOV R1| 00002950 2c 52 31 2c 41 53 52 23 53 43 25 0d 12 8e 10 41 |,R1,ASR#SC%....A| 00002960 44 44 20 52 30 2c 52 33 2c 52 35 0d 12 98 17 53 |DD R0,R3,R5....S| 00002970 55 42 20 52 30 2c 52 30 2c 23 31 3c 3c 53 43 25 |UB R0,R0,#1<<SC%| 00002980 2d 31 0d 12 a2 15 4d 4f 56 20 52 30 2c 52 30 2c |-1....MOV R0,R0,| 00002990 41 53 52 23 53 43 25 0d 12 ac 0d 43 4d 50 20 52 |ASR#SC%....CMP R| 000029a0 30 2c 52 31 0d 12 b6 11 42 4c 54 20 73 6b 69 70 |0,R1....BLT skip| 000029b0 6c 69 6e 65 25 0d 12 c0 0d 4d 4f 56 20 52 36 2c |line%....MOV R6,| 000029c0 23 30 0d 12 ca 0d 4d 4f 56 20 52 37 2c 23 31 0d |#0....MOV R7,#1.| 000029d0 12 d4 0d 43 4d 50 20 52 34 2c 23 30 0d 12 de 12 |...CMP R4,#0....| 000029e0 52 53 42 4c 54 20 52 34 2c 52 34 2c 23 30 0d 12 |RSBLT R4,R4,#0..| 000029f0 e8 12 52 53 42 4c 54 20 52 37 2c 52 37 2c 23 30 |..RSBLT R7,R7,#0| 00002a00 0d 12 f2 19 5d 3a e3 55 25 3d 31 32 b8 31 88 2d |....]:.U%=12.1.-| 00002a10 31 3a 5b 4f 50 54 20 54 25 0d 12 fc 14 43 4d 50 |1:[OPT T%....CMP| 00002a20 20 52 35 2c 52 34 2c 41 53 52 23 55 25 0d 13 06 | R5,R4,ASR#U%...| 00002a30 19 53 55 42 4c 45 20 52 34 2c 52 34 2c 52 35 2c |.SUBLE R4,R4,R5,| 00002a40 41 53 4c 23 55 25 0d 13 10 1d 41 44 44 4c 45 20 |ASL#U%....ADDLE | 00002a50 52 36 2c 52 36 2c 52 37 2c 41 53 4c 23 53 43 25 |R6,R6,R7,ASL#SC%| 00002a60 2b 55 25 0d 13 1a 0f 5d 3a ed 3a 5b 4f 50 54 20 |+U%....]:.:[OPT | 00002a70 54 25 0d 13 24 11 53 55 42 53 20 52 34 2c 52 34 |T%..$.SUBS R4,R4| 00002a80 2c 52 35 0d 13 2e 1a 5d 3a e3 55 25 3d 53 43 25 |,R5....]:.U%=SC%| 00002a90 b8 30 88 2d 31 3a 5b 4f 50 54 20 54 25 0d 13 38 |.0.-1:[OPT T%..8| 00002aa0 12 53 55 42 47 45 20 52 34 2c 52 34 2c 52 35 0d |.SUBGE R4,R4,R5.| 00002ab0 13 42 19 41 44 44 47 45 20 52 36 2c 52 36 2c 52 |.B.ADDGE R6,R6,R| 00002ac0 37 2c 41 53 4c 23 55 25 0d 13 4c 17 41 44 44 53 |7,ASL#U%..L.ADDS| 00002ad0 20 52 34 2c 52 35 2c 52 34 2c 41 53 4c 23 31 0d | R4,R5,R4,ASL#1.| 00002ae0 13 56 0f 5d 3a ed 3a 5b 4f 50 54 20 54 25 0d 13 |.V.]:.:[OPT T%..| 00002af0 60 12 41 44 44 47 45 20 52 36 2c 52 36 2c 23 31 |`.ADDGE R6,R6,#1| 00002b00 0d 13 6a 18 52 53 42 20 52 33 2c 52 33 2c 52 31 |..j.RSB R3,R3,R1| 00002b10 2c 41 53 4c 23 53 43 25 0d 13 74 17 41 44 44 20 |,ASL#SC%..t.ADD | 00002b20 52 33 2c 52 33 2c 23 31 3c 3c 53 43 25 2d 31 0d |R3,R3,#1<<SC%-1.| 00002b30 13 7e 17 4d 4f 56 20 52 33 2c 52 33 2c 41 53 52 |.~.MOV R3,R3,ASR| 00002b40 23 53 43 25 2d 34 0d 13 88 10 4d 55 4c 20 52 34 |#SC%-4....MUL R4| 00002b50 2c 52 33 2c 52 36 0d 13 92 16 41 44 44 20 52 32 |,R3,R6....ADD R2| 00002b60 2c 52 32 2c 52 34 2c 41 53 52 23 34 0d 13 9c 0e |,R2,R4,ASR#4....| 00002b70 2e 73 6b 69 70 6c 69 6e 65 25 0d 13 a6 11 41 44 |.skipline%....AD| 00002b80 44 20 52 33 2c 52 31 32 2c 23 38 0d 13 b0 1a 53 |D R3,R12,#8....S| 00002b90 54 4d 49 41 20 52 33 2c 7b 52 30 2d 52 31 2c 52 |TMIA R3,{R0-R1,R| 00002ba0 32 2c 52 36 7d 0d 13 ba 13 41 44 44 20 52 31 32 |2,R6}....ADD R12| 00002bb0 2c 52 31 32 2c 23 32 34 0d 13 c4 13 53 55 42 53 |,R12,#24....SUBS| 00002bc0 20 52 31 31 2c 52 31 31 2c 23 31 0d 13 ce 11 42 | R11,R11,#1....B| 00002bd0 47 54 20 6c 69 6e 65 6c 6f 6f 70 25 0d 13 d8 17 |GT lineloop%....| 00002be0 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 31 32 2c |LDMFD R13!,{R12,| 00002bf0 50 43 7d 0d 13 e2 05 3a 0d 13 ec 0e 2e 70 6f 6c |PC}....:.....pol| 00002c00 79 63 61 6c 63 25 0d 13 f6 18 53 54 4d 46 44 20 |ycalc%....STMFD | 00002c10 52 31 33 21 2c 7b 52 31 32 2c 52 31 34 7d 0d 14 |R13!,{R12,R14}..| 00002c20 00 14 4c 44 52 20 52 30 2c 5b 52 31 32 2c 23 31 |..LDR R0,[R12,#1| 00002c30 32 5d 0d 14 0a 12 41 44 44 20 52 31 32 2c 52 31 |2]....ADD R12,R1| 00002c40 32 2c 52 30 0d 14 14 14 4c 44 52 20 52 31 31 2c |2,R0....LDR R11,| 00002c50 5b 52 31 32 5d 2c 23 34 0d 14 1e 18 4f 50 54 20 |[R12],#4....OPT | 00002c60 a4 61 64 72 28 31 30 2c 70 6c 6f 74 25 2c 32 29 |.adr(10,plot%,2)| 00002c70 0d 14 28 14 53 54 52 20 52 31 31 2c 5b 52 31 30 |..(.STR R11,[R10| 00002c80 5d 2c 23 34 0d 14 32 0e 2e 70 6f 6c 79 6c 6f 6f |],#4..2..polyloo| 00002c90 70 25 0d 14 3c 12 41 44 44 20 52 30 2c 52 31 32 |p%..<.ADD R0,R12| 00002ca0 2c 23 31 36 0d 14 46 34 4c 44 4d 49 41 20 52 30 |,#16..F4LDMIA R0| 00002cb0 2c 7b 52 30 2c 52 32 2c 52 34 7d 3a 3b 20 50 6f |,{R0,R2,R4}:; Po| 00002cc0 69 6e 74 73 20 74 6f 20 69 6e 74 65 72 70 6f 6c |ints to interpol| 00002cd0 61 74 65 20 66 72 6f 6d 0d 14 50 11 41 44 44 20 |ate from..P.ADD | 00002ce0 52 30 2c 52 31 32 2c 52 30 0d 14 5a 11 41 44 44 |R0,R12,R0..Z.ADD| 00002cf0 20 52 30 2c 52 30 2c 23 31 32 0d 14 64 17 4c 44 | R0,R0,#12..d.LD| 00002d00 4d 49 41 20 52 30 2c 7b 52 30 2d 52 31 2c 52 36 |MIA R0,{R0-R1,R6| 00002d10 7d 0d 14 6e 11 41 44 44 20 52 32 2c 52 31 32 2c |}..n.ADD R2,R12,| 00002d20 52 32 0d 14 78 11 41 44 44 20 52 32 2c 52 32 2c |R2..x.ADD R2,R2,| 00002d30 23 31 32 0d 14 82 17 4c 44 4d 49 41 20 52 32 2c |#12....LDMIA R2,| 00002d40 7b 52 32 2d 52 33 2c 52 37 7d 0d 14 8c 11 41 44 |{R2-R3,R7}....AD| 00002d50 44 20 52 34 2c 52 31 32 2c 52 34 0d 14 96 11 41 |D R4,R12,R4....A| 00002d60 44 44 20 52 34 2c 52 34 2c 23 31 32 0d 14 a0 17 |DD R4,R4,#12....| 00002d70 4c 44 4d 49 41 20 52 34 2c 7b 52 34 2d 52 35 2c |LDMIA R4,{R4-R5,| 00002d80 52 38 7d 0d 14 aa 10 41 44 52 20 52 39 2c 74 65 |R8}....ADR R9,te| 00002d90 6d 70 25 0d 14 b4 3b 53 54 4d 49 41 20 52 39 2c |mp%...;STMIA R9,| 00002da0 7b 52 30 2d 52 31 2c 52 36 2d 52 38 7d 3a 3b 20 |{R0-R1,R6-R8}:; | 00002db0 4f 72 69 67 69 6e 2c 20 4e 65 61 72 6e 65 73 73 |Origin, Nearness| 00002dc0 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 0d 14 | for later use..| 00002dd0 be 1b 53 55 42 20 52 32 2c 52 32 2c 52 30 3a 3b |..SUB R2,R2,R0:;| 00002de0 20 44 58 31 3c 3c 53 43 25 0d 14 c8 10 53 55 42 | DX1<<SC%....SUB| 00002df0 20 52 33 2c 52 33 2c 52 31 0d 14 d2 1b 53 55 42 | R3,R3,R1....SUB| 00002e00 20 52 34 2c 52 34 2c 52 30 3a 3b 20 44 58 32 3c | R4,R4,R0:; DX2<| 00002e10 3c 53 43 25 0d 14 dc 10 53 55 42 20 52 35 2c 52 |<SC%....SUB R5,R| 00002e20 35 2c 52 31 0d 14 e6 28 3b 20 52 36 2c 52 37 20 |5,R1...(; R6,R7 | 00002e30 3d 20 41 72 65 61 20 3d 20 28 44 58 31 2c 44 59 |= Area = (DX1,DY| 00002e40 31 29 78 28 44 58 32 2c 44 59 32 29 0d 14 f0 14 |1)x(DX2,DY2)....| 00002e50 4d 4f 56 20 52 30 2c 52 32 2c 41 53 52 23 31 36 |MOV R0,R2,ASR#16| 00002e60 0d 14 fa 14 4d 4f 56 20 52 31 2c 52 35 2c 41 53 |....MOV R1,R5,AS| 00002e70 52 23 31 36 0d 15 04 10 4d 55 4c 20 52 37 2c 52 |R#16....MUL R7,R| 00002e80 30 2c 52 31 0d 15 0e 17 53 55 42 20 52 30 2c 52 |0,R1....SUB R0,R| 00002e90 32 2c 52 30 2c 41 53 4c 23 31 36 0d 15 18 10 4d |2,R0,ASL#16....M| 00002ea0 55 4c 20 52 38 2c 52 30 2c 52 31 0d 15 22 14 4d |UL R8,R0,R1..".M| 00002eb0 4f 56 20 52 36 2c 52 38 2c 41 53 4c 23 31 36 0d |OV R6,R8,ASL#16.| 00002ec0 15 2c 17 41 44 44 20 52 37 2c 52 37 2c 52 38 2c |.,.ADD R7,R7,R8,| 00002ed0 41 53 52 23 31 36 0d 15 36 17 53 55 42 20 52 31 |ASR#16..6.SUB R1| 00002ee0 2c 52 35 2c 52 31 2c 41 53 4c 23 31 36 0d 15 40 |,R5,R1,ASL#16..@| 00002ef0 10 4d 55 4c 20 52 38 2c 52 30 2c 52 31 0d 15 4a |.MUL R8,R0,R1..J| 00002f00 11 41 44 44 53 20 52 36 2c 52 36 2c 52 38 0d 15 |.ADDS R6,R6,R8..| 00002f10 54 10 41 44 43 20 52 37 2c 52 37 2c 23 30 0d 15 |T.ADC R7,R7,#0..| 00002f20 5e 14 4d 4f 56 20 52 30 2c 52 32 2c 41 53 52 23 |^.MOV R0,R2,ASR#| 00002f30 31 36 0d 15 68 10 4d 55 4c 20 52 38 2c 52 30 2c |16..h.MUL R8,R0,| 00002f40 52 31 0d 15 72 18 41 44 44 53 20 52 36 2c 52 36 |R1..r.ADDS R6,R6| 00002f50 2c 52 38 2c 41 53 4c 23 31 36 0d 15 7c 17 41 44 |,R8,ASL#16..|.AD| 00002f60 43 20 52 37 2c 52 37 2c 52 38 2c 41 53 52 23 31 |C R7,R7,R8,ASR#1| 00002f70 36 0d 15 86 14 4d 4f 56 20 52 30 2c 52 33 2c 41 |6....MOV R0,R3,A| 00002f80 53 52 23 31 36 0d 15 90 14 4d 4f 56 20 52 31 2c |SR#16....MOV R1,| 00002f90 52 34 2c 41 53 52 23 31 36 0d 15 9a 10 4d 55 4c |R4,ASR#16....MUL| 00002fa0 20 52 38 2c 52 30 2c 52 31 0d 15 a4 10 53 55 42 | R8,R0,R1....SUB| 00002fb0 20 52 37 2c 52 37 2c 52 38 0d 15 ae 17 53 55 42 | R7,R7,R8....SUB| 00002fc0 20 52 30 2c 52 33 2c 52 30 2c 41 53 4c 23 31 36 | R0,R3,R0,ASL#16| 00002fd0 0d 15 b8 10 4d 55 4c 20 52 38 2c 52 30 2c 52 31 |....MUL R8,R0,R1| 00002fe0 0d 15 c2 18 53 55 42 53 20 52 36 2c 52 36 2c 52 |....SUBS R6,R6,R| 00002ff0 38 2c 41 53 4c 23 31 36 0d 15 cc 17 53 42 43 20 |8,ASL#16....SBC | 00003000 52 37 2c 52 37 2c 52 38 2c 41 53 52 23 31 36 0d |R7,R7,R8,ASR#16.| 00003010 15 d6 17 53 55 42 20 52 31 2c 52 34 2c 52 31 2c |...SUB R1,R4,R1,| 00003020 41 53 4c 23 31 36 0d 15 e0 10 4d 55 4c 20 52 38 |ASL#16....MUL R8| 00003030 2c 52 30 2c 52 31 0d 15 ea 11 53 55 42 53 20 52 |,R0,R1....SUBS R| 00003040 36 2c 52 36 2c 52 38 0d 15 f4 10 53 42 43 20 52 |6,R6,R8....SBC R| 00003050 37 2c 52 37 2c 23 30 0d 15 fe 14 4d 4f 56 20 52 |7,R7,#0....MOV R| 00003060 30 2c 52 33 2c 41 53 52 23 31 36 0d 16 08 10 4d |0,R3,ASR#16....M| 00003070 55 4c 20 52 38 2c 52 30 2c 52 31 0d 16 12 18 53 |UL R8,R0,R1....S| 00003080 55 42 53 20 52 36 2c 52 36 2c 52 38 2c 41 53 4c |UBS R6,R6,R8,ASL| 00003090 23 31 36 0d 16 1c 17 53 42 43 20 52 37 2c 52 37 |#16....SBC R7,R7| 000030a0 2c 52 38 2c 41 53 52 23 31 36 0d 16 26 17 4f 50 |,R8,ASR#16..&.OP| 000030b0 54 20 a4 61 64 72 28 30 2c 74 65 73 74 25 2c 32 |T .adr(0,test%,2| 000030c0 29 0d 16 30 1a 53 54 4d 49 41 20 52 30 2c 7b 52 |)..0.STMIA R0,{R| 000030d0 32 2d 52 35 2c 52 36 2d 52 37 7d 0d 16 3a 0d 4d |2-R5,R6-R7}..:.M| 000030e0 4f 56 20 52 38 2c 23 31 0d 16 44 0d 43 4d 50 20 |OV R8,#1..D.CMP | 000030f0 52 37 2c 23 30 0d 16 4e 0f 43 4d 50 45 51 20 52 |R7,#0..N.CMPEQ R| 00003100 36 2c 23 30 0d 16 58 11 42 47 45 20 64 6f 6e 74 |6,#0..X.BGE dont| 00003110 66 6c 69 70 25 0d 16 62 10 52 53 42 20 52 38 2c |flip%..b.RSB R8,| 00003120 52 38 2c 23 30 0d 16 6c 11 52 53 42 53 20 52 36 |R8,#0..l.RSBS R6| 00003130 2c 52 36 2c 23 30 0d 16 76 10 52 53 43 20 52 37 |,R6,#0..v.RSC R7| 00003140 2c 52 37 2c 23 30 0d 16 80 0e 2e 64 6f 6e 74 66 |,R7,#0.....dontf| 00003150 6c 69 70 25 0d 16 8a 3f 3b 20 52 35 20 3d 20 44 |lip%...?; R5 = D| 00003160 46 31 2f 44 58 20 3d 20 28 31 2c 30 29 78 28 44 |F1/DX = (1,0)x(D| 00003170 58 32 2c 44 59 32 29 20 2f 20 28 44 58 31 2c 44 |X2,DY2) / (DX1,D| 00003180 59 31 29 78 28 44 58 32 2c 44 59 32 29 20 3c 3c |Y1)x(DX2,DY2) <<| 00003190 46 43 25 0d 16 94 0d 4d 4f 56 20 52 39 2c 52 35 |FC%....MOV R9,R5| 000031a0 0d 16 9e 0f 42 4c 20 6c 6f 6e 67 64 69 76 25 0d |....BL longdiv%.| 000031b0 16 a8 0d 4d 4f 56 20 52 35 2c 52 39 0d 16 b2 3f |...MOV R5,R9...?| 000031c0 3b 20 52 34 20 3d 20 44 46 31 2f 44 59 20 3d 20 |; R4 = DF1/DY = | 000031d0 28 30 2c 31 29 78 28 44 58 32 2c 44 59 32 29 20 |(0,1)x(DX2,DY2) | 000031e0 2f 20 28 44 58 31 2c 44 59 31 29 78 28 44 58 32 |/ (DX1,DY1)x(DX2| 000031f0 2c 44 59 32 29 20 3c 3c 46 43 25 0d 16 bc 10 52 |,DY2) <<FC%....R| 00003200 53 42 20 52 39 2c 52 34 2c 23 30 0d 16 c6 0f 42 |SB R9,R4,#0....B| 00003210 4c 20 6c 6f 6e 67 64 69 76 25 0d 16 d0 0d 4d 4f |L longdiv%....MO| 00003220 56 20 52 34 2c 52 39 0d 16 da 3f 3b 20 52 33 20 |V R4,R9...?; R3 | 00003230 3d 20 44 46 32 2f 44 58 20 3d 20 28 44 58 31 2c |= DF2/DX = (DX1,| 00003240 44 59 31 29 78 28 31 2c 30 29 20 2f 20 28 44 58 |DY1)x(1,0) / (DX| 00003250 31 2c 44 59 31 29 78 28 44 58 32 2c 44 59 32 29 |1,DY1)x(DX2,DY2)| 00003260 20 3c 3c 46 43 25 0d 16 e4 10 52 53 42 20 52 39 | <<FC%....RSB R9| 00003270 2c 52 33 2c 23 30 0d 16 ee 0f 42 4c 20 6c 6f 6e |,R3,#0....BL lon| 00003280 67 64 69 76 25 0d 16 f8 0d 4d 4f 56 20 52 33 2c |gdiv%....MOV R3,| 00003290 52 39 0d 17 02 3f 3b 20 52 32 20 3d 20 44 46 32 |R9...?; R2 = DF2| 000032a0 2f 44 59 20 3d 20 28 44 58 31 2c 44 59 31 29 78 |/DY = (DX1,DY1)x| 000032b0 28 30 2c 31 29 20 2f 20 28 44 58 31 2c 44 59 31 |(0,1) / (DX1,DY1| 000032c0 29 78 28 44 58 32 2c 44 59 32 29 20 3c 3c 46 43 |)x(DX2,DY2) <<FC| 000032d0 25 0d 17 0c 0d 4d 4f 56 20 52 39 2c 52 32 0d 17 |%....MOV R9,R2..| 000032e0 16 0f 42 4c 20 6c 6f 6e 67 64 69 76 25 0d 17 20 |..BL longdiv%.. | 000032f0 0d 4d 4f 56 20 52 32 2c 52 39 0d 17 2a 1a 4f 50 |.MOV R2,R9..*.OP| 00003300 54 20 a4 61 64 72 28 30 2c 74 65 73 74 25 2b 33 |T .adr(0,test%+3| 00003310 32 2c 32 29 0d 17 34 1d 53 54 4d 49 41 20 52 30 |2,2)..4.STMIA R0| 00003320 2c 7b 52 32 2d 52 35 2c 52 36 2d 52 37 2c 52 38 |,{R2-R5,R6-R7,R8| 00003330 7d 0d 17 3e 25 3b 20 43 61 6c 63 75 6c 61 74 69 |}..>%; Calculati| 00003340 6f 6e 20 6f 66 20 6e 65 61 72 6e 65 73 73 20 2d |on of nearness -| 00003350 64 78 20 2d 64 79 0d 17 48 12 41 44 52 20 52 39 |dx -dy..H.ADR R9| 00003360 2c 74 65 6d 70 25 2b 38 0d 17 52 14 4c 44 4d 49 |,temp%+8..R.LDMI| 00003370 41 20 52 39 2c 7b 52 36 2d 52 38 7d 0d 17 5c 0c |A R9,{R6-R8}..\.| 00003380 42 4c 20 6d 61 70 71 25 0d 17 66 12 41 44 44 20 |BL mapq%..f.ADD | 00003390 52 39 2c 52 31 30 2c 23 31 36 0d 17 70 14 53 54 |R9,R10,#16..p.ST| 000033a0 4d 49 41 20 52 39 2c 7b 52 36 2d 52 38 7d 0d 17 |MIA R9,{R6-R8}..| 000033b0 7a 1d 3b 20 54 79 70 65 20 63 68 65 63 6b 69 6e |z.; Type checkin| 000033c0 67 20 67 6f 65 73 20 68 65 72 65 0d 17 84 12 41 |g goes here....A| 000033d0 44 44 20 52 39 2c 52 31 32 2c 23 32 38 0d 17 8e |DD R9,R12,#28...| 000033e0 14 4c 44 4d 49 41 20 52 39 2c 7b 52 36 2d 52 38 |.LDMIA R9,{R6-R8| 000033f0 7d 0d 17 98 11 41 44 44 20 52 36 2c 52 31 32 2c |}....ADD R6,R12,| 00003400 52 36 0d 17 a2 13 4c 44 52 20 52 36 2c 5b 52 36 |R6....LDR R6,[R6| 00003410 2c 23 31 32 5d 0d 17 ac 11 41 44 44 20 52 37 2c |,#12]....ADD R7,| 00003420 52 31 32 2c 52 37 0d 17 b6 13 4c 44 52 20 52 37 |R12,R7....LDR R7| 00003430 2c 5b 52 37 2c 23 31 32 5d 0d 17 c0 11 41 44 44 |,[R7,#12]....ADD| 00003440 20 52 38 2c 52 31 32 2c 52 38 0d 17 ca 13 4c 44 | R8,R12,R8....LD| 00003450 52 20 52 38 2c 5b 52 38 2c 23 31 32 5d 0d 17 d4 |R R8,[R8,#12]...| 00003460 0c 42 4c 20 6d 61 70 71 25 0d 17 de 22 4c 44 52 |.BL mapq%..."LDR| 00003470 20 52 30 2c 5b 52 31 32 2c 23 36 34 5d 3a 3b 20 | R0,[R12,#64]:; | 00003480 43 6f 6c 6f 75 72 20 62 61 73 65 0d 17 e8 12 4c |Colour base....L| 00003490 44 52 20 52 31 2c 5b 52 30 5d 2c 23 34 0d 17 f2 |DR R1,[R0],#4...| 000034a0 14 53 54 52 20 52 30 2c 5b 52 31 30 2c 23 33 32 |.STR R0,[R10,#32| 000034b0 5d 0d 17 fc 10 4d 55 4c 20 52 36 2c 52 31 2c 52 |]....MUL R6,R1,R| 000034c0 36 0d 18 06 10 4d 55 4c 20 52 37 2c 52 31 2c 52 |6....MUL R7,R1,R| 000034d0 37 0d 18 10 10 4d 55 4c 20 52 38 2c 52 31 2c 52 |7....MUL R8,R1,R| 000034e0 38 0d 18 1a 12 41 44 44 20 52 39 2c 52 31 30 2c |8....ADD R9,R10,| 000034f0 23 33 36 0d 18 24 14 53 54 4d 49 41 20 52 39 2c |#36..$.STMIA R9,| 00003500 7b 52 36 2d 52 38 7d 0d 18 2e 25 4c 44 52 20 52 |{R6-R8}...%LDR R| 00003510 37 2c 5b 52 31 32 2c 23 34 5d 3a 3b 20 4e 75 6d |7,[R12,#4]:; Num| 00003520 62 65 72 20 6f 66 20 6c 69 6e 65 73 0d 18 38 14 |ber of lines..8.| 00003530 53 54 52 20 52 37 2c 5b 52 31 30 2c 23 32 38 5d |STR R7,[R10,#28]| 00003540 0d 18 42 2c 3b 20 43 6f 70 79 20 6c 69 6e 65 73 |..B,; Copy lines| 00003550 20 61 6e 64 20 77 6f 72 6b 20 6f 75 74 20 74 6f | and work out to| 00003560 70 20 61 6e 64 20 62 6f 74 74 6f 6d 0d 18 4c 12 |p and bottom..L.| 00003570 41 44 44 20 52 39 2c 52 31 32 2c 23 38 30 0d 18 |ADD R9,R12,#80..| 00003580 56 12 41 44 44 20 52 38 2c 52 31 30 2c 23 39 36 |V.ADD R8,R10,#96| 00003590 0d 18 60 12 4c 44 52 20 52 30 2c 5b 52 39 5d 2c |..`.LDR R0,[R9],| 000035a0 23 34 0d 18 6a 11 41 44 44 20 52 30 2c 52 31 32 |#4..j.ADD R0,R12| 000035b0 2c 52 30 0d 18 74 10 41 44 44 20 52 30 2c 52 30 |,R0..t.ADD R0,R0| 000035c0 2c 23 38 0d 18 7e 1a 4c 44 4d 49 41 20 52 30 2c |,#8..~.LDMIA R0,| 000035d0 7b 52 30 2d 52 31 2c 52 34 2d 52 35 7d 0d 18 88 |{R0-R1,R4-R5}...| 000035e0 1b 53 54 4d 49 41 20 52 38 21 2c 7b 52 30 2d 52 |.STMIA R8!,{R0-R| 000035f0 31 2c 52 34 2d 52 35 7d 0d 18 92 10 53 55 42 20 |1,R4-R5}....SUB | 00003600 52 37 2c 52 37 2c 23 31 0d 18 9c 0e 2e 6c 69 6e |R7,R7,#1.....lin| 00003610 65 6c 6f 6f 70 25 0d 18 a6 12 4c 44 52 20 52 32 |eloop%....LDR R2| 00003620 2c 5b 52 39 5d 2c 23 34 0d 18 b0 11 41 44 44 20 |,[R9],#4....ADD | 00003630 52 32 2c 52 31 32 2c 52 32 0d 18 ba 10 41 44 44 |R2,R12,R2....ADD| 00003640 20 52 32 2c 52 32 2c 23 38 0d 18 c4 14 4c 44 4d | R2,R2,#8....LDM| 00003650 49 41 20 52 32 2c 7b 52 32 2d 52 35 7d 0d 18 ce |IA R2,{R2-R5}...| 00003660 15 53 54 4d 49 41 20 52 38 21 2c 7b 52 32 2d 52 |.STMIA R8!,{R2-R| 00003670 35 7d 0d 18 d8 0d 43 4d 50 20 52 32 2c 52 30 0d |5}....CMP R2,R0.| 00003680 18 e2 0f 4d 4f 56 47 54 20 52 30 2c 52 32 0d 18 |...MOVGT R0,R2..| 00003690 ec 0d 43 4d 50 20 52 33 2c 52 31 0d 18 f6 0f 4d |..CMP R3,R1....M| 000036a0 4f 56 4c 54 20 52 31 2c 52 33 0d 19 00 11 53 55 |OVLT R1,R3....SU| 000036b0 42 53 20 52 37 2c 52 37 2c 23 31 0d 19 0a 11 42 |BS R7,R7,#1....B| 000036c0 47 54 20 6c 69 6e 65 6c 6f 6f 70 25 0d 19 14 2d |GT lineloop%...-| 000036d0 53 55 42 20 52 32 2c 52 38 2c 52 31 30 3a 3b 20 |SUB R2,R8,R10:; | 000036e0 4f 66 66 73 65 74 20 74 6f 20 6e 65 78 74 20 70 |Offset to next p| 000036f0 6c 6f 74 20 65 6e 74 72 79 0d 19 1e 20 4c 44 52 |lot entry... LDR| 00003700 20 52 33 2c 5b 52 31 32 2c 23 31 32 5d 3a 3b 20 | R3,[R12,#12]:; | 00003710 46 69 6c 6c 20 74 79 70 65 0d 19 28 35 53 54 4d |Fill type..(5STM| 00003720 49 41 20 52 31 30 2c 7b 52 30 2d 52 31 2c 52 32 |IA R10,{R0-R1,R2| 00003730 2c 52 33 7d 3a 3b 20 54 6f 70 2c 20 42 6f 74 74 |,R3}:; Top, Bott| 00003740 6f 6d 2c 20 4e 65 78 74 2c 20 54 79 70 65 0d 19 |om, Next, Type..| 00003750 32 12 41 44 44 20 52 31 30 2c 52 31 30 2c 52 32 |2.ADD R10,R10,R2| 00003760 0d 19 3c 10 3b 20 55 70 64 61 74 65 20 52 31 32 |..<.; Update R12| 00003770 0d 19 46 10 4c 44 52 20 52 30 2c 5b 52 31 32 5d |..F.LDR R0,[R12]| 00003780 0d 19 50 12 41 44 44 20 52 31 32 2c 52 31 32 2c |..P.ADD R12,R12,| 00003790 52 30 0d 19 5a 13 53 55 42 53 20 52 31 31 2c 52 |R0..Z.SUBS R11,R| 000037a0 31 31 2c 23 31 0d 19 64 11 42 47 54 20 70 6f 6c |11,#1..d.BGT pol| 000037b0 79 6c 6f 6f 70 25 0d 19 6e 17 4c 44 4d 46 44 20 |yloop%..n.LDMFD | 000037c0 52 31 33 21 2c 7b 52 31 32 2c 50 43 7d 0d 19 78 |R13!,{R12,PC}..x| 000037d0 05 3a 0d 19 82 0a 2e 74 65 6d 70 25 0d 19 8c 1f |.:.....temp%....| 000037e0 45 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 |EQUD 0:EQUD 0:EQ| 000037f0 55 44 20 30 3a 45 51 55 44 20 30 0d 19 96 1f 45 |UD 0:EQUD 0....E| 00003800 51 55 44 20 30 3a 45 51 55 44 20 30 3a 45 51 55 |QUD 0:EQUD 0:EQU| 00003810 44 20 30 3a 45 51 55 44 20 30 0d 19 a0 05 3a 0d |D 0:EQUD 0....:.| 00003820 19 aa 21 3b 20 45 78 70 65 63 74 73 20 74 65 6d |..!; Expects tem| 00003830 70 25 20 74 6f 20 68 61 76 65 20 58 31 2c 59 31 |p% to have X1,Y1| 00003840 0d 19 b4 2e 3b 20 45 78 70 65 63 74 73 20 52 35 |....; Expects R5| 00003850 2c 52 34 2c 52 33 2c 52 32 20 74 6f 20 62 65 20 |,R4,R3,R2 to be | 00003860 6d 61 70 70 69 6e 67 20 6d 61 74 72 69 78 0d 19 |mapping matrix..| 00003870 be 25 3b 20 45 78 70 65 63 74 73 20 52 36 2c 52 |.%; Expects R6,R| 00003880 37 2c 52 38 20 74 6f 20 62 65 20 51 31 2c 51 32 |7,R8 to be Q1,Q2| 00003890 2c 51 33 0d 19 c8 1b 3b 20 41 6e 73 77 65 72 20 |,Q3....; Answer | 000038a0 69 73 20 69 6e 20 52 36 2c 52 37 2c 52 38 0d 19 |is in R6,R7,R8..| 000038b0 d2 17 3b 20 43 6f 72 72 75 70 74 73 20 52 30 2c |..; Corrupts R0,| 000038c0 52 31 2c 52 39 0d 19 dc 0a 2e 6d 61 70 71 25 0d |R1,R9.....mapq%.| 000038d0 19 e6 14 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 |...STMFD R13!,{R| 000038e0 31 34 7d 0d 19 f0 17 4d 4f 56 20 52 36 2c 52 36 |14}....MOV R6,R6| 000038f0 2c 41 53 52 23 53 43 25 2d 34 0d 19 fa 17 4d 4f |,ASR#SC%-4....MO| 00003900 56 20 52 37 2c 52 37 2c 41 53 52 23 53 43 25 2d |V R7,R7,ASR#SC%-| 00003910 34 0d 1a 04 17 4d 4f 56 20 52 38 2c 52 38 2c 41 |4....MOV R8,R8,A| 00003920 53 52 23 53 43 25 2d 34 0d 1a 0e 10 53 55 42 20 |SR#SC%-4....SUB | 00003930 52 37 2c 52 37 2c 52 36 0d 1a 18 10 53 55 42 20 |R7,R7,R6....SUB | 00003940 52 38 2c 52 38 2c 52 36 0d 1a 22 17 4d 4f 56 20 |R8,R8,R6..".MOV | 00003950 52 36 2c 52 36 2c 41 53 4c 23 53 43 25 2d 34 0d |R6,R6,ASL#SC%-4.| 00003960 1a 2c 25 3b 20 44 51 2f 44 58 20 3d 20 44 51 31 |.,%; DQ/DX = DQ1| 00003970 2a 44 46 31 2f 44 58 20 2b 20 44 51 32 2a 44 46 |*DF1/DX + DQ2*DF| 00003980 32 2f 44 58 0d 1a 36 14 4d 4f 56 20 52 39 2c 52 |2/DX..6.MOV R9,R| 00003990 35 2c 41 53 52 23 31 36 0d 1a 40 11 4d 55 4c 20 |5,ASR#16..@.MUL | 000039a0 52 31 34 2c 52 39 2c 52 37 0d 1a 4a 21 4d 4f 56 |R14,R9,R7..J!MOV| 000039b0 20 52 30 2c 52 31 34 2c 41 53 4c 23 28 53 43 25 | R0,R14,ASL#(SC%| 000039c0 2d 34 29 2d 46 43 25 2b 31 36 0d 1a 54 17 53 55 |-4)-FC%+16..T.SU| 000039d0 42 20 52 39 2c 52 35 2c 52 39 2c 41 53 4c 23 31 |B R9,R5,R9,ASL#1| 000039e0 36 0d 1a 5e 11 4d 55 4c 20 52 31 34 2c 52 39 2c |6..^.MUL R14,R9,| 000039f0 52 37 0d 1a 68 21 41 44 44 20 52 30 2c 52 30 2c |R7..h!ADD R0,R0,| 00003a00 52 31 34 2c 41 53 52 23 46 43 25 2d 28 53 43 25 |R14,ASR#FC%-(SC%| 00003a10 2d 34 29 0d 1a 72 14 4d 4f 56 20 52 39 2c 52 33 |-4)..r.MOV R9,R3| 00003a20 2c 41 53 52 23 31 36 0d 1a 7c 11 4d 55 4c 20 52 |,ASR#16..|.MUL R| 00003a30 31 34 2c 52 39 2c 52 38 0d 1a 86 24 41 44 44 20 |14,R9,R8...$ADD | 00003a40 52 30 2c 52 30 2c 52 31 34 2c 41 53 4c 23 28 53 |R0,R0,R14,ASL#(S| 00003a50 43 25 2d 34 29 2d 46 43 25 2b 31 36 0d 1a 90 17 |C%-4)-FC%+16....| 00003a60 53 55 42 20 52 39 2c 52 33 2c 52 39 2c 41 53 4c |SUB R9,R3,R9,ASL| 00003a70 23 31 36 0d 1a 9a 11 4d 55 4c 20 52 31 34 2c 52 |#16....MUL R14,R| 00003a80 39 2c 52 38 0d 1a a4 21 41 44 44 20 52 30 2c 52 |9,R8...!ADD R0,R| 00003a90 30 2c 52 31 34 2c 41 53 52 23 46 43 25 2d 28 53 |0,R14,ASR#FC%-(S| 00003aa0 43 25 2d 34 29 0d 1a ae 25 3b 20 44 51 2f 44 59 |C%-4)...%; DQ/DY| 00003ab0 20 3d 20 44 51 31 2a 44 46 31 2f 44 59 20 2b 20 | = DQ1*DF1/DY + | 00003ac0 44 51 32 2a 44 46 32 2f 44 59 0d 1a b8 14 4d 4f |DQ2*DF2/DY....MO| 00003ad0 56 20 52 39 2c 52 34 2c 41 53 52 23 31 36 0d 1a |V R9,R4,ASR#16..| 00003ae0 c2 11 4d 55 4c 20 52 31 34 2c 52 39 2c 52 37 0d |..MUL R14,R9,R7.| 00003af0 1a cc 21 4d 4f 56 20 52 31 2c 52 31 34 2c 41 53 |..!MOV R1,R14,AS| 00003b00 4c 23 28 53 43 25 2d 34 29 2d 46 43 25 2b 31 36 |L#(SC%-4)-FC%+16| 00003b10 0d 1a d6 17 53 55 42 20 52 39 2c 52 34 2c 52 39 |....SUB R9,R4,R9| 00003b20 2c 41 53 4c 23 31 36 0d 1a e0 11 4d 55 4c 20 52 |,ASL#16....MUL R| 00003b30 31 34 2c 52 39 2c 52 37 0d 1a ea 21 41 44 44 20 |14,R9,R7...!ADD | 00003b40 52 31 2c 52 31 2c 52 31 34 2c 41 53 52 23 46 43 |R1,R1,R14,ASR#FC| 00003b50 25 2d 28 53 43 25 2d 34 29 0d 1a f4 14 4d 4f 56 |%-(SC%-4)....MOV| 00003b60 20 52 39 2c 52 32 2c 41 53 52 23 31 36 0d 1a fe | R9,R2,ASR#16...| 00003b70 11 4d 55 4c 20 52 31 34 2c 52 39 2c 52 38 0d 1b |.MUL R14,R9,R8..| 00003b80 08 24 41 44 44 20 52 31 2c 52 31 2c 52 31 34 2c |.$ADD R1,R1,R14,| 00003b90 41 53 4c 23 28 53 43 25 2d 34 29 2d 46 43 25 2b |ASL#(SC%-4)-FC%+| 00003ba0 31 36 0d 1b 12 17 53 55 42 20 52 39 2c 52 32 2c |16....SUB R9,R2,| 00003bb0 52 39 2c 41 53 4c 23 31 36 0d 1b 1c 11 4d 55 4c |R9,ASL#16....MUL| 00003bc0 20 52 31 34 2c 52 39 2c 52 38 0d 1b 26 21 41 44 | R14,R9,R8..&!AD| 00003bd0 44 20 52 31 2c 52 31 2c 52 31 34 2c 41 53 52 23 |D R1,R1,R14,ASR#| 00003be0 46 43 25 2d 28 53 43 25 2d 34 29 0d 1b 30 1a 4d |FC%-(SC%-4)..0.M| 00003bf0 4f 56 20 52 37 2c 52 30 3a 3b 20 44 5a 2f 44 58 |OV R7,R0:; DZ/DX| 00003c00 3c 3c 53 43 25 0d 1b 3a 1a 4d 4f 56 20 52 38 2c |<<SC%..:.MOV R8,| 00003c10 52 31 3a 3b 20 44 5a 2f 44 59 3c 3c 53 43 25 0d |R1:; DZ/DY<<SC%.| 00003c20 1b 44 20 3b 20 51 30 20 3d 20 51 20 2d 20 58 2a |.D ; Q0 = Q - X*| 00003c30 44 51 2f 44 58 20 2d 20 59 2a 44 51 2f 44 59 0d |DQ/DX - Y*DQ/DY.| 00003c40 1b 4e 10 41 44 52 20 52 39 2c 74 65 6d 70 25 0d |.N.ADR R9,temp%.| 00003c50 1b 58 14 4c 44 4d 49 41 20 52 39 2c 7b 52 30 2d |.X.LDMIA R9,{R0-| 00003c60 52 31 7d 0d 1b 62 15 4d 4f 56 20 52 39 2c 52 30 |R1}..b.MOV R9,R0| 00003c70 2c 41 53 52 23 53 43 25 0d 1b 6c 11 4d 55 4c 20 |,ASR#SC%..l.MUL | 00003c80 52 31 34 2c 52 39 2c 52 37 0d 1b 76 11 53 55 42 |R14,R9,R7..v.SUB| 00003c90 20 52 36 2c 52 36 2c 52 31 34 0d 1b 80 18 53 55 | R6,R6,R14....SU| 00003ca0 42 20 52 39 2c 52 30 2c 52 39 2c 41 53 4c 23 53 |B R9,R0,R9,ASL#S| 00003cb0 43 25 0d 1b 8a 15 4d 4f 56 20 52 31 34 2c 52 37 |C%....MOV R14,R7| 00003cc0 2c 41 53 52 23 31 36 0d 1b 94 12 4d 55 4c 20 52 |,ASR#16....MUL R| 00003cd0 31 34 2c 52 39 2c 52 31 34 0d 1b 9e 1c 53 55 42 |14,R9,R14....SUB| 00003ce0 20 52 36 2c 52 36 2c 52 31 34 2c 41 53 4c 23 31 | R6,R6,R14,ASL#1| 00003cf0 36 2d 53 43 25 0d 1b a8 15 4d 4f 56 20 52 39 2c |6-SC%....MOV R9,| 00003d00 52 31 2c 41 53 52 23 53 43 25 0d 1b b2 11 4d 55 |R1,ASR#SC%....MU| 00003d10 4c 20 52 31 34 2c 52 39 2c 52 38 0d 1b bc 11 53 |L R14,R9,R8....S| 00003d20 55 42 20 52 36 2c 52 36 2c 52 31 34 0d 1b c6 18 |UB R6,R6,R14....| 00003d30 53 55 42 20 52 39 2c 52 31 2c 52 39 2c 41 53 4c |SUB R9,R1,R9,ASL| 00003d40 23 53 43 25 0d 1b d0 15 4d 4f 56 20 52 31 34 2c |#SC%....MOV R14,| 00003d50 52 38 2c 41 53 52 23 31 36 0d 1b da 12 4d 55 4c |R8,ASR#16....MUL| 00003d60 20 52 31 34 2c 52 39 2c 52 31 34 0d 1b e4 1c 53 | R14,R9,R14....S| 00003d70 55 42 20 52 36 2c 52 36 2c 52 31 34 2c 41 53 4c |UB R6,R6,R14,ASL| 00003d80 23 31 36 2d 53 43 25 0d 1b ee 16 41 44 44 20 52 |#16-SC%....ADD R| 00003d90 36 2c 52 36 2c 52 37 2c 41 53 52 23 31 0d 1b f8 |6,R6,R7,ASR#1...| 00003da0 16 41 44 44 20 52 36 2c 52 36 2c 52 38 2c 41 53 |.ADD R6,R6,R8,AS| 00003db0 52 23 31 0d 1c 02 13 4c 44 4d 46 44 20 52 31 33 |R#1....LDMFD R13| 00003dc0 21 2c 7b 50 43 7d 0d 1c 0c 05 3a 0d 1c 16 24 3b |!,{PC}....:...$;| 00003dd0 20 45 78 70 65 63 74 73 20 52 39 20 74 6f 20 62 | Expects R9 to b| 00003de0 65 20 6e 75 6d 65 72 61 74 6f 72 3e 3e 33 32 0d |e numerator>>32.| 00003df0 1c 20 3c 3b 20 45 78 70 65 63 74 73 20 52 36 2c |. <; Expects R6,| 00003e00 52 37 20 74 6f 20 62 65 20 94 28 64 65 6e 6f 6d |R7 to be .(denom| 00003e10 69 6e 61 74 6f 72 29 2c 20 61 6e 64 20 52 38 20 |inator), and R8 | 00003e20 74 6f 20 62 65 20 69 74 73 20 b4 0d 1c 2a 15 3b |to be its ...*.;| 00003e30 20 41 6e 73 77 65 72 20 69 73 20 69 6e 20 52 39 | Answer is in R9| 00003e40 0d 1c 34 15 3b 20 52 30 2c 52 31 20 63 6f 72 72 |..4.; R0,R1 corr| 00003e50 75 70 74 65 64 0d 1c 3e 0d 2e 6c 6f 6e 67 64 69 |upted..>..longdi| 00003e60 76 25 0d 1c 48 17 53 54 4d 46 44 20 52 31 33 21 |v%..H.STMFD R13!| 00003e70 2c 7b 52 38 2c 52 31 34 7d 0d 1c 52 0d 43 4d 50 |,{R8,R14}..R.CMP| 00003e80 20 52 39 2c 23 30 0d 1c 5c 12 52 53 42 4c 54 20 | R9,#0..\.RSBLT | 00003e90 52 38 2c 52 38 2c 23 30 0d 1c 66 12 52 53 42 4c |R8,R8,#0..f.RSBL| 00003ea0 54 20 52 39 2c 52 39 2c 23 30 0d 1c 70 19 4d 4f |T R9,R9,#0..p.MO| 00003eb0 56 20 52 30 2c 52 39 2c 41 53 4c 23 28 53 43 25 |V R0,R9,ASL#(SC%| 00003ec0 2d 34 29 0d 1c 7a 1c 4d 4f 56 20 52 31 2c 52 39 |-4)..z.MOV R1,R9| 00003ed0 2c 41 53 52 23 33 32 2d 28 53 43 25 2d 34 29 0d |,ASR#32-(SC%-4).| 00003ee0 1c 84 0d 4d 4f 56 20 52 39 2c 23 30 0d 1c 8e 1b |...MOV R9,#0....| 00003ef0 5d 3a e3 55 25 3d 34 b8 2d 46 43 25 88 2d 31 3a |]:.U%=4.-FC%.-1:| 00003f00 5b 4f 50 54 20 54 25 0d 1c 98 0d 43 4d 50 20 52 |[OPT T%....CMP R| 00003f10 31 2c 52 37 0d 1c a2 0f 43 4d 50 45 51 20 52 30 |1,R7....CMPEQ R0| 00003f20 2c 52 36 0d 1c ac 0d 42 4c 4f 20 50 25 2b 31 36 |,R6....BLO P%+16| 00003f30 0d 1c b6 11 53 55 42 53 20 52 30 2c 52 30 2c 52 |....SUBS R0,R0,R| 00003f40 36 0d 1c c0 10 53 42 43 20 52 31 2c 52 31 2c 52 |6....SBC R1,R1,R| 00003f50 37 0d 1c ca 1b 41 44 44 20 52 39 2c 52 39 2c 52 |7....ADD R9,R9,R| 00003f60 38 2c 41 53 4c 23 55 25 2b 46 43 25 0d 1c d4 27 |8,ASL#U%+FC%...'| 00003f70 3b 20 54 68 69 73 20 69 73 20 72 65 66 65 72 65 |; This is refere| 00003f80 64 20 74 6f 20 61 62 6f 76 65 20 61 73 20 50 25 |d to above as P%| 00003f90 2b 31 36 0d 1c de 11 41 44 44 53 20 52 30 2c 52 |+16....ADDS R0,R| 00003fa0 30 2c 52 30 0d 1c e8 10 41 44 43 20 52 31 2c 52 |0,R0....ADC R1,R| 00003fb0 31 2c 52 31 0d 1c f2 0f 5d 3a ed 3a 5b 4f 50 54 |1,R1....]:.:[OPT| 00003fc0 20 54 25 0d 1c fc 0d 43 4d 50 20 52 31 2c 52 37 | T%....CMP R1,R7| 00003fd0 0d 1d 06 0f 43 4d 50 45 51 20 52 30 2c 52 36 0d |....CMPEQ R0,R6.| 00003fe0 1d 10 12 41 44 44 48 53 20 52 39 2c 52 39 2c 52 |...ADDHS R9,R9,R| 00003ff0 38 0d 1d 1a 16 4c 44 4d 46 44 20 52 31 33 21 2c |8....LDMFD R13!,| 00004000 7b 52 38 2c 50 43 7d 0d 1d 24 05 5d 0d 1d 2e 05 |{R8,PC}..$.]....| 00004010 e1 0d ff |...| 00004013