2025-06-21 - ITA-2 Telegraph Code
=================================
Western Union Bicycle Messengers (1911) (Smithsonian)
<
gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/bikes.jpg>
A friend sent me a link to a video of someone creating art on an
old-school mechanical typewriter. Following up, i found typewriter
art books on the Internet Archive, one of which is dated 1936.
How To Make "Typeys" (1936)
<
gopher://tilde.pink/1/~bencollver/ia/details/HowToMakeTypeys>
Art Typing
<
gopher://tilde.pink/1/~bencollver/ia/search/%09subject:(artyping)>
I sent these links to another friend. I called it an example of
ASCII art from 1936. This friend informed me that ASCII didn't
exist in 1936.
Doing a little research, i found that what existed in 1932 was
ITA-2 telegraph code, which is encoded as 5-bit values that can be
punched on 5-hole paper tape. A perfect rabbithole to go down on
this rainy day. :-)
ITA-2 alphabet on 5-hole tape
<
gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ita-2.jpg>
I wrote a small AWK script to convert between ASCII and ITA-2.
The first limitation i noticed was that ITA-2 cannot represent every
ASCII character. Like my keyboard, ITA-2 lacks lowercase letters.
I wrote a small extension to work around this: any ASCII character
that doesn't exist in ITA-2 would get encoded as a five character
escape sequence.
* FIGURES
* ALLSPACE_NOTINUSE
* Octal digit1
* Octal digit2
* Octal digit3
Why octal? Just for the fun of it.
Below is ita2.awk which converts between ASCII and ITA-2.
ita2.awk
<
gopher://tilde.pink/0/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ita2.awk>
Next i wrote an even smaller script to convert between ITA-2 and
simulated paper tape. Slackware's bsd-games package includes a `ppt`
command that simulates 8-hole tape. Below is ppt5.awk, which
simulates 5-hole tape.
ppt5.awk
<
gopher://tilde.pink/0/~bencollver/log/
2025-06-21-ita-2-telegraph-code/ppt5.awk>
To get a "tape" version of the natural musical tones:
$ printf ABCDEFG | mawk -f ita2.awk | mawk -f ppt5.awk >tones.txt
$ pr -n -t tones.txt
1 ________
2 | .oo|
3 |oo . o|
4 | oo.o |
5 | o . o|
6 | . o|
7 | oo. o|
8 |oo .o |
9 --------
For the round trip:
$ mawk -f ppt5.awk decode tones.txt | mawk -f ita2.awk decode
ABCDEFG
In xterm i can see a cat emoji using the following command.
$ printf "\360\237\220\261" >cat.txt
$ cat cat.txt
🐱
To get a "tape" encoding of that cat:
$ mawk -f ita2.awk cat.txt | mawk -f ppt5.awk >tape.txt
$ pr -2n -t tape.txt
1 ________ 12 |oo .oo|
2 |oo .oo| 13 | . |
3 | . | 14 |o .oo|
4 | . o| 15 |o .oo|
5 |o o. o| 16 |o o.o |
6 |o o.o | 17 |oo .oo|
7 |oo .oo| 18 | . |
8 | . | 19 |o .oo|
9 |o .oo| 20 |o o. o|
10 | . o| 21 |o o.oo|
11 | o.oo| 22 --------
To send that cat on a round trip:
$ mawk -f ppt5.awk decode tape.txt | mawk -f ita2.awk decode
🐱
To be silly, here's the paper tape with corresponding pohl code:
1 ________ 12 |oo .oo| oddy-pod
2 |oo .oo| oddy-pod 13 | . | pohl
3 | . | pohl 14 |o .oo| ahtah-pod
4 | . o| poot 15 |o .oo| ahtah-pod
5 |o o. o| ahtah-tot 16 |o o.o | ahtah-dye
6 |o o.o | ahtah-dye 17 |oo .oo| oddy-pod
7 |oo .oo| oddy-pod 18 | . | pohl
8 | . | pohl 19 |o .oo| ahtah-pod
9 |o .oo| ahtah-pod 20 |o o. o| ahtah-tot
10 | . o| poot 21 |o o.oo| ahtah-tee
11 | o.oo| tee 22 --------
Pohl Code
<
gopher://tilde.pink/1/~bencollver/log/
2025-04-01-on-binary-digits-and-human-habits-by-frederik-pohl/>
For a sanity check, i found an photo of 5-hole tape for CSIRAC, the
first digital computer in Australia.
5-hole tape photo
<
gopher://tilde.pink/I/~bencollver/log/
2025-06-21-ita-2-telegraph-code/5hole.jpg>
CSIRAC
<
gopher://gopherpedia.com/0/CSIRAC>
I manually keyed in the first 10 characters visible in the photo.
$ pr -n -t 5hole.txt
1 ________
2 |ooo. o|
3 |ooo.o |
4 | .oo|
5 |o o.oo|
6 | o . |
7 | o. |
8 | o .oo|
9 | .oo|
10 |ooo. |
11 | o . |
12 --------
Now to decode the virtual paper tape.
$ mawk -f ppt5.awk decode 5hole.txt |\
mawk -f ita2.awk decode |\
hexdump -C
00000000 58 56 41 51 0d 20 4a 41 4d 0d |XVAQ. JAM.|
0000000a
I guess this means it's working? Apparently the lines of text end
with CR only and no LF.
See also:
Computerphile Paper Tape Video
<
gopher://tilde.pink/1/~bencollver/ia/details/youtube-JafQYA7vV6s>
DIY Paper Tape Puncher
<
https://unimplementedtrap.com/paper-tape-punch>
p.s.
To run these examples with mawk on DOS, you may need to set an
environment variable MAWKBINMODE=1
To run these examples with gawk, you may need to set an
environment variable LC_ALL=C
tags: history,retrocomputing,technical
Tags
====
history
<
gopher://tilde.pink/1/~bencollver/log/tag/history/>
retrocomputing
<
gopher://tilde.pink/1/~bencollver/log/tag/retrocomputing/>
technical
<
gopher://tilde.pink/1/~bencollver/log/tag/technical/>