These pages are about porting the Minix, uClinux and Linux operating systems to run on the ISICAD Prisma 700 workstation. The Prisma was originally a dedicated CAD workstation, when they had a clearout at work I was able to aquire a Prisma, an incomplete Prisma 40 and a collection of assorted spare boards. I had some experience of porting operating systems in an earlier life (CP/M and MP/M on a Z80 box!) so I thought it might be fun to try and port some flavour of Un*x to the Prisma and maybe use it as an X terminal. Several years (two hardware platforms, three operating systems and four OS ports) later, I have finally got an X server running, after a fashion, but there is a lot still to do.
Strictly, Prisma is the name of a CAD system from ISICAD, including both the hardware and software components. I am only concerned with the hardware here so I am going to use the name Prisma to refer to the Prisma 700 workstation only. The original Prisma was 68020 based with 4 MB of RAM and a 1280 x 1024 256 colour display. There was also a later model, the Prisma 40, which had a 68040 processor, 8 MB of RAM and the same display resolution.
Along with the hardware, I was fortunate in being given some technical documentation for the processor and video cards in the Prisma. This included vital information such as the memory map, bit assignments for interrupt lines, timer usage and details of the hardware line drawing interface to the video board. Unfortunately, there was no equivalent information for the Prisma 40 and it was obvious from the board layouts that the two models were very different. For this reason, I originally considered the Prisma 40 as being too difficult a target and concentrated my work on the Prisma.
I use Linux at work, and NetBSD at home, so I wanted to try and port some flavour of Un*x to the Prisma. Unfortunately, the Prisma has a 68020 processor with no MMU so that immediately ruled out Linux and all the BSD variants. (Note: this was 1997 and I hadn't heard of uClinux yet) Having looked around the 'net to see what else was available, I picked Minix because it had TCP/IP support, the source was available and, although the current version only runs on x86 processors, earlier versions had run on 680x0 systems.
I was successful in getting Minix to run but it has an unconventional interface to the network stack which makes porting network applications hard work. I am not planning to do any more work on the Minix port but more details, including the source diffs, are available for anyone who might be interested in porting Minix to another 680x0 platform:
uClinux is a port of Linux 2.0 to systems without a Memory Management Unit (MMU). It is primarily, but not exclusively, targeted at the Motorola 683xx and ColdFire microcontrollers. I heard about uClinux sometime in 1998 and although it had some attractions, NFS being a major one, I was making good progress with Minix at the time so I didn't have a good reason to switch. What finally decided me to change course was the lack of a non-blocking listen() function in Minix. This made it almost impossible to have a windowing system (X or Microwindows) wait for new connections while continuing to process current connections. I reached this point towards the end of 1999 so resolved to attempt a uClinux port in 2000.
The port was successful, the experience of Porting Minix meant that I had a very good idea of what I needed to do to get uClinux running. However, even with the network interface problems solved, I still had serious performance issues with the graphics display. After much experimenting, I had to concede that trying to run Microwindows or X using only the line-drawing interface was never going to be usable (the video display on the Prisma is not directly accessible as a framebuffer).
Having reached a dead-end with the Prisma, I started to wonder about the Prisma 40. The processor and video boards were lying loose in a chassis which had had the power supply and power cables removed long before I got it. The first thing to do was to hook up a PSU and see if they even worked. Slightly to my surprise, the system booted up with no problems. Checking out the chips (all different from the 020 Prisma) I could see that I had a full-spec 68040, with MMU and FPU, so I was no longer restricted to uClinux.
Although Linux was now a possibility, I chose to do a partial uClinux port first in order to learn about the hardware. The Prisma 40 uses a separate I/O processor for all its serial ports so not only did I have to work out the memory map and interrupt handling for the 68040, I also had to try and reverse engineer the shared memory protocol used to communicate with the I/O processor. This took some time but by the end of 2000 I had uClinux booting on the Prisma 40.
Having got uClinux running, I thought it would be fairly simple to move up to a full Linux kernel. I knew I would have to deal with initializing the MMU but I was intending to use the Linux/m68k 2.0.36 kernel so I expected to be able to move my Ethernet and serial drivers over with very few changes (uClinux is based on the 2.0.38 kernel). Various things got in the way and it ended up being May 2001 before I started work on the Linux port. I started with 2.0.36 then found that the MMU initialization code in head.S was much easier to deal with in the 2.2 and later kernels. There followed some work with 2.3.16 before I finally settled on 2.2.17. As of the end of July 2001, the kernel boots, mounts root over NFS, accepts telnet connections and runs userland programs. There is a framebuffer driver and I can get the X server to start and run some simple programs (ico, xload, xeyes, etc). However, X ignores 95% of mouse button presses and doesn't work with the serial keyboard, so I've still got some work to do.
Last updated 2nd December 2003, number of visitors:
fr30 at dial dot pipex dot com