Michael Frank Deering: Hardware: MAJC


Company: Sun Microsystems, Inc.

Year of Commercial Product Release: 2002

Product Code Name/Production Name

The internal code name for this project by was “Cafe”, although it was sometimes referred to internally and in the press as “UltraJava”. The product name was MAJC, for “Microprocessor Architecture for Java Computing”.


For my two previous successful Sun 3D graphics accelerators, the ZX and Elite3D, I had designed a custom programmable processor chip to perform vertex transform and lighting (what is now more generally referred to as vertex shading). The custom vector instruction sets and specialized graphics instructions and register files are what made these machines so fast and compact.

For my next machine (which would eventually become Zulu), I had already started the design of new programmable chip that would include the capabilities of the normal vector shader of my Triangle Processor design, e.g. what is now referred to as pixel shaders. (But I was doing this work in 1994.)

Designing a custom programmable processor is not an inexpensive investment for a company to make, but my two previously successful efforts had shown it to be worth while. For graphics applications, the processor did not need to deal with caches, exceptions, faults, interrupts, memory management or virtual memory. This greatly simplifies the design, implementation, and debugging of a processor pipeline. Indeed we avoided the expense of even writing a C complier by just hand coding everything in microcode. My mantra was if it was important enough to go fast, it could be hand coded, if it wasn’t, it could be coded in C on the host processor. In the previous projects, the processor chip generally was the simplest chip to design, debug, and bring up, as it had very few internal state machines to go wrong.

About this same time (1995) several other things were happening at Sun and in the industry. Java had just hit in a big way, and interest was exploding. Traditional microprocessor architectures (non-vector) were getting harder and harder and more and more expensive to improve. With the advent of the Internet, there was the tantalizing possibility that a lot of the low end computing market could shift to thin-clients. In a complicated story that started with Bill Joy, Marc Tremblay, and myself having a discussion while walking along a California beach, eventually the Cafe/MAJC project was born. I’ll leave it someone else to document all the twists and turns that happened next (and where MicroJava and PicoJava fit in); the end results were that Sun’s next graphics boards (XVR-1000 and Zulu) were to use a common special processor designed by Marc Tremblay and Sun’s full custom microprocessor group.

Engineering Team

Marc Tremblay was the main architect of MAJC, with assistance from several other people from Sun’s microprocessor group, including Jeff Chan. Within Sun’s graphics group, I, Mike Lavelle, and Wayne Morse were the main consulting architects. As a full custom design, MAJC was a large project involving many other people in the implementation. Unlike my previous “pure” graphics processors, MAJC was to support caches, double precision floating point arithmetic, exceptions, faults, interrupts, memory management and virtual memory. The initial design had two processor cores on the same die. (Common now, but one of the first such at the time.)


Below is a link to the Hot Chips 1999 presentation on the MAJC architecture made by Marc Tremblay.

The full instruction set was at one time publicly available on the Sun web site; I am making efforts to see if I can find a way to make this accessible again.


One of the main goals of MAJC was to leverage the processor design beyond Sun’s internal 3D graphics products, but it was a complex thing to sell a radically new microprocessor design to other Sun projects and external customers. There are many many parallels that can be made between the MAJC project and IBM’s Cell processor for the Sony PlayStation3TM. In the end, the only products to use the MAJC processor were the next graphics boards: XVR-1000 and Zulu. If this had been know from the beginning the project probably wouldn’t proceeded as it did; either a graphics only processor similar to my last two would have been built, or MAJC would had been made and sold even more generally. But at the time no one could predict the future, and decisions were made with the best information available at the time.

A number of MAJC processors have been sold as components on XVR-1000 (one each) and Zulu (four each), but no follow-ons to MAJC processor were made. Sun did learn about multi-core processor design from this project, and that has leveraged other SPARC based projects.