Home » Archimedes archive » Acorn User » AU 1994-Xmas.adf » Programs » StarInfo/Henry/Fly2

StarInfo/Henry/Fly2

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 1994-Xmas.adf » Programs
Filename: StarInfo/Henry/Fly2
Read OK:
File size: 4315 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM> Fly
   20REM> Writen by Morgan Henry LEN1994
   30REM> enry@dcs.qmw.ac.uk
   40
   50fixed_height%=TRUE
   60
   70ONERROR MODE0:PRINTREPORT$;" at line ";ERL:END
   80MODE15:MODE13
   90ORIGIN640,512
  100frameL=0:frameR=316:frameT=0:frameB=255
  110originX=160:originY=40
  120
  130size%=128:sizes%=7  :REM size%=128 or 256, sizes%=7 or 8
  140fp%=10
  150dispx%=16           :REM number of visable patches
  160dispy%=dispx%
  170yshift%=208         :REM controls centre of rotation
  180camdrop%=75         :REM base camera height
  190pointmod%=(dispx%*2+2)*12
  200max3dpts%=32
  210gravity%=196        :REM heli weight
  220S%=FALSE            :REM shadow on/off
  230
  240DIMsin% (512+128)*4
  250DIMdivtable% 4096*4
  260DIMpersp% 512*4
  270DIMmap% size%*size%*4
  280DIMpoints% (dispx%*2+2)*(dispy%*2+2)*12
  290DIMbin% dispy%*64*4
  300
  310PRINTTAB(0,20);"Left Mouse Button to increase power"
  320PRINT"Right Mouse Button to decrease power"
  330PROCmisc
  340PROCass
  350PROCshowmap
  360!pointmid=points%+( (dispx%*2+2)*(dispy%)*12+dispx%*12 )
  370
  380t=1:s=2
  390REPEAT
  400CLS
  410MOVE-640,500:DRAWBY-16*!hpower,0
  420CALLupdate
  430MOUSETO0,0
  440CALLcalcpoints
  450CALLdrawpoints
  460IF S% CALLdrawshad
  470CALLdrawheli
  480WAIT:SYS6,112,s:SYS6,113,t:SWAPt,s:SWAP!vdu,vdu!4
  490UNTILFALSE
  500
  510DEFPROCmisc
  520PRINT".";
  530k=360/512
  540FORi%=0TO(512+127)
  550sin%!(i%*4)=(1<<fp%)*SINRAD(i%*k)
  560NEXT
  570PRINT".";
  580FORi%=0TO511
  590y%=512-i%
  600persp%!(i%*4)=(300<<fp%)/y%
  610NEXT
  620PRINT".";
  630FORi%=0TO (dispx%*2+2)*(dispy%*2+2)*3-1
  640points%!(i%*4)=&FF<<16
  650NEXT
  660PRINT".";
  670FORi%=0TO dispy%*64-1
  680bin%!(i%*4)=0
  690NEXT
  700PRINT".";
  710FORi%=1TO639
  720divtable%!(i%*4)=(1<<fp%)/i%
  730NEXT
  740PRINT".";
  750OSCLI("LOAD FlyMap "+STR$~map%)
  760ENDPROC
  770
  780DEFPROCshowmap
  790A%=map%
  800B%=!vdu
  810FORx%=0TOsize%-1:FORy%=0TOsize%-1
  820?B%=colours?(!A%AND&FFFF)
  830B%+=1:A%+=4
  840NEXT
  850B%+=320-size%
  860NEXT
  870Z%=0
  880WHILE Z%=0:MOUSE X%,Y%,Z%:ENDWHILE
  890ENDPROC
  900
  910DEFPROCass
  920DIMcode% 64000
  930
  940FORi%=0TO2STEP2
  950x=0:y=1:a=2
  960sa=3:ca=4
  970h=2
  980scrx=6:scry=5
  990pp=7:b=8
 1000p=9:t=10
 1010xx=11:yy=12
 1020col=14
 1030
 1040P%=code%
 1050[OPTi%
 1060.vdu DCD 148:DCD -1
 1070.divtableptr DCD divtable%
 1080.perspptr DCD persp%
 1090.sinptr DCD sin%
 1100.cosptr DCD sin%+(128*4)
 1110.mapptr DCD map%
 1120.pointsptr DCD points%
 1130.pointmid DCD 0
 1140.binptr DCD bin%
 1150
 1160.xpos DCD 0
 1170.ypos DCD 0
 1180.height DCD 0
 1190.rot DCD 0
 1200
 1210.calcpoints
 1220STR r14,retsave
 1230
 1240LDR sa,sinptr              ;sin a, cos a
 1250LDR ca,cosptr
 1260LDR a,rot
 1270LDR sa,[sa,a,ASL#2]
 1280LDR ca,[ca,a,ASL#2]
 1290LDR h,height               ;current height
 1300ADD h,h,#camdrop%
 1310LDR pp,pointsptr
 1320LDR b,binptr
 1330
 1340LDR xx,xpos
 1350LDR yy,ypos
 1360
 1370
 1380MVN y,#NOT-dispy%
 1390.yloop
 1400MVN x,#NOT-dispx%
 1410.xloop
 1420
 1430AND p,xx,#%1111
 1440AND t,yy,#%1111
 1450RSB p,p,x,ASL#4
 1460RSB t,t,y,ASL#4
 1470
 1480MUL scrx,t,sa
 1490RSB scrx,scrx,#0
 1500MLA scrx,p,ca,scrx
 1510MUL scry,t,ca
 1520MLA scry,p,sa,scry          ;scrx<<fp%, scry<<fp%
 1530MOV scrx,scrx,ASR#6+4       ;shift square size (.XXX)
 1540MOV scry,scry,ASR#6+4
 1550
 1560ADDS scry,scry,#yshift%     ;clip squares
 1570BMI pointout
 1580CMP scry,#(dispy%*16)
 1590BGE pointout
 1600CMN scrx,#NOT-160
 1610BLT pointout
 1620CMP scrx,#160
 1630BGE pointout
 1640
 1650ADD p,x,xx,ASR#4          ;get land height
 1660ADD t,y,yy,ASR#4
 1670AND p,p,#size%-1
 1680AND t,t,#size%-1
 1690ADD t,p,t,ASL#sizes%
 1700
 1710LDR p,mapptr
 1720LDR t,[p,t,ASL#2]
 1730MOV col,t,LSL#16          ;extract colour
 1740MOV col,col,LSR#16
 1750MOV t,t,ASR#16
 1760
 1770LDR p,perspptr
 1780LDR p,[p,scry,ASL#2]      ;perspective k
 1790
 1800MUL scrx,p,scrx           ;apply perspective
 1810MOV scrx,scrx,ASR#fp%
 1820
 1830SUB t,h,t
 1840MUL t,p,t
 1850MOV t,t,ASR#fp%
 1860
 1870STMIA pp,{scrx,t,col}       ;X,Y,col arrange point storage
 1880MOV scry,scry,ASR#4
 1890ADD scry,b,scry,ASL#8       ;bin scry * 64*4=256
 1900LDR t,[scry]                ;t=num in bin
 1910ADD t,t,#1
 1920STR t,[scry]
 1930STR pp,[scry,t,ASL#2]
 1940
 1950
 1960.pointout
 1970ADD pp,pp,#12            ;move to next point
 1980
 1990ADD x,x,#1
 2000CMP x,#dispx%
 2010BLE xloop
 2020
 2030ADD pp,pp,#12           ;adjust for border
 2040ADD y,y,#1
 2050CMP y,#dispy%
 2060BLE yloop
 2070
 2080LDR r0,pointmid       ;shadow calculation
 2090LDR r3,[r0,#4]
 2100STR r3,shadpnts
 2110
 2120LDR r15,retsave       ;MOV r15,r14
 2130
 2140
 2150.drawshad
 2160STR r14,retsave
 2170MOV r0,#0
 2180LDR r1,shadpnts
 2190MOV r2,#8
 2200ADD r3,r1,#4
 2210MOV r4,#0
 2220ADD r5,r1,#8
 2230MVN r6,#NOT-8
 2240ADD r7,r1,#4
 2250MOV r8,#0
 2260BL quad
 2270LDR r15,retsave
 2280
 2290.shadpnts DCD 0
 2300]
 2310x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
 2320ct=9:n=10:p=8
 2330bp=11:b=12
 2340
 2350k=0
 2360[OPTi%
 2370.retsave DCD 0
 2380.drawpoints
 2390STR r14,retsave
 2400LDR b,binptr
 2410
 2420MOV ct,#0
 2430.binloop
 2440ADD bp,b,ct,ASL#8
 2450LDR n,[bp]
 2460
 2470MOVS n,n
 2480BEQ nomore
 2490.inbin
 2500LDR p,[bp,n,ASL#2]         ;p ptr to de point
 2510LDMIA p,{x1,y1}
 2520LDR x2,[p,#12]
 2530LDR y2,[p,#16]
 2540CMP x2,#&FF<<16
 2550LDRNE x3,[p,#pointmod%+12]
 2560LDRNE y3,[p,#pointmod%+16]
 2570CMPNE x3,#&FF<<16
 2580LDRNE x4,[p,#pointmod%]
 2590LDRNE y4,[p,#pointmod%+4]
 2600CMPNE x4,#&FF<<16
 2610
 2620LDRNE p,[p,#8]
 2630RSBNE r14,ct,#dispy%-1
 2640ADDNE p,p,r14
 2650ADRNE r14,colours
 2660LDRNEB p,[r14,p]
 2670BLNE quad
 2680
 2690
 2700SUBS n,n,#1
 2710BNE inbin
 2720
 2730.nomore
 2740ADD ct,ct,#1
 2750CMP ct,#dispy%
 2760BNE binloop
 2770
 2780
 2790.emptybins                 ;remove bins and delete points
 2800MOV k,#&FF<<16
 2810
 2820MOV ct,#dispy%-1
 2830.emptyloop
 2840ADD bp,b,ct,ASL#8
 2850LDR n,[bp]
 2860
 2870MOVS n,n
 2880BEQ nomore2
 2890.outbin
 2900LDR p,[bp,n,ASL#2]         ;p ptr to de point
 2910STR k,[p]
 2920
 2930SUBS n,n,#1
 2940BNE outbin
 2950STR n,[bp]                 ;empty bin
 2960
 2970.nomore2
 2980SUBS ct,ct,#1
 2990BPL emptyloop
 3000
 3010LDR r15,retsave
 3020
 3030.colours
 3040FNdata("FFFEFDFCD3D2D1D02F2E2D2C2C2C2C2C") ;grey
 3050FNdata("ABAAA9A8838281800B0A090808080808") ;light blue
 3060FNdata("3F3E3D3C131211100706050403020100") ;pink -> red
 3070FNdata("5F5E5D5C333231300706050404040404") ;peach -> red
 3080FNdata("63626160434241402322212020202020") ;bright green
 3090]
 3100
 3110ax=0:ay=1:bx=2:by=3
 3120cx=4:cy=5:dx=6:dy=7
 3130col=8:t=9
 3140
 3150a=10:b=11:c=12
 3160n=10
 3170q=11:s=12
 3180
 3190xl=0:xr=1:l=2:r=3:ct=4
 3200c1=5:c2=6:c3=7:c4=8
 3210o=10:la=11:ra=12
 3220
 3230sp=13:link=14:pc=15
 3240[OPTi%
 3250.axd EQUD0
 3260.bxd EQUD0
 3270.cxd
 3280.dxd EQUD0
 3290.ab EQUD0
 3300.bc EQUD0
 3310.dc
 3320.cd EQUD0
 3330.ac
 3340.ad EQUD0
 3350.aa EQUD0
 3360.dd
 3370.bb EQUD0
 3380.cc EQUD0
 3390.yposq EQUD0
 3400.ditabd EQUD divtable%
 3410
 3420.tri
 3430STMFD r13!,{r9-r12,r14}
 3440
 3450;AND col,col,#&ff
 3460ADD col,col,col,LSL#8
 3470ADD col,col,col,LSL#16
 3480
 3490ADD ax,ax,#originX
 3500ADD bx,bx,#originX
 3510ADD cx,cx,#originX
 3520
 3530CMP ay,by             ;sort
 3540MOVGT t,ax
 3550MOVGT ax,bx
 3560MOVGT bx,t
 3570MOVGT t,ay
 3580MOVGT ay,by
 3590MOVGT by,t
 3600CMP by,cy
 3610MOVGT t,bx
 3620MOVGT bx,cx
 3630MOVGT cx,t
 3640MOVGT t,by
 3650MOVGT by,cy
 3660MOVGT cy,t
 3670CMP ay,by
 3680MOVGT t,ax
 3690MOVGT ax,bx
 3700MOVGT bx,t
 3710MOVGT t,ay
 3720MOVGT ay,by
 3730MOVGT by,t
 3740
 3750
 3760ADD t,ay,#originY
 3770STR t,yposq
 3780
 3790
 3800STR ax,axd
 3810STR bx,bxd
 3820STR cx,cxd
 3830
 3840LDR q,ditabd
 3850SUB t,bx,ax
 3860SUB n,by,ay
 3870STR n,aa
 3880LDR n,[q,n,ASL#2]
 3890MUL n,t,n
 3900STR n,ab
 3910
 3920SUB t,cx,bx
 3930SUB n,cy,by
 3940STR n,bb
 3950LDR n,[q,n,ASL#2]
 3960MUL n,t,n
 3970STR n,bc
 3980
 3990SUB t,cx,ax
 4000SUB n,cy,ay
 4010LDR n,[q,n,ASL#2]
 4020MUL n,t,n
 4030STR n,ac
 4040
 4050LDR o,vdu
 4060ADD t,ay,#originY
 4070ADD t,t,t,ASL#2
 4080ADD o,o,t,ASL#6
 4090
 4100MOV c1,c4
 4110MOV c2,c4
 4120MOV c3,c4
 4130
 4140LDR ct,aa
 4150CMP ct,#0
 4160LDR t,axd
 4170MOV l,t,ASL#fp%
 4180MOV r,t,ASL#fp%
 4190LDR la,ac
 4200ADD l,l,#1<<(fp%-1)
 4210LDR ra,ab
 4220ADD r,r,#1<<(fp%-1)
 4230BLNE piece
 4240
 4250LDR ct,bb
 4260CMP ct,#0
 4270LDR t,bxd
 4280MOV r,t,ASL#fp%
 4290LDR ra,bc
 4300ADD r,r,#1<<(fp%-1)
 4310BLNE piece
 4320LDMFD r13!,{r9-r12,r15}^
 4330
 4340.quad                    ;based on a routine by Jan VDU
 4350STMFD r13!,{r9-r12,r14}
 4360
 4370;AND col,col,#&ff
 4380ADD col,col,col,LSL#8
 4390ADD col,col,col,LSL#16
 4400
 4410ADD ax,ax,#originX
 4420ADD bx,bx,#originX
 4430ADD cx,cx,#originX
 4440ADD dx,dx,#originX
 4450
 4460MOV t,ay  ;find smallest (top) y
 4470CMP t,by
 4480MOVGT t,by
 4490CMP t,cy
 4500MOVGT t,cy
 4510CMP t,dy
 4520MOVGT t,dy
 4530
 4540.order
 4550CMP t,ay
 4560BEQ ok
 4570FNrot
 4580B order
 4590.ok
 4600
 4610ADD t,ay,#originY
 4620STR t,yposq
 4630
 4640CMP by,dy
 4650MOVGT t,bx
 4660MOVGT s,by
 4670MOVGT bx,dx
 4680MOVGT by,dy
 4690MOVGT dx,t
 4700MOVGT dy,s
 4710
 4720CMP cy,dy
 4730BGT diamond
 4740
 4750CMP cy,by               ;DUBIOUS
 4760MOVLT cy,by             ;SOLUTION
 4770
 4780STR ax,axd
 4790STR bx,bxd
 4800STR cx,cxd
 4810
 4820LDR q,ditabd
 4830SUB t,bx,ax
 4840SUB n,by,ay
 4850STR n,aa
 4860LDR n,[q,n,ASL#2]
 4870MUL n,t,n
 4880STR n,ab
 4890SUB t,dx,ax
 4900SUB n,dy,ay
 4910LDR n,[q,n,ASL#2]
 4920MUL n,t,n
 4930STR n,ad
 4940SUB t,cx,bx
 4950SUB n,cy,by
 4960STR n,bb
 4970LDR n,[q,n,ASL#2]
 4980MUL n,t,n
 4990STR n,bc
 5000SUB t,dx,cx
 5010SUB n,dy,cy
 5020STR n,cc
 5030LDR n,[q,n,ASL#2]
 5040MUL n,t,n
 5050STR n,cd
 5060
 5070LDR o,vdu
 5080ADD t,ay,#originY
 5090ADD t,t,t,ASL#2
 5100ADD o,o,t,ASL#6
 5110
 5120MOV c1,c4
 5130MOV c2,c4
 5140MOV c3,c4
 5150
 5160LDR ct,aa
 5170CMP ct,#0
 5180LDR t,axd
 5190MOV l,t,ASL#fp%
 5200MOV r,t,ASL#fp%
 5210LDR la,ad
 5220ADD l,l,#1<<(fp%-1)
 5230LDR ra,ab
 5240ADD r,r,#1<<(fp%-1)
 5250BLNE piece
 5260
 5270LDR ct,bb
 5280CMP ct,#0
 5290LDR t,bxd
 5300MOV r,t,ASL#fp%
 5310LDR ra,bc
 5320ADD r,r,#1<<(fp%-1)
 5330BLNE piece
 5340
 5350LDR ct,cc
 5360CMP ct,#0
 5370LDR t,cxd
 5380MOV r,t,ASL#fp%
 5390LDR ra,cd
 5400ADD r,r,#1<<(fp%-1)
 5410BLNE piece
 5420LDMFD r13!,{r9-r12,r15}^
 5430
 5440
 5450.diamond
 5460STR ax,axd
 5470STR bx,bxd
 5480STR dx,dxd
 5490
 5500LDR q,ditabd
 5510SUB t,bx,ax
 5520SUB n,by,ay
 5530STR n,aa
 5540LDR n,[q,n,ASL#2]
 5550MUL n,t,n
 5560STR n,ab
 5570
 5580SUB t,dx,ax
 5590SUB n,dy,ay
 5600LDR n,[q,n,ASL#2]
 5610MUL n,t,n
 5620STR n,ad
 5630
 5640SUB t,cx,bx
 5650SUB n,cy,by
 5660LDR n,[q,n,ASL#2]
 5670MUL n,t,n
 5680STR n,bc
 5690
 5700SUB t,cx,dx
 5710SUB n,cy,dy
 5720STR n,cc
 5730LDR n,[q,n,ASL#2]
 5740MUL n,t,n
 5750STR n,dc
 5760
 5770SUB n,dy,by
 5780STR n,dd
 5790
 5800LDR o,vdu
 5810ADD t,ay,#originY
 5820ADD t,t,t,ASL#2
 5830ADD o,o,t,ASL#6
 5840
 5850MOV c1,c4
 5860MOV c2,c4
 5870MOV c3,c4
 5880
 5890LDR ct,aa
 5900CMP ct,#0
 5910LDR t,axd
 5920MOV l,t,ASL#fp%
 5930MOV r,t,ASL#fp%
 5940LDR la,ad
 5950ADD l,l,#1<<(fp%-1)
 5960LDR ra,ab
 5970ADD r,r,#1<<(fp%-1)
 5980BLNE piece
 5990
 6000LDR ct,dd
 6010CMP ct,#0
 6020LDR t,bxd
 6030MOV r,t,ASL#fp%
 6040LDR ra,bc
 6050ADD r,r,#1<<(fp%-1)
 6060BLNE piece
 6070
 6080LDR ct,cc
 6090CMP ct,#0
 6100LDR t,dxd
 6110MOV l,t,ASL#fp%
 6120LDR la,dc
 6130ADD l,l,#1<<(fp%-1)
 6140BLNE piece
 6150LDMFD r13!,{r9-r12,r15}^
 6160
 6170
 6180.piece ;STMFD r13!,{r14}
 6190.lo
 6200LDR t,yposq
 6210ADD t,t,#1
 6220STR t,yposq
 6230CMP t,#frameT
 6240BLE endspan
 6250CMP t,#frameB
 6260MOVGT r15,r14           ;LDMFDGT r13!,{r15}
 6270
 6280CMP l,r
 6290MOVLT xl,l,ASR#fp%
 6300MOVLT xr,r,ASR#fp%
 6310MOVGE xl,r,ASR#fp%
 6320MOVGE xr,l,ASR#fp%
 6330
 6340CMP xl,#frameR
 6350BGT endspan
 6360CMP xr,#frameL
 6370BLT endspan
 6380CMP xl,#frameL
 6390MOVLT xl,#frameL
 6400CMP xr,#frameR
 6410MOVGT xr,#frameR
 6420
 6430ADD xl,o,xl
 6440ADD xr,o,xr
 6450
 6460SUBS t,xr,xl
 6470BEQ endspan
 6480CMP t,#2
 6490STRLSB c1,[xl]
 6500STRLSB c1,[xr,#-1]
 6510BLS endspan
 6520TST xl,#%01
 6530STRNEB c1,[xl],#1
 6540TST xl,#%10
 6550STRNEB c2,[xl],#1
 6560STRNEB c1,[xl],#1
 6570TST xr,#%01
 6580STRNEB c2,[xr,#-1]!
 6590TST xr,#%10
 6600STRNEB c1,[xr,#-1]!
 6610STRNEB c2,[xr,#-1]!
 6620SUBS t,xr,xl
 6630MOVS t,t,LSR#3
 6640STRCS c1,[xl],#4
 6650MOVS t,t,LSR#1
 6660STMCSIA (xl)!,{c1,c2}
 6670
 6680ADR xr,base
 6690SUB pc,xr,t,LSL#2
 6700FNvulc
 6710.base
 6720
 6730.endspan
 6740ADD l,l,la
 6750ADD r,r,ra
 6760ADD o,o,#320
 6770SUBS ct,ct,#1
 6780BNE lo
 6790MOV r15,r14               ;LDMFD r13!,{r15}
 6800]
 6810xa=0:ya=1:za=2
 6820x=0:y=1:z=2
 6830sxa=3:sya=4:sza=5
 6840cxa=6:cya=7:cza=8
 6850n=9:p=10
 6860i=10
 6870pnts=11:fs=11
 6880t1=12:t2=14
 6890
 6900x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
 6910vs=12
 6920
 6930[OPTi%
 6940.helip DCD 24
 6950DCD -5 :DCD 2  :DCD -14        ;0
 6960DCD -7 :DCD -7 :DCD -4
 6970DCD -10:DCD 4  :DCD -1
 6980DCD -9:DCD 4  :DCD 4
 6990DCD -5 :DCD -6 :DCD 6
 7000DCD -6 :DCD 0  :DCD 10         ;5
 7010DCD 6  :DCD 0  :DCD 10
 7020DCD 5  :DCD -6 :DCD 6
 7030DCD 9 :DCD 4  :DCD 4
 7040DCD 10 :DCD 4  :DCD -1
 7050DCD 7  :DCD -7 :DCD -4
 7060DCD 5  :DCD 2  :DCD -14        ;11
 7070
 7080DCD -3 :DCD 5  :DCD -12
 7090DCD -6 :DCD 6  :DCD -2
 7100DCD -5 :DCD 6  :DCD 7         ;14
 7110DCD 5  :DCD 6  :DCD 7
 7120DCD 6  :DCD 6  :DCD -2
 7130DCD 3  :DCD 5  :DCD -12
 7140
 7150DCD 0  :DCD 4  :DCD 8         ;18
 7160DCD -2 :DCD 0  :DCD 10
 7170DCD -1 :DCD 0  :DCD 44
 7180DCD 0  :DCD 2  :DCD 40
 7190DCD 2  :DCD 0  :DCD 10
 7200DCD 1  :DCD 0  :DCD 44
 7210
 7220
 7230.helif DCD 22
 7240DCD &07:DCD &00010A0B
 7250DCD &13:DCD &0104070A
 7260DCD &13:DCD &04050607
 7270DCD &11:DCD &FF000201
 7280DCD &11:DCD &FF0B0A09
 7290DCD &10:DCD &02030401
 7300DCD &10:DCD &0A070809
 7310DCD &12:DCD &FF030504
 7320DCD &12:DCD &FF070608
 7330
 7340DCD &3F:DCD &000B110C
 7350DCD &3C:DCD &0C11100D
 7360DCD &13:DCD &0D100F0E
 7370DCD &12:DCD &0E0F0605
 7380
 7390DCD &07:DCD &000C0D02
 7400DCD &07:DCD &0B091011
 7410DCD &11:DCD &020D0E03
 7420DCD &11:DCD &1009080F
 7430DCD &10:DCD &FF030E05
 7440DCD &10:DCD &FF0F0806
 7450
 7460DCD &12:DCD &16171512     ;tail
 7470DCD &12:DCD &13121514
 7480DCD &13:DCD &13141716
 7490
 7500
 7510
 7520
 7530.hrot DCD 0
 7540.hpitch DCD 0
 7550.hrol DCD 0
 7560.hx DCD 256<<fp%
 7570.hy DCD 300<<fp%
 7580.hheight DCD 0
 7590.hdx DCD 0
 7600.hdy DCD 0
 7610.hdz DCD 0
 7620.hpower DCD -16
 7630
 7640.control
 7650STMFD r13!,{r14}
 7660BL update
 7670BL calcpoints
 7680BL drawpoints
 7690BL drawheli
 7700LDMFD r13!,{r15}
 7710
 7720.update
 7730STMFD r13!,{r14}
 7740SWI "OS_Mouse"
 7750CMP r2,#1
 7760LDRGE r3,hpower
 7770ADDEQ r3,r3,#2
 7780STREQ r3,hpower
 7790CMP r2,#4
 7800SUBEQ r3,r3,#2
 7810STREQ r3,hpower
 7820
 7830LDR r9,hpitch
 7840ADD r9,r9,r1,ASR#1
 7850MOV r9,r9,LSL#23
 7860MOV r9,r9,LSR#23
 7870STR r9,hpitch
 7880
 7890LDR r3,hrot
 7900SUB r3,r3,r0,ASR#2
 7910MOV r3,r3,LSL#23
 7920MOV r3,r3,LSR#23
 7930STR r3,hrot
 7940STR r3,rot
 7950
 7960LDR r4,hpower
 7970LDR r5,sinptr
 7980LDR r6,cosptr
 7990
 8000LDR r7,[r5,r9,ASL#2]
 8010LDR r8,[r6,r9,ASL#2]
 8020MUL r8,r4,r8                ;verticle power
 8030MUL r4,r7,r4                ;forward power
 8040MOV r4,r4,ASR#fp%
 8050;MOV r8,r8,ASR#fp%
 8060
 8070LDR r7,hdz                 ;alter dz
 8080SUB r7,r7,r8,ASR#6
 8090SUB r7,r7,#gravity%
 8100STR r7,hdz
 8110LDR r8,hheight
 8120]
 8130IF NOT fixed_height% THEN
 8140[OPTi%
 8150ADD r8,r8,r7
 8160]
 8170ENDIF
 8180[OPTi%
 8190STR r8,hheight
 8200
 8210MOV r8,r8,ASR#fp%+1       ;figure out cam angle
 8220ADD r8,r8,#camdrop%
 8230STR r8,height
 8240
 8250LDR r5,[r5,r3,ASL#2]
 8260LDR r6,[r6,r3,ASL#2]
 8270MUL r5,r4,r5
 8280MUL r6,r4,r6
 8290
 8300LDR r7,hdx
 8310LDR r8,hdy
 8320ADD r7,r7,r5,ASR#6
 8330ADD r8,r8,r6,ASR#6
 8340MOV r9,r7,ASR#4            ;dec dx/dy (air res)
 8350MOV r10,r8,ASR#4
 8360SUB r7,r7,r9
 8370SUB r8,r8,r10
 8380STR r7,hdx
 8390STR r8,hdy
 8400
 8410LDR r9,hx
 8420LDR r10,hy
 8430ADD r9,r9,r7
 8440ADD r10,r10,r8
 8450STR r9,hx
 8460STR r10,hy
 8470MOV r9,r9,ASR#fp%
 8480MOV r10,r10,ASR#fp%
 8490STR r9,xpos
 8500STR r10,ypos
 8510
 8520
 8530LDMFD r13!,{r15}
 8540
 8550.drawheli
 8560STMFD r13!,{r14}
 8570ADR r11,helip             ;drawheli
 8580ADR r12,helif
 8590LDR r0,hpitch
 8600MOV r1,#0
 8610MOV r2,#0
 8620MOV r3,#0
 8630LDR r6,height
 8640LDR r7,hheight
 8650SUB r4,r6,r7,ASR#fp%
 8660MOV r5,#0
 8670BL drawobj
 8680LDMFD r13!,{r15}
 8690
 8700.objx DCD 0
 8710.objy DCD 0
 8720.objz DCD 0
 8730.faces DCD 0
 8740.drawobj         ;r0=xa, r1=ya, r2=za, r11=pntptr, r12 faceptr
 8750STR r14,retsave  ;r3=x, r4=y, r5=z
 8760;STR r3,objx
 8770STR r4,objy
 8780;STR r5,objz
 8790STR r12,faces
 8800
 8810LDR p,sinptr
 8820LDR sxa,[p,xa,ASL#2]
 8830LDR sya,[p,ya,ASL#2]
 8840LDR sza,[p,za,ASL#2]
 8850LDR p,cosptr
 8860LDR cxa,[p,xa,ASL#2]
 8870LDR cya,[p,ya,ASL#2]
 8880LDR cza,[p,za,ASL#2]
 8890
 8900ADR i,image
 8910LDR n,[pnts],#4           ;num of points
 8920
 8930.pobjloop
 8940LDMIA pnts !,{x,y,z}
 8950MUL t2,z,sxa              ;rot x
 8960RSB t2,t2,#0
 8970MLA t1,y,cxa,t2
 8980MUL t2,y,sxa
 8990MLA t2,z,cxa,t2
 9000MOV y,t1,ASR#fp%
 9010MOV z,t2,ASR#fp%
 9020
 9030MUL t2,z,sya              ;rot y
 9040RSB t2,t2,#0
 9050MLA t1,x,cya,t2
 9060MUL t2,x,sya
 9070MLA t2,z,cya,t2
 9080MOV x,t1,ASR#fp%
 9090MOV z,t2,ASR#fp%
 9100
 9110MUL t2,y,sza              ;rot z
 9120RSB t2,t2,#0
 9130MLA t1,x,cza,t2
 9140MUL t2,x,sza
 9150MLA t2,y,cza,t2
 9160MOV x,t1,ASR#fp%
 9170MOV y,t2,ASR#fp%
 9180
 9190LDR t1,objy               ;adjust coords
 9200;LDR t2,objz
 9210ADD y,y,t1
 9220;ADD z,z,t2
 9230ADD z,z,#yshift%
 9240
 9250LDR t1,perspptr           ;apply perspective
 9260LDR t1,[t1,z,ASL#2]
 9270MUL x,t1,x
 9280MUL y,t1,y
 9290MOV x,x,ASR#fp%
 9300MOV y,y,ASR#fp%
 9310STMIA i !,{x,y}
 9320;BL plot
 9330
 9340SUBS n,n,#1
 9350BNE pobjloop
 9360
 9370LDR fs,faces           ;draw polies
 9380LDR n,[fs],#4
 9390ADR i,image
 9400
 9410.fobjloop
 9420LDMIA fs !,{col,vs}     ;load colour and verts (T|4;3;2;1)
 9430
 9440AND t2,vs,#&FF
 9450ADD t2,i,t2,LSL#3
 9460LDMIA t2,{x1,y1}
 9470
 9480MOV vs,vs,LSR#8
 9490AND t2,vs,#&FF
 9500ADD t2,i,t2,LSL#3
 9510LDMIA t2,{x2,y2}
 9520
 9530MOV vs,vs,LSR#8
 9540AND t2,vs,#&FF
 9550ADD t2,i,t2,LSL#3
 9560LDMIA t2,{x3,y3}
 9570
 9580SUB y4,x2,x1            ;clip backwards (x4,y4-temps)
 9590SUB x4,y3,y2
 9600MUL x4,y4,x4
 9610SUB y4,y2,y1
 9620SUB t2,x3,x2
 9630MUL y4,t2,y4
 9640CMP x4,y4
 9650BLT ycanne                ;y'canne see it
 9660
 9670MOV vs,vs,LSR#8
 9680CMP vs,#&FF               ;teST, &FF-tri
 9690ANDNE t2,vs,#&FF
 9700ADDNE t2,i,t2,LSL#3
 9710LDMNEIA t2,{x4,y4}
 9720BLNE quad
 9730BLEQ tri
 9740
 9750.ycanne
 9760SUBS n,n,#1
 9770BNE fobjloop
 9780
 9790LDR r15,retsave        ;MOV r15,r14
 9800.image FNgap(max3dpts%*8)
 9810
 9820
 9830]NEXT
 9840PRINTP%-code%
 9850SYS"OS_ReadVduVariables",vdu,vdu
 9860vdu!4=!vdu+256*320
 9870ENDPROC
 9880
 9890DEFFNvulc
 9900FORj%=1TO20
 9910[OPTi%
 9920STMIA (xl)!,{c1,c2,c3,c4}
 9930]NEXT
 9940=""
 9950
 9960DEFFNrot
 9970[OPTi%
 9980MOV s,ax
 9990MOV ax,bx
10000MOV bx,cx
10010MOV cx,dx
10020MOV dx,s
10030MOV s,ay
10040MOV ay,by
10050MOV by,cy
10060MOV cy,dy
10070MOV dy,s
10080]
10090=0
10100
10110DEFFNgap(g%)
10120P%=P%+g%
10130=0
10140
10150DEFFNdata(a$)
10160FORg%=1 TO LENa$-1 STEP2
10170?P%=EVAL("&"+MID$(a$,g%,2))
10180P%?1=EVAL("&"+MID$(a$,g%,2))
10190P%+=2
10200NEXT
10210=0


�> Fly
#�> Writen by Morgan Henry �1994
�> enry@dcs.qmw.ac.uk
(
2fixed_height%=�
<
F� �0:�$;" at line ";�:�
P�15:�13
Z
ȑ640,512
d+frameL=0:frameR=316:frameT=0:frameB=255
noriginX=160:originY=40
x
�:size%=128:sizes%=7  :� size%=128 or 256, sizes%=7 or 8
�
fp%=10
�4dispx%=16           :� number of visable patches
�dispy%=dispx%
�6yshift%=208         :� controls centre of rotation
�-camdrop%=75         :� base camera height
�pointmod%=(dispx%*2+2)*12
�max3dpts%=32
�&gravity%=196        :� heli weight
�$S%=�            :� shadow on/off
�
��sin% (512+128)*4
��divtable% 4096*4
�persp% 512*4
�map% size%*size%*4
)�points% (dispx%*2+2)*(dispy%*2+2)*12
"�bin% dispy%*64*4
,
61�0,20);"Left Mouse Button to increase power"
@+�"Right Mouse Button to decrease power"
J	�misc
T�ass
^�showmap
h<!pointmid=points%+( (dispx%*2+2)*(dispy%)*12+dispx%*12 )
r
|t=1:s=2
��
��
��-640,500:�BY-16*!hpower,0
��update
�
ȗ�0,0
��calcpoints
��drawpoints
�� S% �drawshad
�
�drawheli
�-Ȗ:ș6,112,s:ș6,113,t:Ȕt,s:Ȕ!vdu,vdu!4
���
�
�
��misc
	�".";

k=360/512
�i%=0�(512+127)
&!sin%!(i%*4)=(1<<fp%)*��(i%*k)
0�
:	�".";
D
�i%=0�511
N
y%=512-i%
Xpersp%!(i%*4)=(300<<fp%)/y%
b�
l	�".";
v(�i%=0� (dispx%*2+2)*(dispy%*2+2)*3-1
�points%!(i%*4)=&FF<<16
��
�	�".";
��i%=0� dispy%*64-1
�bin%!(i%*4)=0
��
�	�".";
�
�i%=1�639
� divtable%!(i%*4)=(1<<fp%)/i%
��
�	�".";
��("LOAD FlyMap "+�~map%)
��


��showmap
A%=map%
 B%=!vdu
*�x%=0�size%-1:�y%=0�size%-1
4?B%=colours?(!A%�&FFFF)
>B%+=1:A%+=4
H�
RB%+=320-size%
\�
fZ%=0
pȕ Z%=0:ȗ X%,Y%,Z%:�
z�
�
�	��ass
��code% 64000
�
�
�i%=0�2�2
�x=0:y=1:a=2
�
sa=3:ca=4
�h=2
�scrx=6:scry=5
�pp=7:b=8
�p=9:t=10
�xx=11:yy=12
�
col=14

P%=code%

[OPTi%
$.vdu DCD 148:DCD -1
..divtableptr DCD divtable%
8.perspptr DCD persp%
B.sinptr DCD sin%
L.cosptr DCD sin%+(128*4)
V.mapptr DCD map%
`.pointsptr DCD points%
j.pointmid DCD 0
t.binptr DCD bin%
~
�.xpos DCD 0
�.ypos DCD 0
�.height DCD 0
�.rot DCD 0
�
�.calcpoints
�STR r14,retsave
�
�,LDR sa,sinptr              ;sin a, cos a
�LDR ca,cosptr
�
LDR a,rot
�LDR sa,[sa,a,ASL#2]
LDR ca,[ca,a,ASL#2]

.LDR h,height               ;current height
ADD h,h,#camdrop%
LDR pp,pointsptr
(LDR b,binptr
2
<LDR xx,xpos
FLDR yy,ypos
P
Z
dMVN y,#�-dispy%
n
.yloop
xMVN x,#�-dispx%
�
.xloop
�
�� p,xx,#%1111
�� t,yy,#%1111
�RSB p,p,x,ASL#4
�RSB t,t,y,ASL#4
�
�MUL scrx,t,sa
�RSB scrx,scrx,#0
�MLA scrx,p,ca,scrx
�MUL scry,t,ca
�5MLA scry,p,sa,scry          ;scrx<<fp%, scry<<fp%
�9MOV scrx,scrx,ASR#6+4       ;shift square size (.XXX)
MOV scry,scry,ASR#6+4

-ADDS scry,scry,#yshift%     ;clip squares
"BMI pointout
,CMP scry,#(dispy%*16)
6BGE pointout
@CMN scrx,#�-160
JBLT pointout
TCMP scrx,#160
^BGE pointout
h
r.ADD p,x,xx,ASR#4          ;get land height
|ADD t,y,yy,ASR#4
�� p,p,#size%-1
�� t,t,#size%-1
�ADD t,p,t,ASL#sizes%
�
�LDR p,mapptr
�LDR t,[p,t,ASL#2]
�-MOV col,t,LSL#16          ;extract colour
�MOV col,col,LSR#16
�MOV t,t,ASR#16
�
�LDR p,perspptr
�,LDR p,[p,scry,ASL#2]      ;perspective k
�
0MUL scrx,p,scrx           ;apply perspective
MOV scrx,scrx,ASR#fp%

&
SUB t,h,t
0
MUL t,p,t
:MOV t,t,ASR#fp%
D
N>STMIA pp,{scrx,t,col}       ;X,Y,col arrange point storage
XMOV scry,scry,ASR#4
b4ADD scry,b,scry,ASL#8       ;bin scry * 64*4=256
l-LDR t,[scry]                ;t=num in bin
vADD t,t,#1
�STR t,[scry]
�STR pp,[scry,t,ASL#2]
�
�
�
.pointout
�0ADD pp,pp,#12            ;move to next point
�
�ADD x,x,#1
�CMP x,#dispx%
�
BLE xloop
�
�.ADD pp,pp,#12           ;adjust for border
�ADD y,y,#1
CMP y,#dispy%

BLE yloop

 -LDR r0,pointmid       ;shadow calculation
*LDR r3,[r0,#4]
4STR r3,shadpnts
>
H&LDR r15,retsave       ;MOV r15,r14
R
\
f
.drawshad
pSTR r14,retsave
z
MOV r0,#0
�LDR r1,shadpnts
�
MOV r2,#8
�ADD r3,r1,#4
�
MOV r4,#0
�ADD r5,r1,#8
�MVN r6,#�-8
�ADD r7,r1,#4
�
MOV r8,#0
�BL quad
�LDR r15,retsave
�
�.shadpnts DCD 0
�]
	1x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
	ct=9:n=10:p=8
	bp=11:b=12
	$
	.k=0
	8
[OPTi%
	B.retsave DCD 0
	L.drawpoints
	VSTR r14,retsave
	`LDR b,binptr
	j
	t
MOV ct,#0
	~.binloop
	�ADD bp,b,ct,ASL#8
	�LDR n,[bp]
	�
	�MOVS n,n
	�BEQ nomore
	�
.inbin
	�1LDR p,[bp,n,ASL#2]         ;p ptr to de point
	�LDMIA p,{x1,y1}
	�LDR x2,[p,#12]
	�LDR y2,[p,#16]
	�CMP x2,#&FF<<16
	�LDRNE x3,[p,#pointmod%+12]
LDRNE y3,[p,#pointmod%+16]

CMPNE x3,#&FF<<16
LDRNE x4,[p,#pointmod%]
LDRNE y4,[p,#pointmod%+4]
(CMPNE x4,#&FF<<16
2
<LDRNE p,[p,#8]
FRSBNE r14,ct,#dispy%-1
PADDNE p,p,r14
ZADRNE r14,colours
dLDRNEB p,[r14,p]
n
BLNE quad
x
�
�SUBS n,n,#1
�
BNE inbin
�
�.nomore
�ADD ct,ct,#1
�CMP ct,#dispy%
�BNE binloop
�
�
�=.emptybins                 ;remove bins and delete points
�MOV k,#&FF<<16
�
MOV ct,#dispy%-1
.emptyloop
ADD bp,b,ct,ASL#8
"LDR n,[bp]
,
6MOVS n,n
@BEQ nomore2
J.outbin
T1LDR p,[bp,n,ASL#2]         ;p ptr to de point
^
STR k,[p]
h
rSUBS n,n,#1
|BNE outbin
�)STR n,[bp]                 ;empty bin
�
�.nomore2
�SUBS ct,ct,#1
�BPL emptyloop
�
�LDR r15,retsave
�
�.colours
�3�data("FFFEFDFCD3D2D1D02F2E2D2C2C2C2C2C") ;grey
�9�data("ABAAA9A8838281800B0A090808080808") ;light blue
�:�data("3F3E3D3C131211100706050403020100") ;pink -> red
�;�data("5F5E5D5C333231300706050404040404") ;peach -> red
;�data("63626160434241402322212020202020") ;bright green
]

&ax=0:ay=1:bx=2:by=3
0cx=4:cy=5:dx=6:dy=7
:
col=8:t=9
D
Na=10:b=11:c=12
Xn=10
b
q=11:s=12
l
vxl=0:xr=1:l=2:r=3:ct=4
�c1=5:c2=6:c3=7:c4=8
�o=10:la=11:ra=12
�
�sp=13:link=14:pc=15
�
[OPTi%
�.axd EQUD0
�.bxd EQUD0
�.cxd
�.dxd EQUD0
�
.ab EQUD0
�
.bc EQUD0
�.dc
�
.cd EQUD0

.ac


.ad EQUD0


.aa EQUD0

 .dd

*
.bb EQUD0

4
.cc EQUD0

>.yposq EQUD0

H.ditabd EQUD divtable%

R

\.tri

fSTMFD r13!,{r9-r12,r14}

p

z;� col,col,#&ff

�ADD col,col,col,LSL#8

�ADD col,col,col,LSL#16

�

�ADD ax,ax,#originX

�ADD bx,bx,#originX

�ADD cx,cx,#originX

�

�CMP ay,by             ;sort

�MOVGT t,ax

�MOVGT ax,bx

�MOVGT bx,t

�MOVGT t,ay

�MOVGT ay,by
MOVGT by,t

CMP by,cy
MOVGT t,bx
$MOVGT bx,cx
.MOVGT cx,t
8MOVGT t,by
BMOVGT by,cy
LMOVGT cy,t
V
CMP ay,by
`MOVGT t,ax
jMOVGT ax,bx
tMOVGT bx,t
~MOVGT t,ay
�MOVGT ay,by
�MOVGT by,t
�
�
�ADD t,ay,#originY
�STR t,yposq
�
�
�STR ax,axd
�STR bx,bxd
�STR cx,cxd
�
LDR q,ditabd

SUB t,bx,ax
SUB n,by,ay
STR n,aa
(LDR n,[q,n,ASL#2]
2
MUL n,t,n
<STR n,ab
F
PSUB t,cx,bx
ZSUB n,cy,by
dSTR n,bb
nLDR n,[q,n,ASL#2]
x
MUL n,t,n
�STR n,bc
�
�SUB t,cx,ax
�SUB n,cy,ay
�LDR n,[q,n,ASL#2]
�
MUL n,t,n
�STR n,ac
�
�
LDR o,vdu
�ADD t,ay,#originY
�ADD t,t,t,ASL#2
�ADD o,o,t,ASL#6
�

MOV c1,c4

MOV c2,c4

MOV c3,c4
"
,
LDR ct,aa
6
CMP ct,#0
@
LDR t,axd
JMOV l,t,ASL#fp%
TMOV r,t,ASL#fp%
^
LDR la,ac
hADD l,l,#1<<(fp%-1)
r
LDR ra,ab
|ADD r,r,#1<<(fp%-1)
�BLNE piece
�
�
LDR ct,bb
�
CMP ct,#0
�
LDR t,bxd
�MOV r,t,ASL#fp%
�
LDR ra,bc
�ADD r,r,#1<<(fp%-1)
�BLNE piece
�LDMFD r13!,{r9-r12,r15}^
�
�9.quad                    ;based on a routine by Jan �
�STMFD r13!,{r9-r12,r14}

;� col,col,#&ff
ADD col,col,col,LSL#8
&ADD col,col,col,LSL#16
0
:ADD ax,ax,#originX
DADD bx,bx,#originX
NADD cx,cx,#originX
XADD dx,dx,#originX
b
l$MOV t,ay  ;find smallest (top) y
vCMP t,by
�MOVGT t,by
�CMP t,cy
�MOVGT t,cy
�CMP t,dy
�MOVGT t,dy
�
�
.order
�CMP t,ay
�
BEQ ok
��rot
�B order
�.ok
�
ADD t,ay,#originY
STR t,yposq

 
CMP by,dy
*MOVGT t,bx
4MOVGT s,by
>MOVGT bx,dx
HMOVGT by,dy
RMOVGT dx,t
\MOVGT dy,s
f
p
CMP cy,dy
zBGT diamond
�
�$CMP cy,by               ;DUBIOUS
�%MOVLT cy,by             ;SOLUTION
�
�STR ax,axd
�STR bx,bxd
�STR cx,cxd
�
�LDR q,ditabd
�SUB t,bx,ax
�SUB n,by,ay
�STR n,aa
�LDR n,[q,n,ASL#2]

MUL n,t,n
STR n,ab
SUB t,dx,ax
$SUB n,dy,ay
.LDR n,[q,n,ASL#2]
8
MUL n,t,n
BSTR n,ad
LSUB t,cx,bx
VSUB n,cy,by
`STR n,bb
jLDR n,[q,n,ASL#2]
t
MUL n,t,n
~STR n,bc
�SUB t,dx,cx
�SUB n,dy,cy
�STR n,cc
�LDR n,[q,n,ASL#2]
�
MUL n,t,n
�STR n,cd
�
�
LDR o,vdu
�ADD t,ay,#originY
�ADD t,t,t,ASL#2
�ADD o,o,t,ASL#6
�

MOV c1,c4


MOV c2,c4

MOV c3,c4

(
LDR ct,aa
2
CMP ct,#0
<
LDR t,axd
FMOV l,t,ASL#fp%
PMOV r,t,ASL#fp%
Z
LDR la,ad
dADD l,l,#1<<(fp%-1)
n
LDR ra,ab
xADD r,r,#1<<(fp%-1)
�BLNE piece
�
�
LDR ct,bb
�
CMP ct,#0
�
LDR t,bxd
�MOV r,t,ASL#fp%
�
LDR ra,bc
�ADD r,r,#1<<(fp%-1)
�BLNE piece
�
�
LDR ct,cc
�
CMP ct,#0
�
LDR t,cxd
MOV r,t,ASL#fp%

LDR ra,cd
ADD r,r,#1<<(fp%-1)
"BLNE piece
,LDMFD r13!,{r9-r12,r15}^
6
@
J.diamond
TSTR ax,axd
^STR bx,bxd
hSTR dx,dxd
r
|LDR q,ditabd
�SUB t,bx,ax
�SUB n,by,ay
�STR n,aa
�LDR n,[q,n,ASL#2]
�
MUL n,t,n
�STR n,ab
�
�SUB t,dx,ax
�SUB n,dy,ay
�LDR n,[q,n,ASL#2]
�
MUL n,t,n
�STR n,ad
�
SUB t,cx,bx
SUB n,cy,by
LDR n,[q,n,ASL#2]
&
MUL n,t,n
0STR n,bc
:
DSUB t,cx,dx
NSUB n,cy,dy
XSTR n,cc
bLDR n,[q,n,ASL#2]
l
MUL n,t,n
vSTR n,dc
�
�SUB n,dy,by
�STR n,dd
�
�
LDR o,vdu
�ADD t,ay,#originY
�ADD t,t,t,ASL#2
�ADD o,o,t,ASL#6
�
�
MOV c1,c4
�
MOV c2,c4
�
MOV c3,c4
�

LDR ct,aa

CMP ct,#0

LDR t,axd
 MOV l,t,ASL#fp%
*MOV r,t,ASL#fp%
4
LDR la,ad
>ADD l,l,#1<<(fp%-1)
H
LDR ra,ab
RADD r,r,#1<<(fp%-1)
\BLNE piece
f
p
LDR ct,dd
z
CMP ct,#0
�
LDR t,bxd
�MOV r,t,ASL#fp%
�
LDR ra,bc
�ADD r,r,#1<<(fp%-1)
�BLNE piece
�
�
LDR ct,cc
�
CMP ct,#0
�
LDR t,dxd
�MOV l,t,ASL#fp%
�
LDR la,dc
�ADD l,l,#1<<(fp%-1)
�BLNE piece
LDMFD r13!,{r9-r12,r15}^


$.piece ;STMFD r13!,{r14}
..lo
8LDR t,yposq
BADD t,t,#1
LSTR t,yposq
VCMP t,#frameT
`BLE endspan
jCMP t,#frameB
t/MOVGT r15,r14           ;LDMFDGT r13!,{r15}
~
�CMP l,r
�MOVLT xl,l,ASR#fp%
�MOVLT xr,r,ASR#fp%
�MOVGE xl,r,ASR#fp%
�MOVGE xr,l,ASR#fp%
�
�CMP xl,#frameR
�BGT endspan
�CMP xr,#frameL
�BLT endspan
�CMP xl,#frameL
�MOVLT xl,#frameL
CMP xr,#frameR

MOVGT xr,#frameR

ADD xl,o,xl
(ADD xr,o,xr
2
<SUBS t,xr,xl
FBEQ endspan
PCMP t,#2
ZSTRLSB c1,[xl]
dSTRLSB c1,[xr,#-1]
nBLS endspan
xTST xl,#%01
�STRNEB c1,[xl],#1
�TST xl,#%10
�STRNEB c2,[xl],#1
�STRNEB c1,[xl],#1
�TST xr,#%01
�STRNEB c2,[xr,#-1]!
�TST xr,#%10
�STRNEB c1,[xr,#-1]!
�STRNEB c2,[xr,#-1]!
�SUBS t,xr,xl
�MOVS t,t,LSR#3
�STRCS c1,[xl],#4
�MOVS t,t,LSR#1
STMCSIA (xl)!,{c1,c2}

ADR xr,base
"SUB pc,xr,t,LSL#2
,	�vulc
6	.base
@
J.endspan
TADD l,l,la
^ADD r,r,ra
hADD o,o,#320
rSUBS ct,ct,#1
|
BNE lo
�/MOV r15,r14               ;LDMFD r13!,{r15}
�]
�xa=0:ya=1:za=2
�x=0:y=1:z=2
�sxa=3:sya=4:sza=5
�cxa=6:cya=7:cza=8
�n=9:p=10
�i=10
�pnts=11:fs=11
�t1=12:t2=14
�
�1x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
�	vs=12


[OPTi%
.helip DCD 24
&%DCD -5 :DCD 2  :DCD -14        ;0
0DCD -7 :DCD -7 :DCD -4
:DCD -10:DCD 4  :DCD -1
DDCD -9:DCD 4  :DCD 4
NDCD -5 :DCD -6 :DCD 6
X%DCD -6 :DCD 0  :DCD 10         ;5
bDCD 6  :DCD 0  :DCD 10
lDCD 5  :DCD -6 :DCD 6
vDCD 9 :DCD 4  :DCD 4
�DCD 10 :DCD 4  :DCD -1
�DCD 7  :DCD -7 :DCD -4
�&DCD 5  :DCD 2  :DCD -14        ;11
�
�DCD -3 :DCD 5  :DCD -12
�DCD -6 :DCD 6  :DCD -2
�%DCD -5 :DCD 6  :DCD 7         ;14
�DCD 5  :DCD 6  :DCD 7
�DCD 6  :DCD 6  :DCD -2
�DCD 3  :DCD 5  :DCD -12
�
�%DCD 0  :DCD 4  :DCD 8         ;18
�DCD -2 :DCD 0  :DCD 10
DCD -1 :DCD 0  :DCD 44
DCD 0  :DCD 2  :DCD 40
DCD 2  :DCD 0  :DCD 10
 DCD 1  :DCD 0  :DCD 44
*
4
>.helif DCD 22
HDCD &07:DCD &00010A0B
RDCD &13:DCD &0104070A
\DCD &13:DCD &04050607
fDCD &11:DCD &FF000201
pDCD &11:DCD &FF0B0A09
zDCD &10:DCD &02030401
�DCD &10:DCD &0A070809
�DCD &12:DCD &FF030504
�DCD &12:DCD &FF070608
�
�DCD &3F:DCD &000B110C
�DCD &3C:DCD &0C11100D
�DCD &13:DCD &0D100F0E
�DCD &12:DCD &0E0F0605
�
�DCD &07:DCD &000C0D02
�DCD &07:DCD &0B091011
�DCD &11:DCD &020D0E03
�DCD &11:DCD &1009080F
DCD &10:DCD &FF030E05
DCD &10:DCD &FF0F0806

$#DCD &12:DCD &16171512     ;tail
.DCD &12:DCD &13121514
8DCD &13:DCD &13141716
B
L
V
`
j.hrot DCD 0
t.hpitch DCD 0
~.hrol DCD 0
�.hx DCD 256<<fp%
�.hy DCD 300<<fp%
�.hheight DCD 0
�.hdx DCD 0
�.hdy DCD 0
�.hdz DCD 0
�.hpower DCD -16
�
�.control
�STMFD r13!,{r14}
�
BL update
�BL calcpoints
BL drawpoints

BL drawheli
LDMFD r13!,{r15}

(.update
2STMFD r13!,{r14}
<SWI "OS_Mouse"
F
CMP r2,#1
PLDRGE r3,hpower
ZADDEQ r3,r3,#2
dSTREQ r3,hpower
n
CMP r2,#4
xSUBEQ r3,r3,#2
�STREQ r3,hpower
�
�LDR r9,hpitch
�ADD r9,r9,r1,ASR#1
�MOV r9,r9,LSL#23
�MOV r9,r9,LSR#23
�STR r9,hpitch
�
�LDR r3,hrot
�SUB r3,r3,r0,ASR#2
�MOV r3,r3,LSL#23
�MOV r3,r3,LSR#23
�STR r3,hrot
STR r3,rot

LDR r4,hpower
"LDR r5,sinptr
,LDR r6,cosptr
6
@LDR r7,[r5,r9,ASL#2]
JLDR r8,[r6,r9,ASL#2]
T/MUL r8,r4,r8                ;verticle power
^.MUL r4,r7,r4                ;forward power
hMOV r4,r4,ASR#fp%
r;MOV r8,r8,ASR#fp%
|
�(LDR r7,hdz                 ;alter dz
�SUB r7,r7,r8,ASR#6
�SUB r7,r7,#gravity%
�STR r7,hdz
�LDR r8,hheight
�]
�� � fixed_height% �
�
[OPTi%
�ADD r8,r8,r7
�]
��
�
[OPTi%
�STR r8,hheight
 
 3MOV r8,r8,ASR#fp%+1       ;figure out cam angle
 ADD r8,r8,#camdrop%
 &STR r8,height
 0
 :LDR r5,[r5,r3,ASL#2]
 DLDR r6,[r6,r3,ASL#2]
 NMUL r5,r4,r5
 XMUL r6,r4,r6
 b
 lLDR r7,hdx
 vLDR r8,hdy
 �ADD r7,r7,r5,ASR#6
 �ADD r8,r8,r6,ASR#6
 �3MOV r9,r7,ASR#4            ;dec dx/dy (air res)
 �MOV r10,r8,ASR#4
 �SUB r7,r7,r9
 �SUB r8,r8,r10
 �STR r7,hdx
 �STR r8,hdy
 �
 �
LDR r9,hx
 �LDR r10,hy
 �ADD r9,r9,r7
 �ADD r10,r10,r8
!
STR r9,hx
!STR r10,hy
!MOV r9,r9,ASR#fp%
! MOV r10,r10,ASR#fp%
!*STR r9,xpos
!4STR r10,ypos
!>
!H
!RLDMFD r13!,{r15}
!\
!f
.drawheli
!pSTMFD r13!,{r14}
!z'ADR r11,helip             ;drawheli
!�ADR r12,helif
!�LDR r0,hpitch
!�
MOV r1,#0
!�
MOV r2,#0
!�
MOV r3,#0
!�LDR r6,height
!�LDR r7,hheight
!�SUB r4,r6,r7,ASR#fp%
!�
MOV r5,#0
!�BL drawobj
!�LDMFD r13!,{r15}
!�
!�.objx DCD 0
".objy DCD 0
".objz DCD 0
".faces DCD 0
"$B.drawobj         ;r0=xa, r1=ya, r2=za, r11=pntptr, r12 faceptr
".&STR r14,retsave  ;r3=x, r4=y, r5=z
"8;STR r3,objx
"BSTR r4,objy
"L;STR r5,objz
"VSTR r12,faces
"`
"jLDR p,sinptr
"tLDR sxa,[p,xa,ASL#2]
"~LDR sya,[p,ya,ASL#2]
"�LDR sza,[p,za,ASL#2]
"�LDR p,cosptr
"�LDR cxa,[p,xa,ASL#2]
"�LDR cya,[p,ya,ASL#2]
"�LDR cza,[p,za,ASL#2]
"�
"�ADR i,image
"�,LDR n,[pnts],#4           ;num of points
"�
"�
.pobjloop
"�LDMIA pnts !,{x,y,z}
"�$MUL t2,z,sxa              ;rot x
#RSB t2,t2,#0
#
MLA t1,y,cxa,t2
#MUL t2,y,sxa
#MLA t2,z,cxa,t2
#(MOV y,t1,ASR#fp%
#2MOV z,t2,ASR#fp%
#<
#F$MUL t2,z,sya              ;rot y
#PRSB t2,t2,#0
#ZMLA t1,x,cya,t2
#dMUL t2,x,sya
#nMLA t2,z,cya,t2
#xMOV x,t1,ASR#fp%
#�MOV z,t2,ASR#fp%
#�
#�$MUL t2,y,sza              ;rot z
#�RSB t2,t2,#0
#�MLA t1,x,cza,t2
#�MUL t2,x,sza
#�MLA t2,y,cza,t2
#�MOV x,t1,ASR#fp%
#�MOV y,t2,ASR#fp%
#�
#�,LDR t1,objy               ;adjust coords
#�;LDR t2,objz
#�ADD y,y,t1
$;ADD z,z,t2
$ADD z,z,#yshift%
$
$"0LDR t1,perspptr           ;apply perspective
$,LDR t1,[t1,z,ASL#2]
$6MUL x,t1,x
$@MUL y,t1,y
$JMOV x,x,ASR#fp%
$TMOV y,y,ASR#fp%
$^STMIA i !,{x,y}
$h;BL plot
$r
$|SUBS n,n,#1
$�BNE pobjloop
$�
$�'LDR fs,faces           ;draw polies
$�LDR n,[fs],#4
$�ADR i,image
$�
$�
.fobjloop
$�>LDMIA fs !,{col,vs}     ;load colour and verts (T|4;3;2;1)
$�
$�� t2,vs,#&FF
$�ADD t2,i,t2,LSL#3
$�LDMIA t2,{x1,y1}
$�
%MOV vs,vs,LSR#8
%� t2,vs,#&FF
%ADD t2,i,t2,LSL#3
%&LDMIA t2,{x2,y2}
%0
%:MOV vs,vs,LSR#8
%D� t2,vs,#&FF
%NADD t2,i,t2,LSL#3
%XLDMIA t2,{x3,y3}
%b
%l9SUB y4,x2,x1            ;clip backwards (x4,y4-temps)
%vSUB x4,y3,y2
%�MUL x4,y4,x4
%�SUB y4,y2,y1
%�SUB t2,x3,x2
%�MUL y4,t2,y4
%�
CMP x4,y4
%�-BLT ycanne                ;y'canne see it
%�
%�MOV vs,vs,LSR#8
%�,CMP vs,#&FF               ;teST, &FF-tri
%��NE t2,vs,#&FF
%�ADDNE t2,i,t2,LSL#3
%�LDMNEIA t2,{x4,y4}
%�
BLNE quad
&BLEQ tri
&
&.ycanne
& SUBS n,n,#1
&*BNE fobjloop
&4
&>'LDR r15,retsave        ;MOV r15,r14
&H.image �gap(max3dpts%*8)
&R
&\
&f]�
&p
�P%-code%
&z#ș"OS_ReadVduVariables",vdu,vdu
&�vdu!4=!vdu+256*320
&��
&�
&�
ݤvulc
&��j%=1�20
&�
[OPTi%
&�STMIA (xl)!,{c1,c2,c3,c4}
&�]�
&�=""
&�
&�	ݤrot
&�
[OPTi%
&�MOV s,ax
'
MOV ax,bx
'
MOV bx,cx
'
MOV cx,dx
'$MOV dx,s
'.MOV s,ay
'8
MOV ay,by
'B
MOV by,cy
'L
MOV cy,dy
'VMOV dy,s
'`]
'j=0
't
'~
ݤgap(g%)
'�P%=P%+g%
'�=0
'�
'�ݤdata(a$)
'��g%=1 � �a$-1 �2
'�?P%=�("&"+�a$,g%,2))
'�P%?1=�("&"+�a$,g%,2))
'�	P%+=2
'��
'�=0
�
00000000  0d 00 0a 0a f4 3e 20 46  6c 79 0d 00 14 23 f4 3e  |.....> Fly...#.>|
00000010  20 57 72 69 74 65 6e 20  62 79 20 4d 6f 72 67 61  | Writen by Morga|
00000020  6e 20 48 65 6e 72 79 20  a9 31 39 39 34 0d 00 1e  |n Henry .1994...|
00000030  19 f4 3e 20 65 6e 72 79  40 64 63 73 2e 71 6d 77  |..> enry@dcs.qmw|
00000040  2e 61 63 2e 75 6b 0d 00  28 04 0d 00 32 13 66 69  |.ac.uk..(...2.fi|
00000050  78 65 64 5f 68 65 69 67  68 74 25 3d b9 0d 00 3c  |xed_height%=...<|
00000060  04 0d 00 46 1d ee 85 20  eb 30 3a f1 f6 24 3b 22  |...F... .0:..$;"|
00000070  20 61 74 20 6c 69 6e 65  20 22 3b 9e 3a e0 0d 00  | at line ";.:...|
00000080  50 0b eb 31 35 3a eb 31  33 0d 00 5a 0d c8 91 36  |P..15:.13..Z...6|
00000090  34 30 2c 35 31 32 0d 00  64 2b 66 72 61 6d 65 4c  |40,512..d+frameL|
000000a0  3d 30 3a 66 72 61 6d 65  52 3d 33 31 36 3a 66 72  |=0:frameR=316:fr|
000000b0  61 6d 65 54 3d 30 3a 66  72 61 6d 65 42 3d 32 35  |ameT=0:frameB=25|
000000c0  35 0d 00 6e 1a 6f 72 69  67 69 6e 58 3d 31 36 30  |5..n.originX=160|
000000d0  3a 6f 72 69 67 69 6e 59  3d 34 30 0d 00 78 04 0d  |:originY=40..x..|
000000e0  00 82 3a 73 69 7a 65 25  3d 31 32 38 3a 73 69 7a  |..:size%=128:siz|
000000f0  65 73 25 3d 37 20 20 3a  f4 20 73 69 7a 65 25 3d  |es%=7  :. size%=|
00000100  31 32 38 20 6f 72 20 32  35 36 2c 20 73 69 7a 65  |128 or 256, size|
00000110  73 25 3d 37 20 6f 72 20  38 0d 00 8c 0a 66 70 25  |s%=7 or 8....fp%|
00000120  3d 31 30 0d 00 96 34 64  69 73 70 78 25 3d 31 36  |=10...4dispx%=16|
00000130  20 20 20 20 20 20 20 20  20 20 20 3a f4 20 6e 75  |           :. nu|
00000140  6d 62 65 72 20 6f 66 20  76 69 73 61 62 6c 65 20  |mber of visable |
00000150  70 61 74 63 68 65 73 0d  00 a0 11 64 69 73 70 79  |patches....dispy|
00000160  25 3d 64 69 73 70 78 25  0d 00 aa 36 79 73 68 69  |%=dispx%...6yshi|
00000170  66 74 25 3d 32 30 38 20  20 20 20 20 20 20 20 20  |ft%=208         |
00000180  3a f4 20 63 6f 6e 74 72  6f 6c 73 20 63 65 6e 74  |:. controls cent|
00000190  72 65 20 6f 66 20 72 6f  74 61 74 69 6f 6e 0d 00  |re of rotation..|
000001a0  b4 2d 63 61 6d 64 72 6f  70 25 3d 37 35 20 20 20  |.-camdrop%=75   |
000001b0  20 20 20 20 20 20 3a f4  20 62 61 73 65 20 63 61  |      :. base ca|
000001c0  6d 65 72 61 20 68 65 69  67 68 74 0d 00 be 1d 70  |mera height....p|
000001d0  6f 69 6e 74 6d 6f 64 25  3d 28 64 69 73 70 78 25  |ointmod%=(dispx%|
000001e0  2a 32 2b 32 29 2a 31 32  0d 00 c8 10 6d 61 78 33  |*2+2)*12....max3|
000001f0  64 70 74 73 25 3d 33 32  0d 00 d2 26 67 72 61 76  |dpts%=32...&grav|
00000200  69 74 79 25 3d 31 39 36  20 20 20 20 20 20 20 20  |ity%=196        |
00000210  3a f4 20 68 65 6c 69 20  77 65 69 67 68 74 0d 00  |:. heli weight..|
00000220  dc 24 53 25 3d a3 20 20  20 20 20 20 20 20 20 20  |.$S%=.          |
00000230  20 20 3a f4 20 73 68 61  64 6f 77 20 6f 6e 2f 6f  |  :. shadow on/o|
00000240  66 66 0d 00 e6 04 0d 00  f0 15 de 73 69 6e 25 20  |ff.........sin% |
00000250  28 35 31 32 2b 31 32 38  29 2a 34 0d 00 fa 15 de  |(512+128)*4.....|
00000260  64 69 76 74 61 62 6c 65  25 20 34 30 39 36 2a 34  |divtable% 4096*4|
00000270  0d 01 04 11 de 70 65 72  73 70 25 20 35 31 32 2a  |.....persp% 512*|
00000280  34 0d 01 0e 17 de 6d 61  70 25 20 73 69 7a 65 25  |4.....map% size%|
00000290  2a 73 69 7a 65 25 2a 34  0d 01 18 29 de 70 6f 69  |*size%*4...).poi|
000002a0  6e 74 73 25 20 28 64 69  73 70 78 25 2a 32 2b 32  |nts% (dispx%*2+2|
000002b0  29 2a 28 64 69 73 70 79  25 2a 32 2b 32 29 2a 31  |)*(dispy%*2+2)*1|
000002c0  32 0d 01 22 15 de 62 69  6e 25 20 64 69 73 70 79  |2.."..bin% dispy|
000002d0  25 2a 36 34 2a 34 0d 01  2c 04 0d 01 36 31 f1 8a  |%*64*4..,...61..|
000002e0  30 2c 32 30 29 3b 22 4c  65 66 74 20 4d 6f 75 73  |0,20);"Left Mous|
000002f0  65 20 42 75 74 74 6f 6e  20 74 6f 20 69 6e 63 72  |e Button to incr|
00000300  65 61 73 65 20 70 6f 77  65 72 22 0d 01 40 2b f1  |ease power"..@+.|
00000310  22 52 69 67 68 74 20 4d  6f 75 73 65 20 42 75 74  |"Right Mouse But|
00000320  74 6f 6e 20 74 6f 20 64  65 63 72 65 61 73 65 20  |ton to decrease |
00000330  70 6f 77 65 72 22 0d 01  4a 09 f2 6d 69 73 63 0d  |power"..J..misc.|
00000340  01 54 08 f2 61 73 73 0d  01 5e 0c f2 73 68 6f 77  |.T..ass..^..show|
00000350  6d 61 70 0d 01 68 3c 21  70 6f 69 6e 74 6d 69 64  |map..h<!pointmid|
00000360  3d 70 6f 69 6e 74 73 25  2b 28 20 28 64 69 73 70  |=points%+( (disp|
00000370  78 25 2a 32 2b 32 29 2a  28 64 69 73 70 79 25 29  |x%*2+2)*(dispy%)|
00000380  2a 31 32 2b 64 69 73 70  78 25 2a 31 32 20 29 0d  |*12+dispx%*12 ).|
00000390  01 72 04 0d 01 7c 0b 74  3d 31 3a 73 3d 32 0d 01  |.r...|.t=1:s=2..|
000003a0  86 05 f5 0d 01 90 05 db  0d 01 9a 1e ec 2d 36 34  |.............-64|
000003b0  30 2c 35 30 30 3a df 42  59 2d 31 36 2a 21 68 70  |0,500:.BY-16*!hp|
000003c0  6f 77 65 72 2c 30 0d 01  a4 0b d6 75 70 64 61 74  |ower,0.....updat|
000003d0  65 0d 01 ae 0a c8 97 b8  30 2c 30 0d 01 b8 0f d6  |e.......0,0.....|
000003e0  63 61 6c 63 70 6f 69 6e  74 73 0d 01 c2 0f d6 64  |calcpoints.....d|
000003f0  72 61 77 70 6f 69 6e 74  73 0d 01 cc 12 e7 20 53  |rawpoints..... S|
00000400  25 20 d6 64 72 61 77 73  68 61 64 0d 01 d6 0d d6  |% .drawshad.....|
00000410  64 72 61 77 68 65 6c 69  0d 01 e0 2d c8 96 3a c8  |drawheli...-..:.|
00000420  99 36 2c 31 31 32 2c 73  3a c8 99 36 2c 31 31 33  |.6,112,s:..6,113|
00000430  2c 74 3a c8 94 74 2c 73  3a c8 94 21 76 64 75 2c  |,t:..t,s:..!vdu,|
00000440  76 64 75 21 34 0d 01 ea  06 fd a3 0d 01 f4 04 0d  |vdu!4...........|
00000450  01 fe 0a dd f2 6d 69 73  63 0d 02 08 09 f1 22 2e  |.....misc.....".|
00000460  22 3b 0d 02 12 0d 6b 3d  33 36 30 2f 35 31 32 0d  |";....k=360/512.|
00000470  02 1c 13 e3 69 25 3d 30  b8 28 35 31 32 2b 31 32  |....i%=0.(512+12|
00000480  37 29 0d 02 26 21 73 69  6e 25 21 28 69 25 2a 34  |7)..&!sin%!(i%*4|
00000490  29 3d 28 31 3c 3c 66 70  25 29 2a b5 b2 28 69 25  |)=(1<<fp%)*..(i%|
000004a0  2a 6b 29 0d 02 30 05 ed  0d 02 3a 09 f1 22 2e 22  |*k)..0....:.."."|
000004b0  3b 0d 02 44 0d e3 69 25  3d 30 b8 35 31 31 0d 02  |;..D..i%=0.511..|
000004c0  4e 0d 79 25 3d 35 31 32  2d 69 25 0d 02 58 1f 70  |N.y%=512-i%..X.p|
000004d0  65 72 73 70 25 21 28 69  25 2a 34 29 3d 28 33 30  |ersp%!(i%*4)=(30|
000004e0  30 3c 3c 66 70 25 29 2f  79 25 0d 02 62 05 ed 0d  |0<<fp%)/y%..b...|
000004f0  02 6c 09 f1 22 2e 22 3b  0d 02 76 28 e3 69 25 3d  |.l..".";..v(.i%=|
00000500  30 b8 20 28 64 69 73 70  78 25 2a 32 2b 32 29 2a  |0. (dispx%*2+2)*|
00000510  28 64 69 73 70 79 25 2a  32 2b 32 29 2a 33 2d 31  |(dispy%*2+2)*3-1|
00000520  0d 02 80 1a 70 6f 69 6e  74 73 25 21 28 69 25 2a  |....points%!(i%*|
00000530  34 29 3d 26 46 46 3c 3c  31 36 0d 02 8a 05 ed 0d  |4)=&FF<<16......|
00000540  02 94 09 f1 22 2e 22 3b  0d 02 9e 16 e3 69 25 3d  |....".";.....i%=|
00000550  30 b8 20 64 69 73 70 79  25 2a 36 34 2d 31 0d 02  |0. dispy%*64-1..|
00000560  a8 11 62 69 6e 25 21 28  69 25 2a 34 29 3d 30 0d  |..bin%!(i%*4)=0.|
00000570  02 b2 05 ed 0d 02 bc 09  f1 22 2e 22 3b 0d 02 c6  |.........".";...|
00000580  0d e3 69 25 3d 31 b8 36  33 39 0d 02 d0 20 64 69  |..i%=1.639... di|
00000590  76 74 61 62 6c 65 25 21  28 69 25 2a 34 29 3d 28  |vtable%!(i%*4)=(|
000005a0  31 3c 3c 66 70 25 29 2f  69 25 0d 02 da 05 ed 0d  |1<<fp%)/i%......|
000005b0  02 e4 09 f1 22 2e 22 3b  0d 02 ee 1c ff 28 22 4c  |....".";.....("L|
000005c0  4f 41 44 20 46 6c 79 4d  61 70 20 22 2b c3 7e 6d  |OAD FlyMap "+.~m|
000005d0  61 70 25 29 0d 02 f8 05  e1 0d 03 02 04 0d 03 0c  |ap%)............|
000005e0  0d dd f2 73 68 6f 77 6d  61 70 0d 03 16 0b 41 25  |...showmap....A%|
000005f0  3d 6d 61 70 25 0d 03 20  0b 42 25 3d 21 76 64 75  |=map%.. .B%=!vdu|
00000600  0d 03 2a 1f e3 78 25 3d  30 b8 73 69 7a 65 25 2d  |..*..x%=0.size%-|
00000610  31 3a e3 79 25 3d 30 b8  73 69 7a 65 25 2d 31 0d  |1:.y%=0.size%-1.|
00000620  03 34 1b 3f 42 25 3d 63  6f 6c 6f 75 72 73 3f 28  |.4.?B%=colours?(|
00000630  21 41 25 80 26 46 46 46  46 29 0d 03 3e 0f 42 25  |!A%.&FFFF)..>.B%|
00000640  2b 3d 31 3a 41 25 2b 3d  34 0d 03 48 05 ed 0d 03  |+=1:A%+=4..H....|
00000650  52 11 42 25 2b 3d 33 32  30 2d 73 69 7a 65 25 0d  |R.B%+=320-size%.|
00000660  03 5c 05 ed 0d 03 66 08  5a 25 3d 30 0d 03 70 19  |.\....f.Z%=0..p.|
00000670  c8 95 20 5a 25 3d 30 3a  c8 97 20 58 25 2c 59 25  |.. Z%=0:.. X%,Y%|
00000680  2c 5a 25 3a ce 0d 03 7a  05 e1 0d 03 84 04 0d 03  |,Z%:...z........|
00000690  8e 09 dd f2 61 73 73 0d  03 98 10 de 63 6f 64 65  |....ass.....code|
000006a0  25 20 36 34 30 30 30 0d  03 a2 04 0d 03 ac 0d e3  |% 64000.........|
000006b0  69 25 3d 30 b8 32 88 32  0d 03 b6 0f 78 3d 30 3a  |i%=0.2.2....x=0:|
000006c0  79 3d 31 3a 61 3d 32 0d  03 c0 0d 73 61 3d 33 3a  |y=1:a=2....sa=3:|
000006d0  63 61 3d 34 0d 03 ca 07  68 3d 32 0d 03 d4 11 73  |ca=4....h=2....s|
000006e0  63 72 78 3d 36 3a 73 63  72 79 3d 35 0d 03 de 0c  |crx=6:scry=5....|
000006f0  70 70 3d 37 3a 62 3d 38  0d 03 e8 0c 70 3d 39 3a  |pp=7:b=8....p=9:|
00000700  74 3d 31 30 0d 03 f2 0f  78 78 3d 31 31 3a 79 79  |t=10....xx=11:yy|
00000710  3d 31 32 0d 03 fc 0a 63  6f 6c 3d 31 34 0d 04 06  |=12....col=14...|
00000720  04 0d 04 10 0c 50 25 3d  63 6f 64 65 25 0d 04 1a  |.....P%=code%...|
00000730  0a 5b 4f 50 54 69 25 0d  04 24 17 2e 76 64 75 20  |.[OPTi%..$..vdu |
00000740  44 43 44 20 31 34 38 3a  44 43 44 20 2d 31 0d 04  |DCD 148:DCD -1..|
00000750  2e 1e 2e 64 69 76 74 61  62 6c 65 70 74 72 20 44  |...divtableptr D|
00000760  43 44 20 64 69 76 74 61  62 6c 65 25 0d 04 38 18  |CD divtable%..8.|
00000770  2e 70 65 72 73 70 70 74  72 20 44 43 44 20 70 65  |.perspptr DCD pe|
00000780  72 73 70 25 0d 04 42 14  2e 73 69 6e 70 74 72 20  |rsp%..B..sinptr |
00000790  44 43 44 20 73 69 6e 25  0d 04 4c 1c 2e 63 6f 73  |DCD sin%..L..cos|
000007a0  70 74 72 20 44 43 44 20  73 69 6e 25 2b 28 31 32  |ptr DCD sin%+(12|
000007b0  38 2a 34 29 0d 04 56 14  2e 6d 61 70 70 74 72 20  |8*4)..V..mapptr |
000007c0  44 43 44 20 6d 61 70 25  0d 04 60 1a 2e 70 6f 69  |DCD map%..`..poi|
000007d0  6e 74 73 70 74 72 20 44  43 44 20 70 6f 69 6e 74  |ntsptr DCD point|
000007e0  73 25 0d 04 6a 13 2e 70  6f 69 6e 74 6d 69 64 20  |s%..j..pointmid |
000007f0  44 43 44 20 30 0d 04 74  14 2e 62 69 6e 70 74 72  |DCD 0..t..binptr|
00000800  20 44 43 44 20 62 69 6e  25 0d 04 7e 04 0d 04 88  | DCD bin%..~....|
00000810  0f 2e 78 70 6f 73 20 44  43 44 20 30 0d 04 92 0f  |..xpos DCD 0....|
00000820  2e 79 70 6f 73 20 44 43  44 20 30 0d 04 9c 11 2e  |.ypos DCD 0.....|
00000830  68 65 69 67 68 74 20 44  43 44 20 30 0d 04 a6 0e  |height DCD 0....|
00000840  2e 72 6f 74 20 44 43 44  20 30 0d 04 b0 04 0d 04  |.rot DCD 0......|
00000850  ba 0f 2e 63 61 6c 63 70  6f 69 6e 74 73 0d 04 c4  |...calcpoints...|
00000860  13 53 54 52 20 72 31 34  2c 72 65 74 73 61 76 65  |.STR r14,retsave|
00000870  0d 04 ce 04 0d 04 d8 2c  4c 44 52 20 73 61 2c 73  |.......,LDR sa,s|
00000880  69 6e 70 74 72 20 20 20  20 20 20 20 20 20 20 20  |inptr           |
00000890  20 20 20 3b 73 69 6e 20  61 2c 20 63 6f 73 20 61  |   ;sin a, cos a|
000008a0  0d 04 e2 11 4c 44 52 20  63 61 2c 63 6f 73 70 74  |....LDR ca,cospt|
000008b0  72 0d 04 ec 0d 4c 44 52  20 61 2c 72 6f 74 0d 04  |r....LDR a,rot..|
000008c0  f6 17 4c 44 52 20 73 61  2c 5b 73 61 2c 61 2c 41  |..LDR sa,[sa,a,A|
000008d0  53 4c 23 32 5d 0d 05 00  17 4c 44 52 20 63 61 2c  |SL#2]....LDR ca,|
000008e0  5b 63 61 2c 61 2c 41 53  4c 23 32 5d 0d 05 0a 2e  |[ca,a,ASL#2]....|
000008f0  4c 44 52 20 68 2c 68 65  69 67 68 74 20 20 20 20  |LDR h,height    |
00000900  20 20 20 20 20 20 20 20  20 20 20 3b 63 75 72 72  |           ;curr|
00000910  65 6e 74 20 68 65 69 67  68 74 0d 05 14 15 41 44  |ent height....AD|
00000920  44 20 68 2c 68 2c 23 63  61 6d 64 72 6f 70 25 0d  |D h,h,#camdrop%.|
00000930  05 1e 14 4c 44 52 20 70  70 2c 70 6f 69 6e 74 73  |...LDR pp,points|
00000940  70 74 72 0d 05 28 10 4c  44 52 20 62 2c 62 69 6e  |ptr..(.LDR b,bin|
00000950  70 74 72 0d 05 32 04 0d  05 3c 0f 4c 44 52 20 78  |ptr..2...<.LDR x|
00000960  78 2c 78 70 6f 73 0d 05  46 0f 4c 44 52 20 79 79  |x,xpos..F.LDR yy|
00000970  2c 79 70 6f 73 0d 05 50  04 0d 05 5a 04 0d 05 64  |,ypos..P...Z...d|
00000980  13 4d 56 4e 20 79 2c 23  ac 2d 64 69 73 70 79 25  |.MVN y,#.-dispy%|
00000990  0d 05 6e 0a 2e 79 6c 6f  6f 70 0d 05 78 13 4d 56  |..n..yloop..x.MV|
000009a0  4e 20 78 2c 23 ac 2d 64  69 73 70 78 25 0d 05 82  |N x,#.-dispx%...|
000009b0  0a 2e 78 6c 6f 6f 70 0d  05 8c 04 0d 05 96 11 80  |..xloop.........|
000009c0  20 70 2c 78 78 2c 23 25  31 31 31 31 0d 05 a0 11  | p,xx,#%1111....|
000009d0  80 20 74 2c 79 79 2c 23  25 31 31 31 31 0d 05 aa  |. t,yy,#%1111...|
000009e0  13 52 53 42 20 70 2c 70  2c 78 2c 41 53 4c 23 34  |.RSB p,p,x,ASL#4|
000009f0  0d 05 b4 13 52 53 42 20  74 2c 74 2c 79 2c 41 53  |....RSB t,t,y,AS|
00000a00  4c 23 34 0d 05 be 04 0d  05 c8 11 4d 55 4c 20 73  |L#4........MUL s|
00000a10  63 72 78 2c 74 2c 73 61  0d 05 d2 14 52 53 42 20  |crx,t,sa....RSB |
00000a20  73 63 72 78 2c 73 63 72  78 2c 23 30 0d 05 dc 16  |scrx,scrx,#0....|
00000a30  4d 4c 41 20 73 63 72 78  2c 70 2c 63 61 2c 73 63  |MLA scrx,p,ca,sc|
00000a40  72 78 0d 05 e6 11 4d 55  4c 20 73 63 72 79 2c 74  |rx....MUL scry,t|
00000a50  2c 63 61 0d 05 f0 35 4d  4c 41 20 73 63 72 79 2c  |,ca...5MLA scry,|
00000a60  70 2c 73 61 2c 73 63 72  79 20 20 20 20 20 20 20  |p,sa,scry       |
00000a70  20 20 20 3b 73 63 72 78  3c 3c 66 70 25 2c 20 73  |   ;scrx<<fp%, s|
00000a80  63 72 79 3c 3c 66 70 25  0d 05 fa 39 4d 4f 56 20  |cry<<fp%...9MOV |
00000a90  73 63 72 78 2c 73 63 72  78 2c 41 53 52 23 36 2b  |scrx,scrx,ASR#6+|
00000aa0  34 20 20 20 20 20 20 20  3b 73 68 69 66 74 20 73  |4       ;shift s|
00000ab0  71 75 61 72 65 20 73 69  7a 65 20 28 2e 58 58 58  |quare size (.XXX|
00000ac0  29 0d 06 04 19 4d 4f 56  20 73 63 72 79 2c 73 63  |)....MOV scry,sc|
00000ad0  72 79 2c 41 53 52 23 36  2b 34 0d 06 0e 04 0d 06  |ry,ASR#6+4......|
00000ae0  18 2d 41 44 44 53 20 73  63 72 79 2c 73 63 72 79  |.-ADDS scry,scry|
00000af0  2c 23 79 73 68 69 66 74  25 20 20 20 20 20 3b 63  |,#yshift%     ;c|
00000b00  6c 69 70 20 73 71 75 61  72 65 73 0d 06 22 10 42  |lip squares..".B|
00000b10  4d 49 20 70 6f 69 6e 74  6f 75 74 0d 06 2c 19 43  |MI pointout..,.C|
00000b20  4d 50 20 73 63 72 79 2c  23 28 64 69 73 70 79 25  |MP scry,#(dispy%|
00000b30  2a 31 36 29 0d 06 36 10  42 47 45 20 70 6f 69 6e  |*16)..6.BGE poin|
00000b40  74 6f 75 74 0d 06 40 13  43 4d 4e 20 73 63 72 78  |tout..@.CMN scrx|
00000b50  2c 23 ac 2d 31 36 30 0d  06 4a 10 42 4c 54 20 70  |,#.-160..J.BLT p|
00000b60  6f 69 6e 74 6f 75 74 0d  06 54 11 43 4d 50 20 73  |ointout..T.CMP s|
00000b70  63 72 78 2c 23 31 36 30  0d 06 5e 10 42 47 45 20  |crx,#160..^.BGE |
00000b80  70 6f 69 6e 74 6f 75 74  0d 06 68 04 0d 06 72 2e  |pointout..h...r.|
00000b90  41 44 44 20 70 2c 78 2c  78 78 2c 41 53 52 23 34  |ADD p,x,xx,ASR#4|
00000ba0  20 20 20 20 20 20 20 20  20 20 3b 67 65 74 20 6c  |          ;get l|
00000bb0  61 6e 64 20 68 65 69 67  68 74 0d 06 7c 14 41 44  |and height..|.AD|
00000bc0  44 20 74 2c 79 2c 79 79  2c 41 53 52 23 34 0d 06  |D t,y,yy,ASR#4..|
00000bd0  86 12 80 20 70 2c 70 2c  23 73 69 7a 65 25 2d 31  |... p,p,#size%-1|
00000be0  0d 06 90 12 80 20 74 2c  74 2c 23 73 69 7a 65 25  |..... t,t,#size%|
00000bf0  2d 31 0d 06 9a 18 41 44  44 20 74 2c 70 2c 74 2c  |-1....ADD t,p,t,|
00000c00  41 53 4c 23 73 69 7a 65  73 25 0d 06 a4 04 0d 06  |ASL#sizes%......|
00000c10  ae 10 4c 44 52 20 70 2c  6d 61 70 70 74 72 0d 06  |..LDR p,mapptr..|
00000c20  b8 15 4c 44 52 20 74 2c  5b 70 2c 74 2c 41 53 4c  |..LDR t,[p,t,ASL|
00000c30  23 32 5d 0d 06 c2 2d 4d  4f 56 20 63 6f 6c 2c 74  |#2]...-MOV col,t|
00000c40  2c 4c 53 4c 23 31 36 20  20 20 20 20 20 20 20 20  |,LSL#16         |
00000c50  20 3b 65 78 74 72 61 63  74 20 63 6f 6c 6f 75 72  | ;extract colour|
00000c60  0d 06 cc 16 4d 4f 56 20  63 6f 6c 2c 63 6f 6c 2c  |....MOV col,col,|
00000c70  4c 53 52 23 31 36 0d 06  d6 12 4d 4f 56 20 74 2c  |LSR#16....MOV t,|
00000c80  74 2c 41 53 52 23 31 36  0d 06 e0 04 0d 06 ea 12  |t,ASR#16........|
00000c90  4c 44 52 20 70 2c 70 65  72 73 70 70 74 72 0d 06  |LDR p,perspptr..|
00000ca0  f4 2c 4c 44 52 20 70 2c  5b 70 2c 73 63 72 79 2c  |.,LDR p,[p,scry,|
00000cb0  41 53 4c 23 32 5d 20 20  20 20 20 20 3b 70 65 72  |ASL#2]      ;per|
00000cc0  73 70 65 63 74 69 76 65  20 6b 0d 06 fe 04 0d 07  |spective k......|
00000cd0  08 30 4d 55 4c 20 73 63  72 78 2c 70 2c 73 63 72  |.0MUL scrx,p,scr|
00000ce0  78 20 20 20 20 20 20 20  20 20 20 20 3b 61 70 70  |x           ;app|
00000cf0  6c 79 20 70 65 72 73 70  65 63 74 69 76 65 0d 07  |ly perspective..|
00000d00  12 19 4d 4f 56 20 73 63  72 78 2c 73 63 72 78 2c  |..MOV scrx,scrx,|
00000d10  41 53 52 23 66 70 25 0d  07 1c 04 0d 07 26 0d 53  |ASR#fp%......&.S|
00000d20  55 42 20 74 2c 68 2c 74  0d 07 30 0d 4d 55 4c 20  |UB t,h,t..0.MUL |
00000d30  74 2c 70 2c 74 0d 07 3a  13 4d 4f 56 20 74 2c 74  |t,p,t..:.MOV t,t|
00000d40  2c 41 53 52 23 66 70 25  0d 07 44 04 0d 07 4e 3e  |,ASR#fp%..D...N>|
00000d50  53 54 4d 49 41 20 70 70  2c 7b 73 63 72 78 2c 74  |STMIA pp,{scrx,t|
00000d60  2c 63 6f 6c 7d 20 20 20  20 20 20 20 3b 58 2c 59  |,col}       ;X,Y|
00000d70  2c 63 6f 6c 20 61 72 72  61 6e 67 65 20 70 6f 69  |,col arrange poi|
00000d80  6e 74 20 73 74 6f 72 61  67 65 0d 07 58 17 4d 4f  |nt storage..X.MO|
00000d90  56 20 73 63 72 79 2c 73  63 72 79 2c 41 53 52 23  |V scry,scry,ASR#|
00000da0  34 0d 07 62 34 41 44 44  20 73 63 72 79 2c 62 2c  |4..b4ADD scry,b,|
00000db0  73 63 72 79 2c 41 53 4c  23 38 20 20 20 20 20 20  |scry,ASL#8      |
00000dc0  20 3b 62 69 6e 20 73 63  72 79 20 2a 20 36 34 2a  | ;bin scry * 64*|
00000dd0  34 3d 32 35 36 0d 07 6c  2d 4c 44 52 20 74 2c 5b  |4=256..l-LDR t,[|
00000de0  73 63 72 79 5d 20 20 20  20 20 20 20 20 20 20 20  |scry]           |
00000df0  20 20 20 20 20 3b 74 3d  6e 75 6d 20 69 6e 20 62  |     ;t=num in b|
00000e00  69 6e 0d 07 76 0e 41 44  44 20 74 2c 74 2c 23 31  |in..v.ADD t,t,#1|
00000e10  0d 07 80 10 53 54 52 20  74 2c 5b 73 63 72 79 5d  |....STR t,[scry]|
00000e20  0d 07 8a 19 53 54 52 20  70 70 2c 5b 73 63 72 79  |....STR pp,[scry|
00000e30  2c 74 2c 41 53 4c 23 32  5d 0d 07 94 04 0d 07 9e  |,t,ASL#2].......|
00000e40  04 0d 07 a8 0d 2e 70 6f  69 6e 74 6f 75 74 0d 07  |......pointout..|
00000e50  b2 30 41 44 44 20 70 70  2c 70 70 2c 23 31 32 20  |.0ADD pp,pp,#12 |
00000e60  20 20 20 20 20 20 20 20  20 20 20 3b 6d 6f 76 65  |           ;move|
00000e70  20 74 6f 20 6e 65 78 74  20 70 6f 69 6e 74 0d 07  | to next point..|
00000e80  bc 04 0d 07 c6 0e 41 44  44 20 78 2c 78 2c 23 31  |......ADD x,x,#1|
00000e90  0d 07 d0 11 43 4d 50 20  78 2c 23 64 69 73 70 78  |....CMP x,#dispx|
00000ea0  25 0d 07 da 0d 42 4c 45  20 78 6c 6f 6f 70 0d 07  |%....BLE xloop..|
00000eb0  e4 04 0d 07 ee 2e 41 44  44 20 70 70 2c 70 70 2c  |......ADD pp,pp,|
00000ec0  23 31 32 20 20 20 20 20  20 20 20 20 20 20 3b 61  |#12           ;a|
00000ed0  64 6a 75 73 74 20 66 6f  72 20 62 6f 72 64 65 72  |djust for border|
00000ee0  0d 07 f8 0e 41 44 44 20  79 2c 79 2c 23 31 0d 08  |....ADD y,y,#1..|
00000ef0  02 11 43 4d 50 20 79 2c  23 64 69 73 70 79 25 0d  |..CMP y,#dispy%.|
00000f00  08 0c 0d 42 4c 45 20 79  6c 6f 6f 70 0d 08 16 04  |...BLE yloop....|
00000f10  0d 08 20 2d 4c 44 52 20  72 30 2c 70 6f 69 6e 74  |.. -LDR r0,point|
00000f20  6d 69 64 20 20 20 20 20  20 20 3b 73 68 61 64 6f  |mid       ;shado|
00000f30  77 20 63 61 6c 63 75 6c  61 74 69 6f 6e 0d 08 2a  |w calculation..*|
00000f40  12 4c 44 52 20 72 33 2c  5b 72 30 2c 23 34 5d 0d  |.LDR r3,[r0,#4].|
00000f50  08 34 13 53 54 52 20 72  33 2c 73 68 61 64 70 6e  |.4.STR r3,shadpn|
00000f60  74 73 0d 08 3e 04 0d 08  48 26 4c 44 52 20 72 31  |ts..>...H&LDR r1|
00000f70  35 2c 72 65 74 73 61 76  65 20 20 20 20 20 20 20  |5,retsave       |
00000f80  3b 4d 4f 56 20 72 31 35  2c 72 31 34 0d 08 52 04  |;MOV r15,r14..R.|
00000f90  0d 08 5c 04 0d 08 66 0d  2e 64 72 61 77 73 68 61  |..\...f..drawsha|
00000fa0  64 0d 08 70 13 53 54 52  20 72 31 34 2c 72 65 74  |d..p.STR r14,ret|
00000fb0  73 61 76 65 0d 08 7a 0d  4d 4f 56 20 72 30 2c 23  |save..z.MOV r0,#|
00000fc0  30 0d 08 84 13 4c 44 52  20 72 31 2c 73 68 61 64  |0....LDR r1,shad|
00000fd0  70 6e 74 73 0d 08 8e 0d  4d 4f 56 20 72 32 2c 23  |pnts....MOV r2,#|
00000fe0  38 0d 08 98 10 41 44 44  20 72 33 2c 72 31 2c 23  |8....ADD r3,r1,#|
00000ff0  34 0d 08 a2 0d 4d 4f 56  20 72 34 2c 23 30 0d 08  |4....MOV r4,#0..|
00001000  ac 10 41 44 44 20 72 35  2c 72 31 2c 23 38 0d 08  |..ADD r5,r1,#8..|
00001010  b6 0f 4d 56 4e 20 72 36  2c 23 ac 2d 38 0d 08 c0  |..MVN r6,#.-8...|
00001020  10 41 44 44 20 72 37 2c  72 31 2c 23 34 0d 08 ca  |.ADD r7,r1,#4...|
00001030  0d 4d 4f 56 20 72 38 2c  23 30 0d 08 d4 0b 42 4c  |.MOV r8,#0....BL|
00001040  20 71 75 61 64 0d 08 de  13 4c 44 52 20 72 31 35  | quad....LDR r15|
00001050  2c 72 65 74 73 61 76 65  0d 08 e8 04 0d 08 f2 13  |,retsave........|
00001060  2e 73 68 61 64 70 6e 74  73 20 44 43 44 20 30 0d  |.shadpnts DCD 0.|
00001070  08 fc 05 5d 0d 09 06 31  78 31 3d 30 3a 79 31 3d  |...]...1x1=0:y1=|
00001080  31 3a 78 32 3d 32 3a 79  32 3d 33 3a 78 33 3d 34  |1:x2=2:y2=3:x3=4|
00001090  3a 79 33 3d 35 3a 78 34  3d 36 3a 79 34 3d 37 3a  |:y3=5:x4=6:y4=7:|
000010a0  63 6f 6c 3d 38 0d 09 10  11 63 74 3d 39 3a 6e 3d  |col=8....ct=9:n=|
000010b0  31 30 3a 70 3d 38 0d 09  1a 0e 62 70 3d 31 31 3a  |10:p=8....bp=11:|
000010c0  62 3d 31 32 0d 09 24 04  0d 09 2e 07 6b 3d 30 0d  |b=12..$.....k=0.|
000010d0  09 38 0a 5b 4f 50 54 69  25 0d 09 42 12 2e 72 65  |.8.[OPTi%..B..re|
000010e0  74 73 61 76 65 20 44 43  44 20 30 0d 09 4c 0f 2e  |tsave DCD 0..L..|
000010f0  64 72 61 77 70 6f 69 6e  74 73 0d 09 56 13 53 54  |drawpoints..V.ST|
00001100  52 20 72 31 34 2c 72 65  74 73 61 76 65 0d 09 60  |R r14,retsave..`|
00001110  10 4c 44 52 20 62 2c 62  69 6e 70 74 72 0d 09 6a  |.LDR b,binptr..j|
00001120  04 0d 09 74 0d 4d 4f 56  20 63 74 2c 23 30 0d 09  |...t.MOV ct,#0..|
00001130  7e 0c 2e 62 69 6e 6c 6f  6f 70 0d 09 88 15 41 44  |~..binloop....AD|
00001140  44 20 62 70 2c 62 2c 63  74 2c 41 53 4c 23 38 0d  |D bp,b,ct,ASL#8.|
00001150  09 92 0e 4c 44 52 20 6e  2c 5b 62 70 5d 0d 09 9c  |...LDR n,[bp]...|
00001160  04 0d 09 a6 0c 4d 4f 56  53 20 6e 2c 6e 0d 09 b0  |.....MOVS n,n...|
00001170  0e 42 45 51 20 6e 6f 6d  6f 72 65 0d 09 ba 0a 2e  |.BEQ nomore.....|
00001180  69 6e 62 69 6e 0d 09 c4  31 4c 44 52 20 70 2c 5b  |inbin...1LDR p,[|
00001190  62 70 2c 6e 2c 41 53 4c  23 32 5d 20 20 20 20 20  |bp,n,ASL#2]     |
000011a0  20 20 20 20 3b 70 20 70  74 72 20 74 6f 20 64 65  |    ;p ptr to de|
000011b0  20 70 6f 69 6e 74 0d 09  ce 13 4c 44 4d 49 41 20  | point....LDMIA |
000011c0  70 2c 7b 78 31 2c 79 31  7d 0d 09 d8 12 4c 44 52  |p,{x1,y1}....LDR|
000011d0  20 78 32 2c 5b 70 2c 23  31 32 5d 0d 09 e2 12 4c  | x2,[p,#12]....L|
000011e0  44 52 20 79 32 2c 5b 70  2c 23 31 36 5d 0d 09 ec  |DR y2,[p,#16]...|
000011f0  13 43 4d 50 20 78 32 2c  23 26 46 46 3c 3c 31 36  |.CMP x2,#&FF<<16|
00001200  0d 09 f6 1e 4c 44 52 4e  45 20 78 33 2c 5b 70 2c  |....LDRNE x3,[p,|
00001210  23 70 6f 69 6e 74 6d 6f  64 25 2b 31 32 5d 0d 0a  |#pointmod%+12]..|
00001220  00 1e 4c 44 52 4e 45 20  79 33 2c 5b 70 2c 23 70  |..LDRNE y3,[p,#p|
00001230  6f 69 6e 74 6d 6f 64 25  2b 31 36 5d 0d 0a 0a 15  |ointmod%+16]....|
00001240  43 4d 50 4e 45 20 78 33  2c 23 26 46 46 3c 3c 31  |CMPNE x3,#&FF<<1|
00001250  36 0d 0a 14 1b 4c 44 52  4e 45 20 78 34 2c 5b 70  |6....LDRNE x4,[p|
00001260  2c 23 70 6f 69 6e 74 6d  6f 64 25 5d 0d 0a 1e 1d  |,#pointmod%]....|
00001270  4c 44 52 4e 45 20 79 34  2c 5b 70 2c 23 70 6f 69  |LDRNE y4,[p,#poi|
00001280  6e 74 6d 6f 64 25 2b 34  5d 0d 0a 28 15 43 4d 50  |ntmod%+4]..(.CMP|
00001290  4e 45 20 78 34 2c 23 26  46 46 3c 3c 31 36 0d 0a  |NE x4,#&FF<<16..|
000012a0  32 04 0d 0a 3c 12 4c 44  52 4e 45 20 70 2c 5b 70  |2...<.LDRNE p,[p|
000012b0  2c 23 38 5d 0d 0a 46 1a  52 53 42 4e 45 20 72 31  |,#8]..F.RSBNE r1|
000012c0  34 2c 63 74 2c 23 64 69  73 70 79 25 2d 31 0d 0a  |4,ct,#dispy%-1..|
000012d0  50 11 41 44 44 4e 45 20  70 2c 70 2c 72 31 34 0d  |P.ADDNE p,p,r14.|
000012e0  0a 5a 15 41 44 52 4e 45  20 72 31 34 2c 63 6f 6c  |.Z.ADRNE r14,col|
000012f0  6f 75 72 73 0d 0a 64 14  4c 44 52 4e 45 42 20 70  |ours..d.LDRNEB p|
00001300  2c 5b 72 31 34 2c 70 5d  0d 0a 6e 0d 42 4c 4e 45  |,[r14,p]..n.BLNE|
00001310  20 71 75 61 64 0d 0a 78  04 0d 0a 82 04 0d 0a 8c  | quad..x........|
00001320  0f 53 55 42 53 20 6e 2c  6e 2c 23 31 0d 0a 96 0d  |.SUBS n,n,#1....|
00001330  42 4e 45 20 69 6e 62 69  6e 0d 0a a0 04 0d 0a aa  |BNE inbin.......|
00001340  0b 2e 6e 6f 6d 6f 72 65  0d 0a b4 10 41 44 44 20  |..nomore....ADD |
00001350  63 74 2c 63 74 2c 23 31  0d 0a be 12 43 4d 50 20  |ct,ct,#1....CMP |
00001360  63 74 2c 23 64 69 73 70  79 25 0d 0a c8 0f 42 4e  |ct,#dispy%....BN|
00001370  45 20 62 69 6e 6c 6f 6f  70 0d 0a d2 04 0d 0a dc  |E binloop.......|
00001380  04 0d 0a e6 3d 2e 65 6d  70 74 79 62 69 6e 73 20  |....=.emptybins |
00001390  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013a0  3b 72 65 6d 6f 76 65 20  62 69 6e 73 20 61 6e 64  |;remove bins and|
000013b0  20 64 65 6c 65 74 65 20  70 6f 69 6e 74 73 0d 0a  | delete points..|
000013c0  f0 12 4d 4f 56 20 6b 2c  23 26 46 46 3c 3c 31 36  |..MOV k,#&FF<<16|
000013d0  0d 0a fa 04 0d 0b 04 14  4d 4f 56 20 63 74 2c 23  |........MOV ct,#|
000013e0  64 69 73 70 79 25 2d 31  0d 0b 0e 0e 2e 65 6d 70  |dispy%-1.....emp|
000013f0  74 79 6c 6f 6f 70 0d 0b  18 15 41 44 44 20 62 70  |tyloop....ADD bp|
00001400  2c 62 2c 63 74 2c 41 53  4c 23 38 0d 0b 22 0e 4c  |,b,ct,ASL#8..".L|
00001410  44 52 20 6e 2c 5b 62 70  5d 0d 0b 2c 04 0d 0b 36  |DR n,[bp]..,...6|
00001420  0c 4d 4f 56 53 20 6e 2c  6e 0d 0b 40 0f 42 45 51  |.MOVS n,n..@.BEQ|
00001430  20 6e 6f 6d 6f 72 65 32  0d 0b 4a 0b 2e 6f 75 74  | nomore2..J..out|
00001440  62 69 6e 0d 0b 54 31 4c  44 52 20 70 2c 5b 62 70  |bin..T1LDR p,[bp|
00001450  2c 6e 2c 41 53 4c 23 32  5d 20 20 20 20 20 20 20  |,n,ASL#2]       |
00001460  20 20 3b 70 20 70 74 72  20 74 6f 20 64 65 20 70  |  ;p ptr to de p|
00001470  6f 69 6e 74 0d 0b 5e 0d  53 54 52 20 6b 2c 5b 70  |oint..^.STR k,[p|
00001480  5d 0d 0b 68 04 0d 0b 72  0f 53 55 42 53 20 6e 2c  |]..h...r.SUBS n,|
00001490  6e 2c 23 31 0d 0b 7c 0e  42 4e 45 20 6f 75 74 62  |n,#1..|.BNE outb|
000014a0  69 6e 0d 0b 86 29 53 54  52 20 6e 2c 5b 62 70 5d  |in...)STR n,[bp]|
000014b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000014c0  20 3b 65 6d 70 74 79 20  62 69 6e 0d 0b 90 04 0d  | ;empty bin.....|
000014d0  0b 9a 0c 2e 6e 6f 6d 6f  72 65 32 0d 0b a4 11 53  |....nomore2....S|
000014e0  55 42 53 20 63 74 2c 63  74 2c 23 31 0d 0b ae 11  |UBS ct,ct,#1....|
000014f0  42 50 4c 20 65 6d 70 74  79 6c 6f 6f 70 0d 0b b8  |BPL emptyloop...|
00001500  04 0d 0b c2 13 4c 44 52  20 72 31 35 2c 72 65 74  |.....LDR r15,ret|
00001510  73 61 76 65 0d 0b cc 04  0d 0b d6 0c 2e 63 6f 6c  |save.........col|
00001520  6f 75 72 73 0d 0b e0 33  a4 64 61 74 61 28 22 46  |ours...3.data("F|
00001530  46 46 45 46 44 46 43 44  33 44 32 44 31 44 30 32  |FFEFDFCD3D2D1D02|
00001540  46 32 45 32 44 32 43 32  43 32 43 32 43 32 43 22  |F2E2D2C2C2C2C2C"|
00001550  29 20 3b 67 72 65 79 0d  0b ea 39 a4 64 61 74 61  |) ;grey...9.data|
00001560  28 22 41 42 41 41 41 39  41 38 38 33 38 32 38 31  |("ABAAA9A8838281|
00001570  38 30 30 42 30 41 30 39  30 38 30 38 30 38 30 38  |800B0A0908080808|
00001580  30 38 22 29 20 3b 6c 69  67 68 74 20 62 6c 75 65  |08") ;light blue|
00001590  0d 0b f4 3a a4 64 61 74  61 28 22 33 46 33 45 33  |...:.data("3F3E3|
000015a0  44 33 43 31 33 31 32 31  31 31 30 30 37 30 36 30  |D3C1312111007060|
000015b0  35 30 34 30 33 30 32 30  31 30 30 22 29 20 3b 70  |50403020100") ;p|
000015c0  69 6e 6b 20 2d 3e 20 72  65 64 0d 0b fe 3b a4 64  |ink -> red...;.d|
000015d0  61 74 61 28 22 35 46 35  45 35 44 35 43 33 33 33  |ata("5F5E5D5C333|
000015e0  32 33 31 33 30 30 37 30  36 30 35 30 34 30 34 30  |2313007060504040|
000015f0  34 30 34 30 34 22 29 20  3b 70 65 61 63 68 20 2d  |40404") ;peach -|
00001600  3e 20 72 65 64 0d 0c 08  3b a4 64 61 74 61 28 22  |> red...;.data("|
00001610  36 33 36 32 36 31 36 30  34 33 34 32 34 31 34 30  |6362616043424140|
00001620  32 33 32 32 32 31 32 30  32 30 32 30 32 30 32 30  |2322212020202020|
00001630  22 29 20 3b 62 72 69 67  68 74 20 67 72 65 65 6e  |") ;bright green|
00001640  0d 0c 12 05 5d 0d 0c 1c  04 0d 0c 26 17 61 78 3d  |....]......&.ax=|
00001650  30 3a 61 79 3d 31 3a 62  78 3d 32 3a 62 79 3d 33  |0:ay=1:bx=2:by=3|
00001660  0d 0c 30 17 63 78 3d 34  3a 63 79 3d 35 3a 64 78  |..0.cx=4:cy=5:dx|
00001670  3d 36 3a 64 79 3d 37 0d  0c 3a 0d 63 6f 6c 3d 38  |=6:dy=7..:.col=8|
00001680  3a 74 3d 39 0d 0c 44 04  0d 0c 4e 12 61 3d 31 30  |:t=9..D...N.a=10|
00001690  3a 62 3d 31 31 3a 63 3d  31 32 0d 0c 58 08 6e 3d  |:b=11:c=12..X.n=|
000016a0  31 30 0d 0c 62 0d 71 3d  31 31 3a 73 3d 31 32 0d  |10..b.q=11:s=12.|
000016b0  0c 6c 04 0d 0c 76 1a 78  6c 3d 30 3a 78 72 3d 31  |.l...v.xl=0:xr=1|
000016c0  3a 6c 3d 32 3a 72 3d 33  3a 63 74 3d 34 0d 0c 80  |:l=2:r=3:ct=4...|
000016d0  17 63 31 3d 35 3a 63 32  3d 36 3a 63 33 3d 37 3a  |.c1=5:c2=6:c3=7:|
000016e0  63 34 3d 38 0d 0c 8a 14  6f 3d 31 30 3a 6c 61 3d  |c4=8....o=10:la=|
000016f0  31 31 3a 72 61 3d 31 32  0d 0c 94 04 0d 0c 9e 17  |11:ra=12........|
00001700  73 70 3d 31 33 3a 6c 69  6e 6b 3d 31 34 3a 70 63  |sp=13:link=14:pc|
00001710  3d 31 35 0d 0c a8 0a 5b  4f 50 54 69 25 0d 0c b2  |=15....[OPTi%...|
00001720  0e 2e 61 78 64 20 45 51  55 44 30 0d 0c bc 0e 2e  |..axd EQUD0.....|
00001730  62 78 64 20 45 51 55 44  30 0d 0c c6 08 2e 63 78  |bxd EQUD0.....cx|
00001740  64 0d 0c d0 0e 2e 64 78  64 20 45 51 55 44 30 0d  |d.....dxd EQUD0.|
00001750  0c da 0d 2e 61 62 20 45  51 55 44 30 0d 0c e4 0d  |....ab EQUD0....|
00001760  2e 62 63 20 45 51 55 44  30 0d 0c ee 07 2e 64 63  |.bc EQUD0.....dc|
00001770  0d 0c f8 0d 2e 63 64 20  45 51 55 44 30 0d 0d 02  |.....cd EQUD0...|
00001780  07 2e 61 63 0d 0d 0c 0d  2e 61 64 20 45 51 55 44  |..ac.....ad EQUD|
00001790  30 0d 0d 16 0d 2e 61 61  20 45 51 55 44 30 0d 0d  |0.....aa EQUD0..|
000017a0  20 07 2e 64 64 0d 0d 2a  0d 2e 62 62 20 45 51 55  | ..dd..*..bb EQU|
000017b0  44 30 0d 0d 34 0d 2e 63  63 20 45 51 55 44 30 0d  |D0..4..cc EQUD0.|
000017c0  0d 3e 10 2e 79 70 6f 73  71 20 45 51 55 44 30 0d  |.>..yposq EQUD0.|
000017d0  0d 48 1a 2e 64 69 74 61  62 64 20 45 51 55 44 20  |.H..ditabd EQUD |
000017e0  64 69 76 74 61 62 6c 65  25 0d 0d 52 04 0d 0d 5c  |divtable%..R...\|
000017f0  08 2e 74 72 69 0d 0d 66  1b 53 54 4d 46 44 20 72  |..tri..f.STMFD r|
00001800  31 33 21 2c 7b 72 39 2d  72 31 32 2c 72 31 34 7d  |13!,{r9-r12,r14}|
00001810  0d 0d 70 04 0d 0d 7a 13  3b 80 20 63 6f 6c 2c 63  |..p...z.;. col,c|
00001820  6f 6c 2c 23 26 66 66 0d  0d 84 19 41 44 44 20 63  |ol,#&ff....ADD c|
00001830  6f 6c 2c 63 6f 6c 2c 63  6f 6c 2c 4c 53 4c 23 38  |ol,col,col,LSL#8|
00001840  0d 0d 8e 1a 41 44 44 20  63 6f 6c 2c 63 6f 6c 2c  |....ADD col,col,|
00001850  63 6f 6c 2c 4c 53 4c 23  31 36 0d 0d 98 04 0d 0d  |col,LSL#16......|
00001860  a2 16 41 44 44 20 61 78  2c 61 78 2c 23 6f 72 69  |..ADD ax,ax,#ori|
00001870  67 69 6e 58 0d 0d ac 16  41 44 44 20 62 78 2c 62  |ginX....ADD bx,b|
00001880  78 2c 23 6f 72 69 67 69  6e 58 0d 0d b6 16 41 44  |x,#originX....AD|
00001890  44 20 63 78 2c 63 78 2c  23 6f 72 69 67 69 6e 58  |D cx,cx,#originX|
000018a0  0d 0d c0 04 0d 0d ca 1f  43 4d 50 20 61 79 2c 62  |........CMP ay,b|
000018b0  79 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 73  |y             ;s|
000018c0  6f 72 74 0d 0d d4 0e 4d  4f 56 47 54 20 74 2c 61  |ort....MOVGT t,a|
000018d0  78 0d 0d de 0f 4d 4f 56  47 54 20 61 78 2c 62 78  |x....MOVGT ax,bx|
000018e0  0d 0d e8 0e 4d 4f 56 47  54 20 62 78 2c 74 0d 0d  |....MOVGT bx,t..|
000018f0  f2 0e 4d 4f 56 47 54 20  74 2c 61 79 0d 0d fc 0f  |..MOVGT t,ay....|
00001900  4d 4f 56 47 54 20 61 79  2c 62 79 0d 0e 06 0e 4d  |MOVGT ay,by....M|
00001910  4f 56 47 54 20 62 79 2c  74 0d 0e 10 0d 43 4d 50  |OVGT by,t....CMP|
00001920  20 62 79 2c 63 79 0d 0e  1a 0e 4d 4f 56 47 54 20  | by,cy....MOVGT |
00001930  74 2c 62 78 0d 0e 24 0f  4d 4f 56 47 54 20 62 78  |t,bx..$.MOVGT bx|
00001940  2c 63 78 0d 0e 2e 0e 4d  4f 56 47 54 20 63 78 2c  |,cx....MOVGT cx,|
00001950  74 0d 0e 38 0e 4d 4f 56  47 54 20 74 2c 62 79 0d  |t..8.MOVGT t,by.|
00001960  0e 42 0f 4d 4f 56 47 54  20 62 79 2c 63 79 0d 0e  |.B.MOVGT by,cy..|
00001970  4c 0e 4d 4f 56 47 54 20  63 79 2c 74 0d 0e 56 0d  |L.MOVGT cy,t..V.|
00001980  43 4d 50 20 61 79 2c 62  79 0d 0e 60 0e 4d 4f 56  |CMP ay,by..`.MOV|
00001990  47 54 20 74 2c 61 78 0d  0e 6a 0f 4d 4f 56 47 54  |GT t,ax..j.MOVGT|
000019a0  20 61 78 2c 62 78 0d 0e  74 0e 4d 4f 56 47 54 20  | ax,bx..t.MOVGT |
000019b0  62 78 2c 74 0d 0e 7e 0e  4d 4f 56 47 54 20 74 2c  |bx,t..~.MOVGT t,|
000019c0  61 79 0d 0e 88 0f 4d 4f  56 47 54 20 61 79 2c 62  |ay....MOVGT ay,b|
000019d0  79 0d 0e 92 0e 4d 4f 56  47 54 20 62 79 2c 74 0d  |y....MOVGT by,t.|
000019e0  0e 9c 04 0d 0e a6 04 0d  0e b0 15 41 44 44 20 74  |...........ADD t|
000019f0  2c 61 79 2c 23 6f 72 69  67 69 6e 59 0d 0e ba 0f  |,ay,#originY....|
00001a00  53 54 52 20 74 2c 79 70  6f 73 71 0d 0e c4 04 0d  |STR t,yposq.....|
00001a10  0e ce 04 0d 0e d8 0e 53  54 52 20 61 78 2c 61 78  |.......STR ax,ax|
00001a20  64 0d 0e e2 0e 53 54 52  20 62 78 2c 62 78 64 0d  |d....STR bx,bxd.|
00001a30  0e ec 0e 53 54 52 20 63  78 2c 63 78 64 0d 0e f6  |...STR cx,cxd...|
00001a40  04 0d 0f 00 10 4c 44 52  20 71 2c 64 69 74 61 62  |.....LDR q,ditab|
00001a50  64 0d 0f 0a 0f 53 55 42  20 74 2c 62 78 2c 61 78  |d....SUB t,bx,ax|
00001a60  0d 0f 14 0f 53 55 42 20  6e 2c 62 79 2c 61 79 0d  |....SUB n,by,ay.|
00001a70  0f 1e 0c 53 54 52 20 6e  2c 61 61 0d 0f 28 15 4c  |...STR n,aa..(.L|
00001a80  44 52 20 6e 2c 5b 71 2c  6e 2c 41 53 4c 23 32 5d  |DR n,[q,n,ASL#2]|
00001a90  0d 0f 32 0d 4d 55 4c 20  6e 2c 74 2c 6e 0d 0f 3c  |..2.MUL n,t,n..<|
00001aa0  0c 53 54 52 20 6e 2c 61  62 0d 0f 46 04 0d 0f 50  |.STR n,ab..F...P|
00001ab0  0f 53 55 42 20 74 2c 63  78 2c 62 78 0d 0f 5a 0f  |.SUB t,cx,bx..Z.|
00001ac0  53 55 42 20 6e 2c 63 79  2c 62 79 0d 0f 64 0c 53  |SUB n,cy,by..d.S|
00001ad0  54 52 20 6e 2c 62 62 0d  0f 6e 15 4c 44 52 20 6e  |TR n,bb..n.LDR n|
00001ae0  2c 5b 71 2c 6e 2c 41 53  4c 23 32 5d 0d 0f 78 0d  |,[q,n,ASL#2]..x.|
00001af0  4d 55 4c 20 6e 2c 74 2c  6e 0d 0f 82 0c 53 54 52  |MUL n,t,n....STR|
00001b00  20 6e 2c 62 63 0d 0f 8c  04 0d 0f 96 0f 53 55 42  | n,bc........SUB|
00001b10  20 74 2c 63 78 2c 61 78  0d 0f a0 0f 53 55 42 20  | t,cx,ax....SUB |
00001b20  6e 2c 63 79 2c 61 79 0d  0f aa 15 4c 44 52 20 6e  |n,cy,ay....LDR n|
00001b30  2c 5b 71 2c 6e 2c 41 53  4c 23 32 5d 0d 0f b4 0d  |,[q,n,ASL#2]....|
00001b40  4d 55 4c 20 6e 2c 74 2c  6e 0d 0f be 0c 53 54 52  |MUL n,t,n....STR|
00001b50  20 6e 2c 61 63 0d 0f c8  04 0d 0f d2 0d 4c 44 52  | n,ac........LDR|
00001b60  20 6f 2c 76 64 75 0d 0f  dc 15 41 44 44 20 74 2c  | o,vdu....ADD t,|
00001b70  61 79 2c 23 6f 72 69 67  69 6e 59 0d 0f e6 13 41  |ay,#originY....A|
00001b80  44 44 20 74 2c 74 2c 74  2c 41 53 4c 23 32 0d 0f  |DD t,t,t,ASL#2..|
00001b90  f0 13 41 44 44 20 6f 2c  6f 2c 74 2c 41 53 4c 23  |..ADD o,o,t,ASL#|
00001ba0  36 0d 0f fa 04 0d 10 04  0d 4d 4f 56 20 63 31 2c  |6........MOV c1,|
00001bb0  63 34 0d 10 0e 0d 4d 4f  56 20 63 32 2c 63 34 0d  |c4....MOV c2,c4.|
00001bc0  10 18 0d 4d 4f 56 20 63  33 2c 63 34 0d 10 22 04  |...MOV c3,c4..".|
00001bd0  0d 10 2c 0d 4c 44 52 20  63 74 2c 61 61 0d 10 36  |..,.LDR ct,aa..6|
00001be0  0d 43 4d 50 20 63 74 2c  23 30 0d 10 40 0d 4c 44  |.CMP ct,#0..@.LD|
00001bf0  52 20 74 2c 61 78 64 0d  10 4a 13 4d 4f 56 20 6c  |R t,axd..J.MOV l|
00001c00  2c 74 2c 41 53 4c 23 66  70 25 0d 10 54 13 4d 4f  |,t,ASL#fp%..T.MO|
00001c10  56 20 72 2c 74 2c 41 53  4c 23 66 70 25 0d 10 5e  |V r,t,ASL#fp%..^|
00001c20  0d 4c 44 52 20 6c 61 2c  61 63 0d 10 68 17 41 44  |.LDR la,ac..h.AD|
00001c30  44 20 6c 2c 6c 2c 23 31  3c 3c 28 66 70 25 2d 31  |D l,l,#1<<(fp%-1|
00001c40  29 0d 10 72 0d 4c 44 52  20 72 61 2c 61 62 0d 10  |)..r.LDR ra,ab..|
00001c50  7c 17 41 44 44 20 72 2c  72 2c 23 31 3c 3c 28 66  ||.ADD r,r,#1<<(f|
00001c60  70 25 2d 31 29 0d 10 86  0e 42 4c 4e 45 20 70 69  |p%-1)....BLNE pi|
00001c70  65 63 65 0d 10 90 04 0d  10 9a 0d 4c 44 52 20 63  |ece........LDR c|
00001c80  74 2c 62 62 0d 10 a4 0d  43 4d 50 20 63 74 2c 23  |t,bb....CMP ct,#|
00001c90  30 0d 10 ae 0d 4c 44 52  20 74 2c 62 78 64 0d 10  |0....LDR t,bxd..|
00001ca0  b8 13 4d 4f 56 20 72 2c  74 2c 41 53 4c 23 66 70  |..MOV r,t,ASL#fp|
00001cb0  25 0d 10 c2 0d 4c 44 52  20 72 61 2c 62 63 0d 10  |%....LDR ra,bc..|
00001cc0  cc 17 41 44 44 20 72 2c  72 2c 23 31 3c 3c 28 66  |..ADD r,r,#1<<(f|
00001cd0  70 25 2d 31 29 0d 10 d6  0e 42 4c 4e 45 20 70 69  |p%-1)....BLNE pi|
00001ce0  65 63 65 0d 10 e0 1c 4c  44 4d 46 44 20 72 31 33  |ece....LDMFD r13|
00001cf0  21 2c 7b 72 39 2d 72 31  32 2c 72 31 35 7d 5e 0d  |!,{r9-r12,r15}^.|
00001d00  10 ea 04 0d 10 f4 39 2e  71 75 61 64 20 20 20 20  |......9.quad    |
00001d10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d20  3b 62 61 73 65 64 20 6f  6e 20 61 20 72 6f 75 74  |;based on a rout|
00001d30  69 6e 65 20 62 79 20 4a  61 6e 20 ef 0d 10 fe 1b  |ine by Jan .....|
00001d40  53 54 4d 46 44 20 72 31  33 21 2c 7b 72 39 2d 72  |STMFD r13!,{r9-r|
00001d50  31 32 2c 72 31 34 7d 0d  11 08 04 0d 11 12 13 3b  |12,r14}........;|
00001d60  80 20 63 6f 6c 2c 63 6f  6c 2c 23 26 66 66 0d 11  |. col,col,#&ff..|
00001d70  1c 19 41 44 44 20 63 6f  6c 2c 63 6f 6c 2c 63 6f  |..ADD col,col,co|
00001d80  6c 2c 4c 53 4c 23 38 0d  11 26 1a 41 44 44 20 63  |l,LSL#8..&.ADD c|
00001d90  6f 6c 2c 63 6f 6c 2c 63  6f 6c 2c 4c 53 4c 23 31  |ol,col,col,LSL#1|
00001da0  36 0d 11 30 04 0d 11 3a  16 41 44 44 20 61 78 2c  |6..0...:.ADD ax,|
00001db0  61 78 2c 23 6f 72 69 67  69 6e 58 0d 11 44 16 41  |ax,#originX..D.A|
00001dc0  44 44 20 62 78 2c 62 78  2c 23 6f 72 69 67 69 6e  |DD bx,bx,#origin|
00001dd0  58 0d 11 4e 16 41 44 44  20 63 78 2c 63 78 2c 23  |X..N.ADD cx,cx,#|
00001de0  6f 72 69 67 69 6e 58 0d  11 58 16 41 44 44 20 64  |originX..X.ADD d|
00001df0  78 2c 64 78 2c 23 6f 72  69 67 69 6e 58 0d 11 62  |x,dx,#originX..b|
00001e00  04 0d 11 6c 24 4d 4f 56  20 74 2c 61 79 20 20 3b  |...l$MOV t,ay  ;|
00001e10  66 69 6e 64 20 73 6d 61  6c 6c 65 73 74 20 28 74  |find smallest (t|
00001e20  6f 70 29 20 79 0d 11 76  0c 43 4d 50 20 74 2c 62  |op) y..v.CMP t,b|
00001e30  79 0d 11 80 0e 4d 4f 56  47 54 20 74 2c 62 79 0d  |y....MOVGT t,by.|
00001e40  11 8a 0c 43 4d 50 20 74  2c 63 79 0d 11 94 0e 4d  |...CMP t,cy....M|
00001e50  4f 56 47 54 20 74 2c 63  79 0d 11 9e 0c 43 4d 50  |OVGT t,cy....CMP|
00001e60  20 74 2c 64 79 0d 11 a8  0e 4d 4f 56 47 54 20 74  | t,dy....MOVGT t|
00001e70  2c 64 79 0d 11 b2 04 0d  11 bc 0a 2e 6f 72 64 65  |,dy.........orde|
00001e80  72 0d 11 c6 0c 43 4d 50  20 74 2c 61 79 0d 11 d0  |r....CMP t,ay...|
00001e90  0a 42 45 51 20 6f 6b 0d  11 da 08 a4 72 6f 74 0d  |.BEQ ok.....rot.|
00001ea0  11 e4 0b 42 20 6f 72 64  65 72 0d 11 ee 07 2e 6f  |...B order.....o|
00001eb0  6b 0d 11 f8 04 0d 12 02  15 41 44 44 20 74 2c 61  |k........ADD t,a|
00001ec0  79 2c 23 6f 72 69 67 69  6e 59 0d 12 0c 0f 53 54  |y,#originY....ST|
00001ed0  52 20 74 2c 79 70 6f 73  71 0d 12 16 04 0d 12 20  |R t,yposq...... |
00001ee0  0d 43 4d 50 20 62 79 2c  64 79 0d 12 2a 0e 4d 4f  |.CMP by,dy..*.MO|
00001ef0  56 47 54 20 74 2c 62 78  0d 12 34 0e 4d 4f 56 47  |VGT t,bx..4.MOVG|
00001f00  54 20 73 2c 62 79 0d 12  3e 0f 4d 4f 56 47 54 20  |T s,by..>.MOVGT |
00001f10  62 78 2c 64 78 0d 12 48  0f 4d 4f 56 47 54 20 62  |bx,dx..H.MOVGT b|
00001f20  79 2c 64 79 0d 12 52 0e  4d 4f 56 47 54 20 64 78  |y,dy..R.MOVGT dx|
00001f30  2c 74 0d 12 5c 0e 4d 4f  56 47 54 20 64 79 2c 73  |,t..\.MOVGT dy,s|
00001f40  0d 12 66 04 0d 12 70 0d  43 4d 50 20 63 79 2c 64  |..f...p.CMP cy,d|
00001f50  79 0d 12 7a 0f 42 47 54  20 64 69 61 6d 6f 6e 64  |y..z.BGT diamond|
00001f60  0d 12 84 04 0d 12 8e 24  43 4d 50 20 63 79 2c 62  |.......$CMP cy,b|
00001f70  79 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |y               |
00001f80  3b 44 55 42 49 4f 55 53  0d 12 98 25 4d 4f 56 4c  |;DUBIOUS...%MOVL|
00001f90  54 20 63 79 2c 62 79 20  20 20 20 20 20 20 20 20  |T cy,by         |
00001fa0  20 20 20 20 3b 53 4f 4c  55 54 49 4f 4e 0d 12 a2  |    ;SOLUTION...|
00001fb0  04 0d 12 ac 0e 53 54 52  20 61 78 2c 61 78 64 0d  |.....STR ax,axd.|
00001fc0  12 b6 0e 53 54 52 20 62  78 2c 62 78 64 0d 12 c0  |...STR bx,bxd...|
00001fd0  0e 53 54 52 20 63 78 2c  63 78 64 0d 12 ca 04 0d  |.STR cx,cxd.....|
00001fe0  12 d4 10 4c 44 52 20 71  2c 64 69 74 61 62 64 0d  |...LDR q,ditabd.|
00001ff0  12 de 0f 53 55 42 20 74  2c 62 78 2c 61 78 0d 12  |...SUB t,bx,ax..|
00002000  e8 0f 53 55 42 20 6e 2c  62 79 2c 61 79 0d 12 f2  |..SUB n,by,ay...|
00002010  0c 53 54 52 20 6e 2c 61  61 0d 12 fc 15 4c 44 52  |.STR n,aa....LDR|
00002020  20 6e 2c 5b 71 2c 6e 2c  41 53 4c 23 32 5d 0d 13  | n,[q,n,ASL#2]..|
00002030  06 0d 4d 55 4c 20 6e 2c  74 2c 6e 0d 13 10 0c 53  |..MUL n,t,n....S|
00002040  54 52 20 6e 2c 61 62 0d  13 1a 0f 53 55 42 20 74  |TR n,ab....SUB t|
00002050  2c 64 78 2c 61 78 0d 13  24 0f 53 55 42 20 6e 2c  |,dx,ax..$.SUB n,|
00002060  64 79 2c 61 79 0d 13 2e  15 4c 44 52 20 6e 2c 5b  |dy,ay....LDR n,[|
00002070  71 2c 6e 2c 41 53 4c 23  32 5d 0d 13 38 0d 4d 55  |q,n,ASL#2]..8.MU|
00002080  4c 20 6e 2c 74 2c 6e 0d  13 42 0c 53 54 52 20 6e  |L n,t,n..B.STR n|
00002090  2c 61 64 0d 13 4c 0f 53  55 42 20 74 2c 63 78 2c  |,ad..L.SUB t,cx,|
000020a0  62 78 0d 13 56 0f 53 55  42 20 6e 2c 63 79 2c 62  |bx..V.SUB n,cy,b|
000020b0  79 0d 13 60 0c 53 54 52  20 6e 2c 62 62 0d 13 6a  |y..`.STR n,bb..j|
000020c0  15 4c 44 52 20 6e 2c 5b  71 2c 6e 2c 41 53 4c 23  |.LDR n,[q,n,ASL#|
000020d0  32 5d 0d 13 74 0d 4d 55  4c 20 6e 2c 74 2c 6e 0d  |2]..t.MUL n,t,n.|
000020e0  13 7e 0c 53 54 52 20 6e  2c 62 63 0d 13 88 0f 53  |.~.STR n,bc....S|
000020f0  55 42 20 74 2c 64 78 2c  63 78 0d 13 92 0f 53 55  |UB t,dx,cx....SU|
00002100  42 20 6e 2c 64 79 2c 63  79 0d 13 9c 0c 53 54 52  |B n,dy,cy....STR|
00002110  20 6e 2c 63 63 0d 13 a6  15 4c 44 52 20 6e 2c 5b  | n,cc....LDR n,[|
00002120  71 2c 6e 2c 41 53 4c 23  32 5d 0d 13 b0 0d 4d 55  |q,n,ASL#2]....MU|
00002130  4c 20 6e 2c 74 2c 6e 0d  13 ba 0c 53 54 52 20 6e  |L n,t,n....STR n|
00002140  2c 63 64 0d 13 c4 04 0d  13 ce 0d 4c 44 52 20 6f  |,cd........LDR o|
00002150  2c 76 64 75 0d 13 d8 15  41 44 44 20 74 2c 61 79  |,vdu....ADD t,ay|
00002160  2c 23 6f 72 69 67 69 6e  59 0d 13 e2 13 41 44 44  |,#originY....ADD|
00002170  20 74 2c 74 2c 74 2c 41  53 4c 23 32 0d 13 ec 13  | t,t,t,ASL#2....|
00002180  41 44 44 20 6f 2c 6f 2c  74 2c 41 53 4c 23 36 0d  |ADD o,o,t,ASL#6.|
00002190  13 f6 04 0d 14 00 0d 4d  4f 56 20 63 31 2c 63 34  |.......MOV c1,c4|
000021a0  0d 14 0a 0d 4d 4f 56 20  63 32 2c 63 34 0d 14 14  |....MOV c2,c4...|
000021b0  0d 4d 4f 56 20 63 33 2c  63 34 0d 14 1e 04 0d 14  |.MOV c3,c4......|
000021c0  28 0d 4c 44 52 20 63 74  2c 61 61 0d 14 32 0d 43  |(.LDR ct,aa..2.C|
000021d0  4d 50 20 63 74 2c 23 30  0d 14 3c 0d 4c 44 52 20  |MP ct,#0..<.LDR |
000021e0  74 2c 61 78 64 0d 14 46  13 4d 4f 56 20 6c 2c 74  |t,axd..F.MOV l,t|
000021f0  2c 41 53 4c 23 66 70 25  0d 14 50 13 4d 4f 56 20  |,ASL#fp%..P.MOV |
00002200  72 2c 74 2c 41 53 4c 23  66 70 25 0d 14 5a 0d 4c  |r,t,ASL#fp%..Z.L|
00002210  44 52 20 6c 61 2c 61 64  0d 14 64 17 41 44 44 20  |DR la,ad..d.ADD |
00002220  6c 2c 6c 2c 23 31 3c 3c  28 66 70 25 2d 31 29 0d  |l,l,#1<<(fp%-1).|
00002230  14 6e 0d 4c 44 52 20 72  61 2c 61 62 0d 14 78 17  |.n.LDR ra,ab..x.|
00002240  41 44 44 20 72 2c 72 2c  23 31 3c 3c 28 66 70 25  |ADD r,r,#1<<(fp%|
00002250  2d 31 29 0d 14 82 0e 42  4c 4e 45 20 70 69 65 63  |-1)....BLNE piec|
00002260  65 0d 14 8c 04 0d 14 96  0d 4c 44 52 20 63 74 2c  |e........LDR ct,|
00002270  62 62 0d 14 a0 0d 43 4d  50 20 63 74 2c 23 30 0d  |bb....CMP ct,#0.|
00002280  14 aa 0d 4c 44 52 20 74  2c 62 78 64 0d 14 b4 13  |...LDR t,bxd....|
00002290  4d 4f 56 20 72 2c 74 2c  41 53 4c 23 66 70 25 0d  |MOV r,t,ASL#fp%.|
000022a0  14 be 0d 4c 44 52 20 72  61 2c 62 63 0d 14 c8 17  |...LDR ra,bc....|
000022b0  41 44 44 20 72 2c 72 2c  23 31 3c 3c 28 66 70 25  |ADD r,r,#1<<(fp%|
000022c0  2d 31 29 0d 14 d2 0e 42  4c 4e 45 20 70 69 65 63  |-1)....BLNE piec|
000022d0  65 0d 14 dc 04 0d 14 e6  0d 4c 44 52 20 63 74 2c  |e........LDR ct,|
000022e0  63 63 0d 14 f0 0d 43 4d  50 20 63 74 2c 23 30 0d  |cc....CMP ct,#0.|
000022f0  14 fa 0d 4c 44 52 20 74  2c 63 78 64 0d 15 04 13  |...LDR t,cxd....|
00002300  4d 4f 56 20 72 2c 74 2c  41 53 4c 23 66 70 25 0d  |MOV r,t,ASL#fp%.|
00002310  15 0e 0d 4c 44 52 20 72  61 2c 63 64 0d 15 18 17  |...LDR ra,cd....|
00002320  41 44 44 20 72 2c 72 2c  23 31 3c 3c 28 66 70 25  |ADD r,r,#1<<(fp%|
00002330  2d 31 29 0d 15 22 0e 42  4c 4e 45 20 70 69 65 63  |-1)..".BLNE piec|
00002340  65 0d 15 2c 1c 4c 44 4d  46 44 20 72 31 33 21 2c  |e..,.LDMFD r13!,|
00002350  7b 72 39 2d 72 31 32 2c  72 31 35 7d 5e 0d 15 36  |{r9-r12,r15}^..6|
00002360  04 0d 15 40 04 0d 15 4a  0c 2e 64 69 61 6d 6f 6e  |...@...J..diamon|
00002370  64 0d 15 54 0e 53 54 52  20 61 78 2c 61 78 64 0d  |d..T.STR ax,axd.|
00002380  15 5e 0e 53 54 52 20 62  78 2c 62 78 64 0d 15 68  |.^.STR bx,bxd..h|
00002390  0e 53 54 52 20 64 78 2c  64 78 64 0d 15 72 04 0d  |.STR dx,dxd..r..|
000023a0  15 7c 10 4c 44 52 20 71  2c 64 69 74 61 62 64 0d  |.|.LDR q,ditabd.|
000023b0  15 86 0f 53 55 42 20 74  2c 62 78 2c 61 78 0d 15  |...SUB t,bx,ax..|
000023c0  90 0f 53 55 42 20 6e 2c  62 79 2c 61 79 0d 15 9a  |..SUB n,by,ay...|
000023d0  0c 53 54 52 20 6e 2c 61  61 0d 15 a4 15 4c 44 52  |.STR n,aa....LDR|
000023e0  20 6e 2c 5b 71 2c 6e 2c  41 53 4c 23 32 5d 0d 15  | n,[q,n,ASL#2]..|
000023f0  ae 0d 4d 55 4c 20 6e 2c  74 2c 6e 0d 15 b8 0c 53  |..MUL n,t,n....S|
00002400  54 52 20 6e 2c 61 62 0d  15 c2 04 0d 15 cc 0f 53  |TR n,ab........S|
00002410  55 42 20 74 2c 64 78 2c  61 78 0d 15 d6 0f 53 55  |UB t,dx,ax....SU|
00002420  42 20 6e 2c 64 79 2c 61  79 0d 15 e0 15 4c 44 52  |B n,dy,ay....LDR|
00002430  20 6e 2c 5b 71 2c 6e 2c  41 53 4c 23 32 5d 0d 15  | n,[q,n,ASL#2]..|
00002440  ea 0d 4d 55 4c 20 6e 2c  74 2c 6e 0d 15 f4 0c 53  |..MUL n,t,n....S|
00002450  54 52 20 6e 2c 61 64 0d  15 fe 04 0d 16 08 0f 53  |TR n,ad........S|
00002460  55 42 20 74 2c 63 78 2c  62 78 0d 16 12 0f 53 55  |UB t,cx,bx....SU|
00002470  42 20 6e 2c 63 79 2c 62  79 0d 16 1c 15 4c 44 52  |B n,cy,by....LDR|
00002480  20 6e 2c 5b 71 2c 6e 2c  41 53 4c 23 32 5d 0d 16  | n,[q,n,ASL#2]..|
00002490  26 0d 4d 55 4c 20 6e 2c  74 2c 6e 0d 16 30 0c 53  |&.MUL n,t,n..0.S|
000024a0  54 52 20 6e 2c 62 63 0d  16 3a 04 0d 16 44 0f 53  |TR n,bc..:...D.S|
000024b0  55 42 20 74 2c 63 78 2c  64 78 0d 16 4e 0f 53 55  |UB t,cx,dx..N.SU|
000024c0  42 20 6e 2c 63 79 2c 64  79 0d 16 58 0c 53 54 52  |B n,cy,dy..X.STR|
000024d0  20 6e 2c 63 63 0d 16 62  15 4c 44 52 20 6e 2c 5b  | n,cc..b.LDR n,[|
000024e0  71 2c 6e 2c 41 53 4c 23  32 5d 0d 16 6c 0d 4d 55  |q,n,ASL#2]..l.MU|
000024f0  4c 20 6e 2c 74 2c 6e 0d  16 76 0c 53 54 52 20 6e  |L n,t,n..v.STR n|
00002500  2c 64 63 0d 16 80 04 0d  16 8a 0f 53 55 42 20 6e  |,dc........SUB n|
00002510  2c 64 79 2c 62 79 0d 16  94 0c 53 54 52 20 6e 2c  |,dy,by....STR n,|
00002520  64 64 0d 16 9e 04 0d 16  a8 0d 4c 44 52 20 6f 2c  |dd........LDR o,|
00002530  76 64 75 0d 16 b2 15 41  44 44 20 74 2c 61 79 2c  |vdu....ADD t,ay,|
00002540  23 6f 72 69 67 69 6e 59  0d 16 bc 13 41 44 44 20  |#originY....ADD |
00002550  74 2c 74 2c 74 2c 41 53  4c 23 32 0d 16 c6 13 41  |t,t,t,ASL#2....A|
00002560  44 44 20 6f 2c 6f 2c 74  2c 41 53 4c 23 36 0d 16  |DD o,o,t,ASL#6..|
00002570  d0 04 0d 16 da 0d 4d 4f  56 20 63 31 2c 63 34 0d  |......MOV c1,c4.|
00002580  16 e4 0d 4d 4f 56 20 63  32 2c 63 34 0d 16 ee 0d  |...MOV c2,c4....|
00002590  4d 4f 56 20 63 33 2c 63  34 0d 16 f8 04 0d 17 02  |MOV c3,c4.......|
000025a0  0d 4c 44 52 20 63 74 2c  61 61 0d 17 0c 0d 43 4d  |.LDR ct,aa....CM|
000025b0  50 20 63 74 2c 23 30 0d  17 16 0d 4c 44 52 20 74  |P ct,#0....LDR t|
000025c0  2c 61 78 64 0d 17 20 13  4d 4f 56 20 6c 2c 74 2c  |,axd.. .MOV l,t,|
000025d0  41 53 4c 23 66 70 25 0d  17 2a 13 4d 4f 56 20 72  |ASL#fp%..*.MOV r|
000025e0  2c 74 2c 41 53 4c 23 66  70 25 0d 17 34 0d 4c 44  |,t,ASL#fp%..4.LD|
000025f0  52 20 6c 61 2c 61 64 0d  17 3e 17 41 44 44 20 6c  |R la,ad..>.ADD l|
00002600  2c 6c 2c 23 31 3c 3c 28  66 70 25 2d 31 29 0d 17  |,l,#1<<(fp%-1)..|
00002610  48 0d 4c 44 52 20 72 61  2c 61 62 0d 17 52 17 41  |H.LDR ra,ab..R.A|
00002620  44 44 20 72 2c 72 2c 23  31 3c 3c 28 66 70 25 2d  |DD r,r,#1<<(fp%-|
00002630  31 29 0d 17 5c 0e 42 4c  4e 45 20 70 69 65 63 65  |1)..\.BLNE piece|
00002640  0d 17 66 04 0d 17 70 0d  4c 44 52 20 63 74 2c 64  |..f...p.LDR ct,d|
00002650  64 0d 17 7a 0d 43 4d 50  20 63 74 2c 23 30 0d 17  |d..z.CMP ct,#0..|
00002660  84 0d 4c 44 52 20 74 2c  62 78 64 0d 17 8e 13 4d  |..LDR t,bxd....M|
00002670  4f 56 20 72 2c 74 2c 41  53 4c 23 66 70 25 0d 17  |OV r,t,ASL#fp%..|
00002680  98 0d 4c 44 52 20 72 61  2c 62 63 0d 17 a2 17 41  |..LDR ra,bc....A|
00002690  44 44 20 72 2c 72 2c 23  31 3c 3c 28 66 70 25 2d  |DD r,r,#1<<(fp%-|
000026a0  31 29 0d 17 ac 0e 42 4c  4e 45 20 70 69 65 63 65  |1)....BLNE piece|
000026b0  0d 17 b6 04 0d 17 c0 0d  4c 44 52 20 63 74 2c 63  |........LDR ct,c|
000026c0  63 0d 17 ca 0d 43 4d 50  20 63 74 2c 23 30 0d 17  |c....CMP ct,#0..|
000026d0  d4 0d 4c 44 52 20 74 2c  64 78 64 0d 17 de 13 4d  |..LDR t,dxd....M|
000026e0  4f 56 20 6c 2c 74 2c 41  53 4c 23 66 70 25 0d 17  |OV l,t,ASL#fp%..|
000026f0  e8 0d 4c 44 52 20 6c 61  2c 64 63 0d 17 f2 17 41  |..LDR la,dc....A|
00002700  44 44 20 6c 2c 6c 2c 23  31 3c 3c 28 66 70 25 2d  |DD l,l,#1<<(fp%-|
00002710  31 29 0d 17 fc 0e 42 4c  4e 45 20 70 69 65 63 65  |1)....BLNE piece|
00002720  0d 18 06 1c 4c 44 4d 46  44 20 72 31 33 21 2c 7b  |....LDMFD r13!,{|
00002730  72 39 2d 72 31 32 2c 72  31 35 7d 5e 0d 18 10 04  |r9-r12,r15}^....|
00002740  0d 18 1a 04 0d 18 24 1c  2e 70 69 65 63 65 20 3b  |......$..piece ;|
00002750  53 54 4d 46 44 20 72 31  33 21 2c 7b 72 31 34 7d  |STMFD r13!,{r14}|
00002760  0d 18 2e 07 2e 6c 6f 0d  18 38 0f 4c 44 52 20 74  |.....lo..8.LDR t|
00002770  2c 79 70 6f 73 71 0d 18  42 0e 41 44 44 20 74 2c  |,yposq..B.ADD t,|
00002780  74 2c 23 31 0d 18 4c 0f  53 54 52 20 74 2c 79 70  |t,#1..L.STR t,yp|
00002790  6f 73 71 0d 18 56 11 43  4d 50 20 74 2c 23 66 72  |osq..V.CMP t,#fr|
000027a0  61 6d 65 54 0d 18 60 0f  42 4c 45 20 65 6e 64 73  |ameT..`.BLE ends|
000027b0  70 61 6e 0d 18 6a 11 43  4d 50 20 74 2c 23 66 72  |pan..j.CMP t,#fr|
000027c0  61 6d 65 42 0d 18 74 2f  4d 4f 56 47 54 20 72 31  |ameB..t/MOVGT r1|
000027d0  35 2c 72 31 34 20 20 20  20 20 20 20 20 20 20 20  |5,r14           |
000027e0  3b 4c 44 4d 46 44 47 54  20 72 31 33 21 2c 7b 72  |;LDMFDGT r13!,{r|
000027f0  31 35 7d 0d 18 7e 04 0d  18 88 0b 43 4d 50 20 6c  |15}..~.....CMP l|
00002800  2c 72 0d 18 92 16 4d 4f  56 4c 54 20 78 6c 2c 6c  |,r....MOVLT xl,l|
00002810  2c 41 53 52 23 66 70 25  0d 18 9c 16 4d 4f 56 4c  |,ASR#fp%....MOVL|
00002820  54 20 78 72 2c 72 2c 41  53 52 23 66 70 25 0d 18  |T xr,r,ASR#fp%..|
00002830  a6 16 4d 4f 56 47 45 20  78 6c 2c 72 2c 41 53 52  |..MOVGE xl,r,ASR|
00002840  23 66 70 25 0d 18 b0 16  4d 4f 56 47 45 20 78 72  |#fp%....MOVGE xr|
00002850  2c 6c 2c 41 53 52 23 66  70 25 0d 18 ba 04 0d 18  |,l,ASR#fp%......|
00002860  c4 12 43 4d 50 20 78 6c  2c 23 66 72 61 6d 65 52  |..CMP xl,#frameR|
00002870  0d 18 ce 0f 42 47 54 20  65 6e 64 73 70 61 6e 0d  |....BGT endspan.|
00002880  18 d8 12 43 4d 50 20 78  72 2c 23 66 72 61 6d 65  |...CMP xr,#frame|
00002890  4c 0d 18 e2 0f 42 4c 54  20 65 6e 64 73 70 61 6e  |L....BLT endspan|
000028a0  0d 18 ec 12 43 4d 50 20  78 6c 2c 23 66 72 61 6d  |....CMP xl,#fram|
000028b0  65 4c 0d 18 f6 14 4d 4f  56 4c 54 20 78 6c 2c 23  |eL....MOVLT xl,#|
000028c0  66 72 61 6d 65 4c 0d 19  00 12 43 4d 50 20 78 72  |frameL....CMP xr|
000028d0  2c 23 66 72 61 6d 65 52  0d 19 0a 14 4d 4f 56 47  |,#frameR....MOVG|
000028e0  54 20 78 72 2c 23 66 72  61 6d 65 52 0d 19 14 04  |T xr,#frameR....|
000028f0  0d 19 1e 0f 41 44 44 20  78 6c 2c 6f 2c 78 6c 0d  |....ADD xl,o,xl.|
00002900  19 28 0f 41 44 44 20 78  72 2c 6f 2c 78 72 0d 19  |.(.ADD xr,o,xr..|
00002910  32 04 0d 19 3c 10 53 55  42 53 20 74 2c 78 72 2c  |2...<.SUBS t,xr,|
00002920  78 6c 0d 19 46 0f 42 45  51 20 65 6e 64 73 70 61  |xl..F.BEQ endspa|
00002930  6e 0d 19 50 0c 43 4d 50  20 74 2c 23 32 0d 19 5a  |n..P.CMP t,#2..Z|
00002940  12 53 54 52 4c 53 42 20  63 31 2c 5b 78 6c 5d 0d  |.STRLSB c1,[xl].|
00002950  19 64 16 53 54 52 4c 53  42 20 63 31 2c 5b 78 72  |.d.STRLSB c1,[xr|
00002960  2c 23 2d 31 5d 0d 19 6e  0f 42 4c 53 20 65 6e 64  |,#-1]..n.BLS end|
00002970  73 70 61 6e 0d 19 78 0f  54 53 54 20 78 6c 2c 23  |span..x.TST xl,#|
00002980  25 30 31 0d 19 82 15 53  54 52 4e 45 42 20 63 31  |%01....STRNEB c1|
00002990  2c 5b 78 6c 5d 2c 23 31  0d 19 8c 0f 54 53 54 20  |,[xl],#1....TST |
000029a0  78 6c 2c 23 25 31 30 0d  19 96 15 53 54 52 4e 45  |xl,#%10....STRNE|
000029b0  42 20 63 32 2c 5b 78 6c  5d 2c 23 31 0d 19 a0 15  |B c2,[xl],#1....|
000029c0  53 54 52 4e 45 42 20 63  31 2c 5b 78 6c 5d 2c 23  |STRNEB c1,[xl],#|
000029d0  31 0d 19 aa 0f 54 53 54  20 78 72 2c 23 25 30 31  |1....TST xr,#%01|
000029e0  0d 19 b4 17 53 54 52 4e  45 42 20 63 32 2c 5b 78  |....STRNEB c2,[x|
000029f0  72 2c 23 2d 31 5d 21 0d  19 be 0f 54 53 54 20 78  |r,#-1]!....TST x|
00002a00  72 2c 23 25 31 30 0d 19  c8 17 53 54 52 4e 45 42  |r,#%10....STRNEB|
00002a10  20 63 31 2c 5b 78 72 2c  23 2d 31 5d 21 0d 19 d2  | c1,[xr,#-1]!...|
00002a20  17 53 54 52 4e 45 42 20  63 32 2c 5b 78 72 2c 23  |.STRNEB c2,[xr,#|
00002a30  2d 31 5d 21 0d 19 dc 10  53 55 42 53 20 74 2c 78  |-1]!....SUBS t,x|
00002a40  72 2c 78 6c 0d 19 e6 12  4d 4f 56 53 20 74 2c 74  |r,xl....MOVS t,t|
00002a50  2c 4c 53 52 23 33 0d 19  f0 14 53 54 52 43 53 20  |,LSR#3....STRCS |
00002a60  63 31 2c 5b 78 6c 5d 2c  23 34 0d 19 fa 12 4d 4f  |c1,[xl],#4....MO|
00002a70  56 53 20 74 2c 74 2c 4c  53 52 23 31 0d 1a 04 19  |VS t,t,LSR#1....|
00002a80  53 54 4d 43 53 49 41 20  28 78 6c 29 21 2c 7b 63  |STMCSIA (xl)!,{c|
00002a90  31 2c 63 32 7d 0d 1a 0e  04 0d 1a 18 0f 41 44 52  |1,c2}........ADR|
00002aa0  20 78 72 2c 62 61 73 65  0d 1a 22 15 53 55 42 20  | xr,base..".SUB |
00002ab0  70 63 2c 78 72 2c 74 2c  4c 53 4c 23 32 0d 1a 2c  |pc,xr,t,LSL#2..,|
00002ac0  09 a4 76 75 6c 63 0d 1a  36 09 2e 62 61 73 65 0d  |..vulc..6..base.|
00002ad0  1a 40 04 0d 1a 4a 0c 2e  65 6e 64 73 70 61 6e 0d  |.@...J..endspan.|
00002ae0  1a 54 0e 41 44 44 20 6c  2c 6c 2c 6c 61 0d 1a 5e  |.T.ADD l,l,la..^|
00002af0  0e 41 44 44 20 72 2c 72  2c 72 61 0d 1a 68 10 41  |.ADD r,r,ra..h.A|
00002b00  44 44 20 6f 2c 6f 2c 23  33 32 30 0d 1a 72 11 53  |DD o,o,#320..r.S|
00002b10  55 42 53 20 63 74 2c 63  74 2c 23 31 0d 1a 7c 0a  |UBS ct,ct,#1..|.|
00002b20  42 4e 45 20 6c 6f 0d 1a  86 2f 4d 4f 56 20 72 31  |BNE lo.../MOV r1|
00002b30  35 2c 72 31 34 20 20 20  20 20 20 20 20 20 20 20  |5,r14           |
00002b40  20 20 20 20 3b 4c 44 4d  46 44 20 72 31 33 21 2c  |    ;LDMFD r13!,|
00002b50  7b 72 31 35 7d 0d 1a 90  05 5d 0d 1a 9a 12 78 61  |{r15}....]....xa|
00002b60  3d 30 3a 79 61 3d 31 3a  7a 61 3d 32 0d 1a a4 0f  |=0:ya=1:za=2....|
00002b70  78 3d 30 3a 79 3d 31 3a  7a 3d 32 0d 1a ae 15 73  |x=0:y=1:z=2....s|
00002b80  78 61 3d 33 3a 73 79 61  3d 34 3a 73 7a 61 3d 35  |xa=3:sya=4:sza=5|
00002b90  0d 1a b8 15 63 78 61 3d  36 3a 63 79 61 3d 37 3a  |....cxa=6:cya=7:|
00002ba0  63 7a 61 3d 38 0d 1a c2  0c 6e 3d 39 3a 70 3d 31  |cza=8....n=9:p=1|
00002bb0  30 0d 1a cc 08 69 3d 31  30 0d 1a d6 11 70 6e 74  |0....i=10....pnt|
00002bc0  73 3d 31 31 3a 66 73 3d  31 31 0d 1a e0 0f 74 31  |s=11:fs=11....t1|
00002bd0  3d 31 32 3a 74 32 3d 31  34 0d 1a ea 04 0d 1a f4  |=12:t2=14.......|
00002be0  31 78 31 3d 30 3a 79 31  3d 31 3a 78 32 3d 32 3a  |1x1=0:y1=1:x2=2:|
00002bf0  79 32 3d 33 3a 78 33 3d  34 3a 79 33 3d 35 3a 78  |y2=3:x3=4:y3=5:x|
00002c00  34 3d 36 3a 79 34 3d 37  3a 63 6f 6c 3d 38 0d 1a  |4=6:y4=7:col=8..|
00002c10  fe 09 76 73 3d 31 32 0d  1b 08 04 0d 1b 12 0a 5b  |..vs=12........[|
00002c20  4f 50 54 69 25 0d 1b 1c  11 2e 68 65 6c 69 70 20  |OPTi%.....helip |
00002c30  44 43 44 20 32 34 0d 1b  26 25 44 43 44 20 2d 35  |DCD 24..&%DCD -5|
00002c40  20 3a 44 43 44 20 32 20  20 3a 44 43 44 20 2d 31  | :DCD 2  :DCD -1|
00002c50  34 20 20 20 20 20 20 20  20 3b 30 0d 1b 30 1a 44  |4        ;0..0.D|
00002c60  43 44 20 2d 37 20 3a 44  43 44 20 2d 37 20 3a 44  |CD -7 :DCD -7 :D|
00002c70  43 44 20 2d 34 0d 1b 3a  1a 44 43 44 20 2d 31 30  |CD -4..:.DCD -10|
00002c80  3a 44 43 44 20 34 20 20  3a 44 43 44 20 2d 31 0d  |:DCD 4  :DCD -1.|
00002c90  1b 44 18 44 43 44 20 2d  39 3a 44 43 44 20 34 20  |.D.DCD -9:DCD 4 |
00002ca0  20 3a 44 43 44 20 34 0d  1b 4e 19 44 43 44 20 2d  | :DCD 4..N.DCD -|
00002cb0  35 20 3a 44 43 44 20 2d  36 20 3a 44 43 44 20 36  |5 :DCD -6 :DCD 6|
00002cc0  0d 1b 58 25 44 43 44 20  2d 36 20 3a 44 43 44 20  |..X%DCD -6 :DCD |
00002cd0  30 20 20 3a 44 43 44 20  31 30 20 20 20 20 20 20  |0  :DCD 10      |
00002ce0  20 20 20 3b 35 0d 1b 62  1a 44 43 44 20 36 20 20  |   ;5..b.DCD 6  |
00002cf0  3a 44 43 44 20 30 20 20  3a 44 43 44 20 31 30 0d  |:DCD 0  :DCD 10.|
00002d00  1b 6c 19 44 43 44 20 35  20 20 3a 44 43 44 20 2d  |.l.DCD 5  :DCD -|
00002d10  36 20 3a 44 43 44 20 36  0d 1b 76 18 44 43 44 20  |6 :DCD 6..v.DCD |
00002d20  39 20 3a 44 43 44 20 34  20 20 3a 44 43 44 20 34  |9 :DCD 4  :DCD 4|
00002d30  0d 1b 80 1a 44 43 44 20  31 30 20 3a 44 43 44 20  |....DCD 10 :DCD |
00002d40  34 20 20 3a 44 43 44 20  2d 31 0d 1b 8a 1a 44 43  |4  :DCD -1....DC|
00002d50  44 20 37 20 20 3a 44 43  44 20 2d 37 20 3a 44 43  |D 7  :DCD -7 :DC|
00002d60  44 20 2d 34 0d 1b 94 26  44 43 44 20 35 20 20 3a  |D -4...&DCD 5  :|
00002d70  44 43 44 20 32 20 20 3a  44 43 44 20 2d 31 34 20  |DCD 2  :DCD -14 |
00002d80  20 20 20 20 20 20 20 3b  31 31 0d 1b 9e 04 0d 1b  |       ;11......|
00002d90  a8 1b 44 43 44 20 2d 33  20 3a 44 43 44 20 35 20  |..DCD -3 :DCD 5 |
00002da0  20 3a 44 43 44 20 2d 31  32 0d 1b b2 1a 44 43 44  | :DCD -12....DCD|
00002db0  20 2d 36 20 3a 44 43 44  20 36 20 20 3a 44 43 44  | -6 :DCD 6  :DCD|
00002dc0  20 2d 32 0d 1b bc 25 44  43 44 20 2d 35 20 3a 44  | -2...%DCD -5 :D|
00002dd0  43 44 20 36 20 20 3a 44  43 44 20 37 20 20 20 20  |CD 6  :DCD 7    |
00002de0  20 20 20 20 20 3b 31 34  0d 1b c6 19 44 43 44 20  |     ;14....DCD |
00002df0  35 20 20 3a 44 43 44 20  36 20 20 3a 44 43 44 20  |5  :DCD 6  :DCD |
00002e00  37 0d 1b d0 1a 44 43 44  20 36 20 20 3a 44 43 44  |7....DCD 6  :DCD|
00002e10  20 36 20 20 3a 44 43 44  20 2d 32 0d 1b da 1b 44  | 6  :DCD -2....D|
00002e20  43 44 20 33 20 20 3a 44  43 44 20 35 20 20 3a 44  |CD 3  :DCD 5  :D|
00002e30  43 44 20 2d 31 32 0d 1b  e4 04 0d 1b ee 25 44 43  |CD -12.......%DC|
00002e40  44 20 30 20 20 3a 44 43  44 20 34 20 20 3a 44 43  |D 0  :DCD 4  :DC|
00002e50  44 20 38 20 20 20 20 20  20 20 20 20 3b 31 38 0d  |D 8         ;18.|
00002e60  1b f8 1a 44 43 44 20 2d  32 20 3a 44 43 44 20 30  |...DCD -2 :DCD 0|
00002e70  20 20 3a 44 43 44 20 31  30 0d 1c 02 1a 44 43 44  |  :DCD 10....DCD|
00002e80  20 2d 31 20 3a 44 43 44  20 30 20 20 3a 44 43 44  | -1 :DCD 0  :DCD|
00002e90  20 34 34 0d 1c 0c 1a 44  43 44 20 30 20 20 3a 44  | 44....DCD 0  :D|
00002ea0  43 44 20 32 20 20 3a 44  43 44 20 34 30 0d 1c 16  |CD 2  :DCD 40...|
00002eb0  1a 44 43 44 20 32 20 20  3a 44 43 44 20 30 20 20  |.DCD 2  :DCD 0  |
00002ec0  3a 44 43 44 20 31 30 0d  1c 20 1a 44 43 44 20 31  |:DCD 10.. .DCD 1|
00002ed0  20 20 3a 44 43 44 20 30  20 20 3a 44 43 44 20 34  |  :DCD 0  :DCD 4|
00002ee0  34 0d 1c 2a 04 0d 1c 34  04 0d 1c 3e 11 2e 68 65  |4..*...4...>..he|
00002ef0  6c 69 66 20 44 43 44 20  32 32 0d 1c 48 19 44 43  |lif DCD 22..H.DC|
00002f00  44 20 26 30 37 3a 44 43  44 20 26 30 30 30 31 30  |D &07:DCD &00010|
00002f10  41 30 42 0d 1c 52 19 44  43 44 20 26 31 33 3a 44  |A0B..R.DCD &13:D|
00002f20  43 44 20 26 30 31 30 34  30 37 30 41 0d 1c 5c 19  |CD &0104070A..\.|
00002f30  44 43 44 20 26 31 33 3a  44 43 44 20 26 30 34 30  |DCD &13:DCD &040|
00002f40  35 30 36 30 37 0d 1c 66  19 44 43 44 20 26 31 31  |50607..f.DCD &11|
00002f50  3a 44 43 44 20 26 46 46  30 30 30 32 30 31 0d 1c  |:DCD &FF000201..|
00002f60  70 19 44 43 44 20 26 31  31 3a 44 43 44 20 26 46  |p.DCD &11:DCD &F|
00002f70  46 30 42 30 41 30 39 0d  1c 7a 19 44 43 44 20 26  |F0B0A09..z.DCD &|
00002f80  31 30 3a 44 43 44 20 26  30 32 30 33 30 34 30 31  |10:DCD &02030401|
00002f90  0d 1c 84 19 44 43 44 20  26 31 30 3a 44 43 44 20  |....DCD &10:DCD |
00002fa0  26 30 41 30 37 30 38 30  39 0d 1c 8e 19 44 43 44  |&0A070809....DCD|
00002fb0  20 26 31 32 3a 44 43 44  20 26 46 46 30 33 30 35  | &12:DCD &FF0305|
00002fc0  30 34 0d 1c 98 19 44 43  44 20 26 31 32 3a 44 43  |04....DCD &12:DC|
00002fd0  44 20 26 46 46 30 37 30  36 30 38 0d 1c a2 04 0d  |D &FF070608.....|
00002fe0  1c ac 19 44 43 44 20 26  33 46 3a 44 43 44 20 26  |...DCD &3F:DCD &|
00002ff0  30 30 30 42 31 31 30 43  0d 1c b6 19 44 43 44 20  |000B110C....DCD |
00003000  26 33 43 3a 44 43 44 20  26 30 43 31 31 31 30 30  |&3C:DCD &0C11100|
00003010  44 0d 1c c0 19 44 43 44  20 26 31 33 3a 44 43 44  |D....DCD &13:DCD|
00003020  20 26 30 44 31 30 30 46  30 45 0d 1c ca 19 44 43  | &0D100F0E....DC|
00003030  44 20 26 31 32 3a 44 43  44 20 26 30 45 30 46 30  |D &12:DCD &0E0F0|
00003040  36 30 35 0d 1c d4 04 0d  1c de 19 44 43 44 20 26  |605........DCD &|
00003050  30 37 3a 44 43 44 20 26  30 30 30 43 30 44 30 32  |07:DCD &000C0D02|
00003060  0d 1c e8 19 44 43 44 20  26 30 37 3a 44 43 44 20  |....DCD &07:DCD |
00003070  26 30 42 30 39 31 30 31  31 0d 1c f2 19 44 43 44  |&0B091011....DCD|
00003080  20 26 31 31 3a 44 43 44  20 26 30 32 30 44 30 45  | &11:DCD &020D0E|
00003090  30 33 0d 1c fc 19 44 43  44 20 26 31 31 3a 44 43  |03....DCD &11:DC|
000030a0  44 20 26 31 30 30 39 30  38 30 46 0d 1d 06 19 44  |D &1009080F....D|
000030b0  43 44 20 26 31 30 3a 44  43 44 20 26 46 46 30 33  |CD &10:DCD &FF03|
000030c0  30 45 30 35 0d 1d 10 19  44 43 44 20 26 31 30 3a  |0E05....DCD &10:|
000030d0  44 43 44 20 26 46 46 30  46 30 38 30 36 0d 1d 1a  |DCD &FF0F0806...|
000030e0  04 0d 1d 24 23 44 43 44  20 26 31 32 3a 44 43 44  |...$#DCD &12:DCD|
000030f0  20 26 31 36 31 37 31 35  31 32 20 20 20 20 20 3b  | &16171512     ;|
00003100  74 61 69 6c 0d 1d 2e 19  44 43 44 20 26 31 32 3a  |tail....DCD &12:|
00003110  44 43 44 20 26 31 33 31  32 31 35 31 34 0d 1d 38  |DCD &13121514..8|
00003120  19 44 43 44 20 26 31 33  3a 44 43 44 20 26 31 33  |.DCD &13:DCD &13|
00003130  31 34 31 37 31 36 0d 1d  42 04 0d 1d 4c 04 0d 1d  |141716..B...L...|
00003140  56 04 0d 1d 60 04 0d 1d  6a 0f 2e 68 72 6f 74 20  |V...`...j..hrot |
00003150  44 43 44 20 30 0d 1d 74  11 2e 68 70 69 74 63 68  |DCD 0..t..hpitch|
00003160  20 44 43 44 20 30 0d 1d  7e 0f 2e 68 72 6f 6c 20  | DCD 0..~..hrol |
00003170  44 43 44 20 30 0d 1d 88  14 2e 68 78 20 44 43 44  |DCD 0.....hx DCD|
00003180  20 32 35 36 3c 3c 66 70  25 0d 1d 92 14 2e 68 79  | 256<<fp%.....hy|
00003190  20 44 43 44 20 33 30 30  3c 3c 66 70 25 0d 1d 9c  | DCD 300<<fp%...|
000031a0  12 2e 68 68 65 69 67 68  74 20 44 43 44 20 30 0d  |..hheight DCD 0.|
000031b0  1d a6 0e 2e 68 64 78 20  44 43 44 20 30 0d 1d b0  |....hdx DCD 0...|
000031c0  0e 2e 68 64 79 20 44 43  44 20 30 0d 1d ba 0e 2e  |..hdy DCD 0.....|
000031d0  68 64 7a 20 44 43 44 20  30 0d 1d c4 13 2e 68 70  |hdz DCD 0.....hp|
000031e0  6f 77 65 72 20 44 43 44  20 2d 31 36 0d 1d ce 04  |ower DCD -16....|
000031f0  0d 1d d8 0c 2e 63 6f 6e  74 72 6f 6c 0d 1d e2 14  |.....control....|
00003200  53 54 4d 46 44 20 72 31  33 21 2c 7b 72 31 34 7d  |STMFD r13!,{r14}|
00003210  0d 1d ec 0d 42 4c 20 75  70 64 61 74 65 0d 1d f6  |....BL update...|
00003220  11 42 4c 20 63 61 6c 63  70 6f 69 6e 74 73 0d 1e  |.BL calcpoints..|
00003230  00 11 42 4c 20 64 72 61  77 70 6f 69 6e 74 73 0d  |..BL drawpoints.|
00003240  1e 0a 0f 42 4c 20 64 72  61 77 68 65 6c 69 0d 1e  |...BL drawheli..|
00003250  14 14 4c 44 4d 46 44 20  72 31 33 21 2c 7b 72 31  |..LDMFD r13!,{r1|
00003260  35 7d 0d 1e 1e 04 0d 1e  28 0b 2e 75 70 64 61 74  |5}......(..updat|
00003270  65 0d 1e 32 14 53 54 4d  46 44 20 72 31 33 21 2c  |e..2.STMFD r13!,|
00003280  7b 72 31 34 7d 0d 1e 3c  12 53 57 49 20 22 4f 53  |{r14}..<.SWI "OS|
00003290  5f 4d 6f 75 73 65 22 0d  1e 46 0d 43 4d 50 20 72  |_Mouse"..F.CMP r|
000032a0  32 2c 23 31 0d 1e 50 13  4c 44 52 47 45 20 72 33  |2,#1..P.LDRGE r3|
000032b0  2c 68 70 6f 77 65 72 0d  1e 5a 12 41 44 44 45 51  |,hpower..Z.ADDEQ|
000032c0  20 72 33 2c 72 33 2c 23  32 0d 1e 64 13 53 54 52  | r3,r3,#2..d.STR|
000032d0  45 51 20 72 33 2c 68 70  6f 77 65 72 0d 1e 6e 0d  |EQ r3,hpower..n.|
000032e0  43 4d 50 20 72 32 2c 23  34 0d 1e 78 12 53 55 42  |CMP r2,#4..x.SUB|
000032f0  45 51 20 72 33 2c 72 33  2c 23 32 0d 1e 82 13 53  |EQ r3,r3,#2....S|
00003300  54 52 45 51 20 72 33 2c  68 70 6f 77 65 72 0d 1e  |TREQ r3,hpower..|
00003310  8c 04 0d 1e 96 11 4c 44  52 20 72 39 2c 68 70 69  |......LDR r9,hpi|
00003320  74 63 68 0d 1e a0 16 41  44 44 20 72 39 2c 72 39  |tch....ADD r9,r9|
00003330  2c 72 31 2c 41 53 52 23  31 0d 1e aa 14 4d 4f 56  |,r1,ASR#1....MOV|
00003340  20 72 39 2c 72 39 2c 4c  53 4c 23 32 33 0d 1e b4  | r9,r9,LSL#23...|
00003350  14 4d 4f 56 20 72 39 2c  72 39 2c 4c 53 52 23 32  |.MOV r9,r9,LSR#2|
00003360  33 0d 1e be 11 53 54 52  20 72 39 2c 68 70 69 74  |3....STR r9,hpit|
00003370  63 68 0d 1e c8 04 0d 1e  d2 0f 4c 44 52 20 72 33  |ch........LDR r3|
00003380  2c 68 72 6f 74 0d 1e dc  16 53 55 42 20 72 33 2c  |,hrot....SUB r3,|
00003390  72 33 2c 72 30 2c 41 53  52 23 32 0d 1e e6 14 4d  |r3,r0,ASR#2....M|
000033a0  4f 56 20 72 33 2c 72 33  2c 4c 53 4c 23 32 33 0d  |OV r3,r3,LSL#23.|
000033b0  1e f0 14 4d 4f 56 20 72  33 2c 72 33 2c 4c 53 52  |...MOV r3,r3,LSR|
000033c0  23 32 33 0d 1e fa 0f 53  54 52 20 72 33 2c 68 72  |#23....STR r3,hr|
000033d0  6f 74 0d 1f 04 0e 53 54  52 20 72 33 2c 72 6f 74  |ot....STR r3,rot|
000033e0  0d 1f 0e 04 0d 1f 18 11  4c 44 52 20 72 34 2c 68  |........LDR r4,h|
000033f0  70 6f 77 65 72 0d 1f 22  11 4c 44 52 20 72 35 2c  |power..".LDR r5,|
00003400  73 69 6e 70 74 72 0d 1f  2c 11 4c 44 52 20 72 36  |sinptr..,.LDR r6|
00003410  2c 63 6f 73 70 74 72 0d  1f 36 04 0d 1f 40 18 4c  |,cosptr..6...@.L|
00003420  44 52 20 72 37 2c 5b 72  35 2c 72 39 2c 41 53 4c  |DR r7,[r5,r9,ASL|
00003430  23 32 5d 0d 1f 4a 18 4c  44 52 20 72 38 2c 5b 72  |#2]..J.LDR r8,[r|
00003440  36 2c 72 39 2c 41 53 4c  23 32 5d 0d 1f 54 2f 4d  |6,r9,ASL#2]..T/M|
00003450  55 4c 20 72 38 2c 72 34  2c 72 38 20 20 20 20 20  |UL r8,r4,r8     |
00003460  20 20 20 20 20 20 20 20  20 20 20 3b 76 65 72 74  |           ;vert|
00003470  69 63 6c 65 20 70 6f 77  65 72 0d 1f 5e 2e 4d 55  |icle power..^.MU|
00003480  4c 20 72 34 2c 72 37 2c  72 34 20 20 20 20 20 20  |L r4,r7,r4      |
00003490  20 20 20 20 20 20 20 20  20 20 3b 66 6f 72 77 61  |          ;forwa|
000034a0  72 64 20 70 6f 77 65 72  0d 1f 68 15 4d 4f 56 20  |rd power..h.MOV |
000034b0  72 34 2c 72 34 2c 41 53  52 23 66 70 25 0d 1f 72  |r4,r4,ASR#fp%..r|
000034c0  16 3b 4d 4f 56 20 72 38  2c 72 38 2c 41 53 52 23  |.;MOV r8,r8,ASR#|
000034d0  66 70 25 0d 1f 7c 04 0d  1f 86 28 4c 44 52 20 72  |fp%..|....(LDR r|
000034e0  37 2c 68 64 7a 20 20 20  20 20 20 20 20 20 20 20  |7,hdz           |
000034f0  20 20 20 20 20 20 3b 61  6c 74 65 72 20 64 7a 0d  |      ;alter dz.|
00003500  1f 90 16 53 55 42 20 72  37 2c 72 37 2c 72 38 2c  |...SUB r7,r7,r8,|
00003510  41 53 52 23 36 0d 1f 9a  17 53 55 42 20 72 37 2c  |ASR#6....SUB r7,|
00003520  72 37 2c 23 67 72 61 76  69 74 79 25 0d 1f a4 0e  |r7,#gravity%....|
00003530  53 54 52 20 72 37 2c 68  64 7a 0d 1f ae 12 4c 44  |STR r7,hdz....LD|
00003540  52 20 72 38 2c 68 68 65  69 67 68 74 0d 1f b8 05  |R r8,hheight....|
00003550  5d 0d 1f c2 17 e7 20 ac  20 66 69 78 65 64 5f 68  |]..... . fixed_h|
00003560  65 69 67 68 74 25 20 8c  0d 1f cc 0a 5b 4f 50 54  |eight% .....[OPT|
00003570  69 25 0d 1f d6 10 41 44  44 20 72 38 2c 72 38 2c  |i%....ADD r8,r8,|
00003580  72 37 0d 1f e0 05 5d 0d  1f ea 05 cd 0d 1f f4 0a  |r7....].........|
00003590  5b 4f 50 54 69 25 0d 1f  fe 12 53 54 52 20 72 38  |[OPTi%....STR r8|
000035a0  2c 68 68 65 69 67 68 74  0d 20 08 04 0d 20 12 33  |,hheight. ... .3|
000035b0  4d 4f 56 20 72 38 2c 72  38 2c 41 53 52 23 66 70  |MOV r8,r8,ASR#fp|
000035c0  25 2b 31 20 20 20 20 20  20 20 3b 66 69 67 75 72  |%+1       ;figur|
000035d0  65 20 6f 75 74 20 63 61  6d 20 61 6e 67 6c 65 0d  |e out cam angle.|
000035e0  20 1c 17 41 44 44 20 72  38 2c 72 38 2c 23 63 61  | ..ADD r8,r8,#ca|
000035f0  6d 64 72 6f 70 25 0d 20  26 11 53 54 52 20 72 38  |mdrop%. &.STR r8|
00003600  2c 68 65 69 67 68 74 0d  20 30 04 0d 20 3a 18 4c  |,height. 0.. :.L|
00003610  44 52 20 72 35 2c 5b 72  35 2c 72 33 2c 41 53 4c  |DR r5,[r5,r3,ASL|
00003620  23 32 5d 0d 20 44 18 4c  44 52 20 72 36 2c 5b 72  |#2]. D.LDR r6,[r|
00003630  36 2c 72 33 2c 41 53 4c  23 32 5d 0d 20 4e 10 4d  |6,r3,ASL#2]. N.M|
00003640  55 4c 20 72 35 2c 72 34  2c 72 35 0d 20 58 10 4d  |UL r5,r4,r5. X.M|
00003650  55 4c 20 72 36 2c 72 34  2c 72 36 0d 20 62 04 0d  |UL r6,r4,r6. b..|
00003660  20 6c 0e 4c 44 52 20 72  37 2c 68 64 78 0d 20 76  | l.LDR r7,hdx. v|
00003670  0e 4c 44 52 20 72 38 2c  68 64 79 0d 20 80 16 41  |.LDR r8,hdy. ..A|
00003680  44 44 20 72 37 2c 72 37  2c 72 35 2c 41 53 52 23  |DD r7,r7,r5,ASR#|
00003690  36 0d 20 8a 16 41 44 44  20 72 38 2c 72 38 2c 72  |6. ..ADD r8,r8,r|
000036a0  36 2c 41 53 52 23 36 0d  20 94 33 4d 4f 56 20 72  |6,ASR#6. .3MOV r|
000036b0  39 2c 72 37 2c 41 53 52  23 34 20 20 20 20 20 20  |9,r7,ASR#4      |
000036c0  20 20 20 20 20 20 3b 64  65 63 20 64 78 2f 64 79  |      ;dec dx/dy|
000036d0  20 28 61 69 72 20 72 65  73 29 0d 20 9e 14 4d 4f  | (air res). ..MO|
000036e0  56 20 72 31 30 2c 72 38  2c 41 53 52 23 34 0d 20  |V r10,r8,ASR#4. |
000036f0  a8 10 53 55 42 20 72 37  2c 72 37 2c 72 39 0d 20  |..SUB r7,r7,r9. |
00003700  b2 11 53 55 42 20 72 38  2c 72 38 2c 72 31 30 0d  |..SUB r8,r8,r10.|
00003710  20 bc 0e 53 54 52 20 72  37 2c 68 64 78 0d 20 c6  | ..STR r7,hdx. .|
00003720  0e 53 54 52 20 72 38 2c  68 64 79 0d 20 d0 04 0d  |.STR r8,hdy. ...|
00003730  20 da 0d 4c 44 52 20 72  39 2c 68 78 0d 20 e4 0e  | ..LDR r9,hx. ..|
00003740  4c 44 52 20 72 31 30 2c  68 79 0d 20 ee 10 41 44  |LDR r10,hy. ..AD|
00003750  44 20 72 39 2c 72 39 2c  72 37 0d 20 f8 12 41 44  |D r9,r9,r7. ..AD|
00003760  44 20 72 31 30 2c 72 31  30 2c 72 38 0d 21 02 0d  |D r10,r10,r8.!..|
00003770  53 54 52 20 72 39 2c 68  78 0d 21 0c 0e 53 54 52  |STR r9,hx.!..STR|
00003780  20 72 31 30 2c 68 79 0d  21 16 15 4d 4f 56 20 72  | r10,hy.!..MOV r|
00003790  39 2c 72 39 2c 41 53 52  23 66 70 25 0d 21 20 17  |9,r9,ASR#fp%.! .|
000037a0  4d 4f 56 20 72 31 30 2c  72 31 30 2c 41 53 52 23  |MOV r10,r10,ASR#|
000037b0  66 70 25 0d 21 2a 0f 53  54 52 20 72 39 2c 78 70  |fp%.!*.STR r9,xp|
000037c0  6f 73 0d 21 34 10 53 54  52 20 72 31 30 2c 79 70  |os.!4.STR r10,yp|
000037d0  6f 73 0d 21 3e 04 0d 21  48 04 0d 21 52 14 4c 44  |os.!>..!H..!R.LD|
000037e0  4d 46 44 20 72 31 33 21  2c 7b 72 31 35 7d 0d 21  |MFD r13!,{r15}.!|
000037f0  5c 04 0d 21 66 0d 2e 64  72 61 77 68 65 6c 69 0d  |\..!f..drawheli.|
00003800  21 70 14 53 54 4d 46 44  20 72 31 33 21 2c 7b 72  |!p.STMFD r13!,{r|
00003810  31 34 7d 0d 21 7a 27 41  44 52 20 72 31 31 2c 68  |14}.!z'ADR r11,h|
00003820  65 6c 69 70 20 20 20 20  20 20 20 20 20 20 20 20  |elip            |
00003830  20 3b 64 72 61 77 68 65  6c 69 0d 21 84 11 41 44  | ;drawheli.!..AD|
00003840  52 20 72 31 32 2c 68 65  6c 69 66 0d 21 8e 11 4c  |R r12,helif.!..L|
00003850  44 52 20 72 30 2c 68 70  69 74 63 68 0d 21 98 0d  |DR r0,hpitch.!..|
00003860  4d 4f 56 20 72 31 2c 23  30 0d 21 a2 0d 4d 4f 56  |MOV r1,#0.!..MOV|
00003870  20 72 32 2c 23 30 0d 21  ac 0d 4d 4f 56 20 72 33  | r2,#0.!..MOV r3|
00003880  2c 23 30 0d 21 b6 11 4c  44 52 20 72 36 2c 68 65  |,#0.!..LDR r6,he|
00003890  69 67 68 74 0d 21 c0 12  4c 44 52 20 72 37 2c 68  |ight.!..LDR r7,h|
000038a0  68 65 69 67 68 74 0d 21  ca 18 53 55 42 20 72 34  |height.!..SUB r4|
000038b0  2c 72 36 2c 72 37 2c 41  53 52 23 66 70 25 0d 21  |,r6,r7,ASR#fp%.!|
000038c0  d4 0d 4d 4f 56 20 72 35  2c 23 30 0d 21 de 0e 42  |..MOV r5,#0.!..B|
000038d0  4c 20 64 72 61 77 6f 62  6a 0d 21 e8 14 4c 44 4d  |L drawobj.!..LDM|
000038e0  46 44 20 72 31 33 21 2c  7b 72 31 35 7d 0d 21 f2  |FD r13!,{r15}.!.|
000038f0  04 0d 21 fc 0f 2e 6f 62  6a 78 20 44 43 44 20 30  |..!...objx DCD 0|
00003900  0d 22 06 0f 2e 6f 62 6a  79 20 44 43 44 20 30 0d  |."...objy DCD 0.|
00003910  22 10 0f 2e 6f 62 6a 7a  20 44 43 44 20 30 0d 22  |"...objz DCD 0."|
00003920  1a 10 2e 66 61 63 65 73  20 44 43 44 20 30 0d 22  |...faces DCD 0."|
00003930  24 42 2e 64 72 61 77 6f  62 6a 20 20 20 20 20 20  |$B.drawobj      |
00003940  20 20 20 3b 72 30 3d 78  61 2c 20 72 31 3d 79 61  |   ;r0=xa, r1=ya|
00003950  2c 20 72 32 3d 7a 61 2c  20 72 31 31 3d 70 6e 74  |, r2=za, r11=pnt|
00003960  70 74 72 2c 20 72 31 32  20 66 61 63 65 70 74 72  |ptr, r12 faceptr|
00003970  0d 22 2e 26 53 54 52 20  72 31 34 2c 72 65 74 73  |.".&STR r14,rets|
00003980  61 76 65 20 20 3b 72 33  3d 78 2c 20 72 34 3d 79  |ave  ;r3=x, r4=y|
00003990  2c 20 72 35 3d 7a 0d 22  38 10 3b 53 54 52 20 72  |, r5=z."8.;STR r|
000039a0  33 2c 6f 62 6a 78 0d 22  42 0f 53 54 52 20 72 34  |3,objx."B.STR r4|
000039b0  2c 6f 62 6a 79 0d 22 4c  10 3b 53 54 52 20 72 35  |,objy."L.;STR r5|
000039c0  2c 6f 62 6a 7a 0d 22 56  11 53 54 52 20 72 31 32  |,objz."V.STR r12|
000039d0  2c 66 61 63 65 73 0d 22  60 04 0d 22 6a 10 4c 44  |,faces."`.."j.LD|
000039e0  52 20 70 2c 73 69 6e 70  74 72 0d 22 74 18 4c 44  |R p,sinptr."t.LD|
000039f0  52 20 73 78 61 2c 5b 70  2c 78 61 2c 41 53 4c 23  |R sxa,[p,xa,ASL#|
00003a00  32 5d 0d 22 7e 18 4c 44  52 20 73 79 61 2c 5b 70  |2]."~.LDR sya,[p|
00003a10  2c 79 61 2c 41 53 4c 23  32 5d 0d 22 88 18 4c 44  |,ya,ASL#2]."..LD|
00003a20  52 20 73 7a 61 2c 5b 70  2c 7a 61 2c 41 53 4c 23  |R sza,[p,za,ASL#|
00003a30  32 5d 0d 22 92 10 4c 44  52 20 70 2c 63 6f 73 70  |2]."..LDR p,cosp|
00003a40  74 72 0d 22 9c 18 4c 44  52 20 63 78 61 2c 5b 70  |tr."..LDR cxa,[p|
00003a50  2c 78 61 2c 41 53 4c 23  32 5d 0d 22 a6 18 4c 44  |,xa,ASL#2]."..LD|
00003a60  52 20 63 79 61 2c 5b 70  2c 79 61 2c 41 53 4c 23  |R cya,[p,ya,ASL#|
00003a70  32 5d 0d 22 b0 18 4c 44  52 20 63 7a 61 2c 5b 70  |2]."..LDR cza,[p|
00003a80  2c 7a 61 2c 41 53 4c 23  32 5d 0d 22 ba 04 0d 22  |,za,ASL#2]."..."|
00003a90  c4 0f 41 44 52 20 69 2c  69 6d 61 67 65 0d 22 ce  |..ADR i,image.".|
00003aa0  2c 4c 44 52 20 6e 2c 5b  70 6e 74 73 5d 2c 23 34  |,LDR n,[pnts],#4|
00003ab0  20 20 20 20 20 20 20 20  20 20 20 3b 6e 75 6d 20  |           ;num |
00003ac0  6f 66 20 70 6f 69 6e 74  73 0d 22 d8 04 0d 22 e2  |of points."...".|
00003ad0  0d 2e 70 6f 62 6a 6c 6f  6f 70 0d 22 ec 18 4c 44  |..pobjloop."..LD|
00003ae0  4d 49 41 20 70 6e 74 73  20 21 2c 7b 78 2c 79 2c  |MIA pnts !,{x,y,|
00003af0  7a 7d 0d 22 f6 24 4d 55  4c 20 74 32 2c 7a 2c 73  |z}.".$MUL t2,z,s|
00003b00  78 61 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |xa              |
00003b10  3b 72 6f 74 20 78 0d 23  00 10 52 53 42 20 74 32  |;rot x.#..RSB t2|
00003b20  2c 74 32 2c 23 30 0d 23  0a 13 4d 4c 41 20 74 31  |,t2,#0.#..MLA t1|
00003b30  2c 79 2c 63 78 61 2c 74  32 0d 23 14 10 4d 55 4c  |,y,cxa,t2.#..MUL|
00003b40  20 74 32 2c 79 2c 73 78  61 0d 23 1e 13 4d 4c 41  | t2,y,sxa.#..MLA|
00003b50  20 74 32 2c 7a 2c 63 78  61 2c 74 32 0d 23 28 14  | t2,z,cxa,t2.#(.|
00003b60  4d 4f 56 20 79 2c 74 31  2c 41 53 52 23 66 70 25  |MOV y,t1,ASR#fp%|
00003b70  0d 23 32 14 4d 4f 56 20  7a 2c 74 32 2c 41 53 52  |.#2.MOV z,t2,ASR|
00003b80  23 66 70 25 0d 23 3c 04  0d 23 46 24 4d 55 4c 20  |#fp%.#<..#F$MUL |
00003b90  74 32 2c 7a 2c 73 79 61  20 20 20 20 20 20 20 20  |t2,z,sya        |
00003ba0  20 20 20 20 20 20 3b 72  6f 74 20 79 0d 23 50 10  |      ;rot y.#P.|
00003bb0  52 53 42 20 74 32 2c 74  32 2c 23 30 0d 23 5a 13  |RSB t2,t2,#0.#Z.|
00003bc0  4d 4c 41 20 74 31 2c 78  2c 63 79 61 2c 74 32 0d  |MLA t1,x,cya,t2.|
00003bd0  23 64 10 4d 55 4c 20 74  32 2c 78 2c 73 79 61 0d  |#d.MUL t2,x,sya.|
00003be0  23 6e 13 4d 4c 41 20 74  32 2c 7a 2c 63 79 61 2c  |#n.MLA t2,z,cya,|
00003bf0  74 32 0d 23 78 14 4d 4f  56 20 78 2c 74 31 2c 41  |t2.#x.MOV x,t1,A|
00003c00  53 52 23 66 70 25 0d 23  82 14 4d 4f 56 20 7a 2c  |SR#fp%.#..MOV z,|
00003c10  74 32 2c 41 53 52 23 66  70 25 0d 23 8c 04 0d 23  |t2,ASR#fp%.#...#|
00003c20  96 24 4d 55 4c 20 74 32  2c 79 2c 73 7a 61 20 20  |.$MUL t2,y,sza  |
00003c30  20 20 20 20 20 20 20 20  20 20 20 20 3b 72 6f 74  |            ;rot|
00003c40  20 7a 0d 23 a0 10 52 53  42 20 74 32 2c 74 32 2c  | z.#..RSB t2,t2,|
00003c50  23 30 0d 23 aa 13 4d 4c  41 20 74 31 2c 78 2c 63  |#0.#..MLA t1,x,c|
00003c60  7a 61 2c 74 32 0d 23 b4  10 4d 55 4c 20 74 32 2c  |za,t2.#..MUL t2,|
00003c70  78 2c 73 7a 61 0d 23 be  13 4d 4c 41 20 74 32 2c  |x,sza.#..MLA t2,|
00003c80  79 2c 63 7a 61 2c 74 32  0d 23 c8 14 4d 4f 56 20  |y,cza,t2.#..MOV |
00003c90  78 2c 74 31 2c 41 53 52  23 66 70 25 0d 23 d2 14  |x,t1,ASR#fp%.#..|
00003ca0  4d 4f 56 20 79 2c 74 32  2c 41 53 52 23 66 70 25  |MOV y,t2,ASR#fp%|
00003cb0  0d 23 dc 04 0d 23 e6 2c  4c 44 52 20 74 31 2c 6f  |.#...#.,LDR t1,o|
00003cc0  62 6a 79 20 20 20 20 20  20 20 20 20 20 20 20 20  |bjy             |
00003cd0  20 20 3b 61 64 6a 75 73  74 20 63 6f 6f 72 64 73  |  ;adjust coords|
00003ce0  0d 23 f0 10 3b 4c 44 52  20 74 32 2c 6f 62 6a 7a  |.#..;LDR t2,objz|
00003cf0  0d 23 fa 0e 41 44 44 20  79 2c 79 2c 74 31 0d 24  |.#..ADD y,y,t1.$|
00003d00  04 0f 3b 41 44 44 20 7a  2c 7a 2c 74 32 0d 24 0e  |..;ADD z,z,t2.$.|
00003d10  14 41 44 44 20 7a 2c 7a  2c 23 79 73 68 69 66 74  |.ADD z,z,#yshift|
00003d20  25 0d 24 18 04 0d 24 22  30 4c 44 52 20 74 31 2c  |%.$...$"0LDR t1,|
00003d30  70 65 72 73 70 70 74 72  20 20 20 20 20 20 20 20  |perspptr        |
00003d40  20 20 20 3b 61 70 70 6c  79 20 70 65 72 73 70 65  |   ;apply perspe|
00003d50  63 74 69 76 65 0d 24 2c  17 4c 44 52 20 74 31 2c  |ctive.$,.LDR t1,|
00003d60  5b 74 31 2c 7a 2c 41 53  4c 23 32 5d 0d 24 36 0e  |[t1,z,ASL#2].$6.|
00003d70  4d 55 4c 20 78 2c 74 31  2c 78 0d 24 40 0e 4d 55  |MUL x,t1,x.$@.MU|
00003d80  4c 20 79 2c 74 31 2c 79  0d 24 4a 13 4d 4f 56 20  |L y,t1,y.$J.MOV |
00003d90  78 2c 78 2c 41 53 52 23  66 70 25 0d 24 54 13 4d  |x,x,ASR#fp%.$T.M|
00003da0  4f 56 20 79 2c 79 2c 41  53 52 23 66 70 25 0d 24  |OV y,y,ASR#fp%.$|
00003db0  5e 13 53 54 4d 49 41 20  69 20 21 2c 7b 78 2c 79  |^.STMIA i !,{x,y|
00003dc0  7d 0d 24 68 0c 3b 42 4c  20 70 6c 6f 74 0d 24 72  |}.$h.;BL plot.$r|
00003dd0  04 0d 24 7c 0f 53 55 42  53 20 6e 2c 6e 2c 23 31  |..$|.SUBS n,n,#1|
00003de0  0d 24 86 10 42 4e 45 20  70 6f 62 6a 6c 6f 6f 70  |.$..BNE pobjloop|
00003df0  0d 24 90 04 0d 24 9a 27  4c 44 52 20 66 73 2c 66  |.$...$.'LDR fs,f|
00003e00  61 63 65 73 20 20 20 20  20 20 20 20 20 20 20 3b  |aces           ;|
00003e10  64 72 61 77 20 70 6f 6c  69 65 73 0d 24 a4 11 4c  |draw polies.$..L|
00003e20  44 52 20 6e 2c 5b 66 73  5d 2c 23 34 0d 24 ae 0f  |DR n,[fs],#4.$..|
00003e30  41 44 52 20 69 2c 69 6d  61 67 65 0d 24 b8 04 0d  |ADR i,image.$...|
00003e40  24 c2 0d 2e 66 6f 62 6a  6c 6f 6f 70 0d 24 cc 3e  |$...fobjloop.$.>|
00003e50  4c 44 4d 49 41 20 66 73  20 21 2c 7b 63 6f 6c 2c  |LDMIA fs !,{col,|
00003e60  76 73 7d 20 20 20 20 20  3b 6c 6f 61 64 20 63 6f  |vs}     ;load co|
00003e70  6c 6f 75 72 20 61 6e 64  20 76 65 72 74 73 20 28  |lour and verts (|
00003e80  54 7c 34 3b 33 3b 32 3b  31 29 0d 24 d6 04 0d 24  |T|4;3;2;1).$...$|
00003e90  e0 10 80 20 74 32 2c 76  73 2c 23 26 46 46 0d 24  |... t2,vs,#&FF.$|
00003ea0  ea 15 41 44 44 20 74 32  2c 69 2c 74 32 2c 4c 53  |..ADD t2,i,t2,LS|
00003eb0  4c 23 33 0d 24 f4 14 4c  44 4d 49 41 20 74 32 2c  |L#3.$..LDMIA t2,|
00003ec0  7b 78 31 2c 79 31 7d 0d  24 fe 04 0d 25 08 13 4d  |{x1,y1}.$...%..M|
00003ed0  4f 56 20 76 73 2c 76 73  2c 4c 53 52 23 38 0d 25  |OV vs,vs,LSR#8.%|
00003ee0  12 10 80 20 74 32 2c 76  73 2c 23 26 46 46 0d 25  |... t2,vs,#&FF.%|
00003ef0  1c 15 41 44 44 20 74 32  2c 69 2c 74 32 2c 4c 53  |..ADD t2,i,t2,LS|
00003f00  4c 23 33 0d 25 26 14 4c  44 4d 49 41 20 74 32 2c  |L#3.%&.LDMIA t2,|
00003f10  7b 78 32 2c 79 32 7d 0d  25 30 04 0d 25 3a 13 4d  |{x2,y2}.%0..%:.M|
00003f20  4f 56 20 76 73 2c 76 73  2c 4c 53 52 23 38 0d 25  |OV vs,vs,LSR#8.%|
00003f30  44 10 80 20 74 32 2c 76  73 2c 23 26 46 46 0d 25  |D.. t2,vs,#&FF.%|
00003f40  4e 15 41 44 44 20 74 32  2c 69 2c 74 32 2c 4c 53  |N.ADD t2,i,t2,LS|
00003f50  4c 23 33 0d 25 58 14 4c  44 4d 49 41 20 74 32 2c  |L#3.%X.LDMIA t2,|
00003f60  7b 78 33 2c 79 33 7d 0d  25 62 04 0d 25 6c 39 53  |{x3,y3}.%b..%l9S|
00003f70  55 42 20 79 34 2c 78 32  2c 78 31 20 20 20 20 20  |UB y4,x2,x1     |
00003f80  20 20 20 20 20 20 20 3b  63 6c 69 70 20 62 61 63  |       ;clip bac|
00003f90  6b 77 61 72 64 73 20 28  78 34 2c 79 34 2d 74 65  |kwards (x4,y4-te|
00003fa0  6d 70 73 29 0d 25 76 10  53 55 42 20 78 34 2c 79  |mps).%v.SUB x4,y|
00003fb0  33 2c 79 32 0d 25 80 10  4d 55 4c 20 78 34 2c 79  |3,y2.%..MUL x4,y|
00003fc0  34 2c 78 34 0d 25 8a 10  53 55 42 20 79 34 2c 79  |4,x4.%..SUB y4,y|
00003fd0  32 2c 79 31 0d 25 94 10  53 55 42 20 74 32 2c 78  |2,y1.%..SUB t2,x|
00003fe0  33 2c 78 32 0d 25 9e 10  4d 55 4c 20 79 34 2c 74  |3,x2.%..MUL y4,t|
00003ff0  32 2c 79 34 0d 25 a8 0d  43 4d 50 20 78 34 2c 79  |2,y4.%..CMP x4,y|
00004000  34 0d 25 b2 2d 42 4c 54  20 79 63 61 6e 6e 65 20  |4.%.-BLT ycanne |
00004010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00004020  79 27 63 61 6e 6e 65 20  73 65 65 20 69 74 0d 25  |y'canne see it.%|
00004030  bc 04 0d 25 c6 13 4d 4f  56 20 76 73 2c 76 73 2c  |...%..MOV vs,vs,|
00004040  4c 53 52 23 38 0d 25 d0  2c 43 4d 50 20 76 73 2c  |LSR#8.%.,CMP vs,|
00004050  23 26 46 46 20 20 20 20  20 20 20 20 20 20 20 20  |#&FF            |
00004060  20 20 20 3b 74 65 53 54  2c 20 26 46 46 2d 74 72  |   ;teST, &FF-tr|
00004070  69 0d 25 da 12 80 4e 45  20 74 32 2c 76 73 2c 23  |i.%...NE t2,vs,#|
00004080  26 46 46 0d 25 e4 17 41  44 44 4e 45 20 74 32 2c  |&FF.%..ADDNE t2,|
00004090  69 2c 74 32 2c 4c 53 4c  23 33 0d 25 ee 16 4c 44  |i,t2,LSL#3.%..LD|
000040a0  4d 4e 45 49 41 20 74 32  2c 7b 78 34 2c 79 34 7d  |MNEIA t2,{x4,y4}|
000040b0  0d 25 f8 0d 42 4c 4e 45  20 71 75 61 64 0d 26 02  |.%..BLNE quad.&.|
000040c0  0c 42 4c 45 51 20 74 72  69 0d 26 0c 04 0d 26 16  |.BLEQ tri.&...&.|
000040d0  0b 2e 79 63 61 6e 6e 65  0d 26 20 0f 53 55 42 53  |..ycanne.& .SUBS|
000040e0  20 6e 2c 6e 2c 23 31 0d  26 2a 10 42 4e 45 20 66  | n,n,#1.&*.BNE f|
000040f0  6f 62 6a 6c 6f 6f 70 0d  26 34 04 0d 26 3e 27 4c  |objloop.&4..&>'L|
00004100  44 52 20 72 31 35 2c 72  65 74 73 61 76 65 20 20  |DR r15,retsave  |
00004110  20 20 20 20 20 20 3b 4d  4f 56 20 72 31 35 2c 72  |      ;MOV r15,r|
00004120  31 34 0d 26 48 1c 2e 69  6d 61 67 65 20 a4 67 61  |14.&H..image .ga|
00004130  70 28 6d 61 78 33 64 70  74 73 25 2a 38 29 0d 26  |p(max3dpts%*8).&|
00004140  52 04 0d 26 5c 04 0d 26  66 06 5d ed 0d 26 70 0d  |R..&\..&f.]..&p.|
00004150  f1 50 25 2d 63 6f 64 65  25 0d 26 7a 23 c8 99 22  |.P%-code%.&z#.."|
00004160  4f 53 5f 52 65 61 64 56  64 75 56 61 72 69 61 62  |OS_ReadVduVariab|
00004170  6c 65 73 22 2c 76 64 75  2c 76 64 75 0d 26 84 16  |les",vdu,vdu.&..|
00004180  76 64 75 21 34 3d 21 76  64 75 2b 32 35 36 2a 33  |vdu!4=!vdu+256*3|
00004190  32 30 0d 26 8e 05 e1 0d  26 98 04 0d 26 a2 0a dd  |20.&....&...&...|
000041a0  a4 76 75 6c 63 0d 26 ac  0c e3 6a 25 3d 31 b8 32  |.vulc.&...j%=1.2|
000041b0  30 0d 26 b6 0a 5b 4f 50  54 69 25 0d 26 c0 1d 53  |0.&..[OPTi%.&..S|
000041c0  54 4d 49 41 20 28 78 6c  29 21 2c 7b 63 31 2c 63  |TMIA (xl)!,{c1,c|
000041d0  32 2c 63 33 2c 63 34 7d  0d 26 ca 06 5d ed 0d 26  |2,c3,c4}.&..]..&|
000041e0  d4 07 3d 22 22 0d 26 de  04 0d 26 e8 09 dd a4 72  |..="".&...&....r|
000041f0  6f 74 0d 26 f2 0a 5b 4f  50 54 69 25 0d 26 fc 0c  |ot.&..[OPTi%.&..|
00004200  4d 4f 56 20 73 2c 61 78  0d 27 06 0d 4d 4f 56 20  |MOV s,ax.'..MOV |
00004210  61 78 2c 62 78 0d 27 10  0d 4d 4f 56 20 62 78 2c  |ax,bx.'..MOV bx,|
00004220  63 78 0d 27 1a 0d 4d 4f  56 20 63 78 2c 64 78 0d  |cx.'..MOV cx,dx.|
00004230  27 24 0c 4d 4f 56 20 64  78 2c 73 0d 27 2e 0c 4d  |'$.MOV dx,s.'..M|
00004240  4f 56 20 73 2c 61 79 0d  27 38 0d 4d 4f 56 20 61  |OV s,ay.'8.MOV a|
00004250  79 2c 62 79 0d 27 42 0d  4d 4f 56 20 62 79 2c 63  |y,by.'B.MOV by,c|
00004260  79 0d 27 4c 0d 4d 4f 56  20 63 79 2c 64 79 0d 27  |y.'L.MOV cy,dy.'|
00004270  56 0c 4d 4f 56 20 64 79  2c 73 0d 27 60 05 5d 0d  |V.MOV dy,s.'`.].|
00004280  27 6a 06 3d 30 0d 27 74  04 0d 27 7e 0d dd a4 67  |'j.=0.'t..'~...g|
00004290  61 70 28 67 25 29 0d 27  88 0c 50 25 3d 50 25 2b  |ap(g%).'..P%=P%+|
000042a0  67 25 0d 27 92 06 3d 30  0d 27 9c 04 0d 27 a6 0e  |g%.'..=0.'...'..|
000042b0  dd a4 64 61 74 61 28 61  24 29 0d 27 b0 14 e3 67  |..data(a$).'...g|
000042c0  25 3d 31 20 b8 20 a9 61  24 2d 31 20 88 32 0d 27  |%=1 . .a$-1 .2.'|
000042d0  ba 18 3f 50 25 3d a0 28  22 26 22 2b c1 61 24 2c  |..?P%=.("&"+.a$,|
000042e0  67 25 2c 32 29 29 0d 27  c4 19 50 25 3f 31 3d a0  |g%,2)).'..P%?1=.|
000042f0  28 22 26 22 2b c1 61 24  2c 67 25 2c 32 29 29 0d  |("&"+.a$,g%,2)).|
00004300  27 ce 09 50 25 2b 3d 32  0d 27 d8 05 ed 0d 27 e2  |'..P%+=2.'....'.|
00004310  06 3d 30 0d ff                                    |.=0..|
00004315