Plan 9 Port to the BeBox

The BeBox

The BeBox is a computer system previously designed and made by Be, Inc. (They later decided to stick to software, but it is still a good little machine.) It has got two PowerPC 603 processors, not Intel inside. Fast SCSI-2 and IDE support are integrated on the motherboard. It takes ordinary PC peripheral cards. As well as the usual serial, parallel, mouse and keyboard ports, it boasts an unusual array of inputs and outputs, including MIDI, CD quality audio, Infrared, and the aptly named geek port, which provides a bundle of signals for experimenters. The BeBox has a new message-passing operating system BeOS, small, efficient, and designed to make good use of the multiprocessor BeBox. It passes those advantages on to its applications programs. See the Be web page for further details, including a technical specification.

Plan 9 on the BeBox

All in all, Plan 9 seemed a good match for the BeBox. I happened to be looking for an open, affordable, RISC multiprocessor platform for Plan 9, and decided to do the port. The two systems represent rather different designs, they certainly have different aims; both demonstrate the advantages of the gourmet over the glutton. Both systems have critics who think nothing can succeed without spreadsheets and Microsoft products, POSIX and X11.

Project status

A PowerPC compiler suite for Plan 9 has been implemented, and incorporated into the Plan 9 distribution. Compiling bitlbt compiles and runs, and the user level libraries and programs have been compiled successfully. The Plan 9 linker now generates enough PEF to make a bootstrap file recognisable to the Be ROM; a variant of the PC program is now running on the BeBox. That allowed basic device and trap handling to be tested on a small program, and allows network boots, making it easier to get the full kernel debugged and running quickly.

The basic machine-dependent kernel components have been written, and are reasonbly stable. The CPU server kernel boots and runs on the BeBox, with file service from a 486. Porting the user-level commands and libraries really is just a matter of:

      cd /sys/src
      objtype=power mk install
All the Plan 9 commands I have tried seem to work happily on the BeBox. The CPU server and terminal kernels are essentially the same except for configuration: the CPU kernel is multi-user; the terminal kernel is single-user and normally includes the graphics support. I am now descending into VGA Hell, to get SVGA graphics running, by modifying devvga.c from the PC kernel.

The terminal now boots and runs the window system and graphics applications. I have changed devvga.c to map the frame buffer directly in linear mode, dispensing with the shadow frame buffer in RAM used on the PC. I use 1152x900x8 mode on my GXE64. Soon I'll use the 2Mb in my new GXE64pro to set higher resolutions. The bootstrap program and kernel use the 640x480x8 linear mapping set by the Be boot ROM, until /rc/bin/termrc runs aux/vga to set the higher resolution mode using the mechanisms appropriate to the current graphics card. The range of cards supported is probably limited more now by the BeBox boot ROM than by Plan 9, since aux/vga has got a reasonably big database. Only cards that support linear mapping are supported in higher resolutions.

I have apparently completed an Alef port; now that I can run acme, I can switch to using the BeBox as my Plan 9 terminal for further development.

It is time to occupy the second CPU!

July 1996: I was on holiday from the late June to late July, but I am back now, and can continue this work. First I intend to rearrange my network at home, turning my Intel box into a file server, and using the BeBox as a Plan 9 terminal. (Another machine acts as CPU server.) Currently the BeBox is served from my PC configured as a standalone PC terminal, but the arrangement is clumsy.

4 September 1996: I finally got the bits together and the time last night to build a file server, load my old file system onto it, and configure an SGI Indigo as a CPU/authentication server for my network at home. On with the BeBox work at last!

Infernal Interval: I spoke too soon! I ended up working on a crash project to produce an Inferno demo for Comdex at the end of November.

1 December 1996: Ported Inferno to the BeBox, both native, and running emu under Plan 9. (Those were easy, just a few hours, given the Plan 9 port. Inferno under BeOS? The crystal ball is misty. Cross my palm with silver.)

7 December 1996: The second CPU is running and some user mode programs seem fine. ngr's NCR SCSI driver (revised) seems happy. I am tracking down some small bits of code in the BeBox-specific code that are not properly interlocked for multiprocessor use (because they were inherited from the uniprocessor PC port). Currently, the problems seem to be confined to VGA setup.

1997: I decided to help start up an Inferno company, leaving my previous employment at the University of York.


A snapshot of the Plan 9 Second Edition BeBox kernel is available.
C H Forsyth, 19 August 2003