This program is a software catalog and demonstration disk for JRC Software, distributed on cassette as shareware, combining a playable 3D Tic-Tac-Toe game with extensive commentary text, product listings, and a graphics demo.
The 3D Tic-Tac-Toe component implements a 3×3×3 board using a 27-element array A() and a 49-element scoring array B() that encodes every winning line across all three layers plus inter-layer diagonals. Cell selection is handled via STICK joystick input and O/P/Q/A keyboard navigation, with cursor position tracked using attribute memory POKEs at address 22528. The computer AI evaluates board positions through a heuristic scoring array C() summing line weights for each cell, then selects the highest-scoring available move.
The catalog section (line 3000 onward) contains extensive editorial text about the Sinclair, Timex, Commodore, Atari, and QL computers, dated February 16, 1986, and includes a SAVE command at line 8500 that preserves both the BASIC program and a machine code block to cassette.
Program Analysis
Program Structure
The program is organized into several distinct functional regions:
- Lines 1–171: 3D Tic-Tac-Toe game engine — initialization, AI scoring, move execution, and player input.
- Lines 300–475: Cursor movement subroutines (left/right/up/down) for joystick and keyboard navigation.
- Lines 1000–1200: Board drawing subroutine — PLOT/DRAW graphics for three board layers and cell coordinate table
T$. - Lines 2000–2130: End-of-game scoring and result display.
- Lines 3000–3900: Multi-screen editorial commentary and product catalog text.
- Lines 4000–5002: Shareware notice for 3D Tic-Tac-Toe and a graphics demo subroutine.
- Lines 8000–8500: Cassette duplication instructions and SAVE commands.
- Lines 9000–9900: Main menu and dispatcher.
3D Board Representation
The 3×3×3 board is stored in array A(27), with cells numbered 1–27 corresponding to positions across three 3×3 layers. Cells are initialized to 1 (available), set to 8 (computer move) or -4/-3 (player move) when claimed. The screen coordinates for each cell are stored in the 27×4 string array T$(27,4), where the first two characters are the row and the last two are the column, read back with VAL T$(F,1 TO 2) and VAL T$(F,3 TO 4).
Winning-Line Encoding
Array B(49) holds the product of the A() values for each of the 49 possible winning lines across the 3D board. These include rows, columns, and diagonals within each layer (lines B1–B24), vertical columns through all three layers (B25–B28), and various 3D space diagonals (B29–B49). Because each cell starts at value 1, an unclaimed winning line yields a product of 1. When a cell is marked with a non-unit value, the product changes, encoding both occupancy and ownership in the arithmetic.
AI Heuristic Scoring
Array C(27) assigns each cell a strategic score by summing the B() values of every winning line that passes through it. This is recalculated from scratch on each turn (lines 25–108). The computer then selects the cell with the maximum C(F) value where A(F)=1 (lines 122–124 or 130–135). When the human moves first (JEU=1), the code also tracks the minimum-score cell in KK, though this variable is not ultimately used for a different strategy — the same greedy maximum selection applies.
Cursor and Attribute Manipulation
The player’s cursor is highlighted by toggling the bright bit in the color attribute byte at address 22528 + (row-1)*32 + col. Adding 128 to the attribute sets the flash/bright bit; subtracting 128 clears it. The four movement subroutines (300, 350, 400, 450) update X (row) and Y (column), clear the old cursor highlight, and set the new one. Boundary checking prevents the cursor from leaving the screen area (rows 1–20, columns 1–30).
Input Handling
Line 151 reads both keyboard and joystick simultaneously. STICK(1,1) and STICK(2,1) are combined with joy = STICK(1,1) + 16*STICK(2,1). Keyboard codes are compared using CODE INKEY$ against CODE "O", CODE "P", etc., supporting both upper and lower case. Fire/confirm is detected by joystick value 16 or the M/m key.
Cell Placement Detection
When the player presses the confirm key, lines 157–160 scan all 27 cells to find which cell’s screen coordinate matches the current cursor position (X, Y). The check at line 158 tests whether the cell’s column coordinate equals Y, Y-1, or Y-2 (accommodating 3-character-wide tokens), and whether the row matches X-1. This off-by-one adjustment reflects that X tracks the 1-based screen row of the cursor highlight, while T$(F,1 TO 2) stores the 0-based PRINT AT row.
Notable Techniques and Idioms
TIC=1is used as a flag so that theGO SUB 25at line 2004 returns early after recalculating B() without running the full game loop — a re-entry guard embedded in the scoring routine viaIF TIC=1 THEN RETURNat line 79.- The double-plus in line 83 (
B(2)+B(4)++B(41)+B(45)) is a typographic artifact that evaluates correctly in BASIC as a positive unary operator onB(41). - UDGs
\a\b\c(characters 144–146) are used at lines 1070–1080 to print each board cell symbol — their shapes would be defined by POKEs toUSR "\a"elsewhere in the full tape load, but no such POKE appears in this listing, suggesting the UDG shapes are set by the machine code block loaded at line 9000. - Escape
\d\e\gand\hat lines 142/145/166/168 are additional UDG characters used to render the X and O markers in the game. - The
SAVEat line 8500 saves both the BASIC program with auto-start (LINE 9000) and a raw machine code block starting at address 57919, used byRANDOMIZE USR 61632at line 9400 to run the Diamond Mike game. - Lines 3000–3900 contain a lengthy, opinionated historical commentary about the home computer industry dated February 16, 1986, discussing the ZX80, ZX81, TS1000, TS2068, Sinclair QL, Commodore 64, Atari ST, and Commodore Amiga — an unusual inclusion within an executable program file.
Anomalies
| Line | Issue |
|---|---|
| 83 | Double unary plus ++B(41) — harmless but appears to be a typo. |
| 104 | C(23)=B(18)+B(20)+B(23)+B(24)+B(49) uses B(20) again, same as line 103 — likely a copy-paste error; should probably be B(21) by symmetry with surrounding lines. |
| 7000 | Line 9800 branches to GO TO 7000 for the “copy to cassette” option, but line 7000 does not exist in this listing — execution would halt with an error unless the full tape includes it. |
| 1067 | A$="\a\b\c" reuses variable name A$ which is also used in the menu and catalog sections, creating potential conflicts if execution paths overlap. |
Content
Source Code
1 OUT 245,14: OUT 246,255: OVER 0: INK 0: PAPER 7: CLS : PRINT AT 21,0;"****TIC*******TAC*******TOE****"
4 LET TOT=0: LET TOO=0
5 GO SUB 1000
6 LET TIC=0
7 LET PL=1: LET OR=1
8 LET TO=15: LET TP=16
9 LET X=10: LET Y=12: LET S=0
10 DIM A(27): DIM B(49): DIM C(27): FOR F=1 TO 27: LET A(F)=1: NEXT F
12 LET M=X: LET N=Y
15 LET JEU=1
20 INPUT "DO YOU BEGIN (Y OR N) ";R$: PRINT #1;"O, P, Q, A, m","or joystick": IF R$="Y" OR R$="y" THEN GO TO 148
22 LET TO=16: LET TP=15
23 LET JEU=0
25 LET B(1)=A(1)*A(2)*A(3)
26 LET B(2)=A(4)*A(5)*A(6)
27 LET B(3)=A(7)*A(8)*A(9)
28 LET B(4)=A(1)*A(4)*A(7)
29 LET B(5)=A(2)*A(5)*A(8)
30 LET B(6)=A(3)*A(6)*A(9)
31 LET B(7)=A(1)*A(5)*A(9)
32 LET B(8)=A(3)*A(5)*A(7)
33 LET B(9)=A(10)*A(11)*A(12)
34 LET B(10)=A(13)*A(14)*A(15)
35 LET B(11)=A(16)*A(17)*A(18)
36 LET B(12)=A(10)*A(13)*A(16)
37 LET B(13)=A(11)*A(14)*A(17)
38 LET B(14)=A(12)*A(15)*A(18)
39 LET B(15)=A(10)*A(14)*A(18)
40 LET B(16)=A(12)*A(14)*A(16)
41 LET B(17)=A(19)*A(20)*A(21)
42 LET B(18)=A(22)*A(23)*A(24)
43 LET B(19)=A(25)*A(26)*A(27)
44 LET B(20)=A(19)*A(22)*A(25)
45 LET B(21)=A(20)*A(23)*A(26)
46 LET B(22)=A(21)*A(24)*A(27)
47 LET B(23)=A(19)*A(23)*A(27)
48 LET B(24)=A(21)*A(23)*A(25)
50 LET B(25)=A(1)*A(10)*A(19)
51 LET B(26)=A(7)*A(16)*A(25)
52 LET B(27)=A(9)*A(18)*A(27)
53 LET B(28)=A(3)*A(12)*A(21)
55 LET B(29)=A(1)*A(13)*A(23)
56 LET B(30)=A(7)*A(17)*A(27)
57 LET B(31)=A(9)*A(15)*A(21)
58 LET B(32)=A(3)*A(11)*A(20)
60 LET B(33)=A(1)*A(10)*A(21)
61 LET B(34)=A(7)*A(13)*A(19)
62 LET B(35)=A(9)*A(17)*A(25)
63 LET B(36)=A(3)*A(15)*A(27)
65 LET B(37)=A(1)*A(14)*A(27)
66 LET B(38)=A(7)*A(14)*A(21)
67 LET B(39)=A(9)*A(14)*A(19)
68 LET B(40)=A(3)*A(14)*A(25)
70 LET B(41)=A(4)*A(13)*A(22)
71 LET B(42)=A(8)*A(17)*A(26)
72 LET B(43)=A(6)*A(15)*A(24)
73 LET B(44)=A(2)*A(11)*A(20)
75 LET B(45)=A(4)*A(14)*A(24)
76 LET B(46)=A(8)*A(14)*A(20)
77 LET B(47)=A(6)*A(14)*A(22)
78 LET B(48)=A(2)*A(14)*A(26)
79 LET B(49)=A(5)*A(14)*A(23): IF TIC=1 THEN RETURN
80 LET C(1)=B(1)+B(4)+B(7)+B(25)+B(29)+B(33)+B(37)
81 LET C(2)=B(2)+B(5)+B(44)+B(48)
82 LET C(3)=B(1)+B(6)+B(8)+B(28)+B(32)+B(36)+B(40)
83 LET C(4)=B(2)+B(4)++B(41)+B(45)
84 LET C(5)=B(49)+B(2)+B(5)+B(7)+B(8)
85 LET C(6)=B(2)+B(6)+B(43)+B(47)
86 LET C(7)=B(3)+B(4)+B(8)+B(26)+B(34)+B(38)+B(30)
87 LET C(8)=B(3)+B(5)+B(42)+B(46)
88 LET C(9)=B(3)+B(6)+B(7)+B(27)+B(35)+B(39)+B(31)
90 LET C(10)=B(9)+B(12)+B(15)+B(25)
91 LET C(11)=B(13)+B(9)+B(44)+B(32)+B(33)
92 LET C(12)=B(9)+B(14)+B(16)+B(28)
93 LET C(13)=B(10)+B(12)+B(29)+B(34)+B(41)
94 LET C(14)=B(10)+B(13)+B(15)+B(16)+B(37)+B(38)+B(39)+B(40)+B(45)+B(46)+B(47)+B(48)+B(49)
95 LET C(15)=B(10)+B(14)+B(31)+B(36)+B(43)
96 LET C(16)=B(11)+B(12)+B(16)+B(26)
97 LET C(17)=B(11)+B(13)+B(30)+B(35)+B(42)
98 LET C(18)=B(11)+B(14)+B(15)+B(27)
100 LET C(19)=B(17)+B(20)+B(23)+B(25)+B(32)+B(34)+B(39)
101 LET C(20)=B(17)+B(21)+B(44)+B(46)
102 LET C(21)=B(17)+B(22)+B(24)+B(28)+B(31)+B(33)+B(38)
103 LET C(22)=B(18)+B(20)+B(41)+B(47)
104 LET C(23)=B(18)+B(20)+B(23)+B(24)+B(49)
105 LET C(24)=B(18)+B(22)+B(43)+B(45)
106 LET C(25)=B(19)+B(20)+B(24)+B(26)+B(29)+B(35)+B(40)
107 LET C(26)=B(19)+B(22)+B(42)+B(48)
108 LET C(27)=B(19)+B(22)+B(23)+B(27)+B(30)+B(36)+B(37)
109 IF JEU=1 THEN GO TO 130
110 LET OR=OR+1: IF OR=TO THEN GO TO 2000
111 LET T=-999
122 FOR F=1 TO 27
123 IF C(F)>T AND A(F)=1 THEN LET T=C(F): LET K=F
124 NEXT F
125 GO TO 145
130 LET T=-999
131 LET TT=999: LET K=1: LET KK=1: LET SP=0
132 FOR F=1 TO 27
133 IF C(F)>T AND A(F)=1 THEN LET T=C(F): LET K=F
134 IF C(F)<TT AND A(F)=1 THEN LET TT=C(F): LET KK=F
135 NEXT F
142 LET A(K)=8: PRINT AT VAL T$(K,1 TO 2),VAL T$(K,3 TO 4); INK 1;"\d\e\g": IF VAL T$(K,1 TO 2)>7 AND VAL T$(K,3 TO 4)=13 THEN PRINT AT VAL T$(K,1 TO 2),VAL T$(K,3 TO 4)+1; OVER 1; INK 1; PAPER 0;"\h": GO TO 148
145 LET A(K)=8: PRINT AT VAL T$(K,1 TO 2),VAL T$(K,3 TO 4); INK 1;"\d\e\g": IF VAL T$(K,1 TO 2)>7 AND VAL T$(K,3 TO 4)=13 THEN PRINT AT VAL T$(K,1 TO 2),VAL T$(K,3 TO 4)+1; OVER 1; INK 1; PAPER 0;"\h"
148 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))-128
149 BEEP .01,1: BEEP .01,-3: BEEP .01,1: BEEP .01,-2
150 LET PL=PL+1: IF PL=TP THEN GO TO 2000
151 LET key=CODE INKEY$: LET joy= STICK (1,1)+16* STICK (2,1): IF joy=4 OR key=CODE "O" OR key=CODE "o" THEN GO SUB 300
152 IF joy=8 OR key=CODE "p" OR key=CODE "P" THEN GO SUB 350
153 IF joy=1 OR key=CODE "Q" OR key=CODE "q" THEN GO SUB 400
154 IF joy=2 OR key=CODE "a" OR key=CODE "A" THEN GO SUB 450
155 IF joy<>16 AND key<>CODE "M" AND key<>CODE "m" THEN GO TO 151
156 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))-128
157 FOR F=1 TO 27
158 IF VAL T$(F,3 TO 4)=Y OR VAL T$(F,3 TO 4)+1=Y OR VAL T$(F,3 TO 4)+2=Y THEN IF VAL T$(F,1 TO 2)=X-1 THEN IF A(F)=1 THEN GO TO 165
159 NEXT F
160 GO TO 148
162 BEEP .02,10: BEEP .02,7
165 LET A(F)=-4
166 PRINT AT VAL T$(F,1 TO 2),VAL T$(F,3 TO 4); INK 6;"\d\e\g"
167 IF JEU=1 THEN LET A(F)=-3
168 IF VAL T$(F,1 TO 2)>7 AND VAL T$(F,3 TO 4)=13 THEN PRINT AT VAL T$(F,1 TO 2),VAL T$(F,3 TO 4)+1; OVER 1; INK 6; PAPER 0;"\h"
169 IF JEU=1 AND PL=15 THEN GO TO 2000
170 BEEP .02,10: BEEP .02,17
171 GO TO 25
300 LET Y=Y-1
305 IF Y=0 THEN LET Y=1: RETURN
310 POKE 22528+((M-1)*32)+N,(PEEK (22528+((M-1)*32)+N))-128
311 LET M=X: LET N=Y
315 LET Z$=SCREEN$ (M,N)
320 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))+128
325 RETURN
350 LET Y=Y+1
355 IF Y=31 THEN LET Y=30: RETURN
360 POKE 22528+((M-1)*32)+N,(PEEK (22528+((M-1)*32)+N))-128
362 LET M=X: LET N=Y
365 LET Z$=SCREEN$ (M,N)
370 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))+128
380 RETURN
400 LET X=X-1
405 IF X=0 THEN LET X=1: RETURN
410 POKE 22528+((M-1)*32)+N,(PEEK (22528+((M-1)*32)+N))-128
412 LET M=X: LET N=Y
415 LET Z$=SCREEN$ (M,N)
420 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))+128
425 RETURN
450 LET X=X+1
455 IF X=21 THEN LET X=20: RETURN
460 POKE 22528+((M-1)*32)+N,(PEEK (22528+((M-1)*32)+N))-128
462 LET M=X: LET N=Y
465 LET Z$=SCREEN$ (M,N)
470 POKE 22528+((X-1)*32)+Y,(PEEK (22528+((X-1)*32)+Y))+128
475 RETURN
1000 PLOT 8,147: DRAW 111,-25: DRAW 105,25: DRAW -108,25: DRAW -108,-25
1005 PLOT 8,90: DRAW 111,-25: DRAW 105,25: DRAW -108,25: DRAW -108,-25
1010 PLOT 8,34: DRAW 111,-25: DRAW 105,25: DRAW -108,25: DRAW -108,-25
1067 LET A$="\a\b\c"
1070 PRINT AT 1,13;A$;AT 2,9;A$;AT 2,17;A$;AT 3,5;A$;AT 3,21;A$;AT 3,13;A$;AT 4,9;A$;AT 4,17;A$;AT 5,13;A$
1075 PRINT AT 8,13;A$;AT 9,9;A$;AT 9,17;A$;AT 10,5;A$;AT 10,21;A$;AT 10,13;A$;AT 11,9;A$;AT 11,17;A$;AT 12,13;A$
1080 PRINT AT 15,13;A$;AT 16,9;A$;AT 16,17;A$;AT 17,5;A$;AT 17,21;A$;AT 17,13;A$;AT 18,9;A$;AT 18,17;A$;AT 19,13;A$
1085 PLOT 8,147: DRAW 0,-113:
1086 PLOT 224,147: DRAW 0,-113
1087 PLOT 119,122: DRAW 0,-112
1088 PLOT 116,123: DRAW 0,-8
1089 PLOT 116,65: DRAW 0,-6
1090 PLOT 116,167: DRAW 0,-7
1091 PLOT 116,151: DRAW 0,-7
1092 PLOT 116,135: DRAW 0,-7
1093 PLOT 116,111: DRAW 0,-7
1094 PLOT 116,95: DRAW 0,-7
1095 PLOT 116,79: DRAW 0,-7
1100 DIM T$(27,4)
1101 LET T$(1)="0513"
1102 LET T$(2)="0417"
1103 LET T$(3)="0321"
1104 LET T$(4)="0409"
1105 LET T$(5)="0313"
1106 LET T$(6)="0217"
1107 LET T$(7)="0305"
1108 LET T$(8)="0209"
1109 LET T$(9)="0113"
1110 LET T$(10)="1213"
1111 LET T$(11)="1117"
1112 LET T$(12)="1021"
1113 LET T$(13)="1109"
1114 LET T$(14)="1013"
1115 LET T$(15)="0917"
1116 LET T$(16)="1005"
1117 LET T$(17)="0909"
1118 LET T$(18)="0813"
1119 LET T$(19)="1913"
1120 LET T$(20)="1817"
1121 LET T$(21)="1721"
1122 LET T$(22)="1809"
1123 LET T$(23)="1713"
1124 LET T$(24)="1617"
1125 LET T$(25)="1705"
1126 LET T$(26)="1609"
1127 LET T$(27)="1513"
1200 RETURN
2000 PRINT AT 21,0;" "
2004 LET TIC=1: GO SUB 25
2006 PRINT AT 8,25;"TS-2068"
2007 PRINT AT 5,25;"PLAYER"
2008 IF JEU=1 THEN GO TO 2100
2010 FOR F=1 TO 49
2020 IF B(F)=-64 THEN LET TOT=TOT+1: PRINT AT 6,27;" ";TOT;" "
2025 IF B(F)=512 THEN LET TOO=TOO+1: PRINT AT 9,27;" ";TOO;" "
2027 PAUSE 5
2030 NEXT F
2035 PRINT AT 21,0;" "
2040 IF TOT=TOO THEN PRINT AT 21,7;"SAME SCORE"
2045 IF TOT>TOO THEN PRINT AT 21,5;"YOU WON "
2050 IF TOT<TOO THEN PRINT AT 21,4;"COMPUTER WON THE GAME "
2097 PRINT AT 13,25;"PRESS";AT 14,25;" A";AT 15,25;" KEY."
2098 PAUSE 0
2099 GO TO 9100
2100 FOR F=1 TO 49
2105 PAUSE 5
2110 IF B(F)=-27 THEN LET TOT=TOT+1: PRINT AT 6,27;" ";TOT;" "
2115 IF B(F)=512 THEN LET TOO=TOO+1: PRINT AT 9,27;" ";TOO;" "
2120 NEXT F
2130 GO TO 2035
3000 PAPER 7: INK 0: CLS : PRINT "PLEASE READ:";#1;"Commentary by John R. Coffey": PAUSE 100: CLS : PRINT "Welcome to the third and last edition of JRC SOFTWARE catalog for the 2068 computer. We call this our ""reality"" edition, because it is now time to face some hard facts."''
3010 PRINT "Sinclair Research LTD has made some pretty great computers. Weall marveled at the power and portability of the ZX80 that wasthe first computer under $200 released in late 1980. Then SYNC magazine started in Januaryof 1981 just for the ZX80 computer. It was possibly the first time that a magazine had started for just a single brand.The future couldn't have looked better for Sinclair computers."''
3020 PRINT '': CLS : PRINT "Keep in mind that in 1980 $200 was worth over twice of what it is worth now. So even at the price of $200, the Sinclair ZX80was a very expensive purchase. But as inflation went up, the price went down and the computergot much better. Behold ZX81."''
3030 PRINT "Again the future seemed good."''
3040 PRINT "In those days the people who bought computers didn't care toomuch about the quality of the graphics, or how much memory themachine had, or how fast it was.They simply wanted to own a computer. Any computer."''
3050 PRINT '''': CLS : PRINT "Almost everybody who wanted to buy a computer and could afford to do so, did so. Which machinepeople bought depended upon how much money they had. Since there was a world wide recessiongoing on then, Sinclair afford- ability was very appealing."''
3060 PRINT "Even though the ZX81 was a good machine for it's time, it was very primitive compared to the Atari 400/800 or the Commodore 64. So when Sinclair announced their Spectrum computer in 1982,I was thrilled. This ""ZX82"" hadfeatures competitive with the other computers at a lower cost."
3065::: PRINT '"The low price of the Sinclair ZX81 forced other manufacturers to lower their prices."
3070 PRINT '': CLS : PRINT "There were early reports that the ZX Spectrum would come to the U.S. in January of 1983. This would have been fine. But instead Timex took over and did a very good job of making a million TS1000's in 1983. At $100 apiece, they sold well, butthere wasn't a million people who wanted to buy a low power computer. So Timex had to drop the price all the way to $25 andthey lost money."''
3080 PRINT "These low priced TS1000's becameknown as ""toys"" or ""disposable computers"". Mostly kids bought them, played with them, and thenput them on the closet shelf."
3090 PRINT '''''': CLS : PRINT "Timex also had a habit of using cheap components and using cheapPortugal labor. This may have kept the price down, but the average life of a TS1000 was about a year before it needed repair. It was, of course, moreexpensive to repair the things than to buy new ones."''
3100 PRINT "All during 1983 Timex tried to redesign the Sinclair Spectrim to their own liking. They failed to make the Christmas market with the TS2068 and quit the computer business altogetherin Feburary of 1984. Had they produced the original Sinclair Spectrum a year earlier, they would have made very good money."'''': CLS : PRINT "Rather than delaying a year, it makes more sense for a company to produce a computer before coming out with the improved version a year later. "
3110 PRINT '"The 2068 sold initially for only$200. But the Commodore 64 was only $100 higher, and even though one could argue over which is the better machine, those of us who bought the 2068 ended up wishing we had bought the Commodore 64 due to the tremendous software and hardwaresupport for that machine."''
3120 PRINT "Some people tried hard to remainloyal to Sinclair and support their machines. I was one of them. But for me this effort was a waste of my talents."
3125 PRINT ': CLS : PRINT "Very few people bought my programs. There weren't enough user groups out there to bring enough people togethor to form adecent software market. Had I written some of my programs for other machines, I would have made good money."
3130 PRINT '"I had to ask myself recently whyI was still supporting a companyover two years after it had given up on me? (As a customer.)"''
3140 PRINT "I had mistakenly believed that Sinclair Research LTD would cometo the rescue of the American computer market. I was encouraged by early announcementof the QL computer. But Sinclair had almost as much financial problems as I did. "'': CLS : PRINT "The QL became stalled just like the 2068 did."
3150 PRINT '"The QL is a very nice computer, but like the 2068, it is almost stillborn. Too little too late.Sinclair has already anounced their new ""Enigma"" which is suppose to compete with the Atari ST and Commodore Amiga. Sinclair has announced a releasedate of May 1986."
3160 PRINT '"Enough is enough. Sinclair is never again going to sell millions of computers. Everyonewho wanted a computer now owns one. Department stores have taken away the computer sectionsand started selling VCR's. The only computers that are selling now are the higher priced modelsthat can deliver preformance andsupport. People want to know ""what can I do with it"" and thatis where the future of computingis and will remain for awhile."
3170 INPUT "Press enter to continue";a$
3180 CLS
3190 DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3200 PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3210 PRINT AT 11,3;"Where do we go from here?"
3220 INPUT "Press enter to find out";a$
3230 PRINT AT 11,3;" "; OVER 1;AT 3,0;" First of all, I will be very happy to sell you my 2068 products and will try to induce you herein to purchase them. "
3240 PRINT AT 9,0; OVER 1; " But you may wish to obtain another computer, in which case I would be pleased to sell you a QL, knowing that it is a great way to learn about 32 bit computers. There is real good software that comes with the QL and I can instruct you on where to get additional software support."
3250 INPUT "But I must tell you...";a$
3255: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3260: PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3270 PRINT AT 3,0; OVER 1; " But I must tell you that I as a serious software author am not going to program for the QL. I say this because I want to be honest with my customers. I do hope you are one of my customers."''
3280 PRINT OVER 1; " Commodore, Atari, and Apple are the champions of the American computer market. But Atari and Commodore are proably going to bury Apple with their new machines."''
3290 PRINT OVER 1; " So which machine will be the computer of the future, the Atari ST, or the Commodore?"
3295 INPUT "Press ENTER to find out";a$
3300: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3310: PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3320 PRINT AT 3,0; OVER 1; " Amiga ST Costs more 50% less Better Great Graphics. Graphics. 256k 512-1024k Amiga's interlacing mode flickers. Atari has a better reputation."
3340 INPUT "Press ENTER please ...";a$
3341: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3342: PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3350 PRINT AT 7,0; OVER 1; " In short I am purchasing for myself a 520 ST because I trust the company Atari to deliver a low cost super- computer to the American market. Atari plans to have several versions we will eventually see models from under $500 to $1000."
3360 PRINT AT 0,0;: INPUT a$;'"I am purchasing my Atari ST fromBlack Patch Systems 1-800-atari-02 because they not only gave me the best price, good service, but they were also willing to ship COD which is important if you are going to send hundreds of dollars in the mail.";'a$
3363 INPUT "It may be of interest to you that I will be adapting my Diamond Mike game to the ST as well as creating an original chess program";a$
3365 INPUT "This may seem like a very unusual catalog. Not only does it come on cassette, but it seems to promote an entirely different computer...........";a$
3366 INPUT "The purpose of this catalog is not to sell you on Atari, but tosell you 2068 software and possibly a Sinclair QL .....";a$: INPUT "Not everyone has outgrown their 2068. I don't think that there is a more fun to use programmable 8-bit computer.";a$
3367 INPUT "And not everyone wants to spend $1000 on a computer system. Perhaps it is possible to get some of the features of more expensive machines on the QL. Indeed! The QL has a powerful processor and custom chips.";a$
3368 CLS : PRINT "QL","vs ST"''"128k RAM","512k RAM","68008 processor","68000 processor","7.5 Mhz","8.0 Mhz","48k ROM","192k ROM","QL DOS","TOS and GEM","joystick ports","ports with mouse16k cartridges","128k cartridges","Two microdrives","3.5 inch drive","32k video","32k video","8 colors","16 out of 512","uses TV","RGB Monitor","$299","$763"
3369 INPUT "Please press ENTER";a$: GO TO 9100
3370: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3375: PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3380 PRINT AT 7,0; OVER 1; " For a comprehensive review of the QL, see my second tape catalog, available for just $2. The catalog features a fantastic three dimensional moving display on your 2068 screen. This tape is a MUST HAVE!"
3385 INPUT a$: INPUT "The amazing QL is only $299, andif you order with a Money-Order,then you can have your choice ofQL CAVERN or QL CHESS free, as well as your choice of DIAMOND MIKE or GREAT GAME and GRAPHICS SHOW for the 2068 free.";a$
3390 CLS : PLOT 128,0: DRAW 64,0: DRAW 63,63,PI/2: DRAW 0,64-24: DRAW -63,63,PI/2: DRAW -64,0:
3400: DRAW -64,0: DRAW -63,-63,PI/2: DRAW 0,-64+24: DRAW 63,-63,PI/2: DRAW 64,0:
3410 PRINT AT 5,0; OVER 1; " The Sinclair Pocket TV beats the competition hands down! Those other TV's that cost more use hard to see LCD displays. (For one thing, you can't view them in the dark, or even dim light.) But the Sinclair Flatscreen TV is a true CRT and special Sinclair chips give good reception anywhere."
3420 COPY : INPUT "only $99";a$
3430: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3450: PLOT 128,0: DRAW 64,0: DRAW 63,63,PI/2: DRAW 0,64-24: DRAW -63,63,PI/2: DRAW -64,0:
3460: DRAW -64,0: DRAW -63,-63,PI/2: DRAW 0,-64+24: DRAW 63,-63,PI/2: DRAW 64,0:
3480 INPUT a$';"COMPASS compiler-assembler givesyou the power to assemble z80 machine code and compile easy touse BASIC that will execute 100 times faster! Includes 19 pagesof instructions! Only $19.95!"'a$
3490: CLS : DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175
3500: PLOT 5,5: DRAW 240,0: DRAW 0,160: DRAW -240,0: DRAW 0,-160
3510 PRINT AT 3,0; OVER 1; " Catalog #1 comes free with the game Diamond Mike"'' " Catalog #2 with the QL info, and the fantastic 3D display is just $2."'' " Catalog #3, this one, is also available for just $2."''" Diamond Mike","$17.95 (`12.95)"," GGG Show","$17.95 (`12.95)"," COMPASS","$19.95 (`14.95)"," Pocket TV","$99"," Sinclair QL","$299"," All prices include shipping."
3600 COPY : INPUT "Please press ENTER";A$:
3700 FOR L=3 TO 18: PRINT AT L,2;" ";: NEXT L
3800 PRINT AT 7,0; OVER 1; " Order from"'' " JRC Software PO Box 448 Scottsburg, IN 47170"'' " Phone 812-752-6071"
3810 COPY : INPUT "Please press ENTER";A$:
3820 FOR L=3 TO 18: PRINT AT L,2;" ";: NEXT L
3830 PRINT AT 3,0; OVER 1; " As of this date, 2-16-1986, the best magazine for your TS1000 or TS2068 is"''" Time Designs Magazine"'' " 36 pages of national Timex- Sinclair coverage. Published 'On Time' six issues each year. Interesting articles and information are to be be found in every issue with up to date coverage. The TD also has an exclusive 'TS Shopper' guide. Subscribe today! $15/yr"
3840 PRINT OVER 1;" 29722 Hult Rd"'" Colton, Oregon 97017"
3900 COPY : INPUT "Please press ENTER";A$:: GO TO 9100
4000 INPUT "Included with this catalog is a high quality game program called3D TIC TAC TOE. This program isdistributed to you on a SHAREWARE basis, which means that we would like you to make copies of this program and give it to friends who have a 2068 computer. Please press ENTER.";a$
5000 INPUT "If you use, however, the program3D TIC TAC TOE then you should send $2 to the original author listed below. Please send two $1 bills for use of the program.No checks. Send to: Charles Goyette 835 Mercure Blvd Drummondville, QE J2B 3K9 CANADA No special postage required to send letters to Canada.";a$
5001 RUN
5002 INPUT "The Great Game and Graphics Show";"comes with this sofware:"'"1. Easy Editor (text editor)"'"2. Touch Type Teacher"'"3. HI-RES Lunar Lander"'"4. Games such as 'Dodge', 'Timy the Trash Compactor', and 'Easel'"'"5. The Great Grapics Show (includes oscilloscope)"'''''"choose!"''"1- long"'"0- short"'';c: LET Q=7/4: LET W=7/2:: DIM Y(15): CLS : PRINT #1;" from the GREAT GAME AND GRAPHICS SHOW": POKE 23659,2: FOR L=1 TO 15
5010 IF L<=7 THEN LET Y(L)=Q+(L-1)/2
5020 IF L=8 THEN LET Y(L)=Q+W
5030 IF L>=9 THEN LET Y(L)=W+(16-L)/4
5040 NEXT L
5070 FOR b=120 TO 0 STEP -8:
5080 REM LET Z=39*(c OR RND<.1)*(1+COS (2*PI*(B)/120))
5090 FOR A=120 TO 0 STEP -8
5100 LET Z=130*(ABS SGN c OR RND<.12)*((60-ABS (B-60))*(60-(ABS (A-60))))/3600
5110 LET X=B-A+128
5120 LET Y=B/2+A/4
5130 IF Z>.5 THEN FOR L=-7 TO 7: PLOT INVERSE 1;X+L,Y+Z+Y(L+8): DRAW INVERSE 1;0,-Z: NEXT L
5140 PLOT X,Y
5145 IF Z<.5 THEN DRAW -7,Q:::: DRAW 7,W:: DRAW 7,-Q: DRAW -7,-W:
5150 IF Z>.5 THEN DRAW -7,Q: DRAW 0,Z: DRAW 7,-Q: DRAW 0,-Z: DRAW 7,W: DRAW 0,Z: DRAW -7,Q: DRAW -7,-W: PLOT X,Y+Z: DRAW 7,W
5160 NEXT A: NEXT B
5170 INPUT "Please press ENTER";a$: RETURN
6000 RUN
8000 CLS : PRINT "Help!"''"There are tens of thousands of"'"people who have 2068 computers, but have no idea where to get software support. But you can help! By giving copies of this catalog to everyone you know whohas a 2068 or Spectrum computer."
8100 PRINT '"Insert a good quality cassette into your recorder and push the record button. Be sure that thecable runs from MIC of the computer to the MIC of the recorder. Press ENTER. Wait for the first save to finish andpress ENTER again. Wait for thesecond save to finish. Rewind and pass out that copy!"
8500 SAVE "CATALOG" LINE 9000: SAVE "JRC SOFT"CODE 57919,65536-57919: GO TO 9100
9000 CLEAR 57919-1: POKE VAL "23675",VAL "63": POKE VAL "23676",VAL "226": LOAD ""CODE
9100 INK 0: PAPER 7: BORDER 7: CLS : PRINT "Choose! desired key!"'''
9200 PRINT "1","Play a short","","version of",,"Diamond Mike",,,"2","RUN a short",,"version of",,"the Great Game",,"and Graphics",,"Show",,,"3","Play 3D",,"Tic Tac Toe",,,"4","see commentary",,,"5","see catalog",,,"6","copy everything",,"to cassette"
9300 LET a$=INKEY$: IF a$<"1" OR a$>"6" THEN GO TO 9300
9400 PRINT AT 0,0: IF a$="1" THEN : INPUT "Diamond Mike is a breakthrough in 2068/Spectrum games. The object is to collect enough diamonds and find the exit before time runs out, while avoiding falling rocks, ferocious amebas, and killer butterflies. There are 22 different screens, but only 3 are included here so that you may try the game before purchasing it. Use the keys O P Q A and symbol shift to move, as well as the N key if you give up! Press ENTER to start the game";a$: BORDER 0: RANDOMIZE USR 61632: GO TO 9100
9410 IF a$="2" THEN GO SUB 5002
9500 IF a$="3" THEN GO TO 4000
9600 IF a$="4" THEN GO TO 3000
9700 IF a$="5" THEN GO TO 3370
9800 IF a$="6" THEN GO TO 7000
9900 GO TO 9100
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

