10 REM ========================================== 20 REM CINEMATIC SCIENCE-FICTION DISPLAY SYSTEM 30 REM COMMODORE 128 NATIVE - BASIC 7.0 40 REM DEEP-SPACE TELEMETRY & COMMAND CONSOLE 50 REM ========================================== 100 REM --- SYSTEM INITIALIZATION --- 110 FAST : REM MAX CPU SPEED FOR VDC INIT 120 PRINT CHR$(142); : REM UPPERCASE/GRAPHICS 130 DIM X(60),Y(60),Z(60),VX(60),VY(60),VZ(60),C(60) 140 DIM PX(16),PY(16),OX(16),OY(16),V(30),E1(20),E2(20) 150 REM LOAD 3D CUBE/SPACECRAFT EDGES 160 FOR I=1 TO 16: READ E1(I), E2(I): NEXT 170 DATA 0,1, 1,2, 2,3, 3,0, 4,5, 5,6, 6,7, 7,4, 0,4, 1,5, 2,6, 3,7, 0,6, 1,7, 2,4, 3,5 180 DIM CX(8),CY(8),CZ(8) 190 R=35 : FOR I=0 TO 7 : CX(I)=R*(1-2*(I AND 1)) : CY(I)=R*(1-2*((I AND 2)/2)) : CZ(I)=R*(1-2*((I AND 4)/4)) : NEXT 200 REM --- MASTER DISPATCHER & TRANSITION ENGINE --- 210 SLOW : COLOR 0,1 : COLOR 4,1 : COLOR 1,6 : GRAPHIC 1,1 225 QF=0 : MD=1 230 DO 240 GOSUB 9000 : REM CINEMATIC WIPE TRANSITION 250 ON MD GOSUB 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9500, 10000, 11000, 12000, 13000 260 IF QF=1 THEN 300 270 MD = MD + 1 : IF MD>13 THEN MD=1 280 LOOP 300 SLOW : GRAPHIC 0 : PRINT CHR$(147);"DEEP-SPACE CONSOLE OFFLINE." : END 500 REM --- STANDARD CINEMATIC HEADER --- 510 BOX 0, 0, 0, 319, 16, 0, 1 : COLOR 1,CC 520 CHAR 1, 1, 1, T$ : RETURN 9000 REM --- TRANSITION: SCAN WIPE & SYSTEM SYNC --- 9010 FOR W=0 TO 319 STEP 20 9020 COLOR 1,1 : BOX 1,W,0,W+10,199,0,1 9030 T1=TI: DO: LOOP UNTIL TI-T1>2 9040 NEXT W 9050 GRAPHIC 1,1 : RETURN 1000 REM === 1: DEEP-SPACE ORBITAL NAVIGATION === 1010 T$="ORBITAL NAVIGATION - SECTOR 7" : CC=2 : GOSUB 500 1020 COLOR 1,6: CIRCLE 1,160,100,120,60 : COLOR 1,4: CIRCLE 1,160,100,90,45 1030 COLOR 1,2: CIRCLE 1,160,100,18,18 : REM CENTRAL PLANET 1040 A1=0 : A2=1.57 : A3=3.14 : T0=TI 1050 DO 1060 X1=160+120*COS(A1) : Y1=100+60*SIN(A1) 1070 X2=160+90*COS(A2) : Y2=100+45*SIN(A2) 1080 COLOR 1,2: BOX 1,X1,Y1,X1+2,Y1+2,0,1 : COLOR 1,6: BOX 1,X2,Y2,X2+2,Y2+2,0,1 1090 COLOR 1,2: CHAR 1,1,22,"OBJ-A VEL: "+HEX$(INT(X1*42))+" " 1100 COLOR 1,6: CHAR 1,1,23,"OBJ-B ALT: "+HEX$(INT(Y2*33))+" " 1110 BOX 0,X1,Y1,X1+2,Y1+2,0,1 : BOX 0,X2,Y2,X2+2,Y2+2,0,1 1120 A1=A1+0.04 : A2=A2-0.03 1130 GET K$ : IF K$="Q" THEN QF=1: RETURN 1140 LOOP UNTIL TI-T0>220 1150 RETURN 2000 REM === 2: 3D VECTOR ATTITUDE PROJECTION === 2010 T$="3D ATTITUDE PROJECTION" : CC=6 : GOSUB 500 2020 A=0: B=0: C=0 : T0=TI 2030 COLOR 1,2: DRAW 1,160,20 TO 160,180 : DRAW 1,60,100 TO 260,100 2040 DO 2050 SA=SIN(A):CA=COS(A):SB=SIN(B):CB=COS(B):SC=SIN(C):CC=COS(C) 2060 FOR I=0 TO 7 2070 XY=CX(I)*CA-CY(I)*SA : YY=CX(I)*SA+CY(I)*CA 2080 XZ=XY*CB-CZ(I)*SB : ZY=XY*SB+CZ(I)*CB 2090 YZ=YY*CC-ZY*SC : ZZ=YY*SC+ZY*CC 2100 OX(I)=PX(I) : OY(I)=PY(I) 2110 PX(I)=160+(XZ*50)/(120+ZZ) : PY(I)=100+(YZ*50)/(120+ZZ) 2120 NEXT 2130 FOR J=1 TO 16: DRAW 0, OX(E1(J)), OY(E1(J)) TO OX(E2(J)), OY(E2(J)): NEXT 2140 COLOR 1,6: FOR J=1 TO 16: DRAW 1, PX(E1(J)), PY(E1(J)) TO PX(E2(J)), PY(E2(J)): NEXT 2150 COLOR 1,4: CHAR 1,1,23,"PITCH:"+STR$(INT(A*57))+" YAW:"+STR$(INT(B*57))+" " 2160 A=A+0.08 : B=B+0.05 : C=C+0.06 2170 GET K$: IF K$="Q" THEN QF=1: RETURN 2180 LOOP UNTIL TI-T0>220 2190 RETURN 3000 REM === 3: DEEP-SPACE RADAR TACTICAL === 3010 T$="TACTICAL RADAR CONSOLE" : CC=4 : GOSUB 500 3020 COLOR 1,6: FOR R=25 TO 95 STEP 25: CIRCLE 1,160,100,R,R: NEXT 3030 DRAW 1,160,5 TO 160,195 : DRAW 65,100 TO 255,100 3040 A=0 : T0=TI 3050 DO 3060 X=160+90*COS(A): Y=100+90*SIN(A) 3070 DRAW 0,160,100 TO X,Y 3080 A=A+0.12 : IF A>6.28 THEN A=A-6.28 3090 X=160+90*COS(A): Y=100+90*SIN(A) 3100 COLOR 1,6: DRAW 1,160,100 TO X,Y 3110 IF RND(1)<0.2 THEN TX=160+RND(1)*140-70 : TY=100+RND(1)*120-60 : COLOR 1,2 : BOX 1,TX,TY,TX+2,TY+2,0,1 3120 COLOR 1,4: CHAR 1,2,23,"SWEEP AZ:"+STR$(INT(A*57.3))+" " 3130 GET K$: IF K$="Q" THEN QF=1: RETURN 3140 LOOP UNTIL TI-T0>220 3150 RETURN 4000 REM === 4: TRIPLE WAVEFORM SPECTRUM ANALYZER === 4010 T$="SIGNAL SPECTRUM ANALYZER" : CC=2 : GOSUB 500 4020 COLOR 1,2: DRAW 1,20,100 TO 300,100 : DRAW 1,20,30 TO 20,170 4030 P=0 : T0=TI 4040 DO 4050 P=P+0.3 4060 FOR X=30 TO 290 STEP 6 4070 Y1 = 70 + 20*SIN(X/15 + P) 4080 Y2 = 130 + 20*COS(X/15 + P) 4090 BOX 0,X,45,X+4,155,0,1 4100 COLOR 1,4: BOX 1,X,Y1,X+4,Y1+2,0,1 4110 COLOR 1,6: BOX 1,X,Y2,X+4,Y2+2,0,1 4120 NEXT X 4130 COLOR 1,2: CHAR 1,1,23,"FREQ: 4.882 GHz PHASE LOCK: ACTIVE" 4140 GET K$: IF K$="Q" THEN QF=1: RETURN 4150 LOOP UNTIL TI-T0>220 4160 RETURN 5000 REM === 5: STELLAR NAVIGATION & TRIANGULATION === 5010 T$="STELLAR TRIANGULATION MAP" : CC=6 : GOSUB 500 5020 COLOR 1,2 5030 FOR I=1 TO 25 5040 X(I)=RND(1)*280+20 : Y(I)=RND(1)*120+30 5050 BOX 1,X(I),Y(I),X(I)+1,Y(I)+1,0,1 5060 NEXT I 5070 T0=TI 5080 DO 5090 P1=INT(RND(1)*25)+1 : P2=INT(RND(1)*25)+1 5100 COLOR 1,4: DRAW 1,X(P1),Y(P1) TO X(P2),Y(P2) 5110 COLOR 1,6: CHAR 1,INT(X(P1)/8),INT(Y(P1)/8),"S-"+STR$(P1) 5120 COLOR 1,2: CHAR 1,1,23,"SOLUTION SOLVED: RA 14H 22M / DEC +42" 5130 T1=TI: DO: LOOP UNTIL TI-T1>15 5140 GET K$: IF K$="Q" THEN QF=1: RETURN 5150 LOOP UNTIL TI-T0>220 5160 RETURN 6000 REM === 6: PROGRESSIVE TRAJECTORY SOLVER === 6010 T$="INTERCEPT TRAJECTORY SOLVER" : CC=4 : GOSUB 500 6020 COLOR 1,6 6030 FOR X=20 TO 300 STEP 40: DRAW 1,X,25 TO X,175: NEXT 6040 FOR Y=25 TO 175 STEP 30: DRAW 1,20,Y TO 300,Y: NEXT 6050 T0=TI : X=20 6060 DO 6070 Y = 160 - (X*X)/250 6080 COLOR 1,2: CIRCLE 1,X,Y,2,2 6090 COLOR 1,4: CHAR 1,2,22,"DELTA-V: "+STR$(INT(X*3.14))+" M/S" 6100 X = X + 4 : IF X>300 THEN X=20 : COLOR 1,1 : BOX 1,21,26,299,174,0,1 6110 GET K$: IF K$="Q" THEN QF=1: RETURN 6120 LOOP UNTIL TI-T0>220 6130 RETURN 7000 REM === 7: SPACECRAFT SUBSYSTEM SCHEMATIC === 7010 T$="SUBSYSTEM ARCHITECTURE & BUS" : CC=2 : GOSUB 500 7020 COLOR 1,2 7030 BOX 1,30,30,90,70,0,0 : CHAR 1,4,4,"REACTOR" 7040 BOX 1,130,30,190,70,0,0 : CHAR 1,17,4,"NAVIGATION" 7050 BOX 1,230,30,290,70,0,0 : CHAR 1,30,4,"LIFE-SUP" 7060 BOX 1,80,110,140,150,0,0: CHAR 1,11,14,"PROPULSION" 7070 BOX 1,180,110,240,150,0,0: CHAR 1,24,14,"GUIDANCE" 7080 DRAW 1,90,50 TO 130,50 : DRAW 1,190,50 TO 230,50 7090 DRAW 1,110,70 TO 110,110 : DRAW 1,210,70 TO 210,110 7100 T0=TI 7110 DO 7120 C=4 : IF RND(1)>0.5 THEN C=6 7130 COLOR 1,C: BOX 1,190,120,230,140,0,1 : COLOR 1,2: CHAR 1,25,15,"ACTIVE" 7140 COLOR 1,6: CHAR 1,2,23,"BUS STATUS: ALL CHANNELS NOMINAL" 7150 T1=TI: DO: LOOP UNTIL TI-T1>15 7160 GET K$: IF K$="Q" THEN QF=1: RETURN 7170 LOOP UNTIL TI-T0>220 7180 RETURN 8000 REM === 8: CORE MEMORY MACHINE-STATE MAP === 8010 T$="CORE MEMORY MACHINE-STATE" : CC=6 : GOSUB 500 8020 COLOR 1,6 8030 FOR I=0 TO 9: FOR J=0 TO 7: BOX 1,30+I*26,25+J*18,52+I*26,39+J*18,0,0: NEXT: NEXT 8040 T0=TI 8050 DO 8060 I=INT(RND(1)*10) : J=INT(RND(1)*8) 8070 C=2 : IF RND(1)>0.6 THEN C=4 8080 COLOR 1,C: BOX 1,31+I*26,26+J*18,51+I*26,38+J*18,0,1 8090 COLOR 1,6: CHAR 1,2,23,"MEM BANK $E000-$FFFF: SCANNING..." 8100 GET K$: IF K$="Q" THEN QF=1: RETURN 8110 LOOP UNTIL TI-T0>220 8120 RETURN 9500 REM === 9: ROTATING POLAR & LISSAJOUS PLOT === 9510 T$="POLAR MATRIX / LISSAJOUS" : CC=4 : GOSUB 500 9520 T0=TI : A=0 9530 DO 9540 R = 60 * SIN(3*A) * COS(2*A) 9550 X = 160 + R*COS(A) : Y = 100 + R*SIN(A) 9560 COLOR 1,6: CIRCLE 1,X,Y,2,2 9570 A = A + 0.15 9580 COLOR 1,2: CHAR 1,2,23,"POLAR ANGLE THETA: "+STR$(INT(A*57))+" " 9590 GET K$: IF K$="Q" THEN QF=1: RETURN 9600 LOOP UNTIL TI-T0>220 9610 RETURN 10000 REM === 10: GRAVITATIONAL WELL & VECTOR FIELD === 10010 T$="GRAVITATIONAL WELL TENSOR" : CC=2 : GOSUB 500 10020 COLOR 1,6 10030 FOR R=10 TO 80 STEP 15: CIRCLE 1,160,100,R,R: NEXT 10040 T0=TI : A=0 10050 DO 10060 A=A+0.2 10070 X1=160+70*COS(A) : Y1=100+70*SIN(A) 10080 COLOR 1,4: BOX 1,X1,Y1,X1+3,Y1+3,0,1 10090 COLOR 1,2: CHAR 1,2,23,"TENSOR GRADIENT: -0.984 G/CM3" 10100 BOX 0,X1,Y1,X1+3,Y1+3,0,1 10110 GET K$: IF K$="Q" THEN QF=1: RETURN 10120 LOOP UNTIL TI-T0>220 10130 RETURN 11000 REM === 11: AUTOMATED LANDING & TERRAIN PROFILE === 11010 T$="AUTOMATED DESCENT COMPUTER" : CC=6 : GOSUB 500 11020 COLOR 1,2: DRAW 1,20,160 TO 300,160 11030 FOR X=30 TO 290 STEP 20: DRAW 1,X,160 TO X,150-RND(1)*40: NEXT 11040 T0=TI : DX=160 : DY=60 11050 DO 11060 BOX 0,DX-4,DY-4,DX+4,DY+4,0,1 11070 DY = DY + 1 : IF DY>130 THEN DY=60 11080 COLOR 1,4: BOX 1,DX-4,DY-4,DX+4,DY+4,0,0 11090 COLOR 1,6: CHAR 1,2,23,"ALTITUDE: "+STR$(INT(160-DY)*15)+"M DESCENT: -4.2M/S" 11100 GET K$: IF K$="Q" THEN QF=1: RETURN 11110 LOOP UNTIL TI-T0>220 11120 RETURN 12000 REM === 12: COMPUTER HEURISTIC THOUGHT DISPLAY === 12010 T$="NEURAL HEURISTIC SOLVER" : CC=4 : GOSUB 500 12020 T0=TI 12030 DO 12040 X1=RND(1)*260+30 : Y1=RND(1)*120+30 12050 X2=RND(1)*260+30 : Y2=RND(1)*120+30 12060 COLOR 1,2: DRAW 1,X1,Y1 TO X2,Y2 12070 COLOR 1,6: CIRCLE 1,X1,Y1,3,3 12080 COLOR 1,4: CHAR 1,2,23,"HEURISTIC SEARCH ACTIVE..." 12090 GET K$: IF K$="Q" THEN QF=1: RETURN 12100 LOOP UNTIL TI-T0>220 12110 RETURN 13000 REM === 13: 80 COLUMN VDC TELEMETRY WALL === 13010 GRAPHIC 5 : FAST 13020 PRINT CHR$(147); 13030 PRINT "================================================================================" 13040 PRINT " COMMAND MODULE TELEMETRY WALL MISSION TIME: T-04:22:10" 13050 PRINT "================================================================================" 13060 PRINT : PRINT " NAV / GUIDANCE: NOMINAL" : PRINT " PROPULSION BUS: STABLE" 13070 PRINT " RADAR TRACKING: ACQUIRED" : PRINT " REACTOR OUTPUT: 104.2%" 13080 PRINT : PRINT " SECTOR CHANNELS VECTOR_XYZ BEARING STATUS" 13090 PRINT " ------ -------- ---------- ------- ------" 13100 FOR I=1 TO 5 13110 PRINT " ";HEX$(INT(RND(1)*255));TAB(10);HEX$(INT(RND(1)*4096));TAB(21);STR$(RND(1));TAB(35);INT(RND(1)*360);TAB(46);"NOMINAL" 13120 NEXT 13130 T0=TI 13140 DO 13150 PRINT CHR$(19); : FOR N=1 TO 3: PRINT CHR$(17); : NEXT 13160 PRINT TAB(18);STR$(INT(RND(1)*100));"%" 13170 T1=TI: DO: LOOP UNTIL TI-T1>5 13180 GET K$: IF K$="Q" THEN QF=1: RETURN 13190 LOOP UNTIL TI-T0>220 13200 SLOW : GRAPHIC 1,1 : RETURN