Phone Dialer

Publication: Syntax
Pub Details: Syntax/Syntax ZX80 v2 n2 (Volume 2, Issue 2)
Date: February 1981
Pages: 5-7

Using this circuit and program, you can turn your ZX80 into a programmable phone dialer! The circuit consists of three modules: address decoding, data latching, and a relay.

In effect, the address decoder ANDs MREQ (memory request), WR (write), A12, A13 and A14. This results in a positive logic signal at pin 10 of the 7402, which is true whenever the computer tries to write to any address in the range 3000-3FFF.

This signal controls a single bit latch (1/4 7475) having D0 as its data input. Thus the latch stores the lowest order bit of the last write to address 3000. So POKE 12288,1 causes the latch’s output to go high; POKE 12288,0 lowers the latch output.

The relay is controlled by the latch through a high current driver consisting of an open-collector TTL inverter. It can sink 23 mA from the 220Ω resistor used to turn on a RS 276-2009 (Radio Shack catalog no.) NPN transistor, grounding the relay.

We built our dialer first on a prototyping board, then moved it onto a Radio Shack 276-170 printed circuit experimenter’s board. We housed it in a Radio Shack project case and grounded the metal lid to reduce interference.

The transistor we used cannot be driven directly from the latch; it doesn’t have enough current capability. Also, do not omit the diode across the relay coil since it clamps the spike caused by the coil’s collapsing field. Supply power to the circuit board near the relay since it takes 100 mA.

Connect the dialer normally closed in series with the tip (non-ground, usually red wire) half of the phone wire. The phone must be off-hook to dial. Note that this is a prototype dialer and does not incorporate many things (such as optical isolation or FCC approval) that a production dialer would. We take no responsibility for any damage caused by use of this dialer.

The program takes the description and phone number of each name in its memory from the subroutines starting at 700 and increments by tens. Add up to 10 subroutines; each should contain LET statements assigning N$ the number and D$ its description, and end in a RETURN statement.

To operate, type RUN (NL). Screen displays a menu of names. Respond with a letter (NL) to dial. Or, type in a complete phone number (NL), without punctuation, for the program to dial that number.

As shown, the program works in 1K with up to 10 names. When you have more memory, you can raise the ending value of the loop at line 100. If your phone company has older equipment, it may need larger numbers in the loops in lines 540, 570, and 600 to increase the relay cycle times.

 50 POKE 12288,1
100 FOR G=1 TO 10
120 GO SUB 690+G*10
130 PRINT CHR$(G+37);" ";D$
140 NEXT G
145 CLEAR
150 INPUT N$
155 CLS
156 LET G=CODE(N$)-37
157 IF G<1 THEN GO TO 400
160 GO SUB 690+G*10
400 GO SUB 500
430 GO TO 100
500 LET N=CODE(N$)-28
505 LET N$=TL$(N$)
510 IF N=-27 THEN RETURN
515 IF N=0 THEN LET N=10
520 FOR P=1 TO N
530 POKE 12288,0
540 FOR S=1 TO 10
550 NEXT S
560 POKE 12288,1
570 FOR S=1 TO 10
580 NEXT S
590 NEXT P
600 FOR S=1 TO 100
610 NEXT S
620 GO TO 500
700 LET D$="UNCLE JIM"
702 LET N$="15553423"
704 RETURN
710 LET D$="DIR. ASSISTANCE"
712 LET N$="411"
714 RETURN
720 LET D$="EMERGENCY"
722 LET N$="911"
724 RETURN
900 LET D$="BLANK"
902 LET N$=""
904 RETURN
Syntactic Sum= -27616

Use diagram on page 6 to construct your ZX80 dialer.

Phone dialer circuit: address decoder (7402, 7400), data latch (7475) and TTL compatible relay
Phone dialer circuit: address decoder (7402, 7400), data latch (7475) and TTL compatible relay

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.