MIPS Magnum 3000
miod > machineroom > manufacturers > MIPS > Magnum 3000


I don't know the story of that particular machine. Apparently, it was bought in Germany, then made its way to an university campus in France, where it was spotted by Marc Zyngier, who managed to save the machine from being recycled when it was put out of service. Marc played with it for a few years until he had to move to another country, and couldn't afford bringing all his toysmachines with him. I offered to pick the machine, and it is safe from the recycling bin again (-:


At first glance, the machine looks like a dull pizza box. I suppose it used to sport a tape drive, but unfortunately neither the tape drive nor the internal mounting brackets are present.
On the back of the machine are the various connectors.
From left to right, on the bottom, they are: Over this line of connectors, the hole labeled ``color expansion'' is actually an empty ISA slot. One could indeed have a 8 bit color graphics board in it, but any other ISA card would do, as long as you had drivers for it. And over the ISA slot is a centronics SCSI-2 connector.
Overall, the case looks quite ``rough'' and not so well engineered. Of course what matters is what the machine is capable of, rather then way it looks (especially from behind), but many competitors have been able to build much more elegant enclosures...

Time to open the case! After removing the two screws at the back (which were already removed in the previous picture), the facade, top and edges of the case slide towards the front. And here's what the front of the case looks like now:
And looking from the top:
To the right is room for two internal SCSI devices, one 3"1/2 internal drive and one 5"1/4 removable media (such as a tape or floppy drive). The rest of the case is used by the motherboard, partly obscured by the power supply and the mounting rails for the ISA slot. The processor and FPU can be seen in the lower left corner; above them is a slot for another internal 3"1/2 storage device.
Removing the two screws at the bottom of the previous picture allows the tray on which the motherboard is mounted, to slide. This is what the motherboard looks like:
Almost one fourth of the space is used to hold memory, in four banks of 8 SIMMs. Here the machine is fitted with 16 4MB SIMMs, for a total of 64MB. I tried mixing 4MB and 1MB SIMMs but this confuses the machine (with an extra 8 1MB SIMMs the machine would correctly report 72MB, but with an extra 16 1MB SIMMs it would report 72MB too, instead of the expected 80MB...).
Above the memory banks, the largest black connector is where the SCSI cable plugs in; the other, smaller one, is probably a floppy controller.
The ISA slot is sported by a so-called riser board.
Here is a final picture of the motherboard with the riser board removed.

Installing NetBSD is not for the faint of heart

Since I broke the video connector, I can only use this machine with a serial console (I don't have a suitable video cable for that kind of connector anyway).
Upon powerup, the green led lights, but nothing happens on the serial port until about 25 seconds (probably the time needed to perform a "quick" memory test). Then the machine greets us with:
Rx3230 MIPS Monitor: Version 5.43 OPT Mon May 13 17:31:12 PDT 1991 root
Memory size: 67108864 (0x4000000) bytes, 64 MB
Icache size: 32768 (0x8000) bytes
Dcache size: 32768 (0x8000) bytes

So I wanted to have this machine run NetBSD. I connected a SCSI drive, but I didn't want to setup the disk from another machine - I wanted to use only the resources available to me: a Magnum without any operating system on it, connected to my network.
Guess what? The ROM is too stupid to be able to tell you the Ethernet address of the on-board interface. I'm not kidding! Look for yourselves:
>> help
        autoboot:       auto
        boot:           boot [-f FILE] [-n] [ARGS]
        cat:            cat FILE_LIST
        sprobe:         sprobe
        disable:        disable CONSOLE_DEVICE
        dump:           dump [-(b|h|w)] [-(o|d|u|x|c|B)] RANGE
        enable:         enable CONSOLE_DEVICE
        fill:           fill [-(b|h|w)] [-v VAL] RANGE
        get:            g [-(b|h|w)] ADDRESS
        go:             go [INITIAL_PC]
        help:           help [COMMAND]
        help:           ? [COMMAND]
        initialize:     init
        put:            p [-(b|h|w)] ADDRESS VALUE
        printenv:       printenv [ENV_VAR_LIST]
        setenv:         setenv ENV_VAR STRING
        sload:          sload [-b] CHAR_DEVICE
        spin:           spin [-i CNT] [[-v VAL] [-c CNT] [-(r|w)(b|h|w) ADDR]]*
        unsetenv:       unsetenv ENV_VAR
        warm:           warm
        pr_tod:         pr_tod
        init_tod:       init_tod [SECS]

        commands that reference memory take widths of:
                -b -- byte, -h -- halfword, -w -- word (default)
        RANGE's are specified as one of:
Erase single characters by CTRL-H or DEL
Rubout entire line by CTRL-U
>> printenv
So I had to use dump -b of the NVRAM area to get the address... and when I was done with this, I remembered Marc had sent me a NetBSD dmesg output, which was conveniently printing the Ethernet address... Good thing though, this matched what I had read from NVRAM.
Minutes later, I had added the machine to my existing netboot environment. Except I had nothing to boot: NetBSD no longer provides ECOFF images to boot, and the PROM doesn't recognize ELF binaries. The only way to install would then be to either start from an existing NetBSD setup, or to copy the installation miniroot partition from Risc/OS.
Digging further in NetBSD archives, I could find an ECOFF GENERIC kernel, which I could at least try to boot to confirm the machine is well alive and the netboot environment is setup correctly.
Which was a good thing to do, because as soon as I tried to boot from the network, the PROM would greet me with loads of
Lance No Heartbeat
messages. However, running tcpdump on the other side of the network was showing an initial attempt at getting an IP address via reverse ARP.
I was tinkering to no avail, until I had an enlightenment: The PROM needs an Ethernet transceiver with heartbeat (SOE) enabled. Once I changed the transceiver configuration, the machine happily downloaded its kernel (note that, for regular operation, i.e. once the kernel runs, heartbeat is not necessary).
So I had a NetBSD 1.5E kernel running, but no NFS filesystem for it yet. And I did not want to run this machine diskless anyway, only netboot the installer.
But with no ECOFF installer, I had no choice but copy the installer disk image onto the disk, and boot from it.
At this point, since I really did not want to use another machine to do that disk operation, I resolved to use the Risc/OS standalone tools (sash.std and format.std), which I could netboot.
One can then copy the NetBSD installer image with the following operations: Then one can return to the PROM and boot into the NetBSD installer with
boot -f dksd(0,0,8)boot
Well, theoretically, that is. Because since NetBSD 1.6 onwards, the installation disk images are not bootable because the tool used to do this has not been converted to the ``everything can be cross-built'' world order, and the NetBSD/mipsco maintainer has gone AWOL.
So I had to do this again, using the latest pre-1.6 image, which is the 1.5V snapshot from autumn 2001. This one will boot into sysinst.
This allowed me to install 1.5V. Then I had a bootable disk, to which I could copy the 3.0 installation kernel, boot it and upgrade from 1.5V to 3.0. This sort of works.
Why 3.0 and not a more recent version, such as 4.0 or the upcoming 5.0? Well, because NetBSD/mipsco kernels are busted in 4.x and 5.x due to a simple typo in an untested switch to the timecounter code. Yes, I have opened a PR about this. It wasn't fixed until months later, and I had to prod a developer privately about this.
But with enough effort, I could compile a working recent kernel. Here is a dmesg...
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008
    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.01 (GENERIC) #0: Tue Nov 18 23:39:44 GMT 2008
Mips 3230 Magnum (Pizazz)
total memory = 65536 KB
avail memory = 61264 KB
timecounter: Timecounters tick every 40.000 msec
mainbus0 (root)
cpu0 at mainbus0: MIPS R3000 CPU (0x220) Rev. 2.0 with MIPS R3010 FPC Rev. 3.0 
cpu0: 32KB/4B direct-mapped Instruction cache, 64 TLB entries
cpu0: 32KB/4B direct-mapped write-through Data cache
obio0 at mainbus0
le0 at obio0 addr 0xba000000: address 00:00:6b:01:52:35
le0: 16 receive buffers, 4 transmit buffers
mkclock0 at obio0 addr 0xbd000000
rambo0 at obio0 addr 0xbc000000: parity enabled
fd0 at obio0 addr 0xbe000000: not fully implemented
zsc0 at obio0 addr 0xbb000000
zstty0 at zsc0 channel 0
zstty1 at zsc0 channel 1 (console i/o)
asc0 at obio0 addr 0xb8000000: NCR53C94, 24MHz, SCSI ID 7
scsibus0 at asc0: 8 targets, 8 luns per target
timecounter: Timecounter "clockinterrupt" frequency 25 Hz quality 0
timecounter: Timecounter "rambo_tcount" frequency 6250000 Hz quality 100
scsibus0: waiting 2 seconds for devices to settle...
sd0 at scsibus0 target 0 lun 0: <DEC, RZ26F    (C) DEC, 630J> disk fixed
sd0: 1001 MB, 3117 cyl, 8 head, 82 sec, 512 bytes/sect x 2050860 sectors
sd0: sync (208.00ns offset 8), 8-bit (4.807MB/s) transfers
sd1 at scsibus0 target 2 lun 0: <SEAGATE, ST34371N, 0484> disk fixed
sd1: 4148 MB, 5172 cyl, 10 head, 164 sec, 512 bytes/sect x 8496884 sectors
sd1: sync (208.00ns offset 15), 8-bit (4.807MB/s) transfers, tagged queueing
boot device: sd0
root on sd0a dumps on sd0b
root file system type: ffs

The astute reader will notice the machine name is jeroboam. This is kind of a joke, I wanted a name sharing traits with the magnum, which is a double size wine bottle; the jeroboam being the size of two magnums, for a volume of 3 litres. And that number matches the CPU, since this is an R3000.

How fast is this machine anyway?

Well, not that much. This is a 25MHz processor, after all, and it only has a 2x32KB of cache memory.
One of my favorite benchmark for CPU speed is
openssl speed -elapsed
Here are the results:
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes   
md2               9008.12        19.42k       27.44k       30.55k       31.53k
md4                 69.15k      199.68k      624.67k     1336.07k     1987.49k
md5                 50.29k      172.89k      517.23k     1045.16k     1481.83k
hmac(md5)           70.62k      240.46k      660.58k     1174.96k     1511.39k
sha1                41.15k      125.03k      340.88k      603.45k      774.29k  
rmd160              42.50k      112.54k      278.53k      438.42k      525.24k
rc4                881.94k     1001.35k     1031.59k     1045.06k     1046.29k
des cbc            154.76k      167.83k      169.95k      171.65k      172.08k
des ede3            59.76k       61.45k       61.41k       61.69k       61.78k
rc2 cbc            186.72k      195.19k      196.11k      197.84k      197.41k
blowfish cbc       354.55k      413.69k      441.71k      451.05k      453.45k
cast cbc           232.58k      250.50k      257.32k      259.86k      268.23k
aes-128 cbc        205.98k      222.66k      214.26k      220.28k      223.20k
aes-192 cbc        185.14k      192.33k      185.28k      190.67k      193.08k
aes-256 cbc        157.68k      167.41k      163.99k      168.77k      169.47k
These figures are only interesting if you compare them to other machines. Roughly, these figures match the performance of a 68040 processor running at 33MHz (but with a much smaller cache memory), but also the performance of a 88100 processor running at 20MHz (with 2x32KB of writeback cache memory).

Some links of interest...