--- title: "Stocks and Shares" id: 72409 type: "computer_media" slug: "stocks-and-shares" url: "http://localhost/computer_media/stocks-and-shares/" markdown_url: "http://localhost/computer_media/stocks-and-shares.md" published_at: "2026-10-23T07:47:08+00:00" modified_at: "2026-10-23T07:47:08+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/stocks-2.png" excerpt: "A stock-market trading game for up to ten players: buy, sell and reserve shares in ten sectors while dividends and market swings move prices." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - 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: "D. Bayliss" slug: "d-bayliss" taxonomy: "indiv" url: "http://localhost/indiv/d-bayliss/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_type: "Program" programmers: - name: "D. Bayliss" slug: "d-bayliss" taxonomy: "indiv" url: "http://localhost/indiv/d-bayliss/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Stocks%20and%20Shares%20%281984%29%28Bayliss%2C%20D.%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Stocks and Shares (1984)(Bayliss, D.)(TS2068)(US)(Program)/Stocks and Shares (1984)(Bayliss, D.)(TS2068)(US)(Program).tap" mediadate: "1984" images: - url: "http://localhost/wp-content/uploads/2026/10/stocks-2.png" - url: "http://localhost/wp-content/uploads/2026/10/stocks-3.png" related_content: - id: 10285 title: "ZX Computing" type: "periodical" url: "http://localhost/periodical/zx-computing/" - id: 72713 title: "SNUG-ISTUG Public Domain Library" type: "computer_media" url: "http://localhost/computer_media/snug-istug-public-domain-library/" media_type_tags: "Game" license: false --- # Stocks and Shares A trading game for up to ten players over a chosen number of rounds. The screen shows ten sectors, from Aviation and Steel to Film and Gold, with the shares left in the market, the price and your holding. Everyone starts with 200 in cash and ten shares in each sector. Each turn may bring a dividend on one sector, and then three random “market influences”, of which the player picks the one that takes effect. The player can then buy, sell, sell everything, or reserve shares to be bought at the next turn. Quitting the turn fills other players’ reservations and lets every price drift up or down. At the end every holding is sold and each player’s cash is listed. A REM credits D. Bayliss and *ZX Computing*, February/March 1984. ## Program Analysis ### Structure - Lines 20–280: set-up. `A(P,11)` holds each player’s shares and cash, `B(10,2)` each sector’s available shares and price, and `R(P,10)` the reservations. - Lines 300–520: the turn loop and the options menu. - Lines 640–1230: buy, sell, sell all and reserve. - Lines 1240–1410: filling reservations, partly if not enough shares are left. - Lines 1420–1850: dividends and market influence. Lines 1920–2100: the end-of-turn price drift. - Lines 2110–2250: clearing the lower screen and redrawing the share columns. ## Notable Techniques - `T$=CHR$ 22+CHR$ 13+CHR$ 0` is an embedded `AT 13,0`, so each prompt starts with `PRINT T$;`. - `FOR ... =SGN PI TO ...` is used throughout to start loops at 1. - The price drift (lines 1960–2060) adds rare big jumps and pulls prices back from the 1 and 40 limits. ## Potential Issues - Selling pays the wrong amount. Line 950 credits `B(SE,1)*QS`, the number of shares left in the market times the quantity sold, instead of the price `B(SE,2)*QS`. - The number of players is not checked for zero or a negative value. This program came from an Oliger (JLO SAFE) disk, a copy of the SNUG library disk 17/18, and was converted to load from tape. No changes were needed. It was tested in ZEsarUX with two players, choosing a market influence and buying shares. ## Source Code ``` 10 REM "STOCKS & SHARES" by D. Bayliss * ZX COMPUTING, Feb/Mar 1984 20 CLS : DIM A$(10,12) 30 FOR Z=0 TO 6 STEP 2: POKE USR "A"+Z,85: POKE USR "a"+Z+1,170:: NEXT Z 40 DIM B(10,2) 50 PRINT AT 6,0;"<<<<<<<<<< >>>>>>>>>> "'" STOCKS AND SHARES"''"<<<<<<<<<< >>>>>>>>>>" 60 PRINT '''" A GAME FOR UP TO TEN PLAYERS" 70 INPUT " HOW MANY PLAYERS? ";P 80 IF P>10 THEN GO TO 70 90 CLS : DIM A(P,11) 100 DIM R(P,10): LET T$=CHR$ 22+CHR$ 13+CHR$ 0 110 PRINT AT 11,7;"HOW MANY ROUNDS?" 120 INPUT END 130 RESTORE : FOR Z=SGN PI TO 10: READ A$(Z): NEXT Z 140 DATA "1.AVIATION","2.STEEL","3.SHIPPING","4.BUILDING","5.FINANCE","6.LEISURE","7.INDUSTRY","8.FILM IND","9.CHAIN ST","10.GOLD " 150 LET C$=" RESERVED " 160 FOR N=SGN PI TO P 170 FOR M=SGN PI TO 10 180 LET A(N,M)=10 190 LET B(M,1)=P*40 200 LET B(M,2)=10 210 NEXT M 220 LET A(N,11)=200 230 NEXT N 240 LET RO=1 250 GO SUB 530 260 FOR N=SGN PI TO 10 270 GO SUB 630 280 NEXT N 290 REM PRIMARY LOOP 300 FOR J=SGN PI TO P 310 PRINT AT 12,0;"ROUND ";RO;" OF ";END 320 LET ST=1 330 PRINT AT 0,0;P;" PLAYING" 340 GO SUB 2150 350 PRINT AT 0,27;" ";AT 0,27;J 360 IF RND>.8 THEN GO SUB 1420 370 GO SUB 1570 380 GO SUB 2110 390 LET ST=0 400 PRINT T$;"PLAYER>";J;" YOUR OPTIONS ARE :-" 410 PRINT '"1. BUY"'"2. SELL"'"3. SELL ALL"'"4. RESERVE"'"5. QUIT" 420 INPUT OP 430 IF OP<1 OR OP>5 THEN GO TO 420 440 IF OP=1 THEN GO TO 640 450 IF OP=2 THEN GO TO 830 460 IF OP=3 THEN GO TO 1010 470 IF OP=4 THEN GO TO 1100 480 IF OP=5 THEN GO TO 1920 490 IF J=P THEN LET RO=RO+1 500 IF RO=END+1 THEN GO TO 1860 510 NEXT J 520 GO TO 300 530 REM SCREEN$ 540 PRINT AT 0,0;"aaaaaaaaaaaaaaaaaaaaPLAYER> " 550 FOR N=SGN PI TO 10 560 PRINT AT N,0;A$(N);" AT a- " 570 NEXT N 580 PRINT "aaaaaaaaaaaaaaaaaaaaCASH " 590 FOR N=SGN PI TO 10 600 PRINT AT N,27; INVERSE 1;C$(N) 610 NEXT N: RETURN 620 PRINT AT 11,25;A(J,11),: RETURN 630 PRINT AT N,17;" ";AT N,17;B(N,2): RETURN 640 REM BUY 650 GO SUB 2110 660 PRINT T$;"WHAT DO YOU WISH TO BUY?","(1, 2, 3, ETC)" 670 INPUT BU 680 IF BU<1 OR BU>10 THEN GO TO 670 690 PRINT AT BU,19;"" 700 PRINT AT 13,26;BU;AT 15,0;"HOW MANY DO YOU REQUIRE?","YOU CAN AFFORD ";INT (A(J,11)/B(BU,2)) 710 INPUT QU 720 IF QU>B(BU,1) THEN GO TO 710 730 IF QU>INT A(J,11)/B(BU,2) THEN GO TO 710 740 PRINT AT 15,26;QU 750 LET A(J,11)=A(J,11)-(B(BU,2)*QU) 760 LET B(BU,1)=B(BU,1)-QU 770 LET A(J,BU)=A(J,BU)+QU 780 PRINT AT BU,10;" ";AT BU,10;B(BU,1);AT BU,22;" ";AT BU,22;A(J,BU) 790 GO SUB 620 800 PRINT AT BU,19;"a- " 810 GO SUB 2110 820 GO TO 400 830 REM SELL 840 GO SUB 2110 850 PRINT T$;"WHAT DO YOU WANT TO SELL ?","(1, 2, 3, ETC)" 860 INPUT SE 870 IF SE<1 OR SE>10 THEN GO TO 860 880 PRINT AT SE,19;"" 890 PRINT AT 13,26;SE;AT 15,0;"HOW MANY TO SELL ?" 900 INPUT QS 910 IF QS>A(J,SE) THEN GO TO 900 920 PRINT AT 15,26;QS 930 LET B(SE,1)=B(SE,1)+QS 940 LET A(J,SE)=A(J,SE)-QS 950 LET A(J,11)=A(J,11)+(B(SE,1)*QS) 960 PRINT AT SE,10;" ";AT SE,10;B(SE,1);AT SE,22;" ";AT SE,22;A(J,SE) 970 GO SUB 620 980 PRINT AT SE,19;"a- " 990 GO SUB 2110 1000 GO TO 400 1010 REM SELL ALL 1020 FOR N=SGN PI TO 10 1030 LET B(N,1)=B(N,1)+A(J,N) 1040 LET A(J,11)=A(J,11)+(A(J,N)*B(N,2)) 1050 LET A(J,N)=0 1060 NEXT N 1070 IF RO=END+1 THEN RETURN 1080 GO SUB 2150: GO SUB 2110 1090 GO TO 400 1100 REM RESERVE 1110 GO SUB 2110 1120 PRINT T$;"WHAT DO YOU WISH TO RESERVE? (1, 2, 3, ETC)" 1130 INPUT RE 1140 IF RE<1 OR RE>10 THEN GO TO 1130 1150 PRINT AT 13,29;RE;AT 15,0;"HOW MANY ? " 1160 INPUT RA 1170 IF RA>((P*40)+(P*10)) THEN GO TO 1160 1180 IF RA+R(J,RE)>((P*40)+(P*10)) THEN GO TO 1160 1190 PRINT AT 15,9;RA 1200 LET R(J,RE)=R(J,RE)+RA 1210 PRINT AT RE,28;R(J,RE), 1220 GO SUB 2110 1230 GO TO 400 1240 REM RESERVE ADJUSTMENTS 1250 FOR Q=J-1 TO J-(P-1) STEP -1 1260 LET Q1=Q 1270 IF Q1<1 THEN LET Q1=Q1+P 1280 FOR N=SGN PI TO 10 1290 IF R(Q1,N)<>0 THEN GO SUB 1320 1300 NEXT N 1310 NEXT Q: RETURN 1320 IF R(Q1,N)>B(N,1) THEN GO TO 1380 1330 LET A(Q1,N)=A(Q1,N)+R(Q1,N) 1340 LET A(Q1,11)=A(Q1,11)-(R(Q1,N)*B(N,2)) 1350 LET B(N,1)=B(N,1)-R(Q1,N) 1360 LET R(Q1,N)=0 1370 RETURN 1380 LET A(Q1,N)=A(Q1,N)+B(N,1) 1390 LET A(Q1,11)=A(Q1,11)-(B(N,1)*B(N,2)) 1400 LET R(Q1,N)=R(Q1,N)-B(N,1) 1410 LET B(N,1)=0: RETURN 1420 REM DIVIDENDS 1430 GO SUB 2110 1440 PRINT T$;"________DIVIDEND________" 1450 LET DI=INT (RND*10)+1 1460 PRINT AT 14,0;"YOU RECEIVE A DIVIDEND" 1470 PRINT "ALL SHARES HELD IN..." 1480 PRINT A$(DI) 1490 PRINT "YOU HOLD ";A(J,DI) 1500 PRINT "YOU RECEIVE ";A(J,DI)*10 1510 PRINT '" ANY KEY TO CONTINUE " 1520 IF INKEY$<>"" THEN GO TO 1520 1530 IF INKEY$="" THEN GO TO 1530 1540 GO SUB 2110 1550 LET A(J,11)=A(J,11)+(A(J,DI)*10) 1560 GO SUB 620: RETURN 1570 REM MARKET INFLUENCE 1580 GO SUB 2110 1590 DIM I(10) 1600 PRINT T$;"MARKET INFLUENCE" 1610 FOR N=SGN PI TO 10 1620 LET I(N)=INT (RND*14+1)-7 1630 IF I(N)=0 THEN GO TO 1620 1640 NEXT N 1650 DIM Z(3) 1660 FOR N=SGN PI TO 3 1670 LET Z(N)=INT (RND*10)+1 1680 IF N=2 AND Z(N)=Z(1) THEN GO TO 1670 1690 IF N=3 AND (Z(N)=Z(1) OR Z(N)=Z(2)) THEN GO TO 1670 1700 PRINT AT 13+N,0;A$(Z(N)) 1710 IF I(Z(N))<0 THEN PRINT AT 13+N,12;"DOWN";ABS I(Z(N)) 1720 IF I(Z(N))>0 THEN PRINT AT 13+N,12;" UP ";I(Z(N)) 1730 NEXT N 1740 PRINT AT 18,0;"CHOOSE";Z(1);"/";Z(2);"/";Z(3) 1750 INPUT CH 1760 IF CH<>Z(1) AND CH<>Z(2) AND CH<>Z(3) THEN GO TO 1750 1770 LET B(CH,2)=B(CH,2)+I(CH) 1780 IF B(CH,2)<1 THEN LET B(CH,2)=1 1790 IF B(CH,2)>40 THEN LET B(CH,2)=40 1800 PRINT AT CH,17;" ";AT CH,17;B(CH,2) 1810 GO SUB 2110 1820 IF ST=1 THEN RETURN 1830 FOR N=13 TO 20 1840 PRINT AT N,0;"aaaaaaaNEXT PLAYERaaaaaaaaa" 1850 NEXT N: RETURN 1860 REM END 1870 CLS 1880 FOR J=SGN PI TO P 1890 GO SUB 1010 1900 PRINT AT J,0;"PLAYER ";J;" HAS ";A(J,11) 1910 NEXT J: STOP 1920 REM PRICES 1930 GO SUB 1570 1940 GO SUB 1240 1950 FOR N=SGN PI TO 10 1960 LET UP=INT (RND*4) 1970 LET DO=INT (RND*4) 1980 LET G=INT (RND*2)+1 1990 IF G=1 THEN LET B(N,2)=B(N,2)+UP 2000 IF G=2 THEN LET B(N,2)=B(N,2)-DO 2010 IF RND>.95 THEN LET B(N,2)=B(N,2)+UP+DO 2020 IF RND>.95 THEN LET B(N,2)=B(N,2)-UP-DO 2030 IF RND>.8 AND B(N,2)<5 THEN LET B(N,2)=B(N,2)+UP+DO 2040 IF RND>.8 AND B(N,2)>35 THEN LET B(N,2)=B(N,2)-UP-DO 2050 IF B(N,2)>40 THEN LET B(N,2)=40 2060 IF B(N,2)<1 THEN LET B(N,2)=1 2070 GO SUB 630 2080 NEXT N 2090 GO SUB 2110 2100 GO TO 490 2110 REM CLS 2120 FOR N=13 TO 21 2130 PRINT AT N,0,,: NEXT N 2140 RETURN 2150 REM SHARES DISPLAY 2160 FOR N=SGN PI TO 10 2170 PRINT AT N,22;" ";AT N,22;A(J,N) 2180 PRINT AT N,10;" ";AT N,10;B(N,1) 2190 PRINT AT N,28;R(J,N), 2200 NEXT N 2210 GO SUB 620: RETURN 2220 REM DISPLAY RESERVES 2230 FOR N=SGN PI TO 10 2240 PRINT AT N,28;R(J,N), 2250 NEXT N: RETURN ```