Ready to run OpenVMS VM – Student Kit from VSI

(This is a guest post by Antoni Sawicki aka Tenox)

I was recently registering a new OpenVMS Community License. In the process I learned that there is a ready to run, pre-installed and pre-configured VM with OpenVMS 8.4. Completely free for non-commercial purposes. You don’t even need to register or leave your details (WOW). Just download and run! Thank you VSI!

The student kit runs only on Windows as contains FreeAXP emulator. However it’s super easy to download, install and run.

VSI OpenVMS Student Kit

I’m hoping that in near future once x86 OpenVMS port is ready there will be images for x64 hypervisors like VMware, VirtualBox, Hyper-v and QEMU/KVM hopefully.

Installing Debian Linux 5.0 on the Qemu Dec Alpha

Years ago I’d written this terribly vague, and generic quickie post that Debian 5 will in fact boot inside of Qemu. I didn’t really want to get into it as it’s a little complicated and a lot painful. People have cried out over the years, but I figured I’d help people.

Linux for the Dec Alpha

For operating system tourists, I’ll save you the story, just go here, and download qemu-2.2.50-DecAlphaDebian.7z. You’ll quickly find out it’s borderline useless, and go onto your next thing. You’re welcome.

First thing this was running in 2014, and newer Qemu’s seem to behave… strange. So I stuck with a late 2014 build of Qemu. If you deviate from here , you are on your own. I did dig up quite a few other Dec Alpha AXP emulators and put them on -But that’s totally up to you, again I’m sticking with 2014’s Qemu.

The BIOS/Pal on Qemu’s Alpha is far from complete and cannot read disks, so no boot sectors, boot loaders, no on disk kernels. All is not lost, you can inject a kernel and initrd, however this is where the fun is. Obviously to install you need to extract both from the ISO file. Also make sure the kernel is decompressed, add a .gz extension and de-compress it, as it should be around 6MB.

qemu-system-alpha.exe -net nic -net user -drive file=alpha.vmdk,if=ide,media=disk -drive file=debian-5010-alpha-netinst.iso,if=ide,media=cdrom -initrd initrd.gz -kernel vmlinux

This is vaguely how to boot up the installer. Partition, make sure hda1 hda2 hda3 etc are created and all is fine.

Now the next amount of fun is that you need to extract the created initrd as the installer initrd always launches the installer. The busybox cannot create tar files, there is no ftp or scp, also I couldn’t get it to even try to mount NFS images.

However on Windows 10 with WSLv2 or a Linux machine you can mount the disk image (keep it raw? or convert it?)

losetup /dev/loop0 myimage.disk 
partprobe /dev/loop0
mount /dev/loop0p1 /mnt/myimage

These three steps will let you mount the disk in this case /dev/loop0p2 which is the root filesystem. Debian didn’t have partprobe installed so I had to apt-get install parted

Now that you can mount it, you can copy the boot/initrd.img-2.6.26-2-alpha-generic file.

We do need to tell Linux where the root filesystem is so to finally run Qemu it’s like this:

qemu-system-alpha.exe -net nic -net user -drive file=alpha.vmdk,if=ide,media=disk -initrd initrd.img-2.6.26-2-alpha-generic -kernel vmlinuz-2.6.26-2-alpha-generic -append "root=/dev/hda2"

Obviously this was a lot more time consuming than it should be, but now I can do useful things.

Also sometimes Qemu just sits there with a black screen. the UI is waiting for something ,not sure what. It’ll either come to life on it’s own or you got to bang it.

Multia under Thermal Camera

(This is a guest post by Antoni Sawicki aka Tenox)

DEC Multias are known for notoriously overheating. Someone even coined a term “Multia Heat Death”. The typical folklore recommendation of the time was to only run it vertically and replace the built-in fan with a more powerful one.

In modern times one can inexpensively acquire a thermal camera that attaches to a mobile phone. So why not take a peak inside the inferno.

Multia with 166 MHz CPU Under FLIR

This is how Multia looks like in a thermal camera. PS is on top right. CPU on the left. FDD/HDD bottom left.

The CPU, Alpha AXP, runs at around 60C, not great, not terrible.

Scanning up close through individual chips I found this curiosity:

Wedged between the memory chips and the power supply is a little chip that generates almost 100C. That’s a boiling temperature of water. Note the thermal image is shifted in regards to the visual part due to close range.

What does this chip do? I have no clue. Perhaps someone can help here. What I however did to it is this:

Slapped on this really nice radiator. In fact I added little radiators you can buy for Raspberry PI to all the chips generating tons of heat.

This is how the motherboard looks like right now:

I also added a tiny fan on top of the CPU. Drilled some holes in the case and of course replaced the main fan with a highest air flow I could find.

Time will tell if this resolves the heat death, but my Multia now runs much cooler with help of all the radiators and extra fans.

