Reviving an old ThinkPad
While I did have some old hardware lying around, I had never committed to actually getting that hardware usable. By that, I mean I had never tried to browse the web, read emails and that sort of day-to-day stuff on anything older than a few years. To see if it were really possible, I decided to buy an old ThinkPad (a 760EL from 1995) and see if I could get it working. Before I started, I remembered that people like K.Mandla had already done things like this before, but he had such luxuries as 32 MB of RAM, a CD drive, a USB port. Really, he was pushing the boundaries of what could be considered low-end (right?). Here is what my ThinkPad 760EL had when I started off (I have upgraded it a bit since then):
- Pentium I 133 MHz
- 16 MB RAM
- 2.1 GB hard drive
- Trident TGUI 9660 graphics
- 3.5 inch floppy drive
- 800x600 TFT display
The lack of network support and any removable mass storage meant installing anything was impossible, so I bought a 3Com Etherlink III PCMCIA Ethernet card, which is well supported by both NetBSD and OpenBSD, the two candidates for the OS that would eventually be on my laptop.
The minimum memory requirements for OpenBSD 5.4, as listed in INSTALL.i386, are either 24 or 32 MB of RAM. NetBSD 6.1.2 requires 20 MB. I had only 16. After some consulting with misc@, I was advised to either get more memory or install an older release. Since the latter would involve running 5+ year old unsupported software (a terrible idea in all cases), I decided to open up my ThinkPad and take a look at the RAM modules. After reseating the only module to make sure I was familiar with the process, I rebooted to find that...I had 32 MB of RAM?! Apparently, 16 MB was soldered on the mainboard and another 16 was removable.
That was very fortunate, because that meant I could install OpenBSD 5.4! I could have also gone the NetBSD route, but it required 5 floppies, while OpenBSD only required one (floppies are actually quite expensive nowadays). The installation went well - my NIC was automatically detected and configured and the sets downloaded and extracted without a hitch.
Configuring the text console
OpenBSD doesn't have much framebuffer support, and there isn't much interest in writing drivers for images (and other complex 2D graphics) in the framebuffer either. This means we're limited to text unless we set up X, which performs abysmally on this hardware. The first order of business is getting more characters on the screen. There are instructions to do that here. It boils down to doing three things:
- Loading a half-height font
- Deleting all the screens configured to use the full-height font
- Creating new screens which use the new font
Here is what the relevant part of my /etc/rc.local looks like:
wsconscfg -dF 1 wsconscfg -dF 2 wsconscfg -dF 3 wsconscfg -t 80x50 1 wsconscfg -t 80x50 2 wsconscfg -t 80x50 3
So I just did that for screens 1, 2, and 3, so I can now see twice the amount of text.
The OpenBSD project provides an extensive collection of packages, including web browsers and text editors which can function in the text console. Here are a few applications I make use of:
- tmux (terminal multiplexer)
- vim (the best text editor)
- elinks (text web browser)
- mutt (email client)
- ssh (remote shell access)
Using those, I can access the web. check my mail, and write these posts. There is not much else I need to do on a day-to-day basis.
Getting X to work
Unsurprisingly, I could not find much documentation on getting an X server to
work on a Trident video card from 18 years ago. This meant I had to fiddle
around with the files in xorg.conf.d a bit.
X -configure segfaults every time
I run it, meaning it's not much help. That doesn't matter, though, because the
configuration file it generates only does the obvious - it changes the driver to
"trident", sets up the screen with the correct resolution, these are all things
I already knew. To get my card to work, I had to add several options to the
"Device" section. Here is what that part of my config looked like:
Section "Device" Identifier "gfxcard" Driver "trident" Option "NoAccel" "True" Option "ShadowFB" "Enable" Option "NoPciBurst" "Enable" Option "FramebufferWC" EndSection
To clarify, this did not go into my xorg.conf, I created a new file in /usr/X11R6/share/X11/xorg.conf.d called 99-trident.conf. The "99" ensured that this file would be sourced last, and would override any other device settings. Documentation on what these options do can be found here. If the resolution is incorrect (it wasn't in my case), you may have a timing issue, which can be fixed by adding one of these options:
Option "UseTiming1024" # For 1024x768 Option "UseTiming800" # For 800x600
With these settings, one finds that the performance of X is very, very bad on this hardware. After spending hours getting it to work, I decided to stick to the text console, where perfomance was far greater. I felt it was worth the tradeoffs (fonts, resolution, colours).
The final result
It's worth mentioning that the screenfetch script took about 30 seconds to display anything, and that elinks is completely unusable unless I let it take up the whole screen. These screenshots are really just for show. I can't show you what my screen looks like when I'm doing real work, because OpenBSD has no facilities in place to take framebuffer shots (like fbgrab).