Running 9front on an emulated SGI Indy via MAME
I recently found that MAME supports running the SGI Indy while looking for ways to test some modifications I was making to the mips code in 9front. After a fair bit of elbow grease cinap and I (but mostly cinap) were able to get the old 9front indy kernel booting and running within mame. I thought I might as well document how we set things up here. As a word of warning this will require some decent 9front infrastructure setup already and some familiarity with things like ndb, additionally this system is barely usable from a modern standard so its usefulness is limited.
Baseline MAME Indy
The mainline MAME only gives the Indy 16MB of ram, which is a little tight. Thanks to some clever folks on the irixnet forums I found a patch for bumping this limit to the theoretical maximum (256MB), you can grab a prepatched repo here or if you are using a system with nix flakes available you can use nix run github:majiru/9front-in-a-box#mame
.
Next you'll need to grab the required firmware files, of which I used this guide to get going, some links may be dead but some google searching of the required file names should get you some archive.org files.
Next you'll need to configure networking, MAME is a bit unique here and expects a tap named tap-mess-$UID-0
, additionally after running once you'll need to modify the $MAMEROOT/cfg/indy_4610.cfg
to make the edlc
device line like so:
<device tag=":edlc" interface="0" mac="08:00:69:12:34:56" />
Then you'll also likely need to modify the network from the in-emulation menu in MAME, which can be found by booting up the emulator, hitting ScrlLk followed by Tab, then clicking network settings and arrowing over to TAP/TUN network. This should only need to be done once as it will change the interface=
line for the edlc
device, unfortunately this specific index seems to be OS specific (was 0 for me on linux, was 2 for cinap on Windows) so its a bit difficult to modify without the in-emulation menu. At this point you should have a working Indy with networking, I suggest perhaps booting in to IRIX (as documented in the neocities guide) and double checking if you get stuck further on.
(editor's note: a real tap-mess indeed)
9front bits
Now for the fun bits, lets setup our 9front grid for bootp'ing this device. Let's first build the userspace and kernel:
cd /sys/src/
objtype=mips mk install
cd /sys/src/9/sgi
mk install
Next we need to configure the network booting, first add a /lib/ndb/local
line to the tune of:
ip=192.168.168.214 ether=080069123456 sys=indy dom=indy.genso fs=myfs auth=myauth bootf=/mips/9indy
Then assuming you have your ip/tftpd
running and MAME setup correctly you can boot up the Indy, click the button for maintenance mode, enter the PROM shell, then type BOOTP();
which should grab your kernel and boot right up.