Sunday, December 15, 2019

Tandy PC-4: What Can You Do With 1,568 Bytes in Basic?

Tandy PC-4: What Can You Do With 1,568 Bytes in Basic?

On December 1, 2019, reviewed the Tandy Pocket Computer PC-4.  (link here:  http://edspi31415.blogspot.com/2019/12/retro-review-tandy-pc-4-pocket-computer.html ).  The PC-4 comes with 544 bytes, but with an OR-1 RAM card, the memory goes up to 1,568 bytes. 

How much can I fit in 1,568 bytes?  Here's an attempt. 

P0:  Factorial

10 PRINT "N!"
20 INPUT "N",N
25 F=0
30 FOR I=1 TO N
40 F= LOG(I)+F
50 NEXT I
60 E= INT(F)
70 R=10↑( FRAC(F))
80 PRINT N;"! ="
90 PRINT R;"*10↑";E

P1:  Quadratic Equation

100 PRINT "AX↑2+BX+C=0"
105 INPUT "A",A
110 INPUT "B",B
115 INPUT "C",C
120 D=B↑2-4*A*C
125 S=-B/(2*A)
130 T=SQR( ABS(D))/(2*A)
135 IF D<0 300="" font="" then="">
200 R=S-T
205 T=S+T
210 S=R
215 PRINT "X1 =";S
220 PRINT "X2 =";T
225 GOTO 400
300 PRINT "REAL: ";S
305 PRINT "IMAG: ";T
400 PRINT "AGAIN?"
405 INPUT "0 FOR NO ",R
410 IF R≠0 THEN 105
415 END

P2:  Horizontal Curve

10 MODE 4     (Degrees Mode)
15 INPUT "TAN. LNGTH",T    (tangent length)
20 INPUT "ANGLE",D
25 R=T/ TAN(D/2)
30 L=R*D*π/180
35 C=2*R* SIN(D/2)
40 PRINT "R =";R     (radius)
45 PRINT "L=";L     (arc length)
50 PRINT "C =";C    (chord length)
55 END

P3:  Amortizing a Monthly Loan (Annual Principal and Interest)

50 SET F2  (Fix 2)
100 INPUT "LOAN",L
105 INPUT "RATE",I
110 I=I/1200
115 INPUT "YEARS",T
120 N=12*T
125 U=(1-(1+I)↑(-N))/I
130 P= RND(L/U,-2)   (note the -2 in the round command)
135 PRINT "PMT: $";P
140 B=L
200 FOR Y=1 TO T
201 S=0
202 C=0
205 FOR K=1 TO 12
210 E= RND(B*I,-2)
215 S=S+E
220 A=P-E
225 C=C+A
230 B=B-A
235 NEXT K
240 PRINT "YEAR: ";Y
245 PRINT "INT= $";S
250 PRINT "PRN= $";C
255 PRINT "BAL= $";B
260 NEXT Y
270 PRINT "LAST= ";P+B   (last payment)
275 SET N   (floating decimal)
280 END

P4:  Linear Regression, Y=A+BX with correlation, R

100 VAC    (clear variables A-Z)
200 N=N+1   (N: counter)
205 PRINT "POINT ";N
210 PRINT "X",X
215 PRINT "Y",Y
220 C=C+X:F=F+X↑2
230 D=D+Y:G=G+Y↑2
240 E=E+X*Y
245 INPUT "DONE? NO=0 ",Z
250 IF Z=0 THEN 200
300 H = SQR((F-C↑2/N)/N)
305 I= SQR((G-D↑2/N)/N)
310 B=((N*E-C*D)/(N*F-C↑2))
315 A=(D-B*C)/N:R=B*H/I
325 PRINT "SLP=";B
330 PRINT "ITC=";A
335 PRINT "CORR=";R
340 END

P5:  Snell's Law

10 MODE 4      (degrees mode)
15 INPUT "N1",M    (index of refraction - 1st medium)
20 INPUT "INCIDENCE",T   (angle of incidence)
25 INPUT "N2",N     (index of refraction - 2nd medium)
30 H = ASN(M/N* SIN(T))
35 R= SIN(T-H)↑2/ SIN(T+H)↑2
40 R=1/2*R*100
50 PRINT "REFRACTION=";H;"°"
55 PRINT "REFLECT=";R;"%"
60 END

°  (degree character):  EXT mode, SHIFT C
% (percent character):  EXT mode, SHIFT Q

P6:  Rectangular/Polar Conversions

100 MODE 4
105 INPUT "1.P>R 2.R>P",C
110 IF C=1 THEN 200
115 IF C=2 THEN 300
120 GOTO 105
200 INPUT "RADIUS",R
205 INPUT "ANGLE,"T
210 X=R* COS(T)
215 Y=R* SIN(T)
220 PRINT "X=";X
225 PRINT "Y=";Y
230 GOTO 900
300 INPUT "X",X
305 INPUT "Y",Y
310 R= SQR(X↑2+Y↑2)
315 IF X>0 THEN 500
320 IF X<0 600="" font="" then="">
325 IF X=0 THEN 700
500 IF Y≥0 THEN T= ATN(Y/X)
505 IF Y<0 t="ATN(Y/X)+360</font" then="">
510 GOTO 800
600 IF Y≥0 THEN T= ATN(Y/ ABS(X))+180
605 IF Y<0 t="ATN(Y/X)+180</font" then="">
610 GOTO 800
700 IF Y>0 THEN T=90
705 IF Y=0 THEN T=0
710 IF Y<0 t="270</font" then="">
715 GOTO 800
800 PRINT "RADIUS=";R
805 PRINT "ANGLE=";T
900 PRINT "AGAIN (NO=0)",C
905 IF C≠0 THEN 105
910 END

P7:  Area and Circumference on a Circle

10 INPUT "R",R
25 PRINT "C=";2*π*R
35 PRINT "A=";π*R↑2

Remaining:  8 bytes

Eddie

All original content copyright, © 2011-2019.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.