TS1000 Basic has no data statement...

Any discussions related to the creation of new hardware or software for the ZX80 or ZX81
User avatar
GReW
Posts: 3
Joined: Tue Jan 17, 2017 6:45 pm

Re: TS1000 Basic has no data statement...

Post by GReW »

Another method that is useful in some cases: store the numbers directly in a string and use VAL to parse it into an array.

For example in the Checkers program you linked to, you could initialise the S() array using:

Code: Select all

120 DIM S(8,8)
122 LET N=1
124 FOR X=1 TO 8
126 FOR Y=1 TO 8
128 LET J=VAL " 1 0 1 0 0 0-1 0 0 1 0 0 0-1 0-115"(N TO N+1)
130 LET N=N+2
132 IF J=15 THEN GOTO 180
160 LET S(X,Y)=J
165 GOTO 200
180 LET N=1
185 GOTO 128
200 NEXT Y
205 NEXT X
Note the need for a leading space for positive numbers less than 10, and that ZX81 arrays start at one, not zero.
Comp.Sys.Sinclair Crap Games Competition 2017 https://csscgc2017.000webhostapp.com
Everyone has a crap game inside them, let yours out!
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: TS1000 Basic has no data statement...

Post by XavSnap »

Well done GReW,

It work with the PRINT function too...

Code: Select all

100 LET N=1
120 PRINT" THIS  IS   A  DEMO USINGDATAS"(N TO N+4)
130 LET N=N+5
132 IF N<>6*5 THEN GOTO 120
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: TS1000 Basic has no data statement...

Post by XavSnap »

Paul wrote:Are you aware that extensions to basic also exist?
Read data restore etc are also part of powerbasic.
viewtopic.php?f=5&t=1054&p=10894&hilit= ... sic#p10894
The DATA command was include in the beta ZX81 rom, but this feature had to be erased to make room to put the ZX PRINTER driver (COPY and LPRINT) commands.
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: TS1000 Basic has no data statement...

Post by XavSnap »

Original program from TRS 80 MODEL1 BASIC II
CHECKERS game.
Emulator: HT1080Z ('PASTE FROM CLIPBOARD' OPTION)

Code: Select all

