Home » Archimedes archive » Acorn User » AU 1997-08 B.adf » Regulars » starinfo/Vlietinck/Gouraudhi

starinfo/Vlietinck/Gouraudhi

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 1997-08 B.adf » Regulars
Filename: starinfo/Vlietinck/Gouraudhi
Read OK:
File size: 38C9 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >Gouraud
   20REM (c) Jan Vlietinck
   30
   40
   50ON ERROR:REPORT:PRINT ERL:END
   60
   70DEF PROCmain
   80DIM Q% 200000
   90DIM INVERS 4094*4
  100
  110PROCcalc_invers
  120PROCgouraud_triangle
  130PROCmode
  140CALL set_mode
  150P1=2*PI/3
  160FOR I=1 TO 255
  170 P=I/256*2*PI
  180 R=128*(1+COS(P))
  190 G=128*(1+COS(2*P+P1))
  200 B=128*(1+COS(P-P1))
  210 COLOUR I,R,G,B
  220NEXT I
  230CALL set
  260
  270
  280REPEAT
  290PRINT "1000 RANDOM GOURAUD TRIANGLES"
  300PRINT "PRESS A KEY TO START"
  310W=GET:CLS
  320TIME=0
  330!ran=RND
  340CALL main
  350PRINT "IN ";TIME/100;" SECONDS"
  360UNTIL 0
  370END
  380
  390
  400
  410
  420DEF PROCcalc_invers
  430K=1<<21
  440FOR I=1 TO 4093:INVERS!(4*I)=K/(I+0.5):NEXT
  450ENDPROC
  460
  470
  480
  490
  500
  510DEF PROCmode
  520X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
  530I1=6:I2=7:I3=8
  540TEL=9:F=10
  550FOR P=0 TO 2 STEP 2
  560P%=Q%
  570[OPT P
  580
  590
  600.ran EQUD RND
  610.nr EQUD 1000
  620.main
  630STMFD R13!,{R14}
  640LDR F,ran
  650LDR TEL,nr
  660.loopr
  670.L1 ADD F,F,F,LSL #8:MOV X1,F,LSR #22:CMP X1,#640:BHS L1
  680.K1 ADD F,F,F,LSL #8:MOV Y1,F,LSR #23:CMP Y1,#480:BHS K1
  690.L2 ADD F,F,F,LSL #8:MOV X2,F,LSR #22:CMP X2,#640:BHS L2
  700.K2 ADD F,F,F,LSL #8:MOV Y2,F,LSR #23:CMP Y2,#480:BHS K2
  710.L3 ADD F,F,F,LSL #8:MOV X3,F,LSR #22:CMP X3,#640:BHS L3
  720.K3 ADD F,F,F,LSL #8:MOV Y3,F,LSR #23:CMP Y3,#480:BHS K3
  730ADD F,F,F,LSL #8:MOV I1,F,LSR #18
  740ADD F,F,F,LSL #8:MOV I2,F,LSR #18
  750ADD F,F,F,LSL #8:MOV I3,F,LSR #18
  760BL gouraud_triangle
  770SUBS TEL,TEL,#1
  780BNE loopr
  790LDMFD R13!,{PC}
  800]
  810NEXT
  820Q%=P%
  830ENDPROC
  840
  850
  860
  870DEF PROCgouraud_triangle
  880LOCAL SF,FIX,SM,FP,I,G
  890LOCAL DXD,DYD,TXD,TYD,XD,YD
  900
  910SF=12:FIX=2^SF
  920SM=10
  930FP=SF+SM
  940
  950H=0:C1=1:L=2:R=3:CT=4:I=5:XL=6:XR=7:C2=8:T=9:O=10:LA=11:RA=12
  960
  970X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
  980I1=6:I2=7:I3=8
  990SCREEN=12:BITMAP=13:Tmp=14
 1000
 1010A=0:B=1:C=9:D=10:Tmp2=12:Help=13
 1020
 1030FOR PASS=0 TO 2 STEP 2
 1040P%=Q%
 1050[OPT PASS
 1060.SCREEN1 EQUD 148:EQUD -1
 1070.SCREEN2 EQUD 0
 1080.set
 1090ADR R0,SCREEN1
 1100ADR R1,SCREEN2
 1110SWI "OS_ReadVduVariables"
 1120MOV 15,14
 1130
 1140.mode     DCD 1
 1150          DCD 640
 1160          DCD 480
 1170          DCD 3
 1180          DCD -1
 1190          DCD 0:DCD 128
 1200          DCD 3:DCD 255
 1210          DCD -1
 1220.set_mode
 1230MOV R0,#0
 1240ADR R1,mode
 1250SWI "OS_ScreenMode"
 1260SWI "OS_RemoveCursors"
 1270MOV pc,r14
 1280
 1290FNpredef
 1300.gouraud_triangle
 1310FNprecalc
 1320FNpiece
 1330]
 1340NEXT
 1350Q%=P%
 1360ENDPROC
 1370
 1380
 1390
 1400
 1410
 1420DEF FNadr(reg,address)
 1430offset=address-P%-8
 1440IF offset>0 THEN
 1450offset1=offset AND 255*4
 1460offset2=offset AND 255*256*4
 1470offset3=offset AND 255*256*256*4
 1480               [OPT PASS:ADD       reg, 15,#offset1:]
 1490IF offset2<>0  [OPT PASS:ADD       reg,reg,#offset2:]
 1500IF offset3<>0  [OPT PASS:ADD       reg,reg,#offset3:]
 1510ELSE
 1520offset1=-offset AND 255*4
 1530offset2=-offset AND 255*256*4
 1540offset3=-offset AND 255*256*256*4
 1550               [OPT PASS:SUB       reg, 15,#offset1:]
 1560IF offset2<>0  [OPT PASS:SUB       reg,reg,#offset2:]
 1570IF offset3<>0  [OPT PASS:SUB       reg,reg,#offset3:]
 1580ENDIF
 1590ENDIF
 1600=""
 1610
 1620DEF FNpredef
 1630[OPT PASS
 1640.save_regs DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
 1650
 1660.X1D EQUD 0
 1670.X2D EQUD 0
 1680
 1690.DX21 EQUD 0
 1700.DX32 EQUD 0
 1710.DX31 EQUD 0
 1720
 1730.DY21 EQUD 0
 1740.DY32 EQUD 0
 1750
 1760
 1770.SCREEND EQUD 0
 1780.spd      DCD 0
 1790
 1800]
 1810=""
 1820
 1830DEF FNprecalc
 1840[OPT PASS
 1850;REM paramters R0-R8=x0,y0,x1,y1,x2,y2,i0,i1,i2
 1860
 1870          STMFD     13!,{0-12,14}
 1880          STR       13,spd
 1890
 1990;sort vertices so that y1,y2,y3 are in ascending order
 2000          CMP       Y1,Y2
 2010          BLE       inorder1
 2020; if y1 > y2 then swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 2030          EOR       Y1,Y1,Y2
 2040          EOR       X1,X1,X2
 2050          EOR       I1,I1,I2
 2060          EOR       Y2,Y2,Y1
 2070          EOR       X2,X2,X1
 2080          EOR       I2,I2,I1
 2090          EOR       Y1,Y1,Y2
 2100          EOR       X1,X1,X2
 2110          EOR       I1,I1,I2
 2120.inorder1
 2130          CMP       Y2,Y3
 2140          BLE       inorder2
 2150; if y2 > y3 then swap(x2,x3) swap(y2,y3) swap(u2,u3) swap(v2,v3)
 2160          EOR       Y2,Y2,Y3
 2170          EOR       X2,X2,X3
 2180          EOR       I2,I2,I3
 2190          EOR       Y3,Y3,Y2
 2200          EOR       X3,X3,X2
 2210          EOR       I3,I3,I2
 2220          EOR       Y2,Y2,Y3
 2230          EOR       X2,X2,X3
 2240          EOR       I2,I2,I3
 2250.inorder2
 2260          CMP       Y1,Y2
 2270          BLE       inorder3
 2280; if (y1 > y2) or (y1=y2 and x1>x2) then
 2290; swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
 2300          EOR       Y1,Y1,Y2
 2310          EOR       X1,X1,X2
 2320          EOR       I1,I1,I2
 2330          EOR       Y2,Y2,Y1
 2340          EOR       X2,X2,X1
 2350          EOR       I2,I2,I1
 2360          EOR       Y1,Y1,Y2
 2370          EOR       X1,X1,X2
 2380          EOR       I1,I1,I2
 2390.inorder3
 2400          STR       X1,X1D
 2410          STR       X2,X2D
 2420          STR       I1,I1D
 2430          SUB       X2,X2,X1
 2440          SUB       Y2,Y2,Y1
 2450          SUB       X3,X3,X1
 2460          SUB       Y3,Y3,Y1
 2470          SUB       I2,I2,I1
 2480          SUB       I3,I3,I1
 2490
 2500; screen'=screen + 640*y1 
 2510          FNadr     (SCREEN,SCREEN2)
 2520          LDR       SCREEN,[SCREEN]
 2530          ADD       Tmp,Y1,Y1,LSL #2
 2540          ADD       SCREEN,SCREEN,Tmp,LSL #7
 2550          STR       SCREEN,SCREEND
 2560
 2570          FNadr     (Help,INVERS)
 2580          STR       Y2,DY21
 2590; calc  x2/y2
 2600          LDR       Tmp,[Help,Y2,LSL #2]
 2610          MUL       Tmp,X2,Tmp
 2620          MOV       Tmp,Tmp,ASR #9
 2630          STR       Tmp,DX21
 2640          SUB       Y1,Y3,Y2
 2650          STR       Y1,DY32
 2660; calc (x3-x2)/(y3-y2)
 2670          LDR       Tmp,[Help,Y1,LSL #2]
 2680          SUB       X1,X3,X2
 2690          MUL       Tmp,X1,Tmp
 2700          MOV       Tmp,Tmp,ASR #9
 2710          STR       Tmp,DX32
 2720; calc dx1 = x3/y3
 2730          LDR       Tmp,[Help,Y3,LSL #2]
 2740          MUL       Tmp2,X3,Tmp
 2750          MOV       Tmp2,Tmp2,ASR #9
 2760          STR       Tmp2,DX31
 2770          
 2780; shading increment in y direction
 2790; calc di1 = i3/y3       ; i 8.6 di 8.16
 2800          MOV       Tmp,Tmp,LSR #4       ; .17
 2810          MUL       I3,Tmp,I3              ; 8.23
 2820          MOV       I3,I3,ASR #17-10     ; 8.16
 2830          MOV       I1,I1,LSL #10
 2840          ADD       I1,I1,I3,ASR #1
 2850          STR       I3,I3D
 2860          STR       I1,I1D
 2870
 2880; calc 2^21/floor(abs(x2 - dx1*y2))
 2890          MUL       Tmp,Y2,Tmp2         ; (x3/y3)*y2
 2900          RSB       Tmp,Tmp,X2,LSL #12  ; x2-(x3/y3)*y2
 2910          MOVS      Tmp,Tmp,ASR #10     ; int( ... )
 2920          RSBMI     Tmp,Tmp,#0
 2930          LDR       Tmp,[Help,Tmp,LSL #2]  ; .19
 2940          
 2950; shading increment in x direction
 2960; calc di2 = (i2-di1*y2) / abs( x2 - dx1*y2)
 2970          MOV       I2,I2,LSL #10    ; 8.16
 2980          MUL       I3,Y2,I3
 2990          RSB       I2,I3,I2       ; 8.16
 3000          MOV       I2,I2,ASR #8   ; 8.8
 3010          MOV       Tmp,Tmp,LSR #3  ; .16
 3020          MUL       I2,Tmp,I2     ;  8.24
 3030          MOV       I2,I2,ASR #16
 3040          STR       I2,I2D         ; 8.8
 3050          LDR       I1,I1D
 3060          ADD       I1,I1,I2,LSL #7
 3070          STR       I1,I1D
 3080          
 3090          LDR       O,SCREEND
 3100
 3110          LDR       T,X1D
 3120          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
 3130          ADD       L,L,#1<<11
 3140          LDR       LA,DX31      ; dxl = dx31
 3150          MOV       R,L          ; xr = (X1+0.5)*FIX
 3160          LDR       RA,DX21      ; dxr = dx21
 3170          ADD       L,L,LA,ASR #1  ; xl += 0.5*dxl
 3180          ADD       R,R,RA,ASR #1  ; xr += 0.5*dxr
 3190          LDR       CT,DY21
 3200          CMP       CT,#0          ; count = dy21
 3210          BLNE      PIECE
 3220
 3230          LDR       T,X2D
 3240          MOV       R,T,LSL #12   ; dxr = dx32
 3250          ADD       R,R,#1<<11    ; xr = (X2+0.5)*FIX
 3260          LDR       LA,DX31
 3270          LDR       RA,DX32
 3280          ADD       R,R,RA,ASR #1  ; xr+= 0.5*dxr
 3290          LDR       CT,DY32
 3300          CMP       CT,#0          ; count= dy32
 3310          BLNE      PIECE
 3320.end
 3330          LDR       13,spd
 3340          LDMFD     13!,{0-12,PC}^
 3350]
 3360=""
 3370
 3380
 3390DEF FNpiece
 3400[OPT PASS
 3410.I1D DCD 0
 3420.I2D DCD 0
 3430.I3D DCD 0
 3440
 3450.PIECE STMFD     13!,{CT,14}
 3460
 3470; clip to top
 3480          FNadr     (T,SCREEN2)
 3490          LDR       T,[T]
 3500          CMP       O,T
 3510          BHS       eclip
 3520.clip
 3530          ADD       L,L,LA
 3540          ADD       R,R,RA
 3550          ADD       O,O,#640
 3560; increment y shading
 3570
 3580          LDR       I,I1D
 3590          LDR       H,I3D
 3600          ADD       I,I,H
 3610          STR       I,I1D
 3620
 3630          SUBS      CT,CT,#1
 3640          LDMEQFD   13!,{CT,15}
 3650          CMP       O,T
 3660          BLO       clip
 3670.eclip
 3680; clip to bottom
 3690          ADD       T,T,#640*480
 3700          SUBS      T,T,O
 3710          LDMLSFD   13!,{CT,15}
 3720          ADD       CT,CT,CT,LSL #2
 3730          CMP       CT,T,LSR #7
 3740          MOVHI     CT,T,LSR #7
 3750          CMP       L,R          ; left or right oriented ?
 3760          BGT       span_2
 3770          BAL       span
 3780.endspan
 3790          ADD       O,O,#640
 3800          ADD       L,L,LA
 3810          ADD       R,R,RA
 3820          SUBS      CT,CT,#5
 3830; increment y shading
 3840
 3850          LDR       T,I1D
 3860          LDR       I,I3D
 3870          ADD       I,I,T
 3880          STR       I,I1D
 3890
 3900          LDMEQFD   13!,{CT,15}
 3910.span
 3920
 3930
 3940; clip to right
 3950          CMP       R,#640<<12
 3960          ADD       XR,O,R,ASR #12
 3970          ADDGT     XR,O,#640
 3980; Clip to left
 3990          MOVS      T,L,ASR #12
 4000          ADD       XL,O,T
 4010          MOVLT     XL,O
 4020          RSBMI     T,T,#0
 4030
 4040
 4050; Load line shade and shade increment
 4060          LDR       I,I1D           ; 10.4
 4070          MOV       I,I,ASR #8
 4080          LDR       H,I2D           ; 10.4
 4090          MLAMI     I,T,H,I
 4100
 4110          MOV       T,L,ASR #4
 4120          AND       T,T,#255
 4130          MUL       T,H,T
 4140          SUB       I,I,T,ASR #8
 4150
 4160          MOV       I,I,LSL #16      ; 10.22
 4170          MOV       H,H,LSL #16      ; 10.22
 4180          ADD       I,I,H,LSR #16
 4190
 4200          SUB       T,XR,XL
 4210          CMP       T,#3
 4220          BLE       smallspan
 4230          TST       XL,#3
 4240          BEQ       endloop1
 4250.loop1    FNmapbyte(C1)
 4260          STRB      C1,[XL],#1
 4270          TST       XL,#3
 4280          BNE       loop1
 4290
 4300.endloop1 SUB       H,XR,XL
 4310          MOVS      H,H,LSR #3
 4320          BCC       doit
 4330          FNmapbyte(C1)
 4340          FNmapbyte(T)
 4350          ADD       C1,C1,T,LSL #8
 4360          FNmapbyte(T)
 4370          ADD       C1,C1,T,LSL #16
 4380          FNmapbyte(T)
 4390          ADD       C1,C1,T,LSL #24
 4400          STR       C1,[XL],#4
 4410          CMP       H,#0
 4420.doit     BEQ       smallspan
 4430
 4440.loop2    FNmapbyte(C1)
 4450          FNmapbyte(T)
 4460          ADD       C1,C1,T,LSL #8
 4470          FNmapbyte(T)
 4480          ADD       C1,C1,T,LSL #16
 4490          FNmapbyte(T)
 4500          ADD       C1,C1,T,LSL #24
 4510          FNmapbyte(C2)
 4520          FNmapbyte(T)
 4530          ADD       C2,C2,T,LSL #8
 4540          FNmapbyte(T)
 4550          ADD       C2,C2,T,LSL #16
 4560          FNmapbyte(T)
 4570          ADD       C2,C2,T,LSL #24
 4580          STMIA     (XL)!,{C1,C2}
 4590          SUBS      H,H,#1
 4600          BNE       loop2
 4610.smallspan
 4620          CMP       XL,XR
 4630          BGE       endspan
 4640          FNmapbyte(C1)
 4650          STRB      C1,[XL],#1
 4660          CMP       XL,XR
 4670          BEQ       endspan
 4680          FNmapbyte(C1)
 4690          STRB      C1,[XL],#1
 4700          CMP       XL,XR
 4710          BEQ       endspan
 4720          FNmapbyte(C1)
 4730          STRB      C1,[XL],#1
 4740          BAL       endspan
 4750.endspan_2
 4760          ADD       O,O,#640
 4770          ADD       L,L,LA
 4780          ADD       R,R,RA
 4790          SUBS      CT,CT,#5
 4800; increment y shading
 4810          LDR       T,I1D
 4820          LDR       I,I3D
 4830          ADD       I,I,T
 4840          STR       I,I1D
 4850          LDMEQFD   13!,{CT,15}
 4860.span_2
 4870; Clip to left
 4880          MOVS      T,R,ASR #12
 4890          ADDPL     XR,O,R,ASR #12
 4900          MOVMI     XR,O
 4910; clip to right
 4920          MOV       T,#640
 4930          RSBS      T,T,L,ASR #12
 4940          ADD       XL,O,L,ASR #12
 4950          ADDPL     XL,O,#640
 4960; Load line shade and shade increment
 4970          LDR       I,I1D
 4980          MOV       I,I,ASR #8
 4990          LDR       H,I2D
 5000          MLAPL     I,T,H,I
 5010
 5020          MOV       T,L,ASR #4
 5030          AND       T,T,#255
 5040          MUL       T,H,T
 5050          ADD       I,I,T,ASR #8          
 5060          
 5070          MOV       I,I,LSL #16
 5080          MOV       H,H,LSL #16
 5090          ADD       I,I,H,LSR#16
 5100          SUB       T,XL,XR
 5110          CMP       T,#3
 5120          BLE       smallspan_2
 5130          TST       XL,#3
 5140          BEQ       endloop1_2
 5150.loop1_2  FNmapbyte(C1)
 5160          STRB      C1,[XL,#-1]!
 5170          TST       XL,#3
 5180          BNE       loop1_2
 5190.endloop1_2
 5200          SUB       H,XL,XR
 5210          MOVS      H,H,LSR #3
 5220          BCC       doit_2
 5230          FNmapbyte(C1)
 5240          FNmapbyte(T)
 5250          ADD       C1,C1,T,LSL #24
 5260          FNmapbyte(T)
 5270          ADD       C1,C1,T,LSL #16
 5280          FNmapbyte(T)
 5290          ADD       C1,T,C1,ROR #8
 5300          STR       C1,[XL,#-4]!
 5310          CMP       H,#0
 5320.doit_2   BEQ       smallspan_2
 5330.loop2_2
 5340          FNmapbyte(C2)
 5350          FNmapbyte(T)
 5360          ADD       C2,C2,T,LSL #24
 5370          FNmapbyte(T)
 5380          ADD       C2,C2,T,LSL #16
 5390          FNmapbyte(T)
 5400          ADD       C2,T,C2,ROR #8
 5410          FNmapbyte(C1)
 5420          FNmapbyte(T)
 5430          ADD       C1,C1,T,LSL #24
 5440          FNmapbyte(T)
 5450          ADD       C1,C1,T,LSL #16
 5460          FNmapbyte(T)
 5470          ADD       C1,T,C1,ROR #8
 5480          STMDB     (XL)!,{C1,C2}
 5490          SUBS      H,H,#1
 5500          BNE       loop2_2
 5510.smallspan_2
 5520          CMP       XR,XL
 5530          BGE       endspan_2
 5540          FNmapbyte(C1)
 5550          STRB      C1,[XL,#-1]!
 5560          CMP       XR,XL
 5570          BEQ       endspan_2
 5580          FNmapbyte(C1)
 5590          STRB      C1,[XL,#-1]!
 5600          CMP       XR,XL
 5610          BEQ       endspan_2
 5620          FNmapbyte(C1)
 5630          STRB      C1,[XL,#-1]!
 5640          BAL       endspan_2
 5650]
 5660=""
 5670
 5680DEF FNmapbyte(reg)
 5690[OPT PASS
 5700      MOV       reg,I,LSR #24
 5710      ADD       I,I,I,LSL #16
 5720]
 5730 =""

� >Gouraud
� (c) Jan Vlietinck

(
2� �:�:� �:�
<
F� �main
P� Q% 200000
Z� INVERS 4094*4
d
n�calc_invers
x�gouraud_triangle
�	�mode
�� set_mode
�P1=2*�/3
�� I=1 � 255
� P=I/256*2*�
� R=128*(1+�(P))
� G=128*(1+�(2*P+P1))
� B=128*(1+�(P-P1))
� � I,R,G,B
�� I
�	� set


�
"%� "1000 RANDOM GOURAUD TRIANGLES"
,� "PRESS A KEY TO START"
6	W=�:�
@�=0
J
!ran=�
T
� main
^� "IN ";�/100;" SECONDS"
h� 0
r�
|
�
�
�
�� �calc_invers
�K=1<<21
�)� I=1 � 4093:INVERS!(4*I)=K/(I+0.5):�
��
�
�
�
�
�
�� �mode
!X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
I1=6:I2=7:I3=8
TEL=9:F=10
&� P=0 � 2 � 2
0	P%=Q%
:
[OPT P
D
N
X.ran EQUD �
b.nr EQUD 1000
l	.main
vSTMFD R13!,{R14}
�
LDR F,ran
�LDR TEL,nr
�
.loopr
�<.L1 ADD F,F,F,LSL #8:MOV X1,F,LSR #22:CMP X1,#640:BHS L1
�<.K1 ADD F,F,F,LSL #8:MOV Y1,F,LSR #23:CMP Y1,#480:BHS K1
�<.L2 ADD F,F,F,LSL #8:MOV X2,F,LSR #22:CMP X2,#640:BHS L2
�<.K2 ADD F,F,F,LSL #8:MOV Y2,F,LSR #23:CMP Y2,#480:BHS K2
�<.L3 ADD F,F,F,LSL #8:MOV X3,F,LSR #22:CMP X3,#640:BHS L3
�<.K3 ADD F,F,F,LSL #8:MOV Y3,F,LSR #23:CMP Y3,#480:BHS K3
�%ADD F,F,F,LSL #8:MOV I1,F,LSR #18
�%ADD F,F,F,LSL #8:MOV I2,F,LSR #18
�%ADD F,F,F,LSL #8:MOV I3,F,LSR #18
�BL gouraud_triangle
SUBS TEL,TEL,#1

BNE loopr
LDMFD R13!,{PC}
 ]
*�
4	Q%=P%
>�
H
R
\
f� �gouraud_triangle
p� SF,FIX,SM,FP,I,G
z� DXD,DYD,TXD,TYD,XD,YD
�
�SF=12:FIX=2^SF
�	SM=10
�FP=SF+SM
�
�AH=0:C1=1:L=2:R=3:CT=4:I=5:XL=6:XR=7:C2=8:T=9:O=10:LA=11:RA=12
�
�!X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
�I1=6:I2=7:I3=8
�SCREEN=12:BITMAP=13:Tmp=14
�
�$A=0:B=1:C=9:D=10:Tmp2=12:Help=13
�
� PASS=0 � 2 � 2
	P%=Q%

[OPT PASS
$.SCREEN1 EQUD 148:EQUD -1
..SCREEN2 EQUD 0
8.set
BADR R0,SCREEN1
LADR R1,SCREEN2
VSWI "OS_ReadVduVariables"
`
MOV 15,14
j
t.mode     DCD 1
~          DCD 640
�          DCD 480
�          DCD 3
�          DCD -1
�          DCD 0:DCD 128
�          DCD 3:DCD 255
�          DCD -1
�
.set_mode
�
MOV R0,#0
�ADR R1,mode
�SWI "OS_ScreenMode"
�SWI "OS_RemoveCursors"
�MOV pc,r14


�predef
.gouraud_triangle
�precalc
(
�piece
2]
<�
F	Q%=P%
P�
Z
d
n
x
�
�� �adr(reg,address)
�offset=address-P%-8
�� offset>0 �
�offset1=offset � 255*4
�offset2=offset � 255*256*4
�"offset3=offset � 255*256*256*4
�9               [OPT PASS:ADD       reg, 15,#offset1:]
�8� offset2<>0  [OPT PASS:ADD       reg,reg,#offset2:]
�8� offset3<>0  [OPT PASS:ADD       reg,reg,#offset3:]
��
�offset1=-offset � 255*4
�offset2=-offset � 255*256*4
#offset3=-offset � 255*256*256*4
9               [OPT PASS:SUB       reg, 15,#offset1:]
8� offset2<>0  [OPT PASS:SUB       reg,reg,#offset2:]
"8� offset3<>0  [OPT PASS:SUB       reg,reg,#offset3:]
,�
6�
@=""
J
T
� �predef
^
[OPT PASS
h8.save_regs DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
r
|.X1D EQUD 0
�.X2D EQUD 0
�
�.DX21 EQUD 0
�.DX32 EQUD 0
�.DX31 EQUD 0
�
�.DY21 EQUD 0
�.DY32 EQUD 0
�
�
�.SCREEND EQUD 0
�.spd      DCD 0
�
]
=""

&� �precalc
0
[OPT PASS
:1;� paramters R0-R8=x0,y0,x1,y1,x2,y2,i0,i1,i2
D
N%          STMFD     13!,{0-12,14}
X          STR       13,spd
b
�:;sort vertices so that y1,y2,y3 are in ascending order
�          CMP       Y1,Y2
�           BLE       inorder1
�E; if y1 > y2 then swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
�          �       Y1,Y1,Y2
�          �       X1,X1,X2
          �       I1,I1,I2
          �       Y2,Y2,Y1
          �       X2,X2,X1
           �       I2,I2,I1
*          �       Y1,Y1,Y2
4          �       X1,X1,X2
>          �       I1,I1,I2
H
.inorder1
R          CMP       Y2,Y3
\           BLE       inorder2
fE; if y2 > y3 then swap(x2,x3) swap(y2,y3) swap(u2,u3) swap(v2,v3)
p          �       Y2,Y2,Y3
z          �       X2,X2,X3
�          �       I2,I2,I3
�          �       Y3,Y3,Y2
�          �       X3,X3,X2
�          �       I3,I3,I2
�          �       Y2,Y2,Y3
�          �       X2,X2,X3
�          �       I2,I2,I3
�
.inorder2
�          CMP       Y1,Y2
�           BLE       inorder3
�,; if (y1 > y2) or (y1=y2 and x1>x2) then
�5; swap(x1,x2) swap(y1,y2) swap(u1,u2) swap(v1,v2)
�          �       Y1,Y1,Y2
	          �       X1,X1,X2
	          �       I1,I1,I2
	          �       Y2,Y2,Y1
	$          �       X2,X2,X1
	.          �       I2,I2,I1
	8          �       Y1,Y1,Y2
	B          �       X1,X1,X2
	L          �       I1,I1,I2
	V
.inorder3
	`          STR       X1,X1D
	j          STR       X2,X2D
	t          STR       I1,I1D
	~           SUB       X2,X2,X1
	�           SUB       Y2,Y2,Y1
	�           SUB       X3,X3,X1
	�           SUB       Y3,Y3,Y1
	�           SUB       I2,I2,I1
	�           SUB       I3,I3,I1
	�
	�; screen'=screen + 640*y1 
	�'          �adr     (SCREEN,SCREEN2)
	�'          LDR       SCREEN,[SCREEN]
	�(          ADD       Tmp,Y1,Y1,LSL #2
	�0          ADD       SCREEN,SCREEN,Tmp,LSL #7
	�&          STR       SCREEN,SCREEND


$          �adr     (Help,INVERS)
          STR       Y2,DY21
; calc  x2/y2
(,          LDR       Tmp,[Help,Y2,LSL #2]
2"          MUL       Tmp,X2,Tmp
<&          MOV       Tmp,Tmp,ASR #9
F           STR       Tmp,DX21
P           SUB       Y1,Y3,Y2
Z          STR       Y1,DY32
d; calc (x3-x2)/(y3-y2)
n,          LDR       Tmp,[Help,Y1,LSL #2]
x           SUB       X1,X3,X2
�"          MUL       Tmp,X1,Tmp
�&          MOV       Tmp,Tmp,ASR #9
�           STR       Tmp,DX32
�; calc dx1 = x3/y3
�,          LDR       Tmp,[Help,Y3,LSL #2]
�#          MUL       Tmp2,X3,Tmp
�(          MOV       Tmp2,Tmp2,ASR #9
�!          STR       Tmp2,DX31
�          
�&; shading increment in y direction
�,; calc di1 = i3/y3       ; i 8.6 di 8.16
�2          MOV       Tmp,Tmp,LSR #4       ; .17
�5          MUL       I3,Tmp,I3              ; 8.23
3          MOV       I3,I3,ASR #17-10     ; 8.16
%          MOV       I1,I1,LSL #10
'          ADD       I1,I1,I3,ASR #1
"          STR       I3,I3D
,          STR       I1,I1D
6
@'; calc 2^21/floor(abs(x2 - dx1*y2))
J8          MUL       Tmp,Y2,Tmp2         ; (x3/y3)*y2
T;          RSB       Tmp,Tmp,X2,LSL #12  ; x2-(x3/y3)*y2
^8          MOVS      Tmp,Tmp,ASR #10     ; int( ... )
h"          RSBMI     Tmp,Tmp,#0
r4          LDR       Tmp,[Help,Tmp,LSL #2]  ; .19
|          
�&; shading increment in x direction
�0; calc di2 = (i2-di1*y2) / abs( x2 - dx1*y2)
�/          MOV       I2,I2,LSL #10    ; 8.16
�           MUL       I3,Y2,I3
�-          RSB       I2,I3,I2       ; 8.16
�,          MOV       I2,I2,ASR #8   ; 8.8
�-          MOV       Tmp,Tmp,LSR #3  ; .16
�-          MUL       I2,Tmp,I2     ;  8.24
�%          MOV       I2,I2,ASR #16
�,          STR       I2,I2D         ; 8.8
�          LDR       I1,I1D
�'          ADD       I1,I1,I2,LSL #7
�          STR       I1,I1D
          
!          LDR       O,SCREEND

&          LDR       T,X1D
08          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
:"          ADD       L,L,#1<<11
D1          LDR       LA,DX31      ; dxl = dx31
N8          MOV       R,L          ; xr = (X1+0.5)*FIX
X1          LDR       RA,DX21      ; dxr = dx21
b6          ADD       L,L,LA,ASR #1  ; xl += 0.5*dxl
l6          ADD       R,R,RA,ASR #1  ; xr += 0.5*dxr
v          LDR       CT,DY21
�5          CMP       CT,#0          ; count = dy21
�          BLNE      PIECE
�
�          LDR       T,X2D
�2          MOV       R,T,LSL #12   ; dxr = dx32
�9          ADD       R,R,#1<<11    ; xr = (X2+0.5)*FIX
�          LDR       LA,DX31
�          LDR       RA,DX32
�5          ADD       R,R,RA,ASR #1  ; xr+= 0.5*dxr
�          LDR       CT,DY32
�4          CMP       CT,#0          ; count= dy32
�          BLNE      PIECE
�.end

          LDR       13,spd

&          LDMFD     13!,{0-12,PC}^

]

 =""

*

4

>� �piece

H
[OPT PASS

R.I1D DCD 0

\.I2D DCD 0

f.I3D DCD 0

p

z .PIECE STMFD     13!,{CT,14}

�

�; clip to top

�"          �adr     (T,SCREEN2)

�          LDR       T,[T]

�          CMP       O,T

�          BHS       eclip

�	.clip

�          ADD       L,L,LA

�          ADD       R,R,RA

�           ADD       O,O,#640

�; increment y shading

�

�          LDR       I,I1D
          LDR       H,I3D
          ADD       I,I,H
          STR       I,I1D
$
.           SUBS      CT,CT,#1
8#          LDMEQFD   13!,{CT,15}
B          CMP       O,T
L          BLO       clip
V
.eclip
`; clip to bottom
j$          ADD       T,T,#640*480
t          SUBS      T,T,O
~#          LDMLSFD   13!,{CT,15}
�'          ADD       CT,CT,CT,LSL #2
�#          CMP       CT,T,LSR #7
�#          MOVHI     CT,T,LSR #7
�?          CMP       L,R          ; left or right oriented ?
�          BGT       span_2
�          BAL       span
�.endspan
�           ADD       O,O,#640
�          ADD       L,L,LA
�          ADD       R,R,RA
�           SUBS      CT,CT,#5
�; increment y shading


          LDR       T,I1D
          LDR       I,I3D
          ADD       I,I,T
(          STR       I,I1D
2
<#          LDMEQFD   13!,{CT,15}
F	.span
P
Z
d; clip to right
n"          CMP       R,#640<<12
x&          ADD       XR,O,R,ASR #12
�!          ADDGT     XR,O,#640
�; Clip to left
�#          MOVS      T,L,ASR #12
�          ADD       XL,O,T
�          MOVLT     XL,O
�          RSBMI     T,T,#0
�
�
�); Load line shade and shade increment
�.          LDR       I,I1D           ; 10.4
�"          MOV       I,I,ASR #8
�.          LDR       H,I2D           ; 10.4
�          MLAMI     I,T,H,I

"          MOV       T,L,ASR #4
          �       T,T,#255
"          MUL       T,H,T
,$          SUB       I,I,T,ASR #8
6
@0          MOV       I,I,LSL #16      ; 10.22
J0          MOV       H,H,LSL #16      ; 10.22
T%          ADD       I,I,H,LSR #16
^
h          SUB       T,XR,XL
r          CMP       T,#3
|!          BLE       smallspan
�          TST       XL,#3
�           BEQ       endloop1
�.loop1    �mapbyte(C1)
�"          STRB      C1,[XL],#1
�          TST       XL,#3
�          BNE       loop1
�
�.endloop1 SUB       H,XR,XL
�"          MOVS      H,H,LSR #3
�          BCC       doit
�          �mapbyte(C1)
�          �mapbyte(T)
�&          ADD       C1,C1,T,LSL #8
          �mapbyte(T)
'          ADD       C1,C1,T,LSL #16
          �mapbyte(T)
&'          ADD       C1,C1,T,LSL #24
0"          STR       C1,[XL],#4
:          CMP       H,#0
D!.doit     BEQ       smallspan
N
X.loop2    �mapbyte(C1)
b          �mapbyte(T)
l&          ADD       C1,C1,T,LSL #8
v          �mapbyte(T)
�'          ADD       C1,C1,T,LSL #16
�          �mapbyte(T)
�'          ADD       C1,C1,T,LSL #24
�          �mapbyte(C2)
�          �mapbyte(T)
�&          ADD       C2,C2,T,LSL #8
�          �mapbyte(T)
�'          ADD       C2,C2,T,LSL #16
�          �mapbyte(T)
�'          ADD       C2,C2,T,LSL #24
�%          STMIA     (XL)!,{C1,C2}
�          SUBS      H,H,#1
�          BNE       loop2
.smallspan
          CMP       XL,XR
          BGE       endspan
           �mapbyte(C1)
*"          STRB      C1,[XL],#1
4          CMP       XL,XR
>          BEQ       endspan
H          �mapbyte(C1)
R"          STRB      C1,[XL],#1
\          CMP       XL,XR
f          BEQ       endspan
p          �mapbyte(C1)
z"          STRB      C1,[XL],#1
�          BAL       endspan
�.endspan_2
�           ADD       O,O,#640
�          ADD       L,L,LA
�          ADD       R,R,RA
�           SUBS      CT,CT,#5
�; increment y shading
�          LDR       T,I1D
�          LDR       I,I3D
�          ADD       I,I,T
�          STR       I,I1D
�#          LDMEQFD   13!,{CT,15}
�.span_2
; Clip to left
#          MOVS      T,R,ASR #12
&          ADDPL     XR,O,R,ASR #12
$          MOVMI     XR,O
.; clip to right
8          MOV       T,#640
B%          RSBS      T,T,L,ASR #12
L&          ADD       XL,O,L,ASR #12
V!          ADDPL     XL,O,#640
`); Load line shade and shade increment
j          LDR       I,I1D
t"          MOV       I,I,ASR #8
~          LDR       H,I2D
�          MLAPL     I,T,H,I
�
�"          MOV       T,L,ASR #4
�          �       T,T,#255
�          MUL       T,H,T
�.          ADD       I,I,T,ASR #8          
�          
�#          MOV       I,I,LSL #16
�#          MOV       H,H,LSL #16
�$          ADD       I,I,H,LSR#16
�          SUB       T,XL,XR
�          CMP       T,#3
#          BLE       smallspan_2

          TST       XL,#3
"          BEQ       endloop1_2
.loop1_2  �mapbyte(C1)
($          STRB      C1,[XL,#-1]!
2          TST       XL,#3
<          BNE       loop1_2
F.endloop1_2
P          SUB       H,XL,XR
Z"          MOVS      H,H,LSR #3
d          BCC       doit_2
n          �mapbyte(C1)
x          �mapbyte(T)
�'          ADD       C1,C1,T,LSL #24
�          �mapbyte(T)
�'          ADD       C1,C1,T,LSL #16
�          �mapbyte(T)
�&          ADD       C1,T,C1,ROR #8
�$          STR       C1,[XL,#-4]!
�          CMP       H,#0
�#.doit_2   BEQ       smallspan_2
�.loop2_2
�          �mapbyte(C2)
�          �mapbyte(T)
�'          ADD       C2,C2,T,LSL #24
�          �mapbyte(T)
'          ADD       C2,C2,T,LSL #16
          �mapbyte(T)
&          ADD       C2,T,C2,ROR #8
"          �mapbyte(C1)
,          �mapbyte(T)
6'          ADD       C1,C1,T,LSL #24
@          �mapbyte(T)
J'          ADD       C1,C1,T,LSL #16
T          �mapbyte(T)
^&          ADD       C1,T,C1,ROR #8
h%          STMDB     (XL)!,{C1,C2}
r          SUBS      H,H,#1
|          BNE       loop2_2
�.smallspan_2
�          CMP       XR,XL
�!          BGE       endspan_2
�          �mapbyte(C1)
�$          STRB      C1,[XL,#-1]!
�          CMP       XR,XL
�!          BEQ       endspan_2
�          �mapbyte(C1)
�$          STRB      C1,[XL,#-1]!
�          CMP       XR,XL
�!          BEQ       endspan_2
�          �mapbyte(C1)
�$          STRB      C1,[XL,#-1]!
!          BAL       endspan_2
]
=""
&
0� �mapbyte(reg)
:
[OPT PASS
D!      MOV       reg,I,LSR #24
N!      ADD       I,I,I,LSL #16
X]
b =""
�
00000000  0d 00 0a 0e f4 20 3e 47  6f 75 72 61 75 64 0d 00  |..... >Gouraud..|
00000010  14 17 f4 20 28 63 29 20  4a 61 6e 20 56 6c 69 65  |... (c) Jan Vlie|
00000020  74 69 6e 63 6b 0d 00 1e  04 0d 00 28 04 0d 00 32  |tinck......(...2|
00000030  0f ee 20 85 3a f6 3a f1  20 9e 3a e0 0d 00 3c 04  |.. .:.:. .:...<.|
00000040  0d 00 46 0b dd 20 f2 6d  61 69 6e 0d 00 50 0f de  |..F.. .main..P..|
00000050  20 51 25 20 32 30 30 30  30 30 0d 00 5a 13 de 20  | Q% 200000..Z.. |
00000060  49 4e 56 45 52 53 20 34  30 39 34 2a 34 0d 00 64  |INVERS 4094*4..d|
00000070  04 0d 00 6e 10 f2 63 61  6c 63 5f 69 6e 76 65 72  |...n..calc_inver|
00000080  73 0d 00 78 15 f2 67 6f  75 72 61 75 64 5f 74 72  |s..x..gouraud_tr|
00000090  69 61 6e 67 6c 65 0d 00  82 09 f2 6d 6f 64 65 0d  |iangle.....mode.|
000000a0  00 8c 0e d6 20 73 65 74  5f 6d 6f 64 65 0d 00 96  |.... set_mode...|
000000b0  0c 50 31 3d 32 2a af 2f  33 0d 00 a0 0f e3 20 49  |.P1=2*./3..... I|
000000c0  3d 31 20 b8 20 32 35 35  0d 00 aa 10 20 50 3d 49  |=1 . 255.... P=I|
000000d0  2f 32 35 36 2a 32 2a af  0d 00 b4 13 20 52 3d 31  |/256*2*..... R=1|
000000e0  32 38 2a 28 31 2b 9b 28  50 29 29 0d 00 be 18 20  |28*(1+.(P)).... |
000000f0  47 3d 31 32 38 2a 28 31  2b 9b 28 32 2a 50 2b 50  |G=128*(1+.(2*P+P|
00000100  31 29 29 0d 00 c8 16 20  42 3d 31 32 38 2a 28 31  |1)).... B=128*(1|
00000110  2b 9b 28 50 2d 50 31 29  29 0d 00 d2 0e 20 fb 20  |+.(P-P1)).... . |
00000120  49 2c 52 2c 47 2c 42 0d  00 dc 07 ed 20 49 0d 00  |I,R,G,B..... I..|
00000130  e6 09 d6 20 73 65 74 0d  01 04 04 0d 01 0e 04 0d  |... set.........|
00000140  01 18 05 f5 0d 01 22 25  f1 20 22 31 30 30 30 20  |......"%. "1000 |
00000150  52 41 4e 44 4f 4d 20 47  4f 55 52 41 55 44 20 54  |RANDOM GOURAUD T|
00000160  52 49 41 4e 47 4c 45 53  22 0d 01 2c 1c f1 20 22  |RIANGLES"..,.. "|
00000170  50 52 45 53 53 20 41 20  4b 45 59 20 54 4f 20 53  |PRESS A KEY TO S|
00000180  54 41 52 54 22 0d 01 36  09 57 3d a5 3a db 0d 01  |TART"..6.W=.:...|
00000190  40 07 d1 3d 30 0d 01 4a  0a 21 72 61 6e 3d b3 0d  |@..=0..J.!ran=..|
000001a0  01 54 0a d6 20 6d 61 69  6e 0d 01 5e 1c f1 20 22  |.T.. main..^.. "|
000001b0  49 4e 20 22 3b 91 2f 31  30 30 3b 22 20 53 45 43  |IN ";./100;" SEC|
000001c0  4f 4e 44 53 22 0d 01 68  07 fd 20 30 0d 01 72 05  |ONDS"..h.. 0..r.|
000001d0  e0 0d 01 7c 04 0d 01 86  04 0d 01 90 04 0d 01 9a  |...|............|
000001e0  04 0d 01 a4 12 dd 20 f2  63 61 6c 63 5f 69 6e 76  |...... .calc_inv|
000001f0  65 72 73 0d 01 ae 0b 4b  3d 31 3c 3c 32 31 0d 01  |ers....K=1<<21..|
00000200  b8 29 e3 20 49 3d 31 20  b8 20 34 30 39 33 3a 49  |.). I=1 . 4093:I|
00000210  4e 56 45 52 53 21 28 34  2a 49 29 3d 4b 2f 28 49  |NVERS!(4*I)=K/(I|
00000220  2b 30 2e 35 29 3a ed 0d  01 c2 05 e1 0d 01 cc 04  |+0.5):..........|
00000230  0d 01 d6 04 0d 01 e0 04  0d 01 ea 04 0d 01 f4 04  |................|
00000240  0d 01 fe 0b dd 20 f2 6d  6f 64 65 0d 02 08 21 58  |..... .mode...!X|
00000250  31 3d 30 3a 59 31 3d 31  3a 58 32 3d 32 3a 59 32  |1=0:Y1=1:X2=2:Y2|
00000260  3d 33 3a 58 33 3d 34 3a  59 33 3d 35 0d 02 12 12  |=3:X3=4:Y3=5....|
00000270  49 31 3d 36 3a 49 32 3d  37 3a 49 33 3d 38 0d 02  |I1=6:I2=7:I3=8..|
00000280  1c 0e 54 45 4c 3d 39 3a  46 3d 31 30 0d 02 26 11  |..TEL=9:F=10..&.|
00000290  e3 20 50 3d 30 20 b8 20  32 20 88 20 32 0d 02 30  |. P=0 . 2 . 2..0|
000002a0  09 50 25 3d 51 25 0d 02  3a 0a 5b 4f 50 54 20 50  |.P%=Q%..:.[OPT P|
000002b0  0d 02 44 04 0d 02 4e 04  0d 02 58 0f 2e 72 61 6e  |..D...N...X..ran|
000002c0  20 45 51 55 44 20 b3 0d  02 62 11 2e 6e 72 20 45  | EQUD ...b..nr E|
000002d0  51 55 44 20 31 30 30 30  0d 02 6c 09 2e 6d 61 69  |QUD 1000..l..mai|
000002e0  6e 0d 02 76 14 53 54 4d  46 44 20 52 31 33 21 2c  |n..v.STMFD R13!,|
000002f0  7b 52 31 34 7d 0d 02 80  0d 4c 44 52 20 46 2c 72  |{R14}....LDR F,r|
00000300  61 6e 0d 02 8a 0e 4c 44  52 20 54 45 4c 2c 6e 72  |an....LDR TEL,nr|
00000310  0d 02 94 0a 2e 6c 6f 6f  70 72 0d 02 9e 3c 2e 4c  |.....loopr...<.L|
00000320  31 20 41 44 44 20 46 2c  46 2c 46 2c 4c 53 4c 20  |1 ADD F,F,F,LSL |
00000330  23 38 3a 4d 4f 56 20 58  31 2c 46 2c 4c 53 52 20  |#8:MOV X1,F,LSR |
00000340  23 32 32 3a 43 4d 50 20  58 31 2c 23 36 34 30 3a  |#22:CMP X1,#640:|
00000350  42 48 53 20 4c 31 0d 02  a8 3c 2e 4b 31 20 41 44  |BHS L1...<.K1 AD|
00000360  44 20 46 2c 46 2c 46 2c  4c 53 4c 20 23 38 3a 4d  |D F,F,F,LSL #8:M|
00000370  4f 56 20 59 31 2c 46 2c  4c 53 52 20 23 32 33 3a  |OV Y1,F,LSR #23:|
00000380  43 4d 50 20 59 31 2c 23  34 38 30 3a 42 48 53 20  |CMP Y1,#480:BHS |
00000390  4b 31 0d 02 b2 3c 2e 4c  32 20 41 44 44 20 46 2c  |K1...<.L2 ADD F,|
000003a0  46 2c 46 2c 4c 53 4c 20  23 38 3a 4d 4f 56 20 58  |F,F,LSL #8:MOV X|
000003b0  32 2c 46 2c 4c 53 52 20  23 32 32 3a 43 4d 50 20  |2,F,LSR #22:CMP |
000003c0  58 32 2c 23 36 34 30 3a  42 48 53 20 4c 32 0d 02  |X2,#640:BHS L2..|
000003d0  bc 3c 2e 4b 32 20 41 44  44 20 46 2c 46 2c 46 2c  |.<.K2 ADD F,F,F,|
000003e0  4c 53 4c 20 23 38 3a 4d  4f 56 20 59 32 2c 46 2c  |LSL #8:MOV Y2,F,|
000003f0  4c 53 52 20 23 32 33 3a  43 4d 50 20 59 32 2c 23  |LSR #23:CMP Y2,#|
00000400  34 38 30 3a 42 48 53 20  4b 32 0d 02 c6 3c 2e 4c  |480:BHS K2...<.L|
00000410  33 20 41 44 44 20 46 2c  46 2c 46 2c 4c 53 4c 20  |3 ADD F,F,F,LSL |
00000420  23 38 3a 4d 4f 56 20 58  33 2c 46 2c 4c 53 52 20  |#8:MOV X3,F,LSR |
00000430  23 32 32 3a 43 4d 50 20  58 33 2c 23 36 34 30 3a  |#22:CMP X3,#640:|
00000440  42 48 53 20 4c 33 0d 02  d0 3c 2e 4b 33 20 41 44  |BHS L3...<.K3 AD|
00000450  44 20 46 2c 46 2c 46 2c  4c 53 4c 20 23 38 3a 4d  |D F,F,F,LSL #8:M|
00000460  4f 56 20 59 33 2c 46 2c  4c 53 52 20 23 32 33 3a  |OV Y3,F,LSR #23:|
00000470  43 4d 50 20 59 33 2c 23  34 38 30 3a 42 48 53 20  |CMP Y3,#480:BHS |
00000480  4b 33 0d 02 da 25 41 44  44 20 46 2c 46 2c 46 2c  |K3...%ADD F,F,F,|
00000490  4c 53 4c 20 23 38 3a 4d  4f 56 20 49 31 2c 46 2c  |LSL #8:MOV I1,F,|
000004a0  4c 53 52 20 23 31 38 0d  02 e4 25 41 44 44 20 46  |LSR #18...%ADD F|
000004b0  2c 46 2c 46 2c 4c 53 4c  20 23 38 3a 4d 4f 56 20  |,F,F,LSL #8:MOV |
000004c0  49 32 2c 46 2c 4c 53 52  20 23 31 38 0d 02 ee 25  |I2,F,LSR #18...%|
000004d0  41 44 44 20 46 2c 46 2c  46 2c 4c 53 4c 20 23 38  |ADD F,F,F,LSL #8|
000004e0  3a 4d 4f 56 20 49 33 2c  46 2c 4c 53 52 20 23 31  |:MOV I3,F,LSR #1|
000004f0  38 0d 02 f8 17 42 4c 20  67 6f 75 72 61 75 64 5f  |8....BL gouraud_|
00000500  74 72 69 61 6e 67 6c 65  0d 03 02 13 53 55 42 53  |triangle....SUBS|
00000510  20 54 45 4c 2c 54 45 4c  2c 23 31 0d 03 0c 0d 42  | TEL,TEL,#1....B|
00000520  4e 45 20 6c 6f 6f 70 72  0d 03 16 13 4c 44 4d 46  |NE loopr....LDMF|
00000530  44 20 52 31 33 21 2c 7b  50 43 7d 0d 03 20 05 5d  |D R13!,{PC}.. .]|
00000540  0d 03 2a 05 ed 0d 03 34  09 51 25 3d 50 25 0d 03  |..*....4.Q%=P%..|
00000550  3e 05 e1 0d 03 48 04 0d  03 52 04 0d 03 5c 04 0d  |>....H...R...\..|
00000560  03 66 17 dd 20 f2 67 6f  75 72 61 75 64 5f 74 72  |.f.. .gouraud_tr|
00000570  69 61 6e 67 6c 65 0d 03  70 16 ea 20 53 46 2c 46  |iangle..p.. SF,F|
00000580  49 58 2c 53 4d 2c 46 50  2c 49 2c 47 0d 03 7a 1b  |IX,SM,FP,I,G..z.|
00000590  ea 20 44 58 44 2c 44 59  44 2c 54 58 44 2c 54 59  |. DXD,DYD,TXD,TY|
000005a0  44 2c 58 44 2c 59 44 0d  03 84 04 0d 03 8e 12 53  |D,XD,YD........S|
000005b0  46 3d 31 32 3a 46 49 58  3d 32 5e 53 46 0d 03 98  |F=12:FIX=2^SF...|
000005c0  09 53 4d 3d 31 30 0d 03  a2 0c 46 50 3d 53 46 2b  |.SM=10....FP=SF+|
000005d0  53 4d 0d 03 ac 04 0d 03  b6 41 48 3d 30 3a 43 31  |SM.......AH=0:C1|
000005e0  3d 31 3a 4c 3d 32 3a 52  3d 33 3a 43 54 3d 34 3a  |=1:L=2:R=3:CT=4:|
000005f0  49 3d 35 3a 58 4c 3d 36  3a 58 52 3d 37 3a 43 32  |I=5:XL=6:XR=7:C2|
00000600  3d 38 3a 54 3d 39 3a 4f  3d 31 30 3a 4c 41 3d 31  |=8:T=9:O=10:LA=1|
00000610  31 3a 52 41 3d 31 32 0d  03 c0 04 0d 03 ca 21 58  |1:RA=12.......!X|
00000620  31 3d 30 3a 59 31 3d 31  3a 58 32 3d 32 3a 59 32  |1=0:Y1=1:X2=2:Y2|
00000630  3d 33 3a 58 33 3d 34 3a  59 33 3d 35 0d 03 d4 12  |=3:X3=4:Y3=5....|
00000640  49 31 3d 36 3a 49 32 3d  37 3a 49 33 3d 38 0d 03  |I1=6:I2=7:I3=8..|
00000650  de 1e 53 43 52 45 45 4e  3d 31 32 3a 42 49 54 4d  |..SCREEN=12:BITM|
00000660  41 50 3d 31 33 3a 54 6d  70 3d 31 34 0d 03 e8 04  |AP=13:Tmp=14....|
00000670  0d 03 f2 24 41 3d 30 3a  42 3d 31 3a 43 3d 39 3a  |...$A=0:B=1:C=9:|
00000680  44 3d 31 30 3a 54 6d 70  32 3d 31 32 3a 48 65 6c  |D=10:Tmp2=12:Hel|
00000690  70 3d 31 33 0d 03 fc 04  0d 04 06 14 e3 20 50 41  |p=13......... PA|
000006a0  53 53 3d 30 20 b8 20 32  20 88 20 32 0d 04 10 09  |SS=0 . 2 . 2....|
000006b0  50 25 3d 51 25 0d 04 1a  0d 5b 4f 50 54 20 50 41  |P%=Q%....[OPT PA|
000006c0  53 53 0d 04 24 1d 2e 53  43 52 45 45 4e 31 20 45  |SS..$..SCREEN1 E|
000006d0  51 55 44 20 31 34 38 3a  45 51 55 44 20 2d 31 0d  |QUD 148:EQUD -1.|
000006e0  04 2e 13 2e 53 43 52 45  45 4e 32 20 45 51 55 44  |....SCREEN2 EQUD|
000006f0  20 30 0d 04 38 08 2e 73  65 74 0d 04 42 12 41 44  | 0..8..set..B.AD|
00000700  52 20 52 30 2c 53 43 52  45 45 4e 31 0d 04 4c 12  |R R0,SCREEN1..L.|
00000710  41 44 52 20 52 31 2c 53  43 52 45 45 4e 32 0d 04  |ADR R1,SCREEN2..|
00000720  56 1d 53 57 49 20 22 4f  53 5f 52 65 61 64 56 64  |V.SWI "OS_ReadVd|
00000730  75 56 61 72 69 61 62 6c  65 73 22 0d 04 60 0d 4d  |uVariables"..`.M|
00000740  4f 56 20 31 35 2c 31 34  0d 04 6a 04 0d 04 74 13  |OV 15,14..j...t.|
00000750  2e 6d 6f 64 65 20 20 20  20 20 44 43 44 20 31 0d  |.mode     DCD 1.|
00000760  04 7e 15 20 20 20 20 20  20 20 20 20 20 44 43 44  |.~.          DCD|
00000770  20 36 34 30 0d 04 88 15  20 20 20 20 20 20 20 20  | 640....        |
00000780  20 20 44 43 44 20 34 38  30 0d 04 92 13 20 20 20  |  DCD 480....   |
00000790  20 20 20 20 20 20 20 44  43 44 20 33 0d 04 9c 14  |       DCD 3....|
000007a0  20 20 20 20 20 20 20 20  20 20 44 43 44 20 2d 31  |          DCD -1|
000007b0  0d 04 a6 1b 20 20 20 20  20 20 20 20 20 20 44 43  |....          DC|
000007c0  44 20 30 3a 44 43 44 20  31 32 38 0d 04 b0 1b 20  |D 0:DCD 128.... |
000007d0  20 20 20 20 20 20 20 20  20 44 43 44 20 33 3a 44  |         DCD 3:D|
000007e0  43 44 20 32 35 35 0d 04  ba 14 20 20 20 20 20 20  |CD 255....      |
000007f0  20 20 20 20 44 43 44 20  2d 31 0d 04 c4 0d 2e 73  |    DCD -1.....s|
00000800  65 74 5f 6d 6f 64 65 0d  04 ce 0d 4d 4f 56 20 52  |et_mode....MOV R|
00000810  30 2c 23 30 0d 04 d8 0f  41 44 52 20 52 31 2c 6d  |0,#0....ADR R1,m|
00000820  6f 64 65 0d 04 e2 17 53  57 49 20 22 4f 53 5f 53  |ode....SWI "OS_S|
00000830  63 72 65 65 6e 4d 6f 64  65 22 0d 04 ec 1a 53 57  |creenMode"....SW|
00000840  49 20 22 4f 53 5f 52 65  6d 6f 76 65 43 75 72 73  |I "OS_RemoveCurs|
00000850  6f 72 73 22 0d 04 f6 0e  4d 4f 56 20 70 63 2c 72  |ors"....MOV pc,r|
00000860  31 34 0d 05 00 04 0d 05  0a 0b a4 70 72 65 64 65  |14.........prede|
00000870  66 0d 05 14 15 2e 67 6f  75 72 61 75 64 5f 74 72  |f.....gouraud_tr|
00000880  69 61 6e 67 6c 65 0d 05  1e 0c a4 70 72 65 63 61  |iangle.....preca|
00000890  6c 63 0d 05 28 0a a4 70  69 65 63 65 0d 05 32 05  |lc..(..piece..2.|
000008a0  5d 0d 05 3c 05 ed 0d 05  46 09 51 25 3d 50 25 0d  |]..<....F.Q%=P%.|
000008b0  05 50 05 e1 0d 05 5a 04  0d 05 64 04 0d 05 6e 04  |.P....Z...d...n.|
000008c0  0d 05 78 04 0d 05 82 04  0d 05 8c 17 dd 20 a4 61  |..x.......... .a|
000008d0  64 72 28 72 65 67 2c 61  64 64 72 65 73 73 29 0d  |dr(reg,address).|
000008e0  05 96 17 6f 66 66 73 65  74 3d 61 64 64 72 65 73  |...offset=addres|
000008f0  73 2d 50 25 2d 38 0d 05  a0 10 e7 20 6f 66 66 73  |s-P%-8..... offs|
00000900  65 74 3e 30 20 8c 0d 05  aa 1a 6f 66 66 73 65 74  |et>0 .....offset|
00000910  31 3d 6f 66 66 73 65 74  20 80 20 32 35 35 2a 34  |1=offset . 255*4|
00000920  0d 05 b4 1e 6f 66 66 73  65 74 32 3d 6f 66 66 73  |....offset2=offs|
00000930  65 74 20 80 20 32 35 35  2a 32 35 36 2a 34 0d 05  |et . 255*256*4..|
00000940  be 22 6f 66 66 73 65 74  33 3d 6f 66 66 73 65 74  |."offset3=offset|
00000950  20 80 20 32 35 35 2a 32  35 36 2a 32 35 36 2a 34  | . 255*256*256*4|
00000960  0d 05 c8 39 20 20 20 20  20 20 20 20 20 20 20 20  |...9            |
00000970  20 20 20 5b 4f 50 54 20  50 41 53 53 3a 41 44 44  |   [OPT PASS:ADD|
00000980  20 20 20 20 20 20 20 72  65 67 2c 20 31 35 2c 23  |       reg, 15,#|
00000990  6f 66 66 73 65 74 31 3a  5d 0d 05 d2 38 e7 20 6f  |offset1:]...8. o|
000009a0  66 66 73 65 74 32 3c 3e  30 20 20 5b 4f 50 54 20  |ffset2<>0  [OPT |
000009b0  50 41 53 53 3a 41 44 44  20 20 20 20 20 20 20 72  |PASS:ADD       r|
000009c0  65 67 2c 72 65 67 2c 23  6f 66 66 73 65 74 32 3a  |eg,reg,#offset2:|
000009d0  5d 0d 05 dc 38 e7 20 6f  66 66 73 65 74 33 3c 3e  |]...8. offset3<>|
000009e0  30 20 20 5b 4f 50 54 20  50 41 53 53 3a 41 44 44  |0  [OPT PASS:ADD|
000009f0  20 20 20 20 20 20 20 72  65 67 2c 72 65 67 2c 23  |       reg,reg,#|
00000a00  6f 66 66 73 65 74 33 3a  5d 0d 05 e6 05 cc 0d 05  |offset3:].......|
00000a10  f0 1b 6f 66 66 73 65 74  31 3d 2d 6f 66 66 73 65  |..offset1=-offse|
00000a20  74 20 80 20 32 35 35 2a  34 0d 05 fa 1f 6f 66 66  |t . 255*4....off|
00000a30  73 65 74 32 3d 2d 6f 66  66 73 65 74 20 80 20 32  |set2=-offset . 2|
00000a40  35 35 2a 32 35 36 2a 34  0d 06 04 23 6f 66 66 73  |55*256*4...#offs|
00000a50  65 74 33 3d 2d 6f 66 66  73 65 74 20 80 20 32 35  |et3=-offset . 25|
00000a60  35 2a 32 35 36 2a 32 35  36 2a 34 0d 06 0e 39 20  |5*256*256*4...9 |
00000a70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 5b 4f  |              [O|
00000a80  50 54 20 50 41 53 53 3a  53 55 42 20 20 20 20 20  |PT PASS:SUB     |
00000a90  20 20 72 65 67 2c 20 31  35 2c 23 6f 66 66 73 65  |  reg, 15,#offse|
00000aa0  74 31 3a 5d 0d 06 18 38  e7 20 6f 66 66 73 65 74  |t1:]...8. offset|
00000ab0  32 3c 3e 30 20 20 5b 4f  50 54 20 50 41 53 53 3a  |2<>0  [OPT PASS:|
00000ac0  53 55 42 20 20 20 20 20  20 20 72 65 67 2c 72 65  |SUB       reg,re|
00000ad0  67 2c 23 6f 66 66 73 65  74 32 3a 5d 0d 06 22 38  |g,#offset2:].."8|
00000ae0  e7 20 6f 66 66 73 65 74  33 3c 3e 30 20 20 5b 4f  |. offset3<>0  [O|
00000af0  50 54 20 50 41 53 53 3a  53 55 42 20 20 20 20 20  |PT PASS:SUB     |
00000b00  20 20 72 65 67 2c 72 65  67 2c 23 6f 66 66 73 65  |  reg,reg,#offse|
00000b10  74 33 3a 5d 0d 06 2c 05  cd 0d 06 36 05 cd 0d 06  |t3:]..,....6....|
00000b20  40 07 3d 22 22 0d 06 4a  04 0d 06 54 0d dd 20 a4  |@.=""..J...T.. .|
00000b30  70 72 65 64 65 66 0d 06  5e 0d 5b 4f 50 54 20 50  |predef..^.[OPT P|
00000b40  41 53 53 0d 06 68 38 2e  73 61 76 65 5f 72 65 67  |ASS..h8.save_reg|
00000b50  73 20 44 43 44 20 30 3a  44 43 44 20 30 3a 44 43  |s DCD 0:DCD 0:DC|
00000b60  44 20 30 3a 44 43 44 20  30 3a 44 43 44 20 30 3a  |D 0:DCD 0:DCD 0:|
00000b70  44 43 44 20 30 3a 44 43  44 20 30 0d 06 72 04 0d  |DCD 0:DCD 0..r..|
00000b80  06 7c 0f 2e 58 31 44 20  45 51 55 44 20 30 0d 06  |.|..X1D EQUD 0..|
00000b90  86 0f 2e 58 32 44 20 45  51 55 44 20 30 0d 06 90  |...X2D EQUD 0...|
00000ba0  04 0d 06 9a 10 2e 44 58  32 31 20 45 51 55 44 20  |......DX21 EQUD |
00000bb0  30 0d 06 a4 10 2e 44 58  33 32 20 45 51 55 44 20  |0.....DX32 EQUD |
00000bc0  30 0d 06 ae 10 2e 44 58  33 31 20 45 51 55 44 20  |0.....DX31 EQUD |
00000bd0  30 0d 06 b8 04 0d 06 c2  10 2e 44 59 32 31 20 45  |0.........DY21 E|
00000be0  51 55 44 20 30 0d 06 cc  10 2e 44 59 33 32 20 45  |QUD 0.....DY32 E|
00000bf0  51 55 44 20 30 0d 06 d6  04 0d 06 e0 04 0d 06 ea  |QUD 0...........|
00000c00  13 2e 53 43 52 45 45 4e  44 20 45 51 55 44 20 30  |..SCREEND EQUD 0|
00000c10  0d 06 f4 13 2e 73 70 64  20 20 20 20 20 20 44 43  |.....spd      DC|
00000c20  44 20 30 0d 06 fe 04 0d  07 08 05 5d 0d 07 12 07  |D 0........]....|
00000c30  3d 22 22 0d 07 1c 04 0d  07 26 0e dd 20 a4 70 72  |=""......&.. .pr|
00000c40  65 63 61 6c 63 0d 07 30  0d 5b 4f 50 54 20 50 41  |ecalc..0.[OPT PA|
00000c50  53 53 0d 07 3a 31 3b f4  20 70 61 72 61 6d 74 65  |SS..:1;. paramte|
00000c60  72 73 20 52 30 2d 52 38  3d 78 30 2c 79 30 2c 78  |rs R0-R8=x0,y0,x|
00000c70  31 2c 79 31 2c 78 32 2c  79 32 2c 69 30 2c 69 31  |1,y1,x2,y2,i0,i1|
00000c80  2c 69 32 0d 07 44 04 0d  07 4e 25 20 20 20 20 20  |,i2..D...N%     |
00000c90  20 20 20 20 20 53 54 4d  46 44 20 20 20 20 20 31  |     STMFD     1|
00000ca0  33 21 2c 7b 30 2d 31 32  2c 31 34 7d 0d 07 58 1e  |3!,{0-12,14}..X.|
00000cb0  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00000cc0  20 20 20 20 31 33 2c 73  70 64 0d 07 62 04 0d 07  |    13,spd..b...|
00000cd0  c6 3a 3b 73 6f 72 74 20  76 65 72 74 69 63 65 73  |.:;sort vertices|
00000ce0  20 73 6f 20 74 68 61 74  20 79 31 2c 79 32 2c 79  | so that y1,y2,y|
00000cf0  33 20 61 72 65 20 69 6e  20 61 73 63 65 6e 64 69  |3 are in ascendi|
00000d00  6e 67 20 6f 72 64 65 72  0d 07 d0 1d 20 20 20 20  |ng order....    |
00000d10  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 20 20  |      CMP       |
00000d20  59 31 2c 59 32 0d 07 da  20 20 20 20 20 20 20 20  |Y1,Y2...        |
00000d30  20 20 20 42 4c 45 20 20  20 20 20 20 20 69 6e 6f  |   BLE       ino|
00000d40  72 64 65 72 31 0d 07 e4  45 3b 20 69 66 20 79 31  |rder1...E; if y1|
00000d50  20 3e 20 79 32 20 74 68  65 6e 20 73 77 61 70 28  | > y2 then swap(|
00000d60  78 31 2c 78 32 29 20 73  77 61 70 28 79 31 2c 79  |x1,x2) swap(y1,y|
00000d70  32 29 20 73 77 61 70 28  75 31 2c 75 32 29 20 73  |2) swap(u1,u2) s|
00000d80  77 61 70 28 76 31 2c 76  32 29 0d 07 ee 1e 20 20  |wap(v1,v2)....  |
00000d90  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00000da0  59 31 2c 59 31 2c 59 32  0d 07 f8 1e 20 20 20 20  |Y1,Y1,Y2....    |
00000db0  20 20 20 20 20 20 82 20  20 20 20 20 20 20 58 31  |      .       X1|
00000dc0  2c 58 31 2c 58 32 0d 08  02 1e 20 20 20 20 20 20  |,X1,X2....      |
00000dd0  20 20 20 20 82 20 20 20  20 20 20 20 49 31 2c 49  |    .       I1,I|
00000de0  31 2c 49 32 0d 08 0c 1e  20 20 20 20 20 20 20 20  |1,I2....        |
00000df0  20 20 82 20 20 20 20 20  20 20 59 32 2c 59 32 2c  |  .       Y2,Y2,|
00000e00  59 31 0d 08 16 1e 20 20  20 20 20 20 20 20 20 20  |Y1....          |
00000e10  82 20 20 20 20 20 20 20  58 32 2c 58 32 2c 58 31  |.       X2,X2,X1|
00000e20  0d 08 20 1e 20 20 20 20  20 20 20 20 20 20 82 20  |.. .          . |
00000e30  20 20 20 20 20 20 49 32  2c 49 32 2c 49 31 0d 08  |      I2,I2,I1..|
00000e40  2a 1e 20 20 20 20 20 20  20 20 20 20 82 20 20 20  |*.          .   |
00000e50  20 20 20 20 59 31 2c 59  31 2c 59 32 0d 08 34 1e  |    Y1,Y1,Y2..4.|
00000e60  20 20 20 20 20 20 20 20  20 20 82 20 20 20 20 20  |          .     |
00000e70  20 20 58 31 2c 58 31 2c  58 32 0d 08 3e 1e 20 20  |  X1,X1,X2..>.  |
00000e80  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00000e90  49 31 2c 49 31 2c 49 32  0d 08 48 0d 2e 69 6e 6f  |I1,I1,I2..H..ino|
00000ea0  72 64 65 72 31 0d 08 52  1d 20 20 20 20 20 20 20  |rder1..R.       |
00000eb0  20 20 20 43 4d 50 20 20  20 20 20 20 20 59 32 2c  |   CMP       Y2,|
00000ec0  59 33 0d 08 5c 20 20 20  20 20 20 20 20 20 20 20  |Y3..\           |
00000ed0  42 4c 45 20 20 20 20 20  20 20 69 6e 6f 72 64 65  |BLE       inorde|
00000ee0  72 32 0d 08 66 45 3b 20  69 66 20 79 32 20 3e 20  |r2..fE; if y2 > |
00000ef0  79 33 20 74 68 65 6e 20  73 77 61 70 28 78 32 2c  |y3 then swap(x2,|
00000f00  78 33 29 20 73 77 61 70  28 79 32 2c 79 33 29 20  |x3) swap(y2,y3) |
00000f10  73 77 61 70 28 75 32 2c  75 33 29 20 73 77 61 70  |swap(u2,u3) swap|
00000f20  28 76 32 2c 76 33 29 0d  08 70 1e 20 20 20 20 20  |(v2,v3)..p.     |
00000f30  20 20 20 20 20 82 20 20  20 20 20 20 20 59 32 2c  |     .       Y2,|
00000f40  59 32 2c 59 33 0d 08 7a  1e 20 20 20 20 20 20 20  |Y2,Y3..z.       |
00000f50  20 20 20 82 20 20 20 20  20 20 20 58 32 2c 58 32  |   .       X2,X2|
00000f60  2c 58 33 0d 08 84 1e 20  20 20 20 20 20 20 20 20  |,X3....         |
00000f70  20 82 20 20 20 20 20 20  20 49 32 2c 49 32 2c 49  | .       I2,I2,I|
00000f80  33 0d 08 8e 1e 20 20 20  20 20 20 20 20 20 20 82  |3....          .|
00000f90  20 20 20 20 20 20 20 59  33 2c 59 33 2c 59 32 0d  |       Y3,Y3,Y2.|
00000fa0  08 98 1e 20 20 20 20 20  20 20 20 20 20 82 20 20  |...          .  |
00000fb0  20 20 20 20 20 58 33 2c  58 33 2c 58 32 0d 08 a2  |     X3,X3,X2...|
00000fc0  1e 20 20 20 20 20 20 20  20 20 20 82 20 20 20 20  |.          .    |
00000fd0  20 20 20 49 33 2c 49 33  2c 49 32 0d 08 ac 1e 20  |   I3,I3,I2.... |
00000fe0  20 20 20 20 20 20 20 20  20 82 20 20 20 20 20 20  |         .      |
00000ff0  20 59 32 2c 59 32 2c 59  33 0d 08 b6 1e 20 20 20  | Y2,Y2,Y3....   |
00001000  20 20 20 20 20 20 20 82  20 20 20 20 20 20 20 58  |       .       X|
00001010  32 2c 58 32 2c 58 33 0d  08 c0 1e 20 20 20 20 20  |2,X2,X3....     |
00001020  20 20 20 20 20 82 20 20  20 20 20 20 20 49 32 2c  |     .       I2,|
00001030  49 32 2c 49 33 0d 08 ca  0d 2e 69 6e 6f 72 64 65  |I2,I3.....inorde|
00001040  72 32 0d 08 d4 1d 20 20  20 20 20 20 20 20 20 20  |r2....          |
00001050  43 4d 50 20 20 20 20 20  20 20 59 31 2c 59 32 0d  |CMP       Y1,Y2.|
00001060  08 de 20 20 20 20 20 20  20 20 20 20 20 42 4c 45  |..           BLE|
00001070  20 20 20 20 20 20 20 69  6e 6f 72 64 65 72 33 0d  |       inorder3.|
00001080  08 e8 2c 3b 20 69 66 20  28 79 31 20 3e 20 79 32  |..,; if (y1 > y2|
00001090  29 20 6f 72 20 28 79 31  3d 79 32 20 61 6e 64 20  |) or (y1=y2 and |
000010a0  78 31 3e 78 32 29 20 74  68 65 6e 0d 08 f2 35 3b  |x1>x2) then...5;|
000010b0  20 73 77 61 70 28 78 31  2c 78 32 29 20 73 77 61  | swap(x1,x2) swa|
000010c0  70 28 79 31 2c 79 32 29  20 73 77 61 70 28 75 31  |p(y1,y2) swap(u1|
000010d0  2c 75 32 29 20 73 77 61  70 28 76 31 2c 76 32 29  |,u2) swap(v1,v2)|
000010e0  0d 08 fc 1e 20 20 20 20  20 20 20 20 20 20 82 20  |....          . |
000010f0  20 20 20 20 20 20 59 31  2c 59 31 2c 59 32 0d 09  |      Y1,Y1,Y2..|
00001100  06 1e 20 20 20 20 20 20  20 20 20 20 82 20 20 20  |..          .   |
00001110  20 20 20 20 58 31 2c 58  31 2c 58 32 0d 09 10 1e  |    X1,X1,X2....|
00001120  20 20 20 20 20 20 20 20  20 20 82 20 20 20 20 20  |          .     |
00001130  20 20 49 31 2c 49 31 2c  49 32 0d 09 1a 1e 20 20  |  I1,I1,I2....  |
00001140  20 20 20 20 20 20 20 20  82 20 20 20 20 20 20 20  |        .       |
00001150  59 32 2c 59 32 2c 59 31  0d 09 24 1e 20 20 20 20  |Y2,Y2,Y1..$.    |
00001160  20 20 20 20 20 20 82 20  20 20 20 20 20 20 58 32  |      .       X2|
00001170  2c 58 32 2c 58 31 0d 09  2e 1e 20 20 20 20 20 20  |,X2,X1....      |
00001180  20 20 20 20 82 20 20 20  20 20 20 20 49 32 2c 49  |    .       I2,I|
00001190  32 2c 49 31 0d 09 38 1e  20 20 20 20 20 20 20 20  |2,I1..8.        |
000011a0  20 20 82 20 20 20 20 20  20 20 59 31 2c 59 31 2c  |  .       Y1,Y1,|
000011b0  59 32 0d 09 42 1e 20 20  20 20 20 20 20 20 20 20  |Y2..B.          |
000011c0  82 20 20 20 20 20 20 20  58 31 2c 58 31 2c 58 32  |.       X1,X1,X2|
000011d0  0d 09 4c 1e 20 20 20 20  20 20 20 20 20 20 82 20  |..L.          . |
000011e0  20 20 20 20 20 20 49 31  2c 49 31 2c 49 32 0d 09  |      I1,I1,I2..|
000011f0  56 0d 2e 69 6e 6f 72 64  65 72 33 0d 09 60 1e 20  |V..inorder3..`. |
00001200  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |         STR    |
00001210  20 20 20 58 31 2c 58 31  44 0d 09 6a 1e 20 20 20  |   X1,X1D..j.   |
00001220  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
00001230  20 58 32 2c 58 32 44 0d  09 74 1e 20 20 20 20 20  | X2,X2D..t.     |
00001240  20 20 20 20 20 53 54 52  20 20 20 20 20 20 20 49  |     STR       I|
00001250  31 2c 49 31 44 0d 09 7e  20 20 20 20 20 20 20 20  |1,I1D..~        |
00001260  20 20 20 53 55 42 20 20  20 20 20 20 20 58 32 2c  |   SUB       X2,|
00001270  58 32 2c 58 31 0d 09 88  20 20 20 20 20 20 20 20  |X2,X1...        |
00001280  20 20 20 53 55 42 20 20  20 20 20 20 20 59 32 2c  |   SUB       Y2,|
00001290  59 32 2c 59 31 0d 09 92  20 20 20 20 20 20 20 20  |Y2,Y1...        |
000012a0  20 20 20 53 55 42 20 20  20 20 20 20 20 58 33 2c  |   SUB       X3,|
000012b0  58 33 2c 58 31 0d 09 9c  20 20 20 20 20 20 20 20  |X3,X1...        |
000012c0  20 20 20 53 55 42 20 20  20 20 20 20 20 59 33 2c  |   SUB       Y3,|
000012d0  59 33 2c 59 31 0d 09 a6  20 20 20 20 20 20 20 20  |Y3,Y1...        |
000012e0  20 20 20 53 55 42 20 20  20 20 20 20 20 49 32 2c  |   SUB       I2,|
000012f0  49 32 2c 49 31 0d 09 b0  20 20 20 20 20 20 20 20  |I2,I1...        |
00001300  20 20 20 53 55 42 20 20  20 20 20 20 20 49 33 2c  |   SUB       I3,|
00001310  49 33 2c 49 31 0d 09 ba  04 0d 09 c4 1e 3b 20 73  |I3,I1........; s|
00001320  63 72 65 65 6e 27 3d 73  63 72 65 65 6e 20 2b 20  |creen'=screen + |
00001330  36 34 30 2a 79 31 20 0d  09 ce 27 20 20 20 20 20  |640*y1 ...'     |
00001340  20 20 20 20 20 a4 61 64  72 20 20 20 20 20 28 53  |     .adr     (S|
00001350  43 52 45 45 4e 2c 53 43  52 45 45 4e 32 29 0d 09  |CREEN,SCREEN2)..|
00001360  d8 27 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |.'          LDR |
00001370  20 20 20 20 20 20 53 43  52 45 45 4e 2c 5b 53 43  |      SCREEN,[SC|
00001380  52 45 45 4e 5d 0d 09 e2  28 20 20 20 20 20 20 20  |REEN]...(       |
00001390  20 20 20 41 44 44 20 20  20 20 20 20 20 54 6d 70  |   ADD       Tmp|
000013a0  2c 59 31 2c 59 31 2c 4c  53 4c 20 23 32 0d 09 ec  |,Y1,Y1,LSL #2...|
000013b0  30 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |0          ADD  |
000013c0  20 20 20 20 20 53 43 52  45 45 4e 2c 53 43 52 45  |     SCREEN,SCRE|
000013d0  45 4e 2c 54 6d 70 2c 4c  53 4c 20 23 37 0d 09 f6  |EN,Tmp,LSL #7...|
000013e0  26 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |&          STR  |
000013f0  20 20 20 20 20 53 43 52  45 45 4e 2c 53 43 52 45  |     SCREEN,SCRE|
00001400  45 4e 44 0d 0a 00 04 0d  0a 0a 24 20 20 20 20 20  |END.......$     |
00001410  20 20 20 20 20 a4 61 64  72 20 20 20 20 20 28 48  |     .adr     (H|
00001420  65 6c 70 2c 49 4e 56 45  52 53 29 0d 0a 14 1f 20  |elp,INVERS).... |
00001430  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |         STR    |
00001440  20 20 20 59 32 2c 44 59  32 31 0d 0a 1e 11 3b 20  |   Y2,DY21....; |
00001450  63 61 6c 63 20 20 78 32  2f 79 32 0d 0a 28 2c 20  |calc  x2/y2..(, |
00001460  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |         LDR    |
00001470  20 20 20 54 6d 70 2c 5b  48 65 6c 70 2c 59 32 2c  |   Tmp,[Help,Y2,|
00001480  4c 53 4c 20 23 32 5d 0d  0a 32 22 20 20 20 20 20  |LSL #2]..2"     |
00001490  20 20 20 20 20 4d 55 4c  20 20 20 20 20 20 20 54  |     MUL       T|
000014a0  6d 70 2c 58 32 2c 54 6d  70 0d 0a 3c 26 20 20 20  |mp,X2,Tmp..<&   |
000014b0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 20  |       MOV      |
000014c0  20 54 6d 70 2c 54 6d 70  2c 41 53 52 20 23 39 0d  | Tmp,Tmp,ASR #9.|
000014d0  0a 46 20 20 20 20 20 20  20 20 20 20 20 53 54 52  |.F           STR|
000014e0  20 20 20 20 20 20 20 54  6d 70 2c 44 58 32 31 0d  |       Tmp,DX21.|
000014f0  0a 50 20 20 20 20 20 20  20 20 20 20 20 53 55 42  |.P           SUB|
00001500  20 20 20 20 20 20 20 59  31 2c 59 33 2c 59 32 0d  |       Y1,Y3,Y2.|
00001510  0a 5a 1f 20 20 20 20 20  20 20 20 20 20 53 54 52  |.Z.          STR|
00001520  20 20 20 20 20 20 20 59  31 2c 44 59 33 32 0d 0a  |       Y1,DY32..|
00001530  64 1a 3b 20 63 61 6c 63  20 28 78 33 2d 78 32 29  |d.; calc (x3-x2)|
00001540  2f 28 79 33 2d 79 32 29  0d 0a 6e 2c 20 20 20 20  |/(y3-y2)..n,    |
00001550  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 20 20  |      LDR       |
00001560  54 6d 70 2c 5b 48 65 6c  70 2c 59 31 2c 4c 53 4c  |Tmp,[Help,Y1,LSL|
00001570  20 23 32 5d 0d 0a 78 20  20 20 20 20 20 20 20 20  | #2]..x         |
00001580  20 20 53 55 42 20 20 20  20 20 20 20 58 31 2c 58  |  SUB       X1,X|
00001590  33 2c 58 32 0d 0a 82 22  20 20 20 20 20 20 20 20  |3,X2..."        |
000015a0  20 20 4d 55 4c 20 20 20  20 20 20 20 54 6d 70 2c  |  MUL       Tmp,|
000015b0  58 31 2c 54 6d 70 0d 0a  8c 26 20 20 20 20 20 20  |X1,Tmp...&      |
000015c0  20 20 20 20 4d 4f 56 20  20 20 20 20 20 20 54 6d  |    MOV       Tm|
000015d0  70 2c 54 6d 70 2c 41 53  52 20 23 39 0d 0a 96 20  |p,Tmp,ASR #9... |
000015e0  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
000015f0  20 20 20 20 54 6d 70 2c  44 58 33 32 0d 0a a0 16  |    Tmp,DX32....|
00001600  3b 20 63 61 6c 63 20 64  78 31 20 3d 20 78 33 2f  |; calc dx1 = x3/|
00001610  79 33 0d 0a aa 2c 20 20  20 20 20 20 20 20 20 20  |y3...,          |
00001620  4c 44 52 20 20 20 20 20  20 20 54 6d 70 2c 5b 48  |LDR       Tmp,[H|
00001630  65 6c 70 2c 59 33 2c 4c  53 4c 20 23 32 5d 0d 0a  |elp,Y3,LSL #2]..|
00001640  b4 23 20 20 20 20 20 20  20 20 20 20 4d 55 4c 20  |.#          MUL |
00001650  20 20 20 20 20 20 54 6d  70 32 2c 58 33 2c 54 6d  |      Tmp2,X3,Tm|
00001660  70 0d 0a be 28 20 20 20  20 20 20 20 20 20 20 4d  |p...(          M|
00001670  4f 56 20 20 20 20 20 20  20 54 6d 70 32 2c 54 6d  |OV       Tmp2,Tm|
00001680  70 32 2c 41 53 52 20 23  39 0d 0a c8 21 20 20 20  |p2,ASR #9...!   |
00001690  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 20  |       STR      |
000016a0  20 54 6d 70 32 2c 44 58  33 31 0d 0a d2 0e 20 20  | Tmp2,DX31....  |
000016b0  20 20 20 20 20 20 20 20  0d 0a dc 26 3b 20 73 68  |        ...&; sh|
000016c0  61 64 69 6e 67 20 69 6e  63 72 65 6d 65 6e 74 20  |ading increment |
000016d0  69 6e 20 79 20 64 69 72  65 63 74 69 6f 6e 0d 0a  |in y direction..|
000016e0  e6 2c 3b 20 63 61 6c 63  20 64 69 31 20 3d 20 69  |.,; calc di1 = i|
000016f0  33 2f 79 33 20 20 20 20  20 20 20 3b 20 69 20 38  |3/y3       ; i 8|
00001700  2e 36 20 64 69 20 38 2e  31 36 0d 0a f0 32 20 20  |.6 di 8.16...2  |
00001710  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001720  20 20 54 6d 70 2c 54 6d  70 2c 4c 53 52 20 23 34  |  Tmp,Tmp,LSR #4|
00001730  20 20 20 20 20 20 20 3b  20 2e 31 37 0d 0a fa 35  |       ; .17...5|
00001740  20 20 20 20 20 20 20 20  20 20 4d 55 4c 20 20 20  |          MUL   |
00001750  20 20 20 20 49 33 2c 54  6d 70 2c 49 33 20 20 20  |    I3,Tmp,I3   |
00001760  20 20 20 20 20 20 20 20  20 20 20 3b 20 38 2e 32  |           ; 8.2|
00001770  33 0d 0b 04 33 20 20 20  20 20 20 20 20 20 20 4d  |3...3          M|
00001780  4f 56 20 20 20 20 20 20  20 49 33 2c 49 33 2c 41  |OV       I3,I3,A|
00001790  53 52 20 23 31 37 2d 31  30 20 20 20 20 20 3b 20  |SR #17-10     ; |
000017a0  38 2e 31 36 0d 0b 0e 25  20 20 20 20 20 20 20 20  |8.16...%        |
000017b0  20 20 4d 4f 56 20 20 20  20 20 20 20 49 31 2c 49  |  MOV       I1,I|
000017c0  31 2c 4c 53 4c 20 23 31  30 0d 0b 18 27 20 20 20  |1,LSL #10...'   |
000017d0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
000017e0  20 49 31 2c 49 31 2c 49  33 2c 41 53 52 20 23 31  | I1,I1,I3,ASR #1|
000017f0  0d 0b 22 1e 20 20 20 20  20 20 20 20 20 20 53 54  |..".          ST|
00001800  52 20 20 20 20 20 20 20  49 33 2c 49 33 44 0d 0b  |R       I3,I3D..|
00001810  2c 1e 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |,.          STR |
00001820  20 20 20 20 20 20 49 31  2c 49 31 44 0d 0b 36 04  |      I1,I1D..6.|
00001830  0d 0b 40 27 3b 20 63 61  6c 63 20 32 5e 32 31 2f  |..@'; calc 2^21/|
00001840  66 6c 6f 6f 72 28 61 62  73 28 78 32 20 2d 20 64  |floor(abs(x2 - d|
00001850  78 31 2a 79 32 29 29 0d  0b 4a 38 20 20 20 20 20  |x1*y2))..J8     |
00001860  20 20 20 20 20 4d 55 4c  20 20 20 20 20 20 20 54  |     MUL       T|
00001870  6d 70 2c 59 32 2c 54 6d  70 32 20 20 20 20 20 20  |mp,Y2,Tmp2      |
00001880  20 20 20 3b 20 28 78 33  2f 79 33 29 2a 79 32 0d  |   ; (x3/y3)*y2.|
00001890  0b 54 3b 20 20 20 20 20  20 20 20 20 20 52 53 42  |.T;          RSB|
000018a0  20 20 20 20 20 20 20 54  6d 70 2c 54 6d 70 2c 58  |       Tmp,Tmp,X|
000018b0  32 2c 4c 53 4c 20 23 31  32 20 20 3b 20 78 32 2d  |2,LSL #12  ; x2-|
000018c0  28 78 33 2f 79 33 29 2a  79 32 0d 0b 5e 38 20 20  |(x3/y3)*y2..^8  |
000018d0  20 20 20 20 20 20 20 20  4d 4f 56 53 20 20 20 20  |        MOVS    |
000018e0  20 20 54 6d 70 2c 54 6d  70 2c 41 53 52 20 23 31  |  Tmp,Tmp,ASR #1|
000018f0  30 20 20 20 20 20 3b 20  69 6e 74 28 20 2e 2e 2e  |0     ; int( ...|
00001900  20 29 0d 0b 68 22 20 20  20 20 20 20 20 20 20 20  | )..h"          |
00001910  52 53 42 4d 49 20 20 20  20 20 54 6d 70 2c 54 6d  |RSBMI     Tmp,Tm|
00001920  70 2c 23 30 0d 0b 72 34  20 20 20 20 20 20 20 20  |p,#0..r4        |
00001930  20 20 4c 44 52 20 20 20  20 20 20 20 54 6d 70 2c  |  LDR       Tmp,|
00001940  5b 48 65 6c 70 2c 54 6d  70 2c 4c 53 4c 20 23 32  |[Help,Tmp,LSL #2|
00001950  5d 20 20 3b 20 2e 31 39  0d 0b 7c 0e 20 20 20 20  |]  ; .19..|.    |
00001960  20 20 20 20 20 20 0d 0b  86 26 3b 20 73 68 61 64  |      ...&; shad|
00001970  69 6e 67 20 69 6e 63 72  65 6d 65 6e 74 20 69 6e  |ing increment in|
00001980  20 78 20 64 69 72 65 63  74 69 6f 6e 0d 0b 90 30  | x direction...0|
00001990  3b 20 63 61 6c 63 20 64  69 32 20 3d 20 28 69 32  |; calc di2 = (i2|
000019a0  2d 64 69 31 2a 79 32 29  20 2f 20 61 62 73 28 20  |-di1*y2) / abs( |
000019b0  78 32 20 2d 20 64 78 31  2a 79 32 29 0d 0b 9a 2f  |x2 - dx1*y2).../|
000019c0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
000019d0  20 20 20 20 49 32 2c 49  32 2c 4c 53 4c 20 23 31  |    I2,I2,LSL #1|
000019e0  30 20 20 20 20 3b 20 38  2e 31 36 0d 0b a4 20 20  |0    ; 8.16...  |
000019f0  20 20 20 20 20 20 20 20  20 4d 55 4c 20 20 20 20  |         MUL    |
00001a00  20 20 20 49 33 2c 59 32  2c 49 33 0d 0b ae 2d 20  |   I3,Y2,I3...- |
00001a10  20 20 20 20 20 20 20 20  20 52 53 42 20 20 20 20  |         RSB    |
00001a20  20 20 20 49 32 2c 49 33  2c 49 32 20 20 20 20 20  |   I2,I3,I2     |
00001a30  20 20 3b 20 38 2e 31 36  0d 0b b8 2c 20 20 20 20  |  ; 8.16...,    |
00001a40  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
00001a50  49 32 2c 49 32 2c 41 53  52 20 23 38 20 20 20 3b  |I2,I2,ASR #8   ;|
00001a60  20 38 2e 38 0d 0b c2 2d  20 20 20 20 20 20 20 20  | 8.8...-        |
00001a70  20 20 4d 4f 56 20 20 20  20 20 20 20 54 6d 70 2c  |  MOV       Tmp,|
00001a80  54 6d 70 2c 4c 53 52 20  23 33 20 20 3b 20 2e 31  |Tmp,LSR #3  ; .1|
00001a90  36 0d 0b cc 2d 20 20 20  20 20 20 20 20 20 20 4d  |6...-          M|
00001aa0  55 4c 20 20 20 20 20 20  20 49 32 2c 54 6d 70 2c  |UL       I2,Tmp,|
00001ab0  49 32 20 20 20 20 20 3b  20 20 38 2e 32 34 0d 0b  |I2     ;  8.24..|
00001ac0  d6 25 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |.%          MOV |
00001ad0  20 20 20 20 20 20 49 32  2c 49 32 2c 41 53 52 20  |      I2,I2,ASR |
00001ae0  23 31 36 0d 0b e0 2c 20  20 20 20 20 20 20 20 20  |#16...,         |
00001af0  20 53 54 52 20 20 20 20  20 20 20 49 32 2c 49 32  | STR       I2,I2|
00001b00  44 20 20 20 20 20 20 20  20 20 3b 20 38 2e 38 0d  |D         ; 8.8.|
00001b10  0b ea 1e 20 20 20 20 20  20 20 20 20 20 4c 44 52  |...          LDR|
00001b20  20 20 20 20 20 20 20 49  31 2c 49 31 44 0d 0b f4  |       I1,I1D...|
00001b30  27 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |'          ADD  |
00001b40  20 20 20 20 20 49 31 2c  49 31 2c 49 32 2c 4c 53  |     I1,I1,I2,LS|
00001b50  4c 20 23 37 0d 0b fe 1e  20 20 20 20 20 20 20 20  |L #7....        |
00001b60  20 20 53 54 52 20 20 20  20 20 20 20 49 31 2c 49  |  STR       I1,I|
00001b70  31 44 0d 0c 08 0e 20 20  20 20 20 20 20 20 20 20  |1D....          |
00001b80  0d 0c 12 21 20 20 20 20  20 20 20 20 20 20 4c 44  |...!          LD|
00001b90  52 20 20 20 20 20 20 20  4f 2c 53 43 52 45 45 4e  |R       O,SCREEN|
00001ba0  44 0d 0c 1c 04 0d 0c 26  1d 20 20 20 20 20 20 20  |D......&.       |
00001bb0  20 20 20 4c 44 52 20 20  20 20 20 20 20 54 2c 58  |   LDR       T,X|
00001bc0  31 44 0d 0c 30 38 20 20  20 20 20 20 20 20 20 20  |1D..08          |
00001bd0  4d 4f 56 20 20 20 20 20  20 20 4c 2c 54 2c 4c 53  |MOV       L,T,LS|
00001be0  4c 20 23 31 32 20 20 3b  20 78 6c 20 3d 20 28 58  |L #12  ; xl = (X|
00001bf0  31 2b 30 2e 35 29 2a 46  49 58 0d 0c 3a 22 20 20  |1+0.5)*FIX..:"  |
00001c00  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00001c10  20 20 4c 2c 4c 2c 23 31  3c 3c 31 31 0d 0c 44 31  |  L,L,#1<<11..D1|
00001c20  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00001c30  20 20 20 20 4c 41 2c 44  58 33 31 20 20 20 20 20  |    LA,DX31     |
00001c40  20 3b 20 64 78 6c 20 3d  20 64 78 33 31 0d 0c 4e  | ; dxl = dx31..N|
00001c50  38 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |8          MOV  |
00001c60  20 20 20 20 20 52 2c 4c  20 20 20 20 20 20 20 20  |     R,L        |
00001c70  20 20 3b 20 78 72 20 3d  20 28 58 31 2b 30 2e 35  |  ; xr = (X1+0.5|
00001c80  29 2a 46 49 58 0d 0c 58  31 20 20 20 20 20 20 20  |)*FIX..X1       |
00001c90  20 20 20 4c 44 52 20 20  20 20 20 20 20 52 41 2c  |   LDR       RA,|
00001ca0  44 58 32 31 20 20 20 20  20 20 3b 20 64 78 72 20  |DX21      ; dxr |
00001cb0  3d 20 64 78 32 31 0d 0c  62 36 20 20 20 20 20 20  |= dx21..b6      |
00001cc0  20 20 20 20 41 44 44 20  20 20 20 20 20 20 4c 2c  |    ADD       L,|
00001cd0  4c 2c 4c 41 2c 41 53 52  20 23 31 20 20 3b 20 78  |L,LA,ASR #1  ; x|
00001ce0  6c 20 2b 3d 20 30 2e 35  2a 64 78 6c 0d 0c 6c 36  |l += 0.5*dxl..l6|
00001cf0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00001d00  20 20 20 20 52 2c 52 2c  52 41 2c 41 53 52 20 23  |    R,R,RA,ASR #|
00001d10  31 20 20 3b 20 78 72 20  2b 3d 20 30 2e 35 2a 64  |1  ; xr += 0.5*d|
00001d20  78 72 0d 0c 76 1f 20 20  20 20 20 20 20 20 20 20  |xr..v.          |
00001d30  4c 44 52 20 20 20 20 20  20 20 43 54 2c 44 59 32  |LDR       CT,DY2|
00001d40  31 0d 0c 80 35 20 20 20  20 20 20 20 20 20 20 43  |1...5          C|
00001d50  4d 50 20 20 20 20 20 20  20 43 54 2c 23 30 20 20  |MP       CT,#0  |
00001d60  20 20 20 20 20 20 20 20  3b 20 63 6f 75 6e 74 20  |        ; count |
00001d70  3d 20 64 79 32 31 0d 0c  8a 1d 20 20 20 20 20 20  |= dy21....      |
00001d80  20 20 20 20 42 4c 4e 45  20 20 20 20 20 20 50 49  |    BLNE      PI|
00001d90  45 43 45 0d 0c 94 04 0d  0c 9e 1d 20 20 20 20 20  |ECE........     |
00001da0  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 54  |     LDR       T|
00001db0  2c 58 32 44 0d 0c a8 32  20 20 20 20 20 20 20 20  |,X2D...2        |
00001dc0  20 20 4d 4f 56 20 20 20  20 20 20 20 52 2c 54 2c  |  MOV       R,T,|
00001dd0  4c 53 4c 20 23 31 32 20  20 20 3b 20 64 78 72 20  |LSL #12   ; dxr |
00001de0  3d 20 64 78 33 32 0d 0c  b2 39 20 20 20 20 20 20  |= dx32...9      |
00001df0  20 20 20 20 41 44 44 20  20 20 20 20 20 20 52 2c  |    ADD       R,|
00001e00  52 2c 23 31 3c 3c 31 31  20 20 20 20 3b 20 78 72  |R,#1<<11    ; xr|
00001e10  20 3d 20 28 58 32 2b 30  2e 35 29 2a 46 49 58 0d  | = (X2+0.5)*FIX.|
00001e20  0c bc 1f 20 20 20 20 20  20 20 20 20 20 4c 44 52  |...          LDR|
00001e30  20 20 20 20 20 20 20 4c  41 2c 44 58 33 31 0d 0c  |       LA,DX31..|
00001e40  c6 1f 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |..          LDR |
00001e50  20 20 20 20 20 20 52 41  2c 44 58 33 32 0d 0c d0  |      RA,DX32...|
00001e60  35 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |5          ADD  |
00001e70  20 20 20 20 20 52 2c 52  2c 52 41 2c 41 53 52 20  |     R,R,RA,ASR |
00001e80  23 31 20 20 3b 20 78 72  2b 3d 20 30 2e 35 2a 64  |#1  ; xr+= 0.5*d|
00001e90  78 72 0d 0c da 1f 20 20  20 20 20 20 20 20 20 20  |xr....          |
00001ea0  4c 44 52 20 20 20 20 20  20 20 43 54 2c 44 59 33  |LDR       CT,DY3|
00001eb0  32 0d 0c e4 34 20 20 20  20 20 20 20 20 20 20 43  |2...4          C|
00001ec0  4d 50 20 20 20 20 20 20  20 43 54 2c 23 30 20 20  |MP       CT,#0  |
00001ed0  20 20 20 20 20 20 20 20  3b 20 63 6f 75 6e 74 3d  |        ; count=|
00001ee0  20 64 79 33 32 0d 0c ee  1d 20 20 20 20 20 20 20  | dy32....       |
00001ef0  20 20 20 42 4c 4e 45 20  20 20 20 20 20 50 49 45  |   BLNE      PIE|
00001f00  43 45 0d 0c f8 08 2e 65  6e 64 0d 0d 02 1e 20 20  |CE.....end....  |
00001f10  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00001f20  20 20 31 33 2c 73 70 64  0d 0d 0c 26 20 20 20 20  |  13,spd...&    |
00001f30  20 20 20 20 20 20 4c 44  4d 46 44 20 20 20 20 20  |      LDMFD     |
00001f40  31 33 21 2c 7b 30 2d 31  32 2c 50 43 7d 5e 0d 0d  |13!,{0-12,PC}^..|
00001f50  16 05 5d 0d 0d 20 07 3d  22 22 0d 0d 2a 04 0d 0d  |..].. .=""..*...|
00001f60  34 04 0d 0d 3e 0c dd 20  a4 70 69 65 63 65 0d 0d  |4...>.. .piece..|
00001f70  48 0d 5b 4f 50 54 20 50  41 53 53 0d 0d 52 0e 2e  |H.[OPT PASS..R..|
00001f80  49 31 44 20 44 43 44 20  30 0d 0d 5c 0e 2e 49 32  |I1D DCD 0..\..I2|
00001f90  44 20 44 43 44 20 30 0d  0d 66 0e 2e 49 33 44 20  |D DCD 0..f..I3D |
00001fa0  44 43 44 20 30 0d 0d 70  04 0d 0d 7a 20 2e 50 49  |DCD 0..p...z .PI|
00001fb0  45 43 45 20 53 54 4d 46  44 20 20 20 20 20 31 33  |ECE STMFD     13|
00001fc0  21 2c 7b 43 54 2c 31 34  7d 0d 0d 84 04 0d 0d 8e  |!,{CT,14}.......|
00001fd0  11 3b 20 63 6c 69 70 20  74 6f 20 74 6f 70 0d 0d  |.; clip to top..|
00001fe0  98 22 20 20 20 20 20 20  20 20 20 20 a4 61 64 72  |."          .adr|
00001ff0  20 20 20 20 20 28 54 2c  53 43 52 45 45 4e 32 29  |     (T,SCREEN2)|
00002000  0d 0d a2 1d 20 20 20 20  20 20 20 20 20 20 4c 44  |....          LD|
00002010  52 20 20 20 20 20 20 20  54 2c 5b 54 5d 0d 0d ac  |R       T,[T]...|
00002020  1b 20 20 20 20 20 20 20  20 20 20 43 4d 50 20 20  |.          CMP  |
00002030  20 20 20 20 20 4f 2c 54  0d 0d b6 1d 20 20 20 20  |     O,T....    |
00002040  20 20 20 20 20 20 42 48  53 20 20 20 20 20 20 20  |      BHS       |
00002050  65 63 6c 69 70 0d 0d c0  09 2e 63 6c 69 70 0d 0d  |eclip.....clip..|
00002060  ca 1e 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |..          ADD |
00002070  20 20 20 20 20 20 4c 2c  4c 2c 4c 41 0d 0d d4 1e  |      L,L,LA....|
00002080  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002090  20 20 20 20 52 2c 52 2c  52 41 0d 0d de 20 20 20  |    R,R,RA...   |
000020a0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000020b0  20 20 4f 2c 4f 2c 23 36  34 30 0d 0d e8 19 3b 20  |  O,O,#640....; |
000020c0  69 6e 63 72 65 6d 65 6e  74 20 79 20 73 68 61 64  |increment y shad|
000020d0  69 6e 67 0d 0d f2 04 0d  0d fc 1d 20 20 20 20 20  |ing........     |
000020e0  20 20 20 20 20 4c 44 52  20 20 20 20 20 20 20 49  |     LDR       I|
000020f0  2c 49 31 44 0d 0e 06 1d  20 20 20 20 20 20 20 20  |,I1D....        |
00002100  20 20 4c 44 52 20 20 20  20 20 20 20 48 2c 49 33  |  LDR       H,I3|
00002110  44 0d 0e 10 1d 20 20 20  20 20 20 20 20 20 20 41  |D....          A|
00002120  44 44 20 20 20 20 20 20  20 49 2c 49 2c 48 0d 0e  |DD       I,I,H..|
00002130  1a 1d 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |..          STR |
00002140  20 20 20 20 20 20 49 2c  49 31 44 0d 0e 24 04 0d  |      I,I1D..$..|
00002150  0e 2e 20 20 20 20 20 20  20 20 20 20 20 53 55 42  |..           SUB|
00002160  53 20 20 20 20 20 20 43  54 2c 43 54 2c 23 31 0d  |S      CT,CT,#1.|
00002170  0e 38 23 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |.8#          LDM|
00002180  45 51 46 44 20 20 20 31  33 21 2c 7b 43 54 2c 31  |EQFD   13!,{CT,1|
00002190  35 7d 0d 0e 42 1b 20 20  20 20 20 20 20 20 20 20  |5}..B.          |
000021a0  43 4d 50 20 20 20 20 20  20 20 4f 2c 54 0d 0e 4c  |CMP       O,T..L|
000021b0  1c 20 20 20 20 20 20 20  20 20 20 42 4c 4f 20 20  |.          BLO  |
000021c0  20 20 20 20 20 63 6c 69  70 0d 0e 56 0a 2e 65 63  |     clip..V..ec|
000021d0  6c 69 70 0d 0e 60 14 3b  20 63 6c 69 70 20 74 6f  |lip..`.; clip to|
000021e0  20 62 6f 74 74 6f 6d 0d  0e 6a 24 20 20 20 20 20  | bottom..j$     |
000021f0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 54  |     ADD       T|
00002200  2c 54 2c 23 36 34 30 2a  34 38 30 0d 0e 74 1d 20  |,T,#640*480..t. |
00002210  20 20 20 20 20 20 20 20  20 53 55 42 53 20 20 20  |         SUBS   |
00002220  20 20 20 54 2c 54 2c 4f  0d 0e 7e 23 20 20 20 20  |   T,T,O..~#    |
00002230  20 20 20 20 20 20 4c 44  4d 4c 53 46 44 20 20 20  |      LDMLSFD   |
00002240  31 33 21 2c 7b 43 54 2c  31 35 7d 0d 0e 88 27 20  |13!,{CT,15}...' |
00002250  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00002260  20 20 20 43 54 2c 43 54  2c 43 54 2c 4c 53 4c 20  |   CT,CT,CT,LSL |
00002270  23 32 0d 0e 92 23 20 20  20 20 20 20 20 20 20 20  |#2...#          |
00002280  43 4d 50 20 20 20 20 20  20 20 43 54 2c 54 2c 4c  |CMP       CT,T,L|
00002290  53 52 20 23 37 0d 0e 9c  23 20 20 20 20 20 20 20  |SR #7...#       |
000022a0  20 20 20 4d 4f 56 48 49  20 20 20 20 20 43 54 2c  |   MOVHI     CT,|
000022b0  54 2c 4c 53 52 20 23 37  0d 0e a6 3f 20 20 20 20  |T,LSR #7...?    |
000022c0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 20 20  |      CMP       |
000022d0  4c 2c 52 20 20 20 20 20  20 20 20 20 20 3b 20 6c  |L,R          ; l|
000022e0  65 66 74 20 6f 72 20 72  69 67 68 74 20 6f 72 69  |eft or right ori|
000022f0  65 6e 74 65 64 20 3f 0d  0e b0 1e 20 20 20 20 20  |ented ?....     |
00002300  20 20 20 20 20 42 47 54  20 20 20 20 20 20 20 73  |     BGT       s|
00002310  70 61 6e 5f 32 0d 0e ba  1c 20 20 20 20 20 20 20  |pan_2....       |
00002320  20 20 20 42 41 4c 20 20  20 20 20 20 20 73 70 61  |   BAL       spa|
00002330  6e 0d 0e c4 0c 2e 65 6e  64 73 70 61 6e 0d 0e ce  |n.....endspan...|
00002340  20 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |           ADD  |
00002350  20 20 20 20 20 4f 2c 4f  2c 23 36 34 30 0d 0e d8  |     O,O,#640...|
00002360  1e 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |.          ADD  |
00002370  20 20 20 20 20 4c 2c 4c  2c 4c 41 0d 0e e2 1e 20  |     L,L,LA.... |
00002380  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00002390  20 20 20 52 2c 52 2c 52  41 0d 0e ec 20 20 20 20  |   R,R,RA...    |
000023a0  20 20 20 20 20 20 20 53  55 42 53 20 20 20 20 20  |       SUBS     |
000023b0  20 43 54 2c 43 54 2c 23  35 0d 0e f6 19 3b 20 69  | CT,CT,#5....; i|
000023c0  6e 63 72 65 6d 65 6e 74  20 79 20 73 68 61 64 69  |ncrement y shadi|
000023d0  6e 67 0d 0f 00 04 0d 0f  0a 1d 20 20 20 20 20 20  |ng........      |
000023e0  20 20 20 20 4c 44 52 20  20 20 20 20 20 20 54 2c  |    LDR       T,|
000023f0  49 31 44 0d 0f 14 1d 20  20 20 20 20 20 20 20 20  |I1D....         |
00002400  20 4c 44 52 20 20 20 20  20 20 20 49 2c 49 33 44  | LDR       I,I3D|
00002410  0d 0f 1e 1d 20 20 20 20  20 20 20 20 20 20 41 44  |....          AD|
00002420  44 20 20 20 20 20 20 20  49 2c 49 2c 54 0d 0f 28  |D       I,I,T..(|
00002430  1d 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |.          STR  |
00002440  20 20 20 20 20 49 2c 49  31 44 0d 0f 32 04 0d 0f  |     I,I1D..2...|
00002450  3c 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 45  |<#          LDME|
00002460  51 46 44 20 20 20 31 33  21 2c 7b 43 54 2c 31 35  |QFD   13!,{CT,15|
00002470  7d 0d 0f 46 09 2e 73 70  61 6e 0d 0f 50 04 0d 0f  |}..F..span..P...|
00002480  5a 04 0d 0f 64 13 3b 20  63 6c 69 70 20 74 6f 20  |Z...d.; clip to |
00002490  72 69 67 68 74 0d 0f 6e  22 20 20 20 20 20 20 20  |right..n"       |
000024a0  20 20 20 43 4d 50 20 20  20 20 20 20 20 52 2c 23  |   CMP       R,#|
000024b0  36 34 30 3c 3c 31 32 0d  0f 78 26 20 20 20 20 20  |640<<12..x&     |
000024c0  20 20 20 20 20 41 44 44  20 20 20 20 20 20 20 58  |     ADD       X|
000024d0  52 2c 4f 2c 52 2c 41 53  52 20 23 31 32 0d 0f 82  |R,O,R,ASR #12...|
000024e0  21 20 20 20 20 20 20 20  20 20 20 41 44 44 47 54  |!          ADDGT|
000024f0  20 20 20 20 20 58 52 2c  4f 2c 23 36 34 30 0d 0f  |     XR,O,#640..|
00002500  8c 12 3b 20 43 6c 69 70  20 74 6f 20 6c 65 66 74  |..; Clip to left|
00002510  0d 0f 96 23 20 20 20 20  20 20 20 20 20 20 4d 4f  |...#          MO|
00002520  56 53 20 20 20 20 20 20  54 2c 4c 2c 41 53 52 20  |VS      T,L,ASR |
00002530  23 31 32 0d 0f a0 1e 20  20 20 20 20 20 20 20 20  |#12....         |
00002540  20 41 44 44 20 20 20 20  20 20 20 58 4c 2c 4f 2c  | ADD       XL,O,|
00002550  54 0d 0f aa 1c 20 20 20  20 20 20 20 20 20 20 4d  |T....          M|
00002560  4f 56 4c 54 20 20 20 20  20 58 4c 2c 4f 0d 0f b4  |OVLT     XL,O...|
00002570  1e 20 20 20 20 20 20 20  20 20 20 52 53 42 4d 49  |.          RSBMI|
00002580  20 20 20 20 20 54 2c 54  2c 23 30 0d 0f be 04 0d  |     T,T,#0.....|
00002590  0f c8 04 0d 0f d2 29 3b  20 4c 6f 61 64 20 6c 69  |......); Load li|
000025a0  6e 65 20 73 68 61 64 65  20 61 6e 64 20 73 68 61  |ne shade and sha|
000025b0  64 65 20 69 6e 63 72 65  6d 65 6e 74 0d 0f dc 2e  |de increment....|
000025c0  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
000025d0  20 20 20 20 49 2c 49 31  44 20 20 20 20 20 20 20  |    I,I1D       |
000025e0  20 20 20 20 3b 20 31 30  2e 34 0d 0f e6 22 20 20  |    ; 10.4..."  |
000025f0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002600  20 20 49 2c 49 2c 41 53  52 20 23 38 0d 0f f0 2e  |  I,I,ASR #8....|
00002610  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00002620  20 20 20 20 48 2c 49 32  44 20 20 20 20 20 20 20  |    H,I2D       |
00002630  20 20 20 20 3b 20 31 30  2e 34 0d 0f fa 1f 20 20  |    ; 10.4....  |
00002640  20 20 20 20 20 20 20 20  4d 4c 41 4d 49 20 20 20  |        MLAMI   |
00002650  20 20 49 2c 54 2c 48 2c  49 0d 10 04 04 0d 10 0e  |  I,T,H,I.......|
00002660  22 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |"          MOV  |
00002670  20 20 20 20 20 54 2c 4c  2c 41 53 52 20 23 34 0d  |     T,L,ASR #4.|
00002680  10 18 1e 20 20 20 20 20  20 20 20 20 20 80 20 20  |...          .  |
00002690  20 20 20 20 20 54 2c 54  2c 23 32 35 35 0d 10 22  |     T,T,#255.."|
000026a0  1d 20 20 20 20 20 20 20  20 20 20 4d 55 4c 20 20  |.          MUL  |
000026b0  20 20 20 20 20 54 2c 48  2c 54 0d 10 2c 24 20 20  |     T,H,T..,$  |
000026c0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
000026d0  20 20 49 2c 49 2c 54 2c  41 53 52 20 23 38 0d 10  |  I,I,T,ASR #8..|
000026e0  36 04 0d 10 40 30 20 20  20 20 20 20 20 20 20 20  |6...@0          |
000026f0  4d 4f 56 20 20 20 20 20  20 20 49 2c 49 2c 4c 53  |MOV       I,I,LS|
00002700  4c 20 23 31 36 20 20 20  20 20 20 3b 20 31 30 2e  |L #16      ; 10.|
00002710  32 32 0d 10 4a 30 20 20  20 20 20 20 20 20 20 20  |22..J0          |
00002720  4d 4f 56 20 20 20 20 20  20 20 48 2c 48 2c 4c 53  |MOV       H,H,LS|
00002730  4c 20 23 31 36 20 20 20  20 20 20 3b 20 31 30 2e  |L #16      ; 10.|
00002740  32 32 0d 10 54 25 20 20  20 20 20 20 20 20 20 20  |22..T%          |
00002750  41 44 44 20 20 20 20 20  20 20 49 2c 49 2c 48 2c  |ADD       I,I,H,|
00002760  4c 53 52 20 23 31 36 0d  10 5e 04 0d 10 68 1f 20  |LSR #16..^...h. |
00002770  20 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |         SUB    |
00002780  20 20 20 54 2c 58 52 2c  58 4c 0d 10 72 1c 20 20  |   T,XR,XL..r.  |
00002790  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
000027a0  20 20 54 2c 23 33 0d 10  7c 21 20 20 20 20 20 20  |  T,#3..|!      |
000027b0  20 20 20 20 42 4c 45 20  20 20 20 20 20 20 73 6d  |    BLE       sm|
000027c0  61 6c 6c 73 70 61 6e 0d  10 86 1d 20 20 20 20 20  |allspan....     |
000027d0  20 20 20 20 20 54 53 54  20 20 20 20 20 20 20 58  |     TST       X|
000027e0  4c 2c 23 33 0d 10 90 20  20 20 20 20 20 20 20 20  |L,#3...         |
000027f0  20 20 42 45 51 20 20 20  20 20 20 20 65 6e 64 6c  |  BEQ       endl|
00002800  6f 6f 70 31 0d 10 9a 1a  2e 6c 6f 6f 70 31 20 20  |oop1.....loop1  |
00002810  20 20 a4 6d 61 70 62 79  74 65 28 43 31 29 0d 10  |  .mapbyte(C1)..|
00002820  a4 22 20 20 20 20 20 20  20 20 20 20 53 54 52 42  |."          STRB|
00002830  20 20 20 20 20 20 43 31  2c 5b 58 4c 5d 2c 23 31  |      C1,[XL],#1|
00002840  0d 10 ae 1d 20 20 20 20  20 20 20 20 20 20 54 53  |....          TS|
00002850  54 20 20 20 20 20 20 20  58 4c 2c 23 33 0d 10 b8  |T       XL,#3...|
00002860  1d 20 20 20 20 20 20 20  20 20 20 42 4e 45 20 20  |.          BNE  |
00002870  20 20 20 20 20 6c 6f 6f  70 31 0d 10 c2 04 0d 10  |     loop1......|
00002880  cc 1f 2e 65 6e 64 6c 6f  6f 70 31 20 53 55 42 20  |...endloop1 SUB |
00002890  20 20 20 20 20 20 48 2c  58 52 2c 58 4c 0d 10 d6  |      H,XR,XL...|
000028a0  22 20 20 20 20 20 20 20  20 20 20 4d 4f 56 53 20  |"          MOVS |
000028b0  20 20 20 20 20 48 2c 48  2c 4c 53 52 20 23 33 0d  |     H,H,LSR #3.|
000028c0  10 e0 1c 20 20 20 20 20  20 20 20 20 20 42 43 43  |...          BCC|
000028d0  20 20 20 20 20 20 20 64  6f 69 74 0d 10 ea 1a 20  |       doit.... |
000028e0  20 20 20 20 20 20 20 20  20 a4 6d 61 70 62 79 74  |         .mapbyt|
000028f0  65 28 43 31 29 0d 10 f4  19 20 20 20 20 20 20 20  |e(C1)....       |
00002900  20 20 20 a4 6d 61 70 62  79 74 65 28 54 29 0d 10  |   .mapbyte(T)..|
00002910  fe 26 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |.&          ADD |
00002920  20 20 20 20 20 20 43 31  2c 43 31 2c 54 2c 4c 53  |      C1,C1,T,LS|
00002930  4c 20 23 38 0d 11 08 19  20 20 20 20 20 20 20 20  |L #8....        |
00002940  20 20 a4 6d 61 70 62 79  74 65 28 54 29 0d 11 12  |  .mapbyte(T)...|
00002950  27 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |'          ADD  |
00002960  20 20 20 20 20 43 31 2c  43 31 2c 54 2c 4c 53 4c  |     C1,C1,T,LSL|
00002970  20 23 31 36 0d 11 1c 19  20 20 20 20 20 20 20 20  | #16....        |
00002980  20 20 a4 6d 61 70 62 79  74 65 28 54 29 0d 11 26  |  .mapbyte(T)..&|
00002990  27 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |'          ADD  |
000029a0  20 20 20 20 20 43 31 2c  43 31 2c 54 2c 4c 53 4c  |     C1,C1,T,LSL|
000029b0  20 23 32 34 0d 11 30 22  20 20 20 20 20 20 20 20  | #24..0"        |
000029c0  20 20 53 54 52 20 20 20  20 20 20 20 43 31 2c 5b  |  STR       C1,[|
000029d0  58 4c 5d 2c 23 34 0d 11  3a 1c 20 20 20 20 20 20  |XL],#4..:.      |
000029e0  20 20 20 20 43 4d 50 20  20 20 20 20 20 20 48 2c  |    CMP       H,|
000029f0  23 30 0d 11 44 21 2e 64  6f 69 74 20 20 20 20 20  |#0..D!.doit     |
00002a00  42 45 51 20 20 20 20 20  20 20 73 6d 61 6c 6c 73  |BEQ       smalls|
00002a10  70 61 6e 0d 11 4e 04 0d  11 58 1a 2e 6c 6f 6f 70  |pan..N...X..loop|
00002a20  32 20 20 20 20 a4 6d 61  70 62 79 74 65 28 43 31  |2    .mapbyte(C1|
00002a30  29 0d 11 62 19 20 20 20  20 20 20 20 20 20 20 a4  |)..b.          .|
00002a40  6d 61 70 62 79 74 65 28  54 29 0d 11 6c 26 20 20  |mapbyte(T)..l&  |
00002a50  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00002a60  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 38  |  C1,C1,T,LSL #8|
00002a70  0d 11 76 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |..v.          .m|
00002a80  61 70 62 79 74 65 28 54  29 0d 11 80 27 20 20 20  |apbyte(T)...'   |
00002a90  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00002aa0  20 43 31 2c 43 31 2c 54  2c 4c 53 4c 20 23 31 36  | C1,C1,T,LSL #16|
00002ab0  0d 11 8a 19 20 20 20 20  20 20 20 20 20 20 a4 6d  |....          .m|
00002ac0  61 70 62 79 74 65 28 54  29 0d 11 94 27 20 20 20  |apbyte(T)...'   |
00002ad0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 20  |       ADD      |
00002ae0  20 43 31 2c 43 31 2c 54  2c 4c 53 4c 20 23 32 34  | C1,C1,T,LSL #24|
00002af0  0d 11 9e 1a 20 20 20 20  20 20 20 20 20 20 a4 6d  |....          .m|
00002b00  61 70 62 79 74 65 28 43  32 29 0d 11 a8 19 20 20  |apbyte(C2)....  |
00002b10  20 20 20 20 20 20 20 20  a4 6d 61 70 62 79 74 65  |        .mapbyte|
00002b20  28 54 29 0d 11 b2 26 20  20 20 20 20 20 20 20 20  |(T)...&         |
00002b30  20 41 44 44 20 20 20 20  20 20 20 43 32 2c 43 32  | ADD       C2,C2|
00002b40  2c 54 2c 4c 53 4c 20 23  38 0d 11 bc 19 20 20 20  |,T,LSL #8....   |
00002b50  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00002b60  54 29 0d 11 c6 27 20 20  20 20 20 20 20 20 20 20  |T)...'          |
00002b70  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00002b80  54 2c 4c 53 4c 20 23 31  36 0d 11 d0 19 20 20 20  |T,LSL #16....   |
00002b90  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00002ba0  54 29 0d 11 da 27 20 20  20 20 20 20 20 20 20 20  |T)...'          |
00002bb0  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00002bc0  54 2c 4c 53 4c 20 23 32  34 0d 11 e4 25 20 20 20  |T,LSL #24...%   |
00002bd0  20 20 20 20 20 20 20 53  54 4d 49 41 20 20 20 20  |       STMIA    |
00002be0  20 28 58 4c 29 21 2c 7b  43 31 2c 43 32 7d 0d 11  | (XL)!,{C1,C2}..|
00002bf0  ee 1e 20 20 20 20 20 20  20 20 20 20 53 55 42 53  |..          SUBS|
00002c00  20 20 20 20 20 20 48 2c  48 2c 23 31 0d 11 f8 1d  |      H,H,#1....|
00002c10  20 20 20 20 20 20 20 20  20 20 42 4e 45 20 20 20  |          BNE   |
00002c20  20 20 20 20 6c 6f 6f 70  32 0d 12 02 0e 2e 73 6d  |    loop2.....sm|
00002c30  61 6c 6c 73 70 61 6e 0d  12 0c 1d 20 20 20 20 20  |allspan....     |
00002c40  20 20 20 20 20 43 4d 50  20 20 20 20 20 20 20 58  |     CMP       X|
00002c50  4c 2c 58 52 0d 12 16 1f  20 20 20 20 20 20 20 20  |L,XR....        |
00002c60  20 20 42 47 45 20 20 20  20 20 20 20 65 6e 64 73  |  BGE       ends|
00002c70  70 61 6e 0d 12 20 1a 20  20 20 20 20 20 20 20 20  |pan.. .         |
00002c80  20 a4 6d 61 70 62 79 74  65 28 43 31 29 0d 12 2a  | .mapbyte(C1)..*|
00002c90  22 20 20 20 20 20 20 20  20 20 20 53 54 52 42 20  |"          STRB |
00002ca0  20 20 20 20 20 43 31 2c  5b 58 4c 5d 2c 23 31 0d  |     C1,[XL],#1.|
00002cb0  12 34 1d 20 20 20 20 20  20 20 20 20 20 43 4d 50  |.4.          CMP|
00002cc0  20 20 20 20 20 20 20 58  4c 2c 58 52 0d 12 3e 1f  |       XL,XR..>.|
00002cd0  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00002ce0  20 20 20 20 65 6e 64 73  70 61 6e 0d 12 48 1a 20  |    endspan..H. |
00002cf0  20 20 20 20 20 20 20 20  20 a4 6d 61 70 62 79 74  |         .mapbyt|
00002d00  65 28 43 31 29 0d 12 52  22 20 20 20 20 20 20 20  |e(C1)..R"       |
00002d10  20 20 20 53 54 52 42 20  20 20 20 20 20 43 31 2c  |   STRB      C1,|
00002d20  5b 58 4c 5d 2c 23 31 0d  12 5c 1d 20 20 20 20 20  |[XL],#1..\.     |
00002d30  20 20 20 20 20 43 4d 50  20 20 20 20 20 20 20 58  |     CMP       X|
00002d40  4c 2c 58 52 0d 12 66 1f  20 20 20 20 20 20 20 20  |L,XR..f.        |
00002d50  20 20 42 45 51 20 20 20  20 20 20 20 65 6e 64 73  |  BEQ       ends|
00002d60  70 61 6e 0d 12 70 1a 20  20 20 20 20 20 20 20 20  |pan..p.         |
00002d70  20 a4 6d 61 70 62 79 74  65 28 43 31 29 0d 12 7a  | .mapbyte(C1)..z|
00002d80  22 20 20 20 20 20 20 20  20 20 20 53 54 52 42 20  |"          STRB |
00002d90  20 20 20 20 20 43 31 2c  5b 58 4c 5d 2c 23 31 0d  |     C1,[XL],#1.|
00002da0  12 84 1f 20 20 20 20 20  20 20 20 20 20 42 41 4c  |...          BAL|
00002db0  20 20 20 20 20 20 20 65  6e 64 73 70 61 6e 0d 12  |       endspan..|
00002dc0  8e 0e 2e 65 6e 64 73 70  61 6e 5f 32 0d 12 98 20  |...endspan_2... |
00002dd0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002de0  20 20 20 20 4f 2c 4f 2c  23 36 34 30 0d 12 a2 1e  |    O,O,#640....|
00002df0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002e00  20 20 20 20 4c 2c 4c 2c  4c 41 0d 12 ac 1e 20 20  |    L,L,LA....  |
00002e10  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00002e20  20 20 52 2c 52 2c 52 41  0d 12 b6 20 20 20 20 20  |  R,R,RA...     |
00002e30  20 20 20 20 20 20 53 55  42 53 20 20 20 20 20 20  |      SUBS      |
00002e40  43 54 2c 43 54 2c 23 35  0d 12 c0 19 3b 20 69 6e  |CT,CT,#5....; in|
00002e50  63 72 65 6d 65 6e 74 20  79 20 73 68 61 64 69 6e  |crement y shadin|
00002e60  67 0d 12 ca 1d 20 20 20  20 20 20 20 20 20 20 4c  |g....          L|
00002e70  44 52 20 20 20 20 20 20  20 54 2c 49 31 44 0d 12  |DR       T,I1D..|
00002e80  d4 1d 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |..          LDR |
00002e90  20 20 20 20 20 20 49 2c  49 33 44 0d 12 de 1d 20  |      I,I3D.... |
00002ea0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00002eb0  20 20 20 49 2c 49 2c 54  0d 12 e8 1d 20 20 20 20  |   I,I,T....    |
00002ec0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 20 20  |      STR       |
00002ed0  49 2c 49 31 44 0d 12 f2  23 20 20 20 20 20 20 20  |I,I1D...#       |
00002ee0  20 20 20 4c 44 4d 45 51  46 44 20 20 20 31 33 21  |   LDMEQFD   13!|
00002ef0  2c 7b 43 54 2c 31 35 7d  0d 12 fc 0b 2e 73 70 61  |,{CT,15}.....spa|
00002f00  6e 5f 32 0d 13 06 12 3b  20 43 6c 69 70 20 74 6f  |n_2....; Clip to|
00002f10  20 6c 65 66 74 0d 13 10  23 20 20 20 20 20 20 20  | left...#       |
00002f20  20 20 20 4d 4f 56 53 20  20 20 20 20 20 54 2c 52  |   MOVS      T,R|
00002f30  2c 41 53 52 20 23 31 32  0d 13 1a 26 20 20 20 20  |,ASR #12...&    |
00002f40  20 20 20 20 20 20 41 44  44 50 4c 20 20 20 20 20  |      ADDPL     |
00002f50  58 52 2c 4f 2c 52 2c 41  53 52 20 23 31 32 0d 13  |XR,O,R,ASR #12..|
00002f60  24 1c 20 20 20 20 20 20  20 20 20 20 4d 4f 56 4d  |$.          MOVM|
00002f70  49 20 20 20 20 20 58 52  2c 4f 0d 13 2e 13 3b 20  |I     XR,O....; |
00002f80  63 6c 69 70 20 74 6f 20  72 69 67 68 74 0d 13 38  |clip to right..8|
00002f90  1e 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
00002fa0  20 20 20 20 20 54 2c 23  36 34 30 0d 13 42 25 20  |     T,#640..B% |
00002fb0  20 20 20 20 20 20 20 20  20 52 53 42 53 20 20 20  |         RSBS   |
00002fc0  20 20 20 54 2c 54 2c 4c  2c 41 53 52 20 23 31 32  |   T,T,L,ASR #12|
00002fd0  0d 13 4c 26 20 20 20 20  20 20 20 20 20 20 41 44  |..L&          AD|
00002fe0  44 20 20 20 20 20 20 20  58 4c 2c 4f 2c 4c 2c 41  |D       XL,O,L,A|
00002ff0  53 52 20 23 31 32 0d 13  56 21 20 20 20 20 20 20  |SR #12..V!      |
00003000  20 20 20 20 41 44 44 50  4c 20 20 20 20 20 58 4c  |    ADDPL     XL|
00003010  2c 4f 2c 23 36 34 30 0d  13 60 29 3b 20 4c 6f 61  |,O,#640..`); Loa|
00003020  64 20 6c 69 6e 65 20 73  68 61 64 65 20 61 6e 64  |d line shade and|
00003030  20 73 68 61 64 65 20 69  6e 63 72 65 6d 65 6e 74  | shade increment|
00003040  0d 13 6a 1d 20 20 20 20  20 20 20 20 20 20 4c 44  |..j.          LD|
00003050  52 20 20 20 20 20 20 20  49 2c 49 31 44 0d 13 74  |R       I,I1D..t|
00003060  22 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |"          MOV  |
00003070  20 20 20 20 20 49 2c 49  2c 41 53 52 20 23 38 0d  |     I,I,ASR #8.|
00003080  13 7e 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |.~.          LDR|
00003090  20 20 20 20 20 20 20 48  2c 49 32 44 0d 13 88 1f  |       H,I2D....|
000030a0  20 20 20 20 20 20 20 20  20 20 4d 4c 41 50 4c 20  |          MLAPL |
000030b0  20 20 20 20 49 2c 54 2c  48 2c 49 0d 13 92 04 0d  |    I,T,H,I.....|
000030c0  13 9c 22 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |.."          MOV|
000030d0  20 20 20 20 20 20 20 54  2c 4c 2c 41 53 52 20 23  |       T,L,ASR #|
000030e0  34 0d 13 a6 1e 20 20 20  20 20 20 20 20 20 20 80  |4....          .|
000030f0  20 20 20 20 20 20 20 54  2c 54 2c 23 32 35 35 0d  |       T,T,#255.|
00003100  13 b0 1d 20 20 20 20 20  20 20 20 20 20 4d 55 4c  |...          MUL|
00003110  20 20 20 20 20 20 20 54  2c 48 2c 54 0d 13 ba 2e  |       T,H,T....|
00003120  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00003130  20 20 20 20 49 2c 49 2c  54 2c 41 53 52 20 23 38  |    I,I,T,ASR #8|
00003140  20 20 20 20 20 20 20 20  20 20 0d 13 c4 0e 20 20  |          ....  |
00003150  20 20 20 20 20 20 20 20  0d 13 ce 23 20 20 20 20  |        ...#    |
00003160  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 20 20  |      MOV       |
00003170  49 2c 49 2c 4c 53 4c 20  23 31 36 0d 13 d8 23 20  |I,I,LSL #16...# |
00003180  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |         MOV    |
00003190  20 20 20 48 2c 48 2c 4c  53 4c 20 23 31 36 0d 13  |   H,H,LSL #16..|
000031a0  e2 24 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |.$          ADD |
000031b0  20 20 20 20 20 20 49 2c  49 2c 48 2c 4c 53 52 23  |      I,I,H,LSR#|
000031c0  31 36 0d 13 ec 1f 20 20  20 20 20 20 20 20 20 20  |16....          |
000031d0  53 55 42 20 20 20 20 20  20 20 54 2c 58 4c 2c 58  |SUB       T,XL,X|
000031e0  52 0d 13 f6 1c 20 20 20  20 20 20 20 20 20 20 43  |R....          C|
000031f0  4d 50 20 20 20 20 20 20  20 54 2c 23 33 0d 14 00  |MP       T,#3...|
00003200  23 20 20 20 20 20 20 20  20 20 20 42 4c 45 20 20  |#          BLE  |
00003210  20 20 20 20 20 73 6d 61  6c 6c 73 70 61 6e 5f 32  |     smallspan_2|
00003220  0d 14 0a 1d 20 20 20 20  20 20 20 20 20 20 54 53  |....          TS|
00003230  54 20 20 20 20 20 20 20  58 4c 2c 23 33 0d 14 14  |T       XL,#3...|
00003240  22 20 20 20 20 20 20 20  20 20 20 42 45 51 20 20  |"          BEQ  |
00003250  20 20 20 20 20 65 6e 64  6c 6f 6f 70 31 5f 32 0d  |     endloop1_2.|
00003260  14 1e 1a 2e 6c 6f 6f 70  31 5f 32 20 20 a4 6d 61  |....loop1_2  .ma|
00003270  70 62 79 74 65 28 43 31  29 0d 14 28 24 20 20 20  |pbyte(C1)..($   |
00003280  20 20 20 20 20 20 20 53  54 52 42 20 20 20 20 20  |       STRB     |
00003290  20 43 31 2c 5b 58 4c 2c  23 2d 31 5d 21 0d 14 32  | C1,[XL,#-1]!..2|
000032a0  1d 20 20 20 20 20 20 20  20 20 20 54 53 54 20 20  |.          TST  |
000032b0  20 20 20 20 20 58 4c 2c  23 33 0d 14 3c 1f 20 20  |     XL,#3..<.  |
000032c0  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
000032d0  20 20 6c 6f 6f 70 31 5f  32 0d 14 46 0f 2e 65 6e  |  loop1_2..F..en|
000032e0  64 6c 6f 6f 70 31 5f 32  0d 14 50 1f 20 20 20 20  |dloop1_2..P.    |
000032f0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 20 20  |      SUB       |
00003300  48 2c 58 4c 2c 58 52 0d  14 5a 22 20 20 20 20 20  |H,XL,XR..Z"     |
00003310  20 20 20 20 20 4d 4f 56  53 20 20 20 20 20 20 48  |     MOVS      H|
00003320  2c 48 2c 4c 53 52 20 23  33 0d 14 64 1e 20 20 20  |,H,LSR #3..d.   |
00003330  20 20 20 20 20 20 20 42  43 43 20 20 20 20 20 20  |       BCC      |
00003340  20 64 6f 69 74 5f 32 0d  14 6e 1a 20 20 20 20 20  | doit_2..n.     |
00003350  20 20 20 20 20 a4 6d 61  70 62 79 74 65 28 43 31  |     .mapbyte(C1|
00003360  29 0d 14 78 19 20 20 20  20 20 20 20 20 20 20 a4  |)..x.          .|
00003370  6d 61 70 62 79 74 65 28  54 29 0d 14 82 27 20 20  |mapbyte(T)...'  |
00003380  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003390  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 32  |  C1,C1,T,LSL #2|
000033a0  34 0d 14 8c 19 20 20 20  20 20 20 20 20 20 20 a4  |4....          .|
000033b0  6d 61 70 62 79 74 65 28  54 29 0d 14 96 27 20 20  |mapbyte(T)...'  |
000033c0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000033d0  20 20 43 31 2c 43 31 2c  54 2c 4c 53 4c 20 23 31  |  C1,C1,T,LSL #1|
000033e0  36 0d 14 a0 19 20 20 20  20 20 20 20 20 20 20 a4  |6....          .|
000033f0  6d 61 70 62 79 74 65 28  54 29 0d 14 aa 26 20 20  |mapbyte(T)...&  |
00003400  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003410  20 20 43 31 2c 54 2c 43  31 2c 52 4f 52 20 23 38  |  C1,T,C1,ROR #8|
00003420  0d 14 b4 24 20 20 20 20  20 20 20 20 20 20 53 54  |...$          ST|
00003430  52 20 20 20 20 20 20 20  43 31 2c 5b 58 4c 2c 23  |R       C1,[XL,#|
00003440  2d 34 5d 21 0d 14 be 1c  20 20 20 20 20 20 20 20  |-4]!....        |
00003450  20 20 43 4d 50 20 20 20  20 20 20 20 48 2c 23 30  |  CMP       H,#0|
00003460  0d 14 c8 23 2e 64 6f 69  74 5f 32 20 20 20 42 45  |...#.doit_2   BE|
00003470  51 20 20 20 20 20 20 20  73 6d 61 6c 6c 73 70 61  |Q       smallspa|
00003480  6e 5f 32 0d 14 d2 0c 2e  6c 6f 6f 70 32 5f 32 0d  |n_2.....loop2_2.|
00003490  14 dc 1a 20 20 20 20 20  20 20 20 20 20 a4 6d 61  |...          .ma|
000034a0  70 62 79 74 65 28 43 32  29 0d 14 e6 19 20 20 20  |pbyte(C2)....   |
000034b0  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
000034c0  54 29 0d 14 f0 27 20 20  20 20 20 20 20 20 20 20  |T)...'          |
000034d0  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
000034e0  54 2c 4c 53 4c 20 23 32  34 0d 14 fa 19 20 20 20  |T,LSL #24....   |
000034f0  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00003500  54 29 0d 15 04 27 20 20  20 20 20 20 20 20 20 20  |T)...'          |
00003510  41 44 44 20 20 20 20 20  20 20 43 32 2c 43 32 2c  |ADD       C2,C2,|
00003520  54 2c 4c 53 4c 20 23 31  36 0d 15 0e 19 20 20 20  |T,LSL #16....   |
00003530  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00003540  54 29 0d 15 18 26 20 20  20 20 20 20 20 20 20 20  |T)...&          |
00003550  41 44 44 20 20 20 20 20  20 20 43 32 2c 54 2c 43  |ADD       C2,T,C|
00003560  32 2c 52 4f 52 20 23 38  0d 15 22 1a 20 20 20 20  |2,ROR #8..".    |
00003570  20 20 20 20 20 20 a4 6d  61 70 62 79 74 65 28 43  |      .mapbyte(C|
00003580  31 29 0d 15 2c 19 20 20  20 20 20 20 20 20 20 20  |1)..,.          |
00003590  a4 6d 61 70 62 79 74 65  28 54 29 0d 15 36 27 20  |.mapbyte(T)..6' |
000035a0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
000035b0  20 20 20 43 31 2c 43 31  2c 54 2c 4c 53 4c 20 23  |   C1,C1,T,LSL #|
000035c0  32 34 0d 15 40 19 20 20  20 20 20 20 20 20 20 20  |24..@.          |
000035d0  a4 6d 61 70 62 79 74 65  28 54 29 0d 15 4a 27 20  |.mapbyte(T)..J' |
000035e0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
000035f0  20 20 20 43 31 2c 43 31  2c 54 2c 4c 53 4c 20 23  |   C1,C1,T,LSL #|
00003600  31 36 0d 15 54 19 20 20  20 20 20 20 20 20 20 20  |16..T.          |
00003610  a4 6d 61 70 62 79 74 65  28 54 29 0d 15 5e 26 20  |.mapbyte(T)..^& |
00003620  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00003630  20 20 20 43 31 2c 54 2c  43 31 2c 52 4f 52 20 23  |   C1,T,C1,ROR #|
00003640  38 0d 15 68 25 20 20 20  20 20 20 20 20 20 20 53  |8..h%          S|
00003650  54 4d 44 42 20 20 20 20  20 28 58 4c 29 21 2c 7b  |TMDB     (XL)!,{|
00003660  43 31 2c 43 32 7d 0d 15  72 1e 20 20 20 20 20 20  |C1,C2}..r.      |
00003670  20 20 20 20 53 55 42 53  20 20 20 20 20 20 48 2c  |    SUBS      H,|
00003680  48 2c 23 31 0d 15 7c 1f  20 20 20 20 20 20 20 20  |H,#1..|.        |
00003690  20 20 42 4e 45 20 20 20  20 20 20 20 6c 6f 6f 70  |  BNE       loop|
000036a0  32 5f 32 0d 15 86 10 2e  73 6d 61 6c 6c 73 70 61  |2_2.....smallspa|
000036b0  6e 5f 32 0d 15 90 1d 20  20 20 20 20 20 20 20 20  |n_2....         |
000036c0  20 43 4d 50 20 20 20 20  20 20 20 58 52 2c 58 4c  | CMP       XR,XL|
000036d0  0d 15 9a 21 20 20 20 20  20 20 20 20 20 20 42 47  |...!          BG|
000036e0  45 20 20 20 20 20 20 20  65 6e 64 73 70 61 6e 5f  |E       endspan_|
000036f0  32 0d 15 a4 1a 20 20 20  20 20 20 20 20 20 20 a4  |2....          .|
00003700  6d 61 70 62 79 74 65 28  43 31 29 0d 15 ae 24 20  |mapbyte(C1)...$ |
00003710  20 20 20 20 20 20 20 20  20 53 54 52 42 20 20 20  |         STRB   |
00003720  20 20 20 43 31 2c 5b 58  4c 2c 23 2d 31 5d 21 0d  |   C1,[XL,#-1]!.|
00003730  15 b8 1d 20 20 20 20 20  20 20 20 20 20 43 4d 50  |...          CMP|
00003740  20 20 20 20 20 20 20 58  52 2c 58 4c 0d 15 c2 21  |       XR,XL...!|
00003750  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00003760  20 20 20 20 65 6e 64 73  70 61 6e 5f 32 0d 15 cc  |    endspan_2...|
00003770  1a 20 20 20 20 20 20 20  20 20 20 a4 6d 61 70 62  |.          .mapb|
00003780  79 74 65 28 43 31 29 0d  15 d6 24 20 20 20 20 20  |yte(C1)...$     |
00003790  20 20 20 20 20 53 54 52  42 20 20 20 20 20 20 43  |     STRB      C|
000037a0  31 2c 5b 58 4c 2c 23 2d  31 5d 21 0d 15 e0 1d 20  |1,[XL,#-1]!.... |
000037b0  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
000037c0  20 20 20 58 52 2c 58 4c  0d 15 ea 21 20 20 20 20  |   XR,XL...!    |
000037d0  20 20 20 20 20 20 42 45  51 20 20 20 20 20 20 20  |      BEQ       |
000037e0  65 6e 64 73 70 61 6e 5f  32 0d 15 f4 1a 20 20 20  |endspan_2....   |
000037f0  20 20 20 20 20 20 20 a4  6d 61 70 62 79 74 65 28  |       .mapbyte(|
00003800  43 31 29 0d 15 fe 24 20  20 20 20 20 20 20 20 20  |C1)...$         |
00003810  20 53 54 52 42 20 20 20  20 20 20 43 31 2c 5b 58  | STRB      C1,[X|
00003820  4c 2c 23 2d 31 5d 21 0d  16 08 21 20 20 20 20 20  |L,#-1]!...!     |
00003830  20 20 20 20 20 42 41 4c  20 20 20 20 20 20 20 65  |     BAL       e|
00003840  6e 64 73 70 61 6e 5f 32  0d 16 12 05 5d 0d 16 1c  |ndspan_2....]...|
00003850  07 3d 22 22 0d 16 26 04  0d 16 30 13 dd 20 a4 6d  |.=""..&...0.. .m|
00003860  61 70 62 79 74 65 28 72  65 67 29 0d 16 3a 0d 5b  |apbyte(reg)..:.[|
00003870  4f 50 54 20 50 41 53 53  0d 16 44 21 20 20 20 20  |OPT PASS..D!    |
00003880  20 20 4d 4f 56 20 20 20  20 20 20 20 72 65 67 2c  |  MOV       reg,|
00003890  49 2c 4c 53 52 20 23 32  34 0d 16 4e 21 20 20 20  |I,LSR #24..N!   |
000038a0  20 20 20 41 44 44 20 20  20 20 20 20 20 49 2c 49  |   ADD       I,I|
000038b0  2c 49 2c 4c 53 4c 20 23  31 36 0d 16 58 05 5d 0d  |,I,LSL #16..X.].|
000038c0  16 62 08 20 3d 22 22 0d  ff                       |.b. =""..|
000038c9