UPDATE in 2022:

Readers frequently asked “what about the heat death chip?“. Multia indeed has one specific chip that is a source of most of Multia casualties. According to NetBSD Multia Page the chip is 74F623 and is located on the bottom (flip) side of the motherboard.

You can tell it’s little charred. I so I went to take a peek with a thermal camera:

Can you locate it? FLIR found it immediately… Up close the chip goes above 100C:

I have added a small heat sink to it and now looks a little better!

Time will tell if it helps or not.

GXemul for Win32

Luna m88k booted off RAM disk

Don’t get all to excited, it’s a terrible port, but it’s to the point where it can barely run stuff. Although I don’t know how much is me, and how much is GXemul. I probably should have tested on Linux first.

Anyways it’s enough to boot the Luna m88k OpenBSD ram disk up to the single user mode, and poke around. The hard disk doesn’t pick up, and I haven’t even tried the NIC, although the address is looking pretty bogus.

I wanted to try the PMAX version of Mach, but then it hit me, that there is no server to load. And porting the system level from Mach 3.0 to 2.5 looks way more involved than Mach 3.0 being ‘something minor’.

Back on the 88k front, the Luna shipped with something called UniOS-Mach, but good luck finding that in this day & age. I guess I’ll have to go back to Japan.

For the crazy among us, go ahead and try The name says just how stable it is.

In the meantime here is a super low resolution capture of the screensaver from a Luna via

As an update, I added in the timer code from PCemu, and now that the timers appear to be firing some stuff like OS/F 1.0 get’s further!

OS/F 1.0 in single user mode

I need to go through the setup stuff a lot better as this is just untar’d and not setup at all. Not that it’s useful, but here, osf1-barely.7z .

So if anyone downloaded gxemul prior to this update, re-download it again! I put the m88k ramdisk kernel in there too so you can quickly test the Luna 88k emulation.

Confessions of a paranoid DEC Engineer: Robert Supnik talks about the great Dungeon heist!

What an incredible adventure!

Apparently this was all recorded in 2017, and just now released.

It’s very long, but I would still highly recommend watching the full thing.

Bob goes into detail about the rise of the integrated circuit versions of the PDP-11 & VAX processors, the challenges of how Digital was spiraling out of control, and how he was the one that not only championed the Alpha, but had to make the difficult decisions that if the Alpha succeeded that many people were now out of a job, and many directions had to be closed off.

He goes into great detail how the Alpha was basically out maneuvered politically and how the PC business had not only dragged them down by management not embracing the Alpha but how trying to pull a quick one on Intel led to their demise.

Also of interest was his time in research witnessing the untapped possibilities of AltaVista, and how Compaq had bogged it down, and ceded the market to the upstart Google, the inability to launch a portable MP3 player (Although to be fair the iPod wasn’t first to market by a long shot, it was the best user experience by far).

What was also interesting was his last job, working at Unisys and getting them out of the legacy mainframe hardware business and into emulation on x86, along with the lesson that if you can run your engine in primary CPU cache it’s insanely fast (in GCC land -Os is better than -O9).

The most significant part towards the end of course is where he ‘rewinds’ his story to go into his interest in simulations, and of course how he started SIMH when he had some idle time in the early 90’s. SIMH of course has done an incredible amount of work to preserve computing history of many early computers. He also touches on working with the Warren’s TUHS to get Unix v0 up and running on a simulated PDP-7 and what would have been a challenge in the day using an obscure Burroughs disk & controller modified from the PDP-9.

Yes it’s 6 hours long! But really it’s great!

GCC for Windows NT / Dec Alpha?

Somehow I never noticed this until making what seemed like a pointless GCC config.

You can apparently build a GCC like this:

sh configure –host=i386-winnt35 –target=alpha-winnt35

And you can get a cross compiler.

The real question is, does it work?  I don’t know I don’t have a cross assembler, linker or a target machine.


D:\proj\gcc-3.0.4\gcc>xgcc -v
Using builtin specs.
Configured with: : (reconfigured) : (reconfigured) : (reconfigured)
Thread model: single
gcc version 3.0.4

