Dungeon for the SHARP x68000 (on NetBSD)

Dungeon on the x68000

Its been a while since I’ve added a new port of Dungeon (zork!) so here we go!

Building f2c was a snap on the x68000, it just took a while..

Getting data into the VM was easy, just make an ISO image, and mount it.. Getting data out was.. a challenge, as the floppy doesn’t work under NetBSD, and it didn’t seem to want to see my other hard disks, just my root.  Well thankfully it’s virtual so I just did a:

tar -cvf /dev/sd0c dungeon.tar.gz

NEVER do that on a real machine kids!!!

Anyways here you go, for anyone who loves zork & the m68k!

XM6i

While checking out the NetBSD emulation page, I came across this interesting emulator, XM6i, which can run the x68000 NetBSD port.

Wasting no time, I downloaded it, and quickly found out it is all in Japanese… But hell that is what Google translate is for!  Just be forwarned that it’ll translate things like:

# memswitch -w boot.device=ROM; memswitch -w boot.romaddr=0xeac000

into

# Boot.Device Memswitch-w = ROM; Memswitch-w = 0Xeac000 Boot.Romaddr

I was able to get all the system bits, and get it to boot up the ROM!

Sharp boot logo

As you can see, I’m emulating a 68030 with MMU, running at a blazing 25Mhz with 12MB of ram! No doubt this is top of the line!  So I generated the boot floppies as described on the XM6i page, and booted NetBSD.  The boot loader on the x68000 looks kinda cool:

Boot with the daemon!

And after waiting for an eternity, like a real machine I booted up, swapped disks, read some more and then watched the kernel initalize:

NetBSD 5.1 68000

Installation is pretty straight forward, it is like any other NetBSD platform.  Although it is *SLOW*, even after I discovered the ‘turbo mode’ … As shown below:

Turbo mode!

Even in this mode, I’m running 220% faster than the real machine… I’m sure there are more tweaks to do, but my not being able to read Japanese isn’t helping any.

I figured for future’s sake, I’d just 7zip up what I have so far, maybe it’ll save some time for me later if I try this again.. Getting & generating the ROMS was kind of involved.

After an hour I had a base machine installed!

Of course it runs NetBSD!

All my work is here, and my NetBSD 5.1 install (to save yourself an hour+) is here.  Both files will blow out a 2GB disk image… FWIW.

Also if you’ve never used a Japanese keyboard before, they aren’t quite QWERTY with symbol layouts… This cheat sheet will help!

If you don't know where the colon is, vi can be impossible to use.

I just saw on the PCC mailing list that it just built NetBSD

From Iain Hibbert:

On Mon, 9 May 2011, Anders Magnusson wrote:

> Modified Files:
> pcc/arch/i386: table.c
>
> Log Message:
> Simple fix to avoid bug reported in Jira#PCC-343 by Iain Hibbert.

and so, pcc achieves another milestone..

