mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Update TastyBasic
This commit is contained in:
86
Source/TastyBasic/examples/BATNUM.BAS
Normal file
86
Source/TastyBasic/examples/BATNUM.BAS
Normal file
@@ -0,0 +1,86 @@
|
||||
10 PRINT "BATNUM"
|
||||
20 PRINT "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
30 PRINT
|
||||
110 PRINT "THIS PROGRAM IS A 'BATTLE OF NUMBERS' GAME, WHERE THE"
|
||||
120 PRINT "COMPUTER IS YOUR OPPONENT."
|
||||
130 PRINT
|
||||
140 PRINT "THE GAME STARTS WITH AN ASSUMED PILE OF OBJECTS. YOU"
|
||||
150 PRINT "AND YOUR OPPONENT ALTERNATELY REMOVE OBJECTS FROM THE PILE."
|
||||
160 PRINT "WINNING IS DEFINED IN ADVANCE AS TAKING THE LAST OBJECT OR"
|
||||
170 PRINT "NOT. YOU CAN ALSO SPECIFY SOME OTHER BEGINNING CONDITIONS."
|
||||
180 PRINT "DON'T USE ZERO, HOWEVER, IN PLAYING THE GAME."
|
||||
190 PRINT "ENTER A NEGATIVE NUMBER FOR NEW PILE SIZE TO STOP PLAYING."
|
||||
200 PRINT
|
||||
210 GOTO 330
|
||||
220 FOR I=1 TO 10
|
||||
230 PRINT
|
||||
240 NEXT I
|
||||
330 INPUT "ENTER PILE SIZE"N
|
||||
340 IF N<0 GOTO 1080
|
||||
350 IF N>=1 GOTO 390
|
||||
360 GOTO 330
|
||||
390 INPUT "ENTER WIN OPTION - 1 TO TAKE LAST, 2 TO AVOID LAST"M
|
||||
410 IF M=1 GOTO 430
|
||||
420 IF M#2 GOTO 390
|
||||
430 INPUT "ENTER MIN PER TURN"A,"AND MAX"B
|
||||
450 IF A>B GOTO 430
|
||||
460 IF A<1 GOTO 430
|
||||
490 INPUT "ENTER START OPTION - 1 COMPUTER FIRST, 2 YOU FIRST"S
|
||||
500 PRINT
|
||||
510 IF S=1 GOTO 530
|
||||
520 IF S#2 GOTO 490
|
||||
530 C=A+B
|
||||
540 IF S=2 GOTO 570
|
||||
550 GOSUB 600
|
||||
560 IF W=1 GOTO 220
|
||||
570 GOSUB 810
|
||||
580 IF W=1 GOTO 220
|
||||
590 GOTO 550
|
||||
600 Q=N
|
||||
610 IF M=1 GOTO 630
|
||||
620 Q=Q-1
|
||||
630 IF M=1 GOTO 680
|
||||
640 IF N>A GOTO 720
|
||||
650 W=1
|
||||
660 PRINT "COMPUTER TAKES",N," AND LOSES."
|
||||
670 RETURN
|
||||
680 IF N>B GOTO 720
|
||||
690 W=1
|
||||
700 PRINT "COMPUTER TAKES",N," AND WINS."
|
||||
710 RETURN
|
||||
720 P=Q-C*(Q/C)
|
||||
730 IF P>=A GOTO 750
|
||||
740 P=A
|
||||
750 IF P<=B GOTO 770
|
||||
760 P=B
|
||||
770 N=N-P
|
||||
780 PRINT "COMPUTER TAKES",P," AND LEAVES",N
|
||||
790 W=0
|
||||
800 RETURN
|
||||
810 PRINT
|
||||
820 INPUT "YOUR MOVE"P
|
||||
830 IF P#0 GOTO 880
|
||||
840 PRINT "I TOLD YOU NOT TO USE ZERO! COMPUTER WINS BY FORFEIT."
|
||||
850 W=1
|
||||
860 RETURN
|
||||
880 IF P>=A GOTO 910
|
||||
890 IF P=N GOTO 960
|
||||
900 GOTO 920
|
||||
910 IF P<=B GOTO 940
|
||||
920 PRINT "ILLEGAL MOVE, REENTER IT!"
|
||||
930 GOTO 820
|
||||
940 N=N-P
|
||||
950 IF N#0 GOTO 1030
|
||||
960 IF M=1 GOTO 1000
|
||||
970 PRINT "TOUGH LUCK, YOU LOSE."
|
||||
980 W=1
|
||||
990 RETURN
|
||||
1000 PRINT "CONGRATULATIONS, YOU WIN."
|
||||
1010 W=1
|
||||
1020 RETURN
|
||||
1030 IF N>=0 GOTO 1060
|
||||
1040 N=N+P
|
||||
1050 GOTO 920
|
||||
1060 W=0
|
||||
1070 RETURN
|
||||
1080 END
|
||||
16
Source/TastyBasic/examples/DUMP.BAS
Normal file
16
Source/TastyBasic/examples/DUMP.BAS
Normal file
@@ -0,0 +1,16 @@
|
||||
10 INPUT "ADDRESS"A
|
||||
20 FOR I=0 TO 15
|
||||
30 P=A+I*16
|
||||
40 PRINT $16,P,
|
||||
50 FOR J=0 TO 15
|
||||
60 PRINT " ",$8,PEEK(P+J),
|
||||
70 NEXT J
|
||||
80 PRINT
|
||||
90 NEXT I
|
||||
100 INPUT ""Q
|
||||
110 IF Q<0 GOTO 160
|
||||
120 A=A+256
|
||||
130 IF Q=0 GOTO 20
|
||||
140 A=Q
|
||||
150 GOTO 20
|
||||
160 END
|
||||
25
Source/TastyBasic/examples/README.md
Normal file
25
Source/TastyBasic/examples/README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Tasty Basic Files
|
||||
|
||||
## Introduction
|
||||
The CP/M version of Tasty Basic allows programs to be saved to and loaded from disk. This
|
||||
document describes the Tasty Basic `.TBA` file format.
|
||||
|
||||
## .TBA File format
|
||||
Tasty Basic `.TBA` files are direct reflections of Tasty Basic programs as held in memory. Thus,
|
||||
each line of code starts with a 16 bit, LSB first, line number and ends with a carriage return
|
||||
character (0xD). An EOF marker (0x1A) indicates the end of the file. Any trailing NUL characters
|
||||
(0x0) are ignored.
|
||||
|
||||
### Example
|
||||
Following is an example Tasty Basic program:
|
||||
```
|
||||
10 PRINT "HELLO WORLD"
|
||||
20 GOTO 10
|
||||
```
|
||||
And its `.TBA` file representation:
|
||||
```
|
||||
0A 00 50 52 49 4E 54 20 22 48 45 4C 4C 4F 20 57
|
||||
4F 52 4C 44 22 0D 14 00 47 4F 54 4F 20 31 30 0D
|
||||
1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
```
|
||||
|
||||
74
Source/TastyBasic/examples/REVERSE.BAS
Normal file
74
Source/TastyBasic/examples/REVERSE.BAS
Normal file
@@ -0,0 +1,74 @@
|
||||
10 PRINT "REVERSE"
|
||||
30 PRINT "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
100 PRINT "REVERSE -- A GAME OF SKILL"
|
||||
140 REM *** N=NUMBER OF NUMBERS
|
||||
150 N=9
|
||||
160 INPUT "DO YOU WANT THE RULES (0=NO,1=YES)"A
|
||||
180 IF A=0 GOTO 210
|
||||
190 GOSUB 710
|
||||
200 REM *** MAKE A RANDOM LIST @(1) TO @(N)
|
||||
210 @(1)=RND(N-1)+1
|
||||
220 FOR K=2 TO N
|
||||
230 @(K)=RND(N)
|
||||
240 FOR J=1 TO K-1
|
||||
250 IF @(K)=@(J) GOTO 230
|
||||
260 NEXT J
|
||||
270 NEXT K
|
||||
280 REM *** PRINT ORIGINAL LIST AND START GAME
|
||||
290 PRINT
|
||||
300 PRINT "HERE WE GO ... THE LIST IS:"
|
||||
310 T=0
|
||||
320 GOSUB 610
|
||||
330 INPUT "HOW MANY SHALL I REVERSE"R
|
||||
350 IF R=0 GOTO 520
|
||||
360 IF R<=N GOTO 390
|
||||
370 PRINT "OOPS! TOO MANY! I CAN REVERSE AT MOST ",#2,N
|
||||
380 GOTO 330
|
||||
390 T=T+1
|
||||
400 REM *** REVERSE R NUMBERS AND PRINT NEW LIST
|
||||
410 FOR K=1 TO R/2
|
||||
420 Z=@(K)
|
||||
430 @(K)=@(R-K+1)
|
||||
440 @(R-K+1)=Z
|
||||
450 NEXT K
|
||||
460 GOSUB 610
|
||||
470 REM *** CHECK FOR A WIN
|
||||
480 FOR K=1 TO N
|
||||
490 IF @(K)#K GOTO 330
|
||||
500 NEXT K
|
||||
510 PRINT "YOU WON IT IN",T," MOVES!!!"
|
||||
520 PRINT
|
||||
530 INPUT "TRY AGAIN (1=YES, 0=NO)"A
|
||||
550 IF A=1 GOTO 210
|
||||
560 PRINT
|
||||
565 PRINT "O.K. HOPE YOU HAD FUN!!"
|
||||
570 GOTO 999
|
||||
600 REM *** SUBROUTINE TO PRINT LIST
|
||||
610 PRINT
|
||||
620 FOR K=1 TO N
|
||||
630 PRINT #2,@(K),
|
||||
640 NEXT K
|
||||
650 PRINT
|
||||
660 RETURN
|
||||
700 REM *** SUBROUTINE TO PRINT THE RULES
|
||||
710 PRINT "THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE"
|
||||
720 PRINT "TO DO IS ARRANGE A LIST OF NUMBERS (1 THROUGH ",#2,N,")"
|
||||
730 PRINT "IN NUMERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU"
|
||||
740 PRINT "TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO"
|
||||
750 PRINT "REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:"
|
||||
755 PRINT
|
||||
760 PRINT " 2 3 4 5 1 6 7 8 9"
|
||||
765 PRINT
|
||||
770 PRINT "AND YOU REVERSE 4, THE RESULT WILL BE:"
|
||||
775 PRINT
|
||||
780 PRINT " 5 4 3 2 1 6 7 8 9"
|
||||
785 PRINT
|
||||
790 PRINT "NOW IF YOU REVERSE 5, YOU WIN!"
|
||||
795 PRINT
|
||||
800 PRINT " 1 2 3 4 5 6 7 8 9"
|
||||
805 PRINT
|
||||
810 PRINT "NO DOUBT YOU WILL LIKE THIS GAME, BUT"
|
||||
820 PRINT "IF YOU WANT TO QUIT, REVERSE 0 (ZERO)."
|
||||
830 PRINT
|
||||
840 RETURN
|
||||
999 END
|
||||
30
Source/TastyBasic/examples/SBCRTC.BAS
Normal file
30
Source/TastyBasic/examples/SBCRTC.BAS
Normal file
@@ -0,0 +1,30 @@
|
||||
100 REM -- ADJUST USR FUNCTION POINTER
|
||||
110 POKE 5118,6
|
||||
120 POKE 5119,20
|
||||
200 REM -- RTC BUFFER AT 5120-5125
|
||||
210 FOR I=0 TO 14
|
||||
220 READ A
|
||||
230 POKE 5126+I,A
|
||||
240 NEXT I
|
||||
250 DATA 6,32,123,178,40,1,4,33,0,20,207,17,0,0,201
|
||||
300 INPUT "GET OR SET TIME (GET=0,SET=1)"P
|
||||
310 IF P=0 GOTO 400
|
||||
320 A=5120:INPUT "YEAR"Q:GOSUB 500
|
||||
330 A=5121:INPUT "MONTH"Q:GOSUB 500
|
||||
340 A=5122:INPUT "DAY"Q:GOSUB 500
|
||||
350 A=5123:INPUT "HOURS"Q:GOSUB 500
|
||||
360 A=5124:INPUT "MINS"Q:GOSUB 500
|
||||
370 A=5125:INPUT "SECS"Q:GOSUB 500
|
||||
400 Q=USR(P)
|
||||
410 PRINT $8,PEEK(5120),"-",
|
||||
420 PRINT $8,PEEK(5121),"-",
|
||||
430 PRINT $8,PEEK(5122)," ",
|
||||
440 PRINT $8,PEEK(5123),":",
|
||||
450 PRINT $8,PEEK(5124),":",
|
||||
460 PRINT $8,PEEK(5125)
|
||||
470 GOTO 300
|
||||
500 T=Q/10
|
||||
510 U=Q-10*T
|
||||
520 B=T*16+U
|
||||
530 POKE A,B
|
||||
540 RETURN
|
||||
117
Source/TastyBasic/examples/TICTAC.BAS
Normal file
117
Source/TastyBasic/examples/TICTAC.BAS
Normal file
@@ -0,0 +1,117 @@
|
||||
2 PRINT "TIC-TAC-TOE"
|
||||
4 PRINT "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||
6 PRINT
|
||||
8 PRINT "THE BOARD IS NUMBERED:"
|
||||
10 PRINT " 1 2 3"
|
||||
12 PRINT " 4 5 6"
|
||||
14 PRINT " 7 8 9"
|
||||
16 PRINT
|
||||
20 FOR I=1 TO 9:@(I)=0:NEXT I
|
||||
50 INPUT"DO YOU WANT 'X' OR 'O' (X=1,O=0)"C
|
||||
55 IF C=1 GOTO 475
|
||||
60 P=0,Q=1
|
||||
100 G=-1,H=1:IF @(5)#0 GOTO 103
|
||||
102 @(5)=-1:GOTO 195
|
||||
103 IF @(5)#1 GOTO 106
|
||||
104 IF @(1)#0 GOTO 110
|
||||
105 @(1)=-1:GOTO 195
|
||||
106 IF (@(2)=1)*(@(1)=0) GOTO 181
|
||||
107 IF (@(4)=1)*(@(1)=0) GOTO 181
|
||||
108 IF (@(6)=1)*(@(9)=0) GOTO 189
|
||||
109 IF (@(8)=1)*(@(9)=0) GOTO 189
|
||||
110 IF G=1 GOTO 112
|
||||
111 GOTO 118
|
||||
112 J=3*(M-1)/3+1
|
||||
113 IF J=M LET K=1
|
||||
114 IF J+1=M LET K=2
|
||||
115 IF J+2=M LET K=3
|
||||
116 GOTO 120
|
||||
118 FOR J=1 TO 7 STEP 3:FOR K=1 TO 3
|
||||
120 IF @(J)#G GOTO 130
|
||||
122 IF @(J+2)#G GOTO 135
|
||||
126 IF @(J+1)#0 GOTO 150
|
||||
128 @(J+1)=-1:GOTO 195
|
||||
130 IF @(J)=H GOTO 150
|
||||
131 IF @(J+2)#G GOTO 150
|
||||
132 IF @(J+1)#G GOTO 150
|
||||
133 @(J)=-1:GOTO 195
|
||||
135 IF @(J+2)#0 GOTO 150
|
||||
136 IF @(J+1)#G GOTO 150
|
||||
138 @(J+2)=-1:GOTO 195
|
||||
150 IF @(K)#G GOTO 160
|
||||
152 IF @(K+6)#G GOTO 165
|
||||
156 IF @(K+3)#0 GOTO 170
|
||||
158 @(K+3)=-1:GOTO 195
|
||||
160 IF @(K)=H GOTO 170
|
||||
161 IF @(K+6)#G GOTO 170
|
||||
162 IF @(K+3)#G GOTO 170
|
||||
163 @(K)=-1:GOTO 195
|
||||
165 IF @(K+6)#0 GOTO 170
|
||||
166 IF @(K+3)#G GOTO 170
|
||||
168 @(K+6)=-1:GOTO 195
|
||||
170 GOTO 450
|
||||
171 IF (@(3)=G)*(@(7)=0) GOTO 187
|
||||
172 IF (@(9)=G)*(@(1)=0) GOTO 181
|
||||
173 IF (@(7)=G)*(@(3)=0) GOTO 183
|
||||
174 IF (@(9)=0)*(@(1)=G) GOTO 189
|
||||
175 IF G=-1 LET G=1,H=-1:GOTO 110
|
||||
176 IF (@(9)=1)*(@(3)=0) GOTO 182
|
||||
177 FOR I=2 TO 9:IF @(I)#0 GOTO 179
|
||||
178 @(I)=-1:GOTO 195
|
||||
179 NEXT I
|
||||
181 @(1)=-1:GOTO 195
|
||||
182 IF @(1)=1 GOTO 177
|
||||
183 @(3)=-1:GOTO 195
|
||||
187 @(7)=-1:GOTO 195
|
||||
189 @(9)=-1
|
||||
195 PRINT"THE COMPUTER MOVES TO..."
|
||||
202 GOSUB 1000
|
||||
205 GOTO 500
|
||||
450 IF G=1 GOTO 465
|
||||
455 IF (J=7)*(K=3) GOTO 465
|
||||
460 NEXT K:NEXT J
|
||||
465 IF @(5)=G GOTO 171
|
||||
467 GOTO 175
|
||||
475 P=1,Q=0
|
||||
500 INPUT"WHERE DO YOU MOVE"M
|
||||
502 IF M=0 PRINT"THANKS FOR THE GAME.":GOTO 2000
|
||||
503 IF M>9 GOTO 506
|
||||
505 IF @(M)=0 GOTO 510
|
||||
506 PRINT"THAT SQUARE IS OCCUPIED.":GOTO 500
|
||||
510 G=1,@(M)=1
|
||||
520 GOSUB 1000
|
||||
530 GOTO 100
|
||||
1000 FOR I=1 TO 9:PRINT" ",:IF @(I)#-1 GOTO 1014
|
||||
1011 IF Q=1 PRINT "X ",
|
||||
1012 IF Q=0 PRINT "O ",
|
||||
1013 GOTO 1020
|
||||
1014 IF @(I)#0 GOTO 1016
|
||||
1015 PRINT" ",:GOTO 1020
|
||||
1016 IF P=1 PRINT "X ",
|
||||
1017 IF P=0 PRINT "O ",
|
||||
1020 IF (I#3)*(I#6) GOTO 1050
|
||||
1030 PRINT"":PRINT"---+---+---"
|
||||
1040 GOTO 1080
|
||||
1050 IF I=9 GOTO 1080
|
||||
1060 PRINT"!",
|
||||
1080 NEXT I:PRINT
|
||||
1095 FOR I=1 TO 7 STEP 3
|
||||
1100 IF @(I)#@(I+1) GOTO 1115
|
||||
1105 IF @(I)#@(I+2) GOTO 1115
|
||||
1110 IF @(I)=-1 GOTO 1350
|
||||
1112 IF @(I)=1 GOTO 1200
|
||||
1115 NEXT I:FOR I=1 TO 3:IF @(I)#@(I+3) GOTO 1150
|
||||
1130 IF @(I)#@(I+6) GOTO 1150
|
||||
1135 IF @(I)=-1 GOTO 1350
|
||||
1137 IF @(I)=1 GOTO 1200
|
||||
1150 NEXT I:FOR I=1 TO 9:IF @(I)=0 GOTO 1155
|
||||
1152 NEXT I:GOTO 1400
|
||||
1155 IF @(5)#G GOTO 1170
|
||||
1160 IF (@(1)=G)*(@(9)=G) GOTO 1180
|
||||
1165 IF (@(3)=G)*(@(7)=G) GOTO 1180
|
||||
1170 RETURN
|
||||
1180 IF G=-1 GOTO 1350
|
||||
1200 PRINT"YOU BEAT ME!! GOOD GAME.":GOTO 2000
|
||||
1350 PRINT"I WIN, TURKEY!!!":GOTO 2000
|
||||
1400 PRINT"IT'S A DRAW. THANK YOU."
|
||||
2000 END
|
||||
48
Source/TastyBasic/examples/bitsum.asm
Normal file
48
Source/TastyBasic/examples/bitsum.asm
Normal file
@@ -0,0 +1,48 @@
|
||||
; -----------------------------------------------------------------------------
|
||||
; Copyright 2021 Dimitri Theulings
|
||||
;
|
||||
; This file is part of Tasty Basic.
|
||||
;
|
||||
; Tasty Basic is free software: you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation, either version 3 of the License, or
|
||||
; (at your option) any later version.
|
||||
;
|
||||
; Tasty Basic is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with Tasty Basic. If not, see <https://www.gnu.org/licenses/>.
|
||||
; -----------------------------------------------------------------------------
|
||||
; Tasty Basic is derived from earlier works by Li-Chen Wang, Peter Rauskolb,
|
||||
; and Doug Gabbard. Refer to the source code repository for details
|
||||
; <https://github.com/dimitrit/tastybasic/>.
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
#IFDEF CPM
|
||||
.ORG $0C00 ; ie. 3072 dec
|
||||
#ELSE
|
||||
.ORG $1400 ; ie. 5120 dec
|
||||
#ENDIF
|
||||
|
||||
LD B,0
|
||||
LD A,D
|
||||
CALL COUNT
|
||||
LD A,E
|
||||
CALL COUNT
|
||||
LD E,B
|
||||
LD D,0
|
||||
RET
|
||||
COUNT:
|
||||
OR A
|
||||
RET Z
|
||||
BIT 0,A
|
||||
JR Z,NEXT
|
||||
INC B
|
||||
NEXT:
|
||||
SRL A
|
||||
JR COUNT
|
||||
|
||||
.END
|
||||
BIN
Source/TastyBasic/examples/bitsum.tba
Normal file
BIN
Source/TastyBasic/examples/bitsum.tba
Normal file
Binary file not shown.
BIN
Source/TastyBasic/examples/tictac.tba
Normal file
BIN
Source/TastyBasic/examples/tictac.tba
Normal file
Binary file not shown.
Reference in New Issue
Block a user