Wall Street

Products: Wall Street
Date: 1983
Type: Program
Platform(s): TS 1000
Tags: Game

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:

  1. Lines 1–9: Title/splash screen with copyright notice and jump to initialization.
  2. Lines 10–210: Subroutine that draws the Wall Street building graphic using block characters.
  3. Lines 280–360 (approx): Game setup — number of traders, initials, names, starting cash.
  4. Lines 510–589: Trader data initialization loop.
  5. Lines 610–760: Big Board display — prints all investment prices, averages, and percent changes.
  6. Lines 780–1040: Quarter/year transition, save-game prompt, and routing.
  7. Lines 1100–2100: Per-trader transaction loop — buy/sell stocks, R/E, money market, IRA, F/A advisory, cash transfers.
  8. Lines 2200–2320: IRA buy/sell sub-section.
  9. Lines 3000–3420: Price-update engine — random walks for each investment, dividend payouts, special investment resolution, ticker message generation.
  10. Lines 5000–5290: End-game scoring and winner announcement.
  11. Lines 6000–6170: Random windfall/loss event subroutine.
  12. Lines 9000–9060: Machine-code bootstrap and display-driver initialization.
  13. 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:

VariableValueTypical use
W1Loop start, increment
Z0Zero / false sentinel
S2Divisor, index offset
R3Column index, offset
F4Quarters per year, max traders
T20 (approx)Row 20, display bottom
E10Number of investments
H100Percentage scaling
FO4Number of investments on board display
Bportfolio indexTotal balance column in P() array
Gcash indexCash column in P() array
D.5Rounding constant for INT
Plarge pause valuePAUSE 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 and F(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 variable J from the enclosing FOR at line 1160) rather than P(I,M) (the just-traded investment). Since J equals E (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) into WA instead of P(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 I with no corresponding FOR I in the setup path; this is reached via the flow from line 335 and relies on a FOR I that would only exist if arriving from line 510’s loop — suggesting a structural remnant from an earlier code layout.
  • Line 5088 contains TO BAD which should read TOO BAD — a typographical error in the end-game message.

Content

Appears On

Related Products

You are a savvy Wall Street investor speculating in stocks, real estate, precious metals, minerals, and the money markets. You...

Related Articles

Related Content

Image Gallery

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 27FFFFF76
 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.

People

No people associated with this content.

Scroll to Top