--- title: "TS2050 Dialer" id: 72609 type: "computer_media" slug: "ts2050-dialer" url: "http://localhost/computer_media/ts2050-dialer/" markdown_url: "http://localhost/computer_media/ts2050-dialer.md" published_at: "2026-10-26T23:19:36+00:00" modified_at: "2026-10-26T23:19:36+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/dial-1.png" excerpt: "A phone-book dialer that pulse-dials numbers from a 100-entry DATA list through a TS2050 modem, redialing automatically until the modem reports a connection." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Bob Swoger (K9WVY)" slug: "bob-swoger" taxonomy: "indiv" url: "http://localhost/indiv/bob-swoger/" genre: - name: "Modem" slug: "modem" taxonomy: "genre" url: "http://localhost/type/modem/" media_type: "Program" programmers: - name: "Bob Swoger (K9WVY)" slug: "bob-swoger" taxonomy: "indiv" url: "http://localhost/indiv/bob-swoger/" download_url: "https://archive.org/download/timex-sinclair-software-archive/TS2050%20Dialer%20%281992%29%28Swoger%2C%20Bob%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "TS2050 Dialer (1992)(Swoger, Bob)(TS2068)(US)(Program)/TS2050 Dialer (1992)(Swoger, Bob)(TS2068)(US)(Program).tap" mediadate: "1992" images: - url: "http://localhost/wp-content/uploads/2026/10/dial-1.png" - url: "http://localhost/wp-content/uploads/2026/10/dial-2.png" related_products: - id: 13339 title: "TS 2050 Modem" type: "product" url: "http://localhost/product/ts2050-modem/" related_content: - id: 72229 title: "Autodial (Port 119)" type: "computer_media" url: "http://localhost/computer_media/autodial-port-119/" media_type_tags: "Modem" license: false --- # TS2050 Dialer Keeps a phone book of up to 100 names and numbers in `DATA` lines and pulse-dials the one you pick through a TS2050 modem on port 119. The book is shown 20 entries to a page, lettered `a` to `t`; pressing ENTER on its own turns to the next page, a letter dials that entry, and `u` dials a number typed in at the keyboard. While dialing, the top line flashes the number and the try count. After the last digit the program watches the modem for a connection; if none comes it hangs up and dials again, and when one arrives it beeps and tells you to pick up the phone and press ENTER. The header reads “TS2050 Dialer ©1992 by Swoger”. This is the five-page version, from one of Bob Swoger’s Larken disks; an older four-page copy is on his LogiCall distribution disks. The disk copy’s `DATA` lines held a private phone directory. For this archive every entry was replaced: the book now holds three made-up sample entries with 555 numbers, and the remaining slots are empty, ready for your own names and numbers. ## Program Analysis ### Structure - Line 2: setup. `CLEAR 31710`, constants, the 12-character number buffer `y$`, and the blue screen. - Line 4: the “Your Choice?” prompt, reached with `GO SUB PI`. - Line 40: prints one page of 20 entries from the current `RESTORE` point, in alternating bright stripes. - Lines 41–46: picks the entry, reads its number, and keeps only the digits. - Lines 47–51: dials, waits for a connection, and redials. - Lines 200–299: the phone book, one `DATA "name","number"` pair per line. Numbers start with a letter (`P` in the samples); only the digits are dialed. ### Dialing Each digit is sent as a train of pulses by writing 3 and 4 to port 119 with short `PAUSE`s between them, and a zero is sent as ten pulses. After the number, the program reads `IN 119` up to 2,000 times looking for the value 5, which it takes as a connection. If it doesn’t see one, it writes 0 to the port to hang up, adds one to the try count and starts again. ### Notable Techniques - Numbers are stored as `CODE "a"`, `SGN PI`, `NOT PI` and `VAL "200"` to save memory, and the input routine is called with `GO SUB PI`. - Pages are turned by stepping the `RESTORE` line by 20, so adding entries is just a matter of editing `DATA` lines 200–299. - Alternate rows are highlighted with `BRIGHT x-INT (x/b)*b` inside the print loop. - Line 43 skips to the chosen entry by reading the right number of `DATA` items after a `RESTORE`. ### Potential Issues - The dialer needs a TS2050 (or compatible) modem on port 119. Without one it dials into nothing and redials until you press BREAK. - Lines 44 and 50 `POKE` addresses 24009 and 24008 with a code based on the number’s first letter (`E` or `O`) and a connect flag. These appear to pass status to other software on Swoger’s Larken system; they have no visible effect on a stock machine. - Pressing ENTER on the last page ends the program. This program came from a Larken disk and was converted to run from tape: the LKDOS calls and the LOGICALL load were removed, and the exit no longer re-saves the program to disk. The phone list was replaced with sample entries. It was tested in ZEsarUX, with no modem attached, showing the phone book and the dialing screen. ## Source Code ``` 2 CLEAR 31710: LET a=CODE "a": LET h=CODE "d": LET i=SGN PI: LET m=CODE "w": LET n=VAL "200": LET o=NOT PI: LET p=VAL "24007": LET t=CODE "t": DIM y$(VAL "12"): LET b=i+i: POKE VAL "23658",o: LET f=CODE "": LET n$=" TS2050 Dialer *1992 by Swoger ": BRIGHT o: BORDER i: PAPER i: INK VAL "7": OUT m,o: CLS : GO TO 40 4 INPUT "Your Choice? "; LINE z$: RETURN 20 DATA "","P" 40 LET t=i: CLS : RESTORE n: PRINT n$: FOR x=97 TO 116: READ z$,y$: PRINT CHR$ x;") ";z$;: LET y$(i)="-": PRINT TAB f;y$: BRIGHT x-INT (x/b)*b: NEXT x: PRINT "u) Dial a # not listed": GO SUB PI: IF z$="" THEN LET n=n+20: IF n<299 THEN GO TO 40: REM 299 is last data 41 IF z$<"a" OR z$>"u" THEN GO TO 9989 42 IF z$="u" THEN INPUT "Phone #? "; LINE y$: GO TO 44 43 RESTORE n: FOR x=i TO b+b*(CODE z$-CODE "a"): READ y$: NEXT x 44 POKE p+b,CODE "O"+CODE ","*(CODE y$=CODE "E")+LEN y$*(CODE y$=CODE "O") 45 LET z$="": FOR x=i TO LEN y$: IF y$(x)>="0" AND y$(x)<="9" THEN LET z$=z$+y$(x) 46 OUT m,o: NEXT x: IF z$="" THEN RUN 47 BEEP .1,f: PRINT #o,;AT o,o; FLASH i;" Dialing - ";AT o,VAL "11"; OVER i;z$;" - Try#";t 48 OUT m,31: PAUSE CODE "<": FOR x=i TO LEN z$: LET z=VAL z$(x): IF z=o THEN LET z=f/b 49 PAUSE 25: FOR d=i TO z: FOR e=3 TO 4: OUT m,e: PAUSE b: NEXT e: OUT m,i: OUT m,b: NEXT d: NEXT x 50 FOR x=i TO 2000: IF IN m=5 THEN POKE p+i,i: BEEP i,f: PRINT #o;"Pick-up phone - press ENTER": PAUSE o: OUT m,o: GO TO i 51 NEXT x: OUT m,o: PAUSE d: LET t=t+i: GO TO 47 200 DATA "SAMPLE ENTRY 1","P5550100" 201 DATA "SAMPLE ENTRY 2","P5550101" 202 DATA "SAMPLE BBS","P5550199" 203 DATA "","" 204 DATA "","" 205 DATA "","" 206 DATA "","" 207 DATA "","" 208 DATA "","" 209 DATA "","" 210 DATA "","" 211 DATA "","" 212 DATA "","" 213 DATA "","" 214 DATA "","" 215 DATA "","" 216 DATA "","" 217 DATA "","" 218 DATA "","" 219 DATA "","" 220 DATA "","" 221 DATA "","" 222 DATA "","" 223 DATA "","" 224 DATA "","" 225 DATA "","" 226 DATA "","" 227 DATA "","" 228 DATA "","" 229 DATA "","" 230 DATA "","" 231 DATA "","" 232 DATA "","" 233 DATA "","" 234 DATA "","" 235 DATA "","" 236 DATA "","" 237 DATA "","" 238 DATA "","" 239 DATA "","" 240 DATA "","" 241 DATA "","" 242 DATA "","" 243 DATA "","" 244 DATA "","" 245 DATA "","" 246 DATA "","" 247 DATA "","" 248 DATA "","" 249 DATA "","" 250 DATA "","" 251 DATA "","" 252 DATA "","" 253 DATA "","" 254 DATA "","" 255 DATA "","" 256 DATA "","" 257 DATA "","" 258 DATA "","" 259 DATA "","" 260 DATA "","" 261 DATA "","" 262 DATA "","" 263 DATA "","" 264 DATA "","" 265 DATA "","" 266 DATA "","" 267 DATA "","" 268 DATA "","" 269 DATA "","" 270 DATA "","" 271 DATA "","" 272 DATA "","" 273 DATA "","" 274 DATA "","" 275 DATA "","" 276 DATA "","" 277 DATA "","" 278 DATA "","" 279 DATA "","" 280 DATA "","" 281 DATA "","" 282 DATA "","" 283 DATA "","" 284 DATA "","" 285 DATA "","" 286 DATA "","" 287 DATA "","" 288 DATA "","" 289 DATA "","" 290 DATA "","" 291 DATA "","" 292 DATA "","" 293 DATA "","" 294 DATA "","" 295 DATA "","" 296 DATA "","" 297 DATA "","" 298 DATA "","" 299 DATA "","" 9989 STOP 9992 SAVE "DIAL.B1" LINE SGN PI 9998 REM was LKDOS-only ```