kaashif's blog

Programming, software freedom and Unix


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.

Installing OpenBSD

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.

Text Applications

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

Browsing the web

Browsing the web

Screenfetch

Screenfetch

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).