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

StarInfo/Henry/Fly

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/Fly
Read OK:
File size: 431D bytes
Load address: 0000
Exec address: 0000
File contents
    1REM> Fly
    2REM> Writen by Morgan Henry LEN1994
    3REM> enry@dcs.qmw.ac.uk
    4
    5fixed_height%=FALSE
    6
    7ONERROR MODE0:PRINTREPORT$;" at line ";ERL:END
    8MODE15:MODE13
    9ORIGIN640,512
   10frameL=0:frameR=316:frameT=0:frameB=255
   11originX=160:originY=40
   12
   13size%=128:sizes%=7  :REM size%=128 or 256, sizes%=7 or 8
   14fp%=10
   15dispx%=16           :REM number of visable patches
   16dispy%=dispx%
   17yshift%=208         :REM controls centre of rotation
   18camdrop%=75         :REM base camera height
   19pointmod%=(dispx%*2+2)*12
   20max3dpts%=32
   21gravity%=196        :REM heli weight
   22S%=FALSE            :REM shadow on/off
   23
   24DIMsin% (512+128)*4
   25DIMdivtable% 4096*4
   26DIMpersp% 512*4
   27DIMmap% size%*size%*4
   28DIMpoints% (dispx%*2+2)*(dispy%*2+2)*12
   29DIMbin% dispy%*64*4
   30
   31PRINTTAB(0,20);"Left Mouse Button to increase power"
   32PRINT"Right Mouse Button to decrease power"
   33PROCmisc
   34PROCass
   35PROCshowmap
   36!pointmid=points%+( (dispx%*2+2)*(dispy%)*12+dispx%*12 )
   37
   38t=1:s=2
   39REPEAT
   40CLS
   41MOVE-640,500:DRAWBY-16*!hpower,0
   42CALLupdate
   43MOUSETO0,0
   44CALLcalcpoints
   45CALLdrawpoints
   46IF S% CALLdrawshad
   47CALLdrawheli
   48WAIT:SYS6,112,s:SYS6,113,t:SWAPt,s:SWAP!vdu,vdu!4
   49UNTILFALSE
   50
   51DEFPROCmisc
   52PRINT".";
   53k=360/512
   54FORi%=0TO(512+127)
   55sin%!(i%*4)=(1<<fp%)*SINRAD(i%*k)
   56NEXT
   57PRINT".";
   58FORi%=0TO511
   59y%=512-i%
   60persp%!(i%*4)=(300<<fp%)/y%
   61NEXT
   62PRINT".";
   63FORi%=0TO (dispx%*2+2)*(dispy%*2+2)*3-1
   64points%!(i%*4)=&FF<<16
   65NEXT
   66PRINT".";
   67FORi%=0TO dispy%*64-1
   68bin%!(i%*4)=0
   69NEXT
   70PRINT".";
   71FORi%=1TO639
   72divtable%!(i%*4)=(1<<fp%)/i%
   73NEXT
   74PRINT".";
   75OSCLI("LOAD FlyMap "+STR$~map%)
   76ENDPROC
   77
   78DEFPROCshowmap
   79A%=map%
   80B%=!vdu
   81FORx%=0TOsize%-1:FORy%=0TOsize%-1
   82?B%=colours?(!A%AND&FFFF)
   83B%+=1:A%+=4
   84NEXT
   85B%+=320-size%
   86NEXT
   87Z%=0
   88WHILE Z%=0:MOUSE X%,Y%,Z%:ENDWHILE
   89ENDPROC
   90
   91DEFPROCass
   92DIMcode% 64000
   93
   94FORi%=0TO2STEP2
   95x=0:y=1:a=2
   96sa=3:ca=4
   97h=2
   98scrx=6:scry=5
   99pp=7:b=8
  100p=9:t=10
  101xx=11:yy=12
  102col=14
  103
  104P%=code%
  105[OPTi%
  106.vdu DCD 148:DCD -1
  107.divtableptr DCD divtable%
  108.perspptr DCD persp%
  109.sinptr DCD sin%
  110.cosptr DCD sin%+(128*4)
  111.mapptr DCD map%
  112.pointsptr DCD points%
  113.pointmid DCD 0
  114.binptr DCD bin%
  115
  116.xpos DCD 0
  117.ypos DCD 0
  118.height DCD 0
  119.rot DCD 0
  120
  121.calcpoints
  122STR r14,retsave
  123
  124LDR sa,sinptr              ;sin a, cos a
  125LDR ca,cosptr
  126LDR a,rot
  127LDR sa,[sa,a,ASL#2]
  128LDR ca,[ca,a,ASL#2]
  129LDR h,height               ;current height
  130ADD h,h,#camdrop%
  131LDR pp,pointsptr
  132LDR b,binptr
  133
  134LDR xx,xpos
  135LDR yy,ypos
  136
  137
  138MVN y,#NOT-dispy%
  139.yloop
  140MVN x,#NOT-dispx%
  141.xloop
  142
  143AND p,xx,#%1111
  144AND t,yy,#%1111
  145RSB p,p,x,ASL#4
  146RSB t,t,y,ASL#4
  147
  148MUL scrx,t,sa
  149RSB scrx,scrx,#0
  150MLA scrx,p,ca,scrx
  151MUL scry,t,ca
  152MLA scry,p,sa,scry          ;scrx<<fp%, scry<<fp%
  153MOV scrx,scrx,ASR#6+4       ;shift square size (.XXX)
  154MOV scry,scry,ASR#6+4
  155
  156ADDS scry,scry,#yshift%     ;clip squares
  157BMI pointout
  158CMP scry,#(dispy%*16)
  159BGE pointout
  160CMN scrx,#NOT-160
  161BLT pointout
  162CMP scrx,#160
  163BGE pointout
  164
  165ADD p,x,xx,ASR#4          ;get land height
  166ADD t,y,yy,ASR#4
  167AND p,p,#size%-1
  168AND t,t,#size%-1
  169ADD t,p,t,ASL#sizes%
  170
  171LDR p,mapptr
  172LDR t,[p,t,ASL#2]
  173MOV col,t,LSL#16          ;extract colour
  174MOV col,col,LSR#16
  175MOV t,t,ASR#16
  176
  177LDR p,perspptr
  178LDR p,[p,scry,ASL#2]      ;perspective k
  179
  180MUL scrx,p,scrx           ;apply perspective
  181MOV scrx,scrx,ASR#fp%
  182
  183SUB t,h,t
  184MUL t,p,t
  185MOV t,t,ASR#fp%
  186
  187STMIA pp,{scrx,t,col}       ;X,Y,col arrange point storage
  188MOV scry,scry,ASR#4
  189ADD scry,b,scry,ASL#8       ;bin scry * 64*4=256
  190LDR t,[scry]                ;t=num in bin
  191ADD t,t,#1
  192STR t,[scry]
  193STR pp,[scry,t,ASL#2]
  194
  195
  196.pointout
  197ADD pp,pp,#12            ;move to next point
  198
  199ADD x,x,#1
  200CMP x,#dispx%
  201BLE xloop
  202
  203ADD pp,pp,#12           ;adjust for border
  204ADD y,y,#1
  205CMP y,#dispy%
  206BLE yloop
  207
  208LDR r0,pointmid       ;shadow calculation
  209LDR r3,[r0,#4]
  210STR r3,shadpnts
  211
  212LDR r15,retsave       ;MOV r15,r14
  213
  214
  215.drawshad
  216STR r14,retsave
  217MOV r0,#0
  218LDR r1,shadpnts
  219MOV r2,#8
  220ADD r3,r1,#4
  221MOV r4,#0
  222ADD r5,r1,#8
  223MVN r6,#NOT-8
  224ADD r7,r1,#4
  225MOV r8,#0
  226BL quad
  227LDR r15,retsave
  228
  229.shadpnts DCD 0
  230]
  231x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
  232ct=9:n=10:p=8
  233bp=11:b=12
  234
  235k=0
  236[OPTi%
  237.retsave DCD 0
  238.drawpoints
  239STR r14,retsave
  240LDR b,binptr
  241
  242MOV ct,#0
  243.binloop
  244ADD bp,b,ct,ASL#8
  245LDR n,[bp]
  246
  247MOVS n,n
  248BEQ nomore
  249.inbin
  250LDR p,[bp,n,ASL#2]         ;p ptr to de point
  251LDMIA p,{x1,y1}
  252LDR x2,[p,#12]
  253LDR y2,[p,#16]
  254CMP x2,#&FF<<16
  255LDRNE x3,[p,#pointmod%+12]
  256LDRNE y3,[p,#pointmod%+16]
  257CMPNE x3,#&FF<<16
  258LDRNE x4,[p,#pointmod%]
  259LDRNE y4,[p,#pointmod%+4]
  260CMPNE x4,#&FF<<16
  261
  262LDRNE p,[p,#8]
  263RSBNE r14,ct,#dispy%-1
  264ADDNE p,p,r14
  265ADRNE r14,colours
  266LDRNEB p,[r14,p]
  267BLNE quad
  268
  269
  270SUBS n,n,#1
  271BNE inbin
  272
  273.nomore
  274ADD ct,ct,#1
  275CMP ct,#dispy%
  276BNE binloop
  277
  278
  279.emptybins                 ;remove bins and delete points
  280MOV k,#&FF<<16
  281
  282MOV ct,#dispy%-1
  283.emptyloop
  284ADD bp,b,ct,ASL#8
  285LDR n,[bp]
  286
  287MOVS n,n
  288BEQ nomore2
  289.outbin
  290LDR p,[bp,n,ASL#2]         ;p ptr to de point
  291STR k,[p]
  292
  293SUBS n,n,#1
  294BNE outbin
  295STR n,[bp]                 ;empty bin
  296
  297.nomore2
  298SUBS ct,ct,#1
  299BPL emptyloop
  300
  301LDR r15,retsave
  302
  303.colours
  304FNdata("FFFEFDFCD3D2D1D02F2E2D2C2C2C2C2C") ;grey
  305FNdata("ABAAA9A8838281800B0A090808080808") ;light blue
  306FNdata("3F3E3D3C131211100706050403020100") ;pink -> red
  307FNdata("5F5E5D5C333231300706050404040404") ;peach -> red
  308FNdata("63626160434241402322212020202020") ;bright green
  309]
  310
  311ax=0:ay=1:bx=2:by=3
  312cx=4:cy=5:dx=6:dy=7
  313col=8:t=9
  314
  315a=10:b=11:c=12
  316n=10
  317q=11:s=12
  318
  319xl=0:xr=1:l=2:r=3:ct=4
  320c1=5:c2=6:c3=7:c4=8
  321o=10:la=11:ra=12
  322
  323sp=13:link=14:pc=15
  324[OPTi%
  325.axd EQUD0
  326.bxd EQUD0
  327.cxd
  328.dxd EQUD0
  329.ab EQUD0
  330.bc EQUD0
  331.dc
  332.cd EQUD0
  333.ac
  334.ad EQUD0
  335.aa EQUD0
  336.dd
  337.bb EQUD0
  338.cc EQUD0
  339.yposq EQUD0
  340.ditabd EQUD divtable%
  341
  342.tri
  343STMFD r13!,{r9-r12,r14}
  344
  345;AND col,col,#&ff
  346ADD col,col,col,LSL#8
  347ADD col,col,col,LSL#16
  348
  349ADD ax,ax,#originX
  350ADD bx,bx,#originX
  351ADD cx,cx,#originX
  352
  353CMP ay,by             ;sort
  354MOVGT t,ax
  355MOVGT ax,bx
  356MOVGT bx,t
  357MOVGT t,ay
  358MOVGT ay,by
  359MOVGT by,t
  360CMP by,cy
  361MOVGT t,bx
  362MOVGT bx,cx
  363MOVGT cx,t
  364MOVGT t,by
  365MOVGT by,cy
  366MOVGT cy,t
  367CMP ay,by      
  368MOVGT t,ax
  369MOVGT ax,bx
  370MOVGT bx,t
  371MOVGT t,ay
  372MOVGT ay,by
  373MOVGT by,t
  374
  375
  376ADD t,ay,#originY
  377STR t,yposq
  378
  379
  380STR ax,axd
  381STR bx,bxd
  382STR cx,cxd
  383
  384LDR q,ditabd
  385SUB t,bx,ax
  386SUB n,by,ay
  387STR n,aa
  388LDR n,[q,n,ASL#2]
  389MUL n,t,n
  390STR n,ab
  391
  392SUB t,cx,bx
  393SUB n,cy,by
  394STR n,bb
  395LDR n,[q,n,ASL#2]
  396MUL n,t,n
  397STR n,bc
  398
  399SUB t,cx,ax
  400SUB n,cy,ay
  401LDR n,[q,n,ASL#2]
  402MUL n,t,n
  403STR n,ac
  404
  405LDR o,vdu
  406ADD t,ay,#originY
  407ADD t,t,t,ASL#2
  408ADD o,o,t,ASL#6
  409
  410MOV c1,c4
  411MOV c2,c4
  412MOV c3,c4
  413
  414LDR ct,aa
  415CMP ct,#0
  416LDR t,axd
  417MOV l,t,ASL#fp%
  418MOV r,t,ASL#fp%
  419LDR la,ac
  420ADD l,l,#1<<(fp%-1)
  421LDR ra,ab
  422ADD r,r,#1<<(fp%-1)
  423BLNE piece
  424
  425LDR ct,bb
  426CMP ct,#0
  427LDR t,bxd
  428MOV r,t,ASL#fp%
  429LDR ra,bc
  430ADD r,r,#1<<(fp%-1)
  431BLNE piece
  432LDMFD r13!,{r9-r12,r15}^
  433
  434.quad                    ;based on a routine by Jan VDU
  435STMFD r13!,{r9-r12,r14}
  436
  437;AND col,col,#&ff
  438ADD col,col,col,LSL#8
  439ADD col,col,col,LSL#16
  440
  441ADD ax,ax,#originX
  442ADD bx,bx,#originX
  443ADD cx,cx,#originX
  444ADD dx,dx,#originX
  445
  446MOV t,ay  ;find smallest (top) y
  447CMP t,by
  448MOVGT t,by
  449CMP t,cy
  450MOVGT t,cy
  451CMP t,dy
  452MOVGT t,dy
  453
  454.order
  455CMP t,ay
  456BEQ ok
  457FNrot
  458B order
  459.ok
  460
  461ADD t,ay,#originY
  462STR t,yposq
  463
  464CMP by,dy
  465MOVGT t,bx
  466MOVGT s,by
  467MOVGT bx,dx
  468MOVGT by,dy
  469MOVGT dx,t
  470MOVGT dy,s
  471
  472CMP cy,dy
  473BGT diamond
  474
  475CMP cy,by               ;DUBIOUS
  476MOVLT cy,by             ;SOLUTION
  477
  478STR ax,axd
  479STR bx,bxd
  480STR cx,cxd
  481
  482LDR q,ditabd
  483SUB t,bx,ax
  484SUB n,by,ay
  485STR n,aa
  486LDR n,[q,n,ASL#2]
  487MUL n,t,n
  488STR n,ab
  489SUB t,dx,ax
  490SUB n,dy,ay
  491LDR n,[q,n,ASL#2]
  492MUL n,t,n
  493STR n,ad
  494SUB t,cx,bx
  495SUB n,cy,by
  496STR n,bb
  497LDR n,[q,n,ASL#2]
  498MUL n,t,n
  499STR n,bc
  500SUB t,dx,cx
  501SUB n,dy,cy
  502STR n,cc
  503LDR n,[q,n,ASL#2]
  504MUL n,t,n
  505STR n,cd
  506
  507LDR o,vdu
  508ADD t,ay,#originY
  509ADD t,t,t,ASL#2
  510ADD o,o,t,ASL#6
  511
  512MOV c1,c4
  513MOV c2,c4
  514MOV c3,c4
  515
  516LDR ct,aa
  517CMP ct,#0
  518LDR t,axd
  519MOV l,t,ASL#fp%
  520MOV r,t,ASL#fp%
  521LDR la,ad
  522ADD l,l,#1<<(fp%-1)
  523LDR ra,ab
  524ADD r,r,#1<<(fp%-1)
  525BLNE piece
  526
  527LDR ct,bb
  528CMP ct,#0
  529LDR t,bxd
  530MOV r,t,ASL#fp%
  531LDR ra,bc
  532ADD r,r,#1<<(fp%-1)
  533BLNE piece
  534
  535LDR ct,cc
  536CMP ct,#0
  537LDR t,cxd
  538MOV r,t,ASL#fp%
  539LDR ra,cd
  540ADD r,r,#1<<(fp%-1)
  541BLNE piece
  542LDMFD r13!,{r9-r12,r15}^
  543
  544
  545.diamond
  546STR ax,axd
  547STR bx,bxd
  548STR dx,dxd
  549
  550LDR q,ditabd
  551SUB t,bx,ax
  552SUB n,by,ay
  553STR n,aa
  554LDR n,[q,n,ASL#2]
  555MUL n,t,n
  556STR n,ab
  557
  558SUB t,dx,ax
  559SUB n,dy,ay
  560LDR n,[q,n,ASL#2]
  561MUL n,t,n
  562STR n,ad
  563
  564SUB t,cx,bx
  565SUB n,cy,by
  566LDR n,[q,n,ASL#2]
  567MUL n,t,n
  568STR n,bc
  569
  570SUB t,cx,dx
  571SUB n,cy,dy
  572STR n,cc
  573LDR n,[q,n,ASL#2]
  574MUL n,t,n
  575STR n,dc
  576
  577SUB n,dy,by
  578STR n,dd
  579
  580LDR o,vdu
  581ADD t,ay,#originY
  582ADD t,t,t,ASL#2
  583ADD o,o,t,ASL#6
  584
  585MOV c1,c4
  586MOV c2,c4
  587MOV c3,c4
  588
  589LDR ct,aa
  590CMP ct,#0
  591LDR t,axd
  592MOV l,t,ASL#fp%
  593MOV r,t,ASL#fp%
  594LDR la,ad
  595ADD l,l,#1<<(fp%-1)
  596LDR ra,ab
  597ADD r,r,#1<<(fp%-1)
  598BLNE piece
  599
  600LDR ct,dd
  601CMP ct,#0
  602LDR t,bxd
  603MOV r,t,ASL#fp%
  604LDR ra,bc
  605ADD r,r,#1<<(fp%-1)
  606BLNE piece
  607
  608LDR ct,cc
  609CMP ct,#0
  610LDR t,dxd
  611MOV l,t,ASL#fp%
  612LDR la,dc
  613ADD l,l,#1<<(fp%-1)
  614BLNE piece
  615LDMFD r13!,{r9-r12,r15}^
  616
  617 
  618.piece ;STMFD r13!,{r14}
  619.lo
  620LDR t,yposq
  621ADD t,t,#1
  622STR t,yposq
  623CMP t,#frameT
  624BLE endspan
  625CMP t,#frameB
  626MOVGT r15,r14           ;LDMFDGT r13!,{r15}
  627
  628CMP l,r
  629MOVLT xl,l,ASR#fp%
  630MOVLT xr,r,ASR#fp%
  631MOVGE xl,r,ASR#fp%
  632MOVGE xr,l,ASR#fp%
  633
  634CMP xl,#frameR
  635BGT endspan
  636CMP xr,#frameL
  637BLT endspan
  638CMP xl,#frameL
  639MOVLT xl,#frameL
  640CMP xr,#frameR
  641MOVGT xr,#frameR
  642
  643ADD xl,o,xl
  644ADD xr,o,xr
  645
  646SUBS t,xr,xl
  647BEQ endspan
  648CMP t,#2
  649STRLSB c1,[xl]
  650STRLSB c1,[xr,#-1]
  651BLS endspan
  652TST xl,#%01
  653STRNEB c1,[xl],#1
  654TST xl,#%10
  655STRNEB c2,[xl],#1
  656STRNEB c1,[xl],#1
  657TST xr,#%01
  658STRNEB c2,[xr,#-1]!
  659TST xr,#%10
  660STRNEB c1,[xr,#-1]!
  661STRNEB c2,[xr,#-1]!
  662SUBS t,xr,xl
  663MOVS t,t,LSR#3
  664STRCS c1,[xl],#4
  665MOVS t,t,LSR#1
  666STMCSIA (xl)!,{c1,c2}
  667
  668ADR xr,base
  669SUB pc,xr,t,LSL#2
  670FNvulc
  671.base
  672
  673.endspan
  674ADD l,l,la
  675ADD r,r,ra
  676ADD o,o,#320
  677SUBS ct,ct,#1
  678BNE lo
  679MOV r15,r14               ;LDMFD r13!,{r15}
  680]
  681xa=0:ya=1:za=2
  682x=0:y=1:z=2
  683sxa=3:sya=4:sza=5
  684cxa=6:cya=7:cza=8
  685n=9:p=10
  686i=10
  687pnts=11:fs=11
  688t1=12:t2=14
  689
  690x1=0:y1=1:x2=2:y2=3:x3=4:y3=5:x4=6:y4=7:col=8
  691vs=12
  692
  693[OPTi%
  694.helip DCD 24
  695DCD -5 :DCD 2  :DCD -14        ;0
  696DCD -7 :DCD -7 :DCD -4
  697DCD -10:DCD 4  :DCD -1
  698DCD -9:DCD 4  :DCD 4
  699DCD -5 :DCD -6 :DCD 6
  700DCD -6 :DCD 0  :DCD 10         ;5
  701DCD 6  :DCD 0  :DCD 10
  702DCD 5  :DCD -6 :DCD 6
  703DCD 9 :DCD 4  :DCD 4
  704DCD 10 :DCD 4  :DCD -1
  705DCD 7  :DCD -7 :DCD -4
  706DCD 5  :DCD 2  :DCD -14        ;11
  707
  708DCD -3 :DCD 5  :DCD -12
  709DCD -6 :DCD 6  :DCD -2
  710DCD -5 :DCD 6  :DCD 7         ;14
  711DCD 5  :DCD 6  :DCD 7
  712DCD 6  :DCD 6  :DCD -2
  713DCD 3  :DCD 5  :DCD -12
  714
  715DCD 0  :DCD 4  :DCD 8         ;18
  716DCD -2 :DCD 0  :DCD 10
  717DCD -1 :DCD 0  :DCD 44
  718DCD 0  :DCD 2  :DCD 40
  719DCD 2  :DCD 0  :DCD 10
  720DCD 1  :DCD 0  :DCD 44
  721
  722
  723.helif DCD 22
  724DCD &07:DCD &00010A0B
  725DCD &13:DCD &0104070A
  726DCD &13:DCD &04050607
  727DCD &11:DCD &FF000201
  728DCD &11:DCD &FF0B0A09
  729DCD &10:DCD &02030401
  730DCD &10:DCD &0A070809
  731DCD &12:DCD &FF030504
  732DCD &12:DCD &FF070608
  733
  734DCD &3F:DCD &000B110C
  735DCD &3C:DCD &0C11100D
  736DCD &13:DCD &0D100F0E
  737DCD &12:DCD &0E0F0605
  738
  739DCD &07:DCD &000C0D02
  740DCD &07:DCD &0B091011
  741DCD &11:DCD &020D0E03
  742DCD &11:DCD &1009080F
  743DCD &10:DCD &FF030E05
  744DCD &10:DCD &FF0F0806
  745
  746DCD &12:DCD &16171512     ;tail
  747DCD &12:DCD &13121514
  748DCD &13:DCD &13141716
  749
  750
  751
  752
  753.hrot DCD 0
  754.hpitch DCD 0
  755.hrol DCD 0
  756.hx DCD 256<<fp%
  757.hy DCD 300<<fp%
  758.hheight DCD 0
  759.hdx DCD 0
  760.hdy DCD 0
  761.hdz DCD 0
  762.hpower DCD -16
  763
  764.control
  765STMFD r13!,{r14}
  766BL update
  767BL calcpoints
  768BL drawpoints
  769BL drawheli
  770LDMFD r13!,{r15}
  771
  772.update
  773STMFD r13!,{r14}
  774SWI "OS_Mouse"
  775CMP r2,#1
  776LDRGE r3,hpower
  777ADDEQ r3,r3,#2
  778STREQ r3,hpower
  779CMP r2,#4
  780SUBEQ r3,r3,#2
  781STREQ r3,hpower
  782
  783LDR r9,hpitch
  784ADD r9,r9,r1,ASR#1
  785MOV r9,r9,LSL#23
  786MOV r9,r9,LSR#23
  787STR r9,hpitch
  788
  789LDR r3,hrot
  790SUB r3,r3,r0,ASR#2
  791MOV r3,r3,LSL#23
  792MOV r3,r3,LSR#23
  793STR r3,hrot
  794STR r3,rot
  795
  796LDR r4,hpower
  797LDR r5,sinptr
  798LDR r6,cosptr
  799
  800LDR r7,[r5,r9,ASL#2]
  801LDR r8,[r6,r9,ASL#2]
  802MUL r8,r4,r8                ;verticle power
  803MUL r4,r7,r4                ;forward power
  804MOV r4,r4,ASR#fp%
  805;MOV r8,r8,ASR#fp%
  806
  807LDR r7,hdz                 ;alter dz
  808SUB r7,r7,r8,ASR#6
  809SUB r7,r7,#gravity%
  810STR r7,hdz
  811LDR r8,hheight
  812]
  813IF NOT fixed_height% THEN
  814[OPTi%
  815ADD r8,r8,r7
  816]
  817ENDIF
  818[OPTi%
  819STR r8,hheight
  820
  821MOV r8,r8,ASR#fp%+1       ;figure out cam angle
  822ADD r8,r8,#camdrop%
  823STR r8,height
  824
  825LDR r5,[r5,r3,ASL#2]
  826LDR r6,[r6,r3,ASL#2]
  827MUL r5,r4,r5
  828MUL r6,r4,r6
  829
  830LDR r7,hdx
  831LDR r8,hdy
  832ADD r7,r7,r5,ASR#6
  833ADD r8,r8,r6,ASR#6
  834MOV r9,r7,ASR#4            ;dec dx/dy (air res)
  835MOV r10,r8,ASR#4
  836SUB r7,r7,r9
  837SUB r8,r8,r10
  838STR r7,hdx
  839STR r8,hdy
  840
  841LDR r9,hx
  842LDR r10,hy
  843ADD r9,r9,r7
  844ADD r10,r10,r8
  845STR r9,hx
  846STR r10,hy
  847MOV r9,r9,ASR#fp%
  848MOV r10,r10,ASR#fp%
  849STR r9,xpos
  850STR r10,ypos
  851
  852
  853LDMFD r13!,{r15}
  854
  855.drawheli
  856STMFD r13!,{r14}
  857ADR r11,helip             ;drawheli
  858ADR r12,helif
  859LDR r0,hpitch
  860MOV r1,#0
  861MOV r2,#0
  862MOV r3,#0
  863LDR r6,height
  864LDR r7,hheight
  865SUB r4,r6,r7,ASR#fp%
  866MOV r5,#0
  867BL drawobj
  868LDMFD r13!,{r15}
  869
  870.objx DCD 0
  871.objy DCD 0
  872.objz DCD 0
  873.faces DCD 0
  874.drawobj         ;r0=xa, r1=ya, r2=za, r11=pntptr, r12 faceptr
  875STR r14,retsave  ;r3=x, r4=y, r5=z
  876;STR r3,objx
  877STR r4,objy
  878;STR r5,objz
  879STR r12,faces
  880
  881LDR p,sinptr
  882LDR sxa,[p,xa,ASL#2]
  883LDR sya,[p,ya,ASL#2]
  884LDR sza,[p,za,ASL#2]
  885LDR p,cosptr
  886LDR cxa,[p,xa,ASL#2]
  887LDR cya,[p,ya,ASL#2]
  888LDR cza,[p,za,ASL#2]
  889
  890ADR i,image
  891LDR n,[pnts],#4           ;num of points
  892
  893.pobjloop
  894LDMIA pnts !,{x,y,z}
  895MUL t2,z,sxa              ;rot x
  896RSB t2,t2,#0
  897MLA t1,y,cxa,t2
  898MUL t2,y,sxa
  899MLA t2,z,cxa,t2
  900MOV y,t1,ASR#fp%
  901MOV z,t2,ASR#fp%
  902
  903MUL t2,z,sya              ;rot y
  904RSB t2,t2,#0
  905MLA t1,x,cya,t2
  906MUL t2,x,sya
  907MLA t2,z,cya,t2
  908MOV x,t1,ASR#fp%
  909MOV z,t2,ASR#fp%
  910
  911MUL t2,y,sza              ;rot z
  912RSB t2,t2,#0
  913MLA t1,x,cza,t2
  914MUL t2,x,sza
  915MLA t2,y,cza,t2
  916MOV x,t1,ASR#fp%
  917MOV y,t2,ASR#fp%
  918
  919LDR t1,objy               ;adjust coords
  920;LDR t2,objz
  921ADD y,y,t1
  922;ADD z,z,t2
  923ADD z,z,#yshift%
  924
  925LDR t1,perspptr           ;apply perspective
  926LDR t1,[t1,z,ASL#2]
  927MUL x,t1,x
  928MUL y,t1,y
  929MOV x,x,ASR#fp%
  930MOV y,y,ASR#fp%
  931STMIA i !,{x,y}
  932;BL plot
  933
  934SUBS n,n,#1
  935BNE pobjloop
  936
  937LDR fs,faces           ;draw polies
  938LDR n,[fs],#4
  939ADR i,image
  940
  941.fobjloop
  942LDMIA fs !,{col,vs}     ;load colour and verts (T|4;3;2;1)
  943
  944AND t2,vs,#&FF
  945ADD t2,i,t2,LSL#3
  946LDMIA t2,{x1,y1}
  947
  948MOV vs,vs,LSR#8
  949AND t2,vs,#&FF
  950ADD t2,i,t2,LSL#3
  951LDMIA t2,{x2,y2}
  952
  953MOV vs,vs,LSR#8
  954AND t2,vs,#&FF
  955ADD t2,i,t2,LSL#3
  956LDMIA t2,{x3,y3}
  957
  958SUB y4,x2,x1            ;clip backwards (x4,y4-temps)
  959SUB x4,y3,y2
  960MUL x4,y4,x4
  961SUB y4,y2,y1
  962SUB t2,x3,x2
  963MUL y4,t2,y4
  964CMP x4,y4
  965BLT ycanne                ;y'canne see it
  966
  967MOV vs,vs,LSR#8
  968CMP vs,#&FF               ;teST, &FF-tri
  969ANDNE t2,vs,#&FF
  970ADDNE t2,i,t2,LSL#3
  971LDMNEIA t2,{x4,y4}
  972BLNE quad
  973BLEQ tri
  974
  975.ycanne
  976SUBS n,n,#1
  977BNE fobjloop
  978
  979LDR r15,retsave        ;MOV r15,r14
  980.image FNgap(max3dpts%*8)
  981
  982
  983]NEXT
  984PRINTP%-code%
  985SYS"OS_ReadVduVariables",vdu,vdu
  986vdu!4=!vdu+256*320
  987ENDPROC
  988
  989DEFFNvulc
  990FORj%=1TO20
  991[OPTi%
  992STMIA (xl)!,{c1,c2,c3,c4}
  993]NEXT
  994=""
  995 
  996DEFFNrot
  997[OPTi%
  998MOV s,ax
  999MOV ax,bx
 1000MOV bx,cx
 1001MOV cx,dx
 1002MOV dx,s
 1003MOV s,ay
 1004MOV ay,by
 1005MOV by,cy
 1006MOV cy,dy
 1007MOV dy,s
 1008]
 1009=0
 1010
 1011DEFFNgap(g%)
 1012P%=P%+g%
 1013=0
 1014
 1015DEFFNdata(a$)
 1016FORg%=1 TO LENa$-1 STEP2
 1017?P%=EVAL("&"+MID$(a$,g%,2))
 1018P%?1=EVAL("&"+MID$(a$,g%,2))
 1019P%+=2
 1020NEXT
 1021=0

�> Fly
#�> Writen by Morgan Henry �1994
�> enry@dcs.qmw.ac.uk

fixed_height%=�

� �0:�$;" at line ";�:�
�15:�13
	
ȑ640,512

+frameL=0:frameR=316:frameT=0:frameB=255
originX=160:originY=40


: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

1�0,20);"Left Mouse Button to increase power"
 +�"Right Mouse Button to decrease power"
!	�misc
"�ass
#�showmap
$<!pointmid=points%+( (dispx%*2+2)*(dispy%)*12+dispx%*12 )
%
&t=1:s=2
'�
(�
)�-640,500:�BY-16*!hpower,0
*�update
+
ȗ�0,0
,�calcpoints
-�drawpoints
.� S% �drawshad
/
�drawheli
0-Ȗ:ș6,112,s:ș6,113,t:Ȕt,s:Ȕ!vdu,vdu!4
1��
2
3
��misc
4	�".";
5
k=360/512
6�i%=0�(512+127)
7!sin%!(i%*4)=(1<<fp%)*��(i%*k)
8�
9	�".";
:
�i%=0�511
;
y%=512-i%
<persp%!(i%*4)=(300<<fp%)/y%
=�
>	�".";
?(�i%=0� (dispx%*2+2)*(dispy%*2+2)*3-1
@points%!(i%*4)=&FF<<16
A�
B	�".";
C�i%=0� dispy%*64-1
Dbin%!(i%*4)=0
E�
F	�".";
G
�i%=1�639
H divtable%!(i%*4)=(1<<fp%)/i%
I�
J	�".";
K�("LOAD FlyMap "+�~map%)
L�
M
N
��showmap
OA%=map%
PB%=!vdu
Q�x%=0�size%-1:�y%=0�size%-1
R?B%=colours?(!A%�&FFFF)
SB%+=1:A%+=4
T�
UB%+=320-size%
V�
WZ%=0
Xȕ Z%=0:ȗ X%,Y%,Z%:�
Y�
Z
[	��ass
\�code% 64000
]
^
�i%=0�2�2
_x=0:y=1:a=2
`
sa=3:ca=4
ah=2
bscrx=6:scry=5
cpp=7:b=8
dp=9:t=10
exx=11:yy=12
f
col=14
g
hP%=code%
i
[OPTi%
j.vdu DCD 148:DCD -1
k.divtableptr DCD divtable%
l.perspptr DCD persp%
m.sinptr DCD sin%
n.cosptr DCD sin%+(128*4)
o.mapptr DCD map%
p.pointsptr DCD points%
q.pointmid DCD 0
r.binptr DCD bin%
s
t.xpos DCD 0
u.ypos DCD 0
v.height DCD 0
w.rot DCD 0
x
y.calcpoints
zSTR 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
�
�LDR xx,xpos
�LDR yy,ypos
�
�
�MVN y,#�-dispy%
�
.yloop
�MVN 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)
�BGE pointout
�CMN scrx,#�-160
�BLT pointout
�CMP scrx,#160
�BGE pointout
�
�.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
�
MUL t,p,t
�MOV t,t,ASR#fp%
�
�>STMIA pp,{scrx,t,col}       ;X,Y,col arrange point storage
�MOV scry,scry,ASR#4
�4ADD scry,b,scry,ASL#8       ;bin scry * 64*4=256
�-LDR t,[scry]                ;t=num in bin
�ADD 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]
�STR r3,shadpnts
�
�&LDR r15,retsave       ;MOV r15,r14
�
�
�
.drawshad
�STR r14,retsave
�
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
�
[OPTi%
�.retsave DCD 0
�.drawpoints
�STR r14,retsave
�LDR b,binptr
�
�
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

LDRNE p,[p,#8]
RSBNE r14,ct,#dispy%-1
ADDNE p,p,r14
	ADRNE r14,colours

LDRNEB p,[r14,p]

BLNE quad



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]

MOVS n,n
 BEQ nomore2
!.outbin
"1LDR p,[bp,n,ASL#2]         ;p ptr to de point
#
STR k,[p]
$
%SUBS n,n,#1
&BNE outbin
')STR n,[bp]                 ;empty bin
(
).nomore2
*SUBS ct,ct,#1
+BPL emptyloop
,
-LDR r15,retsave
.
/.colours
03�data("FFFEFDFCD3D2D1D02F2E2D2C2C2C2C2C") ;grey
19�data("ABAAA9A8838281800B0A090808080808") ;light blue
2:�data("3F3E3D3C131211100706050403020100") ;pink -> red
3;�data("5F5E5D5C333231300706050404040404") ;peach -> red
4;�data("63626160434241402322212020202020") ;bright green
5]
6
7ax=0:ay=1:bx=2:by=3
8cx=4:cy=5:dx=6:dy=7
9
col=8:t=9
:
;a=10:b=11:c=12
<n=10
=
q=11:s=12
>
?xl=0:xr=1:l=2:r=3:ct=4
@c1=5:c2=6:c3=7:c4=8
Ao=10:la=11:ra=12
B
Csp=13:link=14:pc=15
D
[OPTi%
E.axd EQUD0
F.bxd EQUD0
G.cxd
H.dxd EQUD0
I
.ab EQUD0
J
.bc EQUD0
K.dc
L
.cd EQUD0
M.ac
N
.ad EQUD0
O
.aa EQUD0
P.dd
Q
.bb EQUD0
R
.cc EQUD0
S.yposq EQUD0
T.ditabd EQUD divtable%
U
V.tri
WSTMFD r13!,{r9-r12,r14}
X
Y;� col,col,#&ff
ZADD col,col,col,LSL#8
[ADD col,col,col,LSL#16
\
]ADD ax,ax,#originX
^ADD bx,bx,#originX
_ADD cx,cx,#originX
`
aCMP ay,by             ;sort
bMOVGT t,ax
cMOVGT ax,bx
dMOVGT bx,t
eMOVGT t,ay
fMOVGT ay,by
gMOVGT by,t
h
CMP by,cy
iMOVGT t,bx
jMOVGT bx,cx
kMOVGT cx,t
lMOVGT t,by
mMOVGT by,cy
nMOVGT cy,t
oCMP ay,by      
pMOVGT t,ax
qMOVGT ax,bx
rMOVGT bx,t
sMOVGT t,ay
tMOVGT ay,by
uMOVGT by,t
v
w
xADD t,ay,#originY
ySTR t,yposq
z
{
|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,cx,bx
�SUB n,cy,by
�STR n,bb
�LDR n,[q,n,ASL#2]
�
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
�
CMP ct,#0
�
LDR t,axd
�MOV l,t,ASL#fp%
�MOV r,t,ASL#fp%
�
LDR la,ac
�ADD l,l,#1<<(fp%-1)
�
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
�
�ADD ax,ax,#originX
�ADD bx,bx,#originX
�ADD cx,cx,#originX
�ADD dx,dx,#originX
�
�$MOV t,ay  ;find smallest (top) y
�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
�MOVGT s,by
�MOVGT bx,dx
�MOVGT by,dy
�MOVGT dx,t
�MOVGT dy,s
�
�
CMP cy,dy
�BGT 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]
�
MUL n,t,n
�STR n,ad
�SUB t,cx,bx
�SUB n,cy,by
�STR n,bb
�LDR n,[q,n,ASL#2]
�
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

CMP ct,#0

LDR t,axd
MOV l,t,ASL#fp%
MOV r,t,ASL#fp%
	
LDR la,ad

ADD l,l,#1<<(fp%-1)

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


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}^

 
!.diamond
"STR ax,axd
#STR bx,bxd
$STR dx,dxd
%
&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
0LDR n,[q,n,ASL#2]
1
MUL n,t,n
2STR n,ad
3
4SUB t,cx,bx
5SUB n,cy,by
6LDR n,[q,n,ASL#2]
7
MUL n,t,n
8STR n,bc
9
:SUB t,cx,dx
;SUB n,cy,dy
<STR n,cc
=LDR n,[q,n,ASL#2]
>
MUL n,t,n
?STR n,dc
@
ASUB n,dy,by
BSTR n,dd
C
D
LDR o,vdu
EADD t,ay,#originY
FADD t,t,t,ASL#2
GADD o,o,t,ASL#6
H
I
MOV c1,c4
J
MOV c2,c4
K
MOV c3,c4
L
M
LDR ct,aa
N
CMP ct,#0
O
LDR t,axd
PMOV l,t,ASL#fp%
QMOV r,t,ASL#fp%
R
LDR la,ad
SADD l,l,#1<<(fp%-1)
T
LDR ra,ab
UADD r,r,#1<<(fp%-1)
VBLNE piece
W
X
LDR ct,dd
Y
CMP ct,#0
Z
LDR t,bxd
[MOV r,t,ASL#fp%
\
LDR ra,bc
]ADD r,r,#1<<(fp%-1)
^BLNE piece
_
`
LDR ct,cc
a
CMP ct,#0
b
LDR t,dxd
cMOV l,t,ASL#fp%
d
LDR la,dc
eADD l,l,#1<<(fp%-1)
fBLNE piece
gLDMFD r13!,{r9-r12,r15}^
h
i 
j.piece ;STMFD r13!,{r14}
k.lo
lLDR t,yposq
mADD t,t,#1
nSTR t,yposq
oCMP t,#frameT
pBLE endspan
qCMP t,#frameB
r/MOVGT r15,r14           ;LDMFDGT r13!,{r15}
s
tCMP l,r
uMOVLT xl,l,ASR#fp%
vMOVLT xr,r,ASR#fp%
wMOVGE xl,r,ASR#fp%
xMOVGE xr,l,ASR#fp%
y
zCMP 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
�
�SUBS t,xr,xl
�BEQ endspan
�CMP t,#2
�STRLSB c1,[xl]
�STRLSB c1,[xr,#-1]
�BLS endspan
�TST 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
�	.base
�
�.endspan
�ADD l,l,la
�ADD r,r,ra
�ADD o,o,#320
�SUBS 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
�DCD -7 :DCD -7 :DCD -4
�DCD -10:DCD 4  :DCD -1
�DCD -9:DCD 4  :DCD 4
�DCD -5 :DCD -6 :DCD 6
�%DCD -6 :DCD 0  :DCD 10         ;5
�DCD 6  :DCD 0  :DCD 10
�DCD 5  :DCD -6 :DCD 6
�DCD 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
�
�
�.helif DCD 22
�DCD &07:DCD &00010A0B
�DCD &13:DCD &0104070A
�DCD &13:DCD &04050607
�DCD &11:DCD &FF000201
�DCD &11:DCD &FF0B0A09
�DCD &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
�DCD &13:DCD &13141716
�
�
�
�
�.hrot DCD 0
�.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
STMFD r13!,{r14}
SWI "OS_Mouse"

CMP r2,#1
LDRGE r3,hpower
	ADDEQ r3,r3,#2

STREQ r3,hpower

CMP r2,#4
SUBEQ 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

 LDR r7,[r5,r9,ASL#2]
!LDR r8,[r6,r9,ASL#2]
"/MUL r8,r4,r8                ;verticle power
#.MUL r4,r7,r4                ;forward power
$MOV r4,r4,ASR#fp%
%;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
0]
1�
2
[OPTi%
3STR r8,hheight
4
53MOV r8,r8,ASR#fp%+1       ;figure out cam angle
6ADD r8,r8,#camdrop%
7STR r8,height
8
9LDR r5,[r5,r3,ASL#2]
:LDR r6,[r6,r3,ASL#2]
;MUL r5,r4,r5
<MUL r6,r4,r6
=
>LDR r7,hdx
?LDR r8,hdy
@ADD r7,r7,r5,ASR#6
AADD r8,r8,r6,ASR#6
B3MOV r9,r7,ASR#4            ;dec dx/dy (air res)
CMOV r10,r8,ASR#4
DSUB r7,r7,r9
ESUB r8,r8,r10
FSTR r7,hdx
GSTR r8,hdy
H
I
LDR r9,hx
JLDR r10,hy
KADD r9,r9,r7
LADD r10,r10,r8
M
STR r9,hx
NSTR r10,hy
OMOV r9,r9,ASR#fp%
PMOV r10,r10,ASR#fp%
QSTR r9,xpos
RSTR r10,ypos
S
T
ULDMFD r13!,{r15}
V
W
.drawheli
XSTMFD r13!,{r14}
Y'ADR r11,helip             ;drawheli
ZADR r12,helif
[LDR r0,hpitch
\
MOV r1,#0
]
MOV r2,#0
^
MOV r3,#0
_LDR r6,height
`LDR r7,hheight
aSUB r4,r6,r7,ASR#fp%
b
MOV r5,#0
cBL drawobj
dLDMFD r13!,{r15}
e
f.objx DCD 0
g.objy DCD 0
h.objz DCD 0
i.faces DCD 0
jB.drawobj         ;r0=xa, r1=ya, r2=za, r11=pntptr, r12 faceptr
k&STR r14,retsave  ;r3=x, r4=y, r5=z
l;STR r3,objx
mSTR r4,objy
n;STR r5,objz
oSTR r12,faces
p
qLDR p,sinptr
rLDR sxa,[p,xa,ASL#2]
sLDR sya,[p,ya,ASL#2]
tLDR sza,[p,za,ASL#2]
uLDR p,cosptr
vLDR cxa,[p,xa,ASL#2]
wLDR cya,[p,ya,ASL#2]
xLDR cza,[p,za,ASL#2]
y
zADR 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%
�MOV z,t2,ASR#fp%
�
�$MUL t2,z,sya              ;rot y
�RSB t2,t2,#0
�MLA t1,x,cya,t2
�MUL t2,x,sya
�MLA t2,z,cya,t2
�MOV 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]
�MUL x,t1,x
�MUL y,t1,y
�MOV x,x,ASR#fp%
�MOV y,y,ASR#fp%
�STMIA i !,{x,y}
�;BL plot
�
�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}
�
�MOV vs,vs,LSR#8
�� t2,vs,#&FF
�ADD t2,i,t2,LSL#3
�LDMIA t2,{x3,y3}
�
�9SUB y4,x2,x1            ;clip backwards (x4,y4-temps)
�SUB 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
�
�'LDR r15,retsave        ;MOV r15,r14
�.image �gap(max3dpts%*8)
�
�
�]�
�
�P%-code%
�#ș"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
�
MOV ay,by
�
MOV by,cy
�
MOV cy,dy
�MOV dy,s
�]
�=0
�
�
ݤ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 01 0a f4 3e 20 46  6c 79 0d 00 02 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 03  |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  04 04 0d 00 05 13 66 69  |.ac.uk........fi|
00000050  78 65 64 5f 68 65 69 67  68 74 25 3d a3 0d 00 06  |xed_height%=....|
00000060  04 0d 00 07 1d ee 85 20  eb 30 3a f1 f6 24 3b 22  |....... .0:..$;"|
00000070  20 61 74 20 6c 69 6e 65  20 22 3b 9e 3a e0 0d 00  | at line ";.:...|
00000080  08 0b eb 31 35 3a eb 31  33 0d 00 09 0d c8 91 36  |...15:.13......6|
00000090  34 30 2c 35 31 32 0d 00  0a 2b 66 72 61 6d 65 4c  |40,512...+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 0b 1a 6f 72 69  67 69 6e 58 3d 31 36 30  |5....originX=160|
000000d0  3a 6f 72 69 67 69 6e 59  3d 34 30 0d 00 0c 04 0d  |:originY=40.....|
000000e0  00 0d 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 0e 0a 66 70 25  |s%=7 or 8....fp%|
00000120  3d 31 30 0d 00 0f 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 10 11 64 69 73 70 79  |patches....dispy|
00000160  25 3d 64 69 73 70 78 25  0d 00 11 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  12 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 13 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 14 10 6d 61 78 33  |*2+2)*12....max3|
000001f0  64 70 74 73 25 3d 33 32  0d 00 15 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  16 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 17 04 0d 00  18 15 de 73 69 6e 25 20  |ff.........sin% |
00000250  28 35 31 32 2b 31 32 38  29 2a 34 0d 00 19 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 00 1a 11 de 70 65 72  73 70 25 20 35 31 32 2a  |.....persp% 512*|
00000280  34 0d 00 1b 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 00 1c 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 00 1d 15 de 62 69  6e 25 20 64 69 73 70 79  |2.....bin% dispy|
000002d0  25 2a 36 34 2a 34 0d 00  1e 04 0d 00 1f 31 f1 8a  |%*64*4.......1..|
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 00 20 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 00  21 09 f2 6d 69 73 63 0d  |power"..!..misc.|
00000340  00 22 08 f2 61 73 73 0d  00 23 0c f2 73 68 6f 77  |."..ass..#..show|
00000350  6d 61 70 0d 00 24 3c 21  70 6f 69 6e 74 6d 69 64  |map..$<!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  00 25 04 0d 00 26 0b 74  3d 31 3a 73 3d 32 0d 00  |.%...&.t=1:s=2..|
000003a0  27 05 f5 0d 00 28 05 db  0d 00 29 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 00  2a 0b d6 75 70 64 61 74  |ower,0..*..updat|
000003d0  65 0d 00 2b 0a c8 97 b8  30 2c 30 0d 00 2c 0f d6  |e..+....0,0..,..|
000003e0  63 61 6c 63 70 6f 69 6e  74 73 0d 00 2d 0f d6 64  |calcpoints..-..d|
000003f0  72 61 77 70 6f 69 6e 74  73 0d 00 2e 12 e7 20 53  |rawpoints..... S|
00000400  25 20 d6 64 72 61 77 73  68 61 64 0d 00 2f 0d d6  |% .drawshad../..|
00000410  64 72 61 77 68 65 6c 69  0d 00 30 2d c8 96 3a c8  |drawheli..0-..:.|
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 00 31  06 fd a3 0d 00 32 04 0d  |vdu!4..1.....2..|
00000450  00 33 0a dd f2 6d 69 73  63 0d 00 34 09 f1 22 2e  |.3...misc..4..".|
00000460  22 3b 0d 00 35 0d 6b 3d  33 36 30 2f 35 31 32 0d  |";..5.k=360/512.|
00000470  00 36 13 e3 69 25 3d 30  b8 28 35 31 32 2b 31 32  |.6..i%=0.(512+12|
00000480  37 29 0d 00 37 21 73 69  6e 25 21 28 69 25 2a 34  |7)..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 00 38 05 ed  0d 00 39 09 f1 22 2e 22  |*k)..8....9.."."|
000004b0  3b 0d 00 3a 0d e3 69 25  3d 30 b8 35 31 31 0d 00  |;..:..i%=0.511..|
000004c0  3b 0d 79 25 3d 35 31 32  2d 69 25 0d 00 3c 1f 70  |;.y%=512-i%..<.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 00 3d 05 ed 0d  |0<<fp%)/y%..=...|
000004f0  00 3e 09 f1 22 2e 22 3b  0d 00 3f 28 e3 69 25 3d  |.>..".";..?(.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 00 40 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 00 41 05 ed 0d  |4)=&FF<<16..A...|
00000540  00 42 09 f1 22 2e 22 3b  0d 00 43 16 e3 69 25 3d  |.B..".";..C..i%=|
00000550  30 b8 20 64 69 73 70 79  25 2a 36 34 2d 31 0d 00  |0. dispy%*64-1..|
00000560  44 11 62 69 6e 25 21 28  69 25 2a 34 29 3d 30 0d  |D.bin%!(i%*4)=0.|
00000570  00 45 05 ed 0d 00 46 09  f1 22 2e 22 3b 0d 00 47  |.E....F..".";..G|
00000580  0d e3 69 25 3d 31 b8 36  33 39 0d 00 48 20 64 69  |..i%=1.639..H 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 00 49 05 ed 0d  |1<<fp%)/i%..I...|
000005b0  00 4a 09 f1 22 2e 22 3b  0d 00 4b 1c ff 28 22 4c  |.J..".";..K..("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 00 4c 05  e1 0d 00 4d 04 0d 00 4e  |ap%)..L....M...N|
000005e0  0d dd f2 73 68 6f 77 6d  61 70 0d 00 4f 0b 41 25  |...showmap..O.A%|
000005f0  3d 6d 61 70 25 0d 00 50  0b 42 25 3d 21 76 64 75  |=map%..P.B%=!vdu|
00000600  0d 00 51 1f e3 78 25 3d  30 b8 73 69 7a 65 25 2d  |..Q..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  00 52 1b 3f 42 25 3d 63  6f 6c 6f 75 72 73 3f 28  |.R.?B%=colours?(|
00000630  21 41 25 80 26 46 46 46  46 29 0d 00 53 0f 42 25  |!A%.&FFFF)..S.B%|
00000640  2b 3d 31 3a 41 25 2b 3d  34 0d 00 54 05 ed 0d 00  |+=1:A%+=4..T....|
00000650  55 11 42 25 2b 3d 33 32  30 2d 73 69 7a 65 25 0d  |U.B%+=320-size%.|
00000660  00 56 05 ed 0d 00 57 08  5a 25 3d 30 0d 00 58 19  |.V....W.Z%=0..X.|
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 00 59  05 e1 0d 00 5a 04 0d 00  |,Z%:...Y....Z...|
00000690  5b 09 dd f2 61 73 73 0d  00 5c 10 de 63 6f 64 65  |[...ass..\..code|
000006a0  25 20 36 34 30 30 30 0d  00 5d 04 0d 00 5e 0d e3  |% 64000..]...^..|
000006b0  69 25 3d 30 b8 32 88 32  0d 00 5f 0f 78 3d 30 3a  |i%=0.2.2.._.x=0:|
000006c0  79 3d 31 3a 61 3d 32 0d  00 60 0d 73 61 3d 33 3a  |y=1:a=2..`.sa=3:|
000006d0  63 61 3d 34 0d 00 61 07  68 3d 32 0d 00 62 11 73  |ca=4..a.h=2..b.s|
000006e0  63 72 78 3d 36 3a 73 63  72 79 3d 35 0d 00 63 0c  |crx=6:scry=5..c.|
000006f0  70 70 3d 37 3a 62 3d 38  0d 00 64 0c 70 3d 39 3a  |pp=7:b=8..d.p=9:|
00000700  74 3d 31 30 0d 00 65 0f  78 78 3d 31 31 3a 79 79  |t=10..e.xx=11:yy|
00000710  3d 31 32 0d 00 66 0a 63  6f 6c 3d 31 34 0d 00 67  |=12..f.col=14..g|
00000720  04 0d 00 68 0c 50 25 3d  63 6f 64 65 25 0d 00 69  |...h.P%=code%..i|
00000730  0a 5b 4f 50 54 69 25 0d  00 6a 17 2e 76 64 75 20  |.[OPTi%..j..vdu |
00000740  44 43 44 20 31 34 38 3a  44 43 44 20 2d 31 0d 00  |DCD 148:DCD -1..|
00000750  6b 1e 2e 64 69 76 74 61  62 6c 65 70 74 72 20 44  |k..divtableptr D|
00000760  43 44 20 64 69 76 74 61  62 6c 65 25 0d 00 6c 18  |CD divtable%..l.|
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 00 6d 14  2e 73 69 6e 70 74 72 20  |rsp%..m..sinptr |
00000790  44 43 44 20 73 69 6e 25  0d 00 6e 1c 2e 63 6f 73  |DCD sin%..n..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 00 6f 14  2e 6d 61 70 70 74 72 20  |8*4)..o..mapptr |
000007c0  44 43 44 20 6d 61 70 25  0d 00 70 1a 2e 70 6f 69  |DCD map%..p..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 00 71 13 2e 70  6f 69 6e 74 6d 69 64 20  |s%..q..pointmid |
000007f0  44 43 44 20 30 0d 00 72  14 2e 62 69 6e 70 74 72  |DCD 0..r..binptr|
00000800  20 44 43 44 20 62 69 6e  25 0d 00 73 04 0d 00 74  | DCD bin%..s...t|
00000810  0f 2e 78 70 6f 73 20 44  43 44 20 30 0d 00 75 0f  |..xpos DCD 0..u.|
00000820  2e 79 70 6f 73 20 44 43  44 20 30 0d 00 76 11 2e  |.ypos DCD 0..v..|
00000830  68 65 69 67 68 74 20 44  43 44 20 30 0d 00 77 0e  |height DCD 0..w.|
00000840  2e 72 6f 74 20 44 43 44  20 30 0d 00 78 04 0d 00  |.rot DCD 0..x...|
00000850  79 0f 2e 63 61 6c 63 70  6f 69 6e 74 73 0d 00 7a  |y..calcpoints..z|
00000860  13 53 54 52 20 72 31 34  2c 72 65 74 73 61 76 65  |.STR r14,retsave|
00000870  0d 00 7b 04 0d 00 7c 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 00 7d 11 4c 44 52 20  63 61 2c 63 6f 73 70 74  |..}.LDR ca,cospt|
000008b0  72 0d 00 7e 0d 4c 44 52  20 61 2c 72 6f 74 0d 00  |r..~.LDR a,rot..|
000008c0  7f 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 00 80  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 00 81 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 00 82 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  00 83 14 4c 44 52 20 70  70 2c 70 6f 69 6e 74 73  |...LDR pp,points|
00000940  70 74 72 0d 00 84 10 4c  44 52 20 62 2c 62 69 6e  |ptr....LDR b,bin|
00000950  70 74 72 0d 00 85 04 0d  00 86 0f 4c 44 52 20 78  |ptr........LDR x|
00000960  78 2c 78 70 6f 73 0d 00  87 0f 4c 44 52 20 79 79  |x,xpos....LDR yy|
00000970  2c 79 70 6f 73 0d 00 88  04 0d 00 89 04 0d 00 8a  |,ypos...........|
00000980  13 4d 56 4e 20 79 2c 23  ac 2d 64 69 73 70 79 25  |.MVN y,#.-dispy%|
00000990  0d 00 8b 0a 2e 79 6c 6f  6f 70 0d 00 8c 13 4d 56  |.....yloop....MV|
000009a0  4e 20 78 2c 23 ac 2d 64  69 73 70 78 25 0d 00 8d  |N x,#.-dispx%...|
000009b0  0a 2e 78 6c 6f 6f 70 0d  00 8e 04 0d 00 8f 11 80  |..xloop.........|
000009c0  20 70 2c 78 78 2c 23 25  31 31 31 31 0d 00 90 11  | p,xx,#%1111....|
000009d0  80 20 74 2c 79 79 2c 23  25 31 31 31 31 0d 00 91  |. 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 00 92 13 52 53 42 20  74 2c 74 2c 79 2c 41 53  |....RSB t,t,y,AS|
00000a00  4c 23 34 0d 00 93 04 0d  00 94 11 4d 55 4c 20 73  |L#4........MUL s|
00000a10  63 72 78 2c 74 2c 73 61  0d 00 95 14 52 53 42 20  |crx,t,sa....RSB |
00000a20  73 63 72 78 2c 73 63 72  78 2c 23 30 0d 00 96 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 00 97 11 4d 55  4c 20 73 63 72 79 2c 74  |rx....MUL scry,t|
00000a50  2c 63 61 0d 00 98 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 00 99 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 00 9a 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 00 9b 04 0d 00  |ry,ASR#6+4......|
00000ae0  9c 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 00 9d 10 42  |lip squares....B|
00000b10  4d 49 20 70 6f 69 6e 74  6f 75 74 0d 00 9e 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 00 9f 10  42 47 45 20 70 6f 69 6e  |*16)....BGE poin|
00000b40  74 6f 75 74 0d 00 a0 13  43 4d 4e 20 73 63 72 78  |tout....CMN scrx|
00000b50  2c 23 ac 2d 31 36 30 0d  00 a1 10 42 4c 54 20 70  |,#.-160....BLT p|
00000b60  6f 69 6e 74 6f 75 74 0d  00 a2 11 43 4d 50 20 73  |ointout....CMP s|
00000b70  63 72 78 2c 23 31 36 30  0d 00 a3 10 42 47 45 20  |crx,#160....BGE |
00000b80  70 6f 69 6e 74 6f 75 74  0d 00 a4 04 0d 00 a5 2e  |pointout........|
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 00 a6 14 41 44  |and height....AD|
00000bc0  44 20 74 2c 79 2c 79 79  2c 41 53 52 23 34 0d 00  |D t,y,yy,ASR#4..|
00000bd0  a7 12 80 20 70 2c 70 2c  23 73 69 7a 65 25 2d 31  |... p,p,#size%-1|
00000be0  0d 00 a8 12 80 20 74 2c  74 2c 23 73 69 7a 65 25  |..... t,t,#size%|
00000bf0  2d 31 0d 00 a9 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 00 aa 04 0d 00  |ASL#sizes%......|
00000c10  ab 10 4c 44 52 20 70 2c  6d 61 70 70 74 72 0d 00  |..LDR p,mapptr..|
00000c20  ac 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 00 ad 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 00 ae 16 4d 4f 56 20  63 6f 6c 2c 63 6f 6c 2c  |....MOV col,col,|
00000c70  4c 53 52 23 31 36 0d 00  af 12 4d 4f 56 20 74 2c  |LSR#16....MOV t,|
00000c80  74 2c 41 53 52 23 31 36  0d 00 b0 04 0d 00 b1 12  |t,ASR#16........|
00000c90  4c 44 52 20 70 2c 70 65  72 73 70 70 74 72 0d 00  |LDR p,perspptr..|
00000ca0  b2 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 00 b3 04 0d 00  |spective k......|
00000cd0  b4 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 00  |ly perspective..|
00000d00  b5 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  00 b6 04 0d 00 b7 0d 53  |ASR#fp%........S|
00000d20  55 42 20 74 2c 68 2c 74  0d 00 b8 0d 4d 55 4c 20  |UB t,h,t....MUL |
00000d30  74 2c 70 2c 74 0d 00 b9  13 4d 4f 56 20 74 2c 74  |t,p,t....MOV t,t|
00000d40  2c 41 53 52 23 66 70 25  0d 00 ba 04 0d 00 bb 3e  |,ASR#fp%.......>|
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 00 bc 17 4d 4f  |nt storage....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 00 bd 34 41 44 44  20 73 63 72 79 2c 62 2c  |4...4ADD 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 00 be  2d 4c 44 52 20 74 2c 5b  |4=256...-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 00 bf 0e 41 44  44 20 74 2c 74 2c 23 31  |in....ADD t,t,#1|
00000e10  0d 00 c0 10 53 54 52 20  74 2c 5b 73 63 72 79 5d  |....STR t,[scry]|
00000e20  0d 00 c1 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 00 c2 04 0d 00 c3  |,t,ASL#2].......|
00000e40  04 0d 00 c4 0d 2e 70 6f  69 6e 74 6f 75 74 0d 00  |......pointout..|
00000e50  c5 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 00  | to next point..|
00000e80  c6 04 0d 00 c7 0e 41 44  44 20 78 2c 78 2c 23 31  |......ADD x,x,#1|
00000e90  0d 00 c8 11 43 4d 50 20  78 2c 23 64 69 73 70 78  |....CMP x,#dispx|
00000ea0  25 0d 00 c9 0d 42 4c 45  20 78 6c 6f 6f 70 0d 00  |%....BLE xloop..|
00000eb0  ca 04 0d 00 cb 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 00 cc 0e 41 44 44 20  79 2c 79 2c 23 31 0d 00  |....ADD y,y,#1..|
00000ef0  cd 11 43 4d 50 20 79 2c  23 64 69 73 70 79 25 0d  |..CMP y,#dispy%.|
00000f00  00 ce 0d 42 4c 45 20 79  6c 6f 6f 70 0d 00 cf 04  |...BLE yloop....|
00000f10  0d 00 d0 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 00 d1  |w calculation...|
00000f40  12 4c 44 52 20 72 33 2c  5b 72 30 2c 23 34 5d 0d  |.LDR r3,[r0,#4].|
00000f50  00 d2 13 53 54 52 20 72  33 2c 73 68 61 64 70 6e  |...STR r3,shadpn|
00000f60  74 73 0d 00 d3 04 0d 00  d4 26 4c 44 52 20 72 31  |ts.......&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 00 d5 04  |;MOV r15,r14....|
00000f90  0d 00 d6 04 0d 00 d7 0d  2e 64 72 61 77 73 68 61  |.........drawsha|
00000fa0  64 0d 00 d8 13 53 54 52  20 72 31 34 2c 72 65 74  |d....STR r14,ret|
00000fb0  73 61 76 65 0d 00 d9 0d  4d 4f 56 20 72 30 2c 23  |save....MOV r0,#|
00000fc0  30 0d 00 da 13 4c 44 52  20 72 31 2c 73 68 61 64  |0....LDR r1,shad|
00000fd0  70 6e 74 73 0d 00 db 0d  4d 4f 56 20 72 32 2c 23  |pnts....MOV r2,#|
00000fe0  38 0d 00 dc 10 41 44 44  20 72 33 2c 72 31 2c 23  |8....ADD r3,r1,#|
00000ff0  34 0d 00 dd 0d 4d 4f 56  20 72 34 2c 23 30 0d 00  |4....MOV r4,#0..|
00001000  de 10 41 44 44 20 72 35  2c 72 31 2c 23 38 0d 00  |..ADD r5,r1,#8..|
00001010  df 0f 4d 56 4e 20 72 36  2c 23 ac 2d 38 0d 00 e0  |..MVN r6,#.-8...|
00001020  10 41 44 44 20 72 37 2c  72 31 2c 23 34 0d 00 e1  |.ADD r7,r1,#4...|
00001030  0d 4d 4f 56 20 72 38 2c  23 30 0d 00 e2 0b 42 4c  |.MOV r8,#0....BL|
00001040  20 71 75 61 64 0d 00 e3  13 4c 44 52 20 72 31 35  | quad....LDR r15|
00001050  2c 72 65 74 73 61 76 65  0d 00 e4 04 0d 00 e5 13  |,retsave........|
00001060  2e 73 68 61 64 70 6e 74  73 20 44 43 44 20 30 0d  |.shadpnts DCD 0.|
00001070  00 e6 05 5d 0d 00 e7 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 00 e8  11 63 74 3d 39 3a 6e 3d  |col=8....ct=9:n=|
000010b0  31 30 3a 70 3d 38 0d 00  e9 0e 62 70 3d 31 31 3a  |10:p=8....bp=11:|
000010c0  62 3d 31 32 0d 00 ea 04  0d 00 eb 07 6b 3d 30 0d  |b=12........k=0.|
000010d0  00 ec 0a 5b 4f 50 54 69  25 0d 00 ed 12 2e 72 65  |...[OPTi%.....re|
000010e0  74 73 61 76 65 20 44 43  44 20 30 0d 00 ee 0f 2e  |tsave DCD 0.....|
000010f0  64 72 61 77 70 6f 69 6e  74 73 0d 00 ef 13 53 54  |drawpoints....ST|
00001100  52 20 72 31 34 2c 72 65  74 73 61 76 65 0d 00 f0  |R r14,retsave...|
00001110  10 4c 44 52 20 62 2c 62  69 6e 70 74 72 0d 00 f1  |.LDR b,binptr...|
00001120  04 0d 00 f2 0d 4d 4f 56  20 63 74 2c 23 30 0d 00  |.....MOV ct,#0..|
00001130  f3 0c 2e 62 69 6e 6c 6f  6f 70 0d 00 f4 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  00 f5 0e 4c 44 52 20 6e  2c 5b 62 70 5d 0d 00 f6  |...LDR n,[bp]...|
00001160  04 0d 00 f7 0c 4d 4f 56  53 20 6e 2c 6e 0d 00 f8  |.....MOVS n,n...|
00001170  0e 42 45 51 20 6e 6f 6d  6f 72 65 0d 00 f9 0a 2e  |.BEQ nomore.....|
00001180  69 6e 62 69 6e 0d 00 fa  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 00  fb 13 4c 44 4d 49 41 20  | point....LDMIA |
000011c0  70 2c 7b 78 31 2c 79 31  7d 0d 00 fc 12 4c 44 52  |p,{x1,y1}....LDR|
000011d0  20 78 32 2c 5b 70 2c 23  31 32 5d 0d 00 fd 12 4c  | x2,[p,#12]....L|
000011e0  44 52 20 79 32 2c 5b 70  2c 23 31 36 5d 0d 00 fe  |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 00 ff 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 01  |#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 01 01 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 01 02 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 01 03 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 01 04 15 43 4d 50  |ntmod%+4]....CMP|
00001290  4e 45 20 78 34 2c 23 26  46 46 3c 3c 31 36 0d 01  |NE x4,#&FF<<16..|
000012a0  05 04 0d 01 06 12 4c 44  52 4e 45 20 70 2c 5b 70  |......LDRNE p,[p|
000012b0  2c 23 38 5d 0d 01 07 1a  52 53 42 4e 45 20 72 31  |,#8]....RSBNE r1|
000012c0  34 2c 63 74 2c 23 64 69  73 70 79 25 2d 31 0d 01  |4,ct,#dispy%-1..|
000012d0  08 11 41 44 44 4e 45 20  70 2c 70 2c 72 31 34 0d  |..ADDNE p,p,r14.|
000012e0  01 09 15 41 44 52 4e 45  20 72 31 34 2c 63 6f 6c  |...ADRNE r14,col|
000012f0  6f 75 72 73 0d 01 0a 14  4c 44 52 4e 45 42 20 70  |ours....LDRNEB p|
00001300  2c 5b 72 31 34 2c 70 5d  0d 01 0b 0d 42 4c 4e 45  |,[r14,p]....BLNE|
00001310  20 71 75 61 64 0d 01 0c  04 0d 01 0d 04 0d 01 0e  | quad...........|
00001320  0f 53 55 42 53 20 6e 2c  6e 2c 23 31 0d 01 0f 0d  |.SUBS n,n,#1....|
00001330  42 4e 45 20 69 6e 62 69  6e 0d 01 10 04 0d 01 11  |BNE inbin.......|
00001340  0b 2e 6e 6f 6d 6f 72 65  0d 01 12 10 41 44 44 20  |..nomore....ADD |
00001350  63 74 2c 63 74 2c 23 31  0d 01 13 12 43 4d 50 20  |ct,ct,#1....CMP |
00001360  63 74 2c 23 64 69 73 70  79 25 0d 01 14 0f 42 4e  |ct,#dispy%....BN|
00001370  45 20 62 69 6e 6c 6f 6f  70 0d 01 15 04 0d 01 16  |E binloop.......|
00001380  04 0d 01 17 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 01  | delete points..|
000013c0  18 12 4d 4f 56 20 6b 2c  23 26 46 46 3c 3c 31 36  |..MOV k,#&FF<<16|
000013d0  0d 01 19 04 0d 01 1a 14  4d 4f 56 20 63 74 2c 23  |........MOV ct,#|
000013e0  64 69 73 70 79 25 2d 31  0d 01 1b 0e 2e 65 6d 70  |dispy%-1.....emp|
000013f0  74 79 6c 6f 6f 70 0d 01  1c 15 41 44 44 20 62 70  |tyloop....ADD bp|
00001400  2c 62 2c 63 74 2c 41 53  4c 23 38 0d 01 1d 0e 4c  |,b,ct,ASL#8....L|
00001410  44 52 20 6e 2c 5b 62 70  5d 0d 01 1e 04 0d 01 1f  |DR n,[bp].......|
00001420  0c 4d 4f 56 53 20 6e 2c  6e 0d 01 20 0f 42 45 51  |.MOVS n,n.. .BEQ|
00001430  20 6e 6f 6d 6f 72 65 32  0d 01 21 0b 2e 6f 75 74  | nomore2..!..out|
00001440  62 69 6e 0d 01 22 31 4c  44 52 20 70 2c 5b 62 70  |bin.."1LDR 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 01 23 0d  53 54 52 20 6b 2c 5b 70  |oint..#.STR k,[p|
00001480  5d 0d 01 24 04 0d 01 25  0f 53 55 42 53 20 6e 2c  |]..$...%.SUBS n,|
00001490  6e 2c 23 31 0d 01 26 0e  42 4e 45 20 6f 75 74 62  |n,#1..&.BNE outb|
000014a0  69 6e 0d 01 27 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 01 28 04 0d  | ;empty bin..(..|
000014d0  01 29 0c 2e 6e 6f 6d 6f  72 65 32 0d 01 2a 11 53  |.)..nomore2..*.S|
000014e0  55 42 53 20 63 74 2c 63  74 2c 23 31 0d 01 2b 11  |UBS ct,ct,#1..+.|
000014f0  42 50 4c 20 65 6d 70 74  79 6c 6f 6f 70 0d 01 2c  |BPL emptyloop..,|
00001500  04 0d 01 2d 13 4c 44 52  20 72 31 35 2c 72 65 74  |...-.LDR r15,ret|
00001510  73 61 76 65 0d 01 2e 04  0d 01 2f 0c 2e 63 6f 6c  |save....../..col|
00001520  6f 75 72 73 0d 01 30 33  a4 64 61 74 61 28 22 46  |ours..03.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  01 31 39 a4 64 61 74 61  |) ;grey..19.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 01 32 3a a4 64 61 74  61 28 22 33 46 33 45 33  |..2:.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 01 33 3b a4 64  |ink -> red..3;.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 01 34  3b a4 64 61 74 61 28 22  |> red..4;.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 01 35 05 5d 0d 01 36  04 0d 01 37 17 61 78 3d  |..5.]..6...7.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 01 38 17 63 78 3d 34  3a 63 79 3d 35 3a 64 78  |..8.cx=4:cy=5:dx|
00001670  3d 36 3a 64 79 3d 37 0d  01 39 0d 63 6f 6c 3d 38  |=6:dy=7..9.col=8|
00001680  3a 74 3d 39 0d 01 3a 04  0d 01 3b 12 61 3d 31 30  |:t=9..:...;.a=10|
00001690  3a 62 3d 31 31 3a 63 3d  31 32 0d 01 3c 08 6e 3d  |:b=11:c=12..<.n=|
000016a0  31 30 0d 01 3d 0d 71 3d  31 31 3a 73 3d 31 32 0d  |10..=.q=11:s=12.|
000016b0  01 3e 04 0d 01 3f 1a 78  6c 3d 30 3a 78 72 3d 31  |.>...?.xl=0:xr=1|
000016c0  3a 6c 3d 32 3a 72 3d 33  3a 63 74 3d 34 0d 01 40  |: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 01 41 14  6f 3d 31 30 3a 6c 61 3d  |c4=8..A.o=10:la=|
000016f0  31 31 3a 72 61 3d 31 32  0d 01 42 04 0d 01 43 17  |11:ra=12..B...C.|
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 01 44 0a 5b  4f 50 54 69 25 0d 01 45  |=15..D.[OPTi%..E|
00001720  0e 2e 61 78 64 20 45 51  55 44 30 0d 01 46 0e 2e  |..axd EQUD0..F..|
00001730  62 78 64 20 45 51 55 44  30 0d 01 47 08 2e 63 78  |bxd EQUD0..G..cx|
00001740  64 0d 01 48 0e 2e 64 78  64 20 45 51 55 44 30 0d  |d..H..dxd EQUD0.|
00001750  01 49 0d 2e 61 62 20 45  51 55 44 30 0d 01 4a 0d  |.I..ab EQUD0..J.|
00001760  2e 62 63 20 45 51 55 44  30 0d 01 4b 07 2e 64 63  |.bc EQUD0..K..dc|
00001770  0d 01 4c 0d 2e 63 64 20  45 51 55 44 30 0d 01 4d  |..L..cd EQUD0..M|
00001780  07 2e 61 63 0d 01 4e 0d  2e 61 64 20 45 51 55 44  |..ac..N..ad EQUD|
00001790  30 0d 01 4f 0d 2e 61 61  20 45 51 55 44 30 0d 01  |0..O..aa EQUD0..|
000017a0  50 07 2e 64 64 0d 01 51  0d 2e 62 62 20 45 51 55  |P..dd..Q..bb EQU|
000017b0  44 30 0d 01 52 0d 2e 63  63 20 45 51 55 44 30 0d  |D0..R..cc EQUD0.|
000017c0  01 53 10 2e 79 70 6f 73  71 20 45 51 55 44 30 0d  |.S..yposq EQUD0.|
000017d0  01 54 1a 2e 64 69 74 61  62 64 20 45 51 55 44 20  |.T..ditabd EQUD |
000017e0  64 69 76 74 61 62 6c 65  25 0d 01 55 04 0d 01 56  |divtable%..U...V|
000017f0  08 2e 74 72 69 0d 01 57  1b 53 54 4d 46 44 20 72  |..tri..W.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 01 58 04 0d 01 59 13  3b 80 20 63 6f 6c 2c 63  |..X...Y.;. col,c|
00001820  6f 6c 2c 23 26 66 66 0d  01 5a 19 41 44 44 20 63  |ol,#&ff..Z.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 01 5b 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 01 5c 04 0d 01  |col,LSL#16..\...|
00001860  5d 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 01 5e 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 01 5f 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 01 60 04 0d 01 61 1f  43 4d 50 20 61 79 2c 62  |..`...a.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 01 62 0e 4d  4f 56 47 54 20 74 2c 61  |ort..b.MOVGT t,a|
000018d0  78 0d 01 63 0f 4d 4f 56  47 54 20 61 78 2c 62 78  |x..c.MOVGT ax,bx|
000018e0  0d 01 64 0e 4d 4f 56 47  54 20 62 78 2c 74 0d 01  |..d.MOVGT bx,t..|
000018f0  65 0e 4d 4f 56 47 54 20  74 2c 61 79 0d 01 66 0f  |e.MOVGT t,ay..f.|
00001900  4d 4f 56 47 54 20 61 79  2c 62 79 0d 01 67 0e 4d  |MOVGT ay,by..g.M|
00001910  4f 56 47 54 20 62 79 2c  74 0d 01 68 0d 43 4d 50  |OVGT by,t..h.CMP|
00001920  20 62 79 2c 63 79 0d 01  69 0e 4d 4f 56 47 54 20  | by,cy..i.MOVGT |
00001930  74 2c 62 78 0d 01 6a 0f  4d 4f 56 47 54 20 62 78  |t,bx..j.MOVGT bx|
00001940  2c 63 78 0d 01 6b 0e 4d  4f 56 47 54 20 63 78 2c  |,cx..k.MOVGT cx,|
00001950  74 0d 01 6c 0e 4d 4f 56  47 54 20 74 2c 62 79 0d  |t..l.MOVGT t,by.|
00001960  01 6d 0f 4d 4f 56 47 54  20 62 79 2c 63 79 0d 01  |.m.MOVGT by,cy..|
00001970  6e 0e 4d 4f 56 47 54 20  63 79 2c 74 0d 01 6f 13  |n.MOVGT cy,t..o.|
00001980  43 4d 50 20 61 79 2c 62  79 20 20 20 20 20 20 0d  |CMP ay,by      .|
00001990  01 70 0e 4d 4f 56 47 54  20 74 2c 61 78 0d 01 71  |.p.MOVGT t,ax..q|
000019a0  0f 4d 4f 56 47 54 20 61  78 2c 62 78 0d 01 72 0e  |.MOVGT ax,bx..r.|
000019b0  4d 4f 56 47 54 20 62 78  2c 74 0d 01 73 0e 4d 4f  |MOVGT bx,t..s.MO|
000019c0  56 47 54 20 74 2c 61 79  0d 01 74 0f 4d 4f 56 47  |VGT t,ay..t.MOVG|
000019d0  54 20 61 79 2c 62 79 0d  01 75 0e 4d 4f 56 47 54  |T ay,by..u.MOVGT|
000019e0  20 62 79 2c 74 0d 01 76  04 0d 01 77 04 0d 01 78  | by,t..v...w...x|
000019f0  15 41 44 44 20 74 2c 61  79 2c 23 6f 72 69 67 69  |.ADD t,ay,#origi|
00001a00  6e 59 0d 01 79 0f 53 54  52 20 74 2c 79 70 6f 73  |nY..y.STR t,ypos|
00001a10  71 0d 01 7a 04 0d 01 7b  04 0d 01 7c 0e 53 54 52  |q..z...{...|.STR|
00001a20  20 61 78 2c 61 78 64 0d  01 7d 0e 53 54 52 20 62  | ax,axd..}.STR b|
00001a30  78 2c 62 78 64 0d 01 7e  0e 53 54 52 20 63 78 2c  |x,bxd..~.STR cx,|
00001a40  63 78 64 0d 01 7f 04 0d  01 80 10 4c 44 52 20 71  |cxd........LDR q|
00001a50  2c 64 69 74 61 62 64 0d  01 81 0f 53 55 42 20 74  |,ditabd....SUB t|
00001a60  2c 62 78 2c 61 78 0d 01  82 0f 53 55 42 20 6e 2c  |,bx,ax....SUB n,|
00001a70  62 79 2c 61 79 0d 01 83  0c 53 54 52 20 6e 2c 61  |by,ay....STR n,a|
00001a80  61 0d 01 84 15 4c 44 52  20 6e 2c 5b 71 2c 6e 2c  |a....LDR n,[q,n,|
00001a90  41 53 4c 23 32 5d 0d 01  85 0d 4d 55 4c 20 6e 2c  |ASL#2]....MUL n,|
00001aa0  74 2c 6e 0d 01 86 0c 53  54 52 20 6e 2c 61 62 0d  |t,n....STR n,ab.|
00001ab0  01 87 04 0d 01 88 0f 53  55 42 20 74 2c 63 78 2c  |.......SUB t,cx,|
00001ac0  62 78 0d 01 89 0f 53 55  42 20 6e 2c 63 79 2c 62  |bx....SUB n,cy,b|
00001ad0  79 0d 01 8a 0c 53 54 52  20 6e 2c 62 62 0d 01 8b  |y....STR n,bb...|
00001ae0  15 4c 44 52 20 6e 2c 5b  71 2c 6e 2c 41 53 4c 23  |.LDR n,[q,n,ASL#|
00001af0  32 5d 0d 01 8c 0d 4d 55  4c 20 6e 2c 74 2c 6e 0d  |2]....MUL n,t,n.|
00001b00  01 8d 0c 53 54 52 20 6e  2c 62 63 0d 01 8e 04 0d  |...STR n,bc.....|
00001b10  01 8f 0f 53 55 42 20 74  2c 63 78 2c 61 78 0d 01  |...SUB t,cx,ax..|
00001b20  90 0f 53 55 42 20 6e 2c  63 79 2c 61 79 0d 01 91  |..SUB n,cy,ay...|
00001b30  15 4c 44 52 20 6e 2c 5b  71 2c 6e 2c 41 53 4c 23  |.LDR n,[q,n,ASL#|
00001b40  32 5d 0d 01 92 0d 4d 55  4c 20 6e 2c 74 2c 6e 0d  |2]....MUL n,t,n.|
00001b50  01 93 0c 53 54 52 20 6e  2c 61 63 0d 01 94 04 0d  |...STR n,ac.....|
00001b60  01 95 0d 4c 44 52 20 6f  2c 76 64 75 0d 01 96 15  |...LDR o,vdu....|
00001b70  41 44 44 20 74 2c 61 79  2c 23 6f 72 69 67 69 6e  |ADD t,ay,#origin|
00001b80  59 0d 01 97 13 41 44 44  20 74 2c 74 2c 74 2c 41  |Y....ADD t,t,t,A|
00001b90  53 4c 23 32 0d 01 98 13  41 44 44 20 6f 2c 6f 2c  |SL#2....ADD o,o,|
00001ba0  74 2c 41 53 4c 23 36 0d  01 99 04 0d 01 9a 0d 4d  |t,ASL#6........M|
00001bb0  4f 56 20 63 31 2c 63 34  0d 01 9b 0d 4d 4f 56 20  |OV c1,c4....MOV |
00001bc0  63 32 2c 63 34 0d 01 9c  0d 4d 4f 56 20 63 33 2c  |c2,c4....MOV c3,|
00001bd0  63 34 0d 01 9d 04 0d 01  9e 0d 4c 44 52 20 63 74  |c4........LDR ct|
00001be0  2c 61 61 0d 01 9f 0d 43  4d 50 20 63 74 2c 23 30  |,aa....CMP ct,#0|
00001bf0  0d 01 a0 0d 4c 44 52 20  74 2c 61 78 64 0d 01 a1  |....LDR t,axd...|
00001c00  13 4d 4f 56 20 6c 2c 74  2c 41 53 4c 23 66 70 25  |.MOV l,t,ASL#fp%|
00001c10  0d 01 a2 13 4d 4f 56 20  72 2c 74 2c 41 53 4c 23  |....MOV r,t,ASL#|
00001c20  66 70 25 0d 01 a3 0d 4c  44 52 20 6c 61 2c 61 63  |fp%....LDR la,ac|
00001c30  0d 01 a4 17 41 44 44 20  6c 2c 6c 2c 23 31 3c 3c  |....ADD l,l,#1<<|
00001c40  28 66 70 25 2d 31 29 0d  01 a5 0d 4c 44 52 20 72  |(fp%-1)....LDR r|
00001c50  61 2c 61 62 0d 01 a6 17  41 44 44 20 72 2c 72 2c  |a,ab....ADD r,r,|
00001c60  23 31 3c 3c 28 66 70 25  2d 31 29 0d 01 a7 0e 42  |#1<<(fp%-1)....B|
00001c70  4c 4e 45 20 70 69 65 63  65 0d 01 a8 04 0d 01 a9  |LNE piece.......|
00001c80  0d 4c 44 52 20 63 74 2c  62 62 0d 01 aa 0d 43 4d  |.LDR ct,bb....CM|
00001c90  50 20 63 74 2c 23 30 0d  01 ab 0d 4c 44 52 20 74  |P ct,#0....LDR t|
00001ca0  2c 62 78 64 0d 01 ac 13  4d 4f 56 20 72 2c 74 2c  |,bxd....MOV r,t,|
00001cb0  41 53 4c 23 66 70 25 0d  01 ad 0d 4c 44 52 20 72  |ASL#fp%....LDR r|
00001cc0  61 2c 62 63 0d 01 ae 17  41 44 44 20 72 2c 72 2c  |a,bc....ADD r,r,|
00001cd0  23 31 3c 3c 28 66 70 25  2d 31 29 0d 01 af 0e 42  |#1<<(fp%-1)....B|
00001ce0  4c 4e 45 20 70 69 65 63  65 0d 01 b0 1c 4c 44 4d  |LNE piece....LDM|
00001cf0  46 44 20 72 31 33 21 2c  7b 72 39 2d 72 31 32 2c  |FD r13!,{r9-r12,|
00001d00  72 31 35 7d 5e 0d 01 b1  04 0d 01 b2 39 2e 71 75  |r15}^.......9.qu|
00001d10  61 64 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ad              |
00001d20  20 20 20 20 20 20 3b 62  61 73 65 64 20 6f 6e 20  |      ;based on |
00001d30  61 20 72 6f 75 74 69 6e  65 20 62 79 20 4a 61 6e  |a routine by Jan|
00001d40  20 ef 0d 01 b3 1b 53 54  4d 46 44 20 72 31 33 21  | .....STMFD r13!|
00001d50  2c 7b 72 39 2d 72 31 32  2c 72 31 34 7d 0d 01 b4  |,{r9-r12,r14}...|
00001d60  04 0d 01 b5 13 3b 80 20  63 6f 6c 2c 63 6f 6c 2c  |.....;. col,col,|
00001d70  23 26 66 66 0d 01 b6 19  41 44 44 20 63 6f 6c 2c  |#&ff....ADD col,|
00001d80  63 6f 6c 2c 63 6f 6c 2c  4c 53 4c 23 38 0d 01 b7  |col,col,LSL#8...|
00001d90  1a 41 44 44 20 63 6f 6c  2c 63 6f 6c 2c 63 6f 6c  |.ADD col,col,col|
00001da0  2c 4c 53 4c 23 31 36 0d  01 b8 04 0d 01 b9 16 41  |,LSL#16........A|
00001db0  44 44 20 61 78 2c 61 78  2c 23 6f 72 69 67 69 6e  |DD ax,ax,#origin|
00001dc0  58 0d 01 ba 16 41 44 44  20 62 78 2c 62 78 2c 23  |X....ADD bx,bx,#|
00001dd0  6f 72 69 67 69 6e 58 0d  01 bb 16 41 44 44 20 63  |originX....ADD c|
00001de0  78 2c 63 78 2c 23 6f 72  69 67 69 6e 58 0d 01 bc  |x,cx,#originX...|
00001df0  16 41 44 44 20 64 78 2c  64 78 2c 23 6f 72 69 67  |.ADD dx,dx,#orig|
00001e00  69 6e 58 0d 01 bd 04 0d  01 be 24 4d 4f 56 20 74  |inX.......$MOV t|
00001e10  2c 61 79 20 20 3b 66 69  6e 64 20 73 6d 61 6c 6c  |,ay  ;find small|
00001e20  65 73 74 20 28 74 6f 70  29 20 79 0d 01 bf 0c 43  |est (top) y....C|
00001e30  4d 50 20 74 2c 62 79 0d  01 c0 0e 4d 4f 56 47 54  |MP t,by....MOVGT|
00001e40  20 74 2c 62 79 0d 01 c1  0c 43 4d 50 20 74 2c 63  | t,by....CMP t,c|
00001e50  79 0d 01 c2 0e 4d 4f 56  47 54 20 74 2c 63 79 0d  |y....MOVGT t,cy.|
00001e60  01 c3 0c 43 4d 50 20 74  2c 64 79 0d 01 c4 0e 4d  |...CMP t,dy....M|
00001e70  4f 56 47 54 20 74 2c 64  79 0d 01 c5 04 0d 01 c6  |OVGT t,dy.......|
00001e80  0a 2e 6f 72 64 65 72 0d  01 c7 0c 43 4d 50 20 74  |..order....CMP t|
00001e90  2c 61 79 0d 01 c8 0a 42  45 51 20 6f 6b 0d 01 c9  |,ay....BEQ ok...|
00001ea0  08 a4 72 6f 74 0d 01 ca  0b 42 20 6f 72 64 65 72  |..rot....B order|
00001eb0  0d 01 cb 07 2e 6f 6b 0d  01 cc 04 0d 01 cd 15 41  |.....ok........A|
00001ec0  44 44 20 74 2c 61 79 2c  23 6f 72 69 67 69 6e 59  |DD t,ay,#originY|
00001ed0  0d 01 ce 0f 53 54 52 20  74 2c 79 70 6f 73 71 0d  |....STR t,yposq.|
00001ee0  01 cf 04 0d 01 d0 0d 43  4d 50 20 62 79 2c 64 79  |.......CMP by,dy|
00001ef0  0d 01 d1 0e 4d 4f 56 47  54 20 74 2c 62 78 0d 01  |....MOVGT t,bx..|
00001f00  d2 0e 4d 4f 56 47 54 20  73 2c 62 79 0d 01 d3 0f  |..MOVGT s,by....|
00001f10  4d 4f 56 47 54 20 62 78  2c 64 78 0d 01 d4 0f 4d  |MOVGT bx,dx....M|
00001f20  4f 56 47 54 20 62 79 2c  64 79 0d 01 d5 0e 4d 4f  |OVGT by,dy....MO|
00001f30  56 47 54 20 64 78 2c 74  0d 01 d6 0e 4d 4f 56 47  |VGT dx,t....MOVG|
00001f40  54 20 64 79 2c 73 0d 01  d7 04 0d 01 d8 0d 43 4d  |T dy,s........CM|
00001f50  50 20 63 79 2c 64 79 0d  01 d9 0f 42 47 54 20 64  |P cy,dy....BGT d|
00001f60  69 61 6d 6f 6e 64 0d 01  da 04 0d 01 db 24 43 4d  |iamond.......$CM|
00001f70  50 20 63 79 2c 62 79 20  20 20 20 20 20 20 20 20  |P cy,by         |
00001f80  20 20 20 20 20 20 3b 44  55 42 49 4f 55 53 0d 01  |      ;DUBIOUS..|
00001f90  dc 25 4d 4f 56 4c 54 20  63 79 2c 62 79 20 20 20  |.%MOVLT cy,by   |
00001fa0  20 20 20 20 20 20 20 20  20 20 3b 53 4f 4c 55 54  |          ;SOLUT|
00001fb0  49 4f 4e 0d 01 dd 04 0d  01 de 0e 53 54 52 20 61  |ION........STR a|
00001fc0  78 2c 61 78 64 0d 01 df  0e 53 54 52 20 62 78 2c  |x,axd....STR bx,|
00001fd0  62 78 64 0d 01 e0 0e 53  54 52 20 63 78 2c 63 78  |bxd....STR cx,cx|
00001fe0  64 0d 01 e1 04 0d 01 e2  10 4c 44 52 20 71 2c 64  |d........LDR q,d|
00001ff0  69 74 61 62 64 0d 01 e3  0f 53 55 42 20 74 2c 62  |itabd....SUB t,b|
00002000  78 2c 61 78 0d 01 e4 0f  53 55 42 20 6e 2c 62 79  |x,ax....SUB n,by|
00002010  2c 61 79 0d 01 e5 0c 53  54 52 20 6e 2c 61 61 0d  |,ay....STR n,aa.|
00002020  01 e6 15 4c 44 52 20 6e  2c 5b 71 2c 6e 2c 41 53  |...LDR n,[q,n,AS|
00002030  4c 23 32 5d 0d 01 e7 0d  4d 55 4c 20 6e 2c 74 2c  |L#2]....MUL n,t,|
00002040  6e 0d 01 e8 0c 53 54 52  20 6e 2c 61 62 0d 01 e9  |n....STR n,ab...|
00002050  0f 53 55 42 20 74 2c 64  78 2c 61 78 0d 01 ea 0f  |.SUB t,dx,ax....|
00002060  53 55 42 20 6e 2c 64 79  2c 61 79 0d 01 eb 15 4c  |SUB n,dy,ay....L|
00002070  44 52 20 6e 2c 5b 71 2c  6e 2c 41 53 4c 23 32 5d  |DR n,[q,n,ASL#2]|
00002080  0d 01 ec 0d 4d 55 4c 20  6e 2c 74 2c 6e 0d 01 ed  |....MUL n,t,n...|
00002090  0c 53 54 52 20 6e 2c 61  64 0d 01 ee 0f 53 55 42  |.STR n,ad....SUB|
000020a0  20 74 2c 63 78 2c 62 78  0d 01 ef 0f 53 55 42 20  | t,cx,bx....SUB |
000020b0  6e 2c 63 79 2c 62 79 0d  01 f0 0c 53 54 52 20 6e  |n,cy,by....STR n|
000020c0  2c 62 62 0d 01 f1 15 4c  44 52 20 6e 2c 5b 71 2c  |,bb....LDR n,[q,|
000020d0  6e 2c 41 53 4c 23 32 5d  0d 01 f2 0d 4d 55 4c 20  |n,ASL#2]....MUL |
000020e0  6e 2c 74 2c 6e 0d 01 f3  0c 53 54 52 20 6e 2c 62  |n,t,n....STR n,b|
000020f0  63 0d 01 f4 0f 53 55 42  20 74 2c 64 78 2c 63 78  |c....SUB t,dx,cx|
00002100  0d 01 f5 0f 53 55 42 20  6e 2c 64 79 2c 63 79 0d  |....SUB n,dy,cy.|
00002110  01 f6 0c 53 54 52 20 6e  2c 63 63 0d 01 f7 15 4c  |...STR n,cc....L|
00002120  44 52 20 6e 2c 5b 71 2c  6e 2c 41 53 4c 23 32 5d  |DR n,[q,n,ASL#2]|
00002130  0d 01 f8 0d 4d 55 4c 20  6e 2c 74 2c 6e 0d 01 f9  |....MUL n,t,n...|
00002140  0c 53 54 52 20 6e 2c 63  64 0d 01 fa 04 0d 01 fb  |.STR n,cd.......|
00002150  0d 4c 44 52 20 6f 2c 76  64 75 0d 01 fc 15 41 44  |.LDR o,vdu....AD|
00002160  44 20 74 2c 61 79 2c 23  6f 72 69 67 69 6e 59 0d  |D t,ay,#originY.|
00002170  01 fd 13 41 44 44 20 74  2c 74 2c 74 2c 41 53 4c  |...ADD t,t,t,ASL|
00002180  23 32 0d 01 fe 13 41 44  44 20 6f 2c 6f 2c 74 2c  |#2....ADD o,o,t,|
00002190  41 53 4c 23 36 0d 01 ff  04 0d 02 00 0d 4d 4f 56  |ASL#6........MOV|
000021a0  20 63 31 2c 63 34 0d 02  01 0d 4d 4f 56 20 63 32  | c1,c4....MOV c2|
000021b0  2c 63 34 0d 02 02 0d 4d  4f 56 20 63 33 2c 63 34  |,c4....MOV c3,c4|
000021c0  0d 02 03 04 0d 02 04 0d  4c 44 52 20 63 74 2c 61  |........LDR ct,a|
000021d0  61 0d 02 05 0d 43 4d 50  20 63 74 2c 23 30 0d 02  |a....CMP ct,#0..|
000021e0  06 0d 4c 44 52 20 74 2c  61 78 64 0d 02 07 13 4d  |..LDR t,axd....M|
000021f0  4f 56 20 6c 2c 74 2c 41  53 4c 23 66 70 25 0d 02  |OV l,t,ASL#fp%..|
00002200  08 13 4d 4f 56 20 72 2c  74 2c 41 53 4c 23 66 70  |..MOV r,t,ASL#fp|
00002210  25 0d 02 09 0d 4c 44 52  20 6c 61 2c 61 64 0d 02  |%....LDR la,ad..|
00002220  0a 17 41 44 44 20 6c 2c  6c 2c 23 31 3c 3c 28 66  |..ADD l,l,#1<<(f|
00002230  70 25 2d 31 29 0d 02 0b  0d 4c 44 52 20 72 61 2c  |p%-1)....LDR ra,|
00002240  61 62 0d 02 0c 17 41 44  44 20 72 2c 72 2c 23 31  |ab....ADD r,r,#1|
00002250  3c 3c 28 66 70 25 2d 31  29 0d 02 0d 0e 42 4c 4e  |<<(fp%-1)....BLN|
00002260  45 20 70 69 65 63 65 0d  02 0e 04 0d 02 0f 0d 4c  |E piece........L|
00002270  44 52 20 63 74 2c 62 62  0d 02 10 0d 43 4d 50 20  |DR ct,bb....CMP |
00002280  63 74 2c 23 30 0d 02 11  0d 4c 44 52 20 74 2c 62  |ct,#0....LDR t,b|
00002290  78 64 0d 02 12 13 4d 4f  56 20 72 2c 74 2c 41 53  |xd....MOV r,t,AS|
000022a0  4c 23 66 70 25 0d 02 13  0d 4c 44 52 20 72 61 2c  |L#fp%....LDR ra,|
000022b0  62 63 0d 02 14 17 41 44  44 20 72 2c 72 2c 23 31  |bc....ADD r,r,#1|
000022c0  3c 3c 28 66 70 25 2d 31  29 0d 02 15 0e 42 4c 4e  |<<(fp%-1)....BLN|
000022d0  45 20 70 69 65 63 65 0d  02 16 04 0d 02 17 0d 4c  |E piece........L|
000022e0  44 52 20 63 74 2c 63 63  0d 02 18 0d 43 4d 50 20  |DR ct,cc....CMP |
000022f0  63 74 2c 23 30 0d 02 19  0d 4c 44 52 20 74 2c 63  |ct,#0....LDR t,c|
00002300  78 64 0d 02 1a 13 4d 4f  56 20 72 2c 74 2c 41 53  |xd....MOV r,t,AS|
00002310  4c 23 66 70 25 0d 02 1b  0d 4c 44 52 20 72 61 2c  |L#fp%....LDR ra,|
00002320  63 64 0d 02 1c 17 41 44  44 20 72 2c 72 2c 23 31  |cd....ADD r,r,#1|
00002330  3c 3c 28 66 70 25 2d 31  29 0d 02 1d 0e 42 4c 4e  |<<(fp%-1)....BLN|
00002340  45 20 70 69 65 63 65 0d  02 1e 1c 4c 44 4d 46 44  |E piece....LDMFD|
00002350  20 72 31 33 21 2c 7b 72  39 2d 72 31 32 2c 72 31  | r13!,{r9-r12,r1|
00002360  35 7d 5e 0d 02 1f 04 0d  02 20 04 0d 02 21 0c 2e  |5}^...... ...!..|
00002370  64 69 61 6d 6f 6e 64 0d  02 22 0e 53 54 52 20 61  |diamond..".STR a|
00002380  78 2c 61 78 64 0d 02 23  0e 53 54 52 20 62 78 2c  |x,axd..#.STR bx,|
00002390  62 78 64 0d 02 24 0e 53  54 52 20 64 78 2c 64 78  |bxd..$.STR dx,dx|
000023a0  64 0d 02 25 04 0d 02 26  10 4c 44 52 20 71 2c 64  |d..%...&.LDR q,d|
000023b0  69 74 61 62 64 0d 02 27  0f 53 55 42 20 74 2c 62  |itabd..'.SUB t,b|
000023c0  78 2c 61 78 0d 02 28 0f  53 55 42 20 6e 2c 62 79  |x,ax..(.SUB n,by|
000023d0  2c 61 79 0d 02 29 0c 53  54 52 20 6e 2c 61 61 0d  |,ay..).STR n,aa.|
000023e0  02 2a 15 4c 44 52 20 6e  2c 5b 71 2c 6e 2c 41 53  |.*.LDR n,[q,n,AS|
000023f0  4c 23 32 5d 0d 02 2b 0d  4d 55 4c 20 6e 2c 74 2c  |L#2]..+.MUL n,t,|
00002400  6e 0d 02 2c 0c 53 54 52  20 6e 2c 61 62 0d 02 2d  |n..,.STR n,ab..-|
00002410  04 0d 02 2e 0f 53 55 42  20 74 2c 64 78 2c 61 78  |.....SUB t,dx,ax|
00002420  0d 02 2f 0f 53 55 42 20  6e 2c 64 79 2c 61 79 0d  |../.SUB n,dy,ay.|
00002430  02 30 15 4c 44 52 20 6e  2c 5b 71 2c 6e 2c 41 53  |.0.LDR n,[q,n,AS|
00002440  4c 23 32 5d 0d 02 31 0d  4d 55 4c 20 6e 2c 74 2c  |L#2]..1.MUL n,t,|
00002450  6e 0d 02 32 0c 53 54 52  20 6e 2c 61 64 0d 02 33  |n..2.STR n,ad..3|
00002460  04 0d 02 34 0f 53 55 42  20 74 2c 63 78 2c 62 78  |...4.SUB t,cx,bx|
00002470  0d 02 35 0f 53 55 42 20  6e 2c 63 79 2c 62 79 0d  |..5.SUB n,cy,by.|
00002480  02 36 15 4c 44 52 20 6e  2c 5b 71 2c 6e 2c 41 53  |.6.LDR n,[q,n,AS|
00002490  4c 23 32 5d 0d 02 37 0d  4d 55 4c 20 6e 2c 74 2c  |L#2]..7.MUL n,t,|
000024a0  6e 0d 02 38 0c 53 54 52  20 6e 2c 62 63 0d 02 39  |n..8.STR n,bc..9|
000024b0  04 0d 02 3a 0f 53 55 42  20 74 2c 63 78 2c 64 78  |...:.SUB t,cx,dx|
000024c0  0d 02 3b 0f 53 55 42 20  6e 2c 63 79 2c 64 79 0d  |..;.SUB n,cy,dy.|
000024d0  02 3c 0c 53 54 52 20 6e  2c 63 63 0d 02 3d 15 4c  |.<.STR n,cc..=.L|
000024e0  44 52 20 6e 2c 5b 71 2c  6e 2c 41 53 4c 23 32 5d  |DR n,[q,n,ASL#2]|
000024f0  0d 02 3e 0d 4d 55 4c 20  6e 2c 74 2c 6e 0d 02 3f  |..>.MUL n,t,n..?|
00002500  0c 53 54 52 20 6e 2c 64  63 0d 02 40 04 0d 02 41  |.STR n,dc..@...A|
00002510  0f 53 55 42 20 6e 2c 64  79 2c 62 79 0d 02 42 0c  |.SUB n,dy,by..B.|
00002520  53 54 52 20 6e 2c 64 64  0d 02 43 04 0d 02 44 0d  |STR n,dd..C...D.|
00002530  4c 44 52 20 6f 2c 76 64  75 0d 02 45 15 41 44 44  |LDR o,vdu..E.ADD|
00002540  20 74 2c 61 79 2c 23 6f  72 69 67 69 6e 59 0d 02  | t,ay,#originY..|
00002550  46 13 41 44 44 20 74 2c  74 2c 74 2c 41 53 4c 23  |F.ADD t,t,t,ASL#|
00002560  32 0d 02 47 13 41 44 44  20 6f 2c 6f 2c 74 2c 41  |2..G.ADD o,o,t,A|
00002570  53 4c 23 36 0d 02 48 04  0d 02 49 0d 4d 4f 56 20  |SL#6..H...I.MOV |
00002580  63 31 2c 63 34 0d 02 4a  0d 4d 4f 56 20 63 32 2c  |c1,c4..J.MOV c2,|
00002590  63 34 0d 02 4b 0d 4d 4f  56 20 63 33 2c 63 34 0d  |c4..K.MOV c3,c4.|
000025a0  02 4c 04 0d 02 4d 0d 4c  44 52 20 63 74 2c 61 61  |.L...M.LDR ct,aa|
000025b0  0d 02 4e 0d 43 4d 50 20  63 74 2c 23 30 0d 02 4f  |..N.CMP ct,#0..O|
000025c0  0d 4c 44 52 20 74 2c 61  78 64 0d 02 50 13 4d 4f  |.LDR t,axd..P.MO|
000025d0  56 20 6c 2c 74 2c 41 53  4c 23 66 70 25 0d 02 51  |V l,t,ASL#fp%..Q|
000025e0  13 4d 4f 56 20 72 2c 74  2c 41 53 4c 23 66 70 25  |.MOV r,t,ASL#fp%|
000025f0  0d 02 52 0d 4c 44 52 20  6c 61 2c 61 64 0d 02 53  |..R.LDR la,ad..S|
00002600  17 41 44 44 20 6c 2c 6c  2c 23 31 3c 3c 28 66 70  |.ADD l,l,#1<<(fp|
00002610  25 2d 31 29 0d 02 54 0d  4c 44 52 20 72 61 2c 61  |%-1)..T.LDR ra,a|
00002620  62 0d 02 55 17 41 44 44  20 72 2c 72 2c 23 31 3c  |b..U.ADD r,r,#1<|
00002630  3c 28 66 70 25 2d 31 29  0d 02 56 0e 42 4c 4e 45  |<(fp%-1)..V.BLNE|
00002640  20 70 69 65 63 65 0d 02  57 04 0d 02 58 0d 4c 44  | piece..W...X.LD|
00002650  52 20 63 74 2c 64 64 0d  02 59 0d 43 4d 50 20 63  |R ct,dd..Y.CMP c|
00002660  74 2c 23 30 0d 02 5a 0d  4c 44 52 20 74 2c 62 78  |t,#0..Z.LDR t,bx|
00002670  64 0d 02 5b 13 4d 4f 56  20 72 2c 74 2c 41 53 4c  |d..[.MOV r,t,ASL|
00002680  23 66 70 25 0d 02 5c 0d  4c 44 52 20 72 61 2c 62  |#fp%..\.LDR ra,b|
00002690  63 0d 02 5d 17 41 44 44  20 72 2c 72 2c 23 31 3c  |c..].ADD r,r,#1<|
000026a0  3c 28 66 70 25 2d 31 29  0d 02 5e 0e 42 4c 4e 45  |<(fp%-1)..^.BLNE|
000026b0  20 70 69 65 63 65 0d 02  5f 04 0d 02 60 0d 4c 44  | piece.._...`.LD|
000026c0  52 20 63 74 2c 63 63 0d  02 61 0d 43 4d 50 20 63  |R ct,cc..a.CMP c|
000026d0  74 2c 23 30 0d 02 62 0d  4c 44 52 20 74 2c 64 78  |t,#0..b.LDR t,dx|
000026e0  64 0d 02 63 13 4d 4f 56  20 6c 2c 74 2c 41 53 4c  |d..c.MOV l,t,ASL|
000026f0  23 66 70 25 0d 02 64 0d  4c 44 52 20 6c 61 2c 64  |#fp%..d.LDR la,d|
00002700  63 0d 02 65 17 41 44 44  20 6c 2c 6c 2c 23 31 3c  |c..e.ADD l,l,#1<|
00002710  3c 28 66 70 25 2d 31 29  0d 02 66 0e 42 4c 4e 45  |<(fp%-1)..f.BLNE|
00002720  20 70 69 65 63 65 0d 02  67 1c 4c 44 4d 46 44 20  | piece..g.LDMFD |
00002730  72 31 33 21 2c 7b 72 39  2d 72 31 32 2c 72 31 35  |r13!,{r9-r12,r15|
00002740  7d 5e 0d 02 68 04 0d 02  69 05 20 0d 02 6a 1c 2e  |}^..h...i. ..j..|
00002750  70 69 65 63 65 20 3b 53  54 4d 46 44 20 72 31 33  |piece ;STMFD r13|
00002760  21 2c 7b 72 31 34 7d 0d  02 6b 07 2e 6c 6f 0d 02  |!,{r14}..k..lo..|
00002770  6c 0f 4c 44 52 20 74 2c  79 70 6f 73 71 0d 02 6d  |l.LDR t,yposq..m|
00002780  0e 41 44 44 20 74 2c 74  2c 23 31 0d 02 6e 0f 53  |.ADD t,t,#1..n.S|
00002790  54 52 20 74 2c 79 70 6f  73 71 0d 02 6f 11 43 4d  |TR t,yposq..o.CM|
000027a0  50 20 74 2c 23 66 72 61  6d 65 54 0d 02 70 0f 42  |P t,#frameT..p.B|
000027b0  4c 45 20 65 6e 64 73 70  61 6e 0d 02 71 11 43 4d  |LE endspan..q.CM|
000027c0  50 20 74 2c 23 66 72 61  6d 65 42 0d 02 72 2f 4d  |P t,#frameB..r/M|
000027d0  4f 56 47 54 20 72 31 35  2c 72 31 34 20 20 20 20  |OVGT r15,r14    |
000027e0  20 20 20 20 20 20 20 3b  4c 44 4d 46 44 47 54 20  |       ;LDMFDGT |
000027f0  72 31 33 21 2c 7b 72 31  35 7d 0d 02 73 04 0d 02  |r13!,{r15}..s...|
00002800  74 0b 43 4d 50 20 6c 2c  72 0d 02 75 16 4d 4f 56  |t.CMP l,r..u.MOV|
00002810  4c 54 20 78 6c 2c 6c 2c  41 53 52 23 66 70 25 0d  |LT xl,l,ASR#fp%.|
00002820  02 76 16 4d 4f 56 4c 54  20 78 72 2c 72 2c 41 53  |.v.MOVLT xr,r,AS|
00002830  52 23 66 70 25 0d 02 77  16 4d 4f 56 47 45 20 78  |R#fp%..w.MOVGE x|
00002840  6c 2c 72 2c 41 53 52 23  66 70 25 0d 02 78 16 4d  |l,r,ASR#fp%..x.M|
00002850  4f 56 47 45 20 78 72 2c  6c 2c 41 53 52 23 66 70  |OVGE xr,l,ASR#fp|
00002860  25 0d 02 79 04 0d 02 7a  12 43 4d 50 20 78 6c 2c  |%..y...z.CMP xl,|
00002870  23 66 72 61 6d 65 52 0d  02 7b 0f 42 47 54 20 65  |#frameR..{.BGT e|
00002880  6e 64 73 70 61 6e 0d 02  7c 12 43 4d 50 20 78 72  |ndspan..|.CMP xr|
00002890  2c 23 66 72 61 6d 65 4c  0d 02 7d 0f 42 4c 54 20  |,#frameL..}.BLT |
000028a0  65 6e 64 73 70 61 6e 0d  02 7e 12 43 4d 50 20 78  |endspan..~.CMP x|
000028b0  6c 2c 23 66 72 61 6d 65  4c 0d 02 7f 14 4d 4f 56  |l,#frameL....MOV|
000028c0  4c 54 20 78 6c 2c 23 66  72 61 6d 65 4c 0d 02 80  |LT xl,#frameL...|
000028d0  12 43 4d 50 20 78 72 2c  23 66 72 61 6d 65 52 0d  |.CMP xr,#frameR.|
000028e0  02 81 14 4d 4f 56 47 54  20 78 72 2c 23 66 72 61  |...MOVGT xr,#fra|
000028f0  6d 65 52 0d 02 82 04 0d  02 83 0f 41 44 44 20 78  |meR........ADD x|
00002900  6c 2c 6f 2c 78 6c 0d 02  84 0f 41 44 44 20 78 72  |l,o,xl....ADD xr|
00002910  2c 6f 2c 78 72 0d 02 85  04 0d 02 86 10 53 55 42  |,o,xr........SUB|
00002920  53 20 74 2c 78 72 2c 78  6c 0d 02 87 0f 42 45 51  |S t,xr,xl....BEQ|
00002930  20 65 6e 64 73 70 61 6e  0d 02 88 0c 43 4d 50 20  | endspan....CMP |
00002940  74 2c 23 32 0d 02 89 12  53 54 52 4c 53 42 20 63  |t,#2....STRLSB c|
00002950  31 2c 5b 78 6c 5d 0d 02  8a 16 53 54 52 4c 53 42  |1,[xl]....STRLSB|
00002960  20 63 31 2c 5b 78 72 2c  23 2d 31 5d 0d 02 8b 0f  | c1,[xr,#-1]....|
00002970  42 4c 53 20 65 6e 64 73  70 61 6e 0d 02 8c 0f 54  |BLS endspan....T|
00002980  53 54 20 78 6c 2c 23 25  30 31 0d 02 8d 15 53 54  |ST xl,#%01....ST|
00002990  52 4e 45 42 20 63 31 2c  5b 78 6c 5d 2c 23 31 0d  |RNEB c1,[xl],#1.|
000029a0  02 8e 0f 54 53 54 20 78  6c 2c 23 25 31 30 0d 02  |...TST xl,#%10..|
000029b0  8f 15 53 54 52 4e 45 42  20 63 32 2c 5b 78 6c 5d  |..STRNEB c2,[xl]|
000029c0  2c 23 31 0d 02 90 15 53  54 52 4e 45 42 20 63 31  |,#1....STRNEB c1|
000029d0  2c 5b 78 6c 5d 2c 23 31  0d 02 91 0f 54 53 54 20  |,[xl],#1....TST |
000029e0  78 72 2c 23 25 30 31 0d  02 92 17 53 54 52 4e 45  |xr,#%01....STRNE|
000029f0  42 20 63 32 2c 5b 78 72  2c 23 2d 31 5d 21 0d 02  |B c2,[xr,#-1]!..|
00002a00  93 0f 54 53 54 20 78 72  2c 23 25 31 30 0d 02 94  |..TST xr,#%10...|
00002a10  17 53 54 52 4e 45 42 20  63 31 2c 5b 78 72 2c 23  |.STRNEB c1,[xr,#|
00002a20  2d 31 5d 21 0d 02 95 17  53 54 52 4e 45 42 20 63  |-1]!....STRNEB c|
00002a30  32 2c 5b 78 72 2c 23 2d  31 5d 21 0d 02 96 10 53  |2,[xr,#-1]!....S|
00002a40  55 42 53 20 74 2c 78 72  2c 78 6c 0d 02 97 12 4d  |UBS t,xr,xl....M|
00002a50  4f 56 53 20 74 2c 74 2c  4c 53 52 23 33 0d 02 98  |OVS t,t,LSR#3...|
00002a60  14 53 54 52 43 53 20 63  31 2c 5b 78 6c 5d 2c 23  |.STRCS c1,[xl],#|
00002a70  34 0d 02 99 12 4d 4f 56  53 20 74 2c 74 2c 4c 53  |4....MOVS t,t,LS|
00002a80  52 23 31 0d 02 9a 19 53  54 4d 43 53 49 41 20 28  |R#1....STMCSIA (|
00002a90  78 6c 29 21 2c 7b 63 31  2c 63 32 7d 0d 02 9b 04  |xl)!,{c1,c2}....|
00002aa0  0d 02 9c 0f 41 44 52 20  78 72 2c 62 61 73 65 0d  |....ADR xr,base.|
00002ab0  02 9d 15 53 55 42 20 70  63 2c 78 72 2c 74 2c 4c  |...SUB pc,xr,t,L|
00002ac0  53 4c 23 32 0d 02 9e 09  a4 76 75 6c 63 0d 02 9f  |SL#2.....vulc...|
00002ad0  09 2e 62 61 73 65 0d 02  a0 04 0d 02 a1 0c 2e 65  |..base.........e|
00002ae0  6e 64 73 70 61 6e 0d 02  a2 0e 41 44 44 20 6c 2c  |ndspan....ADD l,|
00002af0  6c 2c 6c 61 0d 02 a3 0e  41 44 44 20 72 2c 72 2c  |l,la....ADD r,r,|
00002b00  72 61 0d 02 a4 10 41 44  44 20 6f 2c 6f 2c 23 33  |ra....ADD o,o,#3|
00002b10  32 30 0d 02 a5 11 53 55  42 53 20 63 74 2c 63 74  |20....SUBS ct,ct|
00002b20  2c 23 31 0d 02 a6 0a 42  4e 45 20 6c 6f 0d 02 a7  |,#1....BNE lo...|
00002b30  2f 4d 4f 56 20 72 31 35  2c 72 31 34 20 20 20 20  |/MOV r15,r14    |
00002b40  20 20 20 20 20 20 20 20  20 20 20 3b 4c 44 4d 46  |           ;LDMF|
00002b50  44 20 72 31 33 21 2c 7b  72 31 35 7d 0d 02 a8 05  |D r13!,{r15}....|
00002b60  5d 0d 02 a9 12 78 61 3d  30 3a 79 61 3d 31 3a 7a  |]....xa=0:ya=1:z|
00002b70  61 3d 32 0d 02 aa 0f 78  3d 30 3a 79 3d 31 3a 7a  |a=2....x=0:y=1:z|
00002b80  3d 32 0d 02 ab 15 73 78  61 3d 33 3a 73 79 61 3d  |=2....sxa=3:sya=|
00002b90  34 3a 73 7a 61 3d 35 0d  02 ac 15 63 78 61 3d 36  |4:sza=5....cxa=6|
00002ba0  3a 63 79 61 3d 37 3a 63  7a 61 3d 38 0d 02 ad 0c  |:cya=7:cza=8....|
00002bb0  6e 3d 39 3a 70 3d 31 30  0d 02 ae 08 69 3d 31 30  |n=9:p=10....i=10|
00002bc0  0d 02 af 11 70 6e 74 73  3d 31 31 3a 66 73 3d 31  |....pnts=11:fs=1|
00002bd0  31 0d 02 b0 0f 74 31 3d  31 32 3a 74 32 3d 31 34  |1....t1=12:t2=14|
00002be0  0d 02 b1 04 0d 02 b2 31  78 31 3d 30 3a 79 31 3d  |.......1x1=0:y1=|
00002bf0  31 3a 78 32 3d 32 3a 79  32 3d 33 3a 78 33 3d 34  |1:x2=2:y2=3:x3=4|
00002c00  3a 79 33 3d 35 3a 78 34  3d 36 3a 79 34 3d 37 3a  |:y3=5:x4=6:y4=7:|
00002c10  63 6f 6c 3d 38 0d 02 b3  09 76 73 3d 31 32 0d 02  |col=8....vs=12..|
00002c20  b4 04 0d 02 b5 0a 5b 4f  50 54 69 25 0d 02 b6 11  |......[OPTi%....|
00002c30  2e 68 65 6c 69 70 20 44  43 44 20 32 34 0d 02 b7  |.helip DCD 24...|
00002c40  25 44 43 44 20 2d 35 20  3a 44 43 44 20 32 20 20  |%DCD -5 :DCD 2  |
00002c50  3a 44 43 44 20 2d 31 34  20 20 20 20 20 20 20 20  |:DCD -14        |
00002c60  3b 30 0d 02 b8 1a 44 43  44 20 2d 37 20 3a 44 43  |;0....DCD -7 :DC|
00002c70  44 20 2d 37 20 3a 44 43  44 20 2d 34 0d 02 b9 1a  |D -7 :DCD -4....|
00002c80  44 43 44 20 2d 31 30 3a  44 43 44 20 34 20 20 3a  |DCD -10:DCD 4  :|
00002c90  44 43 44 20 2d 31 0d 02  ba 18 44 43 44 20 2d 39  |DCD -1....DCD -9|
00002ca0  3a 44 43 44 20 34 20 20  3a 44 43 44 20 34 0d 02  |:DCD 4  :DCD 4..|
00002cb0  bb 19 44 43 44 20 2d 35  20 3a 44 43 44 20 2d 36  |..DCD -5 :DCD -6|
00002cc0  20 3a 44 43 44 20 36 0d  02 bc 25 44 43 44 20 2d  | :DCD 6...%DCD -|
00002cd0  36 20 3a 44 43 44 20 30  20 20 3a 44 43 44 20 31  |6 :DCD 0  :DCD 1|
00002ce0  30 20 20 20 20 20 20 20  20 20 3b 35 0d 02 bd 1a  |0         ;5....|
00002cf0  44 43 44 20 36 20 20 3a  44 43 44 20 30 20 20 3a  |DCD 6  :DCD 0  :|
00002d00  44 43 44 20 31 30 0d 02  be 19 44 43 44 20 35 20  |DCD 10....DCD 5 |
00002d10  20 3a 44 43 44 20 2d 36  20 3a 44 43 44 20 36 0d  | :DCD -6 :DCD 6.|
00002d20  02 bf 18 44 43 44 20 39  20 3a 44 43 44 20 34 20  |...DCD 9 :DCD 4 |
00002d30  20 3a 44 43 44 20 34 0d  02 c0 1a 44 43 44 20 31  | :DCD 4....DCD 1|
00002d40  30 20 3a 44 43 44 20 34  20 20 3a 44 43 44 20 2d  |0 :DCD 4  :DCD -|
00002d50  31 0d 02 c1 1a 44 43 44  20 37 20 20 3a 44 43 44  |1....DCD 7  :DCD|
00002d60  20 2d 37 20 3a 44 43 44  20 2d 34 0d 02 c2 26 44  | -7 :DCD -4...&D|
00002d70  43 44 20 35 20 20 3a 44  43 44 20 32 20 20 3a 44  |CD 5  :DCD 2  :D|
00002d80  43 44 20 2d 31 34 20 20  20 20 20 20 20 20 3b 31  |CD -14        ;1|
00002d90  31 0d 02 c3 04 0d 02 c4  1b 44 43 44 20 2d 33 20  |1........DCD -3 |
00002da0  3a 44 43 44 20 35 20 20  3a 44 43 44 20 2d 31 32  |:DCD 5  :DCD -12|
00002db0  0d 02 c5 1a 44 43 44 20  2d 36 20 3a 44 43 44 20  |....DCD -6 :DCD |
00002dc0  36 20 20 3a 44 43 44 20  2d 32 0d 02 c6 25 44 43  |6  :DCD -2...%DC|
00002dd0  44 20 2d 35 20 3a 44 43  44 20 36 20 20 3a 44 43  |D -5 :DCD 6  :DC|
00002de0  44 20 37 20 20 20 20 20  20 20 20 20 3b 31 34 0d  |D 7         ;14.|
00002df0  02 c7 19 44 43 44 20 35  20 20 3a 44 43 44 20 36  |...DCD 5  :DCD 6|
00002e00  20 20 3a 44 43 44 20 37  0d 02 c8 1a 44 43 44 20  |  :DCD 7....DCD |
00002e10  36 20 20 3a 44 43 44 20  36 20 20 3a 44 43 44 20  |6  :DCD 6  :DCD |
00002e20  2d 32 0d 02 c9 1b 44 43  44 20 33 20 20 3a 44 43  |-2....DCD 3  :DC|
00002e30  44 20 35 20 20 3a 44 43  44 20 2d 31 32 0d 02 ca  |D 5  :DCD -12...|
00002e40  04 0d 02 cb 25 44 43 44  20 30 20 20 3a 44 43 44  |....%DCD 0  :DCD|
00002e50  20 34 20 20 3a 44 43 44  20 38 20 20 20 20 20 20  | 4  :DCD 8      |
00002e60  20 20 20 3b 31 38 0d 02  cc 1a 44 43 44 20 2d 32  |   ;18....DCD -2|
00002e70  20 3a 44 43 44 20 30 20  20 3a 44 43 44 20 31 30  | :DCD 0  :DCD 10|
00002e80  0d 02 cd 1a 44 43 44 20  2d 31 20 3a 44 43 44 20  |....DCD -1 :DCD |
00002e90  30 20 20 3a 44 43 44 20  34 34 0d 02 ce 1a 44 43  |0  :DCD 44....DC|
00002ea0  44 20 30 20 20 3a 44 43  44 20 32 20 20 3a 44 43  |D 0  :DCD 2  :DC|
00002eb0  44 20 34 30 0d 02 cf 1a  44 43 44 20 32 20 20 3a  |D 40....DCD 2  :|
00002ec0  44 43 44 20 30 20 20 3a  44 43 44 20 31 30 0d 02  |DCD 0  :DCD 10..|
00002ed0  d0 1a 44 43 44 20 31 20  20 3a 44 43 44 20 30 20  |..DCD 1  :DCD 0 |
00002ee0  20 3a 44 43 44 20 34 34  0d 02 d1 04 0d 02 d2 04  | :DCD 44........|
00002ef0  0d 02 d3 11 2e 68 65 6c  69 66 20 44 43 44 20 32  |.....helif DCD 2|
00002f00  32 0d 02 d4 19 44 43 44  20 26 30 37 3a 44 43 44  |2....DCD &07:DCD|
00002f10  20 26 30 30 30 31 30 41  30 42 0d 02 d5 19 44 43  | &00010A0B....DC|
00002f20  44 20 26 31 33 3a 44 43  44 20 26 30 31 30 34 30  |D &13:DCD &01040|
00002f30  37 30 41 0d 02 d6 19 44  43 44 20 26 31 33 3a 44  |70A....DCD &13:D|
00002f40  43 44 20 26 30 34 30 35  30 36 30 37 0d 02 d7 19  |CD &04050607....|
00002f50  44 43 44 20 26 31 31 3a  44 43 44 20 26 46 46 30  |DCD &11:DCD &FF0|
00002f60  30 30 32 30 31 0d 02 d8  19 44 43 44 20 26 31 31  |00201....DCD &11|
00002f70  3a 44 43 44 20 26 46 46  30 42 30 41 30 39 0d 02  |:DCD &FF0B0A09..|
00002f80  d9 19 44 43 44 20 26 31  30 3a 44 43 44 20 26 30  |..DCD &10:DCD &0|
00002f90  32 30 33 30 34 30 31 0d  02 da 19 44 43 44 20 26  |2030401....DCD &|
00002fa0  31 30 3a 44 43 44 20 26  30 41 30 37 30 38 30 39  |10:DCD &0A070809|
00002fb0  0d 02 db 19 44 43 44 20  26 31 32 3a 44 43 44 20  |....DCD &12:DCD |
00002fc0  26 46 46 30 33 30 35 30  34 0d 02 dc 19 44 43 44  |&FF030504....DCD|
00002fd0  20 26 31 32 3a 44 43 44  20 26 46 46 30 37 30 36  | &12:DCD &FF0706|
00002fe0  30 38 0d 02 dd 04 0d 02  de 19 44 43 44 20 26 33  |08........DCD &3|
00002ff0  46 3a 44 43 44 20 26 30  30 30 42 31 31 30 43 0d  |F:DCD &000B110C.|
00003000  02 df 19 44 43 44 20 26  33 43 3a 44 43 44 20 26  |...DCD &3C:DCD &|
00003010  30 43 31 31 31 30 30 44  0d 02 e0 19 44 43 44 20  |0C11100D....DCD |
00003020  26 31 33 3a 44 43 44 20  26 30 44 31 30 30 46 30  |&13:DCD &0D100F0|
00003030  45 0d 02 e1 19 44 43 44  20 26 31 32 3a 44 43 44  |E....DCD &12:DCD|
00003040  20 26 30 45 30 46 30 36  30 35 0d 02 e2 04 0d 02  | &0E0F0605......|
00003050  e3 19 44 43 44 20 26 30  37 3a 44 43 44 20 26 30  |..DCD &07:DCD &0|
00003060  30 30 43 30 44 30 32 0d  02 e4 19 44 43 44 20 26  |00C0D02....DCD &|
00003070  30 37 3a 44 43 44 20 26  30 42 30 39 31 30 31 31  |07:DCD &0B091011|
00003080  0d 02 e5 19 44 43 44 20  26 31 31 3a 44 43 44 20  |....DCD &11:DCD |
00003090  26 30 32 30 44 30 45 30  33 0d 02 e6 19 44 43 44  |&020D0E03....DCD|
000030a0  20 26 31 31 3a 44 43 44  20 26 31 30 30 39 30 38  | &11:DCD &100908|
000030b0  30 46 0d 02 e7 19 44 43  44 20 26 31 30 3a 44 43  |0F....DCD &10:DC|
000030c0  44 20 26 46 46 30 33 30  45 30 35 0d 02 e8 19 44  |D &FF030E05....D|
000030d0  43 44 20 26 31 30 3a 44  43 44 20 26 46 46 30 46  |CD &10:DCD &FF0F|
000030e0  30 38 30 36 0d 02 e9 04  0d 02 ea 23 44 43 44 20  |0806.......#DCD |
000030f0  26 31 32 3a 44 43 44 20  26 31 36 31 37 31 35 31  |&12:DCD &1617151|
00003100  32 20 20 20 20 20 3b 74  61 69 6c 0d 02 eb 19 44  |2     ;tail....D|
00003110  43 44 20 26 31 32 3a 44  43 44 20 26 31 33 31 32  |CD &12:DCD &1312|
00003120  31 35 31 34 0d 02 ec 19  44 43 44 20 26 31 33 3a  |1514....DCD &13:|
00003130  44 43 44 20 26 31 33 31  34 31 37 31 36 0d 02 ed  |DCD &13141716...|
00003140  04 0d 02 ee 04 0d 02 ef  04 0d 02 f0 04 0d 02 f1  |................|
00003150  0f 2e 68 72 6f 74 20 44  43 44 20 30 0d 02 f2 11  |..hrot DCD 0....|
00003160  2e 68 70 69 74 63 68 20  44 43 44 20 30 0d 02 f3  |.hpitch DCD 0...|
00003170  0f 2e 68 72 6f 6c 20 44  43 44 20 30 0d 02 f4 14  |..hrol DCD 0....|
00003180  2e 68 78 20 44 43 44 20  32 35 36 3c 3c 66 70 25  |.hx DCD 256<<fp%|
00003190  0d 02 f5 14 2e 68 79 20  44 43 44 20 33 30 30 3c  |.....hy DCD 300<|
000031a0  3c 66 70 25 0d 02 f6 12  2e 68 68 65 69 67 68 74  |<fp%.....hheight|
000031b0  20 44 43 44 20 30 0d 02  f7 0e 2e 68 64 78 20 44  | DCD 0.....hdx D|
000031c0  43 44 20 30 0d 02 f8 0e  2e 68 64 79 20 44 43 44  |CD 0.....hdy DCD|
000031d0  20 30 0d 02 f9 0e 2e 68  64 7a 20 44 43 44 20 30  | 0.....hdz DCD 0|
000031e0  0d 02 fa 13 2e 68 70 6f  77 65 72 20 44 43 44 20  |.....hpower DCD |
000031f0  2d 31 36 0d 02 fb 04 0d  02 fc 0c 2e 63 6f 6e 74  |-16.........cont|
00003200  72 6f 6c 0d 02 fd 14 53  54 4d 46 44 20 72 31 33  |rol....STMFD r13|
00003210  21 2c 7b 72 31 34 7d 0d  02 fe 0d 42 4c 20 75 70  |!,{r14}....BL up|
00003220  64 61 74 65 0d 02 ff 11  42 4c 20 63 61 6c 63 70  |date....BL calcp|
00003230  6f 69 6e 74 73 0d 03 00  11 42 4c 20 64 72 61 77  |oints....BL draw|
00003240  70 6f 69 6e 74 73 0d 03  01 0f 42 4c 20 64 72 61  |points....BL dra|
00003250  77 68 65 6c 69 0d 03 02  14 4c 44 4d 46 44 20 72  |wheli....LDMFD r|
00003260  31 33 21 2c 7b 72 31 35  7d 0d 03 03 04 0d 03 04  |13!,{r15}.......|
00003270  0b 2e 75 70 64 61 74 65  0d 03 05 14 53 54 4d 46  |..update....STMF|
00003280  44 20 72 31 33 21 2c 7b  72 31 34 7d 0d 03 06 12  |D r13!,{r14}....|
00003290  53 57 49 20 22 4f 53 5f  4d 6f 75 73 65 22 0d 03  |SWI "OS_Mouse"..|
000032a0  07 0d 43 4d 50 20 72 32  2c 23 31 0d 03 08 13 4c  |..CMP r2,#1....L|
000032b0  44 52 47 45 20 72 33 2c  68 70 6f 77 65 72 0d 03  |DRGE r3,hpower..|
000032c0  09 12 41 44 44 45 51 20  72 33 2c 72 33 2c 23 32  |..ADDEQ r3,r3,#2|
000032d0  0d 03 0a 13 53 54 52 45  51 20 72 33 2c 68 70 6f  |....STREQ r3,hpo|
000032e0  77 65 72 0d 03 0b 0d 43  4d 50 20 72 32 2c 23 34  |wer....CMP r2,#4|
000032f0  0d 03 0c 12 53 55 42 45  51 20 72 33 2c 72 33 2c  |....SUBEQ r3,r3,|
00003300  23 32 0d 03 0d 13 53 54  52 45 51 20 72 33 2c 68  |#2....STREQ r3,h|
00003310  70 6f 77 65 72 0d 03 0e  04 0d 03 0f 11 4c 44 52  |power........LDR|
00003320  20 72 39 2c 68 70 69 74  63 68 0d 03 10 16 41 44  | r9,hpitch....AD|
00003330  44 20 72 39 2c 72 39 2c  72 31 2c 41 53 52 23 31  |D r9,r9,r1,ASR#1|
00003340  0d 03 11 14 4d 4f 56 20  72 39 2c 72 39 2c 4c 53  |....MOV r9,r9,LS|
00003350  4c 23 32 33 0d 03 12 14  4d 4f 56 20 72 39 2c 72  |L#23....MOV r9,r|
00003360  39 2c 4c 53 52 23 32 33  0d 03 13 11 53 54 52 20  |9,LSR#23....STR |
00003370  72 39 2c 68 70 69 74 63  68 0d 03 14 04 0d 03 15  |r9,hpitch.......|
00003380  0f 4c 44 52 20 72 33 2c  68 72 6f 74 0d 03 16 16  |.LDR r3,hrot....|
00003390  53 55 42 20 72 33 2c 72  33 2c 72 30 2c 41 53 52  |SUB r3,r3,r0,ASR|
000033a0  23 32 0d 03 17 14 4d 4f  56 20 72 33 2c 72 33 2c  |#2....MOV r3,r3,|
000033b0  4c 53 4c 23 32 33 0d 03  18 14 4d 4f 56 20 72 33  |LSL#23....MOV r3|
000033c0  2c 72 33 2c 4c 53 52 23  32 33 0d 03 19 0f 53 54  |,r3,LSR#23....ST|
000033d0  52 20 72 33 2c 68 72 6f  74 0d 03 1a 0e 53 54 52  |R r3,hrot....STR|
000033e0  20 72 33 2c 72 6f 74 0d  03 1b 04 0d 03 1c 11 4c  | r3,rot........L|
000033f0  44 52 20 72 34 2c 68 70  6f 77 65 72 0d 03 1d 11  |DR r4,hpower....|
00003400  4c 44 52 20 72 35 2c 73  69 6e 70 74 72 0d 03 1e  |LDR r5,sinptr...|
00003410  11 4c 44 52 20 72 36 2c  63 6f 73 70 74 72 0d 03  |.LDR r6,cosptr..|
00003420  1f 04 0d 03 20 18 4c 44  52 20 72 37 2c 5b 72 35  |.... .LDR r7,[r5|
00003430  2c 72 39 2c 41 53 4c 23  32 5d 0d 03 21 18 4c 44  |,r9,ASL#2]..!.LD|
00003440  52 20 72 38 2c 5b 72 36  2c 72 39 2c 41 53 4c 23  |R r8,[r6,r9,ASL#|
00003450  32 5d 0d 03 22 2f 4d 55  4c 20 72 38 2c 72 34 2c  |2].."/MUL r8,r4,|
00003460  72 38 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r8              |
00003470  20 20 3b 76 65 72 74 69  63 6c 65 20 70 6f 77 65  |  ;verticle powe|
00003480  72 0d 03 23 2e 4d 55 4c  20 72 34 2c 72 37 2c 72  |r..#.MUL r4,r7,r|
00003490  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
000034a0  20 3b 66 6f 72 77 61 72  64 20 70 6f 77 65 72 0d  | ;forward power.|
000034b0  03 24 15 4d 4f 56 20 72  34 2c 72 34 2c 41 53 52  |.$.MOV r4,r4,ASR|
000034c0  23 66 70 25 0d 03 25 16  3b 4d 4f 56 20 72 38 2c  |#fp%..%.;MOV r8,|
000034d0  72 38 2c 41 53 52 23 66  70 25 0d 03 26 04 0d 03  |r8,ASR#fp%..&...|
000034e0  27 28 4c 44 52 20 72 37  2c 68 64 7a 20 20 20 20  |'(LDR r7,hdz    |
000034f0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 61 6c  |             ;al|
00003500  74 65 72 20 64 7a 0d 03  28 16 53 55 42 20 72 37  |ter dz..(.SUB r7|
00003510  2c 72 37 2c 72 38 2c 41  53 52 23 36 0d 03 29 17  |,r7,r8,ASR#6..).|
00003520  53 55 42 20 72 37 2c 72  37 2c 23 67 72 61 76 69  |SUB r7,r7,#gravi|
00003530  74 79 25 0d 03 2a 0e 53  54 52 20 72 37 2c 68 64  |ty%..*.STR r7,hd|
00003540  7a 0d 03 2b 12 4c 44 52  20 72 38 2c 68 68 65 69  |z..+.LDR r8,hhei|
00003550  67 68 74 0d 03 2c 05 5d  0d 03 2d 17 e7 20 ac 20  |ght..,.]..-.. . |
00003560  66 69 78 65 64 5f 68 65  69 67 68 74 25 20 8c 0d  |fixed_height% ..|
00003570  03 2e 0a 5b 4f 50 54 69  25 0d 03 2f 10 41 44 44  |...[OPTi%../.ADD|
00003580  20 72 38 2c 72 38 2c 72  37 0d 03 30 05 5d 0d 03  | r8,r8,r7..0.]..|
00003590  31 05 cd 0d 03 32 0a 5b  4f 50 54 69 25 0d 03 33  |1....2.[OPTi%..3|
000035a0  12 53 54 52 20 72 38 2c  68 68 65 69 67 68 74 0d  |.STR r8,hheight.|
000035b0  03 34 04 0d 03 35 33 4d  4f 56 20 72 38 2c 72 38  |.4...53MOV r8,r8|
000035c0  2c 41 53 52 23 66 70 25  2b 31 20 20 20 20 20 20  |,ASR#fp%+1      |
000035d0  20 3b 66 69 67 75 72 65  20 6f 75 74 20 63 61 6d  | ;figure out cam|
000035e0  20 61 6e 67 6c 65 0d 03  36 17 41 44 44 20 72 38  | angle..6.ADD r8|
000035f0  2c 72 38 2c 23 63 61 6d  64 72 6f 70 25 0d 03 37  |,r8,#camdrop%..7|
00003600  11 53 54 52 20 72 38 2c  68 65 69 67 68 74 0d 03  |.STR r8,height..|
00003610  38 04 0d 03 39 18 4c 44  52 20 72 35 2c 5b 72 35  |8...9.LDR r5,[r5|
00003620  2c 72 33 2c 41 53 4c 23  32 5d 0d 03 3a 18 4c 44  |,r3,ASL#2]..:.LD|
00003630  52 20 72 36 2c 5b 72 36  2c 72 33 2c 41 53 4c 23  |R r6,[r6,r3,ASL#|
00003640  32 5d 0d 03 3b 10 4d 55  4c 20 72 35 2c 72 34 2c  |2]..;.MUL r5,r4,|
00003650  72 35 0d 03 3c 10 4d 55  4c 20 72 36 2c 72 34 2c  |r5..<.MUL r6,r4,|
00003660  72 36 0d 03 3d 04 0d 03  3e 0e 4c 44 52 20 72 37  |r6..=...>.LDR r7|
00003670  2c 68 64 78 0d 03 3f 0e  4c 44 52 20 72 38 2c 68  |,hdx..?.LDR r8,h|
00003680  64 79 0d 03 40 16 41 44  44 20 72 37 2c 72 37 2c  |dy..@.ADD r7,r7,|
00003690  72 35 2c 41 53 52 23 36  0d 03 41 16 41 44 44 20  |r5,ASR#6..A.ADD |
000036a0  72 38 2c 72 38 2c 72 36  2c 41 53 52 23 36 0d 03  |r8,r8,r6,ASR#6..|
000036b0  42 33 4d 4f 56 20 72 39  2c 72 37 2c 41 53 52 23  |B3MOV r9,r7,ASR#|
000036c0  34 20 20 20 20 20 20 20  20 20 20 20 20 3b 64 65  |4            ;de|
000036d0  63 20 64 78 2f 64 79 20  28 61 69 72 20 72 65 73  |c dx/dy (air res|
000036e0  29 0d 03 43 14 4d 4f 56  20 72 31 30 2c 72 38 2c  |)..C.MOV r10,r8,|
000036f0  41 53 52 23 34 0d 03 44  10 53 55 42 20 72 37 2c  |ASR#4..D.SUB r7,|
00003700  72 37 2c 72 39 0d 03 45  11 53 55 42 20 72 38 2c  |r7,r9..E.SUB r8,|
00003710  72 38 2c 72 31 30 0d 03  46 0e 53 54 52 20 72 37  |r8,r10..F.STR r7|
00003720  2c 68 64 78 0d 03 47 0e  53 54 52 20 72 38 2c 68  |,hdx..G.STR r8,h|
00003730  64 79 0d 03 48 04 0d 03  49 0d 4c 44 52 20 72 39  |dy..H...I.LDR r9|
00003740  2c 68 78 0d 03 4a 0e 4c  44 52 20 72 31 30 2c 68  |,hx..J.LDR r10,h|
00003750  79 0d 03 4b 10 41 44 44  20 72 39 2c 72 39 2c 72  |y..K.ADD r9,r9,r|
00003760  37 0d 03 4c 12 41 44 44  20 72 31 30 2c 72 31 30  |7..L.ADD r10,r10|
00003770  2c 72 38 0d 03 4d 0d 53  54 52 20 72 39 2c 68 78  |,r8..M.STR r9,hx|
00003780  0d 03 4e 0e 53 54 52 20  72 31 30 2c 68 79 0d 03  |..N.STR r10,hy..|
00003790  4f 15 4d 4f 56 20 72 39  2c 72 39 2c 41 53 52 23  |O.MOV r9,r9,ASR#|
000037a0  66 70 25 0d 03 50 17 4d  4f 56 20 72 31 30 2c 72  |fp%..P.MOV r10,r|
000037b0  31 30 2c 41 53 52 23 66  70 25 0d 03 51 0f 53 54  |10,ASR#fp%..Q.ST|
000037c0  52 20 72 39 2c 78 70 6f  73 0d 03 52 10 53 54 52  |R r9,xpos..R.STR|
000037d0  20 72 31 30 2c 79 70 6f  73 0d 03 53 04 0d 03 54  | r10,ypos..S...T|
000037e0  04 0d 03 55 14 4c 44 4d  46 44 20 72 31 33 21 2c  |...U.LDMFD r13!,|
000037f0  7b 72 31 35 7d 0d 03 56  04 0d 03 57 0d 2e 64 72  |{r15}..V...W..dr|
00003800  61 77 68 65 6c 69 0d 03  58 14 53 54 4d 46 44 20  |awheli..X.STMFD |
00003810  72 31 33 21 2c 7b 72 31  34 7d 0d 03 59 27 41 44  |r13!,{r14}..Y'AD|
00003820  52 20 72 31 31 2c 68 65  6c 69 70 20 20 20 20 20  |R r11,helip     |
00003830  20 20 20 20 20 20 20 20  3b 64 72 61 77 68 65 6c  |        ;drawhel|
00003840  69 0d 03 5a 11 41 44 52  20 72 31 32 2c 68 65 6c  |i..Z.ADR r12,hel|
00003850  69 66 0d 03 5b 11 4c 44  52 20 72 30 2c 68 70 69  |if..[.LDR r0,hpi|
00003860  74 63 68 0d 03 5c 0d 4d  4f 56 20 72 31 2c 23 30  |tch..\.MOV r1,#0|
00003870  0d 03 5d 0d 4d 4f 56 20  72 32 2c 23 30 0d 03 5e  |..].MOV r2,#0..^|
00003880  0d 4d 4f 56 20 72 33 2c  23 30 0d 03 5f 11 4c 44  |.MOV r3,#0.._.LD|
00003890  52 20 72 36 2c 68 65 69  67 68 74 0d 03 60 12 4c  |R r6,height..`.L|
000038a0  44 52 20 72 37 2c 68 68  65 69 67 68 74 0d 03 61  |DR r7,hheight..a|
000038b0  18 53 55 42 20 72 34 2c  72 36 2c 72 37 2c 41 53  |.SUB r4,r6,r7,AS|
000038c0  52 23 66 70 25 0d 03 62  0d 4d 4f 56 20 72 35 2c  |R#fp%..b.MOV r5,|
000038d0  23 30 0d 03 63 0e 42 4c  20 64 72 61 77 6f 62 6a  |#0..c.BL drawobj|
000038e0  0d 03 64 14 4c 44 4d 46  44 20 72 31 33 21 2c 7b  |..d.LDMFD r13!,{|
000038f0  72 31 35 7d 0d 03 65 04  0d 03 66 0f 2e 6f 62 6a  |r15}..e...f..obj|
00003900  78 20 44 43 44 20 30 0d  03 67 0f 2e 6f 62 6a 79  |x DCD 0..g..objy|
00003910  20 44 43 44 20 30 0d 03  68 0f 2e 6f 62 6a 7a 20  | DCD 0..h..objz |
00003920  44 43 44 20 30 0d 03 69  10 2e 66 61 63 65 73 20  |DCD 0..i..faces |
00003930  44 43 44 20 30 0d 03 6a  42 2e 64 72 61 77 6f 62  |DCD 0..jB.drawob|
00003940  6a 20 20 20 20 20 20 20  20 20 3b 72 30 3d 78 61  |j         ;r0=xa|
00003950  2c 20 72 31 3d 79 61 2c  20 72 32 3d 7a 61 2c 20  |, r1=ya, r2=za, |
00003960  72 31 31 3d 70 6e 74 70  74 72 2c 20 72 31 32 20  |r11=pntptr, r12 |
00003970  66 61 63 65 70 74 72 0d  03 6b 26 53 54 52 20 72  |faceptr..k&STR r|
00003980  31 34 2c 72 65 74 73 61  76 65 20 20 3b 72 33 3d  |14,retsave  ;r3=|
00003990  78 2c 20 72 34 3d 79 2c  20 72 35 3d 7a 0d 03 6c  |x, r4=y, r5=z..l|
000039a0  10 3b 53 54 52 20 72 33  2c 6f 62 6a 78 0d 03 6d  |.;STR r3,objx..m|
000039b0  0f 53 54 52 20 72 34 2c  6f 62 6a 79 0d 03 6e 10  |.STR r4,objy..n.|
000039c0  3b 53 54 52 20 72 35 2c  6f 62 6a 7a 0d 03 6f 11  |;STR r5,objz..o.|
000039d0  53 54 52 20 72 31 32 2c  66 61 63 65 73 0d 03 70  |STR r12,faces..p|
000039e0  04 0d 03 71 10 4c 44 52  20 70 2c 73 69 6e 70 74  |...q.LDR p,sinpt|
000039f0  72 0d 03 72 18 4c 44 52  20 73 78 61 2c 5b 70 2c  |r..r.LDR sxa,[p,|
00003a00  78 61 2c 41 53 4c 23 32  5d 0d 03 73 18 4c 44 52  |xa,ASL#2]..s.LDR|
00003a10  20 73 79 61 2c 5b 70 2c  79 61 2c 41 53 4c 23 32  | sya,[p,ya,ASL#2|
00003a20  5d 0d 03 74 18 4c 44 52  20 73 7a 61 2c 5b 70 2c  |]..t.LDR sza,[p,|
00003a30  7a 61 2c 41 53 4c 23 32  5d 0d 03 75 10 4c 44 52  |za,ASL#2]..u.LDR|
00003a40  20 70 2c 63 6f 73 70 74  72 0d 03 76 18 4c 44 52  | p,cosptr..v.LDR|
00003a50  20 63 78 61 2c 5b 70 2c  78 61 2c 41 53 4c 23 32  | cxa,[p,xa,ASL#2|
00003a60  5d 0d 03 77 18 4c 44 52  20 63 79 61 2c 5b 70 2c  |]..w.LDR cya,[p,|
00003a70  79 61 2c 41 53 4c 23 32  5d 0d 03 78 18 4c 44 52  |ya,ASL#2]..x.LDR|
00003a80  20 63 7a 61 2c 5b 70 2c  7a 61 2c 41 53 4c 23 32  | cza,[p,za,ASL#2|
00003a90  5d 0d 03 79 04 0d 03 7a  0f 41 44 52 20 69 2c 69  |]..y...z.ADR i,i|
00003aa0  6d 61 67 65 0d 03 7b 2c  4c 44 52 20 6e 2c 5b 70  |mage..{,LDR n,[p|
00003ab0  6e 74 73 5d 2c 23 34 20  20 20 20 20 20 20 20 20  |nts],#4         |
00003ac0  20 20 3b 6e 75 6d 20 6f  66 20 70 6f 69 6e 74 73  |  ;num of points|
00003ad0  0d 03 7c 04 0d 03 7d 0d  2e 70 6f 62 6a 6c 6f 6f  |..|...}..pobjloo|
00003ae0  70 0d 03 7e 18 4c 44 4d  49 41 20 70 6e 74 73 20  |p..~.LDMIA pnts |
00003af0  21 2c 7b 78 2c 79 2c 7a  7d 0d 03 7f 24 4d 55 4c  |!,{x,y,z}...$MUL|
00003b00  20 74 32 2c 7a 2c 73 78  61 20 20 20 20 20 20 20  | t2,z,sxa       |
00003b10  20 20 20 20 20 20 20 3b  72 6f 74 20 78 0d 03 80  |       ;rot x...|
00003b20  10 52 53 42 20 74 32 2c  74 32 2c 23 30 0d 03 81  |.RSB t2,t2,#0...|
00003b30  13 4d 4c 41 20 74 31 2c  79 2c 63 78 61 2c 74 32  |.MLA t1,y,cxa,t2|
00003b40  0d 03 82 10 4d 55 4c 20  74 32 2c 79 2c 73 78 61  |....MUL t2,y,sxa|
00003b50  0d 03 83 13 4d 4c 41 20  74 32 2c 7a 2c 63 78 61  |....MLA t2,z,cxa|
00003b60  2c 74 32 0d 03 84 14 4d  4f 56 20 79 2c 74 31 2c  |,t2....MOV y,t1,|
00003b70  41 53 52 23 66 70 25 0d  03 85 14 4d 4f 56 20 7a  |ASR#fp%....MOV z|
00003b80  2c 74 32 2c 41 53 52 23  66 70 25 0d 03 86 04 0d  |,t2,ASR#fp%.....|
00003b90  03 87 24 4d 55 4c 20 74  32 2c 7a 2c 73 79 61 20  |..$MUL t2,z,sya |
00003ba0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 72 6f  |             ;ro|
00003bb0  74 20 79 0d 03 88 10 52  53 42 20 74 32 2c 74 32  |t y....RSB t2,t2|
00003bc0  2c 23 30 0d 03 89 13 4d  4c 41 20 74 31 2c 78 2c  |,#0....MLA t1,x,|
00003bd0  63 79 61 2c 74 32 0d 03  8a 10 4d 55 4c 20 74 32  |cya,t2....MUL t2|
00003be0  2c 78 2c 73 79 61 0d 03  8b 13 4d 4c 41 20 74 32  |,x,sya....MLA t2|
00003bf0  2c 7a 2c 63 79 61 2c 74  32 0d 03 8c 14 4d 4f 56  |,z,cya,t2....MOV|
00003c00  20 78 2c 74 31 2c 41 53  52 23 66 70 25 0d 03 8d  | x,t1,ASR#fp%...|
00003c10  14 4d 4f 56 20 7a 2c 74  32 2c 41 53 52 23 66 70  |.MOV z,t2,ASR#fp|
00003c20  25 0d 03 8e 04 0d 03 8f  24 4d 55 4c 20 74 32 2c  |%.......$MUL t2,|
00003c30  79 2c 73 7a 61 20 20 20  20 20 20 20 20 20 20 20  |y,sza           |
00003c40  20 20 20 3b 72 6f 74 20  7a 0d 03 90 10 52 53 42  |   ;rot z....RSB|
00003c50  20 74 32 2c 74 32 2c 23  30 0d 03 91 13 4d 4c 41  | t2,t2,#0....MLA|
00003c60  20 74 31 2c 78 2c 63 7a  61 2c 74 32 0d 03 92 10  | t1,x,cza,t2....|
00003c70  4d 55 4c 20 74 32 2c 78  2c 73 7a 61 0d 03 93 13  |MUL t2,x,sza....|
00003c80  4d 4c 41 20 74 32 2c 79  2c 63 7a 61 2c 74 32 0d  |MLA t2,y,cza,t2.|
00003c90  03 94 14 4d 4f 56 20 78  2c 74 31 2c 41 53 52 23  |...MOV x,t1,ASR#|
00003ca0  66 70 25 0d 03 95 14 4d  4f 56 20 79 2c 74 32 2c  |fp%....MOV y,t2,|
00003cb0  41 53 52 23 66 70 25 0d  03 96 04 0d 03 97 2c 4c  |ASR#fp%.......,L|
00003cc0  44 52 20 74 31 2c 6f 62  6a 79 20 20 20 20 20 20  |DR t1,objy      |
00003cd0  20 20 20 20 20 20 20 20  20 3b 61 64 6a 75 73 74  |         ;adjust|
00003ce0  20 63 6f 6f 72 64 73 0d  03 98 10 3b 4c 44 52 20  | coords....;LDR |
00003cf0  74 32 2c 6f 62 6a 7a 0d  03 99 0e 41 44 44 20 79  |t2,objz....ADD y|
00003d00  2c 79 2c 74 31 0d 03 9a  0f 3b 41 44 44 20 7a 2c  |,y,t1....;ADD z,|
00003d10  7a 2c 74 32 0d 03 9b 14  41 44 44 20 7a 2c 7a 2c  |z,t2....ADD z,z,|
00003d20  23 79 73 68 69 66 74 25  0d 03 9c 04 0d 03 9d 30  |#yshift%.......0|
00003d30  4c 44 52 20 74 31 2c 70  65 72 73 70 70 74 72 20  |LDR t1,perspptr |
00003d40  20 20 20 20 20 20 20 20  20 20 3b 61 70 70 6c 79  |          ;apply|
00003d50  20 70 65 72 73 70 65 63  74 69 76 65 0d 03 9e 17  | perspective....|
00003d60  4c 44 52 20 74 31 2c 5b  74 31 2c 7a 2c 41 53 4c  |LDR t1,[t1,z,ASL|
00003d70  23 32 5d 0d 03 9f 0e 4d  55 4c 20 78 2c 74 31 2c  |#2]....MUL x,t1,|
00003d80  78 0d 03 a0 0e 4d 55 4c  20 79 2c 74 31 2c 79 0d  |x....MUL y,t1,y.|
00003d90  03 a1 13 4d 4f 56 20 78  2c 78 2c 41 53 52 23 66  |...MOV x,x,ASR#f|
00003da0  70 25 0d 03 a2 13 4d 4f  56 20 79 2c 79 2c 41 53  |p%....MOV y,y,AS|
00003db0  52 23 66 70 25 0d 03 a3  13 53 54 4d 49 41 20 69  |R#fp%....STMIA i|
00003dc0  20 21 2c 7b 78 2c 79 7d  0d 03 a4 0c 3b 42 4c 20  | !,{x,y}....;BL |
00003dd0  70 6c 6f 74 0d 03 a5 04  0d 03 a6 0f 53 55 42 53  |plot........SUBS|
00003de0  20 6e 2c 6e 2c 23 31 0d  03 a7 10 42 4e 45 20 70  | n,n,#1....BNE p|
00003df0  6f 62 6a 6c 6f 6f 70 0d  03 a8 04 0d 03 a9 27 4c  |objloop.......'L|
00003e00  44 52 20 66 73 2c 66 61  63 65 73 20 20 20 20 20  |DR fs,faces     |
00003e10  20 20 20 20 20 20 3b 64  72 61 77 20 70 6f 6c 69  |      ;draw poli|
00003e20  65 73 0d 03 aa 11 4c 44  52 20 6e 2c 5b 66 73 5d  |es....LDR n,[fs]|
00003e30  2c 23 34 0d 03 ab 0f 41  44 52 20 69 2c 69 6d 61  |,#4....ADR i,ima|
00003e40  67 65 0d 03 ac 04 0d 03  ad 0d 2e 66 6f 62 6a 6c  |ge.........fobjl|
00003e50  6f 6f 70 0d 03 ae 3e 4c  44 4d 49 41 20 66 73 20  |oop...>LDMIA fs |
00003e60  21 2c 7b 63 6f 6c 2c 76  73 7d 20 20 20 20 20 3b  |!,{col,vs}     ;|
00003e70  6c 6f 61 64 20 63 6f 6c  6f 75 72 20 61 6e 64 20  |load colour and |
00003e80  76 65 72 74 73 20 28 54  7c 34 3b 33 3b 32 3b 31  |verts (T|4;3;2;1|
00003e90  29 0d 03 af 04 0d 03 b0  10 80 20 74 32 2c 76 73  |)......... t2,vs|
00003ea0  2c 23 26 46 46 0d 03 b1  15 41 44 44 20 74 32 2c  |,#&FF....ADD t2,|
00003eb0  69 2c 74 32 2c 4c 53 4c  23 33 0d 03 b2 14 4c 44  |i,t2,LSL#3....LD|
00003ec0  4d 49 41 20 74 32 2c 7b  78 31 2c 79 31 7d 0d 03  |MIA t2,{x1,y1}..|
00003ed0  b3 04 0d 03 b4 13 4d 4f  56 20 76 73 2c 76 73 2c  |......MOV vs,vs,|
00003ee0  4c 53 52 23 38 0d 03 b5  10 80 20 74 32 2c 76 73  |LSR#8..... t2,vs|
00003ef0  2c 23 26 46 46 0d 03 b6  15 41 44 44 20 74 32 2c  |,#&FF....ADD t2,|
00003f00  69 2c 74 32 2c 4c 53 4c  23 33 0d 03 b7 14 4c 44  |i,t2,LSL#3....LD|
00003f10  4d 49 41 20 74 32 2c 7b  78 32 2c 79 32 7d 0d 03  |MIA t2,{x2,y2}..|
00003f20  b8 04 0d 03 b9 13 4d 4f  56 20 76 73 2c 76 73 2c  |......MOV vs,vs,|
00003f30  4c 53 52 23 38 0d 03 ba  10 80 20 74 32 2c 76 73  |LSR#8..... t2,vs|
00003f40  2c 23 26 46 46 0d 03 bb  15 41 44 44 20 74 32 2c  |,#&FF....ADD t2,|
00003f50  69 2c 74 32 2c 4c 53 4c  23 33 0d 03 bc 14 4c 44  |i,t2,LSL#3....LD|
00003f60  4d 49 41 20 74 32 2c 7b  78 33 2c 79 33 7d 0d 03  |MIA t2,{x3,y3}..|
00003f70  bd 04 0d 03 be 39 53 55  42 20 79 34 2c 78 32 2c  |.....9SUB y4,x2,|
00003f80  78 31 20 20 20 20 20 20  20 20 20 20 20 20 3b 63  |x1            ;c|
00003f90  6c 69 70 20 62 61 63 6b  77 61 72 64 73 20 28 78  |lip backwards (x|
00003fa0  34 2c 79 34 2d 74 65 6d  70 73 29 0d 03 bf 10 53  |4,y4-temps)....S|
00003fb0  55 42 20 78 34 2c 79 33  2c 79 32 0d 03 c0 10 4d  |UB x4,y3,y2....M|
00003fc0  55 4c 20 78 34 2c 79 34  2c 78 34 0d 03 c1 10 53  |UL x4,y4,x4....S|
00003fd0  55 42 20 79 34 2c 79 32  2c 79 31 0d 03 c2 10 53  |UB y4,y2,y1....S|
00003fe0  55 42 20 74 32 2c 78 33  2c 78 32 0d 03 c3 10 4d  |UB t2,x3,x2....M|
00003ff0  55 4c 20 79 34 2c 74 32  2c 79 34 0d 03 c4 0d 43  |UL y4,t2,y4....C|
00004000  4d 50 20 78 34 2c 79 34  0d 03 c5 2d 42 4c 54 20  |MP x4,y4...-BLT |
00004010  79 63 61 6e 6e 65 20 20  20 20 20 20 20 20 20 20  |ycanne          |
00004020  20 20 20 20 20 20 3b 79  27 63 61 6e 6e 65 20 73  |      ;y'canne s|
00004030  65 65 20 69 74 0d 03 c6  04 0d 03 c7 13 4d 4f 56  |ee it........MOV|
00004040  20 76 73 2c 76 73 2c 4c  53 52 23 38 0d 03 c8 2c  | vs,vs,LSR#8...,|
00004050  43 4d 50 20 76 73 2c 23  26 46 46 20 20 20 20 20  |CMP vs,#&FF     |
00004060  20 20 20 20 20 20 20 20  20 20 3b 74 65 53 54 2c  |          ;teST,|
00004070  20 26 46 46 2d 74 72 69  0d 03 c9 12 80 4e 45 20  | &FF-tri.....NE |
00004080  74 32 2c 76 73 2c 23 26  46 46 0d 03 ca 17 41 44  |t2,vs,#&FF....AD|
00004090  44 4e 45 20 74 32 2c 69  2c 74 32 2c 4c 53 4c 23  |DNE t2,i,t2,LSL#|
000040a0  33 0d 03 cb 16 4c 44 4d  4e 45 49 41 20 74 32 2c  |3....LDMNEIA t2,|
000040b0  7b 78 34 2c 79 34 7d 0d  03 cc 0d 42 4c 4e 45 20  |{x4,y4}....BLNE |
000040c0  71 75 61 64 0d 03 cd 0c  42 4c 45 51 20 74 72 69  |quad....BLEQ tri|
000040d0  0d 03 ce 04 0d 03 cf 0b  2e 79 63 61 6e 6e 65 0d  |.........ycanne.|
000040e0  03 d0 0f 53 55 42 53 20  6e 2c 6e 2c 23 31 0d 03  |...SUBS n,n,#1..|
000040f0  d1 10 42 4e 45 20 66 6f  62 6a 6c 6f 6f 70 0d 03  |..BNE fobjloop..|
00004100  d2 04 0d 03 d3 27 4c 44  52 20 72 31 35 2c 72 65  |.....'LDR r15,re|
00004110  74 73 61 76 65 20 20 20  20 20 20 20 20 3b 4d 4f  |tsave        ;MO|
00004120  56 20 72 31 35 2c 72 31  34 0d 03 d4 1c 2e 69 6d  |V r15,r14.....im|
00004130  61 67 65 20 a4 67 61 70  28 6d 61 78 33 64 70 74  |age .gap(max3dpt|
00004140  73 25 2a 38 29 0d 03 d5  04 0d 03 d6 04 0d 03 d7  |s%*8)...........|
00004150  06 5d ed 0d 03 d8 0d f1  50 25 2d 63 6f 64 65 25  |.]......P%-code%|
00004160  0d 03 d9 23 c8 99 22 4f  53 5f 52 65 61 64 56 64  |...#.."OS_ReadVd|
00004170  75 56 61 72 69 61 62 6c  65 73 22 2c 76 64 75 2c  |uVariables",vdu,|
00004180  76 64 75 0d 03 da 16 76  64 75 21 34 3d 21 76 64  |vdu....vdu!4=!vd|
00004190  75 2b 32 35 36 2a 33 32  30 0d 03 db 05 e1 0d 03  |u+256*320.......|
000041a0  dc 04 0d 03 dd 0a dd a4  76 75 6c 63 0d 03 de 0c  |........vulc....|
000041b0  e3 6a 25 3d 31 b8 32 30  0d 03 df 0a 5b 4f 50 54  |.j%=1.20....[OPT|
000041c0  69 25 0d 03 e0 1d 53 54  4d 49 41 20 28 78 6c 29  |i%....STMIA (xl)|
000041d0  21 2c 7b 63 31 2c 63 32  2c 63 33 2c 63 34 7d 0d  |!,{c1,c2,c3,c4}.|
000041e0  03 e1 06 5d ed 0d 03 e2  07 3d 22 22 0d 03 e3 05  |...].....=""....|
000041f0  20 0d 03 e4 09 dd a4 72  6f 74 0d 03 e5 0a 5b 4f  | ......rot....[O|
00004200  50 54 69 25 0d 03 e6 0c  4d 4f 56 20 73 2c 61 78  |PTi%....MOV s,ax|
00004210  0d 03 e7 0d 4d 4f 56 20  61 78 2c 62 78 0d 03 e8  |....MOV ax,bx...|
00004220  0d 4d 4f 56 20 62 78 2c  63 78 0d 03 e9 0d 4d 4f  |.MOV bx,cx....MO|
00004230  56 20 63 78 2c 64 78 0d  03 ea 0c 4d 4f 56 20 64  |V cx,dx....MOV d|
00004240  78 2c 73 0d 03 eb 0c 4d  4f 56 20 73 2c 61 79 0d  |x,s....MOV s,ay.|
00004250  03 ec 0d 4d 4f 56 20 61  79 2c 62 79 0d 03 ed 0d  |...MOV ay,by....|
00004260  4d 4f 56 20 62 79 2c 63  79 0d 03 ee 0d 4d 4f 56  |MOV by,cy....MOV|
00004270  20 63 79 2c 64 79 0d 03  ef 0c 4d 4f 56 20 64 79  | cy,dy....MOV dy|
00004280  2c 73 0d 03 f0 05 5d 0d  03 f1 06 3d 30 0d 03 f2  |,s....]....=0...|
00004290  04 0d 03 f3 0d dd a4 67  61 70 28 67 25 29 0d 03  |.......gap(g%)..|
000042a0  f4 0c 50 25 3d 50 25 2b  67 25 0d 03 f5 06 3d 30  |..P%=P%+g%....=0|
000042b0  0d 03 f6 04 0d 03 f7 0e  dd a4 64 61 74 61 28 61  |..........data(a|
000042c0  24 29 0d 03 f8 14 e3 67  25 3d 31 20 b8 20 a9 61  |$).....g%=1 . .a|
000042d0  24 2d 31 20 88 32 0d 03  f9 18 3f 50 25 3d a0 28  |$-1 .2....?P%=.(|
000042e0  22 26 22 2b c1 61 24 2c  67 25 2c 32 29 29 0d 03  |"&"+.a$,g%,2))..|
000042f0  fa 19 50 25 3f 31 3d a0  28 22 26 22 2b c1 61 24  |..P%?1=.("&"+.a$|
00004300  2c 67 25 2c 32 29 29 0d  03 fb 09 50 25 2b 3d 32  |,g%,2))....P%+=2|
00004310  0d 03 fc 05 ed 0d 03 fd  06 3d 30 0d ff           |.........=0..|
0000431d