The W9YB radio club operated the annual field day contest where participating stations counted how many unique contacts could be made from a remote location on emergency power. I wrote the software that kept the logs and detected duplicates as they happened. source
Operating Field Day from the press box at West Lafayette high school.
The program, like several other radio related projects, was written to run on the Wintek Control Module.
The program was written in Gordon Letwin's not quite complete implementation of PL/M.
Encoding
One challenge was to store thousands of contacts in thousands of words (4096 words actually). I computed the number of possible strings and then numbered them by computing with 1=A, 2=B and so forth.
A ham radio suffix is one to three letters. Thus, including possible spaces, we have 26 ⨉ 27 ⨉ 27 = 18,954 possibilities. This log2 is 14.21 which we round up to 15 bits required to hold a suffix string.
Ham radio prefixes are one or two letters and a number which multiplies out to take 13 bits.
Ham radio bands have even fewer combinations even factoring operating mode.
I ran variations on these calculations using my HP-35 calculator to do the logs. I chose encoding conventions that fit and were easy to code.
I created tokens for bands, prefixes and suffixes. I allocated a few extra tag bits to identify what kinds of bits each token held. I arranged the tags so that bands > prefixes and prefixes > suffixes. This simplified search logic boundary conditions.
-------------------------------- BAND | 1 | 1 | 0 | 13 BITS | -------------------------------- -------------------------------- PREFIX | 1 | 0 | 14 BITS | -------------------------------- -------------------------------- SUFIX | 0 | 15 BITS | --------------------------------
I stored suffixes in an ascending list. I would search this until I found a match, a duplicate, or the suffix before which I should insert the new suffix token.
Each prefix had its own list of suffixes. These were stored compactly separated by the prefix word that identified the following suffixes. A call sign lookup then required finding the prefix, then finding the suffix before the next prefix.
Each band had its own list of prefixes and suffixes worked on that band. The lookup then was find the band, find the prefix and then the suffix.
IF BTK<>0 THEN CALL LOCATE(BTK); IF PTK<>0 THEN CALL LOCATE(PTK); IF STK<>0 THEN CALL LOCATE(STK);
Recovery
One can expect power failures when operating under emergency conditions. For us, these occurred refueling generators. Consequently we simultaneously logged all contacts to persistent storage.
Texas Instruments Silent 700 ASR thermal printing terminal with cassette tape storage.
We operated the Super Duper from a Silent 700 that had dual cassette tapes that served the same function as a teletype's paper tape reader and punch.
We entered bands, prefixes and suffixes as we tuned the radios and heard stations. If a station were a dup the computer would tell us. If no, we tried to work it and if successful, we inserted the contact into our in memory lists.
As we inserted contacts my program wrote the tokens to the "punch" tape that would recreate the contact. In the event of a power failure, we moved that tape to the reader and played back all of the inserts to reload the program's volatile memory.