VMAX - A Virtual Machine for the PCMAX2

If you want to go straight to the document describing the VMAX computer, click here.

In early 1990 I went to work for Everex, a computer manufacturer in Fremont, CA. However, I worked in Sebastopol, CA, not in Fremont. At some earlier date one of the founders of Everex wanted Mike Higgins, an ace programmer, to work for him. Mike lives in a semi-remote region near Cazadero, CA, and he had no interest in moving to Fremont. No problem. He could work at home. So began his career at Everex.

Eventually, there was more work than Mike could handle on his own, so Everex hired another programmer who worked from Mike's home. Eventually there were five or so programmers working in Mike's living room, and he decided a change was in order.

Soon after, the whole operation moved to a building opposite Palm Drive Hospital in Sebastopol. Mike had a sign placed in the front lawn: "The Everex Graphics Research Lab". There was never any official company approval of this sign, but nobody complained (if they even knew about it).

I saw the sign one day, and, in need of work, I went in and met Mike. By this time there were probably 15 programmers busy at work. Mike loved solving problems and writing code, and had not planned on running a largish group of programmers. He wore a big button which said: NOT A MANAGER.

I told Mike I was looking for work, and he told me what he was looking for: A C compiler to run on a PC expansion board, the PCMAX2. This board had a fair amount of memory and it ran very fast compared to the PC's of that era. Unfortunately writing programs for this board was very tedious. Microcode programming was required, something actually at a lower level than the usual assembly language.

Mike had a good idea about how to get a C compiler for the PCMAX2 without writing one: Use GCC to run on the PC and generate code for the PCMAX2. (This is back in the days when GCC stood for GNU C Compiler and not GNU Compiler Collection, as it does now.)

He gave me a document on how to describe the hardware of a computer to GCC so that GCC could generate code for the computer, and asked me to take a look at it.

I had learned many years ago (see this and this ) that the first thing you need to figure out is the runtime, i.e., what goes where in memory. Since the PCMAX2 had two levels of memory of varying sizes, this was an interesting problem. I came back to Mike after a couple of days with a sketch of a design, and he hired me.

I no longer remember if Mike had already figured out that we needed a virtual computer or if that became clear as I considered how to get GCC to generate code for the PCMAX2. There was just too big a gap between what GCC expected of a target machine and what the PCMAX2 actually was. So we decided that the first step was to define a virtual machine that GCC would generate code for. Of course, an interpreter would need to be written to run on the PCMAX2 and make it look like a VMAX, the name we chose for the virtual computer.

So I set to work designing a computer. After a couple of iterations involving critiques by several of the programmers at our lab, we ended up with this document describing the VMAX computer.

I not only got to design a machine, I got to design an assembly language for the machine, and to design and code these utilities:

Plus, I got GCC to compile C source programs to the VASM assembly language.

As a demo, I wrote a really short C program that simply displayed a string on the console. So Mike wouldn't know from the source code what would be displayed, we encoded the message with ROT13. We compiled the source and ran it and Mike got to see the sophisticated output: "Hello, Mike".

But, all was not roses, roses. A month or so before the big company Christmas party in Fremont, the party was canceled. I later realized this was a sign from above (or from somewhere).

In early 1991 Mike called a meeting and told us that about 1/3 of the group would be laid off. He went around to each office and told each programmer if he was cut or not. The programmer writing the VMAX interpreter for the PCMAX2 was laid off. Before I could worry much about what that meant to my project, I got a call from a former colleague who was working for Symantec in the nearby town of Novato. I went down to see him, and within a very short time I was working for Symantec.

So the VMAX in all its glory was essentially dead. But a very detailed spec still exists if anyone cares to build an interpreter.

Epilog: As I remember it, in the fall of 1991, the Sebastopol Everex group was shutdown. Not much more than a year later, Everex filed for bankruptcy.

So it goes ...

Take away: Beware when the company Christmas party is canceled.