kernel text is mapped with 3 large pages and 302 normal pages
Loaded initial symtab at 0xc0e37650, strtab at 0xc0ecdaa0, # entries 38363
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 5.99.48 (PCC) #1: Tue May 10 07:49:08 BST 2011
[email protected]:/var/work/NetBSD-current/obj.i386/sys/arch/i386/compile/PCC
total memory = 127 MB
avail memory = 110 MB
mainbus0 (root)
cpu0 at mainbus0 apid 0: QEMU Virtual CPU version 0.13.0, id 0x633
cpu1 at mainbus0 apid 1: QEMU Virtual CPU version 0.13.0, id 0x633
ioapic0 at mainbus0 apid 2
acpi0 at mainbus0: Intel ACPICA 20110211
pckbc1 at acpi0 (KBD, PNP0303) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (MOU, PNP0F13) (aux port): irq 12
FDC0 (PNP0700) at acpi0 not configured
LPT (PNP0400) at acpi0 not configured
COM1 (PNP0501) at acpi0 not configured
hpet0 at acpi0 (HPET, PNP0103-0): mem 0xfed00000-0xfed003ff
apm0 at acpi0: Power Management spec V1.2
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0 mux 1
pms0 at pckbc1 (aux slot)
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pci0 at mainbus0 bus 0: configuration mode 1
pchb0 at pci0 dev 0 function 0: vendor 0x8086 product 0x1237 (rev. 0x02)
pcib0 at pci0 dev 1 function 0: vendor 0x8086 product 0x7000 (rev. 0x00)
piixide0 at pci0 dev 1 function 1: Intel 82371SB IDE Interface (PIIX3) (rev. 0x00)
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel interrupting at ioapic0 pin 15
atabus1 at piixide0 channel 1
piixpm0 at pci0 dev 1 function 3
piixpm0: vendor 0x8086 product 0x7113 (rev. 0x03)
piixpm0: 24-bit timer
piixpm0: interrupting at ioapic0 pin 9
iic0 at piixpm0: I2C bus
vga1 at pci0 dev 2 function 0: vendor 0x1013 product 0x00b8 (rev. 0x00)
wsdisplay0 at vga1 kbdmux 1
drm at vga1 not configured
wm0 at pci0 dev 3 function 0: Intel i82540EM 1000BASE-T Ethernet, rev. 3
wm0: interrupting at ioapic0 pin 11
wm0: Ethernet address 52:54:00:12:34:56
makphy0 at wm0 phy 1: Marvell 88E1011 Gigabit PHY, rev. 0
makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
isa0 at pcib0
lpt0 at isa0 port 0x378-0x37b irq 7
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com0: console
com0: kgdb
attimer0 at isa0 port 0x40-0x43
pcppi0 at isa0 port 0x61
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
isapnp0 at isa0 port 0x279
npx0 at isa0 port 0xf0-0xff
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
attimer0: attached to pcppi0
acpicpu0 at cpu0: ACPI CPU
acpicpu1 at cpu1: ACPI CPU
wd0 at atabus0 drive 0
wd0:
wd0: 5000 MB, 10158 cyl, 16 head, 63 sec, 512 bytes/sect x 10240000 sectors
atapibus0 at atabus1: 2 targets
cd0 at atapibus0 drive 0: cdrom removable
pad0: outputs: 44100Hz, 16-bit, stereo
audio0 at pad0: half duplex, playback, capture
boot device: wd0
root on wd0a dumps on wd0b
mountroot: trying smbfs…
mountroot: trying ntfs…
mountroot: trying nfs…
mountroot: trying msdos…
mountroot: trying lfs…
mountroot: trying ext2fs…
mountroot: trying ffs…
root file system type: ffs
clock: unknown CMOS layout
init: copying out path `/sbin/init’ 11
Tue May 10 07:50:12 GMT 2011
Starting root file system check:
/dev/rwd0a: file system is clean; not checking
swapctl: setting dump device to /dev/wd0b
swapctl: adding /dev/wd0b as swap device at priority 0
Starting file system checks:
Setting tty flags.
Setting sysctl variables:
ddb.onpanic: 2 -> 0
Starting network.
Hostname: qemu
IPv6 mode: host
Configuring network interfaces:.
Adding interface aliases:.
Building databases: dev, utmp, utmpx, services done
encoding -> uk
Starting syslogd.
Mounting all filesystems…
Clearing temporary files.
Updating fontconfig cache: done
Creating a.out runtime link editor directory cache.
Checking quotas: done.
swapctl: setting dump device to /dev/wd0b
Starting virecover.
Checking for core dump…
savecore: no core dump
Starting local daemons:.
Updating motd.
Starting inetd.
Starting cron.
Tue May 10 07:52:31 GMT 2011

NetBSD/i386 (qemu) (console)

login: root
May 10 07:52:45 qemu login: ROOT LOGIN (root) on tty console
Last login: Tue May 10 07:46:44 2011 on console
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 5.99.48 (PCC) #1: Tue May 10 07:49:08 BST 2011

Welcome to NetBSD!

This system is running a development snapshot of the NetBSD operating system,
also known as NetBSD-current. It is very possible that it has serious bugs,
regressions, broken features or other problems. Please bear this in mind
and use the system with care.

You are encouraged to test this version as thoroughly as possible. Should you
encounter any problem, please report it back to the development team using the
send-pr(1) utility (requires a working MTA). If yours is not properly set up,
use the web interface at: http://www.NetBSD.org/support/send-pr.html

Thank you for helping us test and improve NetBSD.

Terminal type is vt100.
We recommend that you create a non-root account and use su(1) for root access.
qemu# ls
.cshrc .klogin .lesshst .login .profile .shrc
qemu# cat >test.c
int
main(int ac, char *av[])
{
printf(“Hello World!\n”);
return 0;
}
^D
qemu# pcc -o test test.c
qemu# ./test
Hello World!
qemu# shutdown -p now
Shutdown NOW!
shutdown: [pid 369]
qemu#
wall: You have write permission turned off; no reply possible

*** FINAL System shutdown message from root@qemu ***
System going down IMMEDIATELY

May 10 07:54:14 qemu shutdown: poweroff by root:

System shutdown time has arrived

About to run shutdown hooks…
Stopping cron.
Waiting for PIDS: 345.
Stopping inetd.
Waiting for PIDS: 308.
Removing block-type swap devices
swapctl: removing /dev/wd0b as swap device
Tue May 10 07:54:57 GMT 2011

Done running shutdown hooks.
May 10 07:55:10 qemu syslogd[151]: Exiting on signal 15
syncing disks… 3 done

unmounting 0xcb6de004 /proc (procfs)…
unmounting 0xcb68f004 /dev/pts (ptyfs)…
unmounting 0xcb65f604 /kern (kernfs)…
unmounting 0xca77820c / (/dev/wd0a)…
unmounting 0xca77820c / (/dev/wd0a)…
cd0: detached
sysbeep0: detached
midi0: detached
atapibus0: detached
npx0: detached
pcppi0: detached
atabus1: detached
makphy0: detached
wm0: detached
pchb0: detached
audio0: detached

unmounting 0xca77820c / (/dev/wd0a)…
forcefully unmounting / (/dev/wd0a)…
wd0: detached
atabus0: detached
acpi0: entering state S5

iBCS2 & NetBSD

I know that there is some people out there that seem to be all into Xenix, and old binaries… So I thought I’d share this little gem I found before I head out for the day… I came across this post, talking about how ibcs2 has fallen apart in the latest version of NetBSD. But the gem in there is that version 4.0.1 works perfectly fine!

So I copied in the old gcc, filled in some bits and….

Qemu 0.14.0 NetBSD 4.0.1 running Xenix gcc

Qemu 0.14.0 NetBSD 4.0.1 running Xenix gcc

It works!

Robots is so perfect you’d never know!

Qemu 0.14.0 NetBSD 4.0.1 running robots

Qemu 0.14.0 NetBSD 4.0.1 running robots

And it runs Xenix Dungeon/Zork without missing a beat!

Qemu 0.14.0 NetBSD 4.0.1 running dungeon

Qemu 0.14.0 NetBSD 4.0.1 running dungeon

So this may be yet another avenue for some people… I’d suspect that you could even build the 32v userland under the Xenix tools…? Since all the default stuff is keyed to licensing, but you could roll your own Unix v7 32bit userland which basically is Xenix and go from there…. Maybe even some of the OpenSolaris SYSVR4 stuff as well but that sounds too ambitious!

Microsoft Giano and NetBSD 4.0.1

Well using the link at Microsoft, I managed to get NetBSD installed. Don’t forget you’ll need a new version of putty that supports serial ports, and connect it to \\.\pipe\USART0 when requested by the simulator. I always get a C++ exception, that I just ignore and let it keep on chugging.

So for the curious, here is a bootlog….

NetBSD/emips 4.0.1 Netboot Bootstrap, Revision 1.0
([email protected], Mon Aug 9 00:23:36 PDT 2010)

Default: 0/ace(0,0)/netbsd
boot:
Loading: 0/ace(0,0)/netbsd
2694960+177944 [152192+143455]=0x305cf4
Starting at 0x80020000

memory segment 0 start 00000000 size 10000000
memory segment 1 start 10000000 size 00100000
Too much memory in cluster 1, trimming memory to range 10000000..10000000
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 4.0.1 (GENERIC) #137: Fri Dec 17 00:21:13 PST 2010
[email protected]:/usr/obj/sys/arch/emips/compile/GENERIC
Xilinx ML50x (eMIPS)
total memory = 256 MB
avail memory = 247 MB
timecounter: Timecounters tick every 62.500 msec
mainbus0 (root)
cpu0 at mainbus0: Microsoft eMIPS CPU (0x70401) Rev. 1 with software emulated floating point
cpu0: 64 TLB entries
ebus0 at mainbus0
eclock0 at ebus0 addr 0xfff80000: eMIPS clock
timecounter: Timecounter “eclock” frequency 10000000 Hz quality 2000
dz0 at ebus0 addr 0xfff90000: neilsart 1 line
ace0 at ebus0 addr 0xfff50000 : System ACE
ace1 at ebus0 addr 0xfff50100 : System ACE
enic0 at ebus0 addr 0xfff10000: eNIC [16 16], address 00:03:ff:e1:5e:ea
icap0 at ebus0 addr 0xffed0000: Internal Configuration Access Port
epio0 at ebus0 addr 0xfff60000: GPIO controller
gpio0 at epio0: 32 pins
flash0 at ebus0 addr 0xfffb0000 base f0000000: 8MB flash memory (2 x StrataFlash 28F320)
lcd at ebus0 addr 0xfff40000 not configured
evga at ebus0 addr 0xfff20000 not configured
ps2 at ebus0 addr 0xfff30000 not configured
ac97 at ebus0 addr 0xffef0000 not configured
timecounter: Timecounter “clockinterrupt” frequency 16 Hz quality 0
flash0: 8192 KB, 1 cyl, 1 head, 16384 sec, 512 bytes/sect x 16384 sectors
ace0: drive supports 255-sector PIO transfers
ace0: card is
ace0: 2048 MB, 128 cyl, 1 head, 32768 sec, 512 bytes/sect x 4194304 sectors
ace1: drive supports 255-sector PIO transfers
ace1: card is
ace1: 4460 KB, 0 cyl, 1 head, 32768 sec, 512 bytes/sect x 8920 sectors
boot device: ace0 part0
root on ace0a dumps on ace0b
root file system type: ffs
dzparam: c_ispeed 9600 ignored, keeping 38400
Sat Mar 19 21:10:50 GMT 2011
swapctl: adding /dev/ace0b as swap device at priority 0
Checking for botched superblock upgrades: done.
Starting file system checks:
/dev/race0a: file system is clean; not checking
/dev/race0d: file system is clean; not checking
/dev/race0e: file system is clean; not checking
/dev/race0f: file system is clean; not checking
Setting tty flags.
Setting sysctl variables:
Starting network.
/etc/rc: WARNING: $hostname not set.
IPv6 mode: host
Configuring network interfaces:.
Adding interface aliases:
Building databases…
Starting syslogd.
Checking for core dump…
savecore: no core dump
Mounting all filesystems…
Clearing /tmp.
Checking quotas: done.
Setting securelevel: kern.securelevel: 0 -> 1
Starting virecover.
Starting local daemons:.
Updating motd.
postfix: rebuilding /etc/mail/aliases (missing /etc/mail/aliases.db)
newaliases: warning: valid_hostname: empty hostname
newaliases: fatal: unable to use my own hostname
Mar 19 17:11:08 postfix/sendmail[402]: fatal: unable to use my own hostname
Starting inetd.
Starting cron.
Sat Mar 19 17:11:09 EDT 2011

NetBSD/emips (Amnesiac) (console)

login: root
Mar 19 17:11:14 login: ROOT LOGIN (root) ON console
Last login: Sat Mar 19 17:04:07 2011 on console
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 4.0.1 (GENERIC) #137: Fri Dec 17 00:21:13 PST 2010

Welcome to NetBSD!

Terminal type is vt100.
We recommend creating a non-root account and using su(1) for root access.
#

It’s not very often you see any UNIX originating from Microsoft* (Yes I know .. Xenix) anyways it does boot, and to save anyone interested, I’ll spare you the 1.5 HOUR long install and give you my disk image.

Speaking of which, it’s SLOW. I mean S-L-O-W.

Also as a side note, here is how to mount a CD-ROM ISO image…

mount -t cd9660 /dev/ace1c /mnt

At any rate, the speed just isn’t there for any real usage.

Microsoft Giano

I stumbled across this the other day, Giano, a simulation framework.

Included is a bunch of stuff, like a basic x86 / cepc (with Windows CE 6.0 image), an Xbox 360 emulator, a SPOT emulator, some eval boards (AT91EB63?) with both MIPS and ARM cpus that even include a doom kernel like experience! A Macintosh G5 (I wonder if it’d boot with Apple ROMS..?) Oh and..

A VAX.

The VAX code is taken from SIMH but I guess to show how extensible the framework is, they mashed in enough microvax to get it going.

SIMH in a way you’ve never seen it…

At any rate, here is some other screen shots of Giano in action….

CEPC

xbox 360 alpha test

xbox360 console

And of course….

Giano MIPS doom

DOOM

Also buried in there is a new MIPS variant, the emips along with a donated NetBSD port!

Sadly I had no luck running NetBSD….

Default: 0/ace(0,0)/netbsd
boot: 0/ace(1,0)/netbsd
Loading: 0/ace(1,0)/netbsd
5085072+70448=0x4eae14
Starting at 0x80020000

memory segment 0 start 00000000 size 10000000
memory segment 1 start 10000000 size 00100000
Too much memory in cluster 0, trimming memory to range 00000000..08000000
Too much memory, ignoring memory range 10000000..10100000
pmap_steal_memory: seg 0: 0x50b 0x50b 0x7fff 0x7fff
pmap_steal_memory: seg 0: 0x54b 0x54b 0x7fff 0x7fff
pmap_steal_memory: seg 0: 0x54d 0x54d 0x7fff 0x7fff
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 5.99.48 (RAMDISK) #0: Tue Mar 15 01:01:14 UTC 2011
[email protected]:/home/builds/ab/HEAD/emips/201103142200Z-obj/home/builds/ab/HEAD/src/sys/arch/emips/compile/RAMDISK
Xilinx ML50x (eMIPS)
total memory = 128 MB
avail memory = 120 MB
sysctl_createv: sysctl_create(no_sa_support) returned 22
mainbus0 (root)
cpu0 at mainbus0: Toshiba or Microsoft eMIPS CPU (0x70401) Rev. 1 with software emulated floating point
cpu0: 64 TLB entries
ebus0 at mainbus0
pid 0(system): trap: cpu0, TLB miss (load or instr. fetch) in kernel mode
status=0x2000000, cause=0x8, epc=0x8002d5c8, vaddr=0xd0000000
tf=0x8054cc78 ksp=0x8054cd18 ra=0x8002d5b8 ppl=0xd0000000
kernel: TLB miss (load or instr. fetch) trap
Stopped in pid 0.1 (system) at 0x8002d5c8: lw v0,0(s0)
db>

Maybe someone else will have better luck.

— edit, it seems Microsoft has a NetBSD 4.01 download, here. And it boots!

SPARC NetBSD on Qemu 0.14.0

I came across this link, in some kind of vain search to see if NetBSD Sparc could run on Qemu.  And the answer is a resounding yes!

I have to admit it was pretty simple to setup too. I did a network install, so all I needed in a minimal config was a GENERIC kernel, and the miniroot. I did it this way because booting with the inserted kernel lets me easily choose my root…

First I created a 2GB data disk, then start up Qemu like this…

qemu-system-sparc.exe -kernel netbsd-GENERIC -L pc-bios -hda sparc.disk -hdb miniroot.fs -net nic -net user

And it’ll boot up!

I specify the root to be sd1c, I’m not sure if it’d pick up on sd1, or sd1a but at any rate sd1c certainly works. The other gotcha I found was the keyboard, sun-type4 worked best. I also had to configure the network manually (maybe I missed something?) but the settings are simple for NAT.

address 10.0.2.15
mask 0xffffff00
gateway 10.0.2.2
dns 8.8.8.8

Any attempt to ping the gateway will fail. But it’s nothing to worry about, and the install can continue normally. I pulled the rest of NetBSD down via HTTP, and it booted up!

I should also add that the CD-ROM iso install works as well. And the NetBSD site has lots of ways of getting the install ISO for the sparc.

And of course, will it run Zork?

Yes it does!

OK, I promise, I think I’m done with NetBSD 0.8

I found a bunch more issues, and weird stuff, so I’ve updated the downloads yet again…

The resurrection directory, is where I’ll keep what is current, I just hope the sourceforge stuff isn’t too screwed up.

Speaking of NetBSD I see that 5.1 has finally trickled into the mirrors, maybe it is time to build another SIMH installation guide, for the new version and upload it as a tape…..

NetBSD 0.8 built and booted!

 

There it is, all done, NetBSD 0.8!

While it still says 386 BSD all over the place, trust me, I’ve built it from the NetBSD 0.8 CVS (with lots of donations for missing parts from 386 BSD).

Anyone interested can download it from sourceforge.

And no I didn’t bother doing the f2c thing, so many files were lost to the great bitbucket this isn’t a 100% restoration but considering the state it was in a few days ago, this is as good as it gets.

NetBSD 0.8 kernel boots!

Well, ok it’s not 100% the NetBSD 0.8 kernel, as a good chunk of the files have been intentionally removed from CVS. However from the announcement, it does make it clear that NetBSD 0.8 is 386 BSD pl22 with some pre pl23 changes thrown in. Since patch level 22 is lost, however patch level 23 is still around, then it wasn’t to hard to install a 386 BSD system, patch it to level 23, then unpack the NetBSD 0.8 sources, and fill in the missing parts.

I guess this is the Jurassic Park of kernels?

386bsd-pl22 booted

Anyways, here is the 386 BSD pl 23 kernel booting up

And now..

NetBSD 0.8 booted

NetBSD 0.8 booted

As you can see there is some differences in the boot strings, but at the same time, because so many files were just pulled in from 386 BSD, and I’m still using a 386 BSD userland, it reports itself as 386BSD.

dmesg’s were so small back then, here is the whole thing from the kernel:

386BSD 0.1 (GENERICISA) #2: Sun Dec  5 13:30:14 PST 2010
 [email protected]:/usr/src/sys.386bsd/arch/compile/J
real mem  = 67104768
avail mem = 64663552
pc0 at 0x60-0x6f irq 1 on isa
pc0: color
wdc0 at 0x1f0-0x1f7 irq 14 on isa
wdc0: 
wd0 at wdc0 slave 0
fdc0 at 0x3f0-0x3f7 irq 6 drq 2 on isa
ne0 at 0x320 irq 10 on isa
 ethernet address 52:54:00:12:34:56
npx0 at 0xf0 irq 13 on isa

Oh well it was moderately interesting.

For the insane, the merged source is here. I’ll provide a snapshot of my build environment, under Qemu here.