CuriousMarc
Bridging a 1930 mechanical teletype to modern Linux requires downclocking microcontroller hardware to 45.5 baud and remapping unused keys to bypass broken uppercase terminal support.
AI-assisted summary of Using a 1930 Teletype as a Linux Terminal — original source. Check the original for full context.
Source published:
Key ideas
- A restored 1930 Teletype Model 15 was successfully adapted to function as an interactive Linux terminal using custom hardware and microcontroller bridging. (0:08)
- Interfacing modern 5 V logic required an optoisolated analog circuit capable of handling a 60 mA, 120 V DC current loop and clamping inductive spikes with a 120 V TVS diode. (1:49)
- To achieve the non-standard 45.5 baud rate, an Atmel microcontroller's hardware clock fuse was reconfigured to divide internal clock speed down from 16 MHz to 2 MHz. (4:23)
- Because Baudot code lacks lowercase letters and modern Linux all-caps terminal modes fail, the teletype's BLANK key was mapped in custom firmware as an uppercase shift modifier. (5:44)
Detailed notes
## Background Published on YouTube by CuriousMarc on April 13, 2020, this video fulfills viewer requests to connect a restored 1930 vintage Model 15 Teletype to a modern computer running Linux. The project tackles the physical and logical challenges of interfacing an antique 5-bit electromechanical machine with a contemporary operating system.
## TL;DR CuriousMarc details the full engineering pipeline required to run a Linux terminal session on a 1930s Teletype Model 15 over a high-voltage 60 mA current loop. He constructs an optoisolated analog interface with transient voltage suppression and programs an Atmel microcontroller—underclocked to 2 MHz via hardware fuses—to bridge 8-bit ASCII at 9600 baud down to 5-bit Baudot at 45.5 baud. After overcoming missing lowercase support and login quirks via a custom BLANK-key prefix technique, he connects to a rugged Dolch portable running Linux. Marc logs into a shell, edits text using the vintage line editor 'ed', and prints out elaborate mechanical ASCII art.
## Atmosphere & style The presentation carries an infectious, hands-on workshop energy blending dry engineering humor with genuine reverence for early telecommunications technology. Marc's meticulous troubleshooting feels intimate and unhurried as he solders circuits, rewires fuse bits, and works through protocol mismatches. The viewing experience is defined by the mesmerizing, rhythmic clatter of mechanical relays, whirring distributors, and hammering typebars creeping across yellow paper at 45.5 baud, creating a delightfully tangible bridge across a century of computing history.
## Bulletin - [00:08](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=8s) A restored 1930 Teletype Model 15 was successfully adapted to function as an interactive Linux terminal using custom hardware and microcontroller bridging. - [01:49](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=109s) Interfacing modern 5 V logic required an optoisolated analog circuit capable of handling a 60 mA, 120 V DC current loop and clamping inductive spikes with a 120 V TVS diode. - [04:23](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=263s) To achieve the non-standard 45.5 baud rate, an Atmel microcontroller's hardware clock fuse was reconfigured to divide internal clock speed down from 16 MHz to 2 MHz. - [05:44](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=344s) Because Baudot code lacks lowercase letters and modern Linux all-caps terminal modes fail, the teletype's BLANK key was mapped in custom firmware as an uppercase shift modifier.
## Key takeaways - [00:08](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=8s) The 1930 Teletype Model 15 relies on an electromechanical rotating distributor for transmission and an electromagnet-driven mechanical linkage for character decoding. - [00:08](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=8s) The vintage terminal operates on a 60 mA current loop driven by ~120 V DC, requiring robust galvanic isolation to interface with modern low-voltage digital electronics. - [00:08](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=8s) Baudot signaling transmits 5-bit characters at a pokey 45.5 baud rate, presenting major protocol incompatibilities with modern 8-bit ASCII systems. - [01:49](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=109s) Optocouplers combined with full-wave bridge rectifiers provide polarity-insensitive isolation, while a 120 V TVS clamp absorbs destructive inductive kickback spikes. - [01:49](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=109s) Corrections to online schematics were necessary, including replacing a 100-ohm resistor with a 1 kΩ power resistor to prevent the optocoupler from incinerating under 120 V. - [03:28](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=208s) Preliminary interface actuation was verified without software using an HP 8018A Serial Data Generator programmed with test bit pulses. - [04:23](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=263s) Firmware was developed in bare-metal C via Eclipse to maintain register-level control of the Atmel microcontroller's built-in 5-bit UART mode. - [04:23](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=263s) Reprogramming the Atmel clock divider fuse to run at 2 MHz was necessary because the standard 16 MHz clock could not scale dividers low enough for 45.5 baud. - [05:44](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=344s) Software flow control (XON/XOFF) is essential to buffer transmission and prevent data loss when bridging modern computers to a mechanical 45.5 baud device. - [05:44](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=344s) Modern Linux implementations fail to support legacy all-caps terminal flags, prompting a custom firmware solution that uses the Baudot BLANK key as an uppercase escape prefix. - [08:20](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=500s) Full-duplex operation on the teletype requires splitting the transmit and receive loops into independent lines, drawing 120 mA total from the high-voltage bench supply. - [12:18](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=738s) Linux serial terminal attachment requires disabling default ANSI color escape codes in shell aliases to avoid printing garbage characters on the mechanical paper feed. - [12:18](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=738s) Programming directly on the Model 15 is constrained by the 5-bit Baudot alphabet, which completely lacks syntax symbols like plus signs, backslashes, and equals signs. - [12:18](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=738s) The classic Unix line editor 'ed' operates effectively on the Model 15, matching the historical paper-terminal workflow under which Unix was originally developed.
## Detailed walkthrough ### [00:08](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=8s) The 1930 Teletype Model 15 and Baudot Code
Marc begins by explaining that he is taking advantage of the coronavirus shelter-in-place downtime to tackle some unfinished projects. One recurring request from viewers was to hook up the vintage Model 15 Teletype—restored over a year earlier—to a modern computer running Linux. Introduced in 1930, the Model 15 is a purely electromechanical contraption that remained in widespread military and commercial Telex service until the 1960s. The transmit mechanism utilizes a rotating contact distributor to encode bits, while the receive side relies on a dizzyingly intricate mechanical linkage governed by a single electromagnet to decode pulses and type them directly onto a roll of paper.
```mermaid flowchart LR accTitle: Current Loop Architecture accDescr: High-voltage current loop connecting transmitter contacts to receiving electromagnet.
subgraph Loop ["60 mA High-Voltage Loop (~120 V)"] direction LR TX["Transmit Contacts<br>(Rotating Distributor)"] RX["Receive Magnet<br>(Electromechanical Decoder)"] end
TX -->|"Overcomes Wire Resistance"| RX ```
Connecting such an antique to modern hardware presents an immediate electrical and logical challenge. Marc emphasizes the fundamental mismatch between the eras: “So at first blush, it is rather incompatible with modern computers.” The teletype operates on a 60-milliamp current loop energized at around 120 volts DC to overcome wire resistance across long distances—a signaling standard that predates ASCII by decades. Instead of modern 8-bit bytes, it relies on 5-bit Baudot coding running at a pokey transmission speed of just 45.5 baud (bits per second).
- **Year introduced:** 1930 (used heavily through the 1960s for military and commercial Telex) - **Signaling line:** 60 mA current loop driven by ~120 V DC - **Character encoding:** 5-bit Baudot code (predates ASCII) - **Data rate:** 45.5 baud (bits per second)
---
[01:49](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=109s) Designing the Analog Interface Circuit
To bridge the high-voltage loop with low-voltage digital electronics, Marc constructs an isolation interface based on a design found online. The circuit isolates the fragile modern components from the high-voltage loop using optocouplers (essentially solid-state relays). The transmit stage features an optocoupler paired with a 120 V transient voltage suppressor (TVS) clamp to swallow inductive kickback spikes caused by the mechanical coils that would otherwise destroy the optoisolator. On the receiver side, a full-wave bridge rectifier makes the input completely polarity-insensitive before passing through an optoisolator into the 5 V logic rail.
Marc spots two critical drafting errors in the schematic he retrieved from the internet. The original diagram specified a 100-ohm resistor on the receive loop, which Marc notes would immediately incinerate the optocoupler under 120 volts, requiring a substitution to a beefy 1 kΩ power resistor. Furthermore, a pull-up resistor was drawn on the wrong transistor branch. After correcting these flaws, Marc solders together the board, yielding safe 5 V logic-level receive and transmit lines.
- **Isolation method:** Optocouplers / solid-state relays for galvanic separation - **Spike protection:** 120 V TVS diode to absorb inductive relay kickback - **Polarity handling:** Full-wave bridge rectifier on the input - **Schematic corrections:** Replaced an incorrect 100 Ω resistor with a 1 kΩ power resistor; fixed a misplaced resistor on the output transistor branch
---
[03:28](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=208s) Testing with the HP 8018A Serial Data Generator
Before writing microcode, Marc needs to verify that the analog interface board can actually energize and trip the teletype's mechanical selector unit. Because he does not yet have a microcomputer configured to emit 5-bit serial streams at 45.5 baud, he turns to a piece of vintage test gear: an HP 8018A Serial Data Generator.
Marc programs the instrument's 2-kilobit internal memory to send simple 1-bit and 2-bit pulse patterns down the loop. When triggered, the generator pulses the interface, successfully actuating the receiver magnet and proving that the analog current switch operates reliably.
---
[04:23](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=263s) Arduino Baudot Translator and Clock Fuses
With the hardware verified, Marc moves on to the protocol translation task: converting standard 8-bit ASCII characters into 5-bit Baudot sequences and vice versa. Marc explains that rather than using the standard Arduino IDE and libraries, he works inside the Eclipse IDE writing bare-metal C to retain full low-level control of the Atmel microcontroller's hardware registers.
```mermaid flowchart TD accTitle: Arduino Hardware Translation Flow accDescr: Microcontroller translation between PC ASCII and Teletype Baudot.
subgraph Arduino ["Atmel MCU (Clock Divided by 8 to 2 MHz)"] direction TB ASCII["8-bit ASCII Buffer<br>(Full Duplex / USB / Serial)"] BAUDOT["5-bit Baudot Engine<br>(45.5 Baud UART)"] ASCII <-->|"Protocol Translation"| BAUDOT end
PC["Dolch Linux PC<br>(9600 Baud RS-232)"] <-->|"ASCII"| ASCII BAUDOT <-->|"45.5 Baud / Current Loop"| TTY["Model 15 Teletype"] ```
The primary engineering obstacle on the microcontroller is clock speed. Modern microcontrollers are designed to run fast, whereas 45.5 baud is exceedingly slow. While the internal Atmel UART hardware natively supports 5-bit frame lengths, the standard 16 MHz system clock cannot scale its baud rate dividers low enough to reach 45.5 baud. Marc resolves this by reprogramming the Atmel chip's hardware configuration fuses:
> “So this bit is on and instead of having your standard Arduino running at 16 megahertz, it divides it internally down to 2 megahertz and that's slow enough to cover all the way down to 45.5 Bauds.”
The completed microcontroller board and analog interface are packaged inside a custom blue project box equipped with a front panel, USB interface, and serial break-outs.
---
[05:44](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=344s) Interface Testing and Lowercase Emulation
Marc hooks the blue interface box to a computer running a serial terminal emulator on COM4 to test character transmission. The teletype is initially set up in half-duplex, powered by an external high-voltage supply. Marc notes that flow control is mandatory due to the vast speed discrepancy, advising: “You want to turn Xon-Xoff if you send big files.” When typing rapid bursts on the modern keyboard, the interface box buffers the stream and rhythmically clatters out the characters at 45.5 baud.
A major complication of 5-bit Baudot is that it has no concept of lowercase letters; it offers only 32 unique character codes, shifting between "letters" (LTRS) and "figures" (FIGS). Although classic Unix was developed on ASR 33 teletypes and historically included all-caps terminal modes, modern Linux distributions do not properly support them:
> “Of course the original UNIX did support all caps - heck, that's how it was developed, on ASR 33 Teletypes - but this feature seemed not to be functional in modern distributions. Although the -U option is still there, it sure didn't work.”
To solve this, Marc invents a firmware workaround: using the Baudot "BLANK" key as a capital-letter prefix modifier. Typing normally outputs lowercase characters to Linux, while tapping the BLANK key immediately before a letter capitalizes it. Marc demonstrates by entering `BLANK c u r i o u s BLANK m a r c`, which prints as `CURIOUSMARC` on the upper-case-only paper roll but appears correctly formatted as `CuriousMarc` on the receiving computer terminal.
- **Baudot limitation:** 5 bits allow only 32 combinations; lowercase letters do not exist in the character set - **Linux caps bug:** Modern `getty` / `stty` uppercase flags (`-U`) fail on contemporary kernels - **Firmware solution:** The "BLANK" teletype key acts as an escape prefix that forces the subsequent letter into uppercase in the outgoing ASCII stream
---
[08:20](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=500s) Linux Serial Setup on the Dolch Rugged Portable
Marc brings in a rugged vintage Dolch luggable computer running Linux to serve as the host system. For this setup, he converts the teletype configuration from half-duplex to full-duplex. This requires separating the transmit and receive loops into two independent circuits, drawing a total of 120 mA (60 mA per loop) from the high-voltage bench supply.
Marc turns to the Linux command line to configure the serial port and spawn a terminal handler. He points out that getting old serial terminal semantics right on modern Linux requires precise command-line parameters:
```bash stty -F /dev/ttyS0 9600 ixon ixoff sbin/agetty ttyS0 tty33 ```
He sets the port baud rate to 9600 (the speed between the Linux PC and the Arduino box, which in turn bridges to 45.5 baud), enables software flow control (`ixon ixoff`), and launches `agetty` with the terminal profile set to `tty33` (the profile for the classic Teletype Model 33 ASR).
---
[10:00](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=600s) Logging into the Teletype Terminal
Marc sits at the Model 15 keyboard and hits return to wake up the system. The mechanical carriage fires into action, and the paper types out a login prompt:
> “We have a shell prompt!”
Marc attempts to log in as root using his BLANK-key prefix technique to provide the lowercase letters. The first attempt fails with an authorization error because standard user accounts cannot log in directly as root without elevation. Marc modifies his command on the host side, prepending `sudo` to spawn a root session, and tries again.
On the second attempt, Marc types in his username. The terminal holds back echoes for the password entry—proving Linux security semantics are intact even over a 1930 apparatus—and grants access:
> “Okay, doesn't echo my password, that's correct. Oh we're in! Oh no, it's going to give a disclaimer. It's going to take forever at 45.5 Bauds.”
The login banner and system disclaimer creep onto the yellow roll of paper character by character, taking tens of seconds to crawl across the page at 45.5 baud.
---
[12:18](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=738s) Running Shell Commands and the `ed` Line Editor
Once the shell settles, Marc inputs `unalias ls`. He explains that modern Linux distributions alias `ls` to include ANSI color escape codes by default, which would flood the mechanical teletype with garbage characters. Executing `ls` successfully lists the files in the home directory.
However, arbitrary programming on a Model 15 is virtually impossible because the 5-bit Baudot code omits fundamental programming syntax. As Marc observes:
> “So what can you do? Well, probably not very much, because you can't do any programming, because you don't have even - there's no plus sign, there is no equal sign, there is no backlash, so you're really really limited in what character you can input into this thing.”
To perform useful work, Marc launches `ed`, the venerable Unix line editor designed specifically for slow, paper-printing teletypes where full-screen screen editors like `vi` or `nano` are impossible. Marc issues the `a` (append) command, writes text, toggles between figure and letter shift states (typing `FIGS.` to terminate insertion and returning to `LTRS`), selects line 2, and edits it with the `c` (change) command. He verifies the file's contents on disk using `cat test`:
> “It works! Can you imagine developing the whole Unix system line by line on the line editor? Now those guys deserve a medal.”
| Characteristic | Modern Linux Terminal | Teletype Model 15 | |:--- |:--- |:--- | | **Data Encoding** | UTF-8 / 8-bit ASCII | 5-bit Baudot (Baudot-Murray code) | | **Typical Line Speed** | 115,200 baud to gigabit | 45.5 baud (~60 words per minute) | | **Available Characters** | 1,000,000+ code points | 32 codes (shifted by FIGS/LTRS modes) | | **Missing Syntax** | None | `=`, `+`, `\`, `{`, `}`, `<`, `>`, lowercase | | **Display Medium** | Phosphor CRT / LCD matrix | Single-ply paper roll via inked ribbon | | **Primary Text Editor** | `nano`, `vi`, `emacs` | `ed` (standard line editor) |
---
[15:02](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=902s) ASCII Art and Conclusion
Marc demonstrates the quintessential historical use case for early hard-copy computer terminals: printing text art. He streams a prepared file containing ASCII art of the Roadrunner cartoon character. Printing a single graphic takes minutes of mechanical hammerings and paper feeding at 45.5 baud, but the graphic renders cleanly onto the roll.
Reflecting on the successful hack, Marc wraps up the experiment with satisfaction:
> “Not that it's useful or anything, but it can be done: a 1930 Baudot teletype as a terminal for Linux.”
He concludes by teasing that for their next telecommunications stunt, they might attempt connecting a computer to Linux using Morse code.
## Notable quotes > [12:18](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=738s) Can you imagine developing the whole Unix system line by line on the line editor? Now those guys deserve a medal. — Marc
> [15:02](https://www.youtube.com/watch?v=2XLZ4Z8LpEE&t=902s) Not that it's useful or anything, but it can be done: a 1930 Baudot teletype as a terminal for Linux. — Marc
## Mentioned Teletype Model 15, Linux, Baudot code, ASCII, HP 8018A Serial Data Generator, Arduino, Atmel, Eclipse IDE, ASR 33 Teletype, Dolch, ed, agetty, stty, CuriousMarc, Eric Volpe, Roadrunner, Saturn V
## Video description Commenters requested that we use our restored vintage 1930 Model 15 Teletype as a terminal for Linux. Hooking up a 5-bit mechanical contraption that predates computers by eons to a modern OS, even one that is terminal friendly, is not without some challenges. But hey, they are both clever, lovely, and digital! Should work, right? It had to be tried.
[edit] And now you can hear the bell(s)! Actually a whole episode on it: https://youtu.be/b2QPy-igBLA Teletype Model 19 Restoration Playlist: https://www.youtube.com/playlist?list=PL-_93BVApb5-9eQLTCk9xx16RAGEYHH1q My TTY interface box hardware and software details are available on my website at: https://www.curiousmarc.com/mechanical/teletype-model-19
Here are the ASCII art files: https://www.curiousmarc.com/mechanical/teletype-model-19#h.p_nvMSAvzNbrCq
I realized after making the video that the analog interface circuit should be credited to TeleTweety (Eric Volpe), who has all kinds of fantastic teletypes running twitter and other things at his home: https://www.youtube.com/user/teletweety He tweets from his teletype (in all caps!) at @teletweety
Chapters: 0:00 Intro 0:30 1930 'Model 15' Teletype Overview 1:52 Making the analog interface 3:28 Test using the HP 8018A Serial Data Generator 4:23 Arduino Software 5:44 Finished interface test 8:20 Linux hookup 10:00 1st Login attempt, no cigar 10:53 2nd Login attempt, success! 12:18 Using the line editor 'ed' on the teletype 15:02 Printing ASCII Art! 16:00 Saturn V rocket printout
Our sponsor for PCBs: https://www.pcbway.com Support the team on Patreon: https://www.patreon.com/curiousmarc Buy shirts on Teespring: https://teespring.com/stores/curiousmarcs-store Learn more on companion site: https://www.curiousmarc.com Contact info: https://www.youtube.com/curiousmarc/about
[Source](https://www.youtube.com/watch?v=2XLZ4Z8LpEE)