Morse Code Teaching Machine

NOTICE: This is a historical web page. The same information and an improved version of the program is available at the new distribution site:


Why would anyone want to learn code?

Why would they want to learn to ride a unicycle, or build a wooden boat? Like the unicycle, Morse code is a challenge. We can't learn either intellectually, say, by reading a book. Instead we practice, over and over, getting a little better with each little success.

And like the wooden boat, Morse code gives us a link with the past. The old salts of radio are out there, still pounding the brass, and willing to chat with anyone who makes a credible effort to enter their world.

I travel with a small radio that fits into an old laptop computer bag. I'll throw a wire out the hotel window, slip on my headphones, dim the room lights, and see what's coming in. Sometimes I'll hear weak signals with exotic distortions picked up in the ionosphere as the waves crossed the equator or bounced over the pole. I feel lightning bolts jump from my fingers when I squeeze the key to send my own thoughts back the other way.

Sometimes I'll hear the crisp clean signal of an A-1 operator, probably a retired operator, probably living in Phoenix and having trouble sleeping. Once for them code unlocked adventure. They traveled the world keeping in touch with dits and dahs. They make it sound like poetry. I like to meet these guys by radio. In code they don't seem so old.

I Have a Machine That will Teach You Code

I learned the code from a ham radio operator. He ran a class in the basement of the town library. Five of us would sit at a table copying random letters as best we could. It wasn't random though. He would watch us copy. He knew which letters needed practice and that's the letters we got. He'd test us with old letters when we were doing pretty well. Then he'd introduce some new ones, a few new letters each session, until we could copy the whole code.

That was high school. In college I used radio to keep in touch with high school friends. Next thing you know I'm teaching college kids the code. But I haven't got so much time, what with school and all this computer stuff I was learning. Then the microprocessor was invented.

With a little computer it could be right there with you. It could send you a letter and watch you type it. It could check you and time you and model your short and long term learning. I checked out the idea on a big computer. I programmed up a model student and the program to teach it code. I looked at error probability histograms to fine tune teaching heuristics. Then I put the teaching part into a microprocessor and gave it to my students. They loved it.

I programmed it for a handful of machines: the MITS Altair, the Wintek control module and a HAL Communications board we got donated to the ham club. I wrote it up and published it with sources available from the publisher for a self-addressed stamped envelope. (See A Fully Automatic Morse Code Teaching Machine, QST (May 1977) ARRL, Newington, Conn.) I squeezed it into the first single chip computer, the Intel 8748 shown above. This was quite a job because the letter and number error rates took up over half of the 64 bytes of memory available in the part. That left me 28 bytes for my variables, the stack and a few bytes Wayne Downer needed for his auto-baud software terminal interface.

This last implementation I felt sure we could get into the hands of students for a reasonable price. Heathkit had announced a build-it-yourself terminal by then so Wayne and I sent them the prototype one chipper as a possible extension to their ham radio line. Were they interested? Nope. So I went on to other thing.

Run this Program on Your Own PC

A few years ago I got a call from Jim Wilson. He had been looking at all the products now available for learning code. But he couldn't find one that worked as well as what I put up on his Wintek control module. Did I have anything that would run on a PC? No, but, I did have it written in Pascal. Jim agreed to put that up on the PC and send me the result. Here it is for PCs running DOS:

I tried this (the DOS version) under Windows 3.1. It still worked but sounded a little uneven in its sending. Try dropping all the way back to DOS or shut down WinSock or whatever you have to do to make the PC think it is again a small machine. I've also tried it under Win95 where it works just fine even with the tcp/ip network running, and on WinXp (see screenshot) where the sound even comes out the multi-media speakers.

The program starts out sending. It won't go on until you type what it sent. If you wait just a bit it will show you the letter and then send it again. Let it do this a few times when you hear a new letter. Press Enter when you need to take a break. The program shows you the letters you've been getting along with its estimate of your chance of missing it. For new letters it assumes the worst.

That's it. You now know how to work the program. But here are a few more tips for learning code.

Dave Keith borrowed my little machine when he started sailing. It seems sailors like to use the ham bands to keep in touch while cruising the high seas. When he returned it he asked me to prepare him some tapes that he could use to build speed as easily as he had learned the alphabet. I whipped up a random sentence generator that included assorted punctuation and English letter frequencies. I made him a tape that swept from 5 to 15 words per minute on one side and from 15 to 25 on the other. You just play it until it gets to hard, rewind, and play some more.

I've Got Lot's More Stuff Too

I'm going to distribute the C source that Jim Wilson wrote from my Pascal. This is for your personal, non-commercial use only. I also ask that, like Jim, you return to me the source for any ports you make so that I can freely distribute them too. If you agree, here are the files:

I'd like to hear from people who find these sources useful. I've got a lot of other versions I could dig up, and a lot of other Morse code and radio related software. For example, I've got a hypercard stack that will run scheduled code practice broadcasts on a VHF voice channel. The idea is to have no-code hams practice copying code from their 2-meter walkie-talkies. Its called AirMorse.

So, keep me posted. Be sure to tell me when you learn the code, get a license or run a class. I'm collecting recent kudos. Good luck and have fun.

Ward Cunningham

Q: Program runs great, but I cannot get my keyboard to respond with Morse input. What key(s) activate? Do I need a separate Morse "key" to practice??

A: The very brief instructions have proven to be confusing. When the program sends a letter you are to recognize it and type the single corresponding letter on the keyboard. So if it sends dah dah dit, you press the "G" key and the G will print on the screen. If you are not sure, try any key. Only the correct key will print. There is no penalty for guessing. If you don't even try a guess, the computer will type the correct letter for you and repeat it until you do. Let it repeat unfamiliar letters a few times until you know the sound. Then type it.

Q: Is there any way I can make the program less demanding? It seems to cut me off right before I type each letter.

A: The program pays attention to how fast you type, on average, and will wait twice that long before typing a letter for you. If you want it to wait longer, just type a little slower for the letters that you know. For best results find a steady and deliberate pace.

Q: My eight-year-old wants to learn the code. All the programs I have seen on the net so far are over his head. Can you help another ham?

A: I've found that it is hard to get kids to complete the practice sessions. The goal of just learning letters may be too abstract. Try teaching them to copy some high-speed code off the air first. Here is what has worked for me:

Either they will think that this is fun, or they won't. If they think it is fun then they are ready for my program.