4 Nov., 2009
It's late summer 1980 and I'm working at my office, part of a huge room with sandblasted wood columns in Berkeley that I share with The Community Memory Project. It's in an old woolen mill building built in 1907, when lots of people had suddenly moved out of San Francisco and some moved to Berkeley. The columns have four-way diagonal braces near the 2-story-high ceiling, for earthquake bracing, and they give the impression of being in a forest. To enhance this impression we have painted the ceiling black to create a night sky impression.
My drafting board is set up next to a window, looking out on Parker St. The windows have cyclone-fence type gratings, and there is a railroad track in the street outside, which is occasionally used to move a rail freight car to a nearby factory. My workbench is next to the drafting board, the blueprint machine, and opposite a sofa made of foam rubber with a cloth covering. Three blocks down Parker Street, next to the railroad tracks, the Palmolive soap factory belches a continuous plume of water vapor.
I'm working on the design of the Osborne-1 portable computer. First comes a block diagram showing the major elements – CPU, RAM memory, ROM, timing generator, parallel interface, serial interface and baud rate divider, video address generator and multiplexer, floppy disc controller, power regulators and modem. I had thrown the Pennywhistle 103 modem design into the mix in my discussions with Adam.
Then, using one sheet per section, I draw rectangles representing the chips I knew would be needed in each section. I am filled with anxiety and doubt. My contract with Adam – Brandywine Holdings, technically - gives me $3500 per month plus 25 percent of the company, with a penalty of 1 percent for each two weeks the design is late. Can I do it? I don't know.
To begin with, I don't know which of two processors – the Intel 8085 or the Zilog Z80 – we'll use. It would all be determined by the price, which we won't know till later, so I drew two alternate CPU pages, one for each. For most of the other large-scale chips there were several choices, so my schematics were rather vague on details – each page became its own block diagram with missing pieces to be filled in later.
I didn't have the circuit, but I needed to get a circuit board into design as quickly as possible. I knew from analyzing the disastrous wire-wrapped dynamic RAM board design in the back room at Osborne Associates that I would need to use printed-circuit construction for the RAM memory section. I didn't have time to do the tape layout necessary to have a printed circuit built, but I could teach someone to do it. Gabriel Stern, an electronic musician who was a friend of a friend, was out of work and seemed bright enough. I taught him the basics and set him up with my light box and Mylar film to lay out the RAM and CPU pages of the design – both CPU pages, as this board would be able to use either CPU.
For the rest of the chips I would use the noisier wire-wrap technique, which required only enough holes in the board to accommodate enough chip sockets of assorted sizes. Aside from copper traces set up for power and some holes to mount bypass capacitors, that was all I'd need. Gabriel had a lot of tiny black, sticky doughnuts and yards of thin, black sticky tape to position exactly on the intersections of precision grids, but he turned to work with a will, in a spot on the 2nd-story loft in the room.
I flew with Adam to Wescon (Western Electronic Show and CONvention) in Anaheim that fall to meet and talk with salesmen from the chip and component companies. With Adam grinning behind me I told them that we would be ordering 10,000 parts a month, and that we wanted to pay a very low price for each chip. When a salesman agreed that two dollars was a reasonable price, I proposed one dollar, and knew I had hit home when he lost his composure, shouting “Lee!” We all laughed, and I had a better idea of what the “price point” would be.
None of those numbers constituted a binding quotation, but I could work with them. Adam took the CPU decision out of my hands, informing me that he had worked a deal with Zilog for the Z80. With many erasures, the schematic diagram began to flesh out. One principle didn't change – the entire circuit would derive its timing from a single crystal. This would prevent crawling noise patterns from appearing in the video, and would save the cost of more crystals. As I would say, “the number of crystals in a computer is equal to the number of designers”, a principle that I would not be able to maintain for long.
Gabriel finished the layout of the prototype board and I soldered in the parts and wire-wrapped the non-RAM circuitry (the modem was left for later). I had given him a trade laying out circuit boards, which he did for a living thereafter, leaving time to build electronic instruments and raise a family. I went on to get the proto board working.
Richard Frank, President of Sorcim Corp., started coming in to work with me on getting the necessary rudimentary software working so that I could get the hardware working. I moved the prototype into a tiny room under the loft with a single, lockable door – we were going to keep the design a secret until we unveiled it.
One of the unknowns I now had to resolve was the number of columns of text to be visible on the CRT display screen. CRTs “sweep” a spot of light back and forth horizontally at 15.75 kilohertz and vertically at close to 60 hertz, creating a network of horizontal lines called a “raster” (rhymes with “faster”). It takes a certain amount of time for the spot to snap back and start the next line (the “retrace interval”), and if you don't turn the spot intensity to “black” (blanking) it will show a messy secondary network over the intended raster image.
Manufacturers are usually quite vague about the duration of the retrace interval, so I had to discover it myself. The period of the horizontal signal was 64 microseconds, and by trial and error I was able to find out that the visible portion of the horizontal sweep time was about 52 microseconds. My 16 MHz clock was divided down to 1 MHz, or 1 microsecond per displayed character, so that meant I could display 52 characters per line, and 24 lines per screen.
Adam had specified only 40 characters per line, like the Apple II, and upper case characters only, also like the Apple II. I could show 52 characters in an upper/lower case font I had created myself – the characters actually had 16 dots but the character ROM had its dots doubled in all but a few places - like the central dot of the “M” and the “W”, which displayed as blurs.
When I got the display working it was late - after midnight. Adam had told me to notify him as soon as it worked. I called him and woke him up.
“I have the good news and the bad news, Adam,” I said. “The bad news is that you can't have 40 characters.” He began to say “can you..”, but I cut him off. “The good news is you can have 52.” There was silence for about a second, then “Oh....that's very good!” His voice was squeaky as it was whenever he was grinning.
Of course, 52 characters is less than 80, which has been the line length for computers since the 80-column Hollerith punch card used by IBM, which defined the printer line which in turn defined the terminal line. We had to provide for that, so I had designed in a counter which would allow for the display line to start anywhere within a span of 128 characters. The CPU could set the starting point for this counter, so the display had a horizontal scrolling feature across a field of 128 characters.
128 is defined by seven binary bits, and a byte is 8 bits, so there was a bit left over on the counter, and this I defined as a half-character bit. The idea was to allow smooth scrolling when desired, such as when “coasting” to a stop. A lot of other things had to be taken care of first, and eventually Richard Frank got around to it. He called me and complained that the horizontal scrolling became jumpy when you used this bit.
I thought I knew all about it – clearly the low-order bit had somehow been exchanged with a higher-order bit – this would cause the display to jump around by several characters when the low bit was changed, and we hadn't changed it until now. But probing around in the circuit and looking at the code revealed that everything was working exactly as designed. And yet it was jumpy in scrolling!
It turned out that it was an effect of visual perception. The eye likes it when things don't change too much, when a character that moves lands right on top of where there had been a character before. It can deal with that. But a character landing on a spot halfway between where two characters had been upsets our perception, and we see it as a major disruption.
Oh well, it was only one bit. We just kept it set to zero.