Updates to CPM and Microsoft BASIC to configure the new Video Module and system board speed
This commit is contained in:
BIN
schematics/tranZPUter_Schematic_v2_0.pdf
Normal file
BIN
schematics/tranZPUter_Schematic_v2_0.pdf
Normal file
Binary file not shown.
BIN
software/BAS/CIRCOM.BAS
Normal file
BIN
software/BAS/CIRCOM.BAS
Normal file
Binary file not shown.
412
software/BAS/DEMOGRAF.BAS
Normal file
412
software/BAS/DEMOGRAF.BAS
Normal file
@@ -0,0 +1,412 @@
|
||||
REM THIS IS A DEMONSTRATION PROGRAM FOR
|
||||
REM CBASIC GRAPHICS EXTENSIONS
|
||||
REM
|
||||
REM PROGRAM NAME: DEMOGRAF
|
||||
REM
|
||||
%INCLUDE GRAPHCOM.BAS
|
||||
|
||||
DEF PAUSE
|
||||
REM UTILITY TO SUSPEND PROGRAM EXECUTION UNTIL CHARACTER IS
|
||||
REM ENTERED AT CONSOLE, STOPPING PROGRAM IF CTRL-C IS ENTERED,
|
||||
REM OTHERWISE RETURNING INTEGER VALUE OF CHARACTER ENTERED.
|
||||
REM CHARACTER IS NOT DISPLAYED.
|
||||
|
||||
INTEGER PAUSE,CHOICE
|
||||
|
||||
CHOICE = INKEY
|
||||
IF CHOICE = 3 THEN STOP
|
||||
PAUSE = CHOICE
|
||||
FEND
|
||||
|
||||
GRAPHIC OPEN 1
|
||||
CLEAR
|
||||
|
||||
BEEM: GRAPHIC PRINT AT (0,.9): "BEAM STATEMENT"
|
||||
SET BEAM "OFF"
|
||||
PLOT (0,1),(1,1),(1,0),(0,0)
|
||||
KEY% = PAUSE REM WAIT FOR CONSOLE INPUT
|
||||
CLEAR
|
||||
SET BEAM "ON"
|
||||
PLOT (0,1),(1,1),(1,0),(0,0)
|
||||
KEY% = PAUSE
|
||||
|
||||
REM ILLUSTRATE TECHNIQUE OF SQUARING A DISPLAY
|
||||
|
||||
BOWNDS: CLEAR
|
||||
GRAPHIC PRINT AT (0,.9): "BOUNDS STATEMENT"
|
||||
ASK DEVICE X.AXIS,Y.AXIS
|
||||
PRINT "THE ASPECT RATIO IS = ";Y.AXIS;"/";X.AXIS
|
||||
KEY% = PAUSE
|
||||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||||
KEY% = PAUSE
|
||||
CLEAR
|
||||
SET BOUNDS Y.AXIS,X.AXIS
|
||||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||||
SET BOUNDS 1,1
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DEMONSTRATE CONTROL OF GRAPHIC CHARACTER HEIGHT
|
||||
REM AND MINIMUM HEIGHT FOR GRAPHIC CHARACTERS
|
||||
|
||||
HIGH: CLEAR
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,.9): "CHARACTER HEIGHT STATEMENT"
|
||||
SET CHARACTER HEIGHT .1
|
||||
GRAPHIC PRINT AT (0,.7): "10 PERCENT"
|
||||
KEY% = PAUSE
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 15
|
||||
GRAPHIC PRINT AT (0,40): "15 PERCENT"
|
||||
KEY% = PAUSE
|
||||
SET CHARACTER HEIGHT 0
|
||||
ASK CHARACTER HEIGHT CH
|
||||
PRINT "MINIMUM CHARACTER HEIGHT IS = "; CH
|
||||
GRAPHIC PRINT AT (0,20): "MINIMUM HEIGHT"
|
||||
|
||||
REM DISPLAY SEVERAL RANDOM LINES ON SCREEN, THEN MAKE
|
||||
REM THEM DISAPPEAR VIA "CLEAR" STATEMENT
|
||||
|
||||
INPUT ""; LINE SEED$
|
||||
RANDOMIZE
|
||||
CLR: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): "CLEAR STATEMENT"
|
||||
SET WINDOW 0,1,0,1
|
||||
FOR I.INT% = 1 TO 10
|
||||
PLOT (RND,RND),(RND,RND)
|
||||
NEXT I.INT%
|
||||
KEY% = PAUSE
|
||||
CLEAR
|
||||
|
||||
REM ILLUSTRATE EFFECT OF AUTOMATIC CLIPPING WHEN FIGURE
|
||||
REM EXCEEDS ALLOWABLE BOUNDARIES
|
||||
|
||||
CLP: SET WINDOW 0,100,0,100
|
||||
GRAPHIC PRINT AT (0,90): "CLIP STATEMENT"
|
||||
PLOT (25,10),(50,150),(75,10),(25,10)
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DRAW BORDER IN EACH AVAILABLE COLOR (NUMBER OF
|
||||
REM COLORS VARIES WITH RESOLUTION)
|
||||
|
||||
COLR: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): \
|
||||
"COLOR AND COLOR COUNT STATEMENTS"
|
||||
SET WINDOW 0,1,0,1
|
||||
ASK COLOR COUNT CT%
|
||||
FOR I.INT% = 1 TO CT%
|
||||
SET COLOR I.INT%
|
||||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||||
KEY% = PAUSE
|
||||
NEXT I.INT%
|
||||
|
||||
REM RETRIEVE AND DISPLAY SPECIFICATIONS FOR CURRENT DEVICE
|
||||
|
||||
DEVC: CLEAR
|
||||
SET CHARACTER HEIGHT 0
|
||||
SET COLOR 1
|
||||
GRAPHIC PRINT AT (0,.8): "DEVICE STATEMENT"
|
||||
ASK DEVICE X.AXIS,Y.AXIS
|
||||
PRINT "THE VERTICAL AXIS IS "; \
|
||||
Y.AXIS*100.0/X.AXIS;"PERCENT OF THE";
|
||||
PRINT " HORIZONTAL AXIS"
|
||||
PRINT "X= ";X.AXIS;" Y= ";Y.AXIS
|
||||
KEY% = PAUSE
|
||||
|
||||
REM MENTION "GRAPHIC CLOSE" STATEMENT
|
||||
|
||||
GCLOSE: CLEAR
|
||||
GRAPHIC PRINT AT (0,.9): "GRAPHIC CLOSE STATEMENT"
|
||||
GRAPHIC PRINT AT (0,.5): "GRAPHIC CLOSE HAS NO DEMO"
|
||||
KEY% = PAUSE
|
||||
|
||||
REM ILLUSTRATE GRAPHIC INPUT VIA CURSOR POSITIONING
|
||||
|
||||
GIN: CLEAR
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,80): "GRAPHIC INPUT STATEMENT"
|
||||
GRAPHIC PRINT AT (0,25): "OPTION 1 ."
|
||||
SET COLOR 2
|
||||
GRAPHIC PRINT AT (0,50): "OPTION 2 ."
|
||||
SET COLOR 3
|
||||
GRAPHIC PRINT AT (0,75): "OPTION 3 ."
|
||||
GRAPHIC INPUT X.AXIS,Y.AXIS,A$
|
||||
N = INT((Y.AXIS+5)/25)
|
||||
IF N = 0 THEN N = 1 REM NO OPTION ZERO
|
||||
IF N > 3 THEN N = 3 REM ONLY THREE OPTIONS
|
||||
PRINT "THE CURSOR WAS POSITIONED AT: "; X.AXIS,Y.AXIS
|
||||
PRINT "YOU SELECTED OPTION: "; N
|
||||
PRINT "THE TERMINATING KEY WAS: "; A$
|
||||
KEY% = PAUSE
|
||||
|
||||
REM MENTION "GRAPHIC OPEN" STATEMENT
|
||||
|
||||
GOPEN: CLEAR
|
||||
SET COLOR 1
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,90): "GRAPHIC OPEN STATEMENT"
|
||||
GRAPHIC PRINT AT (0,50): \
|
||||
"THE GRAPHIC OPEN HAS NO DEMONSTRATION"
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DEMONSTRATE CENTERING AND JUSTIFICATION
|
||||
|
||||
GPRT: CLEAR
|
||||
SET WINDOW 0,1,0,1
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,.9): "GRAPHIC PRINT STATEMENT"
|
||||
SET JUSTIFY 0,0
|
||||
GRAPHIC PRINT AT (.5,.5): "BEGINS AT CENTER"
|
||||
KEY% = PAUSE
|
||||
SET JUSTIFY .5,0
|
||||
GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED"
|
||||
KEY% = PAUSE
|
||||
SET JUSTIFY .5,.5
|
||||
GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED"
|
||||
KEY% = PAUSE
|
||||
SET JUSTIFY 1.0,1.0
|
||||
GRAPHIC PRINT AT (.5,.5): "ENDS AT CENTER"
|
||||
KEY% = PAUSE
|
||||
JUST: CLEAR
|
||||
SET JUSTIFY 0,0
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,90): "JUSTIFY STATEMENT"
|
||||
PLOT (20,80),(20,20),(80,20)
|
||||
PLOT (15,40),(20,40)
|
||||
PLOT (15,60),(20,60)
|
||||
PLOT (15,80),(20,80)
|
||||
PLOT (40,15),(40,20)
|
||||
PLOT (60,15),(60,20)
|
||||
PLOT (80,15),(80,20)
|
||||
SET JUSTIFY 1,.5
|
||||
GRAPHIC PRINT AT (14,20): "20"
|
||||
GRAPHIC PRINT AT (14,40): "40"
|
||||
GRAPHIC PRINT AT (14,60): "60"
|
||||
GRAPHIC PRINT AT (14,80): "80"
|
||||
SET JUSTIFY .5,1
|
||||
GRAPHIC PRINT AT (20,14): "20"
|
||||
GRAPHIC PRINT AT (40,14): "40"
|
||||
GRAPHIC PRINT AT (60,14): "60"
|
||||
GRAPHIC PRINT AT (80,14): "80"
|
||||
KEY% = PAUSE
|
||||
|
||||
REM EXHIBIT VARIATION OF LINE STYLE
|
||||
|
||||
STYL: CLEAR
|
||||
SET JUSTIFY 0,0
|
||||
SET WINDOW 0,1,0,1
|
||||
GRAPHIC PRINT AT (0,.9): "LINE STYLE STATEMENT"
|
||||
SET LINE STYLE 3
|
||||
SET JUSTIFY 1,0
|
||||
GRAPHIC PRINT AT (.5,.5): "Sign here"
|
||||
PLOT (0.5,0.5),(0.8,0.5)
|
||||
KEY% = PAUSE
|
||||
|
||||
REM ILLUSTRATE VARIATION IN SIZE OF MARKERS
|
||||
|
||||
MHIGH: CLEAR
|
||||
SET WINDOW 0,1,0,1
|
||||
SET CHARACTER HEIGHT 0
|
||||
SET LINE STYLE 1
|
||||
SET JUSTIFY 0,0
|
||||
GRAPHIC PRINT AT (0,.9): "MARKER HEIGHT STATEMENT"
|
||||
DIM MX(5)
|
||||
DIM MY(5)
|
||||
MX(0) = .3 : MY(0) = .7
|
||||
MX(1) = .7 : MY(1) = .7
|
||||
SET MARKER HEIGHT .1
|
||||
MAT MARKER 1: MX,MY
|
||||
SET WINDOW 0,100,0,100
|
||||
MX(0) = 30 : MY(0) = 50
|
||||
MX(1) = 70 : MY(1) = 50
|
||||
SET MARKER HEIGHT 15
|
||||
MAT MARKER 1: MX,MY
|
||||
SET MARKER HEIGHT 0
|
||||
ASK MARKER HEIGHT MK
|
||||
PRINT "MINIMUM MARKER HEIGHT IS = "; MK
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DEMONSTRATE ALL MARKER SHAPES
|
||||
|
||||
MTYPE: CLEAR
|
||||
SET WINDOW 0,1,0,1
|
||||
SET MARKER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,.9): "MARKER TYPE STATEMENT"
|
||||
MX(0) = .5 : MY(0) = .7
|
||||
FOR I.INT% = 1 TO 5
|
||||
SET MARKER TYPE I.INT%
|
||||
MAT MARKER 0: MX,MY
|
||||
MY(0) = MY(0) - .1
|
||||
NEXT I.INT%
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DEMONSTRATE FILLED POLYGON
|
||||
|
||||
MFILL: CLEAR
|
||||
SET LINE STYLE 1
|
||||
SET JUSTIFY 0,0
|
||||
GRAPHIC PRINT AT (0,.9): "MAT FILL STATEMENT"
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
SET COLOR 1
|
||||
DIM X.ARRAY(10)
|
||||
DIM Y.ARRAY(10)
|
||||
X.ARRAY(0) = 40 : Y.ARRAY(0) = 10
|
||||
X.ARRAY(1) = 35 : Y.ARRAY(1) = 25
|
||||
X.ARRAY(2) = 50 : Y.ARRAY(2) = 40
|
||||
X.ARRAY(3) = 65 : Y.ARRAY(3) = 25
|
||||
X.ARRAY(4) = 60 : Y.ARRAY(4) = 10
|
||||
MAT FILL 4: X.ARRAY,Y.ARRAY
|
||||
KEY% = PAUSE
|
||||
|
||||
REM ILLUSTRATE POSITIONING OF MARKERS VIA AN ARRAY
|
||||
|
||||
MMARK: CLEAR
|
||||
SET WINDOW 0,100,0,100
|
||||
GRAPHIC PRINT AT (0,90): "MAT MARKER STATEMENT"
|
||||
SET MARKER HEIGHT 0
|
||||
SET MARKER TYPE 1
|
||||
SET COLOR 1
|
||||
MAT MARKER 4: X.ARRAY,Y.ARRAY
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DEMONSTRATE DRAWING POLYGON OUTLINE VIA AN ARRAY
|
||||
|
||||
MPLOT: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): "MAT PLOT STATEMENT"
|
||||
SET COLOR 1
|
||||
SET WINDOW 0,1,0,1
|
||||
SET CHARACTER HEIGHT 0
|
||||
FOR I.INT% = 0 TO 4
|
||||
X.ARRAY(I.INT%) = .01 * X.ARRAY(I.INT%)
|
||||
Y.ARRAY(I.INT%) = .01 * Y.ARRAY(I.INT%)
|
||||
NEXT I.INT%
|
||||
X.ARRAY(5) = .40 : Y.ARRAY(5) = .10
|
||||
SET BEAM "OFF"
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
KEY% = PAUSE
|
||||
CLEAR
|
||||
MAT PLOT 5: X.ARRAY,Y.ARRAY
|
||||
KEY% = PAUSE
|
||||
|
||||
REM DO POLYGON VIA "PLOT" STATEMENTS
|
||||
|
||||
PLT: CLEAR
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
SET COLOR 1
|
||||
GRAPHIC PRINT AT (0,90): "PLOT STATEMENT"
|
||||
PLOT (40,10),(35,25);
|
||||
SET COLOR 2
|
||||
PLOT (35,25),(50,40);
|
||||
SET LINE STYLE 2
|
||||
PLOT (50,40),(65,25);
|
||||
SET LINE STYLE 1
|
||||
SET COLOR 3
|
||||
PLOT (65,25),(60,10),(40,10)
|
||||
KEY% = PAUSE
|
||||
|
||||
REM EXERCISE ARBITRARY POSITIONING OF GRAPHIC BEAM
|
||||
|
||||
POSIT: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): "POSITION STATEMENT"
|
||||
SET BEAM "OFF"
|
||||
SET POSITION 50,50
|
||||
SET POSITION 50,100
|
||||
SET BEAM "ON"
|
||||
SET POSITION 0,0
|
||||
SET POSITION 50,50
|
||||
KEY% = PAUSE
|
||||
|
||||
REM SHOW ALL LINE STYLES
|
||||
|
||||
STCNT: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): "STYLE COUNT STATEMENT"
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
ASK STYLE COUNT ST%
|
||||
PRINT "THE NUMBER OF LINE STYLES IS: "; ST%
|
||||
FOR I.INT% = 1 TO ST%
|
||||
SET LINE STYLE I.INT%
|
||||
SET BEAM "OFF"
|
||||
PLOT (10*I.INT%,10),(10*I.INT%,90)
|
||||
NEXT I.INT%
|
||||
KEY% = PAUSE
|
||||
SET LINE STYLE 1
|
||||
|
||||
REM DEMONSTRATE ROTATION OF TEXT
|
||||
|
||||
ANGEL: CLEAR
|
||||
GRAPHIC PRINT AT (0,90): "TEXT ANGLE STATEMENT"
|
||||
SET WINDOW 0,1,0,1
|
||||
SET CHARACTER HEIGHT 0
|
||||
PI = 3.1415926
|
||||
RAD = PI*2
|
||||
DEG = RAD/360
|
||||
FOR I.INT% = 90 TO 360 STEP 90
|
||||
SET TEXT ANGLE I.INT%*DEG
|
||||
GRAPHIC PRINT AT (.5,.5): "ROTATE ME"
|
||||
NEXT I.INT%
|
||||
KEY% = PAUSE
|
||||
SET TEXT ANGLE 0
|
||||
|
||||
REM ILLUSTRATE EFFECT OF VARYING VIEWPORT
|
||||
|
||||
VYOU: CLEAR
|
||||
GRAPHIC PRINT AT (0,.9): "VIEWPORT STATEMENT"
|
||||
X.ARRAY(0) = 0 : Y.ARRAY(0) = 0
|
||||
X.ARRAY(1) = 0 : Y.ARRAY(1) = 100
|
||||
X.ARRAY(2) = 100 : Y.ARRAY(2) = 100
|
||||
X.ARRAY(3) = 100 : Y.ARRAY(3) = 0
|
||||
X.ARRAY(4) = 0 : Y.ARRAY(4) = 0
|
||||
SET VIEWPORT 0,1,0,1
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
SET VIEWPORT .1,.9,.1,.9
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
SET VIEWPORT .2,.8,.2,.8
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
SET VIEWPORT .3,.5,.3,.5
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
SET VIEWPORT .5,.7,.5,.7
|
||||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||||
KEY% = PAUSE
|
||||
|
||||
REM ILLUSTRATE EFFECT OF VARYING WINDOW
|
||||
|
||||
WINDW: CLEAR
|
||||
SET VIEWPORT 0,1,0,1
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
GRAPHIC PRINT AT (0,90): "WINDOW STATEMENT"
|
||||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||||
SET WINDOW 0,200,0,200
|
||||
SET CHARACTER HEIGHT 0
|
||||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||||
SET VIEWPORT 0,.5,.5,1.0
|
||||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||||
KEY% = PAUSE
|
||||
|
||||
REM FINISH DEMONSTRATION AND END PROGRAM
|
||||
|
||||
FIN: CLEAR
|
||||
SET WINDOW 0,100,0,100
|
||||
SET CHARACTER HEIGHT 0
|
||||
SET VIEWPORT 0,1,0,1
|
||||
SET COLOR 1
|
||||
FOR I.INT% = 1 TO CT%
|
||||
SET COLOR I.INT%
|
||||
MAT PLOT 5: X.ARRAY,Y.ARRAY
|
||||
SET VIEWPORT .01*I.INT%,1-(I.INT%*.01), \
|
||||
.01*I.INT%,1-(I.INT%*.01)
|
||||
NEXT I.INT%
|
||||
SET JUSTIFY .5,.5
|
||||
SET COLOR 1
|
||||
SET VIEWPORT 0,1,0,1
|
||||
GRAPHIC PRINT AT (50,50): "THANKS FOR THE VIEWING"
|
||||
KEY% = PAUSE
|
||||
STOP
|
||||
END
|
||||
|
||||
4
software/BAS/GRAPHCOM.BAS
Normal file
4
software/BAS/GRAPHCOM.BAS
Normal file
@@ -0,0 +1,4 @@
|
||||
COMMON ?VIEW(2),?WIND(2),?P(2),?P1(2),?KAPU(2)
|
||||
COMMON ?PTSI%(1),?PTSO%(1),?CONT%(1),?INTI%(1),?INTO%(1)
|
||||
COMMON ?VWTX(2),?RVIW(2),?VX(1),?XN,?YN,?XW,?YW
|
||||
|
||||
321
software/BAS/GRAPHR.BAS
Normal file
321
software/BAS/GRAPHR.BAS
Normal file
@@ -0,0 +1,321 @@
|
||||
REM THIS IS A DEMONSTRATION PROGRAM FOR DRAWING
|
||||
REM PIE AND BAR CHARTS.
|
||||
REM
|
||||
REM PROGRAM NAME: GRAPHR.BAS
|
||||
REM
|
||||
%INCLUDE GRAPHCOM.BAS
|
||||
GRAPHIC OPEN 1
|
||||
CLEAR
|
||||
|
||||
REM If the device supports color fill, MAT FILL
|
||||
REM statements are used. Otherwise, MAT PLOT
|
||||
REM is used to draw figures.
|
||||
|
||||
IN.FL: INPUT "DOES THIS DEVICE SUPPORT COLOR FILL? Y/N: ";FILL.FLG$
|
||||
IF FILL.FLG$ = "Y" OR FILL.FLG$ = "N" THEN GOTO OK.FL
|
||||
PRINT "ENTER Y OR N, PLEASE"
|
||||
GOTO IN.FL
|
||||
OK.FL: PRINT "THANK-YOU"
|
||||
|
||||
REM Initialize the arrays used for drawing the
|
||||
REM slices in the pie chart. Two 100 element arrays
|
||||
REM are constructed for drawing a full circle. Each
|
||||
REM point in the arrays then represents one percent.
|
||||
|
||||
PRINT "CALCULATING OCCURRING --- PLEASE WAIT"
|
||||
DIM X.ARRAY(100)
|
||||
DIM Y.ARRAY(100)
|
||||
DIM A.ARRAY(72)
|
||||
DIM B.ARRAY(72)
|
||||
A.ARRAY(0) = .5
|
||||
B.ARRAY(0) = .5
|
||||
L.CIR = 0
|
||||
FOR I.ANGLE = 0 TO 6.28-.0628 STEP .0628
|
||||
X.ARRAY(L.CIR) = .5 + (.5 * COS(I.ANGLE))
|
||||
Y.ARRAY(L.CIR) = .5 + (.5 * SIN(I.ANGLE))
|
||||
L.CIR = L.CIR + 1
|
||||
NEXT I.ANGLE
|
||||
|
||||
REM Close the circle
|
||||
|
||||
X.ARRAY(L.CIR) = X.ARRAY(0)
|
||||
Y.ARRAY(L.CIR) = Y.ARRAY(0)
|
||||
GOTO START.IT
|
||||
|
||||
REM This function draws a slice beginning at the
|
||||
REM point represented by BEG.PER and extending
|
||||
REM through PER.CENT points. The color is set to
|
||||
REM COL.OR and the ASCII.ID prints as an identifier
|
||||
REM for the slice.
|
||||
|
||||
REM The function extracts the points from X.ARRAY
|
||||
REM and Y.ARRAY and places them in A.ARRAY and
|
||||
REM B.ARRAY. MAT FILL and MAT PLOT always begin
|
||||
REM drawing at the first elements of the arrays, so
|
||||
REM the slice must be extracted from the arrays.
|
||||
|
||||
REM The function makes provision for slices that
|
||||
REM exceed 71 points. MAT FILL and MAT PLOT allow
|
||||
REM a maximum element number of 72.
|
||||
|
||||
DEF DRAW.SLICE (BEG.PER,PER.CENT,COL.OR,ASCII.ID)
|
||||
REAL BEG.PER,PER.CENT,COL.OR
|
||||
STRING ASCII.ID
|
||||
L.CIR = 1
|
||||
SET COLOR COL.OR
|
||||
OVR.FLOW = 0
|
||||
|
||||
REM Setup for slices greater than 71 percent.
|
||||
|
||||
IF PER.CENT > 71 THEN SAVE.PER = 71:OVR.FLOW = 1\
|
||||
ELSE SAVE.PER = PER.CENT
|
||||
|
||||
REM Extract points from circle array.
|
||||
|
||||
BAK.UP: FOR CNT.ER = BEG.PER TO BEG.PER + SAVE.PER
|
||||
IN.DEX = CNT.ER
|
||||
IF CNT.ER > 100 THEN IN.DEX = CNT.ER - 100
|
||||
A.ARRAY(L.CIR) = X.ARRAY(IN.DEX)
|
||||
B.ARRAY(L.CIR) = Y.ARRAY(IN.DEX)
|
||||
L.CIR = L.CIR + 1
|
||||
NEXT CNT.ER
|
||||
|
||||
REM OVER.FLOW is 1 for a more than 71 percent slice.
|
||||
|
||||
IF OVR.FLOW <> 1 THEN GOTO OVER.A
|
||||
|
||||
REM FILL.FLG$ is "N" for non-color-fill devices.
|
||||
|
||||
IF FILL.FLG$ = "N" THEN MAT PLOT L.CIR-1: A.ARRAY,B.ARRAY\
|
||||
ELSE MAT FILL L.CIR-1: A.ARRAY,B.ARRAY
|
||||
OVR.FLOW = 0
|
||||
BEG.PER = BEG.PER + 71
|
||||
SAVE.PER = PER.CENT - 71
|
||||
IF FILL.FLG$ = "N" THEN L.CIR = 0 ELSE L.CIR = 1
|
||||
GOTO BAK.UP
|
||||
OVER.A: A.ARRAY(0) = .5
|
||||
B.ARRAY(0) = .5
|
||||
|
||||
REM The slice must be closed for MAT PLOT. MAT FILL
|
||||
REM closes automatically.
|
||||
|
||||
IF FILL.FLG$ = "N" THEN\
|
||||
A.ARRAY(L.CIR) = .5: \
|
||||
B.ARRAY(L.CIR) = .5: \
|
||||
MAT PLOT L.CIR: A.ARRAY,B.ARRAY \
|
||||
ELSE \
|
||||
MAT FILL L.CIR-1: A.ARRAY,B.ARRAY
|
||||
|
||||
REM Expand the viewport for printing the slice ID.
|
||||
REM The minimum character height is used to adjust
|
||||
REM the window so the slice ID will appear outside
|
||||
REM the slice perimeter.
|
||||
|
||||
SET VIEWPORT 1.0-Y.AXIS,1,0,1
|
||||
ADJ.IT = MIN.HGT/1.45
|
||||
SET WINDOW -ADJ.IT,1+ADJ.IT,-ADJ.IT,1+ADJ.IT
|
||||
|
||||
REM MID.PT is the center elements in the slice. This
|
||||
REM is the position where the ID is printed.
|
||||
|
||||
MID.PT = INT(BEG.PER+(PER.CENT/2))
|
||||
X.AXIS = X.ARRAY(MID.PT)
|
||||
Y.AXIS = Y.ARRAY(MID.PT)
|
||||
GRAPHIC PRINT AT (X.AXIS,Y.AXIS): ASCII.ID
|
||||
SET WINDOW 0,1,0,1
|
||||
RETURN
|
||||
FEND
|
||||
|
||||
REM The first portion of the program allows entry
|
||||
REM of up to 9 slices. Enter the item number (1-9)
|
||||
REM and press the return key. Then type the slice
|
||||
REM description (up to 6 characters), the dollar
|
||||
REM value of the slice, and the color code for
|
||||
REM the slice.
|
||||
|
||||
REM The following entries are a good sample:
|
||||
|
||||
REM 1 <return>
|
||||
REM RENT,550,1 <return>
|
||||
REM 2 <return>
|
||||
REM FOOD,450,2 <return>
|
||||
REM 3 <return>
|
||||
REM CAR,225,3 <return>
|
||||
REM 4 <return>
|
||||
REM OTHER,750,4 <return>
|
||||
|
||||
REM This sets up a graph of four items--rent of
|
||||
REM $550 in color 1, food for $450 in color 2, etc.
|
||||
|
||||
REM Terminate the input by typing 0 in response
|
||||
REM to the ITEM NUMBER(0 TO FINISH): prompt.
|
||||
|
||||
REM After the 0 entry, the program calculates the
|
||||
REM percentages and prints a listing of the entries.
|
||||
|
||||
REM Corrections may be made by entering the
|
||||
REM item number to be corrected and inputting
|
||||
REM the correct data.
|
||||
|
||||
START.IT: PRINT
|
||||
DIM ITM.DESC$(9)
|
||||
DIM ITM.VALUE(9)
|
||||
DIM ITM.COLOR(9)
|
||||
DIM ITM.PERC(9)
|
||||
GO.A: PRINT "ENTER AN ITEM NUMBER FROM 1 TO 9 TO ADD OR CHANGE"
|
||||
PRINT
|
||||
PRINT "THEN ENTER--DESCRIPTION,AMOUNT,COLOR,RETURN"
|
||||
PRINT
|
||||
PRINT " DESCRIPTION IS THE SLICE DESCRIPTION"
|
||||
PRINT " AMOUNT IS THE QUANTITY/AMOUNT OF THE SLICE"
|
||||
PRINT " COLOR IS THE COLOR NUMBER TO USE FOR THE SLICE"
|
||||
PRINT " RETURN MEANS TO PRESS THE RETURN KEY"
|
||||
PRINT
|
||||
PRINT "THE FIELDS ARE SEPARATED BY COMMAS"
|
||||
PRINT
|
||||
IN.IT: INPUT "ITEM NUMBER(0 TO FINISH): "; ITM.NUMBER%
|
||||
IF ITM.NUMBER% = 0 THEN GOTO PRT.EM
|
||||
IF ITM.NUMBER% > 0 AND ITM.NUMBER% < 10 THEN GOTO OKAY.IN
|
||||
PRINT "THE ITEM NUMBER MUST BE FROM 1 TO 9"
|
||||
GOTO IN.IT
|
||||
OKAY.IN: IF ITM.VALUE(ITM.NUMBER%) = 0 THEN GOTO NEW.IN
|
||||
PRINT ITM.DESC$(ITM.NUMBER%),ITM.VALUE(ITM.NUMBER%),
|
||||
PRINT ITM.COLOR(ITM.NUMBER%)
|
||||
NEW.IN: INPUT "DESC,AMOUNT,COLOR: ";DESC.IN$,VAL.IN,CLR.IN%
|
||||
ITM.DESC$(ITM.NUMBER%) = DESC.IN$
|
||||
ITM.VALUE(ITM.NUMBER%) = VAL.IN
|
||||
ITM.COLOR(ITM.NUMBER%) = CLR.IN%
|
||||
PRINT
|
||||
GOTO IN.IT
|
||||
PRT.EM: TOT.VAL = 0
|
||||
|
||||
REM Calculate the total for percentages.
|
||||
|
||||
FOR CNT.R = 1 TO 9
|
||||
TOT.VAL = TOT.VAL + ITM.VALUE(CNT.R)
|
||||
NEXT CNT.R
|
||||
PRINT
|
||||
|
||||
REM Print the item list with percentages.
|
||||
|
||||
FOR CNT.R = 1 TO 9
|
||||
IF ITM.VALUE(CNT.R) <> 0 THEN\
|
||||
ITM.PERC(CNT.R) = ITM.VALUE(CNT.R)/TOT.VAL:\
|
||||
ITM.PERC(CNT.R) = INT((100*ITM.PERC(CNT.R))+.5):\
|
||||
PRINT CNT.R;"-";ITM.DESC$(CNT.R),ITM.VALUE(CNT.R),:\
|
||||
PRINT ITM.COLOR(CNT.R);" ";ITM.PERC(CNT.R);"%"
|
||||
NEXT CNT.R
|
||||
PRINT:PRINT "TOTAL VALUE: ";TOT.VAL
|
||||
PRINT:INPUT "DRAW THE GRAPH? ";Y.N$
|
||||
IF Y.N$ <> "Y" THEN GOTO IN.IT
|
||||
CLEAR
|
||||
BEG.PER = 0
|
||||
|
||||
REM THE MINIMUM CHARACTER HEIGHT FOR THE DEVICE
|
||||
REM IS USED TO ESTABLISH A BORDER AROUND THE CIRCLE
|
||||
REM WHERE THE SLICE ID (THE ITEM NUMBER) CAN BE
|
||||
REM PRINTED.
|
||||
|
||||
SET CHARACTER HEIGHT 0
|
||||
ASK CHARACTER HEIGHT MIN.HGT
|
||||
MIN.HGT = 2 * MIN.HGT
|
||||
FOR CNT.R = 1 TO 9
|
||||
IF ITM.VALUE(CNT.R) = 0 THEN GOTO NXT.CNT
|
||||
|
||||
REM Determine the aspect ratio and square the device.
|
||||
REM A border is left around the viewport for the
|
||||
REM slice ID. The viewport is set to the right
|
||||
REM of the device.
|
||||
|
||||
ASK DEVICE X.AXIS,Y.AXIS
|
||||
SET VIEWPORT 1-Y.AXIS+MIN.HGT,1-MIN.HGT,MIN.HGT,1-MIN.HGT
|
||||
DESC.IN$ = ITM.DESC$(CNT.R)
|
||||
VAL.IN = ITM.VALUE(CNT.R)
|
||||
CLR.IN% = ITM.COLOR(CNT.R)
|
||||
PER.CENT = ITM.PERC(CNT.R)
|
||||
CALL DRAW.SLICE (BEG.PER,PER.CENT,CLR.IN%,STR$(CNT.R))
|
||||
BEG.PER = BEG.PER + PER.CENT
|
||||
SET VIEWPORT 0,1,0,1
|
||||
S.1$ = DESC.IN$+" "+STR$(PER.CENT)+"%"
|
||||
GRAPHIC PRINT AT (0,1-(CNT.R/10)):S.1$
|
||||
NXT.CNT: NEXT CNT.R
|
||||
|
||||
REM Is the graph filled? The percentage calculation
|
||||
REM can be less than 100 percent due to roundoff.
|
||||
|
||||
IF BEG.PER >= 100 THEN GOTO BAR.A
|
||||
PER.CENT = 100 - BEG.PER
|
||||
DESC.IN$ = " "
|
||||
ASK DEVICE X.AXIS,Y.AXIS
|
||||
SET VIEWPORT 1-Y.AXIS+MIN.HGT,1-MIN.HGT,MIN.HGT,1-MIN.HGT
|
||||
CALL DRAW.SLICE (BEG.PER,PER.CENT,CLR.IN%,DESC.IN$)
|
||||
|
||||
REM This routine draws a simple bar chart of the
|
||||
REM data. The window range is set to 1/3 greater
|
||||
REM than the largest item in the array. This
|
||||
REM technique makes the largest bar draw across
|
||||
REM 75% of the viewport.
|
||||
|
||||
BAR.A: KEY%=CONCHAR%
|
||||
DIM BAR.X(4)
|
||||
DIM BAR.Y(4)
|
||||
SET VIEWPORT 0,1,0,1
|
||||
SET WINDOW 0,1,0,1
|
||||
SET CHARACTER HEIGHT 0
|
||||
ASK CHARACTER HEIGHT MIN.HGT
|
||||
CLEAR
|
||||
SET JUSTIFY .5,0
|
||||
SET COLOR 1
|
||||
GRAPHIC PRINT AT (.5,.99-MIN.HGT):"BAR CHART"
|
||||
SET JUSTIFY 0,0
|
||||
MAX.VAL = 0
|
||||
|
||||
REM Determine the maximum percentage.
|
||||
|
||||
FOR CNT.R = 1 TO 9
|
||||
IF MAX.VAL < ITM.PERC(CNT.R) THEN\
|
||||
MAX.VAL = ITM.PERC(CNT.R)
|
||||
NEXT CNT.R
|
||||
MAX.VAL = 1.33 * MAX.VAL
|
||||
|
||||
REM Scale the window. The X axis is 1/3 larger
|
||||
REM than the largest item to be graphed.
|
||||
REM The Y axis is scaled to 10 lines.
|
||||
|
||||
SET WINDOW 0,MAX.VAL,0,10
|
||||
SET CHARACTER HEIGHT 0
|
||||
ASK CHARACTER HEIGHT MIN.HGT
|
||||
|
||||
REM Draw the items.
|
||||
|
||||
FOR CNT.R = 1 TO 9
|
||||
IF ITM.VALUE(CNT.R) = 0 THEN GOTO NXT.A
|
||||
SET COLOR ITM.COLOR(CNT.R)
|
||||
P.LINE = 10 - CNT.R
|
||||
S.1$ = ITM.DESC$(CNT.R)+"-"+STR$(ITM.PERC(CNT.R))+"%"
|
||||
IF ITM.VALUE(CNT.R) <> ITM.PERC(CNT.R) THEN\
|
||||
S.1$ = S.1$+" $"+STR$(ITM.VALUE(CNT.R))
|
||||
GRAPHIC PRINT AT (0,P.LINE): S.1$
|
||||
|
||||
REM Setup the BAR.X and BAR.Y arrays to draw the
|
||||
REM bar. MAX.VAL is the percentage for the item.
|
||||
REM The window scaling automatically scales the
|
||||
REM bar. No special calculations are required.
|
||||
|
||||
MAX.VAL = ITM.PERC(CNT.R)
|
||||
TOP = P.LINE - .1
|
||||
BOT = TOP - .4
|
||||
BAR.Y(0) = BOT
|
||||
BAR.Y(1) = TOP
|
||||
BAR.X(2) = MAX.VAL
|
||||
BAR.Y(2) = TOP
|
||||
BAR.X(3) = MAX.VAL
|
||||
BAR.Y(3) = BOT
|
||||
BAR.Y(4) = BOT
|
||||
IF FILL.FLG$ = "N" THEN MAT PLOT 4: BAR.X,BAR.Y\
|
||||
ELSE MAT FILL 3: BAR.X,BAR.Y
|
||||
NXT.A: NEXT CNT.R
|
||||
KEY% = CONCHAR%
|
||||
STOP
|
||||
END
|
||||
|
||||
16
software/BAS/GSXPREP.BAS
Normal file
16
software/BAS/GSXPREP.BAS
Normal file
@@ -0,0 +1,16 @@
|
||||
100 REM GSXPREP.BAS
|
||||
110 REM
|
||||
120 REM
|
||||
130 REM
|
||||
140 GSX%=&H30
|
||||
150 POKE GSX%+0,
|
||||
160 POKE GSX%+1,&H59
|
||||
170 POKE GSX%+2,&HE
|
||||
180 POKE GSX%+3,115
|
||||
190 POKE GSX%+4,&HC3
|
||||
200 POKE GSX%+5,&H5
|
||||
210 POKE GSX%+6,&H0
|
||||
220 NEW
|
||||
SX%+1,&H59
|
||||
170 POKE GSX%+2,&HE
|
||||
180
|
||||
46
software/BAS/TSTCIR.BAS
Normal file
46
software/BAS/TSTCIR.BAS
Normal file
@@ -0,0 +1,46 @@
|
||||
REM DEMONSTRATION PROGRAM FOR CIRCLE DRAWING FUNCTIONS
|
||||
REM
|
||||
REM PROGRAM NAME: TSTCIR.BAS
|
||||
REM
|
||||
%INCLUDE GRAPHCOM.BAS
|
||||
%INCLUDE CIRCOM.BAS
|
||||
GRAPHIC OPEN 1
|
||||
CLEAR
|
||||
PRINT "COMPUTING"
|
||||
CALL BEG.CIR
|
||||
PRINT "ENDED"
|
||||
CALL PLOT.CIR
|
||||
KEY% = CONCHAR% REM WAIT FOR KEYBOARD
|
||||
|
||||
REM SCALE THE WINDOW TO DRAW A PROPERLY PROPORTIONED CIRCLE
|
||||
|
||||
ASK DEVICE X.AXIS,Y.AXIS
|
||||
PRINT X.AXIS,Y.AXIS
|
||||
SET WINDOW 0,X.AXIS/Y.AXIS,0,1
|
||||
CALL PLOT.CIR
|
||||
KEY%=CONCHAR%
|
||||
CALL FILL.CIR
|
||||
KEY%=CONCHAR%
|
||||
|
||||
REM CHANGE THE VIEWPORT TO REPOSITION THE CIRCLE
|
||||
|
||||
SET VIEWPORT 0,.5,0,.5 REM LOWER LEFT QUARTER
|
||||
CLEAR
|
||||
CALL PLOT.CIR
|
||||
KEY%=CONCHAR%
|
||||
|
||||
SET VIEWPORT .5,1,0,.5 REM LOWER RIGHT QUARTER
|
||||
CALL PLOT.CIR
|
||||
KEY%=CONCHAR%
|
||||
|
||||
SET VIEWPORT 0,.5,.5,1 REM UPPER LEFT QUARTER
|
||||
CALL PLOT.CIR
|
||||
KEY%=CONCHAR%
|
||||
|
||||
SET VIEWPORT .5,1,.5,1 REM UPPER RIGHT QUARTER
|
||||
CALL PLOT.CIR
|
||||
KEY%=CONCHAR%
|
||||
|
||||
STOP
|
||||
END
|
||||
|
||||
23
software/BAS/asciart.bas
Normal file
23
software/BAS/asciart.bas
Normal file
@@ -0,0 +1,23 @@
|
||||
1 REM asciiart.bas benchmark for Rienk's sbc-2g-512 7.3728Mhz Z80 board running NASCOM ROM BASIC Ver 4.7
|
||||
2 REM https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=201&goto=4704&#msg_4704
|
||||
3 REM 2m43s
|
||||
4 REM
|
||||
10 FOR Y=-12 TO 12
|
||||
20 FOR X=-39 TO 39
|
||||
30 CA=X*0.0458
|
||||
40 CB= Y*0.08333
|
||||
50 A=CA
|
||||
60 B=CB
|
||||
70 FOR I=0 TO 15
|
||||
80 T=A*A-B*B+CA
|
||||
90 B=2*A*B+CB
|
||||
100 A=T
|
||||
110 IF (A*A+B*B)>4 THEN GOTO 200
|
||||
120 NEXT I
|
||||
130 PRINT " ";
|
||||
140 GOTO 210
|
||||
200 IF I>9 THEN I=I+7
|
||||
205 PRINT CHR$(48+I);
|
||||
210 NEXT X
|
||||
220 PRINT
|
||||
230 NEXT Y
|
||||
BIN
software/BAS/cosubs.bas
Normal file
BIN
software/BAS/cosubs.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycash.bas
Normal file
BIN
software/BAS/daycash.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycash2.bas
Normal file
BIN
software/BAS/daycash2.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycash3.bas
Normal file
BIN
software/BAS/daycash3.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycashp.bas
Normal file
BIN
software/BAS/daycashp.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycred.bas
Normal file
BIN
software/BAS/daycred.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycredp.bas
Normal file
BIN
software/BAS/daycredp.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycrin.bas
Normal file
BIN
software/BAS/daycrin.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycrin2.bas
Normal file
BIN
software/BAS/daycrin2.bas
Normal file
Binary file not shown.
BIN
software/BAS/daycrin3.bas
Normal file
BIN
software/BAS/daycrin3.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayi.bas
Normal file
BIN
software/BAS/dayi.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayicni1.bas
Normal file
BIN
software/BAS/dayicni1.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayicni2.bas
Normal file
BIN
software/BAS/dayicni2.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayicni3.bas
Normal file
BIN
software/BAS/dayicni3.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymend.bas
Normal file
BIN
software/BAS/daymend.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymisc.bas
Normal file
BIN
software/BAS/daymisc.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymisc2.bas
Normal file
BIN
software/BAS/daymisc2.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymisc3.bas
Normal file
BIN
software/BAS/daymisc3.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymisc4.bas
Normal file
BIN
software/BAS/daymisc4.bas
Normal file
Binary file not shown.
BIN
software/BAS/daymiscp.bas
Normal file
BIN
software/BAS/daymiscp.bas
Normal file
Binary file not shown.
BIN
software/BAS/daynlup.bas
Normal file
BIN
software/BAS/daynlup.bas
Normal file
Binary file not shown.
BIN
software/BAS/daynlup2.bas
Normal file
BIN
software/BAS/daynlup2.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayparam.bas
Normal file
BIN
software/BAS/dayparam.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayplvat.bas
Normal file
BIN
software/BAS/dayplvat.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayprt.bas
Normal file
BIN
software/BAS/dayprt.bas
Normal file
Binary file not shown.
BIN
software/BAS/dayslvat.bas
Normal file
BIN
software/BAS/dayslvat.bas
Normal file
Binary file not shown.
61
software/BAS/gpeled.bas
Normal file
61
software/BAS/gpeled.bas
Normal file
@@ -0,0 +1,61 @@
|
||||
01 REM ************************************************
|
||||
02 REM
|
||||
03 REM Z80-MBC2 GPE led blink demo:
|
||||
04 REM
|
||||
05 REM Blink a led attached to PIN 8 (GPA5) of the GPIO
|
||||
06 REM connector (J7) until USER key is pressed
|
||||
07 REM (see A040618 schematic).
|
||||
08 REM The GPE option must be installed.
|
||||
09 REM
|
||||
10 REM ************************************************
|
||||
11 REM
|
||||
12 REM Demo HW wiring (see A040618 schematic):
|
||||
13 REM
|
||||
14 REM GPIO
|
||||
15 REM (J7)
|
||||
16 REM +-----+
|
||||
17 REM | 1 2 |
|
||||
18 REM | 3 4 | LED RESISTOR
|
||||
19 REM | 5 6 | 680
|
||||
20 REM | 7 8-+--->|-----------/\/\/--+
|
||||
21 REM | 9 10| |
|
||||
22 REM |11 12| |
|
||||
23 REM |13 14| |
|
||||
24 REM |15 16| |
|
||||
25 REM |17 18| |
|
||||
26 REM |19 20+-----------------------+ GND
|
||||
27 REM +-----+
|
||||
28 REM
|
||||
29 REM ************************************************
|
||||
30 REM
|
||||
31 PRINT "Press USER key to exit"
|
||||
32 REM
|
||||
33 REM * * * * SET USED OPCODES FOR I/O
|
||||
34 REM
|
||||
35 KEYUSER = 128 : REM USER KEY read Opcode (0x80)
|
||||
36 IODIRA = 5 : REM IODIRA write Opcode (0x05)
|
||||
37 GPIOA = 3 : REM GPIOA write Opcode (0x03)
|
||||
38 REM
|
||||
50 OUT 1,IODIRA : OUT 0,0 : REM Set all GPAx as output (IODIRA=0x00)
|
||||
60 PRINT "Now blinking GPA5 (GPIO port pin 8)..."
|
||||
64 REM
|
||||
65 REM * * * * * BLINK LOOP
|
||||
66 REM
|
||||
70 OUT 1,GPIOA : OUT 0,32 : REM Set GPA5=1, GPAx=0 (GPIOA=B00100000=32)
|
||||
80 GOSUB 505 : REM Delay sub
|
||||
90 OUT 1,GPIOA : OUT 0,0 : REM Clear all pins GPAx (MCP23017)
|
||||
100 GOSUB 505 : REM Delay sub
|
||||
130 GOTO 70
|
||||
490 REM
|
||||
500 REM * * * * * DELAY SUB
|
||||
501 REM
|
||||
505 FOR J=0 TO 150
|
||||
506 OUT 1,KEYUSER : REM Write the USER KEY read Opcode
|
||||
507 IF INP(0)=1 THEN GOTO 700 : REM Exit if USER key is pressed
|
||||
510 NEXT J
|
||||
520 RETURN
|
||||
690 REM
|
||||
691 REM * * * * * PROGRAM END
|
||||
692 REM
|
||||
700 OUT 1,GPIOA : OUT 0,0 : REM Clear all pins GPAx (MCP23017)
|
||||
720 PRINT "Terminated by USER Key"
|
||||
82
software/BAS/gpio.bas
Normal file
82
software/BAS/gpio.bas
Normal file
@@ -0,0 +1,82 @@
|
||||
1 REM * * * GPIO EXPANSION MODULE (A080117) DEMO * * *
|
||||
2 REM
|
||||
3 REM (USER Key -> slow led, GPIO-A(9) Key -> fast led)
|
||||
4 REM --------------------------------------------------
|
||||
5 REM Demo HW wiring (see A080117 schematic):
|
||||
6 REM
|
||||
7 REM GPIO-B
|
||||
8 REM (J3)
|
||||
9 REM +----+ LED
|
||||
10 REM | 2 |--->|---+
|
||||
11 REM | 3 |--->|---+ RESISTOR
|
||||
12 REM | 4 |--->|---+ 680
|
||||
13 REM | 5 |--->|---+-------/\/\/-----o GND
|
||||
14 REM | 6 |--->|---+
|
||||
15 REM | 7 |--->|---+
|
||||
16 REM | 8 |--->|---+
|
||||
17 REM | 9 |--->|---+
|
||||
18 REM +----+ |
|
||||
19 REM |
|
||||
20 REM |
|
||||
21 REM GPIO-A |
|
||||
22 REM (J4) |
|
||||
23 REM +----+ LED |
|
||||
24 REM | 2 |--->|---+
|
||||
25 REM | 3 |--->|---+
|
||||
26 REM | 4 |x
|
||||
27 REM | 5 |x
|
||||
28 REM | 6 |x
|
||||
29 REM | 7 |x PUSH BUTTON RESISTOR
|
||||
30 REM | 8 |x --- 1K
|
||||
31 REM | 9 |---------o o------------------/\/\/-----o GND
|
||||
32 REM +----+
|
||||
33 REM
|
||||
34 REM
|
||||
35 REM
|
||||
36 REM --------------------------------------------------
|
||||
37 REM
|
||||
38 REM Set MCP23017 GPIOB all pins as output (IODIRB=0x00)
|
||||
39 OUT 6, 0
|
||||
40 REM Set MCP23017 GPIOA 0-1 as output, others as input (IODIRA=0xFC)
|
||||
41 OUT 5, 252
|
||||
42 REM Set MCP23017 GPIOA 2-7 pull-up resistor on (GPPUA=0xFC)
|
||||
43 OUT 7, 252
|
||||
45 REM Left Shift user funcion definition
|
||||
50 DEF FNLSH(X)=((X*2) AND 255)
|
||||
55 REM Init GPIO output ports
|
||||
60 OUT 3, 0 : REM Clear MCP23017 GPIOA port
|
||||
62 OUT 4, 0 : REM Clear MCP23017 GPIOB port
|
||||
64 GOSUB 700 : REM Set slow shift
|
||||
68 REM Main
|
||||
70 A=1
|
||||
80 FOR I=0 TO 7
|
||||
90 OUT 4, A : REM Write to MCP23017 GPIOB port
|
||||
100 GOSUB 500
|
||||
110 A=FNLSH(A)
|
||||
120 NEXT I
|
||||
130 OUT 4, 0 : REM Clear MCP23017 GPIOB port
|
||||
135 A=1
|
||||
140 FOR I=0 TO 1
|
||||
150 OUT 3, A : REM Write to MCP23017 GPIOA port
|
||||
160 GOSUB 500
|
||||
170 A=FNLSH(A)
|
||||
190 NEXT I
|
||||
200 OUT 3, 0 : REM Clear MCP23017 GPIOA port
|
||||
210 GOTO 70 : REM Play it again, Sam...
|
||||
220 REM
|
||||
500 REM * * * * * DELAY SUB
|
||||
505 FOR J=0 TO K
|
||||
507 IF INP(0)=1 THEN GOSUB 700 : REM Read USER key
|
||||
508 IF (INP(3) AND 128)=0 THEN GOSUB 600 : REM Read MCP23017 GPIOA 7 key
|
||||
510 NEXT J
|
||||
520 RETURN
|
||||
530 REM
|
||||
600 REM * * * * * SET FAST SHIFT SUB
|
||||
610 K=1
|
||||
620 OUT 0, 1 : REM USER led ON
|
||||
630 RETURN
|
||||
640 REM
|
||||
700 REM * * * * * SET SLOW SHIFT SUB
|
||||
710 K=30
|
||||
720 OUT 0, 0 : REM USER led OFF
|
||||
730 RETURN
|
||||
BIN
software/BAS/menu.bas
Normal file
BIN
software/BAS/menu.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlbudge.bas
Normal file
BIN
software/BAS/nlbudge.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlenq.bas
Normal file
BIN
software/BAS/nlenq.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlformat.bas
Normal file
BIN
software/BAS/nlformat.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlformup.bas
Normal file
BIN
software/BAS/nlformup.bas
Normal file
Binary file not shown.
BIN
software/BAS/nljnl.bas
Normal file
BIN
software/BAS/nljnl.bas
Normal file
Binary file not shown.
BIN
software/BAS/nljnl2.bas
Normal file
BIN
software/BAS/nljnl2.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlmfup.bas
Normal file
BIN
software/BAS/nlmfup.bas
Normal file
Binary file not shown.
BIN
software/BAS/nlprint.bas
Normal file
BIN
software/BAS/nlprint.bas
Normal file
Binary file not shown.
BIN
software/BAS/nltb.bas
Normal file
BIN
software/BAS/nltb.bas
Normal file
Binary file not shown.
BIN
software/BAS/nltl.bas
Normal file
BIN
software/BAS/nltl.bas
Normal file
Binary file not shown.
17
software/BAS/rantest.bas
Normal file
17
software/BAS/rantest.bas
Normal file
@@ -0,0 +1,17 @@
|
||||
00100 defint i-n
|
||||
00200 recsiz%=32
|
||||
00300 open "R",1,"B:RANTEST.ASC",recsiz%
|
||||
00400 for i=1 to 20
|
||||
00500 print #1, using "$$#,###.## ";1000*i,102.34*i*i
|
||||
00600 put 1,i
|
||||
00700 next i
|
||||
00800 for i=1 to 20
|
||||
00900 get 1,i
|
||||
01000 line input #1, prices$
|
||||
01100 print i,prices$
|
||||
01200 next i
|
||||
01300 close 1
|
||||
01400 end
|
||||
r i=1 to 20
|
||||
00900 get 1,i
|
||||
01000 line input #1, prices
|
||||
19
software/BAS/rtc.bas
Normal file
19
software/BAS/rtc.bas
Normal file
@@ -0,0 +1,19 @@
|
||||
15 OUT 1,132 : REM Write the DATETIME read Opcode
|
||||
20 SEC = INP(0) : REM Read a RTC parameter
|
||||
30 MINUTES = INP(0) : REM Read a RTC parameter
|
||||
40 HOURS = INP(0) : REM Read a RTC parameter
|
||||
50 DAY = INP(0) : REM Read a RTC parameter
|
||||
60 MNTH = INP(0) : REM Read a RTC parameter
|
||||
70 YEAR = INP(0) : REM Read a RTC parameter
|
||||
80 TEMP = INP(0) : REM Read a RTC parameter
|
||||
83 IF TEMP < 128 THEN 90 : REM Two complement correction
|
||||
85 TEMP = TEMP - 256
|
||||
90 PRINT
|
||||
100 PRINT "THE TIME IS: ";
|
||||
110 PRINT HOURS; : PRINT ":"; : PRINT MINUTES; : PRINT ":"; : PRINT SEC
|
||||
120 PRINT "THE DATE IS: ";
|
||||
125 YEAR= YEAR+ 2000
|
||||
130 PRINT DAY; : PRINT "/"; : PRINT MNTH; : PRINT "/"; : PRINT YEAR
|
||||
135 PRINT "THE TEMPERATURE IS: ";
|
||||
140 PRINT TEMP; : PRINT "C"
|
||||
145 PRINT
|
||||
2
software/BAS/sample.bas
Normal file
2
software/BAS/sample.bas
Normal file
@@ -0,0 +1,2 @@
|
||||
00010 PRINT "This is an example of BASIC-80"
|
||||
|
||||
446
software/BAS/startrek.bas
Normal file
446
software/BAS/startrek.bas
Normal file
@@ -0,0 +1,446 @@
|
||||
10 REM SUPER STARTREK - MAY 16,1978 - REQUIRES 24K MEMORY (AT LEAST)
|
||||
30 REM
|
||||
40 REM **** **** STAR TREK **** ****
|
||||
50 REM **** SIMULATION OF A MISSION OF THE STARSHIP ENTERPRISE,
|
||||
60 REM **** AS SEEN ON THE STAR TREK TV SHOW.
|
||||
70 REM **** ORIGINAL PROGRAM BY MIKE MAYFIELD, MODIFIED VERSION
|
||||
80 REM **** PUBLISHED IN DEC'S "101 BASIC GAMES", BY DAVE AHL.
|
||||
90 REM **** MODIFICATIONS TO THE LATTER (PLUS DEBUGGING) BY BOB
|
||||
100 REM *** LEEDOM - APRIL & DECEMBER 1974,
|
||||
110 REM *** WITH A LITTLE HELP FROM HIS FRIENDS . . .
|
||||
120 REM *** COMMENTS, EPHITETS, AND SUGGESTIONS SOLICITED --
|
||||
130 REM *** SEND TO: R.C. LEEDOM
|
||||
140 REM *** WESTINGHOSE DEFENSE & ELECTRONICS SYSTEMS CNIR
|
||||
150 REM *** BOX 746, M.S. 338
|
||||
160 REM *** BALTIMORE, MD 21203
|
||||
170 REM ***
|
||||
180 REM *** CONVERTED TO MICROSOFT 8 K BASIC 3/16/78 BY JOHN BORDERS
|
||||
190 REM *** LINE NUMBERS FROM VERSION TREK7 OF 1/12/75 PRESERVED AS
|
||||
200 REM *** MUCH AS POSSIBLE WHILE USING MULTIPLE STATEMENTS PER LINE
|
||||
201 REM *** - MODIFIED TO RUN ON GRANT SEARLE'S 9-CHIP Z80 COMPUTER
|
||||
202 REM *** AND DERIVATIVES 04-AUG-2018 BY N.KENDRICK
|
||||
203 REM *** (LINKER3000-AT-GMAIL.COM)
|
||||
205 WIDTH 80
|
||||
209 REM NK: POSITIONING USING ANSI ESCAPE SEQUENCES...
|
||||
210 PRINT CHR$(27);"[2J";:PRINT CHR$(27);"[3;1H";
|
||||
211 PRINT "THE USS ENTERPRISE --- NCC-1701"
|
||||
212 PRINT CHR$(27);"[4;1H";:PRINT
|
||||
222 FOR YY=1 TO 40 STEP 2:FOR XX=1 TO 200 : NEXT XX
|
||||
223 PRINT TAB(YY);" ,------*------,"
|
||||
224 PRINT TAB(YY);" ,------------- '--- ------'"
|
||||
225 PRINT TAB(YY);" '-------- --' / /"
|
||||
226 PRINT TAB(YY);" ,---' '-------/ /--,"
|
||||
227 PRINT TAB(YY);" '----------------'"
|
||||
228 PRINT CHR$(27);"[4;1H";:PRINT:NEXT YY
|
||||
229 PRINT CHR$(27);"[11;1H";
|
||||
260 CLEAR 600
|
||||
270 Z$=" "
|
||||
330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8)
|
||||
370 T=INT(RND(1)*20+20)*100:T0=T:T9=25+INT(RND(1)*10):D0=0:E=3000:E0=E
|
||||
440 P=10:P0=P:S9=200:S=0:B9=0:K9=0:X$="":X0$=" IS "
|
||||
470 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
|
||||
475 DEF FNR(R)=INT(RND(R)*7.98+1.01)
|
||||
490 Q1=FNR(1):Q2=FNR(1):S1=FNR(1):S2=FNR(1)
|
||||
530 FOR I=1 TO 9:C(I,1)=0:C(I,2)=0:NEXT I
|
||||
540 C(3,1)=-1:C(2,1)=-1:C(4,1)=-1:C(4,2)=-1:C(5,2)=-1:C(6,2)=-1
|
||||
600 C(1,2)=1:C(2,2)=1:C(6,1)=1:C(7,1)=1:C(8,1)=1:C(8,2)=1:C(9,2)=1
|
||||
670 FOR I=1 TO 8:D(I)=0:NEXT I
|
||||
710 A1$="NAVSRSLRSPHATORSHEDAMCOMXXX"
|
||||
820 FOR I=1 TO 8:FOR J=1 TO 8:K3=0:Z(I,J)=0:R1=RND(1)
|
||||
850 IF R1>.98 THEN K3=3:K9=K9+3:GOTO 980
|
||||
860 IF R1>.95 THEN K3=2:K9=K9+2:GOTO 980
|
||||
870 IF R1>.8 THEN K3=1:K9=K9+1
|
||||
980 B3=0:IF RND(1)>.96 THEN B3=1:B9=B9+1
|
||||
1040 G(I,J)=K3*100+B3*10+FNR(1):NEXT J:NEXT I:IF K9>T9 THEN T9=K9+1
|
||||
1100 IF B9<>0 THEN 1200
|
||||
1150 IF G(Q1,Q2)<200 THEN G(Q1,Q2)=G(Q1,Q2)+100:K9=K9+1
|
||||
1160 B9=1:G(Q1,Q2)=G(Q1,Q2)+10:Q1=FNR(1):Q2=FNR(1)
|
||||
1200 K7=K9:IF B9<>1 THEN X$="S":X0$=" ARE "
|
||||
1230 PRINT"YOUR ORDERS ARE AS FOLLOWS:"
|
||||
1235 PRINT "--------------------------"
|
||||
1240 PRINT" DESTROY THE";K9;"KLINGON WARSHIPS WHICH HAVE INVADED"
|
||||
1250 PRINT" THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS"
|
||||
1260 PRINT" ON STARDATE";T0+T9;CHR$(8);". THIS GIVES YOU";T9;
|
||||
1261 PRINT"DAYS. THERE";X0$
|
||||
1270 PRINT" ";B9;
|
||||
1271 PRINT"STARBASE";X$;" IN THE GALAXY FOR RESUPPLYING YOUR SHIP."
|
||||
1280 PRINT: PRINT "PRESS Y TO ACCEPT COMMAND";
|
||||
1300 INPUT I5$:
|
||||
1302 IF LEFT$(I5$,1)="Y" OR LEFT$(I5$,1)="y" THEN 1310
|
||||
1303 GOTO 1280
|
||||
1310 PRINT CHR$(26)
|
||||
1320 Z4=Q1:Z5=Q2:K3=0:B3=0:S3=0:G5=0:D4=.5*RND(1):Z(Q1,Q2)=G(Q1,Q2)
|
||||
1390 IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 1600
|
||||
1430 GOSUB 9030:PRINT:IF T0<>T THEN 1490
|
||||
1460 PRINT"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED"
|
||||
1470 PRINT"IN THE GALACTIC QUADRANT, '";G2$;"'.":GOTO 1500
|
||||
1490 PRINT"NOW ENTERING ";G2$;" QUADRANT . . ."
|
||||
1500 PRINT:K3=INT(G(Q1,Q2)*.01):B3=INT(G(Q1,Q2)*.1)-10*K3
|
||||
1540 S3=G(Q1,Q2)-100*K3-10*B3:IF K3=0 THEN 1590
|
||||
1560 PRINT TAB(3);CHR$(22);" COMBAT AREA CONDITION RED ";CHR$(22)
|
||||
1561 IF S>200 THEN PRINT:GOTO 1590
|
||||
1580 PRINT TAB(3);CHR$(22);" SHIELDS DANGEROUSLY LOW ";CHR$(22)
|
||||
1581 PRINT
|
||||
1590 FOR I=1 TO 3:K(I,1)=0:K(I,2)=0:NEXT I
|
||||
1600 FOR I=1 TO 3:K(I,3)=0:NEXT I:Q$=Z$+Z$+Z$+Z$+Z$+Z$+Z$+LEFT$(Z$,17)
|
||||
1680 A$="<E>":Z1=S1:Z2=S2:GOSUB 8670:IF K3<1 THEN 1820
|
||||
1720 FOR I=1 TO K3:GOSUB 8590:A$="+K+":Z1=R1:Z2=R2
|
||||
1780 GOSUB 8670:K(I,1)=R1:K(I,2)=R2:K(I,3)=S9*(.5+RND(1)):NEXT I
|
||||
1820 IF B3<1 THEN 1910
|
||||
1880 GOSUB 8590:A$=">B<":Z1=R1:B4=R1:Z2=R2:B5=R2:GOSUB 8670
|
||||
1910 FOR I=1 TO S3:GOSUB 8590:A$=" * ":Z1=R1:Z2=R2:GOSUB 8670:NEXT I
|
||||
1980 GOSUB 6430
|
||||
1990 IF S+E>10 THEN IF E>10 OR D(7)=0 THEN 2060
|
||||
2020 PRINT:PRINT TAB(10);CHR$(22);"** FATAL ERROR **";CHR$(22)
|
||||
2021 PRINT"YOU'VE JUST STRANDED YOUR SHIP IN SPACE."
|
||||
2030 PRINT"YOU HAVE INSUFFICIENT MANEUVERING ENERGY,"
|
||||
2040 PRINT"AND SHIELD CONTROL IS PRESENTLY INCAPABLE OF"
|
||||
2050 PRINT"CROSS-CIRCUITING TO ENGINE ROOM!!":PRINT:GOTO 6220
|
||||
2060 PRINT:INPUT"COMMAND";A$:PRINT
|
||||
2080 FOR I=1 TO 9:IF LEFT$(A$,3)<>MID$(A1$,3*I-2,3)THEN 2160
|
||||
2140 ON I GOTO 2300,1980,4000,4260,4700,5530,5690,7290,6270
|
||||
2160 NEXT I:PRINT"ENTER ONE OF THE FOLLOWING:"
|
||||
2170 PRINT "--------------------------"
|
||||
2180 PRINT" NAV (TO SET COURSE)"
|
||||
2190 PRINT" SRS (FOR SHORT RANGE SENSOR SCAN)"
|
||||
2200 PRINT" LRS (FOR LONG RANGE SENSOR SCAN)"
|
||||
2210 PRINT" PHA (TO FIRE PHASERS)"
|
||||
2220 PRINT" TOR (TO FIRE PHOTON TORPEDOES)"
|
||||
2230 PRINT" SHE (TO RAISE OR LOWER SHIELDS)"
|
||||
2240 PRINT" DAM (FOR DAMAGE CONTROL REPORTS)"
|
||||
2250 PRINT" COM (TO CALL ON LIBRARY-COMPUTER)"
|
||||
2260 PRINT" XXX (TO RESIGN YOUR COMMAND)":PRINT:GOTO 1990
|
||||
2300 INPUT"COURSE (0-9)";C1:IF C1=9 THEN C1=1
|
||||
2310 IF C1>=1 AND C1<9 THEN 2350
|
||||
2330 PRINT" LT. SULU: 'INCORRECT COURSE DATA, SIR!'":GOTO 1990
|
||||
2350 X$="8":IF D(1)<0 THEN X$="0.2"
|
||||
2360 PRINT"WARP FACTOR (0-";X$;")";:INPUT W1:PRINT
|
||||
2361 IF D(1)<0 AND W1>.2 THEN 2470
|
||||
2380 IF W1>0 AND W1<=8 THEN 2490
|
||||
2390 IF W1=0 THEN 1990
|
||||
2420 PRINT" CHIEF ENGINEER SCOTT: 'THE ENGINES WON'T TAKE";
|
||||
2430 PRINT" WARP";W1;CHR$(8);"!'":GOTO 1990
|
||||
2470 PRINT"WARP ENGINES ARE DAMAGED. MAXIUM SPEED = WARP 0.2":GOTO 1990
|
||||
2490 N=INT(W1*8+.5):IF E-N>=0 THEN 2590
|
||||
2500 PRINT"ENGINEERING: 'INSUFFICIENT ENERGY AVAILABLE"
|
||||
2510 PRINT" FOR MANEUVERING AT WARP";W1;CHR$(8);"!'"
|
||||
2530 IF S<N-E OR D(7)<0 THEN 1990
|
||||
2550 PRINT"DEFLECTOR CONTROL ROOM: ";S;"UNITS OF ENERGY"
|
||||
2560 PRINT" PRESENTLY DEPLOYED TO SHIELDS."
|
||||
2570 GOTO 1990
|
||||
2590 FOR I=1 TO K3:IF K(I,3)=0 THEN 2700
|
||||
2610 A$=" ":Z1=K(I,1):Z2=K(I,2):GOSUB 8670:GOSUB 8590
|
||||
2660 K(I,1)=Z1:K(I,2)=Z2:A$="+K+":GOSUB 8670
|
||||
2700 NEXT I:GOSUB 6000:D1=0:D6=W1:IF W1>=1 THEN D6=1
|
||||
2770 FOR I=1 TO 8:IF D(I)>=0 THEN 2880
|
||||
2790 D(I)=D(I)+D6:IF D(I)>-.1 AND D(I)<0 THEN D(I)=-.1:GOTO 2880
|
||||
2800 IF D(I)<0 THEN 2880
|
||||
2810 IF D1<>1 THEN D1=1:PRINT"DAMAGE CONTROL REPORT: ";
|
||||
2840 PRINT TAB(8);:R1=I:GOSUB 8790:PRINT G2$;" REPAIR COMPLETED."
|
||||
2880 NEXT I:IF RND(1)>.2 THEN 3070
|
||||
2910 R1=FNR(1):IF RND(1)>=.6 THEN 3000
|
||||
2930 D(R1)=D(R1)-(RND(1)*5+1):PRINT"DAMAGE CONTROL REPORT: ";
|
||||
2960 GOSUB 8790:PRINT G2$;" DAMAGED":PRINT:GOTO 3070
|
||||
3000 D(R1)=D(R1)+RND(1)*3+1:PRINT"DAMAGE CONTROL REPORT: ";
|
||||
3030 GOSUB 8790:PRINT G2$;" STATE OF REPAIR IMPROVED":PRINT
|
||||
3070 A$=" ":Z1=INT(S1):Z2=INT(S2):GOSUB 8670
|
||||
3110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):X=S1:Y=S2
|
||||
3140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):Q4=Q1:Q5=Q2
|
||||
3170 FOR I=1 TO N:S1=S1+X1:S2=S2+X2
|
||||
3171 IF S1<1 OR S1>=9 OR S2<1 OR S2>=9 THEN 3500
|
||||
3240 S8=INT(S1)*24+INT(S2)*3-26:IF MID$(Q$,S8,2)=" "THEN 3360
|
||||
3320 S1=INT(S1-X1):S2=INT(S2-X2):PRINT"WARP ENGINES SHUT DOWN AT ";
|
||||
3350 PRINT"SECTOR";S1;CHR$(8);",";S2;"DUE TO BAD NAVIGATION":GOTO 3370
|
||||
3360 NEXT I:S1=INT(S1):S2=INT(S2)
|
||||
3370 A$="<E>":Z1=INT(S1):Z2=INT(S2):GOSUB 8670:GOSUB 3910:T8=1
|
||||
3430 IF W1<1 THEN T8=.1*INT(10*W1)
|
||||
3450 T=T+T8:IF T>T0+T9 THEN 6220
|
||||
3480 GOTO 1980
|
||||
3500 X=8*Q1+X+N*X1:Y=8*Q2+Y+N*X2:Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8)
|
||||
3550 S2=INT(Y-Q2*8):IF S1=0 THEN Q1=Q1-1:S1=8
|
||||
3590 IF S2=0 THEN Q2=Q2-1:S2=8
|
||||
3620 X5=0:IF Q1<1 THEN X5=1:Q1=1:S1=1
|
||||
3670 IF Q1>8 THEN X5=1:Q1=8:S1=8
|
||||
3710 IF Q2<1 THEN X5=1:Q2=1:S2=1
|
||||
3750 IF Q2>8 THEN X5=1:Q2=8:S2=8
|
||||
3790 IF X5=0 THEN 3860
|
||||
3800 PRINT"LT. UHURA: MESSAGE FROM STARFLEET COMMAND --"
|
||||
3810 PRINT" 'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER"
|
||||
3820 PRINT" IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES.'"
|
||||
3830 PRINT"CHIEF ENGINEER SCOTT: 'WARP ENGINES SHUT DOWN"
|
||||
3840 PRINT" AT SECTOR";S1;CHR$(8);",";S2;"OF QUADRANT";
|
||||
3841 PRINT Q1;CHR$(8);",";Q2;CHR$(8);".'"
|
||||
3850 IF T>T0+T9 THEN 6220
|
||||
3860 IF 8*Q1+Q2=8*Q4+Q5 THEN 3370
|
||||
3870 T=T+1:GOSUB 3910:GOTO 1320
|
||||
3910 E=E-N-10:IF E>=0 THEN RETURN
|
||||
3930 PRINT"SHIELD CONTROL SUPPLIES ENERGY TO COMPLETE THE MANEUVER."
|
||||
3940 S=S+E:E=0:IF S<=0 THEN S=0
|
||||
3980 RETURN
|
||||
4000 IF D(3)<0 THEN PRINT"LONG RANGE SENSORS ARE INOPERABLE.":GOTO 1990
|
||||
4030 PRINT"LONG RANGE SCAN FOR QUADRANT";Q1;CHR$(8);",";Q2:PRINT
|
||||
4040 O1$="-------------------":PRINT O1$
|
||||
4060 FOR I=Q1-1 TO Q1+1:N(1)=-1:N(2)=-2:N(3)=-3:FOR J=Q2-1 TO Q2+1
|
||||
4120 IF I>0 AND I<9 AND J>0 AND J<9 THEN N(J-Q2+2)=G(I,J):Z(I,J)=G(I,J)
|
||||
4180 NEXT J:FOR L=1 TO 3:PRINT"| ";
|
||||
4181 IF N(L)<0 THEN PRINT"*** ";:GOTO 4230
|
||||
4210 PRINT RIGHT$(STR$(N(L)+1000),3);" ";
|
||||
4230 NEXT L:PRINT"|":PRINT O1$:NEXT I:GOTO 1990
|
||||
4260 IF D(4)<0 THEN PRINT"PHASERS INOPERATIVE.":GOTO 1990
|
||||
4265 IF K3>0 THEN 4330
|
||||
4270 PRINT"SCIENCE OFFICER SPOCK: 'SENSORS SHOW NO ENEMY SHIPS"
|
||||
4280 PRINT" IN THIS QUADRANT'":GOTO 1990
|
||||
4330 IF D(8)<0 THEN PRINT"COMPUTER FAILURE HAMPERS ACCURACY."
|
||||
4350 PRINT"PHASERS LOCKED ON TARGET; ";
|
||||
4360 PRINT"ENERGY AVAILABLE =";E;"UNITS"
|
||||
4370 INPUT"NUMBER OF UNITS TO FIRE";X:IF X<=0 THEN 1990
|
||||
4400 IF E-X<0 THEN 4360
|
||||
4410 E=E-X:IF D(7)<0 THEN X=X*RND(1)
|
||||
4450 H1=INT(X/K3):FOR I=1 TO 3:IF K(I,3)<=0 THEN 4670
|
||||
4480 H=INT((H1/FND(0))*(RND(1)+2)):IF H>.15*K(I,3)THEN 4530
|
||||
4500 PRINT"SENSORS SHOW NO DAMAGE TO ENEMY AT";K(I,1);CHR$(8);
|
||||
4501 PRINT",";K(I,2);CHR$(8);".":GOTO 4670
|
||||
4530 K(I,3)=K(I,3)-H:PRINT H;"UNIT HIT ON KLINGON AT SECTOR";
|
||||
4531 PRINT K(I,1);CHR$(8);",";
|
||||
4550 PRINT K(I,2);CHR$(8);".":IF K(I,3)<=0 THEN PRINT:PRINT CHR$(22);
|
||||
4551 PRINT"*** KLINGON DESTROYED ***";CHR$(22):PRINT:GOTO 4580
|
||||
4560 PRINT" (SENSORS SHOW";K(I,3);"UNITS REMAINING)":GOTO 4670
|
||||
4580 K3=K3-1:K9=K9-1:Z1=K(I,1):Z2=K(I,2):A$=" ":GOSUB 8670
|
||||
4650 K(I,3)=0:G(Q1,Q2)=G(Q1,Q2)-100:Z(Q1,Q2)=G(Q1,Q2):IF K9<=0 THEN 6370
|
||||
4670 NEXT I:GOSUB 6000:GOTO 1990
|
||||
4700 IF P<=0 THEN PRINT"ALL PHOTON TORPEDOES EXPENDED.":GOTO 1990
|
||||
4730 IF D(5)<0 THEN PRINT"PHOTON TUBES ARE NOT OPERATIONAL.":GOTO 1990
|
||||
4760 INPUT"PHOTON TORPEDO COURSE (1-9)";C1:IF C1=9 THEN C1=1
|
||||
4780 IF C1>=1 AND C1<9 THEN 4850
|
||||
4790 PRINT"ENSIGN CHEKOV: 'INCORRECT COURSE DATA, SIR!'"
|
||||
4800 GOTO 1990
|
||||
4850 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):E=E-2:P=P-1
|
||||
4860 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):X=S1:Y=S2
|
||||
4910 PRINT"TORPEDO TRACK:"
|
||||
4920 X=X+X1:Y=Y+X2:X3=INT(X+.5):Y3=INT(Y+.5)
|
||||
4960 IF X3<1 OR X3>8 OR Y3<1 OR Y3>8 THEN 5490
|
||||
5000 PRINT" ";X3;CHR$(8);",";Y3:A$=" ":Z1=X:Z2=Y
|
||||
5001 GOSUB 8830
|
||||
5050 IF Z3<>0 THEN 4920
|
||||
5060 A$="+K+":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5210
|
||||
5110 PRINT:PRINT CHR$(22);"*** KLINGON DESTROYED ***";CHR$(22)
|
||||
5111 PRINT:K3=K3-1:K9=K9-1:IF K9<=0 THEN 6370
|
||||
5150 FOR I=1 TO 3:IF X3=K(I,1)AND Y3=K(I,2)THEN 5190
|
||||
5180 NEXT I:I=3
|
||||
5190 K(I,3)=0:GOTO 5430
|
||||
5210 A$=" * ":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 5280
|
||||
5260 PRINT"STAR AT";X3;",";Y3;"ABSORBED TORPEDO ENERGY.":GOSUB 6000
|
||||
5261 GOTO 1990
|
||||
5280 A$=">!<":Z1=X:Z2=Y:GOSUB 8830:IF Z3=0 THEN 4760
|
||||
5330 PRINT CHR$(22);"*** STARBASE DESTROYED ***";CHR$(22)
|
||||
5331 B3=B3-1:B9=B9-1
|
||||
5360 IF B9>0 OR K9>T-T0-T9 THEN 5400
|
||||
5370 PRINT"THAT DOES IT, CAPTAIN!! YOU ARE HEREBY RELIEVED OF COMMAND"
|
||||
5380 PRINT"AND SENTENCED TO 99 STARDATES AT HARD LABOR ON CYGNUS 12!!"
|
||||
5390 GOTO 6270
|
||||
5400 PRINT"STARFLEET COMMAND REVIEWING YOUR RECORD TO CONSIDER"
|
||||
5410 PRINT"COURT MARTIAL!":D0=0
|
||||
5430 Z1=X:Z2=Y:A$=" ":GOSUB 8670
|
||||
5470 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):GOSUB 6000:GOTO 1990
|
||||
5490 PRINT"TORPEDO MISSED.":PRINT:GOSUB 6000:GOTO 1990
|
||||
5530 IF D(7)<0 THEN PRINT"SHIELD CONTROL INOPERABLE.":GOTO 1990
|
||||
5560 PRINT"ENERGY AVAILABLE =";E+S;:INPUT"NUMBER OF UNITS TO SHIELDS";X
|
||||
5580 IF X<0 OR S=X THEN PRINT"<SHIELDS UNCHANGED>":GOTO 1990
|
||||
5590 IF X<=E+S THEN 5630
|
||||
5600 PRINT"SHIELD CONTROL: 'THIS IS NOT THE FEDERATION TREASURY.'"
|
||||
5610 PRINT"<SHIELDS UNCHANGED>":GOTO 1990
|
||||
5630 E=E+S-X:S=X:PRINT"DEFLECTOR CONTROL ROOM:"
|
||||
5660 PRINT" 'SHIELDS NOW AT";INT(S);"UNITS PER YOUR COMMAND.'"
|
||||
5661 GOTO 1990
|
||||
5690 IF D(6)>=0 THEN 5910
|
||||
5700 PRINT"DAMAGE CONTROL REPORT NOT AVAILABLE.":IF D0=0 THEN 1990
|
||||
5720 D3=0:FOR I=1 TO 8:IF D(I)<0 THEN D3=D3+.1
|
||||
5760 NEXT I:IF D3=0 THEN 1990
|
||||
5780 PRINT:D3=D3+D4:IF D3>=1 THEN D3=.9
|
||||
5810 PRINT"TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;"
|
||||
5820 PRINT"ESTIMATED TIME TO REPAIR:";.01*INT(100*D3);"STARDATES."
|
||||
5840 INPUT"WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)";A$
|
||||
5860 IF A$<>"Y"THEN 1990
|
||||
5870 FOR I=1 TO 8:IF D(I)<0 THEN D(I)=0
|
||||
5890 NEXT I:T=T+D3+.1
|
||||
5910 PRINT:PRINT"DEVICE STATE OF REPAIR"
|
||||
5911 PRINT"------ ---------------":FOR R1=1 TO 8
|
||||
5920 GOSUB 8790:PRINT G2$;LEFT$(Z$,25-LEN(G2$));INT(D(R1)*100)*.01
|
||||
5950 NEXT R1:PRINT:IF D0<>0 THEN 5720
|
||||
5980 GOTO 1990
|
||||
6000 IF K3<=0 THEN RETURN
|
||||
6010 IF D0<>0 THEN PRINT"STARBASE SHIELDS PROTECT THE ENTERPRISE."
|
||||
6011 RETURN
|
||||
6040 FOR I=1 TO 3:IF K(I,3)<=0 THEN 6200
|
||||
6060 H=INT((K(I,3)/FND(1))*(2+RND(1)))
|
||||
6061 S=S-H:K(I,3)=K(I,3)/(3+RND(0))
|
||||
6080 PRINT:PRINT H;"UNIT HIT ON ENTERPRISE FROM SECTOR";
|
||||
6081 PRINT K(I,1);CHR$(8);",";K(I,2);CHR$(8);"."
|
||||
6090 IF S<=0 THEN 6240
|
||||
6100 PRINT" <SHIELDS DOWN TO";S;"UNITS>":IF H<20 THEN 6200
|
||||
6120 IF RND(1)>.6 OR H/S<=.02 THEN 6200
|
||||
6140 R1=FNR(1):D(R1)=D(R1)-H/S-.5*RND(1):GOSUB 8790
|
||||
6170 PRINT"DAMAGE CONTROL: '";G2$;" DAMAGED BY THE HIT'"
|
||||
6200 NEXT I:RETURN
|
||||
6220 PRINT:PRINT"IT IS STARDATE";T;CHR$(8);".":PRINT:GOTO 6270
|
||||
6240 PRINT:PRINT"THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION ";
|
||||
6250 PRINT"WILL BE CONQUERED.":GOTO 6220
|
||||
6270 PRINT"THERE WERE";K9;"KLINGON BATTLE CRUISERS LEFT AT"
|
||||
6280 PRINT"THE END OF YOUR MISSION."
|
||||
6290 PRINT:PRINT:IF B9=0 THEN 6360
|
||||
6310 PRINT"THE FEDERATION IS IN NEED OF A NEW STARSHIP COMMANDER"
|
||||
6320 PRINT"FOR A SIMILAR MISSION -- IF THERE IS A VOLUNTEER,"
|
||||
6330 INPUT"LET HIM STEP FORWARD AND ENTER 'AYE'";A$:IF A$="AYE"THEN 10
|
||||
6360 PRINT:PRINT "BACK TO SYSTEM.":END
|
||||
6370 PRINT"CONGRATULATIONS, CAPTAIN! THE LAST KLINGON BATTLE CRUISER"
|
||||
6380 PRINT"MENACING THE FEDERATION HAS BEEN DESTROYED.":PRINT
|
||||
6400 PRINT"YOUR EFFICIENCY RATING IS";1000*(K7/(T-T0))^2:GOTO 6290
|
||||
6430 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1
|
||||
6450 IF INT(I+.5)<1 OR INT(I+.5)>8 THEN 6540
|
||||
6451 IF INT(J+.5)<1 OR INT(J+.5)>8 THEN 6540
|
||||
6490 A$=">B<":Z1=I:Z2=J:GOSUB 8830:IF Z3=1 THEN 6580
|
||||
6540 NEXT J:NEXT I:D0=0:GOTO 6650
|
||||
6580 D0=1:C$="DOCKED":E=E0:P=P0
|
||||
6620 PRINT"SHIELDS DROPPED FOR DOCKING PURPOSES.":S=0:GOTO 6720
|
||||
6650 IF K3>0 THEN C$="*RED*":GOTO 6720
|
||||
6660 C$="GREEN":IF E<E0*.1 THEN C$="YELLOW"
|
||||
6720 IF D(2)>=0 THEN 6770
|
||||
6730 PRINT:PRINT"*** SHORT RANGE SENSORS ARE OUT ***":PRINT:RETURN
|
||||
6770 O1$=" +--1---2---3---4---5---6---7---8-+":PRINT O1$
|
||||
6771 FOR I=1 TO 8:PRINT I;"|";
|
||||
6820 FOR J=(I-1)*24+1 TO(I-1)*24+22 STEP 3:PRINT" ";MID$(Q$,J,3);
|
||||
6821 NEXT J:PRINT"|";I;
|
||||
6830 ON I GOTO 6850,6900,6960,7020,7070,7120,7180,7240
|
||||
6850 PRINT" STARDATE ";:PRINT INT(T*10)*.1
|
||||
6851 GOTO 7260
|
||||
6900 PRINT" CONDITION ";
|
||||
6901 IF C$="*RED*" THEN PRINT CHR$(22);"*RED*";CHR$(22):GOTO 7260
|
||||
6902 IF C$="DOCKED" THEN PRINT CHR$(22);"DOCKED";CHR$(22):GOTO 7260
|
||||
6903 PRINT C$: GOTO 7260
|
||||
6960 PRINT" QUADRANT ";Q1;CHR$(8);",";Q2;CHR$(8)
|
||||
6961 GOTO 7260
|
||||
7020 PRINT" SECTOR ";S1;CHR$(8);",";S2;CHR$(8)
|
||||
7021 GOTO 7260
|
||||
7070 PRINT" PHOTON TORPEDOES ";:PRINT INT(P)
|
||||
7071 GOTO 7260
|
||||
7120 PRINT" TOTAL ENERGY ";:PRINT INT(E+S)
|
||||
7121 GOTO 7260
|
||||
7180 PRINT" SHIELDS ";:PRINT INT(S)
|
||||
7181 GOTO 7260
|
||||
7240 PRINT" KLINGONS REMAINING";:PRINT INT(K9)
|
||||
7260 NEXT I:PRINT O1$:RETURN
|
||||
7290 IF D(8)<0 THEN PRINT"COMPUTER DISABLED.":GOTO 1990
|
||||
7320 INPUT"COMPUTER ACTIVE AND AWAITING COMMAND";A:IF A<0 THEN 1990
|
||||
7350 PRINT:H8=1:ON A+1 GOTO 7540,7900,8070,8500,8150,7400
|
||||
7360 PRINT"FUNCTIONS AVAILABLE FROM LIBRARY-COMPUTER:"
|
||||
7365 PRINT "-----------------------------------------":PRINT
|
||||
7370 PRINT" 0 = CUMULATIVE GALTIC RECORD"
|
||||
7372 PRINT" 1 = STATUS REPORT"
|
||||
7374 PRINT" 2 = PHOTON TORPEDO DATA"
|
||||
7376 PRINT" 3 = STARBASE NAV DATA"
|
||||
7378 PRINT" 4 = DIRECTION/DISTANCE CALCULATOR"
|
||||
7380 PRINT" 5 = GALAXY 'REGION NAME' MAP":PRINT:GOTO 7320
|
||||
7400 H8=0:G5=1:PRINT" THE GALAXY":GOTO 7550
|
||||
7540 REM
|
||||
7542 REM
|
||||
7543 PRINT:PRINT" ";
|
||||
7544 PRINT"COMPUTER RECORD OF GALAXY FOR QUADRANT";Q1;CHR$(8);",";Q2
|
||||
7546 PRINT
|
||||
7550 PRINT" 1 2 3 4 5 6 7 8"
|
||||
7560 O1$=" +-----+-----+-----+-----+-----+-----+-----+-----+"
|
||||
7570 PRINT O1$:FOR I=1 TO 8:PRINT I;" ";:IF H8=0 THEN 7740
|
||||
7630 FOR J=1 TO 8:PRINT"| ";:IF Z(I,J)=0 THEN PRINT"*** ";:GOTO 7720
|
||||
7700 PRINT RIGHT$(STR$(Z(I,J)+1000),3);" ";
|
||||
7720 IF J=8 THEN PRINT "|"
|
||||
7721 NEXT J:GOTO 7850
|
||||
7740 Z4=I:Z5=1:GOSUB 9030:J0=INT(15-.5*LEN(G2$)):PRINT TAB(J0);G2$;
|
||||
7800 Z5=5:GOSUB 9030:J0=INT(39-.5*LEN(G2$)):PRINT TAB(J0);G2$
|
||||
7850 PRINT O1$:NEXT I:PRINT:GOTO 1990
|
||||
7900 PRINT " STATUS REPORT:":PRINT " -------------":X$=""
|
||||
7901 IF K9>1 THEN X$="S"
|
||||
7940 PRINT K9;"KLINGON";X$;" LEFT."
|
||||
7960 PRINT" MISSION MUST BE COMPLETED IN";.1*INT((T0+T9-T)*10);
|
||||
7961 PRINT"STARDATES."
|
||||
7970 X$="S":IF B9<2 THEN X$="":IF B9<1 THEN 8010
|
||||
7980 PRINT" THE FEDERATION IS MAINTAINING";B9;
|
||||
7981 PRINT"STARBASE";X$;" IN THE GALAXY."
|
||||
7990 GOTO 5690
|
||||
8010 PRINT"YOUR STUPIDITY HAS LEFT YOU ON YOUR OWN IN"
|
||||
8020 PRINT" THE GALAXY -- YOU HAVE NO STARBASES LEFT!":GOTO 5690
|
||||
8070 IF K3<=0 THEN 4270
|
||||
8080 X$="":IF K3>1 THEN X$="S"
|
||||
8090 PRINT"FROM ENTERPRISE TO KLINGON BATTLE CRUSER";X$
|
||||
8100 H8=0:FOR I=1 TO 3:IF K(I,3)<=0 THEN 8480
|
||||
8110 W1=K(I,1):X=K(I,2)
|
||||
8120 C1=S1:A=S2:GOTO 8220
|
||||
8150 PRINT"DIRECTION/DISTANCE CALCULATOR:"
|
||||
8160 PRINT"YOU ARE AT QUADRANT ";Q1;CHR$(8);",";Q2;" SECTOR ";
|
||||
8161 PRINT S1;CHR$(8);",";S2;CHR$(8);"."
|
||||
8170 INPUT"PLEASE ENTER INITIAL COORDINATES (X,Y)";C1,A
|
||||
8200 INPUT"FINAL COORDINATES (X,Y)";W1,X
|
||||
8220 X=X-A:A=C1-W1:IF X<0 THEN 8350
|
||||
8250 IF A<0 THEN 8410
|
||||
8260 IF X>0 THEN 8280
|
||||
8270 IF A=0 THEN C1=5:GOTO 8290
|
||||
8280 C1=1
|
||||
8290 IF ABS(A)<=ABS(X)THEN 8330
|
||||
8310 PRINT"DIRECTION =";C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)):GOTO 8460
|
||||
8330 PRINT"DIRECTION =";C1+(ABS(A)/ABS(X)):GOTO 8460
|
||||
8350 IF A>0 THEN C1=3:GOTO 8420
|
||||
8360 IF X<>0 THEN C1=5:GOTO 8290
|
||||
8410 C1=7
|
||||
8420 IF ABS(A)>=ABS(X)THEN 8450
|
||||
8430 PRINT"DIRECTION =";C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)):GOTO 8460
|
||||
8450 PRINT"DIRECTION =";C1+(ABS(X)/ABS(A))
|
||||
8460 PRINT"DISTANCE =";SQR(X^2+A^2):IF H8=1 THEN 1990
|
||||
8480 NEXT I:GOTO 1990
|
||||
8500 IF B3<>0 THEN PRINT"FROM ENTERPRISE TO STARBASE:"
|
||||
8501 W1=B4:X=B5:GOTO 8120
|
||||
8510 PRINT"MR. SPOCK: 'SENSORS SHOW NO STARBASES IN THIS QUADRANT.'"";
|
||||
8520 GOTO 1990
|
||||
8590 R1=FNR(1):R2=FNR(1):A$=" ":Z1=R1:Z2=R2:GOSUB 8830
|
||||
8591 IF Z3=0 THEN 8590
|
||||
8600 RETURN
|
||||
8670 S8=INT(Z2-.5)*3+INT(Z1-.5)*24+1
|
||||
8675 IF LEN(A$)<>3 THEN PRINT"ERROR":STOP
|
||||
8680 IF S8=1 THEN Q$=A$+RIGHT$(Q$,189):RETURN
|
||||
8690 IF S8=190 THEN Q$=LEFT$(Q$,189)+A$:RETURN
|
||||
8700 Q$=LEFT$(Q$,S8-1)+A$+RIGHT$(Q$,190-S8):RETURN
|
||||
8790 ON R1 GOTO 8792,8794,8796,8798,8800,8802,8804,8806
|
||||
8792 G2$="WARP ENGINES":RETURN
|
||||
8794 G2$="SHORT RANGE SENSORS":RETURN
|
||||
8796 G2$="LONG RANGE SENSORS":RETURN
|
||||
8798 G2$="PHASER CONTROL":RETURN
|
||||
8800 G2$="PHOTON TUBES":RETURN
|
||||
8802 G2$="DAMAGE CONTROL":RETURN
|
||||
8804 G2$="SHIELD CONTROL":RETURN
|
||||
8806 G2$="LIBRARY-COMPUTER":RETURN
|
||||
8830 Z1=INT(Z1+.5):Z2=INT(Z2+.5):S8=(Z2-1)*3+(Z1-1)*24+1:Z3=0
|
||||
8890 IF MID$(Q$,S8,3)<>A$THEN RETURN
|
||||
8900 Z3=1:RETURN
|
||||
9030 IF Z5<=4 THEN ON Z4 GOTO 9040,9050,9060,9070,9080,9090,9100,9110
|
||||
9035 GOTO 9120
|
||||
9040 G2$="ANTARES":GOTO 9210
|
||||
9050 G2$="RIGEL":GOTO 9210
|
||||
9060 G2$="PROCYON":GOTO 9210
|
||||
9070 G2$="VEGA":GOTO 9210
|
||||
9080 G2$="CANOPUS":GOTO 9210
|
||||
9090 G2$="ALTAIR":GOTO 9210
|
||||
9100 G2$="SAGITTARIUS":GOTO 9210
|
||||
9110 G2$="POLLUX":GOTO 9210
|
||||
9120 ON Z4 GOTO 9130,9140,9150,9160,9170,9180,9190,9200
|
||||
9130 G2$="SIRIUS":GOTO 9210
|
||||
9140 G2$="DENEB":GOTO 9210
|
||||
9150 G2$="CAPELLA":GOTO 9210
|
||||
9160 G2$="BETELGEUSE":GOTO 9210
|
||||
9170 G2$="ALDEBARAN":GOTO 9210
|
||||
9180 G2$="REGULUS":GOTO 9210
|
||||
9190 G2$="ARCTURUS":GOTO 9210
|
||||
9200 G2$="SPICA"
|
||||
9210 IF G5<>1 THEN ON Z5 GOTO 9230,9240,9250,9260,9230,9240,9250,9260
|
||||
9220 RETURN
|
||||
9230 G2$=G2$+" I":RETURN
|
||||
9240 G2$=G2$+" II":RETURN
|
||||
9250 G2$=G2$+" III":RETURN
|
||||
9260 G2$=G2$+" IV":RETURN
|
||||
9999 END
|
||||
133
software/BAS/trekinst.bas
Normal file
133
software/BAS/trekinst.bas
Normal file
@@ -0,0 +1,133 @@
|
||||
10 REM INSTRUCTIONS FOR "SUPER STARTREK" MAR 5, 1978
|
||||
20 FOR I=1 TO 12:PRINT:NEXT I
|
||||
25 PRINT CHR$(26)
|
||||
30 PRINT TAB(10);"*************************************"
|
||||
40 PRINT TAB(10);"* *"
|
||||
50 PRINT TAB(10);"* *"
|
||||
60 PRINT TAB(10);"* * * SUPER STAR TREK * * *"
|
||||
70 PRINT TAB(10);"* *"
|
||||
80 PRINT TAB(10);"* *"
|
||||
90 PRINT TAB(10);"*************************************"
|
||||
100 FOR I=1 TO 8:PRINT:NEXT I
|
||||
110 INPUT "DO YOU NEED INSTRUCTIONS (Y/N)";K$:IF K$="N" THEN 1210
|
||||
120 PRINT CHR$(26)
|
||||
130 PRINT "NOTE: YOU MUST BE RUNNING 40K CP/M TO RUN STARTREK."
|
||||
140 PRINT " THIS MEANS THAT BASIC MUST HAVE ABOUT 18K OF FREE MEMORY."
|
||||
150 PRINT
|
||||
160 PRINT" INSTRUCTIONS FOR 'SUPER STAR TREK'"
|
||||
170 PRINT
|
||||
180 PRINT"1. WHEN YOU SEE \COMMAND ?\ PRINTED, ENTER ONE OF THE LEGAL"
|
||||
190 PRINT" COMMANDS (NAV,SRS,LRS,PHA,TOR,SHE,DAM,COM, OR XXX)."
|
||||
200 PRINT"2. IF YOU SHOULD TYPE IN AN ILLEGAL COMMAND, YOU'LL GET A SHORT"
|
||||
210 PRINT" LIST OF THE LEGAL COMMANDS PRINTED OUT."
|
||||
220 PRINT"3. SOME COMMANDS REQUIRE YOU TO ENTER DATA (FOR EXAMPLE, THE"
|
||||
230 PRINT" 'NAV' COMMAND COMES BACK WITH 'COURSE (1-9) ?'.) IF YOU"
|
||||
240 PRINT" TYPE IN ILLEGAL DATA (LIKE NEGATIVE NUMBERS), THAT COMMAND"
|
||||
250 PRINT" WILL BE ABORTED"
|
||||
260 PRINT
|
||||
270 PRINT" THE GALAXY IS DIVIDED INTO AN 8 X 8 QUADRANT GRID,"
|
||||
280 PRINT"AND EACH QUADRANT IS FURTHER DIVIDED INTO AN 8 X 8 SECTOR GRID."
|
||||
290 PRINT
|
||||
300 PRINT" YOU WILL BE ASSIGNED A STARTING POINT SOMEWHERE IN THE"
|
||||
310 PRINT"GALAXY TO BEGIN A TOUR OF DUTY AS COMMANDER OF THE STARSHIP"
|
||||
320 PRINT"\ENTERPRISE\; YOUR MISSION: TO SEEK AND DESTROY THE FLEET OF"
|
||||
330 PRINT"KLINGON WARWHIPS WHICH ARE MENACING THE UNITED FEDERATION OF"
|
||||
340 PRINT"PLANETS."
|
||||
350 PRINT
|
||||
352 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26)
|
||||
360 PRINT" YOU HAVE THE FOLLOWING COMMANDS AVAILABLE TO YOU AS CAPTAIN"
|
||||
370 PRINT"OF THE STARSHIP ENTERPRISE:"
|
||||
380 PRINT
|
||||
390 PRINT"\NAV\ COMMAND = WARP ENGINE CONTROL --"
|
||||
400 PRINT" COURSE IS IN A CIRCULAR NUMERICAL 4 3 2"
|
||||
410 PRINT" VECTOR ARRANGEMENT AS SHOWN . . ."
|
||||
420 PRINT" INTEGER AND REAL VALUES MAY BE ..."
|
||||
430 PRINT" USED. (THUS COURSE 1.5 IS HALF- 5 ---*--- 1"
|
||||
440 PRINT" WAY BETWEEN 1 AND 2 ..."
|
||||
450 PRINT" . . ."
|
||||
460 PRINT" VALUES MAY APPROACH 9.0, WHICH 6 7 8"
|
||||
470 PRINT" ITSELF IS EQUIVALENT TO 1.0"
|
||||
480 PRINT" COURSE"
|
||||
490 PRINT" ONE WARP FACTOR IS THE SIZE OF "
|
||||
500 PRINT" ONE QUADTANT. THEREFORE, TO GET"
|
||||
510 PRINT" FROM QUADRANT 6,5 TO 5,5, YOU WOULD"
|
||||
520 PRINT" USE COURSE 3, WARP FACTOR 1."
|
||||
530 PRINT:PRINT
|
||||
531 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26)
|
||||
540 PRINT"\SRS\ COMMAND = SHORT RANGE SENSOR SCAN"
|
||||
550 PRINT" SHOWS YOU A SCAN OF YOUR PRESENT QUADRANT."
|
||||
560 PRINT
|
||||
570 PRINT" SYMBOLOGY ON YOUR SENSOR SCREEN IS AS FOLLOWS:"
|
||||
580 PRINT" <*> = YOUR STARSHIP'S POSITION"
|
||||
590 PRINT" +K+ = KLINGON BATTLE CRUISER"
|
||||
600 PRINT" >!< = FEDERATION STARBASE (REFUEL/REPAIR/RE-ARM HERE!)"
|
||||
610 PRINT" * = STAR"
|
||||
620 PRINT
|
||||
630 PRINT" A CONDENSED 'STATUS REPORT' WILL ALSO BE PRESENTED."
|
||||
640 PRINT
|
||||
650 PRINT"\LRS\ COMMAND = LONG RANGE SENSOR SCAN"
|
||||
660 PRINT" SHOWS CONDITIONS IN SPACE FOR ONE QUADRANT ON EACH SIDE"
|
||||
670 PRINT" OF THE ENTERPRISE (WHICH IS IN THE MIDDLE OF THE SCAN)"
|
||||
680 PRINT" THE SCAN IS CODED IN THE FORM \###\, WHERE TH UNITS DIGIT"
|
||||
690 PRINT" IS THE NUMBER OF STARS, THE TENS DIGIT IS THE NUMBER OF"
|
||||
700 PRINT" STARBASES, AND THE HUNDRESDS DIGIT IS THE NUMBER OF"
|
||||
710 PRINT" KLINGONS."
|
||||
720 PRINT
|
||||
730 PRINT" EXAMPLE - 207 = 2 KLINGONS, NO STARBASES, & 7 STARS."
|
||||
740 PRINT:PRINT
|
||||
741 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26)
|
||||
750 PRINT"\PHA\ COMMAND = PHASER CONTROL."
|
||||
760 PRINT" ALLOWS YOU TO DESTROY THE KLINGON BATTLE CRUISERS BY "
|
||||
770 PRINT" ZAPPING THEM WITH SUITABLY LARGE UNITS OF ENERGY TO"
|
||||
780 PRINT" DEPLETE THEIR SHIELD POWER. (REMEMBER, KLINGONS HAVE"
|
||||
790 PRINT" PHASERS TOO!)"
|
||||
800 PRINT
|
||||
810 PRINT"\TOR\ COMMAND = PHOTON TORPEDO CONTROL"
|
||||
820 PRINT" TORPEDO COURSE IS THE SAME AS USED IN WARP ENGINE CONTROL"
|
||||
830 PRINT" IF YOU HIT THE KLINGON VESSEL, HE IS DESTROYED AND"
|
||||
840 PRINT" CANNOT FIRE BACK AT YOU. IF YOU MISS, YOU ARE SUBJECT TO"
|
||||
850 PRINT" HIS PHASER FIRE. IN EITHER CASE, YOU ARE ALSO SUBJECT TO "
|
||||
860 PRINT" THE PHASER FIRE OF ALL OTHER KLINGONS IN THE QUADRANT."
|
||||
870 PRINT
|
||||
880 PRINT" THE LIBRARY-COMPUTER (\COM\ COMMAND) HAS AN OPTION TO "
|
||||
890 PRINT" COMPUTE TORPEDO TRAJECTORY FOR YOU (OPTION 2)"
|
||||
900 PRINT
|
||||
910 PRINT"\SHE\ COMMAND = SHIELD CONTROL"
|
||||
920 PRINT" DEFINES THE NUMBER OF ENERGY UNITS TO BE ASSIGNED TO THE"
|
||||
930 PRINT" SHIELDS. ENERGY IS TAKEN FROM TOTAL SHIP'S ENERGY. NOTE"
|
||||
940 PRINT" THAT THE STATUS DISPLAY TOTAL ENERGY INCLUDES SHIELD ENERGY"
|
||||
950 PRINT
|
||||
951 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26)
|
||||
960 PRINT"\DAM\ COMMAND = DAMMAGE CONTROL REPORT"
|
||||
970 PRINT" GIVES THE STATE OF REPAIR OF ALL DEVICES. WHERE A NEGATIVE"
|
||||
980 PRINT" 'STATE OF REPAIR' SHOWS THAT THE DEVICE IS TEMPORARILY"
|
||||
990 PRINT" DAMAGED."
|
||||
1000 PRINT
|
||||
1010 PRINT"\COM\ COMMAND = LIBRARY-COMPUTER"
|
||||
1020 PRINT" THE LIBRARY-COMPUTER CONTAINS SIX OPTIONS:"
|
||||
1030 PRINT" OPTION 0 = CUMULATIVE GALACTIC RECORD"
|
||||
1040 PRINT" THIS OPTION SHOWES COMPUTER MEMORY OF THE RESULTS OF ALL"
|
||||
1050 PRINT" PREVIOUS SHORT AND LONG RANGE SENSOR SCANS"
|
||||
1060 PRINT" OPTION 1 = STATUS REPORT"
|
||||
1070 PRINT" THIS OPTION SHOWS THE NUMBER OF KLINGONS, STARDATES,"
|
||||
1080 PRINT" AND STARBASES REMAINING IN THE GAME."
|
||||
1090 PRINT" OPTION 2 = PHOTON TORPEDO DATA"
|
||||
1100 PRINT" WHICH GIVES DIRECTIONS AND DISTANCE FROM THE ENTERPRISE"
|
||||
1110 PRINT" TO ALL KLINGONS IN YOUR QUADRANT"
|
||||
1115 PRINT:PRINT
|
||||
1116 LINE INPUT "ENTER [CR] TO CONTINUE";A$:IF A$="" THEN PRINT CHR$(26)
|
||||
1117 PRINT"\COM\ COMMAND = LIBRARY-COMPUTER"
|
||||
1118 PRINT
|
||||
1120 PRINT" OPTION 3 = STARBASE NAV DATA"
|
||||
1130 PRINT" THIS OPTION GIVES DIRECTION AND DISTANCE TO ANY "
|
||||
1140 PRINT" STARBASE WITHIN YOUR QUADRANT"
|
||||
1150 PRINT" OPTION 4 = DIRECTION/DISTANCE CALCULATOR"
|
||||
1160 PRINT" THIS OPTION ALLOWS YOU TO ENTER COORDINATES FOR"
|
||||
1170 PRINT" DIRECTION/DISTANCE CALCULATIONS"
|
||||
1180 PRINT" OPTION 5 = CALACTIC /REGION NAME/ MAP"
|
||||
1190 PRINT" THIS OPTION PRINTS THE NAMES OF THE SIXTEEN MAJOR "
|
||||
1200 PRINT" GALACTIC REGIONS REFERRED TO IN THE GAME."
|
||||
1210 PRINT:PRINT:PRINT
|
||||
1220 PRINT "...CHAINING TO STARTREK..."
|
||||
1230 LOAD "STARTREK.BAS",R
|
||||
1240 END
|
||||
33
software/BAS/userled.bas
Normal file
33
software/BAS/userled.bas
Normal file
@@ -0,0 +1,33 @@
|
||||
01 REM ****************************************
|
||||
02 REM
|
||||
03 REM Z80-MBC2 USER led blink demo:
|
||||
04 REM
|
||||
05 REM Blink USER led until USER key is pressed
|
||||
06 REM
|
||||
07 REM ****************************************
|
||||
08 REM
|
||||
13 PRINT "Press USER key to exit"
|
||||
14 LEDUSER = 0 : REM USER LED write Opcode (0x00)
|
||||
15 KEYUSER = 128 : REM USER KEY read Opcode (0x80)
|
||||
16 PRINT "Now blinking..."
|
||||
18 OUT 1,LEDUSER : REM Write the USER LED write Opcode
|
||||
20 OUT 0,1 : REM Turn USER LED on
|
||||
30 GOSUB 505 : REM Delay sub
|
||||
40 OUT 1,LEDUSER : REM Write the USER LED write Opcode
|
||||
45 OUT 0,0 : REM Turn USER LED off
|
||||
50 GOSUB 505 : REM Delay
|
||||
60 GOTO 18
|
||||
490 REM
|
||||
500 REM * * * * * DELAY SUB
|
||||
501 REM
|
||||
505 FOR J=0 TO 150
|
||||
506 OUT 1,KEYUSER : REM Write the USER KEY read Opcode
|
||||
507 IF INP(0)=1 THEN GOTO 700 : REM Exit if USER key is pressed
|
||||
510 NEXT J
|
||||
520 RETURN
|
||||
690 REM
|
||||
691 REM * * * * * PROGRAM END
|
||||
692 REM
|
||||
700 OUT 1,LEDUSER : REM Write the USER LED write Opcode
|
||||
710 OUT 0,0 : REM Turn USER LED off
|
||||
720 PRINT "Terminated by USER Key"
|
||||
Binary file not shown.
Binary file not shown.
@@ -155,6 +155,8 @@ INIT80CHAR: IF BUILD_VIDEOMODULE = 1
|
||||
IN A,(VMCTRL) ; Get current display mode.
|
||||
OR MODE_80CHAR ; Enable 80 char display.
|
||||
OUT (VMCTRL),A ; Activate.
|
||||
LD A, SYSMODE_MZ80B ; Set bus and default CPU speed to 4MHz
|
||||
OUT (SYSCTRL),A ; Activate.
|
||||
ELSE
|
||||
; Change to 80 character mode on the 40/80 Char Colour board v1.0.
|
||||
LD A, 128 ; 80 char mode.
|
||||
@@ -8644,6 +8646,19 @@ REBOOTTZ: IF BUILD_TZFS +BUILD_RFS > 0
|
||||
OUT (MMCFG),A
|
||||
ENDIF
|
||||
|
||||
; Switch machine back to default state.
|
||||
IF BUILD_VIDEOMODULE = 1
|
||||
IN A,(VMCTRL) ; Get current display mode.
|
||||
AND ~MODE_80CHAR ; Disable 80 char display.
|
||||
OUT (VMCTRL),A ; Activate.
|
||||
LD A, SYSMODE_MZ80A ; Set bus and default CPU speed to 2MHz
|
||||
OUT (SYSCTRL),A ; Activate.
|
||||
ELSE
|
||||
; Change to 40 character mode on the 40/80 Char Colour board v1.0.
|
||||
LD A, 0 ; 40 char mode.
|
||||
LD (DSPCTL), A
|
||||
ENDIF
|
||||
|
||||
REBOOT80A: IF BUILD_MZ80A = 1
|
||||
ENDIF
|
||||
JP 0000H ; Now restart in the SA1510 monitor.
|
||||
|
||||
@@ -258,12 +258,14 @@ INIT3: ; Setup keyboard buffer control.
|
||||
LD (FLASHCTL),A
|
||||
|
||||
INIT80CHAR: IF BUILD_VIDEOMODULE = 1
|
||||
IN A,(VMCTRL) ; Get current display mode.
|
||||
OR MODE_80CHAR ; Enable 80 char display.
|
||||
OUT (VMCTRL),A ; Activate.
|
||||
IN A,(VMCTRL) ; Get current display mode.
|
||||
OR MODE_80CHAR ; Enable 80 char display.
|
||||
OUT (VMCTRL),A ; Activate.
|
||||
LD A, SYSMODE_MZ80B ; Set bus and default CPU speed to 4MHz
|
||||
OUT (SYSCTRL),A ; Activate.
|
||||
ELSE
|
||||
; Change to 80 character mode on the 40/80 Char Colour board v1.0.
|
||||
LD A, 128 ; 80 char mode.
|
||||
LD A, 128 ; 80 char mode.
|
||||
LD (DSPCTL), A
|
||||
ENDIF
|
||||
;
|
||||
@@ -2034,6 +2036,20 @@ BOOTSTG1: LD A,TZMM_CPM2
|
||||
; mode 7 to mode 2, the code continues.
|
||||
REBOOT: LD A,TZMM_TZFS
|
||||
OUT (MMCFG),A
|
||||
|
||||
; Switch machine back to default state.
|
||||
IF BUILD_VIDEOMODULE = 1
|
||||
IN A,(VMCTRL) ; Get current display mode.
|
||||
AND ~MODE_80CHAR ; Disable 80 char display.
|
||||
OUT (VMCTRL),A ; Activate.
|
||||
LD A, SYSMODE_MZ80A ; Set bus and default CPU speed to 2MHz
|
||||
OUT (SYSCTRL),A ; Activate.
|
||||
ELSE
|
||||
; Change to 40 character mode on the 40/80 Char Colour board v1.0.
|
||||
LD A, 0 ; 40 char mode.
|
||||
LD (DSPCTL), A
|
||||
ENDIF
|
||||
;
|
||||
JP MROMADDR ; Now restart in the SA1510 monitor.
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user