Retrochallenge 2014 Winter Warm-up
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:
into this:
(Ultimately to connect to this):
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
:
#!/bin/sh /sbin/modprobe pl2303 /bin/setupcon 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.
- 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. ↩