Turning your Apple IIc into a Dumb Terminal
I recently purchased an Apple IIc, and decided it would be fun to use it as a dumb terminal on my Mac. There are only a few references out there, and none of them have complete/accurate information anymore it seems, so I thought I would write up the steps that I did that work.
This works with a Mac running macOS Monterey.
First you'll need to purchase a couple of items:
- 5DIN to DB9 cable. I purchased this one: Apple IIc, Laser 128 null modem. If you purchase one that is not a null modem, you'll need to buy an adapter.
- DB9 to USB Adapter: There are a ton of these out there, but I bought this: Tera Grand - Premium USB 2.0 to RS232 Serial DB9 Adapter. I suggest buying one with the FTDI chipset, as it has built-in support in macOS and you won't need additional drivers. It is also the most common.
- If you have a newer (i.e 2019 or newer) you may also need a USB-A to USB-C adapter, as you probably only have USB-C ports.
Now for the fun part.
On Your Mac
Plug in the USB to DB9 converter, and connect the able to it and the Apple IIc.
Next you need to spawn an instance of getty
, which is used for displaying the login prompt. To do this, you'll need to create our own launch daemon
To do so, create a new file named /Library/LaunchDaemons/serialconsole.plist, with the following contents:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>serialconsole</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/getty</string>
<string>std.2400</string>
<string>tty.usbserial-FTCD99Q4</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Note the first getty parameter, 'std.2400', should be changed to match the baud rate that you choose.
The second parameter is the port to connect to. On my machine, the converter shows up as "tty.usbserial-FTCD99Q4". You can find yours in the /dev
directory, and will likely start with tty.usbserial. ls /dev/tty-usbserial*
will likely return yours.
Now register the daemon:
launchctl load -F /Library/LaunchDaemons/serialconsole.plist
You'll also need to start and stop it before and after use:
launchctl start serialconsole
launchctl stop serialconsole
If you want to remove the daemon for some reason:
launchctl unload -F /Library/LaunchDaemons/serialconsole.plist
If you're using zsh on macOS (which is now the default shell) and you're using a themeing system like Oh My Zsh, you'll want to make sure that your terminal doesn't use a theme. In addition change the bracketed paste setting (which, if not done, will display [?2004l
after the prompt is printed). Lastly, we need to change the terminal type so that special keys (such as backspace) are interpreted properly.
To do so, update the ZSH_THEME
section of your .zshrc
like so:
if [ "$TERM" = "xterm-256color" ]; then
ZSH_THEME="powerlevel10k/powerlevel10k"
fi
At the bottom of your .zshrc
add the following to disable bracketed paste, and set the terminal type:
if [ "$TERM" != "xterm-256color" ]; then
export TERM=dumb
unset zle_bracketed_paste
fi
On Your Apple IIc
On the Apple side of things, you'll want to download the MODEM MGR terminal emulator. There are three disk, Installation, Program, and Utility. You'll at least need the first two. The MODEM MGR Docs are useful too.
Getting the software working on your Apple IIc is an exercise left up to you, dear reader. I have a Floppy EMU which emulates a floppy, and lets you load programs from an SD card making it very easy.
Once you have your disks ready, load up the first one. Configure the video driver (40 or 80 column), choose the non-smart modem and set the port speed. I chose 2400 to make it a bit more old-school so the terminal updates slower. lastly, set the parity, bits and stop bits to N, 8 and 1 respectively. Save the changes.
Now you'll boot from the program disk in the future, ESC Shift-?
will bring up the menu. Once you launch it, press ESC : V
, and hit enter and you should get a login prompt!
Thanks to the following posts:
Note: Updated to include some .zshrc
configurations to fix some things.