After a PINE-related conversation with Twylo, I’ve made a late entry to Retrochallenge’s 2014 Winter Warmup:

  • setting up a dumb terminal (I’m planning on using a Raspberry Pi booting straight into a single-user-mode Minicom session, which would make a cheap PockeTerm alternative.) and use only an 80×25 text session for interacting with:
  • an emulated ’96-era Unix. Possibly Redhat 3.0.3 under i386. I also used Solaris and Ultrix on SparcStation and DECstations around this time (this was practically retrocomputing when I was doing it the first time!) – maybe getting one or other of these working under QEMU leading to:
  • using a PPP session from the emulated Unix as my main way of interacting with the social world: updating my blog, reading my email (delivered in batch via UUCP or POP3), Twitter (anachromism), IRC.

In summary: a terminal-only interface to an old Unix using serial as its only access to the outside world.

I’m happy to report some success on the first point: I have a Raspberry Pi booting straight into a fullscreen 80x25ish1 Minicom session, over an actual serial port. It’s as close to a PockeTerm as I could make: low resolution, over actual RS232, and not running a full Unix environment in the background (if you could run ps, process #1 would be minicom).

Ideally, I would like to have avoided using a USB serial adaptor: the Pi has a UART on board running at 3.3v, and this can be converted to a proper serial port via a MAX232 IC (here’s a guide). Unfortunately that would mean buying new parts, which would delay me starting (and it’s January and I’m moving home, and the budget for retrocomputing supplies is approximately £0).

Here’s a guide to turn this:

RaspberryPi Bits

into this:

RaspberryPi Terminal

(Ultimately to connect to this):

N270 Board

Start with a Raspbian Wheezy image, boot to a console and then:

# install minicom
sudo apt-get install minicom
# pick a more suitable font
sudo dpkg-reconfigure console-setup

I picked VGA 16×32 – on a 1280×1024 screen that gives me 80×32 characters.

We’re going to create a replacement for /sbin/init, but that means we’ll need to do all of our own set up and also that we won’t go through the normal system initialisation, including: mounting the filesystem read-write, setting the fonts, loading kernel modules and having devfs available.

I’m using a Prolific 2303 USB serial adaptor, so I need to load the pl2302 driver, create the /dev/ttyUSB0-equivalent device, too. Because /dev is a different filesystem, let’s just be lazy and put it in /.

The device numbers are 188 and ``, so before rebooting:

sudo mknod /USB c 188 0
sudo vi /init

You might also want to set the defaults for Minicom, as root, while you can still write to the disk. Change your device (under A) to /USB, set your baud and flow control to match what you’re connecting to (I’m going with 9600 here, and I only have a 3-wire serial lead, so I’m using software flow control, too). “Save setup as dfl” to save … as … the … default.

sudo minicom -s

Then we’ll create our new init, as /init:

/sbin/modprobe pl2303
exec /usr/bin/minicom -s -c on

(Make sure to make it executable)

sudo chmod 755 /init

Then change the init in /boot/cmdline.txt – add init=/init to the end of whatever is currently in there and reboot!

If the stars align and you have the configuration I do, you will have a terminal the boots up in about 3 seconds.

If you exit Minicom, the kernel will panic- but that’s okay: you can just power it off when you’re done. The disk is never mounted read-write, so you’re not going to need to worry about wearing out your SD card, either.

  1. The font I was able to use gives me 80×32, but it looks suitably retro compared to the sharp high-resolution displays we’re spoiled with nowadays.