SpeccyBoot
How to emulate it in Fuse

Recent versions of Fuse (the Free Unix Spectrum Emulator) include support for emulating SpeccyBoot. This allows you to try the SpeccyBoot out in an emulated environment — without any Spectrum or SpeccyBoot hardware.

Currently, you may need to build Fuse from source to be sure SpeccyBoot emulation is included.

The emulation is based on Ethernet TAP networking. Please note that this emulation currently only works with Linux (I have verified this using Ubuntu 12.04). Other UNIX variants should be possible to support in the future.

Configuring your network for TAP

The following example involves creating a separate network for the emulated Spectrum. Your Linux machine will get another (virtual) network interface, and this interface is connected to the emulated Spectrum. Your Linux machine will then need to take on the role of providing DHCP and TFTP services to this Spectrum machine.

First, you need to create a TAP interface and configure your network so this TAP interface can connect to your DHCP and TFTP servers. First, ensure you have the tapctl utility installed:

sudo apt-get install uml-utilities

Then, set up a new (TAP) network interface by adding the following section to the file /etc/network/interfaces:

auto fuse_tap
iface fuse_tap inet static
  address 192.168.100.1
  netmask 255.255.255.0
  pre-up tunctl -g adm -t fuse_tap
  post-down tunctl -d fuse_tap

Note that this configuration assumes your new fuse_tap interface to use the 192.168.100.* subnet. If this is not possible for you (e.g., if you are already using this subnet for other purposes), you will need to modify both this configuration and the DHCP configuration below.

Configuring DHCP and TFTPD for your local TAP network

Your Linux machine needs to provide DHCP and TFTP to the emulated Spectrum. I rely on NetKit tftpd (running via xinetd) and the ISC DHCP server for this; as mentioned above, other choices may or may not work.

First, install the necessary packages:

sudo apt-get install tftpd xinetd isc-dhcp-server

Modify the DHCP server configuration to serve DHCP to your TAP interface only (unless you want to serve DHCP addresses to other machines on your local network — which you likely don't want to). Do this by modifying the INTERFACES setting in /etc/default/isc-dhcp-server to say

INTERFACES="fuse_tap"

Also modify etc/dhcp/dhcpd.conf to serve IP addresses in the same subnet as fuse_tap:

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.100.255;
option routers 192.168.100.1;
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.100 192.168.100.200;
}

Next, add TFTP to the xinetd services by creating the file /etc/xinetd.d/tftp with the following contents:

service tftp
{
   protocol = udp
   port = 69
   socket_type = dgram
   wait = yes
   user = nobody
   server = /usr/sbin/in.tftpd
   server_args = var/lib/tftpboot -s
   disable = no
}

Finally, you will need to prepare a directory of snapshots in /var/lib/tftpboot/speccyboot as outlined under TFTP server configuration.

The TAP interface configuration, as well as the TFTP and DHCP configurations, take effect upon boot. Hence, you need to reboot your Linux machine at this point.

Running FUSE with SpeccyBoot emulation

Recent versions of Fuse have a few menu options and command-line parameters to enable the SpeccyBoot emulation (briefly described in the Fuse man page). In short, the following command line launches SpeccyBoot in Fuse, using the Ethernet TAP interface fuse_tap for networking:

fuse --speccyboot --speccyboot-tap=fuse_tap

Here's what it looks like:


2009–2013