by Tracy Kidder
Designing Eagle, they went far beyond what could yet be done on a single chip. Many of the chips that they used came to them ready-made to perform certain kinds of operations. This took most of the pure physics from their endeavor. West's decision to use the new chips called PALs gave the designers certain advantages. Certainly it helped some of them work swiftly. When Ken Holberger, for instance, came to a tricky part of a design, one that promised to take a long time to create, he could often just draw a box on his diagram and leave that box blank. A single programmable PAL could be made to perform all the functions that the box had to do. "PAL here," he would write on his diagram, in effect. Later, he could come back and program the PAL. In the meantime, prototypes of the new machine could be built. But eventually the designers had to program every PAL. They had to invent the complex internal organization of each of those chips. They had to know what all the chips were meant to do. And there were thousands of chips in an Eagle.
Some engineers likened the chips to an unassembled collection of children's building blocks. Some referred to the entire realm of chip design and manufacture as "technology," as if to say that putting the chips together to make a computer was something else. A farmer might feel this way: "technology" is the new hybrid seeds that come to the farm on the railroad, but growing those seeds is a different activity — it's just raising food.
Eagle's designers adopted ideas that were abroad in the industry. From their files they took some of the material that had been concocted in the days of EGO and Victor; much of the inspiration for the details came from EGO. But they invented the largest part of Eagle themselves, in five or six months, between the late summer of 1978 and the new year.
From one angle, the task was to make an engine that would obey — without fail and at great speed — each of the roughly four hundred chores named in Eagle's instruction set. One night after work, Microkid Jon Blau described for me the progress of just one of these basic chores, or assembly-language instructions, through the engine. He left out some steps, simplified many others, and kept the description fairly abstract. Even so, the short tour consumed several hours.
Blau was living in an apartment complex near Natick, Massachusetts. His rooms were neat but sparsely furnished, with an old couch, a beanbag-type chair, and a bookcase, eclectically stocked — his intellectual diet seemed to consist of science fiction, well-reviewed novels, philosophy, physics and math. A ten-speed bike leaned against a wall in the bedroom. His bed was a mattress on the floor. He apologized for the emptiness of the refrigerator. It was the apartment of a young man going elsewhere, and it made me feel old.
With Blau, I descended, as it were, into Eagle's engine room. He pointed out the main parts of Eagle and spoke of them as if they were sensate things that asked questions, looked up answers, sent and received messages. It's a way of talking about computers that makes some people nervous, but it was one of the ways he thought about the machine when he was working on it.
In order to execute an instruction in a user program, the engine has to do a lot of other work first, Blau explained. We should assume that a special program — a program of programs, let's call it — is already running. This program communicates with people using the computer and it does jobs for them. It schedules and monitors all the user programs that are currently running. It will also find a program for a user. This program of programs contains input and output assembly-language instructions, which tell the Input/Output Control board — the IOC — how to move information back and forth between the engine and the users' terminals. (The IOC makes it possible for the computer to communicate with the outside world; roughly speaking, it plays the role of a translator who knows many different tongues. It can arrange for the movement of information at high speed and also for communication with user devices that work at relatively slow speeds. It's complicated.)
Okay, said Blau, someone out there at a terminal, a user, wants to run a program; call it "program FOOBAR." Through a terminal, this user tells the program of programs: "Run program FOOBAR." The program of programs tells the IOC to move part of that program from a storage disk outside of the CPU into the CPU's "Main Memory," and to do so at high speed. This accomplished, the program of programs turns over control to program FOOBAR. The machine then starts executing the instructions of program FOOBAR, one after the other. Before the engine can execute an instruction, it has to find it, of course. Then it has to fetch it and decode it. Thus we came to the printed-circuit board known as the Instruction Processor — the IP, it was called, and it was quite a tricky thing. The IP has a relatively small memory of its own. In a sense, the IP makes assumptions about what the next instructions in the user program will be, and it keeps those instructions handy in its storage. Acting on its assumptions, it finds, fetches, and decodes instructions ahead of time. It "gets them in the pipeline." For this reason, the IP is also known as an accelerator; it does work that any computer must do, but it does it in advance.
Suppose, however, said Blau, that program FOOBAR has been running for a while and the IP discovers, as it does now and then, that it doesn't have the next instruction in its own memory. At this point the IP sends a message to the Address Translation Unit — the ALU — which among other roles, keeps a map of the CPU's Main Memory. In its message, the IP asks the ATU for the location of the next block of instructions in user program FOOBAR.
Let's assume, said Blau, that the ATU finds that next block in its map. This means that the needed instructions are residing in Main Memory. The ATU knows where and passes the news to the IP. The IP, in turn, sends a message to another accelerator, known as the System Cache — Sys Cache, for short — asking for those next instructions.
Maybe the Sys Cache has that next block of instructions. If so, it doesn't have to send away for them, but can pass them right on to the IP, and time is saved. If, however, the Sys Cache doesn't find those instructions in its own memory, it retrieves them from Main Memory and passes them on to the IP.
"But," said Blau, "this next block of instructions may not be in Main Memory either." Other people are using the computer, running other programs. Main Memory is large but not large enough to hold all the parts of all those programs at the same time. Usually it's holding only some parts of each program. So we should assume, said Blau, that the next section of program FOO BAR is sitting outside the CPU, still in peripheral storage, on a disk. In this case, the ATU doesn't find the address of the next block of instructions in its map. So the ATU sends a message to the Microsequencer. (The sequencer holds the microcode, and it was worth noting, Blau said, that many of the actions so far undertaken have been performed at the direction of microcode.) The Microsequencer responds to the ATIFs message by sending out a certain microprogram, which turns over control of the search to system software. System software, in turn, orders up something called a "page fault program," which contains many assembly-language instructions and hence many microprograms. This page fault program should tell the machine how to find that next block of instructions in program FOOBAR and how to bring it into the memory system.
It really should not happen — it would constitute a software design error if it did, Blau said — but just imagine that the instructions for the page fault program aren't in the memory system but are instead out on a disk somewhere. In order to get the instructions for the page fault program off the disk, Eagle would have to perform a page fault program, but it couldn't perform a page fault program to get the instructions until it already had them. It would be as if you had locked up a cabinet and left the key inside, Blau said. "If this happens, the machine will fall down an endless series of mirrors."
Such a flaw — flaws are often known as "crocks" — is so notorious as to have become uncommon, but Eagle's designers prepared for it just in case. Via the Console Control board — the CC — Eagle is intimately connected with a microcomputer, a standard Data General microNova, which acts in part as Eagle's therapist. If Eagle goes haywire, the microNova should still function; thus, it can r
un diagnostic programs to find out what's wrong with the larger machine even if the larger machine is dead. The microNova also constantly paws through the bigger machine, on the lookout for such special deadly crocks as a page fault within a page fault. If it detects one, the CC board will be alerted and it will send back a message to the microNova, which will send a warning to the system console, the big typewriterlike machine that sits next to Eagle's CPU, and the console will print out the following:
INFINITE PAGE FAULT. CPU HALTED.
If you're the operator of the system and you see this message, you put in a panicky call to Data General right away.
But suppose none of that happened, said Blau. Suppose the next block of instructions needed for program FOOBAR is easily found. The Sys Cache sends that block to the IP. The IP throws away another block of information to make room for this one, and now the search is over at last. Eagle can begin to execute the next instruction in program FOOBAR.
The IP examines the encoded instruction and determines that it is a "Skip On Equal" — one of those instructions that tells the computer to compare two values and, depending on the result, to follow one of two paths. In assembly language it's written as "WSEQ" (which could be the sound a rusty gate makes).
Specifically, WSEQ instructs the machine to compare two values and if they are equal, to skip the next assembly-language instruction in program FOOBAR and go on to the instruction after it. Assume, said Blau, that the two values — electrically encoded, of course — have found their way into the Arithmetic and Logic Unit, the ALU (sometimes known as "the number cruncher," the heart of any computer).
The IP has determined from the WSEQ instruction several items of information. The most important of these is the address of the microprogram that will tell Eagle exactly what to do in order to Skip On Equal.
The Microsequencer is asking for the address of the next microprogram. The IP now sends this address to the sequencer and the sequencer starts running the microprogram. The IP has also derived at this time the location of the two values that are going to be compared. These packets are already in the ALU. The IP tells the ALU exactly where they are.
"Now we're moving down to a lower level of abstraction," Blau said. "We're going down to where the microcoder lives."
There's a clock inside Eagle. It ticks every 220 billionths of a second. Between each tick of the clock, Eagle performs one microinstruction.
"Tick," said Blau.
The sequencer sends out the first microinstruction of the WSEQ microprogram. The microinstruction is 75 bits — 75 units of high and low voltages. They scatter throughout the circuits. Some go to the ALU and tell it to subtract one of the two values from the other. Some of these microbits go to the IP, some to the ATU and IOC, and some go right back to the sequencer and tell it the address of the next microinstruction in the WSEQ microprogram.
"Tick."
The sequencer sends out that second microinstruction. Part of it goes to the ALU, telling the ALU to examine the result of its subtraction. If the result of the subtraction is not zero — if, in other words, the two values are not equal — then the ALU sends a low voltage down a certain wire. The microinstruction has told the Microsequencer to monitor this wire. Finding a low voltage there, the sequencer brings the WSEQ microprogram to an end. It sends a message to the IP, saying, in effect, "Not equal, no skip on equal this time —get the next assembly-language instruction in the user program."
But if the result of the ALU's subtraction Is zero — if the two values are equal — then the ALU sends a high voltage down the special wire that the Microsequencer is monitoring. The sequencer interprets this and sends out the third and last microinstruction in the WSEQ microprogram.
"Tick."
Out goes this last line of microcode, telling all the boards to wait, except for the IP. The IP is told to skip the next assembly language instruction in the user program and to resume operations with' the next instruction after that. This, finally, is how Eagle skips over one crossroad in a program and starts down another road.
West had said that designing a computer was "a mind game." I asked Blau whether following an instruction around through the engine in the way that we had was the sort of mind game that they played when designing Eagle. "You bet it is!" he said. But they played hundreds of such mind games; and figuring out how to equip Eagle merely to WSEQ was itself much more intricate than Blau could fully explain in a single sitting.
Such games of logic, especially if they are played in a hurry — while flying upside down — can take a grip on an engineer's thoughts and hold on. After playing this way for a while, you look at a tree and, aha, it is clear that a tree is much like a computer; and a road with side streets is — what else? — a kind of computer program. Chuck Holland said that this unpleasant sensation, of being locked inside the machine, usually lingered three days — on the rare occasion when he got away from the basement for that long.
West would sit at his desk and stare for hours at the team's drawings of the hardware, playing his own mind games with the results of the other engineers' mind games. Will this work? How much will this cost? Once, someone brought a crying baby past his door, and afterward it took him an hour to retrace his steps through the circuit design he had been pondering. Laughter outside often had the same effect, and once in a while it made his hands shake with rage — especially if he didn't like the design he'd been staring at.
West usually drove out of Westborough fast after work. "I can't talk about the machine," he said one evening, bent forward over the steering wheel. "I've gotta keep life and computers separate, or else I'm gonna go mad."
LA MACHINE
One morning shortly after the designing, West was sitting in his office with the door closed, staring at schematics.
Deadlines lay impossibly near at hand. One of the group's veterans, observing the scene outside West's office, remarked: "The tension among the kids was phenomenal. I could just feel it." Now, in the cubicle across from West's door, a couple of members of the Microteam began to laugh — first one, then the other, then both of them, more and more raucously.
A moment later, Carl Alsing's phone rang.
It was West. "If you don't shut those guys up I'm gonna kill 'em!"
"He was ripshit," said Alsing. "I had to go out there and tell them not to laugh. It was awful I felt so embarrassed. I felt like one of those old supervisors from the 1800s who used to hire children and make them work eighteen hours a day."
West took a day off and went to look at sailboats.
One Sunday morning — the team's official day of rest — West was at home, trying to lose himself in the newspapers, when the water pump in his house broke down. Throwing the papers aside, he went to the basement to fix the thing. For him, this was a trivial task. He knew just how to do it. He had scarcely begun, though, when hitting some minor setback, he grabbed the pump and hurled it across the room. He stood there, staring after it. If he had done that, what might he do next? In order not to find out, he went upstairs, told his wife to call the plumber, and went right to bed, at midday.
What was wrong with West? Wasn't the worst behind them, now that they had finished the design? He didn't want to talk about it. He merely shook his head.
Now, early in the new year, something like the computer existed, in the form of two partially assembled prototypes. But Eagle wasn't even the equivalent of a pocket calculator yet. The team now had to make that computer work. They called this part of the project "debugging." West had told Ed Rasala to draw up a debugging schedule that would bring Eagle to life by April, the date West had named for the bosses. West had gotten Manufacturing to send down some senior technicians from the factory in Portsmouth, New Hampshire, both to bolster the ranks of debuggers and to get Manufacturing involved. Rasala had put the Hardy Boys on two shifts. West had prescribed eight hours of work for Saturdays. They had made some progress, but now it was coming painfully and slowly. In the local idioms, they were "moving three steps forward
, two steps back," and the debugging schedule was "slipping a week a week."
West had assumed that debugging Eagle would resemble the debugging of Eclipses. He had been deceived. You had to make many parts of Eagle start working, it now appeared, before you could really begin to fix it — this because of certain new features, which everyone agreed were "sexy." West couldn't ignore the evidence; he didn't know how to debug this machine, and he could not make himself believe that Rasala and his Hardy Boys would figure it out for themselves.
That fall West had put a new term in his vocabulary. It was trust. "Trust is risk, and risk avoidance is the name of the game in business," West said once, in praise of trust. He would bind his team with mutual trust, he had decided. When a person signed up to do a job for him, he would in turn trust that person to accomplish it; he wouldn't break it down into little pieces and make the task small, easy and dull.
To Alsing, West still had that knack for making the ordinary seem special, and the way West said "Trust" made Alsing wonder whether either of them had ever heard the word before. But West prided himself on his skills at debugging and, by repute, he excelled at it. He wanted to go into the lab and will the machine into life, Alsing thought. But if West barged in there now, he would be admitting that he didn't trust his team after all. So West was staying away from the lab and instead was banning laughter outside his door and throwing water pumps around. Most every day now West called Alsing into his office, closed the door, and asked, "What's really going on in the lab, Alsing?"
Wasn't all this excessive? If you set a preposterous schedule, don't you figure that it can slip a little? True, said Alsing, but not to the point. "If you say you're gonna do it in a year and you don't take it seriously, then it'll take three years. The game of crazy scheduling is in the category of games that you play on yourself, in order to get yourself to move."