Re: VIC 20 Graphics Artist
Posted: Mon Nov 06, 2023 7:47 pm
This is incredibly cool stuff.
Thanks for sharing and welcome to the forum, Neil!
Thanks for sharing and welcome to the forum, Neil!
The Commodore Vic 20 Forum
http://www.sleepingelephant.com/ipw-web/bulletin/bb/
http://www.sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=10695
I downloaded the *.zip archive, and as a first measure, I put a mirror up at my own web space (download here).Neil Huggett wrote:I have attached the zip file to this posting, so I hope that works okay.
In any case, this is a big time capsule you have unearthed here. A find like this shows how important it is to preserve and document one's own works.In putting this stuff together, I realised just how time consuming it is to look back at Vic-20 stuff written more than 30 years ago (trying to reverse-engineer machine code and other Vic-20 stuff because I have lost or misplaced the documentation I made at the time)!
thank you for this.Neil Huggett wrote:The thought of you 'extracting the relevant bits' from my WinVICE 2.1 snapshots, and the time it may take you made me wonder if I could help the process a bit. I have put together an archive: [...] I have included some more documentation in the form of a txt document. Hopefully this saves you some precious time, and provides more information on using the routines already written.
Code: Select all
1 AX=.5:AY=AX:A=0:B=0:D=400:O=560:M=1184:W=1170:EY=12:IW=-5:X2=1:Y2=1
2 MT=0:P=1:L=1:CX=0:CY=0:CZ=0:E=1:F=1:Q=1:I=1:J=1:C=1:S=1
3 X=0:Y=0:Z=0:G=1:IM=0:A1=20:B1=25:IA=0:A7=5:L7=10:T=1:U=1:H=1:K=1:X1=1:Y1=1
4 SH=1:SL=1:YS=1:AZ=1:ML=13008:WL=13008:MD=0
5 DIMX(26),Y(26),Z(26),S%(56),E%(56),XP(26),YP(26)
70 RESTORE:DATA-25,0,-25,25,0,-25,25,0,25,-25,0,25,-25,-50.0,-25,25,-50.0,-25
71 DATA25,-50.0,25,-25,-50.0,25,0,-85.35,0,0,35.36,0
72 DATA-25,28.87,-65.82,25,28.87,-65.82,0,64.22,-40.82,0,64.22,-90.82
73 DATA-25,28.87,65.82,25,28.87,65.82,0,64.22,40.82,0,64.22,90.82
74 DATA65.82,28.87,-25,65.82,28.87,25,40.82,64.22,0,90.82,64.22,0
75 DATA-65.82,28.87,25,-65.82,28.87,-25,-40.82,64.22,0,-90.82,64.22,0
80 DATA1,2,2,3,3,4,4,1,5,6,6,7,7,8,8,5,1,5,2,6,3,7,4,8,5,9,6,9,7,9,8,9
81 DATA1,10,2,10,3,10,4,10,1,11,2,12,10,13,11,12,12,13,13,11,11,14,12,14,13,14,25,26
82 DATA3,16,4,15,10,17,15,16,16,17,17,15,15,18,16,18,17,18,2,19,3,20,10,21,19,20
83 DATA20,21,21,19,19,22,20,22,21,22,1,24,4,23,10,25,23,24,24,25,25,23,23,26,24,26
90 P=26:L=56:CX=0:CY=0:CZ=0
92 FORI=1TOP:READX(I),Y(I),Z(I):NEXT
94 FORI=1TOL:READS%(I),E%(I):NEXT
112 IFMT=0THEN118
114 C=COS(MT):S=SIN(MT):FORI=1TOP:Y=Y(I)-CY:X=X(I)-CX:F=Y*C-X*S:G=X*C+Y*S
116 Y(I)=CY+F:X(I)=CX+G:NEXT
118 PRINT"{CLR}"
120 PRINT"{CLR}":PRINTTAB(45)"DISTANCE=";D
125 PRINTTAB(45)"TH=";A1;"{2 SPACE}ALT=";B1
130 PRINTTAB(45)"SCX=";M+MD;" SCY=";W+WD
132 PRINTTAB(45)"SEP=";IW;" IM.ROT=";IA
135 PRINTTAB(45)"SC.DIST=";O+D:PRINTTAB(89)"{2 SPACE}HIT 'X' WHEN OK"
140 GETA$:IFA$=""THEN140
142 IFA$="C"THEND=D-L7:GOTO120
144 IFA$="F"THEND=D+L7:GOTO120
146 IFA$="L"THENA1=A1+A7:GOTO120
148 IFA$="R"THENA1=A1-A7:GOTO120
150 IFA$="U"THENB1=B1+A7:GOTO120
160 IFA$="D"THENB1=B1-A7:GOTO120
162 IFA$="X"THEN210
164 IFA$="{UP}"THENWD=WD-5:GOTO120
166 IFA$="{DOWN}"THENWD=WD+5:GOTO120
168 IFA$="{RIGHT}"THENMD=MD+5:GOTO120
170 IFA$="{LEFT}"THENMD=MD-5:GOTO120
172 IFA$="+"THENIW=IW+5:GOTO120
174 IFA$="-"THENIW=IW-5:GOTO120
176 IFA$="{SHIFT-C}"THENO=O-L7:GOTO120
178 IFA$="{SHIFT-F}"THENO=O+L7:GOTO120
180 IFA$="0"THENIA=IA-A7:GOTO120
182 IFA$="9"THENIA=IA+A7:GOTO120
185 GOTO140
210 PRINT:PRINT:PRINT" OK -NOW CALCULATING"
215 A=A1*{PI}/180:B=B1*{PI}/180:IM=IA*{PI}/180
218 C=COS(A):S=SIN(A)
220 FORI=1TOP:X=X(I)-CX:Z=Z(I)-CZ:E=X*C-Z*S:G=Z*C+X*S
230 X(I)=CX+E:Z(I)=CZ+G:NEXT
240 C=COS(B):S=SIN(B):FORI=1TOP:Y=Y(I)-CY:Z=Z(I)-CZ:F=Y*C+Z*S:G=Z*C-Y*S
250 Y(I)=CY+F:Z(I)=CZ+G:NEXT
260 C=COS(IM):S=SIN(IM):FORI=1TOP:Y=Y(I)-CY:X=X(I)-CX:F=Y*C-X*S:G=X*C+Y*S
270 Y(I)=CY+F:X(I)=CX+G:NEXT
360 G=M+MD:F=CX
435 SYS1166:SYS1230:SYS1264:GOSUB500
450 SYS13680
455 GETB$:IFB$=""THEN455
458 IFB$=" "THEND=D:SYS1122:PRINT"{CLR,2 RIGHT,DOWN}PLEASE WAIT":GOTO70
480 GOTO455
500 T=D+O:K=W+WD:FORI=1TOP:U=D+Z(I)-CZ:IFU=0THENU=.5
502 X=(X(I)-F)*T*AX/U:Y=(Y(I)-CY)*T*AY/U
505 XP(I)=INT(G+X):YP(I)=INT(K-Y):NEXT
510 FORI=1TOL:X1=XP(S%(I)):Y1=YP(S%(I)):X2=XP(E%(I)):Y2=YP(E%(I)):GOSUB550
520 NEXT
525 RETURN
550 IFX1<0ORX1>32000THENRETURN
555 IFY1<0ORY1>32000THENRETURN
560 IFX2<0ORX2>32000THENRETURN
565 IFY2<0ORY2>32000THENRETURN
570 X=INT(X1/256):POKE3045,X:POKE3044,X1-X*256
571 Y=INT(Y1/256):POKE3049,Y:POKE3048,Y1-Y*256
572 X=INT(X2/256):POKE3047,X:POKE3046,X2-X*256
573 Y=INT(Y2/256):POKE3051,Y:POKE3050,Y2-Y*256
575 SYS1576:SYS1264:RETURN
Code: Select all
1 POKE55,0:POKE56,32:CLR:DN=PEEK(186)
2 POKE648,30:SYS58648
3 N$="BART3K":GOSUB9:N$="BARTMC":GOSUB9
4 PRINT"{CLR}LOAD"CHR$(34)"BASIC.PRG"CHR$(34)","MID$(STR$(DN),2)
5 POKE631,19:POKE632,131:POKE198,2
6 POKE40960,0:POKE43,1:POKE44,160:POKE55,0:POKE56,192:NEW
7 REMPOKE8192,0:POKE43,1:POKE44,32:POKE55,0:POKE56,46:NEW
8 :
9 SYS57809(N$),DN,1:POKE780,0:SYS65493:RETURN