5 PRINTCHR$(30);:PRINT:PRINTTAB(32);"CHECKERS"
10 PRINTTAB(15);"CREATIVE COMPUTING MORRISTOUN, NEW JERSEY":PRINT:PRINT
20 PRINT"THIS IS THE GAME Of CHECKERS. THE COMPUTER IS X,"
25 PRINT"AND YOU ARE O. THE COMPUTER WILL MOVE FIRST."
30 PRINT"SQUARES ARE REFERRED TO BY A COORDINATE SYSTEM"
35 PRINT"(0,0) IS THE LOWER LEFT CORNER":PRINT"(0,7) IS THE UPPER LEFT CORNER"
45 PRINT"(7,0) IS THE LOVER RIGHT CORNER":PRINT"(7,7) IS THE UPPER RIGHT CORNER"
55 PRINT"THE COMPUTER WILL TYPE '+TO' WHEN YOU HAVE ANOTHER":PRINT"JUMP.  TYPE TWO NEGATIVE NUMBERS IF YOU CANNOT JUMP."
65 PRINT:DIM R(4),S(7,7):G=-1:R(0)=-99
90 DATA 1,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,-1,15
120 FORX=0TO7:FORY=0TO7:READJ:IFJ=15THEN180
160 S(X,Y)=J:GOTO200
180 RESTORE:READS(X,Y)
200 NEXTY,X
230 FORX=0TO7:FORY=0TO7:IFS(X,Y)>-1THEN350
310 IFS(X,Y)=-1THENFORA=-1TO1STEP2:B=G:GOSUB650:NEXTA
330 IFS(X,Y)=-2THENFORA=-1TO1STEP2:FORB=-1TO1STEP2:GOSUB650:NEXTB,A
350 NEXTY,X:GOTO1140
650 U=X+A:V=Y+B:IFU<0ORU>7ORV<0ORV>7THEN870
740 IFS(U,V)=0THENGOSUB910:GOTO870
770 IFS(U,V)<0THEN870
790 U=U+A:V=V+B:IFU<0ORV<0ORU>7ORV>7THEN870
850 IFS(U,V)=0THENGOSUB910
870 RETURN
910 IFV=0ANDS(X,Y)=-1THENQ=Q+2
920 IFABS(Y-V)=2THENQ=Q+5
960 IFY=7THENQ=Q-2
980 IFU=0ORU=7 THENQ=Q+1
1030 FORC=-1TO1STEP2:IFU+C<0ORU+C>7ORV+G<0THENGOTO 1080
1035 IFS(U+C,V+G)<0THENQ=Q+1:GOTO1080
1040 IFU-C<0ORU-C>7ORV-G>7THEN1080
1045 IFS(U+C,V+G)>0AND(S(U-C,V-G)=0OR(U-C=XANDV-G=Y))THENQ=Q-2
1080 NEXTC:IFQ>R(0)THENR(0)=Q:R(1)=X:R(2)=1:R(3)=U:R(4)=V
1100 Q=0:RETURN
1140 IF R(0)=-99 THEN1880
1230 PRINTCHR$(30)"FROM"R(1);R(2)"TO"R(3);R(4);:R(0)=-99
1240 IFR(4)=0THENS(R(3),R(4))=-2:GOTO1420
1250 S(R(3),R(4))=S(R(1),R(2))
1310 S(R(1),R(2))=0:IFABS(R(1)-R(3))<>2THEN1420
1330 S((R(1)+R(3))/2,(R(2)+R(4))/2)=0
1340 X=R(3):Y=R(4):IFS(X,Y)=-1THENB=-2:FORA=-2TO2STEP4:GOSUB1370
1350 IFS(X,Y)=-2THENFORA=-2TO2STEP4:FORB=-2TO2STEP4:GOSUB1370:NEXTB
1360 NEXTA:IFR(0)<>-99THENPRINT"TO"R(3);R(4);:R(0)=-99:GOTO1240
1365 GOTO1420
1370 U=X+A:V=Y+B:IFU<0ORU>7ORV<0ORV>7THEN1400
1380 IFS(U,V)=0ANDS(X+A/2,Y+B/2)>0THENGOSUB910
1400 RETURN
1420 PRINT:PRINT:PRINT:FORY=7TO0STEP-1:FORX=0TO7:I=5*X:PRINTTAB(I);
1430 IFS(X,Y)= 0THENPRINT".";
1470 IFS(X,Y)= 1THENPRINT"O";
1490 IFS(X,Y)=-1THENPRINT"X";
1510 IFS(X,Y)=-2THENPRINT"X*";
1530 IFS(X,Y)= 2THENPRINT"O*";
1550 NEXTX:PRINT" ":PRINT:NEXTY:PRINT
1552 FORL=0TO7
1554 FORN=0TO7
1556 IFS(L,N)=1ORS(L,N)=2THENZ=1
1558 IFS(L,N)=-1ORS(L,N)=-2THENT=1
1560 NEXTN
1562 NEXTL
1564 IF Z<>1 THEN1880
1566 IF T<>1 THEN1885
1570 T=0:Z=0
1590 INPUT"FROM";E,H:X=E:Y=H:IFS(X,Y)<=0THEN1590
1670 INPUT"TO";A,B:X=A:Y=B
1680 IFS(X,Y)=0ANDABS(A-E)<=2ANDABS(A-E)=ABS(B-H)THEN1700
1690 PRINTCHR$(7)CHR$(11);:GOTO1670
1700 I=46
1750 S(A,B)=S(E,H):S(E,H)=0:IFABS(E-A)<>2THEN1810
1800 S((E+A)/2,(H+B)/2)=0
1802 INPUT"+TO";A1,B1:IF A1<0 THEN1810
1804 IFS(A1,B1)<>0ORABS(A1-A)<>2ORABS(B1-B)<>2THEN1802
1806 E=A:H=B:A=A1:B=B1:I=I+15:GOTO1750
1810 IFB=7THENS(A,B)=2
1830 GOTO230
1880 PRINT:PRINT"I WIN.":END
1885 PRINT:PRINT"YOU WIN.":END
 
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
Post Reply