Time for a bigger program. This example draws a 'minigrafik' logo. First the 'minigrafik' caption is read from DATA statements, and drawn using a line-routine (it's here only used to draw vertical lines).
Then two ellipses are drawn. I've assumed a 1.67:1 ratio for a VIC pixel on a TV set, so these ellipses actually should come out as circles. In VICE they'll appear more flattened.
Finally the gap between these two ellipses is filled with a flood fill routine.
The main program in the lines 1-9 shows, how to call the sub-routines in your own programs.
Code: Select all
1 REM ** MINIGRAFIK DEMO
2 POKE36879,14:POKE646,7:@ON:@CLR
3 READX:IFX<>-1THENX1=X+31:X2=X1:READA,B:Y1=113-A:Y2=113-B:GOSUB40:GOTO3
4 MX=80:MY=96:A=54:B=90:GOSUB50:A=57:B=95:GOSUB50
5 X=111:Y=173:GOSUB70
6 GETA$:IFA$=""THEN6
7 POKE36879,27:POKE646,6:@RETURN
8 END
9 :
10 DATA1,9,24,2,15,24,3,21,23,4,23,24,5,23,25,6,23,25,7,9,24,8,9,23,9,20,23,10,22,24
11 DATA11,23,25,12,23,25,13,23,25,14,10,24,15,9,22,16,9,10,17,10,11
12 :
13 DATA19,11,22,19,29,30,20,9,24,20,29,30,21,9,10,22,10,11
14 :
15 DATA25,9,24,26,9,24,27,19,22,28,22,24,29,23,25,30,23,25,31,23,25,32,10,24,33,9,22
16 DATA34,9,10,35,10,11
17 :
18 DATA37,11,22,37,29,30,38,9,24,38,29,30,39,9,10,40,10,11
19 :
20 DATA43,13,18,44,2,3,44,11,21,45,1,3,45,10,12,45,20,23,46,1,3,46,9,11,46,22,24,47,1,3
21 DATA47,9,11,47,23,24,48,2,3,48,10,11,48,23,25,49,2,4,49,11,12,49,23,25,50,3,10
22 DATA50,12,15,50,23,25,51,6,25,52,19,24
23 :
24 DATA55,9,24,56,11,24,57,20,23,58,22,24,59,23,25,60,23,25
25 :
26 DATA63,13,18,64,11,22,65,10,12,65,20,23,66,9,11,66,22,24,67,9,11,67,23,24,68,10,12
27 DATA68,23,25,69,11,13,69,23,25,70,10,25,71,9,24,72,9,10,73,10,11
28 :
29 DATA71,1,3,72,1,3,73,1,3,74,2,4,74,23,24,75,3,7,75,23,24,76,4,30,77,11,32,78,23,24
30 DATA78,31,33,79,23,24,79,32,34,80,32,34,81,33,33
31 :
32 DATA82,11,22,82,29,30,83,9,24,83,29,30,84,9,10,85,10,11
33 :
34 DATA88,9,34,89,16,34,90,16,18,90,21,23,91,14,18,91,22,24,92,12,15,92,17,19,92,23,25
35 DATA93,10,13,93,18,20,93,23,25,94,9,11,94,19,24,95,9,11,95,20,23,96,10,11
36 :
37 DATA-1
38 :
39 REM ** LINE DRAW
40 DX=X2-X1:DY=Y2-Y1:IFDX=0ANDDY=0THEN:@1,X1,Y1:RETURN
41 IFABS(DX)<ABS(DY)THEN43
42 M=DY/DX:B=Y1-M*X1+.5:FORX=X1TOX2STEPSGN(X2-X1):@1,X,INT(M*X+B):NEXT:RETURN
43 M=DX/DY:B=X1-M*Y1+.5:FORY=Y1TOY2STEPSGN(Y2-Y1):@1,INT(M*Y+B),Y:NEXT:RETURN
44 :
49 REM ** ELLIPSE DRAW
50 X=0:Y=B:S=B*B:T=A*A*(2*Y-1):U=2*B*B:V=2*A*A:E=0
51 X1=MX+X:F1=X1>=0ANDX1<160
52 Y1=MY+Y:F2=Y1>=0ANDY1<192:IFF1ANDF2THEN:@1,X1,Y1
53 Y2=MY-Y:F3=Y2>=0ANDY2<192:IFF1ANDF3THEN:@1,X1,Y2
54 X2=MX-X:F4=X2>=0ANDX2<160:IFF4ANDF3THEN:@1,X2,Y2
55 IFF4ANDF2THEN:@1,X2,Y1
56 IFX=AANDY=0THENRETURN
57 F=E+S:D=0
58 G=F-T:IFABS(F)>ABS(G)THENF=G:D=1
59 G=E-T:IFABS(F)>ABS(G)THENF=G:D=2
60 E=F
61 IFD<2THENX=X+1:S=S+U
62 IFD>0THENY=Y-1:T=T-V
63 GOTO51
64 :
69 REM ** FLOOD FILL
70 Q$=CHR$(X)+CHR$(Y)
71 IFQ$=""THENRETURN
72 X=ASC(MID$(Q$,1,1)):Y=ASC(MID$(Q$,2,1))
73 Q$=MID$(Q$,3):GOSUB82:IFPTHEN71
74 X=X-1:GOSUB82:IFNOTPTHEN74
75 X=X+1:U=0:D=0
76 @1,X,Y:Y=Y-1:GOSUB82:IFPTHENU=0:GOTO78
77 IFNOTUTHENQ$=Q$+CHR$(X)+CHR$(Y):U=-1
78 Y=Y+2:GOSUB82:IFPTHEND=0:GOTO80
79 IFNOTDTHENQ$=Q$+CHR$(X)+CHR$(Y):D=-1
80 Y=Y-1:X=X+1:GOSUB82:IFNOTPTHEN76
81 GOTO71
82 IFX<0ORX>159ORY<0ORY>191THENP=-1:RETURN
83 P=-@(X,Y):RETURN
84 :
99 REM ** MINIGRAFIK DEMO 2006-03-23 BY MICHAEL KIRCHER