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

starinfo/Vlietinck/Gouraud

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

� >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
�
�� I=1 � 255
� � I,I,I,I
� I


"	� set
,�DIM screen_bank 320*256
6�!SCREEN2=screen_bank
@
J
T�
^%� "1000 RANDOM GOURAUD TRIANGLES"
h� "PRESS A KEY TO START"
r	W=�:�
|�=0
�
!ran=�
�
�<A%=0:B%=0:C%=255:D%=127:E%=127:F%=255:G%=0:H%=128:I%=255
�� gouraud_triangle
�*SCREENSAVE dump
��
�
� main
�� "IN ";�/100;" SECONDS"
�� 0
��
�
�
�

� �calc_invers
K=1<<21
&)� I=1 � 4093:INVERS!(4*I)=K/(I+0.5):�
0�
:
D
N
X
b
l� �mode
v!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
�	P%=Q%
�
[OPT P
�
�
�.ran EQUD �
�.nr EQUD 1000
�	.main
�STMFD R13!,{R14}
�
LDR F,ran
�LDR TEL,nr

.loopr
<.L1 ADD F,F,F,LSL #8:MOV X1,F,LSR #24:CMP X1,#320:BHS L1
%ADD F,F,F,LSL #8:MOV Y1,F,LSR #24
 <.L2 ADD F,F,F,LSL #8:MOV X2,F,LSR #24:CMP X2,#320:BHS L2
*%ADD F,F,F,LSL #8:MOV Y2,F,LSR #24
4<.L3 ADD F,F,F,LSL #8:MOV X3,F,LSR #24:CMP X3,#320:BHS L3
>%ADD F,F,F,LSL #8:MOV Y3,F,LSR #24
H%ADD F,F,F,LSL #8:MOV I1,F,LSR #18
R%ADD F,F,F,LSL #8:MOV I2,F,LSR #18
\%ADD F,F,F,LSL #8:MOV I3,F,LSR #18
fBL gouraud_triangle
pSUBS TEL,TEL,#1
z
BNE loopr
�LDMFD R13!,{PC}
�]
��
�	Q%=P%
��
�
�
�
�� �gouraud_triangle
�� SF,FIX,SM,FP,I,G
�� 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
.
8!X1=0:Y1=1:X2=2:Y2=3:X3=4:Y3=5
BI1=6:I2=7:I3=8
LSCREEN=12:BITMAP=13:Tmp=14
V
`$A=0:B=1:C=9:D=10:Tmp2=12:Help=13
j
t� PASS=0 � 2 � 2
~	P%=Q%
�
[OPT PASS
�.SCREEN1 EQUD 148:EQUD -1
�.SCREEN2 EQUD 0
�.set
�ADR R0,SCREEN1
�ADR R1,SCREEN2
�SWI "OS_ReadVduVariables"
�
MOV 15,14
�
�.mode     DCD 1
�          DCD 320
�          DCD 256
          DCD 3

          DCD -1
          DCD 0:DCD 128
          DCD 3:DCD 255
(          DCD -1
2
.set_mode
<
MOV R0,#0
FADR R1,mode
PSWI "OS_ScreenMode"
ZSWI "OS_RemoveCursors"
dMOV pc,r14
n
x�predef
�.gouraud_triangle
��precalc
�
�piece
�]
��
�	Q%=P%
��
�
�
�
�
�
�� �adr(reg,address)
offset=address-P%-8
� offset>0 �
offset1=offset � 255*4
"offset2=offset � 255*256*4
,"offset3=offset � 255*256*256*4
69               [OPT PASS:ADD       reg, 15,#offset1:]
@8� offset2<>0  [OPT PASS:ADD       reg,reg,#offset2:]
J8� offset3<>0  [OPT PASS:ADD       reg,reg,#offset3:]
T�
^offset1=-offset � 255*4
hoffset2=-offset � 255*256*4
r#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:]
��
��
�=""
�
�
� �predef
�
[OPT PASS
�8.save_regs DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0:DCD 0
�
�.X1D EQUD 0
�.X2D EQUD 0
�
.DX21 EQUD 0
.DX32 EQUD 0
.DX31 EQUD 0
&
0.DY21 EQUD 0
:.DY32 EQUD 0
D
N
X.SCREEND EQUD 0
b.spd      DCD 0
l
v]
�=""
�
�� �precalc
�
[OPT PASS
�1;� paramters R0-R8=x0,y0,x1,y1,x2,y2,i0,i1,i2
�
�%          STMFD     13!,{0-12,14}
�          STR       13,spd
�
�
MOV I1,#0
�MOV I2,#127<<6
�MOV I3,#255<<6
�
�:;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
4          �       I1,I1,I2
>          �       Y2,Y2,Y1
H          �       X2,X2,X1
R          �       I2,I2,I1
\          �       Y1,Y1,Y2
f          �       X1,X1,X2
p          �       I1,I1,I2
z
.inorder1
�          CMP       Y2,Y3
�           BLE       inorder2
�E; if y2 > y3 then swap(x2,x3) swap(y2,y3) swap(u2,u3) swap(v2,v3)
�          �       Y2,Y2,Y3
�          �       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
	8          �       X1,X1,X2
	B          �       I1,I1,I2
	L          �       Y2,Y2,Y1
	V          �       X2,X2,X1
	`          �       I2,I2,I1
	j          �       Y1,Y1,Y2
	t          �       X1,X1,X2
	~          �       I1,I1,I2
	�
