October 2026

Recently I took an interest in revisiting early Algol 68 Genie releases. As you can guess, after a quarter of a century, compilation of this old code results in a long list of warnings from modern compilers, and the resulting binaries are erratic. Of course, Algol 68 release 1.0 was built with gcc 2.95, in an era when 32-bit was the norm. Much has evolved since then, and vintage source code is not compatible with a modern tool chain.

Clearly, I needed a 32-bit i386 system with gcc 2.95. Since that hardware has been all but scrapped by now, configuring a virtual machine is the obvious route. I managed to install Slackware 8, from 2001, on QEMU. Slackware 8 is a good replacement for LinuxPPC that I used at the time, and it has gcc 2.95.3. Here I will present my notes so should I have to redo this, I do not have to figure it all out anew.

First we need a disk image. For a 2001 operating system, four gigabytes is more than enough.

$ dd if=/dev/zero of=slackware8.img bs=512 count=8193024

Then we start our virtual machine, carefully taylored to a Linux 2.2 kernel:

$ qemu-system-i386 \
  -cpu pentium3 \
  -m 128 \
  -drive file=slackware8.img,format=raw,bus=0,unit=0,media=disk \
  -drive file=slackware8-install.iso,media=cdrom,bus=1,unit=0 \
  -vga cirrus \
  -net nic,model=ne2k_pci \
  -net user \
  -boot d

Login as root, password-less this time, and partition the virtual disk:

# fdisk /dev/hda

First make an empty partition table, then add a 256M swap partition and a bootable Linux partition spanning the rest of the disk. Then start the 'setup' script and follow the obvious instructions:

# setup

You may dispense with KDE and GNOME for now to speed up installation. Do however configure the network using DHCP, to import archives using wget later. Select to automatically install lilo in the master boot record, otherwise the VM will not boot.

Once installation is done, shut down the system:

# /sbin/poweroff

Bring the system up again:

$ qemu-system-i386 \
  -cpu pentium3 \
  -m 128 \
  -drive file=slackware8.img,format=raw,bus=0,unit=0,media=disk \
  -vga cirrus \
  -net nic,model=ne2k_pci \
  -net user,hostfwd=tcp::2323-:23 \
  -boot d

Login as root and add a non-privileged user:

# adduser

You can login to the VM using telnet:

$ telnet localhost 2323
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

slackware login: 
Password:
Linux 2.2.19.
Last login: Mon Oct 12 21:25:37 +0200 2026 on tty1.
No mail.

Let us compile algol68g-1.0:

$ cd algol68g-1.0
$ make
algol68g.c ...
moidsize.c ...
unused.c ...
news.c ...
heap.c ...
keywords.c ...
options.c ...
message.c ...
pretty.c ...
listing.c ...
genie.c ...
genie_mon.c ...
genie_name.c ...
genie_frame.c ...
genie_row.c ...
genie_atoms.c ...
genie_declare.c ...
genie_moles.c ...
genie_expres.c ...
genie_volatile.c ...
genie_signal.c ...
garbage.c ...
scope.c ...
coercion.c ...
taxes.c ...
moids.c ...
scanner.c ...
victal.c ...
parser.c ...
prelude.c ...
env_prelude.c ...
env_mp.c ...
env_transput.c ...
env_cray.c ...
plotutils.c ...
elems.c ...
terminal.c ...
tausworthe.c ...
linking ...
$

A quick test for the binary shows that the VM even emulates execution speed from the turn of the century:

$ ./a68g whetstones.a68 
15 digits 4.15 MWhets

Now, if you made it up to here, I trust you can find your way forward.


Projects
Algol 68 Genie


This website is archived by the National Library of the Netherlands.

© J.M. van der Veer   •   jmvdveer@algol68genie.nl