--- title: "JRC Catalog" id: 51906 type: "computer_media" slug: "jrc-catalog" url: "http://localhost/computer_media/jrc-catalog/" markdown_url: "http://localhost/computer_media/jrc-catalog.md" published_at: "2023-08-16T01:42:21+00:00" modified_at: "2026-04-01T16:25:54+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/02/20230809-041332.jpg" excerpt: "A shareware cassette catalog bundles a fully playable 3D Tic-Tac-Toe AI, a graphics demo, and candid commentary on the home computer market into one remarkable program." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "JRC Software" slug: "jrc-software" taxonomy: "post_tag" url: "http://localhost/tag/jrc-software/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "John Richard Coffey" slug: "john-richard-coffey" taxonomy: "indiv" url: "http://localhost/indiv/john-richard-coffey/" genre: - name: "Collection" slug: "collection" taxonomy: "genre" url: "http://localhost/type/collection/" media_type: "Cassette" programmers: - name: "John Richard Coffey" slug: "john-richard-coffey" taxonomy: "indiv" url: "http://localhost/indiv/john-richard-coffey/" download_url: "https://archive.org/download/timex-sinclair-software-archive/JRC Catalog (1984)(JRC Software)(US)(TS2068)(Cassette).zip" mediadate: "1984" producer_company: - id: 10999 title: "JRC Software" type: "company" url: "http://localhost/company/jrc-software/" images: - url: "http://localhost/wp-content/uploads/2023/08/SCR-20260331-jgri.png" - url: "http://localhost/wp-content/uploads/2023/08/SCR-20260331-jgeq.png" related_products: - id: 49628 title: "JRC Software Catalog" type: "product" url: "http://localhost/product/jrc-software/" media_type_tags: "Collection" --- # JRC Catalog This program is a software catalog and demonstration disk for [JRC Software](http://localhost/company/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: 1. **Lines 1–171:** 3D Tic-Tac-Toe game engine — initialization, AI scoring, move execution, and player input. 2. **Lines 300–475:** Cursor movement subroutines (left/right/up/down) for joystick and keyboard navigation. 3. **Lines 1000–1200:** Board drawing subroutine — PLOT/DRAW graphics for three board layers and cell coordinate table `T$`. 4. **Lines 2000–2130:** End-of-game scoring and result display. 5. **Lines 3000–3900:** Multi-screen editorial commentary and product catalog text. 6. **Lines 4000–5002:** Shareware notice for 3D Tic-Tac-Toe and a graphics demo subroutine. 7. **Lines 8000–8500:** Cassette duplication instructions and SAVE commands. 8. **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=1` is used as a flag so that the `GO SUB 25` at line 2004 returns early after recalculating B() without running the full game loop — a re-entry guard embedded in the scoring routine via `IF TIC=1 THEN RETURN` at 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 on `B(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 to `USR "\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\g` and `\h` at lines 142/145/166/168 are additional UDG characters used to render the X and O markers in the game. - The `SAVE` at line 8500 saves both the BASIC program with auto-start (`LINE 9000`) and a raw machine code block starting at address 57919, used by `RANDOMIZE USR 61632` at 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. | ## 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)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=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 ```