.inorder3
	�          STR       X1,X1D
	�          STR       X2,X2D
	�          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 + 320*y1    (mode 13)
'          �adr     (SCREEN,SCREEN2)

'          LDR       SCREEN,[SCREEN]
(          ADD       Tmp,Y1,Y1,LSL #2
0          ADD       SCREEN,SCREEN,Tmp,LSL #6
(&          STR       SCREEN,SCREEND
2
<$          �adr     (Help,INVERS)
F          STR       Y2,DY21
P; calc  x2/y2
Z,          LDR       Tmp,[Help,Y2,LSL #2]
d"          MUL       Tmp,X2,Tmp
n&          MOV       Tmp,Tmp,ASR #9
x           STR       Tmp,DX21
�           SUB       Y1,Y3,Y2
�          STR       Y1,DY32
�; calc (x3-x2)/(y3-y2)
�,          LDR       Tmp,[Help,Y1,LSL #2]
�           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
63          MOV       I3,I3,ASR #17-10     ; 8.16
@%          MOV       I1,I1,LSL #10
J'          ADD       I1,I1,I3,ASR #1
T          STR       I3,I3D
^          STR       I1,I1D
h
r'; calc 2^21/floor(abs(x2 - dx1*y2))
|8          MUL       Tmp,Y2,Tmp2         ; (x3/y3)*y2
�;          RSB       Tmp,Tmp,X2,LSL #12  ; x2-(x3/y3)*y2
�8          MOVS      Tmp,Tmp,ASR #10     ; int( ... )
�"          RSBMI     Tmp,Tmp,#0
�4          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
0          STR       I1,I1D
:          
D!          LDR       O,SCREEND
N
X          LDR       T,X1D
b8          MOV       L,T,LSL #12  ; xl = (X1+0.5)*FIX
l"          ADD       L,L,#1<<11
v1          LDR       LA,DX31      ; dxl = dx31
�8          MOV       R,L          ; xr = (X1+0.5)*FIX
�1          LDR       RA,DX21      ; dxr = dx21
�6          ADD       L,L,LA,ASR #1  ; xl += 0.5*dxl
�6          ADD       R,R,RA,ASR #1  ; xr += 0.5*dxr
�          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

4          LDR       13,spd

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

H]

R=""

\

f

p� �piece

z
[OPT PASS

�.I1D DCD 0

�.I2D DCD 0

�.I3D DCD 0

�

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

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