D:\proj\gcc-3.0.4\gcc>xgcc -v -S hi.c
Using builtin specs.
Configured with: : (reconfigured) : (reconfigured) : (reconfigured)
Thread model: single
gcc version 3.0.4
cc1 -lang-c -v -iprefix ../lib/gcc-lib/alpha-winnt35/3.0.4/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=4 -DWIN32 -D_WIN32 -DWINNT -D__STDC__=0 -DALMOST_STDC -D_M_ALPHA -D_ALPHA_ -D_LONGLONG -D__unaligned= -D__stdcall= -D__WIN32__ -D_WIN32 -D__WINNT__ -D__STDC__=0 -D__ALMOST_STDC__ -D_M_ALPHA -D_ALPHA_ -D_LONGLONG -D__unaligned= -D__stdcall= -D__WIN32 -D__WINNT -D__ALMOST_STDC -Asystem=winnt -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C -Acpu=alpha -Amachine=alpha -D__alpha -D__alpha__ -D__alpha_ev4__ -Acpu=ev4 hi.c -quiet -dumpbase hi.c -version -o hi.s
GNU CPP version 3.0.4 (cpplib)
GNU C version 3.0.4 (alpha-winnt35)
compiled by GNU C version 5.1.0.
ignoring nonexistent directory “../lib/gcc-lib/alpha-winnt35/3.0.4/include”
ignoring nonexistent directory “../lib/gcc-lib/alpha-winnt35/3.0.4/../../../../alpha-winnt35/sys-include”
ignoring nonexistent directory “../lib/gcc-lib/alpha-winnt35/3.0.4/../../../../alpha-winnt35/include”
ignoring nonexistent directory “NONE/include”
ignoring nonexistent directory “D:/pcem/building/MinGW/msys/1.0/local/lib/gcc-lib/alpha-winnt35/3.0.4/include”
ignoring nonexistent directory “D:/pcem/building/MinGW/msys/1.0/local/lib/gcc-lib/alpha-winnt35/3.0.4/../../../../alpha-winnt35/sys-include”
ignoring nonexistent directory “D:/pcem/building/MinGW/msys/1.0/local/lib/gcc-lib/alpha-winnt35/3.0.4/../../../../alpha-winnt35/include”
#include “…” search starts here:
End of search list.
: warning: “__STDC__” redefined
: warning: this is the location of the previous definition
: warning: “__STDC__” redefined
: warning: this is the location of the previous definition
hi.c: In function `main’:
hi.c:3: warning: return type of `main’ is not `int’

This is what the output looks like, which looks nothing like targeting the i386 so I guess so?

.set noreorder
.set volatile
.set noat
.globl __fltused
.file 1 "hi.c"
.quad 0
.ascii "Hello from GCC %s\12\0"
.ascii "3.0.4\0"
.align 2
.globl main
.ent main
.frame $15,0,$26,0
.mask 0x4008000,0
lda $30,-16($30)
stq $26,0($30)
stq $15,8($30)
mov $30,$15
.prologue 0
jsr $26,__main
lda $1,$LC0
addl $1,$31,$2
lda $1,$LC1
addl $1,$31,$1
mov $2,$16
mov $1,$17
jsr $26,printf
mov $15,$30
ldq $26,0($30)
ldq $15,8($30)
lda $30,16($30)
ret $31,($26),1
.end main

Torbjörn Granlund’s Excellent resource on running free OS’s on Qemu

Ever get tired of x86 on x86?  yeah me too.

How to solve that problem?

Simple, grab QEMU, and jump off into all those cool RISC processors of the 1990’s that were going to save us all from the WINTEL hegemony!

Lots of instructions, samples, images, and hints here:

It’s really more comprehensive than I’ve sat down to do, so yeah it’s awesome!

Supported platforms include:


Alpha Linux on Qemu

I got sent a quick heads up about a post on firstwork systems, where the author details the steps needed to install, and boot up the installer, and then get the rest of it running.

Very cool stuff!

I pulled down debian-5010-alpha-netinst.iso, and extracted /boot/vmlinuz & /boot/initrd.gz .. Decompressed vmlinuz, and booted away!  For anyone who want’s it, my minimal install is here.  All things considered, it works well!

$ ./qemu-system-alpha -hda alpha.disk -kernel vmlinux -append ‘console=ttyS0’ -initrd initrd.gz -L pc-bios/ -nographic -net nic -net user -drive file=debian-5010-alpha-netinst.iso,if=ide,media=cdrom
PCI: 00:00:0 class 0300 id 1013:00b8
PCI: region 0: 10000000
PCI: region 1: 12000000
PCI: 00:01:0 class 0200 id 8086:100e
PCI: region 0: 12020000
PCI: region 1: 0000c000
PCI: 00:02:0 class 0101 id 1095:0646
PCI: region 0: 0000c040
PCI: region 1: 0000c048
PCI: region 3: 0000c04c
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 2.6.26-2-alpha-generic (Debian 2.6.26-29) ([email protected]) (gcc version 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)) #1 Sun Mar 4 21:08:03 UTC 2012
[ 0.000000] Booting GENERIC on Tsunami variation Clipper using machine vector Clipper from SRM
[ 0.000000] Major Options: MAGIC_SYSRQ
[ 0.000000] Command line: console=ttyS0
[ 0.000000] memcluster 0, usage 1, start 0, end 11
[ 0.000000] memcluster 1, usage 0, start 11, end 16384
[ 0.000000] freeing pages 11:2048
[ 0.000000] freeing pages 2987:16384
[ 0.000000] reserving pages 2987:2988
[ 0.000000] Initial ramdisk at: 0xfffffc0007b28000 (5076756 bytes)
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16272
[ 0.000000] Kernel command line: console=ttyS0
[ 0.000000] PID hash table entries: 512 (order: 9, 4096 bytes)
[ 0.000000] HWRPB cycle frequency bogus, and unable to estimate a proper value!
[ 0.000000] Using epoch = 2000
[ 0.000000] Turning on RTC interrupts.
[4194001.858529] Console: colour VGA+ 80×25
[4194001.860482] console [ttyS0] enabled
[4194001.865365] Dentry cache hash table entries: 16384 (order: 4, 131072 bytes)
[4194001.865365] Inode-cache hash table entries: 8192 (order: 3, 65536 bytes)
[4194001.871224] Memory: 117120k/131072k available (2162k kernel code, 13728k reserved, 3314k data, 304k init)
[4194001.899544] Security Framework initialized
[4194001.900521] Capability LSM initialized
[4194001.900521] Mount-cache hash table entries: 512
[4194001.905404] Initializing cgroup subsys ns
[4194001.907357] Initializing cgroup subsys cpuacct
[4194001.907357] Initializing cgroup subsys devices
[4194001.918099] net_namespace: 1208 bytes
[4194001.920052] NET: Registered protocol family 16
[4194001.926888] EISA bus registered
[4194001.928841] pci: enabling save/restore of SRM state
[4194001.939583] Linux Plug and Play Support v0.97 (c) Adam Belay
[4194001.953255] NET: Registered protocol family 2
[4194001.964974] IP route cache hash table entries: 1024 (order: 0, 8192 bytes)
[4194001.967904] TCP established hash table entries: 4096 (order: 3, 65536 bytes)
[4194001.967904] TCP bind hash table entries: 4096 (order: 2, 32768 bytes)
[4194001.968880] TCP: Hash tables configured (established 4096 bind 4096)
[4194001.968880] TCP reno registered
[4194001.972787] NET: Registered protocol family 1
[4194001.975716] checking if image is initramfs… it is
[4194003.320442] Freeing initrd memory: 4957k freed
[4194003.323372] VFS: Disk quotas dquot_6.5.1
[4194003.323372] Dquot-cache hash table entries: 1024 (order 0, 8192 bytes)
[4194003.325325] msgmni has been set to 238
[4194003.327278] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[4194003.327278] io scheduler noop registered
[4194003.327278] io scheduler anticipatory registered
[4194003.329231] io scheduler deadline registered
[4194003.329231] io scheduler cfq registered (default)
[4194003.330208] isapnp: Scanning for PnP cards…
[4194003.750129] isapnp: No Plug & Play device found
[4194003.767708] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
[4194003.769661] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[4194003.782356] brd: module loaded
[4194003.784309] serio: i8042 KBD port at 0x60,0x64 irq 1
[4194003.784309] serio: i8042 AUX port at 0x60,0x64 irq 12
[4194003.787239] mice: PS/2 mouse device common for all mice
[4194003.792122] TCP cubic registered
[4194003.792122] NET: Registered protocol family 17
[4194003.793098] registered taskstats version 1
[4194003.793098] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[4194003.795051] Freeing unused kernel memory: 304k freed
[4194003.889778] input: AT Translated Set 2 keyboard as /class/input/input0
[4194011.195438] Uniform Multi-Platform E-IDE driver
[4194011.195438] ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
[4194011.204227] CMD646: IDE controller (0x1095:0x0646 rev 0x07) at PCI slot 0000:00:02.0
[4194011.204227] CMD646: UltraDMA capable
[4194011.205204] CMD646: 100% native mode on irq 28
[4194011.205204] CMD646: IDE port disabled
[4194011.206180] PCI: Setting latency timer of device 0000:00:02.0 to 64
[4194011.206180] ide0: BM-DMA at 0x8040-0x8047
[4194011.596805] hda: QEMU HARDDISK, ATA DISK drive
[4194012.325320] hdb: QEMU DVD-ROM, ATAPI CD/DVD-ROM drive
[4194012.378055] hda: UDMA/33 mode selected
[4194012.378055] hdb: UDMA/33 mode selected
[4194012.379031] ide0 at 0x8050-0x8057,0x8062 on irq 28
[4194012.554812] hda: max request size: 512KiB
[4194012.556766] hda: 4194304 sectors (2147 MB) w/256KiB Cache, CHS=4161/255/63
[4194012.558719] hda: cache flushes supported
[4194012.559695] hda: unknown partition table
[4194012.663211] hdb: ATAPI 4X DVD-ROM drive, 512kB Cache
[4194012.665164] Uniform CD-ROM driver Revision: 3.20
Starting system log daemon: syslogd, klogd.