Wall Street is a multi-player investment simulation for up to four traders, covering stocks, real estate, money market instruments, and an IRA account over a 16-year, 4-quarter-per-year game cycle. Players buy and sell assets, pay quarterly taxes, respond to random financial events (windfalls and losses), and can make speculative investments; the goal is to maximise total portfolio value by the end of year 16. The program uses a scrolling ticker-tape message routine (lines 322–328) driven by string slicing to display news and price-change reports. Numeric variables W, Z, T, F, R, S, E, B, G, H, FO, D are used as named constants throughout, reducing literal typing and saving token space. A machine-code routine is invoked via RAND USR 32685 at lines 9030 and 9050, and raw POKEs at line 9000 are used to patch memory directly.
Program Analysis
Program Structure
The program is organized into several functional blocks, broadly as follows:
- Lines 1–9: Title/splash screen with copyright notice and jump to initialization.
- Lines 10–210: Subroutine that draws the Wall Street building graphic using block characters.
- Lines 280–360 (approx): Game setup — number of traders, initials, names, starting cash.
- Lines 510–589: Trader data initialization loop.
- Lines 610–760: Big Board display — prints all investment prices, averages, and percent changes.
- Lines 780–1040: Quarter/year transition, save-game prompt, and routing.
- Lines 1100–2100: Per-trader transaction loop — buy/sell stocks, R/E, money market, IRA, F/A advisory, cash transfers.
- Lines 2200–2320: IRA buy/sell sub-section.
- Lines 3000–3420: Price-update engine — random walks for each investment, dividend payouts, special investment resolution, ticker message generation.
- Lines 5000–5290: End-game scoring and winner announcement.
- Lines 6000–6170: Random windfall/loss event subroutine.
- Lines 9000–9060: Machine-code bootstrap and display-driver initialization.
- Lines 9500–9510: Save routine.
Numeric Constants as Variables
A distinctive space-saving technique used throughout is the assignment of common small integers to single-letter variables, avoiding repeated literal tokens. The mapping (inferred from usage) is approximately:
| Variable | Value | Typical use |
|---|---|---|
W | 1 | Loop start, increment |
Z | 0 | Zero / false sentinel |
S | 2 | Divisor, index offset |
R | 3 | Column index, offset |
F | 4 | Quarters per year, max traders |
T | 20 (approx) | Row 20, display bottom |
E | 10 | Number of investments |
H | 100 | Percentage scaling |
FO | 4 | Number of investments on board display |
B | portfolio index | Total balance column in P() array |
G | cash index | Cash column in P() array |
D | .5 | Rounding constant for INT |
P | large pause value | PAUSE argument |
This technique is common in memory-constrained BASIC programs, as each numeric literal takes more bytes than a variable reference after the first assignment.
Ticker-Tape Scrolling Routine
Lines 316–328 implement a horizontal scrolling text display. A long string M$ is built up by concatenation, then lines 322–327 loop from position 1 to LEN M$-T-F, printing a 26-character window (M$(J TO J+25)) at a fixed screen position on each iteration. After the loop, M$ is trimmed to its last 25 characters so the next segment can be appended and the scroll continued seamlessly. This is a purely BASIC software scroll with no machine code involved.
Investment Price Model
The price update engine at lines 3010–3100 uses a mean-reverting random walk. Each investment I has a countdown timer T(I); when it reaches zero a new random duration is set and the trend direction S(I) is randomly toggled between +1 and −1. Each quarter the price is updated by:
V(I) = V(I) + INT(((S(I)*RND*A(I) + F(I))/H) * V(I) + D)- where
A(I)is volatility andF(I)is a drift term. - Prices are floored at 1 (line 3090:
IF V(I)<W THEN LET V(I)=W).
Portfolio Array Layout
Player data is stored in a 2D array P(player, column). Columns 1–E hold share counts for each investment; additional columns hold cash (G) and total net worth (B). IRA share counts are stored separately in N(I). This layout allows the buy/sell logic to be written as generic indexed operations.
Machine Code Usage
Lines 9000–9060 contain the only machine-code interface. Line 9000 POKEs a value derived from CODE("Z")+160 into address 32091, patching what is likely a display or driver parameter. RAND USR 32685 is called twice (lines 9030 and 9050) with different Z$ strings set beforehand (“-” and “%PW/S” respectively), suggesting the routine reads Z$ as a parameter — possibly a custom character-set loader or display mode setter. After the second call, the program jumps to W (i.e. line 1), restarting from the splash screen with the machine code now active.
Transaction Input Parsing
Player transactions are entered as formatted strings parsed at lines 1486–1560. The expected format is a 3-character investment code followed by /B/ or /S/ followed by a share count (e.g. IBM/B/500). The code checks T$(F TO R+R) (characters 4–6) for the /B/ or /S/ separator, extracts the investment ticker with T$(W TO R), and converts the quantity with ABS INT VAL T$(F+R TO LEN T$). Special commands F/A, R/O, SPE/..., IRA/..., and $ are handled by prior IF checks.
Random Event Subroutine
The subroutine at lines 6000–6170 fires conditionally during a trader’s turn (line 1207, probability 0.16 outside quarter 4). It selects a random message index and a dollar amount scaled to the current money-market price, then either credits (line 6030) or debits (line 6070) the player’s cash. Rare special cases (probability 0.02) can zero out all cash or multiply it — creating large swings. The event guard at line 6002 suppresses events on the very first turn of the game.
Save/Restore Mechanism
Line 1030 uses SAVE A$ with a player-supplied filename. The flag variable GSV is set to W (1) after saving; line 315 checks IF GSV=W THEN GOTO 600 on re-entry at line 280, skipping the setup questions and jumping directly into the game loop. Line 9500 provides an alternative SAVE "W/%S" for saving the program itself.
Notable Bugs and Anomalies
- Line 1660 prints
P(I,J)(using loop variableJfrom the enclosing FOR at line 1160) rather thanP(I,M)(the just-traded investment). SinceJequalsE(10) at the end of the display loop, this will display the wrong share count in the updated row. - Line 5200 stores
P(I,12)intoWAinstead ofP(I,B), which would set the winning total to a fixed column index rather than the player’s actual net worth — potentially corrupting the winner comparison in a 3- or 4-player game. - Line 360 contains a bare
NEXT Iwith no correspondingFOR Iin the setup path; this is reached via the flow from line 335 and relies on aFOR Ithat would only exist if arriving from line 510’s loop — suggesting a structural remnant from an earlier code layout. - Line 5088 contains
TO BADwhich should readTOO BAD— a typographical error in the end-game message.
Content
Source Code
1 REM W
2 REM %5%6%K@@;;,,:' SLOW OR HHH THEN THEN SAVE V<%>'.~~## '%1%1+ LIST :'%$'.%?%?%?:.:..:%"%K%K4EKL LOAD %T'.%/E43M"~~ LPRINT STOP COPY COPY
3 REM 8DAF17F976
4 REM W/S*FIN*12/28*05:00P
5 PRINT AT 9,4;"(C)1982 TIMEWORKS INC."
6 PRINT AT 7,7;"%*%*%W%A%L%L% %S%T%R%E%E%T%*%*"
7 PRINT AT 9,4;"(C)1982 TIMEWORKS INC."
8 PAUSE 200
9 GOTO 280
10 CLS
14 REM FAST
15 PRINT AT 5,20;":'''''''''''':"
18 PRINT AT 9,3;"WALL";AT 11,3;"STREET";AT 13,3;"NEWS"
20 PRINT AT 6,19;" :";TAB 27;": ";AT 7,19;": ";TAB 27;" :";AT 8,18;" :";TAB 28;": "
30 FOR I=9 TO 17
40 PRINT AT I,18;": ";TAB 28;" :"
50 NEXT I
60 PRINT AT 18,17;"..% % % % % % % % % % % .."
70 FOR I=13 TO 17
80 PRINT AT I,22;"% % % "
90 NEXT I
100 PRINT AT 14,T;",,####";AT 15,19;",,~~";AT 16,16;",,,,~~";AT 17,13;",,,,~~"
150 PRINT AT Z,Z;":'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':"
160 FOR I=W TO T-W
170 PRINT AT I,Z;": ";TAB 31;" :"
180 NEXT I
200 PRINT AT T-W,W+W;"##";TAB 29;"##";AT 19,2;",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";AT 21,0;":...!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...:"
210 RETURN
286 REM 27 FFFFF76
315 IF GSV=W THEN GOTO 600
316 LET M$=E$+"...............................THIS IS THE WALL STREET GAME"
317 GOSUB E
318 GOSUB X
319 LET M$=M$+".......................HOW MANY TRADERS WILL THERE BE?(1-4).."
320 GOTO 330
321 SLOW
322 FOR J=W TO LEN M$-T-F
323 PRINT AT 14,22;";;";AT 20,3;M$(J TO J+25);AT 14,22;"##"
326 NEXT J
327 LET M$=M$(LEN M$-24 TO LEN M$)
328 RETURN
330 GOSUB X
331 INPUT N
335 IF N<W OR N>F THEN GOTO 331
360 NEXT I
510 FOR I=W TO N
520 LET M$=M$+".....INPUT INITIALS FOR TRADER "+STR$ I+" ?......."
522 GOSUB X
523 INPUT L$(I)
525 LET M$=M$+".INPUT NAME FOR TRADER "+STR$ I+" ?........"
530 GOSUB X
570 INPUT N$(I)
575 NEXT I
578 LET M$=M$+".............GOOD LUCK....DON' T FORGET TO"
579 GOSUB X
580 LET M$=M$+" CONSULT THE INVESTORS GUIDE........"
581 GOSUB X
584 FOR I=W TO N
586 LET P(I,G)=1000
587 LET P(I,B)=1000
588 NEXT I
589 RAND 0
610 FAST
620 CLS
622 IF SE>Z THEN PRINT "SPE RETURNED: ";INT ((PO-W)*H);S$
625 PRINT AT W,Z;",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
630 LET QT=QT+W
640 IF QT<FO THEN GOTO 670
641 LET QT=W
642 LET YR=YR+W
643 FOR I=W TO N
644 LET YP=P(I,B)-G(I)-(((P(I,R+R)*V(R+R))+(P(I,R+F)*V(R+F)))/(H*H))
645 LET A=.1
646 FOR J=H TO 1000 STEP 150
647 IF YP<J THEN GOTO 653
648 LET A=A+.05
649 NEXT J
653 LET A=INT (A*YP+D)
654 IF A<Z THEN LET A=Z
655 LET P(I,G)=P(I,G)-A
658 LET G(I)=P(I,B)-A
659 LET X(I)=A
660 NEXT I
670 PRINT " **BIG BOARD-YR ";YR;" QTR ";QT;"**"
680 PRINT "INV TYPE";TAB 16;"P/S NPC EAP"
690 PRINT "--- ---------- ----- ----- -----"
692 FOR I=W TO FO
694 PRINT AT F+I,R;O$(I)
695 NEXT I
697 PRINT AT FO,Z;
700 FOR I=W TO E
705 LET E(I)=((V(I)-L(I))/L(I))*H
706 LET C(I)=INT (E(I)*F)
707 LET E(I)=INT E(I)
710 PRINT I$(I);TAB F;P$(I);TAB T-W-LEN STR$ V(I);V(I);TAB 25-LEN STR$ E(I);E(I);TAB 31-LEN STR$ C(I);C(I)
720 NEXT I
725 LET SA=INT ((V(W)+V(S)+V(R)+V(F)+V(F+W))/5)
726 LET SP=INT (((SA-OA)/OA)*H)
730 PRINT "STOCK AVG = $";TAB T-R-LEN STR$ SA;SA;TAB T-S;"CHANGE ";TAB 29-LEN STR$ SP;SP;S$
732 LET RA=INT ((V(R+R)+V(R+F))/S)
736 LET RP=INT (((RA-OR)/OR)*H)
740 PRINT "R.E. AVG = $";TAB T-R-LEN STR$ RA;RA;TAB T-S;"CHANGE ";TAB 29-LEN STR$ RP;RP;S$
745 LET MA=INT (((V(F+F)+V(E-W))/S))
747 LET MP=INT (((MA-OM)/OM)*H)
750 PRINT "M/P AVG = $";TAB T-R-LEN STR$ MA;MA;TAB T-S;"CHANGE";TAB 29-LEN STR$ MP;MP;S$
752 LET OA=SA
754 LET OR=RA
756 LET OM=MA
760 PRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
765 LET SE=Z
768 IF RND>.25 THEN GOTO 780
770 LET SE=INT (RND*F+W)
772 PRINT AT T-S,Z;"SPEC INV OPTY: ";J$(SE)
780 IF N=W AND YR<16 THEN GOTO 999
785 PRINT AT T,Z;"PRESS -C- TO CONT "
790 PAUSE P
800 CLS
805 PRINT ,,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
810 PRINT "**TRADER SUMMARY YR>";YR;" QTR>";QT;"**"
820 PRINT "INV P/S ";L$(W);" ";L$(S);" ";L$(R);" ";L$(F)
822 PRINT "--- ---- ----- ----- ----- -----"
824 FOR I=W TO FO
826 PRINT AT F+I,R;O$(I)
828 NEXT I
830 PRINT AT FO,Z;
832 FOR J=W TO N
834 LET P(J,B)=P(J,G)
836 NEXT J
840 FOR I=W TO E
860 FOR J=W TO N
865 LET R(J)=INT (((V(I)*P(J,I))/(E*H))+D)
870 LET P(J,B)=P(J,B)+R(J)
875 NEXT J
890 PRINT I$(I);TAB F+F-LEN STR$ V(I);V(I);TAB E+F-LEN STR$ R(W);R(W);TAB T-W-LEN STR$ R(S);R(S);TAB 26-LEN STR$ R(R);R(R);TAB 32-LEN STR$ R(F);R(F)
900 NEXT I
920 FOR I=G TO B
930 PRINT TAB E+F-LEN STR$ P(W,I);P(W,I);TAB T-W-LEN STR$ P(S,I);P(S,I);TAB 26-LEN STR$ P(R,I);P(R,I);TAB 32-LEN STR$ P(F,I);P(F,I)
940 IF I=B THEN GOTO 963
950 PRINT TAB E-W;"----- ----- ----- -----"
960 NEXT I
963 PRINT AT 15,Z;"CASH";AT 17,Z;"CASH VAL "
980 PRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
982 IF EP=Z THEN GOTO 999
984 PRINT AT T,Z;">>>GAME OVER<<<"
985 STOP
999 PRINT AT T,Z;"PRESS -C- TO CONT OR -S- TO SAVE"
1000 IF YR=16 THEN GOTO 5000
1001 PAUSE P
1010 IF INKEY$="S" THEN GOTO 1020
1015 GOTO 1100
1020 INPUT A$
1030 SAVE A$
1035 LET GSV=W
1037 LET I=Z
1040 GOTO 280
1100 FOR I=W TO N
1101 IF P(I,B)<=Z AND N<>W THEN GOTO 2100
1102 GOTO 1126
1103 DIM O$(FO,W)
1104 FOR K=W TO N
1105 FOR J=W TO FO
1106 IF P(K,J)>=O(J) AND P(K,J)>P(W,J)+P(S,J)+P(R,J)+P(F,J)-P(K,J) THEN LET O$(J)=CHR$ (156+K)
1107 NEXT J
1110 NEXT K
1122 FOR K=W TO FO
1123 PRINT AT S+K,R;O$(K)
1124 NEXT K
1125 RETURN
1126 CLS
1127 IF P(I,G)<Z THEN LET P(I,G)=INT (P(I,G)*1.04+D)
1128 LET IRP=Z
1129 PRINT AT Z,Z;N$(I);"(";L$(I);")";"Y>";YR;"Q>";QT
1130 PRINT "INV P/S SHRS VAL NPC EAP"
1132 LET LN=P(I,B)*.2
1135 LET TU=Z
1140 PRINT "--- ----- ------ ------ --- ---"
1160 FOR J=W TO E
1170 LET V=INT ((V(J)*P(I,J)/(H*E))+D)
1180 LET P(I,E+S)=P(I,E+S)+V
1190 PRINT I$(J);TAB E-W-LEN STR$ V(J);V(J);TAB 16-LEN STR$ P(I,J);P(I,J);TAB T-F;"$";TAB T+S-LEN STR$ V;V;TAB 28-LEN STR$ E(J);E(J);TAB 32-LEN STR$ C(J);C(J)
1200 NEXT J
1205 LET ST=Z
1207 IF QT<>F AND RND<.16 THEN GOSUB 6000
1210 FOR J=W TO R+S
1220 LET ST=ST+V(J)*P(I,J)
1230 NEXT J
1235 LET ST=INT ((ST/(E*H))+D)
1240 LET RE=INT (((V(S+F)*P(I,S+F)+V(F+R)*P(I,R+F))/(E*H))+D)
1250 LET MM=INT (((V(F+F)*P(I,F+F)+V(E-W)*P(I,E-W))/(E*H))+D)
1260 LET MK=INT (((V(E)*P(I,E))/(E*H))+D)
1270 LET P(I,B)=ST+RE+MM+MK+P(I,G)
1275 LET O=P(I,B)
1278 IF O<=Z THEN LET O=W
1280 LET SP=INT ((ST/O)*H)
1290 LET RP=INT ((RE/O)*H)
1300 LET MP=INT ((MM/O)*H)
1310 LET KP=INT ((MK/O)*H)
1320 LET CP=INT ((P(I,G)/O)*H)
1322 FOR J=E+R TO T-S
1323 PRINT AT J,E;" "
1325 NEXT J
1330 PRINT AT E+R,Z;"STOCKS";TAB E;"$";TAB T-F-LEN STR$ ST;ST;TAB E+E-LEN STR$ SP;SP;S$
1340 PRINT "R/E";TAB E;"$";TAB T-F-LEN STR$ RE;RE;TAB E+E-LEN STR$ RP;RP;S$
1350 PRINT "MIN/PMT";TAB E;"$";TAB T-F-LEN STR$ MM;MM;TAB E+E-LEN STR$ MP;MP;S$
1360 PRINT "MONEY MKT $";TAB T-F-LEN STR$ MK;MK;TAB E+E-LEN STR$ KP;KP;S$
1370 PRINT "CASH";TAB E;"$";TAB T-F-LEN STR$ P(I,G);P(I,G);TAB E+E-LEN STR$ CP;CP;S$
1380 PRINT TAB E;"-------"
1390 PRINT "TOTAL";TAB E;"$";TAB T-F-LEN STR$ P(I,B);P(I,B)
1400 PRINT AT E+R,T+R;"F/A";AT E+F,T+R;"$";FA;"000"
1410 IF SE>Z THEN PRINT AT E+R,29;"%S%P%E"
1420 IF P(I,B)<=Z THEN PRINT AT T-W,Z;"%*%*%Y%O%U%R% %B%R%O%K%E%*%*"
1425 IF QT=W AND TU=Z AND YR<>W THEN PRINT AT T-W,Z;"YOU PAID A $";X(I)*1000;" TAX BILL"
1430 IF QT=F AND P(I,G)>-LN THEN PRINT AT T-W,Z;">>IRA= ";N(I);"SHRS VAL= $";INT (N(I)*V(E)/(E*H));"<<"
1440 PRINT AT 19,6;"(";TU;")"
1450 LET TU=TU+W
1460 PRINT AT T,Z;"ENTER TRANSACTION?%I%N%V%/%S%<%>%B%/%S%H%R%S"
1461 SLOW
1462 INPUT T$
1463 FAST
1464 LET LN=P(I,B)*.2
1465 PRINT AT T-W,Z;E$;E$
1467 IF T$="" AND P(I,G)>-LN OR P(I,B)<=Z THEN GOTO 2100
1468 IF T$<>"" THEN GOTO 1474
1470 PRINT AT E+E,Z;"%>%>%S%E%L%L% %A%S%S%E%T%S% %T%O% %R%E%D%U%C%E% %D%E%B%T%<%<"
1472 GOTO 1430
1474 IF T$="F/A" THEN GOTO 1700
1475 IF T$<>"R/O" THEN GOTO 1480
1476 GOSUB 1103
1477 GOTO 1430
1485 IF T$="$" THEN GOTO 1900
1486 IF LEN T$<7 THEN GOTO 1540
1490 IF T$(F TO R+R)<>"/S/" AND T$(F TO R+R)<>"/B/" THEN GOTO 1540
1500 LET A$=T$(W TO R)
1505 IF A$="SPE" THEN GOTO 1800
1507 IF A$="IRA" THEN GOTO 2200
1510 FOR J=W TO E
1520 IF A$=I$(J) THEN GOTO 1550
1530 NEXT J
1540 PRINT AT T-W,Z;"%>%>%I%N%C%O%R%R%E%C%T% %I%N%P%U%T%<%<"
1542 PAUSE H
1543 GOTO 1430
1550 LET A=ABS INT VAL T$(F+R TO LEN T$)
1551 LET M=VAL A$
1552 IF M<>R+R AND M<>R+F THEN GOTO 1560
1553 IF (M=R+R AND A>=1000) OR (M=R+F AND A>=2500) THEN GOTO 1560
1554 PRINT AT T-W,Z;"MIN>RER=1000 SHRS/REC=2500 SHRS"
1555 GOTO 1460
1560 IF T$(S+R)="S" THEN GOTO 1610
1565 LET V=INT (((V(M)*A*1.015)/(E*H))+D)
1570 IF P(I,G)+LN<V THEN GOTO 1680
1580 LET P(I,G)=P(I,G)-V
1590 LET P(I,M)=P(I,M)+A
1600 GOTO 1655
1610 IF P(I,M)<=A THEN LET A=P(I,M)
1640 LET P(I,G)=INT (((V(M)*A*.985)/(E*H))+D+P(I,G))
1650 LET P(I,M)=P(I,M)-A
1655 LET V=INT (((P(I,M)*V(M))/(E*H))+D)
1660 PRINT AT S+M,G;" ";AT S+M,16-LEN STR$ P(I,J);P(I,J);TAB T-F;"$";TAB T+S-LEN STR$ V;V
1670 GOTO 1205
1680 PRINT AT T-W,Z;"%N%O%T% %E%N%O%U%G%H% %C%A%S%H% %F%O%R% %T%R%A%N%S%A%C%T%I%O%N"
1690 GOTO 1460
1699 REM **F/A******
1700 IF P(I,G)+LN>=FA THEN GOTO 1730
1710 PRINT AT T-W,Z;"NOT ENOUGH $ TO PAY F/A"
1720 GOTO 1460
1730 LET P(I,G)=P(I,G)-FA
1735 SLOW
1740 FOR J=W TO RND*FO+W
1750 LET A=INT (RND*E+W)
1755 LET A$="SELL "
1760 IF S(A)>Z AND T(A)>=W THEN LET A$="BUY "
1770 PRINT AT 14+J,T+R;A$;I$(A)
1780 NEXT J
1784 PAUSE 200
1785 FAST
1790 GOTO 1205
1800 IF SE>Z THEN GOTO 1820
1810 PRINT AT T-W,Z;"NO SPECIAL INVESTMENTS AVAILABLE"
1815 GOTO 1460
1820 LET A=ABS INT VAL T$(F+R TO LEN T$)
1850 IF P(I,G)-A<(P(I,B)-A)*-.2 THEN GOTO 1680
1860 LET P(I,G)=P(I,G)-A
1870 LET I(I)=A+I(I)
1880 GOTO 1205
1900 PRINT AT T-W,Z;E$;E$
1905 PRINT AT T-W,Z;"WHO TO TRANSFER $ TO?"
1910 FOR J=W TO N
1920 PRINT J;".";L$(J);" ";
1930 NEXT J
1940 INPUT T$
1943 IF T$<CHR$ 29 OR T$>CHR$ 32 THEN GOTO 1940
1945 LET TP=INT VAL T$
1946 IF TP>N THEN GOTO 1940
1960 PRINT AT T-W,Z;E$;E$
1970 PRINT AT T,Z;"ENTER AMOUNT?(000)"
1980 INPUT A
1990 LET A=ABS INT A
1999 GOTO 2010
2000 FAST
2001 IF I>N THEN GOTO 1100
2005 GOTO 1101
2010 IF P(I,G)+LN<A THEN GOTO 1680
2015 LET P(I,G)=P(I,G)-A
2020 LET P(TP,G)=P(TP,G)+A
2025 LET P(TP,B)=P(TP,B)+A
2030 GOTO 1205
2100 NEXT I
2105 GOTO 3000
2200 IF IRP<>W THEN GOTO 2205
2201 PRINT AT T-W,Z;"NO MORE IRA TRANSACTIONS THIS YR"
2202 GOTO 1460
2205 LET IRP=W
2206 IF QT=F THEN GOTO 2220
2210 PRINT AT T-W,Z;"NO IRA TRANSACTIONS UNTIL QTR 4"
2215 GOTO 1460
2220 LET A=ABS INT VAL T$(F+R TO LEN T$)
2225 IF T$(S+R)="S" THEN GOTO 2300
2227 IF A>2000 THEN LET A=2000
2230 IF (P(I,G)+LN)*H*E<A*V(E) THEN GOTO 1680
2240 LET P(I,G)=P(I,G)-INT (A*V(E)/(H*E))
2250 LET N(I)=N(I)+A
2260 GOTO 1205
2300 IF A>N(I) THEN LET A=N(I)
2305 LET N(I)=N(I)-A
2310 LET P(I,G)=P(I,G)+INT ((V(E)*A/(H*E))*.9+D)
2320 GOTO 1205
3010 FOR I=W TO E
3020 IF T(I)>Z THEN GOTO 3060
3030 LET T(I)=INT (Q(I)*RND+M(I))
3040 LET S(I)=-W
3050 IF RND>D THEN LET S(I)=W
3060 LET T(I)=T(I)-W
3070 LET L(I)=V(I)
3080 LET V(I)=V(I)+INT (((((S(I)*RND*A(I))+F(I))/H)*V(I))+D)
3090 IF V(I)<W THEN LET V(I)=W
3100 NEXT I
3105 LET FA=INT (((V(E)/OO)*FO+D))
3110 IF SE=Z THEN GOTO 3200
3120 LET PO=RND*(6-SE)+((SE-W)/F)
3130 IF RND<((5.5-SE)/E) THEN LET PO=Z
3140 FOR I=W TO N
3150 LET P(I,G)=P(I,G)+INT (I(I)*PO+D)
3160 NEXT I
3170 DIM I(F)
3200 DIM O$(FO,W)
3205 FOR I=W TO N
3210 FOR J=W TO FO
3220 IF P(I,J)<O(J) THEN GOTO 3240
3230 IF P(I,J)<P(W,J)+P(S,J)+P(R,J)+P(F,J)-P(I,J) THEN GOTO 3240
3235 LET P(I,G)=P(I,G)+INT (P(I,J)*V(J)*D/(H*H))
3237 LET O$(J)=CHR$ (156+I)
3240 NEXT J
3250 NEXT I
3310 LET M$="...........PRICE CHANGES FOR LEADING INVESTMENTS........."
3312 GOSUB E
3313 GOSUB X
3320 FOR I=W TO E
3330 LET M$=M$+I$(I)+"..$"+STR$ (V(I)-L(I))+"...."
3335 IF I=FO THEN GOSUB X
3340 NEXT I
3345 GOSUB X
3350 IF SE>Z THEN LET M$=M$+"......"+J$(SE)
3355 IF SE>Z THEN LET M$=M$+"...RETURNED..."+STR$ INT ((PO-W)*H)+S$+"....."
3360 GOSUB X
3370 LET M$=M$+"....END OF REPORT......."
3380 GOSUB X
3420 FAST
4000 GOTO 600
5005 LET EP=W
5010 LET A=INT (N(W)*V(E)/(E*H))
5020 LET P(W,G)=P(W,G)+A
5030 LET P(W,B)=P(W,B)+A
5040 LET WA=P(W,B)
5050 LET WP=W
5060 IF N>W THEN GOTO 5150
5070 IF WA>10000 THEN GOTO 5100
5080 LET M$=E$+"...........YOU HAVE NOT MET YOUR INVESTMENT "
5081 GOSUB E
5082 GOSUB X
5083 LET M$=M$+"OBJECTIVE OF INCREASING YOUR ASSETS TO $10 MILLION "
5085 GOSUB X
5088 LET M$=M$+".....TO BAD...BETTER ""LUCK"" NEXT TIME................."
5089 GOSUB X
5090 GOTO 5250
5100 LET M$=E$+"...............CONGRATULATIONS YOU HAVE USED YOUR "
5101 GOSUB E
5103 GOSUB X
5105 LET M$=M$+"INVESTMENT SAVVY TO MEET YOUR $10 MILLION OBJECTIVE........GOOD JOB................"
5106 GOSUB X
5110 GOTO 5250
5150 FOR I=S TO N
5160 LET A=INT (N(I)*V(E)/(E*H))
5170 LET P(I,G)=P(I,G)+A
5180 LET P(I,B)=P(I,B)+A
5190 IF P(I,B)>WA THEN LET WP=I
5200 IF P(I,B)>WA THEN LET WA=P(I,12)
5210 NEXT I
5220 LET M$=E$+"...........CONGRATULATIONS "+N$(WP)
5221 GOSUB E
5222 GOSUB X
5225 LET M$=M$+" HAS USED THEIR INVESTMENT SAVVY TO INCREASE THEIR "
5226 GOSUB X
5230 LET M$=M$+"ASSETS MORE THAN THE OTHER INVESTORS......GOOD JOB................"
5240 GOSUB X
5285 FAST
5290 GOTO 800
6002 IF QT=W AND TU=Z THEN RETURN
6005 LET A=INT (RND*9+W)
6007 LET WA=INT ((V(E)/H)*(RND*40+E)+D)
6010 IF RND<.6 THEN GOTO 6050
6015 IF RND<.02 THEN GOTO 6090
6020 PRINT AT 20,Z;W$(A);"$";WA;"000"
6030 LET P(I,G)=P(I,G)+WA
6040 RETURN
6050 LET A=A+E
6055 IF RND<.05 AND P(I,G)>Z THEN GOTO 6150
6060 PRINT AT 20,Z;W$(A);"$";WA;"000"
6070 LET P(I,G)=P(I,G)-WA
6080 RETURN
6090 IF RND<.5 AND P(I,G)>Z THEN GOTO 6115
6095 LET A=E
6100 LET WA=E*H
6110 GOTO 6020
6115 LET A=9
6120 LET WA=ABS (P(I,G)*E)
6130 GOTO 6020
6150 LET A=20
6160 LET WA=P(I,G)
6170 GOTO 6060
9000 POKE 32091,(160+CODE ("Z"))
9010 DIM Z$(24)
9020 LET Z$="-"
9030 RAND USR 32685
9040 LET Z$="%PW/S"
9050 RAND USR 32685
9060 GOTO W
9500 SAVE "W/%S"
9510 GOTO 1
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.



