This listing actually contains three separate programs concatenated together.
The first is a 555 timer calculator (lines 1–9999) that computes astable and monostable operating parameters—frequency, high time, low time, and total period—using standard NE555 formulas (F = 1.44/((Ra+2Rb)×C), T = 1.1×Ra×C, etc.), with a schematic drawn using CIRCLE, PLOT, and DRAW commands and FLASH attributes to highlight active input fields.
The second program (lines 5–9497) is an interactive electronics circuit-design tool that maintains a 20×32 character grid (array c$) with a parallel weighting array w(), supports symbol rotation via an 8×8 bit-manipulation routine, and implements a two-pass circuit-tracing algorithm that propagates earth and power connections through a symbol connectivity table.
The third program (lines 10–680) is an RF resonant-circuit and air-core coil calculator that solves for unknown frequency, inductance, or capacitance using the formula F = 1000/(6.238×√(LC)) and determines maximum wire gauge from turns-per-inch density tables.
Overview and Program Boundaries
The listing contains three independent programs concatenated without separation markers:
- 555 Timer Calculator – lines
1–9999, saved as"TIMER"withLINE 5. - Electronics Circuit Designer – lines
5–9497(second block), a complex interactive CAD-like tool. - RF/Coil Calculator – lines
10–680(third block), saved as"HOMEBREW"withLINE 10.
Program 1: 555 Timer Calculator
Structure
The program presents a top-level menu (lines 20–110) branching to an astable section at line 400 or a monostable section at line 1200. The monostable section offers its own five-item sub-menu. A shared printer-copy subroutine lives at line 1160; a shared decision/navigation subroutine occupies lines 5500–6000.
Schematic Graphics
The 555 IC outline and surrounding components are drawn purely with CIRCLE, PLOT, and DRAW statements (lines 530–860 for astable; 1650–1970 for monostable). Pin labels are positioned with PRINT AT. FLASH 1/FLASH 0 brackets (e.g. lines 875/885) highlight the component being entered, giving a simple animated prompt effect.
Formulae
| Mode | Variable | Formula in BASIC |
|---|---|---|
| Astable | Frequency | H = 1.44 / ((A + 2*B) * C) |
| Astable | Output High time | T = 0.693 * (A + B) * C |
| Astable | Output Low time | S = 0.693 * B * C |
| Monostable | Output High time | T = 1.1 * Ra * C (C in µF via C1 * 0.001) |
Capacitance input is in µF for the astable path (C = C1 * 0.000001, line 960) but in nF for the monostable path (C = C1 * 0.001, line 3060). This inconsistency is not flagged to the user and could cause an order-of-magnitude error if the same capacitor value is entered in both modes without unit awareness.
Anomaly: Monostable “TIME & Ra KNOWN” (lines 5000–5120)
Line 5080 computes Rb = Ra * 1.1 * 0.001 — the variable is named Rb but in the monostable context there is no Rb; the intent appears to be computing an intermediate value equivalent to 1.1 * Ra / 1000 for unit conversion. Line 5090 then gives C = T * Rb, which does yield T = 1.1·Ra·C rearranged correctly, but the intermediate naming is misleading.
Copy Subroutine (lines 1160–1170)
The copy routine uses a busy-wait pattern at line 1162 (IF INKEY$="" THEN GO TO 1162) after a PAUSE 50 to wait for a keypress before issuing COPY. This is the standard screen-dump idiom.
Program 2: Electronics Circuit Designer
Data Structures
c$(20,32)— 20×32 character grid storing component symbols.w(20,32)— parallel numeric array; value16= earthed,32= powered,>55= unactivated component.o$— string of (row, column) byte pairs identifying connectable nodes, built by the subroutine at line5.i$()andy$()— symbol name and description arrays used for the catalogue display (lines9200–9420).q$()— per-symbol rotation state array; each element holds the current orientation as a digit"1"–"4".p$()— connectivity table; for each symbol type, lists which characters can connect in each direction.
Symbol Rotation (lines 78–390)
Rotation is performed in pure BASIC using two 8×8 string arrays (a$ and b$). The routine reads eight bytes from the UDG area via PEEK (line 110), decodes each byte bit-by-bit into a$(j,k) (lines 120–170), then performs a 90° clockwise transpose via the loop at lines 340–390 which reorders rows and re-encodes each byte back with POKE using a weighted sum (line 386). This is a notable technique: UDG redefinition at runtime to provide orientation variants without storing multiple bitmaps.
Circuit Activation / Tracing (lines 1002–1995)
The activation routine implements a two-pass flood-fill. Pass one (e$ = "W") searches for earth symbols; pass two (e$ = "X") searches for power. From each found terminal the algorithm walks the grid using the direction array a$ (values "1"–"4" for up/right/down/left) and the connectivity table p$ to determine which neighbours a symbol type can connect to. Visited cells have their w() value set to 32 (earth) or 16 (power) and are redisplayed with PAPER colouring. A deferred queue string f$ holds branching coordinates as raw character pairs to implement breadth-first traversal without a formal data structure.
Component Handling Dispatch (lines 2000–3670)
Line 2018 uses the computed GO TO idiom GO TO VAL a$(o)*20+g1 to dispatch to direction-specific handlers, where g1 and g2 are numeric variables holding line-number offsets. This avoids a chain of IF statements and is a classic Spectrum BASIC speed optimisation.
Save/Load with UDG Preservation (lines 9000–9090)
Before saving, the routine snapshots 512 bytes of UDG/font data from address 64512 into numeric array v() (lines 9002–9005). After SAVE "cct" LINE 9010 reloads, it copies the Spectrum’s ROM font from 15616–16383 into the UDG area at 64512+48896, then restores the saved UDG bytes (lines 9030–9076). This is a sophisticated self-contained font-management scheme.
Program 3: RF Resonant Circuit and Coil Calculator
Structure
A two-item menu (line 100) branches to the LC/F solver (line 160) or the coil parameter calculator (line 330). The LC solver accepts any one unknown as 0 and tests with IF NOT F, IF NOT L, IF C=0 — mixing two idioms for zero-testing.
Formulae
| Unknown | Formula | Notes |
|---|---|---|
| F (MHz) | 1000 / (6.238 * SQR(L*C)) | L in µH, C in pF; 6.238 ≈ 2π×√(10⁻¹²×10⁻⁶)×10⁶ scaling |
| L (µH) | 25330 / (F² × C) | Standard LC resonance rearrangement |
| C (pF) | 25330 / (F² × L) | As above |
| Turns T | SQR((Z * (9D + 10G)) / D²) | Wheeler formula for air-core solenoid |
Wire Gauge Table (lines 470–540)
The maximum wire gauge is determined from turns-per-inch density W = T/G against a lookup implemented as a cascade of IF W < threshold THEN PRINT ... : GO TO 550 statements, covering AWG #16 through #30. This is a straightforward linear search through fixed engineering data.
Content
Source Code
1 REM This program calculates unknown Timer values with input of two known values.
5 REM 5/1/84
6 REM Gary L Mueller
7 CLS
9 POKE 23609,100
10 PRINT AT 4,14;"555"
14 REM
15 REM **MENU**
16 REM
20 PRINT AT 5,13;"MENU"
30 PRINT AT 7,7;"1. ASTABLE OPERATIONS"
40 PRINT AT 9,7;"2. MONOSTABLE OPERATION"
50 PRINT AT 18,3;"INPUT CHOICE 1,2"
60 INPUT M
70 PRINT M
80 PAUSE 30
90 IF M=1 THEN GO TO 400
100 IF M=2 THEN GO TO 1200
110 IF M>2 THEN GO TO 50
400 CLS
404 REM
405 REM **ASTABLE GRAPHICS**
406 REM ********************
410 PRINT AT 1,3;"555"
420 PRINT AT 2,1;"ASTABLE"
430 PRINT AT 5,3;"OUTPUT"
440 PRINT AT 5,13;"316"
460 PRINT AT 0,20;"Vcc"
470 PRINT AT 2,13;"4 8"
480 PRINT AT 2,17;"Ra"
490 PRINT AT 3,13;"2 7"
510 PRINT AT 4,17;"Rb"
520 PRINT AT 6,17;"C"
530 CIRCLE 152,168,2
540 PLOT 150,168
550 DRAW -38,0
560 DRAW 0,-8
570 DRAW -10,0
580 DRAW 0,-33
590 DRAW 28,0
600 DRAW 0,33
610 DRAW -18,0
620 PLOT 116,128
630 DRAW 0,-16
640 DRAW 8,0
650 DRAW -16,0
660 PLOT 116,116
670 DRAW 23,0
680 DRAW 0,3
690 PLOT 130,132
700 DRAW 10,0
710 PLOT 140,136
720 DRAW 0,-8
730 PLOT 130,148
740 DRAW 10,0
750 PLOT 140,151
760 DRAW 0,-6
770 PLOT 140,168
780 DRAW 0,-8
790 PLOT 102,132
800 DRAW -10,0
810 CIRCLE 87,132,2
820 PLOT 112,144
830 DRAW 7,-7
840 PLOT 125,168
850 DRAW 0,-8
860 PRINT AT 10,18;"1000 Ms= 1 Sec"
864 REM
865 REM **END OF GRAPHICS**
866 REM
867 REM **ASTABLE VALUES INPUT*
868 REM
870 PRINT AT 9,0;"INPUT Ra"
875 PRINT AT 2,17; FLASH 1;"Ra"
880 INPUT A
885 PRINT AT 2,17; FLASH 0;"Ra"
890 PRINT AT 9,10;A
900 PRINT AT 10,0;"INPUT Rb"
905 PRINT AT 4,17; FLASH 1;"Rb"
910 INPUT B
915 PRINT AT 4,17; FLASH 0;"Rb"
920 PRINT AT 10,10;B
930 PRINT AT 11,0;"INPUT C"
935 PRINT AT 6,17; FLASH 1;"C"
940 INPUT C1
945 PRINT AT 6,17; FLASH 0;"C"
950 PRINT AT 11,10;C1
954 REM
955 REM *PROCESSING AND OUTPUT*
956 REM
960 LET C=C1*.000001
970 LET F=(A+2*B)*C
980 LET H=1.44/F
990 PRINT AT 13,0;"FREQUENCY IS ";H;" Hz"
1010 PRINT
1020 LET T=.693*(A+B)*C
1030 PRINT AT 15,0;"OUTPUT HIGH ";T;" Sec"
1040 LET S=.693*B*C
1050 PRINT "OUTPUT LOW ";S;" Sec"
1060 LET U=S+T
1070 PRINT "TOTAL PERIOD ";U;" Sec"
1080 PRINT AT 21,0;"WANT COPY? Y/N"
1090 INPUT Y$
1100 IF Y$="Y" THEN GO SUB 1160
1110 PRINT AT 21,0;"WANT ANOTHER VALUE Y/N?"
1120 INPUT Y$
1140 IF Y$="Y" THEN GO TO 400
1150 PRINT AT 21,0;"WANT MENU? Y/N "
1152 INPUT Y$
1153 IF Y$="N" THEN GO TO 6035
1154 IF Y$="Y" THEN GO TO 7
1155 IF Y$<>"Y" THEN GO TO 1150
1157 REM
1158 REM **COPY SUBROUTINE**
1159 REM
1160 PRINT AT 21,0;"SET UP PRINTER AND PRESS A KEY"
1161 PAUSE 50
1162 IF INKEY$="" THEN GO TO 1162
1163 PRINT AT 21,0;" "
1164 COPY
1170 RETURN
1199 REM
1200 REM MONOSTABLE
1201 REM **********************
1205 REM **MENU**
1206 CLS
1208 PRINT AT 1,5;"555";AT 2,2;"MONOSTABLE"
1210 PRINT AT 4,14;"MENU"
1220 PRINT AT 5,5;"----------------------"
1230 PRINT AT 7,5;"1. CONVERT INPUT Hz TO Ms"
1240 PRINT AT 9,5;"2. Ra & C KNOWN"
1250 PRINT AT 11,5;"3. TIME & C KNOWN"
1260 PRINT AT 13,5;"4. TIME & Ra KNOWN"
1265 PRINT AT 15,5;"5. ASTABLE OPERATION"
1270 PRINT AT 18,3;"INPUT CHOICE 1,2,3,4,5"
1280 INPUT M
1290 PRINT M
1300 PAUSE 30
1310 CLS
1330 IF M=1 THEN GO TO 2000
1340 IF M=2 THEN GO TO 3000
1350 IF M=3 THEN GO TO 4000
1360 IF M=4 THEN GO TO 5000
1370 IF M=5 THEN GO TO 400
1380 IF M>5 THEN GO TO 1270
1549 REM
1550 REM **MONOSTABLE GRAPHICS**
1551 REM ***********************
1599 CLS
1600 PRINT AT 5,3;"OUTPUT"
1605 PRINT AT 5,13;"316"
1610 PRINT AT 0,20;"Vcc"
1620 PRINT AT 2,13;"4 8"
1625 PRINT AT 2,17;"Ra"
1630 PRINT AT 3,13;"2 7"
1640 PRINT AT 6,17;"C"
1650 CIRCLE 152,168,2
1660 PLOT 150,168
1670 DRAW -38,0
1680 DRAW 0,-8
1690 DRAW -10,0
1700 DRAW 0,-33
1710 DRAW 28,0
1720 DRAW 0,33
1730 DRAW -18,0
1740 PLOT 116,128
1750 DRAW 0,-16
1760 DRAW 8,0
1770 DRAW -16,0
1780 PLOT 116,116
1790 DRAW 23,0
1800 DRAW 0,3
1810 PLOT 130,132
1820 DRAW 10,0
1850 PLOT 130,148
1860 DRAW 10,0
1870 PLOT 140,151
1880 DRAW 0,-24
1890 PLOT 140,168
1900 DRAW 0,-8
1910 PLOT 102,132
1920 DRAW -10,0
1930 CIRCLE 87,132,2
1940 PLOT 102,148
1950 DRAW -10,0
1955 CIRCLE 87,148,2
1956 PRINT AT 3,2;"TRIGGER"
1960 PLOT 125,168
1970 DRAW 0,-8
1972 PRINT AT 4,19;"1000 Ms=1 Sec"
1974 REM
1975 REM **END OF GRAPHICS**
1976 REM
1980 RETURN
1990 STOP
1999 REM
2000 REM **CONVERT INPUT Hz TO Ms**
2001 REM ******************
2005 CLS
2010 PRINT AT 5,0;"**CONVERT INPUT Hz TO Ms**"
2020 PRINT AT 7,0;"INPUT Hz"
2030 INPUT Hz
2040 LET X=1000/Hz
2050 PRINT AT 9,0;"Hz= ";X;" Ms"
2060 PRINT AT 12,0;"Copy Value Down"
2070 PAUSE 300
2080 GO TO 1206
2999 REM
3000 REM **Ra & C KNOWN**
3001 REM *************************
3005 CLS
3010 GO SUB 1599
3015 PRINT AT 9,0;"**Ra & C KNOWN**"
3020 PRINT AT 11,0;"INPUT Ra "
3025 PRINT AT 2,17; FLASH 1;"Ra"
3030 INPUT Ra
3035 PRINT AT 2,17; FLASH 0;"Ra"
3040 PRINT AT 11,10;Ra
3050 PRINT AT 12,0;"INPUT C "
3051 PRINT AT 6,17; FLASH 1;"C"
3052 INPUT C1
3055 PRINT AT 6,17; FLASH 0;"C"
3057 PRINT AT 12,10;C1
3060 LET C=C1*.001
3070 LET T=1.1*Ra*C
3075 LET S=T/1000
3080 PRINT AT 15,0;"Output High is ";T;" Ms"
3082 PRINT AT 17,0;"Or ";S;" Sec"
3085 GO SUB 5500
3086 GO TO 3005
3999 REM
4000 REM **TIME & C KNOWN**
4001 REM **********************
4005 CLS
4010 GO SUB 1599
4015 PRINT AT 9,0;"**TIME & C KNOWN**"
4020 PRINT AT 11,0;"INPUT TIME IN Ms "
4030 INPUT T
4040 PRINT AT 11,18;T
4050 PRINT AT 12,0;"INPUT C "
4055 PRINT AT 6,17; FLASH 1;"C"
4060 INPUT C1
4065 PRINT AT 6,17; FLASH 0;"C"
4070 PRINT AT 12,10;C1
4080 LET C=(C1*.001)*1.1
4090 LET Ra=T/C
4100 PRINT AT 15,0;"Ra= ";Ra
4110 GO SUB 5500
4120 GO TO 4005
5000 REM **TIME & Ra KNOWN**
5001 REM *************************
5005 CLS
5010 GO SUB 1599
5015 PRINT AT 9,0;"**TIME & Ra KNOWN**"
5020 PRINT AT 11,0;"INPUT TIME IN Ms"
5030 INPUT T
5040 PRINT AT 11,18;T
5050 PRINT AT 12,0;"INPUT Ra"
5055 PRINT AT 2,17; FLASH 1;"Ra"
5060 INPUT Ra
5065 PRINT AT 2,17; FLASH 0;"Ra"
5070 PRINT AT 12,10;Ra
5080 LET Rb=Ra*1.1*.001
5085 PRINT Rb
5090 LET C=T*Rb
5100 PRINT AT 15,0;"C= ";C
5110 GO SUB 5500
5120 GO TO 5005
5500 REM
5510 REM *DECISION ROUTINE*
5520 REM
5530 PRINT AT 21,0;"COPY TO PRINTER? Y/N"
5540 INPUT Y$
5550 IF Y$="Y" THEN GO SUB 1160
5560 PRINT AT 21,0;"WANT NEW VALUE? Y/N "
5570 INPUT Y$
5580 IF Y$="Y" THEN RETURN
5590 PRINT AT 21,0;"WANT MENU? Y/N "
5600 INPUT M$
5610 IF M$="Y" THEN GO TO 1206
6000 CLS
6010 PRINT "PROCESSING ENDED-NEED MORE DATA? Y/N"
6020 INPUT A$
6030 IF A$="Y" THEN GO TO 7
6035 CLS
6040 PRINT AT 10,10;"GOODBYE"
6045 PAUSE 100
6050 CLS
7000 STOP
9898 REM
9899 REM *PROGRAM SAVE & AUTO RUN**
9900 SAVE "TIMER" LINE 5
9999 REM **END OF PROGRAM**
5 LET o$=""
10 FOR j=1 TO 20: FOR k=1 TO 32
12 LET e=CODE c$(j,k)
14 IF e=49 OR e=50 OR (e>51 AND e<87 AND e<>71 AND e<>72 AND e<>73 AND e<>80 AND e<>81 AND e<>83) THEN LET o$=o$+CHR$ j+CHR$ k
18 NEXT k: NEXT j
20 RETURN
22 CLS
26 FOR j=1 TO 20: FOR k=1 TO 32: PRINT c$(j,k);: LET w(j,k)=CODE c$(j,k)+100: NEXT k: NEXT j
36 IF e$="f" THEN GO TO 42
40 GO TO 500
42 COPY
44 GO TO 8000
67 IF u$="1" THEN GO TO 8000
68 GO TO 22
78 LET r=64511+8*(CODE g$-32)
80 DIM a$(8,8): DIM b$(8,8)
90 LET d=r
100 FOR j=1 TO 8
110 LET d=d+1: LET e=PEEK d
120 FOR k=8 TO 1 STEP -1
130 LET t=INT (e/2)
140 IF e/2<>t THEN LET a$(j,k)="!"
150 LET b$(j,k)=a$(j,k): LET e=t
170 NEXT k: NEXT j
330 LET x=9
340 FOR j=1 TO 8
350 LET x=x-1
360 FOR k=1 TO 8
370 LET a$(j,k)=CHR$ (CODE b$(k,x)-32): NEXT k
385 LET r=r+1
386 POKE r,(128*CODE a$(j,1)+64*CODE a$(j,2)+32*CODE a$(j,3)+16*CODE a$(j,4)+8*CODE a$(j,5)+4*CODE a$(j,6)+2*CODE a$(j,7)+CODE a$(j,8))
390 NEXT j
395 GO SUB 420
400 CLS : FOR j=1 TO 20: FOR k=1 TO 32: PRINT c$(j,k);: NEXT k: NEXT j
410 GO TO 560
420 IF g$<>"G" AND g$<>"H" AND g$<>"I" AND g$<>"P" AND g$<>"S" THEN GO TO 440
430 RETURN
440 LET j$=q$(CODE g$-56)
450 IF j$="4" THEN LET j$="0"
455 LET j$=STR$ (VAL j$+1): LET q$(CODE g$-56)=j$
470 RETURN
480 LET t=1
490 GO TO 585
502 LET t=0: LET g$=" ": LET s=10: LET c=16
555 IF INKEY$<>"" THEN GO TO 555
560 PRINT AT s,c;"_"
565 PRINT AT 21,15;g$
570 IF INKEY$="" THEN GO TO 600
580 LET e$=INKEY$
583 IF e$="1" THEN GO TO 480
585 IF e$="0" THEN LET t=0
590 GO TO 620
600 PRINT AT s,c;" "
610 GO TO 560
620 IF e$="0" OR e$="1" THEN LET g$=" "
622 IF e$="0" OR e$="1" THEN GO TO 630
624 IF CODE e$<53 OR CODE e$>56 THEN GO TO 750
630 PRINT AT s,c;"_"
631 IF t=1 THEN GO TO 635
632 LET c$(s+1,c+1)=g$: LET w(s+1,c+1)=56: LET e=CODE g$
636 PRINT AT s,c;g$
637 IF t=1 THEN PRINT AT s,c;c$(s+1,c+1)
640 IF e$="5" THEN LET c=c-1
650 IF e$="6" THEN LET s=s+1
660 IF e$="7" THEN LET s=s-1
670 IF e$="8" THEN LET c=c+1
680 IF c<0 THEN LET c=0
690 IF c>31 THEN LET c=31
700 IF s<0 THEN LET s=0
710 IF s>19 THEN LET s=19
730 GO TO 560
755 LET t=0
760 POKE 23607,60
762 PRINT AT 20,0;"Enter code or C-copy A-activate": PRINT "D-de activate R-rotate M-menu"
770 INPUT j$
775 POKE 23607,251
780 PRINT AT 20,0;v$;v$
783 IF LEN j$=1 THEN GO TO 900
785 LET x=0
790 FOR j=1 TO 56
810 LET h$=i$(j)
820 IF j$=h$ THEN GO TO 850
830 NEXT j
840 GO TO 760
850 LET g$=CHR$ (j+32)
870 GO TO 570
900 IF j$<>"c" AND j$<>"r" AND j$<>"m" AND j$<>"d" AND j$<>"a" THEN GO TO 760
903 IF j$="c" THEN GO TO 9490
905 IF j$="r" AND CODE g$>56 THEN GO TO 74
906 IF j$="r" THEN PRINT AT 20,0;"sorry not a rotatable symbol"
907 IF j$="r" THEN GO TO 770
908 IF j$<>"a" THEN CLS
910 IF j$="d" THEN GO TO 56
930 IF j$="m" THEN GO TO 8000
1002 LET e$="W"
1006 LET f$=""
1007 LET f=0
1010 IF e$="W" THEN PRINT AT 21,5;"searching for earths"
1015 IF e$="X" THEN PRINT AT 21,5;"searching for power"
1020 FOR j=1 TO 20: FOR k=1 TO 32
1035 IF c$(j,k)="W" AND e$="W" THEN GO TO 1080
1040 IF e$="X" AND c$(j,k)="X" THEN GO TO 1080
1050 NEXT k: NEXT j
1067 IF e$="X" THEN GO TO 1073
1070 PRINT AT 20,0; INK 4;"incomplete circuit no earths"
1071 LET t=0
1072 GO TO 770
1073 PRINT AT 20,0; INK 2;"incomplete circuit no power"
1074 LET t=0
1075 GO TO 770
1077 PRINT AT 20,0; INK 3;"looks expensive short circuit"
1078 LET t=0
1079 GO TO 770
1085 LET l$="0"
1090 PRINT AT 20,0;v$;v$
1110 DIM a$(4)
1112 LET a$="1234"
1115 IF j=1 OR j=20 OR k=1 OR k=32 THEN DIM a$(3)
1120 IF j=1 THEN LET a$="234"
1125 IF j=20 THEN LET a$="124"
1130 IF k=1 THEN LET a$="123"
1135 IF k=32 THEN LET a$="134"
1155 IF (j=1 AND k=32) OR (j=1 AND k=1) OR (j=20 AND k=32) OR (j=20 AND k=1) THEN DIM a$(2)
1160 IF j=1 AND k=32 THEN LET a$="34"
1170 IF j=20 AND k=32 THEN LET a$="14"
1175 IF j=20 AND k=1 THEN LET a$="12"
1180 IF j=1 AND k=1 THEN LET a$="23"
1191 IF f=1 THEN GO TO 2000
1195 FOR m=1 TO LEN a$
1200 LET n=0
1220 GO TO VAL a$(m)*20+1230
1230 NEXT m
1232 LET ta=0
1235 IF LEN f$>0 THEN GO TO 1730
1237 IF ta=1 THEN GO TO 1110
1238 IF u=1 AND f>1 THEN GO TO 1885
1239 IF e$="W" THEN GO TO 1242
1240 IF f>1 THEN GO TO 1950
1241 GO TO 1800
1242 LET e$="X"
1243 IF f>1 THEN GO TO 1950
1245 GO TO 1005
1250 LET e=j-2
1252 IF j=2 THEN LET e=j
1255 LET k$=c$(j-1,k)+c$(e,k)+CHR$ 1+CHR$ 0+CHR$ 1+CHR$ (j-1)+CHR$ k+CHR$ (w(j-1,k))
1260 GO TO 1350
1270 LET e=k+2
1272 IF k=31 THEN LET e=k
1275 LET k$=c$(j,k+1)+c$(j,e)+CHR$ 2+CHR$ 1+CHR$ 2+CHR$ j+CHR$ (k+1)+CHR$ (w(j,k+1))
1280 GO TO 1350
1290 LET e=j+2
1292 IF j=19 THEN LET e=j
1295 LET k$=c$(j+1,k)+c$(e,k)+CHR$ 3+CHR$ 2+CHR$ 1+CHR$ (j+1)+CHR$ k+CHR$ (w(j+1,k))
1300 GO TO 1350
1310 LET e=k-2
1320 IF k=2 THEN LET e=k
1330 LET k$=c$(j,k-1)+c$(j,e)+CHR$ 4+CHR$ 1+CHR$ 0+CHR$ j+CHR$ (k-1)+CHR$ (w(j,k-1))
1354 IF a$(m)="1" AND l$="3" OR a$(m)="2" AND l$="4" OR a$(m)="3" AND l$="1" OR a$(m)="4" AND l$="2" THEN GO TO 1230
1355 IF (e$="W" AND k$(1)="X") OR (e$="X" AND k$(1)="W") THEN GO TO 1076
1356 IF e$="W" AND CODE k$(8)=32 THEN GO TO 1230
1357 IF e$="X" AND CODE k$(8)=16 THEN GO TO 1230
1358 IF CODE k$(1)=34 THEN GO TO 1490
1360 IF CODE k$(1)=33 THEN GO TO 1570
1380 FOR a=1 TO 11
1385 LET e=CODE p$(CODE k$(3),a)
1390 IF k$(1)=CHR$ e THEN LET n=1
1400 IF a=2 AND n=1 THEN GO TO 1230
1410 IF n=1 THEN GO TO 1440
1420 NEXT a
1430 GO TO 1230
1440 LET k=k-1+CODE k$(5): LET j=j-1+CODE k$(4)
1460 IF e$="W" THEN LET w(j,k)=32
1465 IF e$="X" THEN LET w(j,k)=16
1470 PRINT AT j-1,k-1; PAPER (w(j,k)/8);c$(j,k)
1472 IF e$="W" THEN PRINT AT 21,5;"searching for earths"
1473 IF e$="X" THEN PRINT AT 21,5;"searching for power"
1475 LET l$=a$(m): LET u=1
1478 IF INKEY$="h" THEN GO TO 1485
1480 GO TO 1110
1485 PRINT AT 21,0;"circuit frozen please continue"
1486 GO TO 555
1490 FOR a=1 TO 11
1500 IF k$(2)=p$(CODE k$(3),a) THEN GO TO 1530
1510 NEXT a
1520 GO TO 1230
1530 LET k=k-1+CODE k$(5): LET j=j-1+CODE k$(4)
1550 GO TO 1440
1570 LET f$=f$+k$(6)+k$(7)
1580 LET f$=f$+k$(6)+k$(7)
1590 GO TO 1380
1740 LET ta=1: LET j=CODE f$(1): LET k=CODE f$(2): LET f$=f$(3 TO ): LET l$="0"
1780 GO TO 1237
1810 GO SUB 5
1870 IF LEN o$>0 THEN GO TO 1900
1880 GO TO 560
1885 LET u=0
1900 FOR g=1 TO LEN o$-1 STEP 2
1905 LET f=1
1910 LET j=CODE o$(g): LET k=CODE o$(g+1)
1925 LET l$="0"
1930 GO TO 1110
1950 NEXT g
1960 IF f>1 AND u=1 THEN GO TO 1885
1970 PRINT AT 21,2; FLASH 1;"complete-any key to continue"
1980 PAUSE 0
1985 PRINT AT 21,2;" "
1995 GO TO 560
2000 LET j$="0"
2001 LET q=16
2002 IF j<20 THEN LET d=w(j+1,k)
2003 IF j>1 THEN LET e=w(j-1,k)
2004 IF k<32 THEN LET t=w(j,k+1)
2005 IF k>1 THEN LET h=w(j,k-1)
2006 LET w$=c$(j,k): LET wd=w(j,k): LET e$="X"
2012 IF w$="T" OR w$="U" THEN GO TO 2400
2013 FOR o=1 TO LEN a$
2015 IF CODE w$>56 AND CODE w$<69 THEN GO TO 2500
2016 IF w$="1" OR w$="2" THEN GO TO 3600
2018 GO TO VAL a$(o)*20+g1
2020 NEXT o
2030 GO TO 1950
2040 IF e=q THEN GO TO g2
2050 GO TO g1
2060 IF t=q THEN GO TO g2
2070 GO TO g1
2080 IF d=q THEN GO TO g2
2090 GO TO g1
2100 IF h=q THEN GO TO g2
2110 GO TO g1
2122 IF CODE w$>56 THEN GO TO 2250
2125 FOR p=1 TO LEN a$
2130 IF w$="7" AND a$(o)="1" AND a$(p)="3" THEN GO TO 2200
2140 IF w$="6" AND a$(o)="2" AND a$(p)="4" THEN GO TO 2200
2150 IF w$="5" AND a$(o)="3" AND a$(p)="1" THEN GO TO 2200
2160 IF w$="8" AND a$(o)="4" AND a$(p)="2" THEN GO TO 2200
2170 NEXT p
2180 GO TO g1
2200 LET f=2
2210 LET j$=a$(p)
2220 DIM a$(1)
2230 LET a$=j$
2240 GO TO 1192
2255 LET f=3
2270 IF w$="E" OR w$="V" THEN GO TO 2320
2280 IF w$="F" THEN GO TO 2360
2300 GO TO 2500
2320 LET r$="1432"
2322 IF w$="V" THEN LET w$=q$(30)
2324 IF w$="E" THEN LET w$=q$(13)
2330 LET j$=r$(VAL w$)
2340 GO TO 2220
2360 LET r$="4321"
2370 LET j$=r$(VAL q$(14))
2380 GO TO 2220
2400 LET f=3
2402 LET r$="1432"
2404 IF w$="T" THEN LET w$=q$(28)
2405 IF w$="U" THEN LET w$=q$(29)
2407 IF (w$="1" AND d=32) OR (w$="2" AND t=32) OR (w$="3" AND e=32) OR (w$="4" AND h=32) THEN LET e$="W"
2408 IF (w$="1" AND d>32) OR (w$="2" AND t>32) OR (w$="3" AND e>32) OR (w$="4" AND h>32) THEN GO TO 1950
2410 LET j$=r$(VAL w$)
2411 IF w$="1" AND j>1 THEN LET j=j-1
2412 IF w$="2" AND k<32 THEN LET k=k+1
2413 IF w$="3" AND j<32 THEN LET j=j+1
2414 IF w$="4" AND k>1 THEN LET k=k-1
2415 GO TO 2220
2500 IF j<2 OR j>31 OR k<2 OR k>31 THEN GO TO 1950
2501 LET f=4
2603 IF CODE w$>56 AND CODE w$<69 THEN GO TO 3040
2610 IF w$="J" THEN GO TO 2740
2613 IF CODE w$>74 AND CODE w$<79 THEN GO TO 2800
2620 IF w$="O" THEN GO TO 2630
2622 IF w$="R" THEN GO TO 2680
2630 LET r=VAL q$(23)
2635 IF r=1 AND d=q AND t=q THEN LET j$="1"
2640 IF r=2 AND t=q AND e=q THEN LET j$="4"
2650 IF r=3 AND e=q AND h=q THEN LET j$="3"
2660 IF r=4 AND h=q AND d=q THEN LET j$="2"
2670 IF j$="0" THEN GO TO 1950
2675 GO TO 2220
2680 LET r=VAL q$(26)
2685 IF r=1 AND e=q AND t<33 THEN LET j$="3"
2686 IF r=1 AND d=q AND t<33 THEN LET j$="1"
2690 IF r=2 AND h=q AND e<33 THEN LET j$="2"
2691 IF r=2 AND t=q AND e<33 THEN LET j$="4"
2700 IF r=3 AND d=q AND h<33 THEN LET j$="1"
2701 IF r=3 AND e=q AND h<33 THEN LET j$="3"
2710 IF r=4 AND t=q AND d<33 THEN LET j$="4"
2711 IF r=4 AND h=q AND d<33 THEN LET j$="2"
2720 IF j$<>"0" THEN GO TO 2220
2730 GO TO 1950
2740 LET r=VAL q$(18)
2745 IF r=1 AND (e=q OR d=q) THEN LET j$="2"
2750 IF r=2 AND (t=q OR h=q) THEN LET j$="1"
2760 IF r=3 AND (e=q OR d=q) THEN LET j$="4"
2770 IF r=4 AND (t=q OR h=q) THEN LET j$="3"
2780 IF j$<>"0" THEN GO TO 2220
2785 GO TO 1950
2800 LET r=VAL q$(CODE w$-56)
2802 LET e$="W"
2810 IF w$="M" OR w$="N" THEN GO TO 2890
2820 IF r=1 THEN LET j$="3"
2822 IF r=2 THEN LET j$="2"
2824 IF r=3 THEN LET j$="1"
2826 IF r=4 THEN LET j$="4"
2835 IF r=1 AND e=q AND t=32 THEN LET e$="X"
2840 IF r=2 AND h=q AND e=32 THEN LET e$="X"
2850 IF r=3 AND d=q AND h=32 THEN LET e$="X"
2860 IF r=4 AND t=q AND d=32 THEN LET e$="X"
2870 GO TO 2220
2890 IF r=1 THEN LET j$="1"
2892 IF r=2 THEN LET j$="4"
2894 IF r=3 THEN LET j$="3"
2896 IF r=4 THEN LET j$="2"
2915 IF r=1 AND t=q AND d=q THEN LET e$="X"
2920 IF r=2 AND e=q AND t=q THEN LET e$="X"
2930 IF r=3 AND h=q AND e=q THEN LET e$="X"
2940 IF r=4 AND d=q AND h=q THEN LET e$="X"
2950 GO TO 2220
3040 LET r=VAL q$(CODE w$-56)
3045 LET e$="W"
3046 IF r=1 THEN LET j$="2"
3047 IF r=2 THEN LET j$="1"
3048 IF r=3 THEN LET j$="4"
3049 IF r=4 THEN LET j$="3"
3050 IF w$=";" OR w$="<" THEN GO TO 3120
3052 IF w$="=" OR w$=">" THEN GO TO 3200
3054 IF w$="?" OR w$="@" THEN GO TO 3360
3056 IF w$="A" OR w$="B" THEN GO TO 3280
3058 IF w$="C" OR w$="D" THEN GO TO 3450
3060 IF r=1 AND d=q AND e=q THEN LET e$="X"
3070 IF r=2 AND t=q AND h=q THEN LET e$="X"
3080 IF r=3 AND d=q AND e=q THEN LET e$="X"
3090 IF r=4 AND t=q AND h=q THEN LET e$="X"
3100 GO TO 2220
3140 LET e$="X"
3145 IF r=1 AND d=q AND e=q THEN LET e$="W"
3150 IF r=2 AND t=q AND h=q THEN LET e$="W"
3160 IF r=3 AND d=q AND e=q THEN LET e$="W"
3170 IF r=4 AND t=q AND h=q THEN LET e$="W"
3185 LET f=4
3190 GO TO 2220
3220 IF r=1 AND (d=q OR e=q) THEN LET e$="X"
3230 IF r=2 AND (t=q OR h=q) THEN LET e$="X"
3240 IF r=3 AND (d=q OR e=q) THEN LET e$="X"
3250 IF r=4 AND (t=q OR h=q) THEN LET e$="X"
3260 GO TO 2220
3305 IF r=1 AND ((d=q AND e>q) OR (e=q AND d>q)) THEN LET e$="X"
3315 IF r=2 AND ((t=q AND h>q) OR (h=q AND t>q)) THEN LET e$="X"
3325 IF r=3 AND ((d=q AND e>q) OR (e=q AND d>q)) THEN LET e$="X"
3335 IF r=4 AND ((t=q AND h>q) OR (h=q AND t>q)) THEN LET e$="X"
3340 GO TO 2220
3370 LET e$="X"
3380 IF r=1 AND (d=q OR e=q) THEN LET e$="W"
3390 IF r=2 AND (t=q OR h=q) THEN LET e$="W"
3400 IF r=3 AND (d=q OR h=q) THEN LET e$="W"
3410 IF r=4 AND (t=q OR h=q) THEN LET e$="W"
3430 LET f=6
3440 GO TO 2220
3460 IF r=1 AND h>q THEN LET e$="X"
3480 IF r=2 AND d>q THEN LET e$="X"
3500 IF r=3 AND t>q THEN LET e$="X"
3520 IF r=4 AND e>q THEN LET e$="X"
3545 LET f=5
3550 GO TO 2220
3600 IF w$="1" AND e=32 THEN LET j$="3"
3610 IF w$="1" AND d=32 THEN LET j$="1"
3620 IF w$="2" AND h=32 THEN LET j$="2"
3630 IF w$="2" AND t=32 THEN LET j$="4"
3640 IF j$="0" THEN GO TO 1950
3650 LET e$="W"
3660 LET f=5
3670 GO TO 2220
8000 CLS : LET u$=""
8005 POKE 23607,60
8010 PRINT TAB 10;"ELECTRONICS"
8030 PRINT : PRINT "This is a circuit design": PRINT "programme."
8060 PRINT : PRINT "You may:-": PRINT AT 7,0;"ABEEP read operating instructions"
8090 PRINT : PRINT "BBEEP start a new circuit": PRINT : PRINT "CBEEP continue existing circuit"
8130 PRINT : PRINT "DBEEP display the circuit symbols": PRINT : PRINT "EBEEP save the existing circuit": PRINT : PRINT "FBEEP copy your circuit on printer"
8155 PRINT : PRINT "GBEEP print the circuit symbols"
8160 PRINT AT 21,3;"Type your required option"
8170 PAUSE 0
8175 POKE 23607,251
8180 LET e$=INKEY$
8190 IF e$="b" THEN GO TO 8600
8200 IF e$="c" OR e$="f" THEN GO TO 22
8210 IF e$="d" THEN GO TO 9200
8220 IF e$="e" THEN GO TO 9000
8225 IF e$="g" THEN GO TO 9450
8230 CLS
8235 POKE 23607,60
8240 PRINT TAB 9;"INSTRUCTIONS"
8260 PRINT : PRINT "Whilst working on a circuit": POKE 23607,251: PRINT "you will see a flashing symbol"; FLASH 1;"_"
8270 POKE 23607,60
8280 PRINT "this shows where the next item": PRINT "will be printed": PRINT "ON ERRshown at bottom of the screenBEEP "
8320 PRINT : PRINT "The arrowed keys move the cursor": PRINT "To erase, press '0', then move": PRINT "the cursor through the symbol."
8350 PRINT "To move the cursor, without": PRINT "erasing, press '1' then continue"
8380 PRINT : PRINT "To alter the symbol, press": PRINT "any key."
8390 PRINT "When requested, enter the code"
8410 PRINT "or one of the following:-"
8420 PRINT AT 20,3; FLASH 1;"PRESS 'ENTER' TO CONTINUE"
8425 PAUSE 0
8430 CLS
8433 PRINT TAB 9;"INSTRUCTIONS"
8440 PRINT : PRINT "'C'-to copy circuit on printer.": PRINT : PRINT "'M'-to return to the 'Menu'.": PRINT : PRINT "'A'-to activate the circuit."
8470 PRINT
8480 PRINT "'D'-to deactivate the circuit."
8485 PRINT
8490 PRINT "'R'-to rotate the present": PRINT "symbol, & all displays of it,": PRINT "through 90 deg."
8520 PRINT "A symbol may be rotated through": PRINT "360 deg, in 90 deg steps."
8535 PRINT "All symbols after the diodes": PRINT "may be rotated."
8540 PRINT AT 19,3; FLASH 1;"PRESS 'ENTER' TO CONTINUE"
8550 PAUSE 0
8560 GO TO 8000
8600 DIM c$(20,32): DIM w(20,32): LET o$=""
8610 CLS : GO TO 500
8999 STOP
9000 POKE 23607,60
9001 PRINT AT 10,10; FLASH 1; INK 1;"PLEASE WAIT"
9002 FOR j=1 TO 512
9004 LET v(j)=PEEK (64512+j)
9005 NEXT j
9006 PRINT AT 10,10;" "
9008 SAVE "cct" LINE 9010
9010 POKE 23609,255
9011 POKE 23607,60
9012 BORDER 5
9020 PRINT AT 10,8;"loading complete": PRINT AT 12,PI;"please wait while I create": PRINT TAB 5;"the electronic symbols"
9025 POKE 23607,251
9030 FOR j=15616 TO 16383: POKE j+48896,PEEK j: NEXT j
9045 FOR j=0 TO 63
9050 FOR k=1 TO 8
9060 LET x=j*8+k
9070 POKE 64512+x,v(x)
9075 NEXT k
9076 NEXT j
9080 POKE 23607,251
9085 CLS
9086 LET u$="1"
9090 GO TO 67
9200 LET x=1: LET y=10
9210 CLS
9220 FOR j=x TO y
9225 IF x=41 AND j>46 THEN GO TO 9410
9230 PRINT CHR$ (j+32);" ";i$(j);" ";y$(j);TAB 18;CHR$ (j+42);" ";i$(j+10);" ";y$(j+10)
9235 PRINT
9240 NEXT j
9245 POKE 23607,60
9250 PRINT AT 21,0;"'N' for next page, 'R' to return"
9260 PAUSE 0
9270 LET e$=INKEY$
9272 POKE 23607,251
9275 IF e$="p" THEN COPY
9276 IF e$="p" THEN GO TO 9260
9280 IF e$="n" THEN GO TO 9370
9300 IF e$="r" THEN GO TO 8000
9370 IF x=41 THEN GO TO 9200
9375 CLS
9380 LET x=y+11: LET y=x+9
9400 GO TO 9220
9410 PRINT CHR$ (j+32);" ";i$(j);" ";y$(j)
9420 GO TO 9235
9450 POKE 23607,251
9452 FOR j=1 TO 28
9455 LPRINT CHR$ (j+32);" ";i$(j);" ";y$(j);
9460 LPRINT " / ";CHR$ (j+60);" ";i$(j+28);" ";y$(j+28)
9475 LPRINT TAB 15;"/"
9480 NEXT j
9485 GO TO 8000
9490 FOR j=1 TO 20: FOR k=1 TO 32
9492 IF w(j,k)=16 THEN LPRINT INVERSE 1;c$(j,k);
9493 IF w(j,k)=32 THEN LPRINT "W";
9494 IF w(j,k)>55 THEN LPRINT c$(j,k);
9496 NEXT k: NEXT j
9497 GO TO 760
10 BORDER 5: PAPER 6: INK 0: CLS
20 PRINT AT PI,6;"HOMEBREW ELECTRONICS";AT 6,NOT PI;"Program to Work With RF CIRCUITS or RF FILTERS";AT 10,6;"Will Calculate F FreQuency C Capacitiance & L Inductance values for resonants circuits,And also calculate the design of an air wound coil"
30 PRINT AT 17,NOT PI;"Adapted from Raido Elec. artical by,Lawrence G. Friedman";AT 21,5;"Push ENTER To Continue"
40 PRINT AT 1,2;"R&J's Service Co. Presents"
50 PAUSE 3672
60 BORDER 7: PAPER 7: INK 0: CLS
70 PRINT TAB 2;"RESONANT CIRCUIT DESIGN"
80 FOR x=1 TO 500: NEXT x
90 CLS
100 PRINT TAB 10;"MENU"
110 PRINT AT 5,2;"1 To Determine L,C,or F"
120 PRINT AT 7,2;"2 To Caculate Coil Parameters"
130 INPUT a
140 IF a=1 THEN GO TO 160
150 IF a=2 THEN GO TO 330
160 CLS
170 INPUT "Also Calculate Coil Parameters (Y/N) ";a$
180 CLS
190 PRINT "Enter '0' For Unkown Value"
200 PRINT AT 5,NOT PI;"Enter F In MHZ>"
210 INPUT F
220 PRINT AT 7,NOT PI;"Enter L In UH>"
230 INPUT L
240 PRINT AT 9,NOT PI;"Enter C In PF>"
250 INPUT C
260 IF NOT F THEN PRINT AT 5,16;1000/(6.238*SQR (L*C));" (MHZ)"
270 IF NOT L THEN LET Z=25330/((F^2)*C)
280 IF L THEN LET Z=L
290 IF NOT L THEN PRINT AT 7,16;25330/((F^2)*C);" (UH)"
300 IF C=0 THEN PRINT AT 9,16;25330/((F^2)*L);" (PF)"
310 PAUSE 1000
320 IF a$="N" OR a$="n" THEN GO TO 60
330 CLS : PRINT TAB 4;"Coil Parameters"
340 FOR X=1 TO 1000: NEXT X
350 LET Z=0
360 IF Z THEN GO TO 400
370 INPUT "Enter L in UH>"',l
380 LET Z=L
390 LET D=0
400 INPUT "Enter Coil Diam.in Inches"',d
410 LET D=D/2
420 INPUT "Enter Coil Length in Inches"',g
430 LET T=SQR ((Z*((9*D)+(10*G)))/D)
440 PRINT AT 12,5;"TURNS ";T
450 LET W=T/G
460 LET C$=" IS THE LARGEST WIRE SIZE"
470 IF W<18.9 THEN PRINT AT 10,NOT PI;"#16";C$: GO TO 550
480 IF W<23.6 THEN PRINT AT 10,NOT PI;"#18";C$: GO TO 550
490 IF W<29.4 THEN PRINT AT 10,NOT PI;"#20";C$: GO TO 550
500 IF W<37 THEN PRINT AT 10,NOT PI;"#22";C$: GO TO 550
510 IF W<46.3 THEN PRINT AT 10,NOT PI;"#24";C$: GO TO 550
520 IF W<50 THEN PRINT AT 10,NOT PI;"#26";C$: GO TO 550
530 IF W<72.7 THEN PRINT AT 10,NOT PI;"#28";C$: GO TO 550
540 IF W<80.5 THEN PRINT AT 10,NOT PI;"#30";C$: GO TO 550
550 INPUT "Repeat Parameter Design (Y/N) ";r$
560 IF R$="y" OR r$="Y" THEN GO TO 400
570 IF r$="n" OR R$="N" THEN GO TO 580
580 INPUT "Repeat L,C,F Calculation (Y/N) ";p$
590 IF p$="y" OR P$="Y" THEN GO TO 160
600 IF p$="N" OR P$="n" THEN GO TO 610
610 BORDER 6: PAPER 6: INK 1: CLS
620 PRINT AT 10,NOT PI;"DO YOU WANT TO SAVE ON TAPE (Y/N)"
630 INPUT ;O$
640 IF o$="y" OR O$="Y" THEN GO TO 670
650 IF o$="N" OR O$="n" THEN GO TO 660
660 CLS : PAPER 2: PAUSE 100: NEW
670 CLS : SAVE "HOMEBREW" LINE 10
680 PAUSE 500: GO TO 660
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.


