--- title: "Personal Finance Planner" id: 51749 type: "computer_media" slug: "personal-finance-planner" url: "http://localhost/computer_media/personal-finance-planner/" markdown_url: "http://localhost/computer_media/personal-finance-planner.md" published_at: "2023-08-13T23:14:30+00:00" modified_at: "2026-04-04T20:18:02+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/02/20230809-041332.jpg" excerpt: "A full-featured time-value-of-money calculator that solves for N, I, PMT, PV, or FV across five financial program types, complete with amortization schedules and an animated dollar-sign title sequence." 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: "Timex Computer Corporation" slug: "timex-computer-corporation" taxonomy: "post_tag" url: "http://localhost/tag/timex-computer-corporation/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" genre: - name: "Finance" slug: "finance" taxonomy: "genre" url: "http://localhost/type/finance/" media_type: "Cassette" download_url: "https://archive.org/download/timex-sinclair-software-archive/Personal Finance Planner (1982)(Timex)(US)(TS1000)(Cassette).zip" mediadate: "1982" producer_company: - id: 11401 title: "Timex Computer Corporation" type: "company" url: "http://localhost/company/timex-computer-corporation/" related_products: - id: 13534 title: "Personal Finance Planner" type: "product" url: "http://localhost/product/personal-finance-planner/" media_type_tags: "Finance" --- # Personal Finance Planner Personal Finance Planner is a menu-driven financial calculator that handles house financing, car financing, savings accounts, loans, and amortization schedules. The program solves for any one of five time-value-of-money variables (N, I, PMT, PV, FV) given the other known values, supporting both ordinary annuity (END) and annuity-due (BEG) payment modes. Interest rate solving uses a bisection algorithm (binary search between bounds 0.002 and 85) to iteratively converge on the unknown rate when payments are non-zero, falling back to a direct logarithmic formula when PMT is zero. The animated title sequence draws a bar-chart graphic using a parameterized GOSUB routine that plots columns and rows of dollar signs, then wipes the screen with a scrolling row of dollar signs before entering the main program. *** ## Program Analysis ### Program Structure The program is organized into several distinct functional blocks, navigated via GOTO and GOSUB: 1. **Lines 5–195:** Animated splash screen — fills display with dollar signs in FAST mode, then draws a text-art “MONEY” logo in SLOW mode, pauses, and jumps to the main program. 2. **Lines 270–1570:** Animated bar-chart graphic drawn with parameterized column/row subroutines, ending with a wipe effect before looping back to line 40 (re-entering SLOW mode). 3. **Lines 2000–2170:** Variable initialization and first-run help gate. 4. **Lines 3000–3095:** Main menu — selects program type (House, Car, Savings, Loans, Amortization, End). 5. **Lines 3100–3650:** Context-sensitive help screens for each program type. 6. **Lines 4000–4140:** Calculation mode menu (solve for N, I, PMT, PV, or FV). 7. **Lines 5000–6360:** Data entry and calculation dispatch for all five TVM variables plus BEG/END toggle. 8. **Lines 7000–7860:** Results display, continuation menu, and full amortization schedule generator. 9. **Lines 8000–8550:** Error message, amortization entry guard, and help screen return. 10. **Lines 9000–9960:** Clean exit (STOP) and SAVE line. ### Time-Value-of-Money Formulas The core financial engine implements standard TVM equations. The variable `S` is the annuity-due flag (1 for BEG, 0 for END), which modifies the payment factor via `(1+I*S)`. The implemented formulas are: | Variable | Line | Formula | | --- | --- | --- | | N | 5320 | `-(LN((-P-(1+I*S)*M/I)/(F-(1+I*S)/I*M))/LN(1+I))` | | PMT | 5720 | `(-P-F*(1+I)^(-N))/((1+I*S)*(1-(1+I)^(-N)))*I` | | PV | 5920 | `-(M*(1+I*S)/I*(1-(1+I)^(-N))+F*(1+I)^(-N))` | | FV | 6120 | `(-M*(1+I*S)*(1-(1+I)^(-N))/I-P)/((1+I)^(-N))` | ### Interest Rate Bisection Solver Solving for interest rate `I` (lines 5520–5579) uses a bisection search. Bounds `W` (low) and `C` (high, initialized to 85) bracket the solution, and the midpoint `U` is tested each iteration. The loop continues until the computed payment `Q` matches `M` to three decimal places, or until the bounds collapse below `1E-8` or exceed `85-1E-8`, at which point an “INTEREST OFF SCALE” error is reported at line 8000. When `M=0`, a direct formula `((F/-P)^(1/N)-1)*100` is used instead. Note that the variable `W` is reused here as the bisection lower bound, which conflicts with its use as a step direction in the animation subroutines. This is safe only because the animation and solver are never active simultaneously. ### Animated Title Sequence The splash screen at lines 270–1570 draws a bar chart of dollar signs using two parameterized subroutines. Subroutine at line 500 draws a vertical column: it takes row start `U`, row end `V`, step direction `W`, and column `Y`, animating by printing a moving block graphic character ahead of each dollar sign. Subroutine at line 900 is the horizontal equivalent, animating along columns at a fixed row. The wipe at lines 1520–1570 sweeps a block graphic down from row 20, overwriting each row with a line of dollar signs, then jumps to line 40 to re-enter SLOW mode. ### Amortization Schedule (Lines 7100–7860) The amortization module accepts a start and end period and computes principal, interest, and remaining balance for each period. The balance at period `J` is calculated directly using the closed-form formula at line 7440 rather than iterating from period 1, which avoids accumulated rounding error. A special case at lines 7350–7380 handles the first period of an annuity-due (`S=1`, `J=1`) where no interest accrues. The display paginates every 17 rows, pausing with a “PRESS ANY KEY” prompt and clearing the screen to continue. ### Key BASIC Idioms and Techniques - **String-encoded state:**`A$`, `X$`, `Y$` are used as mode flags throughout — `X$="0"` for data entry mode vs. `X$="1"` for calculation mode; `Y$` holds the selected program type (“1″–”5”). - **Numeric display rounding:** All displayed values use the idiom `INT(value*100+0.5)/100` to round to two decimal places before converting with `STR$`. - **INKEY$ polling loops:** All key input uses `INKEY$` in tight loops (e.g., lines 5080–5082) with CHR$ boundary checks to filter valid keypresses. - **Status bar via GOSUB 5072:** Lines 5072–5077 form a reusable status display subroutine called from both data entry and calculation menus, showing current values of all TVM variables. - **VAL B$ for balance carry-forward:** At line 7430, `LET R=VAL B$` recovers the previously stored balance string as a number to compute principal paid — a deliberate use of string storage to preserve the prior period’s rounded balance. ### Bugs and Anomalies - **Dead loop at line 4000:** Lines 4000–4010 contain two nested `FOR J` loops, the first (`FOR J=1 TO 17 STEP 2`) immediately superseded by the second (`FOR J=1 TO 17`). The `RETURN` at line 4020 is never reached from the main flow since no `GOSUB 4000` appears in the program; this subroutine is unused dead code. - **Line 880 missing W assignment:** The GOSUB 500 call at line 890 uses `U`, `V`, and `Y` set at lines 860–880, but `W` is not set before this call. It retains whatever value it held from the previous block (line 790, `W=-1`), which may or may not be the intended step direction. - **Amortization guard at line 8200:** If program type is Savings (`Y$="3"`), the amortization route redirects to the main menu at line 3000. This is intentional but silently discards the user’s request without explanation. - **Line 5087 amortization route sets Y$=”5″ at line 8203** only after checking `Y$="3"` at 8200, meaning entering amortization from the main menu correctly sets the type, but re-entering via key “5” from the data entry menu (line 5087) bypasses the type assignment entirely and uses the prior `Y$` value. ## Source Code ``` 5 SLOW 10 GOTO 200 20 FOR I=0 TO 21 25 PRINT "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 30 NEXT I 40 SLOW 50 FOR I=0 TO 7 60 PRINT AT I,0;" " 70 NEXT I 80 PRINT AT 8,0;" $ $ $$$ $ $ $$$$$ $ $ " 90 PRINT AT 9,0;" $$ $$ $ $ $$ $ $ $$ $$ " 100 PRINT AT 10,0;" $$$$$ $ $ $$$ $ $ $$$ " 110 PRINT AT 11,0;" $$$$$ $ $ $$$$$ $$$$$ $ " 120 PRINT AT 12,0;" $ $ $ $ $ $ $$$ $ $ " 130 PRINT AT 13,0;" $ $ $ $ $ $$ $ $ " 140 PRINT AT 14,0;" $ $ $$$ $ $ $$$$$ $ " 150 FOR I=15 TO 20 160 PRINT AT I,0;" " 170 NEXT I 173 PRINT AT 21,0;" AMERICAN MICRO PRODUCTS, INC. " 175 FOR I=1 TO 100 180 NEXT I 195 GOTO 2000 270 LET U=8 280 LET V=14 290 LET W=1 295 LET Y=2 300 GOSUB 500 310 PRINT AT 9,3;"[▒]" 320 LET U=9 330 LET V=11 340 LET W=1 350 LET Y=3 360 GOSUB 500 380 LET U=10 390 LET V=12 400 LET W=1 410 LET Y=4 420 GOSUB 500 440 LET U=11 450 LET V=9 460 LET W=-1 470 LET Y=5 475 GOSUB 500 480 GOTO 560 500 PRINT AT U,Y;"[▒]" 505 FOR I=U TO V STEP W 510 PRINT AT I,Y;"$" 520 PRINT AT I+W,Y;"[▒]" 530 NEXT I 540 PRINT AT V+W,Y;" " 550 RETURN 560 LET U=8 570 LET V=14 580 LET W=1 590 LET Y=6 600 GOSUB 500 610 LET U=9 620 LET V=13 630 LET W=1 640 LET Y=8 650 GOSUB 500 660 LET U=9 670 LET V=11 680 LET W=1 690 LET Y=14 700 GOSUB 900 710 LET U=13 720 LET V=9 730 LET W=-1 740 LET Y=12 750 GOSUB 500 760 LET U=11 770 LET V=9 780 LET W=-1 790 LET Y=8 800 GOSUB 900 810 LET U=8 820 LET V=14 830 LET W=1 840 LET Y=14 850 GOSUB 500 860 LET U=9 870 LET V=11 880 LET Y=15 890 GOSUB 500 895 GOTO 960 900 PRINT AT Y,U;"[▒]" 910 FOR I=U TO V STEP W 920 PRINT AT Y,I;"$" 930 PRINT AT Y,I+W;"[▒]" 940 NEXT I 945 PRINT AT Y,V+W;" " 950 RETURN 960 LET U=10 970 LET V=12 980 LET Y=16 990 GOSUB 500 1000 LET U=11 1010 LET V=13 1020 LET Y=17 1030 GOSUB 500 1040 LET U=14 1050 LET V=8 1060 LET W=-1 1070 LET Y=18 1080 GOSUB 500 1090 LET U=20 1100 LET V=24 1110 LET W=1 1120 LET Y=8 1130 GOSUB 900 1140 LET U=9 1150 LET V=14 1160 LET Y=20 1170 GOSUB 500 1180 LET U=21 1190 LET V=24 1200 LET Y=14 1210 GOSUB 900 1220 LET Y=11 1230 GOSUB 900 1240 LET U=8 1250 LET V=9 1260 LET Y=26 1270 GOSUB 500 1280 LET U=9 1290 LET V=10 1300 LET Y=27 1310 GOSUB 500 1320 LET U=8 1330 LET V=9 1340 LET Y=30 1350 GOSUB 500 1360 LET U=9 1370 LET V=10 1380 LET Y=29 1390 GOSUB 500 1400 LET U=10 1410 LET V=14 1420 LET Y=28 1430 GOSUB 500 1520 FOR I=20 TO 0 STEP -1 1530 PRINT AT I,16;"[▒]" 1540 PRINT AT I+1,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 1550 NEXT I 1560 PRINT AT 0,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 1570 GOTO 40 2000 CLS 2001 LET Y$="0" 2002 LET A$="0" 2005 CLS 2020 LET M=0 2030 LET I=0 2040 LET P=0 2050 LET F=0 2060 LET S=0 2070 LET X$="0" 2080 LET T=0 2090 LET E=0 2100 LET G=0 2110 LET M$="0" 2120 LET N$="0" 2130 LET P$="0" 2140 LET F$="0" 2150 LET I$="0" 2160 LET S$="END" 2170 IF A$<>"0" THEN GOTO 3085 2200 PRINT AT 3,1;"FIRST, SELECT THE TYPE OF " 2210 PRINT AT 4,1;"PROGRAM OF INTEREST." 2220 PRINT AT 6,1;"N,I,PMT,PV,FV ARE DIFFERENT" 2230 PRINT AT 7,1;"FOR EACH TYPE OF PROGRAM" 2240 PRINT AT 8,1;"CHOSEN. CHECK HELP" 2250 PRINT AT 10,1;"YOU MAY SOLVE ANY ONE VALUE" 2260 PRINT AT 11,1;"GIVEN THE OTHER THREE OR" 2270 PRINT AT 12,1;"FOUR VALUES" 2280 PRINT AT 14,1;"BEGIN/END SPECIFIES WHETHER" 2290 PRINT AT 15,1;"PAYMENTS ARE ANNUITY OR" 2300 PRINT AT 16,1;"ANNUITY DUE" 2310 PRINT AT 20,0;"** PRESS ANY KEY TO CONTINUE **" 2320 LET A$=INKEY$ 2330 IF A$="" THEN GOTO 2320 2340 CLS 3000 CLS 3005 PRINT AT 5,1;"PLEASE PRESS:" 3010 PRINT AT 8,5;"1 HOUSE FINANCING" 3020 PRINT AT 10,5;"2 CAR FINANCING" 3030 PRINT AT 12,5;"3 SAVINGS ACCOUNT" 3035 PRINT AT 14,5;"4 LOANS" 3040 PRINT AT 16,5;"5 AMORTIZATION SCHEDULE" 3050 PRINT AT 18,5;"6 END" 3060 LET A$=INKEY$ 3070 IF A$CHR$ 34 THEN GOTO 3060 3080 IF A$="6" THEN GOTO 9000 3084 IF Y$<>A$ AND A$<>"5" THEN GOTO 2005 3085 CLS 3086 IF A$="5" THEN LET U$=" AMORTIZATION" 3087 IF A$="5" THEN GOTO 8200 3088 LET Y$=A$ 3090 IF Y$="1" THEN LET U$=" HOUSE " 3091 IF Y$="2" THEN LET U$=" CAR " 3092 IF Y$="4" THEN LET U$=" LOAN " 3093 IF Y$="3" THEN LET U$=" SAVING" 3095 GOTO 5000 3100 CLS 3103 PRINT AT 1,8;U$ 3105 PRINT AT 3,12;"HELP" 3106 PRINT AT 4,12;"▀▀▀▀" 3110 IF Y$="1" OR Y$="2" THEN GOTO 3200 3120 IF Y$="3" THEN GOTO 3400 3130 IF Y$="4" OR Y$="5" THEN GOTO 3600 3200 PRINT AT 6,3;"N = NUMBER OF MONTHS" 3210 PRINT AT 8,3;"I = MONTH INTEREST RATE" 3220 PRINT AT 10,3;"PMT= MONTH PAYMENT" 3230 LET Z$=" " 3240 IF Y$="2" THEN LET Z$="( TRADE IN)" 3250 PRINT AT 12,3;"PV = PRICE-DOWN PMT";Z$ 3360 PRINT AT 14,3;"FV = FUTURE BALANCE" 3370 GOTO 8500 3400 PRINT AT 5,5;"N= COMPOUNDING PERIODS" 3410 PRINT AT 7,5;"I= PERIODIC INTEREST RATE" 3420 PRINT AT 9,3;"PMT= PERIODIC DEPOSIT" 3430 PRINT AT 11,4;"PV= PRESENT BALANCE" 3440 PRINT AT 13,4;"FV= FUTURE BALANCE" 3450 GOTO 8500 3600 PRINT AT 5,5;"N= COMPOUNDING PERIODS" 3610 PRINT AT 7,5;"I= PERIODIC INTEREST RATE" 3620 PRINT AT 9,3;"PMT= PERIODIC PAYMENT" 3630 PRINT AT 11,4;"PV= TOTAL LOAN AMOUNT" 3640 PRINT AT 13,4;"FV= FUTURE BALANCE" 3650 GOTO 8500 4000 FOR J=1 TO 17 STEP 2 4003 FOR J=1 TO 17 4005 PRINT AT J,0;" " 4010 NEXT J 4020 RETURN 4100 LET X$="1" 4105 CLS 4107 PRINT AT 1,8;U$ 4108 PRINT AT 3,9;"CALCULATION" 4109 PRINT AT 4,9;"▀▀▀▀▀▀▀▀▀▀▀" 4110 PRINT AT 6,1;"PLEASE PRESS: " 4112 PRINT AT 8,5;"1 FOR N" 4114 PRINT AT 9,5;"2 FOR I" 4116 PRINT AT 10,5;"3 FOR PMT" 4118 PRINT AT 11,5;"4 FOR PV" 4120 PRINT AT 12,5;"5 FOR FV" 4130 PRINT AT 13,5;"6 FOR CHANGE DATA" 4135 PRINT AT 14,5;"7 FOR OTHERS" 4140 GOSUB 5072 4150 GOTO 5080 5000 LET X$="0" 5001 CLS 5002 PRINT AT 1,8;U$ 5003 PRINT AT 3,10;"DATA ENTRY" 5004 PRINT AT 4,10;"▀▀▀▀▀▀▀▀▀▀" 5005 PRINT AT 6,1;"PLEASE PRESS: " 5008 PRINT AT 8,5;"0 FOR BEG/END " 5010 PRINT AT 9,5;"1 FOR N (PERIODS)" 5020 PRINT AT 10,5;"2 FOR I (INTEREST)" 5030 PRINT AT 11,5;"3 FOR PMT(PAYMENT)" 5040 PRINT AT 12,5;"4 FOR PV (PRESENT VALUE)" 5050 PRINT AT 13,5;"5 FOR FV (FUTURE VALUE)" 5060 IF Y$<>"5" THEN PRINT AT 14,5;"6 FOR CALCULATION" 5063 IF Y$="5" THEN PRINT AT 14,5;"6 FOR SCHEDULE" 5065 PRINT AT 15,5;"7 FOR HELP" 5066 PRINT AT 16,5;"8 FOR OTHERS" 5068 GOSUB 5072 5070 GOTO 5080 5072 PRINT AT 18,0;"--------------------------------" 5073 PRINT AT 19,1;"BEG/END= ";S$;TAB 16;" N= ";N$ 5074 PRINT AT 20,1;" I= ";I$;TAB 16;"PMT= ";M$ 5075 PRINT AT 21,1;"PV= ";P$;TAB 16;" FV= ";F$ 5077 RETURN 5080 LET A$=INKEY$ 5082 IF A$CHR$ 36 THEN GOTO 5080 5084 IF A$="8" AND X$="0" THEN GOTO 3000 5085 IF A$="7" AND X$="0" THEN GOTO 3100 5086 IF A$="7" AND X$="1" THEN GOTO 3000 5087 IF A$="6" AND Y$="5" AND X$="0" THEN GOTO 8200 5088 IF A$="6" AND Y$<>"5" AND X$="0" THEN GOTO 4100 5089 CLS 5090 IF A$="1" THEN GOTO 5300 5100 IF A$="2" THEN GOTO 5500 5110 IF A$="3" THEN GOTO 5700 5120 IF A$="4" THEN GOTO 5900 5130 IF A$="5" THEN GOTO 6100 5140 IF A$="0" AND X$="0" THEN GOTO 6300 5150 IF A$="6" AND X$="1" THEN GOTO 5000 5160 GOTO 5080 5300 REM "NUM" 5310 IF X$="0" THEN GOTO 5400 5320 LET N=-(LN ((-P-(1+I*S)*M/I)/(F-(1+I*S)/I*M))/LN (1+I)) 5330 CLS 5340 LET N$=STR$ (INT (N*100+0.5)/100) 5350 PRINT AT 5,3;"NUMBER OF PERIODS= ";N$ 5360 GOTO 7000 5400 PRINT AT 2,1;"NUMBER OF PERIODS=?" 5410 GOSUB 5072 5420 INPUT N 5425 LET N$=STR$ (INT (N*100+0.5)/100) 5430 CLS 5440 GOTO 5000 5500 REM INT 5510 IF X$="0" THEN GOTO 5600 5520 LET U=0.002 5522 LET C=85 5524 LET W=0 5525 IF M<>0 THEN GOTO 5540 5526 LET T=((F/-P)**(1/N)-1)*100 5530 LET I=T/100 5535 GOTO 5580 5540 IF U<1E-8 OR U>85-1E-8 THEN GOTO 8000 5545 LET Q=(-P-F*(1+U)**(-N))/((1+U*S)*(1-(1+U)**(-N)))*U 5560 IF INT (Q*1000)<>INT (M*1000) THEN GOTO 5570 5562 LET I=U 5564 LET T=I*100 5566 GOTO 5580 5570 IF QM AND P<=0 THEN LET C=U 5574 IF Q0 THEN LET C=U 5576 IF Q>M AND P>0 THEN LET W=U 5578 LET U=W+(C-W)/2 5579 GOTO 5540 5580 LET I$=STR$ (INT (T*100+0.5)/100) 5590 PRINT AT 5,3;"INTEREST RATE= ";I$ 5595 GOTO 7000 5600 PRINT AT 2,1;"INTEREST RATE=?" 5605 PRINT AT 3,1;"(ANNUAL INTEREST / 12)" 5610 GOSUB 5072 5620 INPUT T 5630 LET I=T/100 5640 LET I$=STR$ (INT (T*100+0.5)/100) 5645 CLS 5650 GOTO 5000 5700 REM PMT 5710 IF X$="0" THEN GOTO 5800 5720 LET M=(-P-F*(1+I)**(-N))/((1+I*S)*(1-(1+I)**(-N)))*I 5730 LET M$=STR$ (INT (M*100+0.5)/100) 5740 IF Y$<>"3" THEN PRINT AT 5,3;"PAYMENT= ";M$ 5745 IF Y$="3" THEN PRINT AT 5,3;"DEPOSIT= ";M$ 5750 GOTO 7000 5800 IF Y$<>"3" THEN PRINT AT 2,1;"PAYMENT= ?" 5805 IF Y$="3" THEN PRINT AT 2,1;"DEPOSIT= ?" 5810 GOSUB 5072 5820 INPUT M 5830 LET M$=STR$ (INT (M*100+0.5)/100) 5840 CLS 5850 GOTO 5000 5900 REM PV 5910 IF X$="0" THEN GOTO 6000 5920 LET P=-(M*(1+I*S)/I*(1-(1+I)**(-N))+F*(1+I)**(-N)) 5930 LET P$=STR$ (INT (P*100+0.5)/100) 5940 PRINT AT 5,3;"PRESENT VALUE= ";P$ 5950 GOTO 7000 6000 PRINT AT 2,1;"PRESENT VALUE=?" 6010 GOSUB 5072 6020 INPUT P 6030 LET P$=STR$ (INT (P*100+0.5)/100) 6040 CLS 6050 GOTO 5000 6100 REM FV 6110 IF X$="0" THEN GOTO 6200 6120 LET F=(-M*(1+I*S)*(1-(1+I)**(-N))/I-P)/((1+I)**(-N)) 6130 LET F$=STR$ (INT (F*100+0.5)/100) 6140 PRINT AT 5,3;"FUTURE VALUE= ";F$ 6150 GOTO 7000 6200 PRINT AT 2,1;"FUTURE VALUE=?" 6210 GOSUB 5072 6220 INPUT F 6230 LET F$=STR$ (INT (F*100+0.5)/100) 6240 CLS 6250 GOTO 5000 6300 PRINT AT 2,1;"BEGIN/END(1/0)=?" 6310 GOSUB 5072 6320 INPUT S 6325 IF S<>1 AND S<>0 THEN GOTO 6320 6330 IF S=0 THEN LET S$="END" 6340 IF S=1 THEN LET S$="BEG" 6350 CLS 6360 GOTO 5000 7000 PRINT AT 15,3;"PLEASE PRESS:" 7010 PRINT AT 17,5;"1 FOR CONTINUE" 7020 PRINT AT 19,5;"2 FOR OTHERS" 7025 PRINT AT 21,5;"3 FOR END PROGRAM" 7030 LET A$=INKEY$ 7040 IF A$="1" THEN GOTO 5000 7050 IF A$="3" THEN GOTO 9000 7055 IF A$="2" THEN GOTO 3000 7060 GOTO 7030 7100 REM AMORTIZE 7110 CLS 7120 LET K=1 7130 LET D$="0" 7140 LET E=0 7150 LET G=0 7160 PRINT AT 2,1;"START PERIOD(1--";N;")=?" 7170 PRINT AT 4,1;E 7180 INPUT E 7190 IF E<1 OR E>N OR INT EN OR INT G1 OR J<>1 THEN GOTO 7400 7360 LET L=0 7365 LET R=ABS M 7370 LET B=ABS P-ABS M 7380 GOTO 7500 7400 LET L=ABS (B*I) 7420 LET L=INT (L*100+0.5)/100 7430 LET R=VAL B$ 7440 LET B=(ABS M*((1+I)**(-J)-1)/I+ABS P)/(1+I)**(-J) 7450 LET B$=STR$ (INT (B*100+0.5)/100) 7460 LET R=R-VAL B$ 7500 LET R=INT (R*100+0.5)/100 7505 IF D$="1" THEN GOTO 7600 7510 PRINT AT 5,5;"AMORTIZATION SCHEDULE" 7520 PRINT AT 6,5;"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄" 7530 PRINT AT 8,6;" PRINCIPAL: ";P$ 7540 PRINT AT 10,6;" INTEREST: ";I$ 7550 PRINT AT 12,6;" PERIODS: ";N$ 7560 PRINT AT 14,6;" PAYMENT: ";VAL M$ 7570 PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **" 7572 LET A$=INKEY$ 7575 IF A$="" THEN GOTO 7572 7580 LET D$="1" 7590 CLS 7600 IF K<>1 THEN GOTO 7700 7610 PRINT AT 1,0;"N PRINCIPAL INTEREST BALANCE" 7620 PRINT AT 2,0;"--------------------------------" 7630 LET X=3 7640 LET K=K+2 7700 PRINT AT K,0;STR$ J;TAB 4;R;TAB 13;L;TAB 22;VAL B$ 7710 LET K=K+1 7720 IF K=20 THEN LET K=1 7721 IF K=1 THEN PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **" 7723 IF K=1 THEN LET A$=INKEY$ 7724 IF K=1 AND A$="" THEN GOTO 7723 7725 IF K=1 THEN CLS 7730 LET H=H+L 7740 LET W=W+R 7750 NEXT J 7752 IF K+4>19 THEN PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **" 7753 IF K+4<20 THEN GOTO 7760 7755 LET A$=INKEY$ 7756 IF A$="" THEN GOTO 7755 7760 LET K=K+1 7780 IF K+4<20 THEN GOTO 7800 7790 CLS 7795 LET K=2 7800 PRINT AT K,1;"TOTALS FOR PERIODS ";E;" TO ";G 7810 PRINT AT K+2,5;"PRINCIPAL: ";W 7820 PRINT AT K+4,5;"INTEREST : ";H 7830 PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **" 7840 LET A$=INKEY$ 7850 IF A$="" THEN GOTO 7840 7855 CLS 7860 GOTO 7000 8000 PRINT AT 5,3;"INTEREST OFF SCALE" 8010 GOTO 7000 8200 IF Y$="3" THEN GOTO 3000 8203 LET Y$="5" 8210 IF M=0 AND P=0 THEN GOTO 5000 8230 IF N=0 AND T=0 THEN GOTO 5000 8240 IF P<0 THEN LET M=ABS M 8250 IF P>0 THEN LET M=-1*ABS M 8260 GOTO 7100 8500 PRINT AT 16,1;"POSITIVE(+)VALUES FOR CASH IN" 8510 PRINT AT 17,1;"NEGATIVE(-)VALUES FOR CASH OUT" 8520 PRINT AT 20,0;" ** PRESS ANY KEY FOR RETURN **" 8530 LET A$=INKEY$ 8540 IF A$="" THEN GOTO 8530 8545 CLS 8550 GOTO 5000 9000 CLS 9010 STOP 9950 SAVE "MONE[Y]" 9960 RUN ```