Skip to content

Instantly share code, notes, and snippets.

@crwolff
Created October 21, 2025 13:23
Show Gist options
  • Select an option

  • Save crwolff/9dfca2de3a46b8c2c9e78030631b799d to your computer and use it in GitHub Desktop.

Select an option

Save crwolff/9dfca2de3a46b8c2c9e78030631b799d to your computer and use it in GitHub Desktop.
SimH headless setup on Raspberry Pi

How to use a headless SimH setup

Startup/shutdown is automatic based on systemd
Telnet directly to instances
Screen commands to connect to instance consoles

  1. ssh pi
  2. screen -ls
  3. screen -r simh-BSD43
    • ^Ad disconnects
  4. systemd disable simh@BSD43
  5. systemd stop simh@BSD43

How to Configure Raspberry Pi 5 for SimH emulation

OS Installation

Attach keyboard, monitor, mouse to Raspberry Pi
Hold shift during powerup to enter OS selection screen

Note: Attach keyboard directly to Raspberry Pi 5 until OS select appears

  1. Select 'Raspberry Pi OS (Lite) 64-bit'
  2. Customize OS setup
    • Machine name
    • Add user
    • Wireless
    • Timezone
    • Enable SSH
    • Disable telemetry
  3. Wait for install to complete and reboot

Update OS

sudo apt update
sudo apt dist-upgrade
sudo apt autoremove

Install build tools

sudo apt install git cmake cmake-data screen

Download and build

git clone https://github.com/open-simh/simh.git SIMH
cd SIMH
sudo bash .travis/deps.sh linux
cmake/cmake-builder.sh -f ninja

Create network bridge

New file: '/etc/netplan/01-bridge.yaml'

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      wakeonlan: true
  bridges:
    br0:
      interfaces: [ eth0 ]
      dhcp4: yes
      macaddress: 2c:cf:67:82:4f:6f
      link-local: [ ]
      parameters:
        stp: true
        forward-delay: 4

Note: Copy macaddress from eth0 (if required)

Create TAP service

New file: '/etc/systemd/system/tap.service'

[Unit]
Description=TAP Interfaces
After=network.target

[Service]
Type=oneshot
User=root
ExecStart=/usr/sbin/ip tuntap add dev tap0 mode tap
ExecStart=/usr/sbin/ip link set tap0 up
ExecStart=/usr/sbin/ip link set tap0 master br0
ExecStart=/usr/sbin/ip tuntap add dev tap1 mode tap
ExecStart=/usr/sbin/ip link set tap1 up
ExecStart=/usr/sbin/ip link set tap1 master br0
ExecStart=/usr/sbin/ip tuntap add dev tap2 mode tap
ExecStart=/usr/sbin/ip link set tap2 up
ExecStart=/usr/sbin/ip link set tap2 master br0
ExecStart=/usr/sbin/ip tuntap add dev tap3 mode tap
ExecStart=/usr/sbin/ip link set tap3 up
ExecStart=/usr/sbin/ip link set tap3 master br0

[Install]
WantedBy=multi-user.target

Create SimH service

New file: '/etc/systemd/system/simh@.service'
Note: Adjust WorkingDirectory, User, Group as required

[Unit]
Description=VAX SimH Emulation
After=network.target

[Service]
WorkingDirectory=/home/username/%i

User=username
Group=username

Restart=always

ExecStart=/usr/bin/screen -DmS simh-%i ./vax8600 boot.ini

ExecStop=/usr/bin/screen -p 0 -S simh-%i -X 'stuff "root"\015'
ExecStop=/bin/sleep 1
ExecStop=/usr/bin/screen -p 0 -S simh-%i -X 'stuff "passwd"\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S simh-%i -X 'stuff "shutdown -h now"\015'
ExecStop=/bin/sleep 30


[Install]
WantedBy=multi-user.target

Enable the services

sudo systemctl daemon-reload
sudo systemctl enable systemd-networkd
sudo systemctl enable tap.service
sudo systemctl enable simh@BSD43
sudo systemctl enable simh@Ultrix45

Reboot to setup the bridge and tap device

sudo shutdown -r now
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment