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