|
Comment
from E-mail:
I just though i'd drop you a line regarding your early Computer Language
work.
I read that you developed not only all the Hardware for the first Apples
but you wrote a BASIC as well. I was just really impressed, I'm a computing
scientist and have been spoilt by Java and other Languages with a million
and one short cuts for the lazy programmer. I have some idea how much
work was involved with what you did involves and it was a good effort
in my book.
If you do have five minutes I was wondering a couple of things.
How many hours did you put in back in the early days? I work loads (well
quite a bit) and still can't get the GUI on my Information Filtering Agent
to work properly.
Woz:
My hardware design came easily. I'd start by scanning manuals of every
chip available, keeping a good internal idea of which ones were expensive.
I'd come up with a mental idea and follow tech notes to start putting
the various pieces together on paper. Then I'd stare at my design and
try to save chips. This sometimes just involved changing the exact gates
used (from Nand to Xor, for example) in order to take fewer chips, each
of which had a certain number of one specific type of gate. So a design
with all NOR gates might take fewer packages than one with NAND and NOR
gates mixed.
I'd also draw timing diagrams of signals and think of their properties
and come up with clever changes to them on occasion. Once a signal needed
a pulse that could come from one of two sources. I used an X-OR gate,
which generated either a positive or negative pulse at the same time and
was quite clever. I'd generally design in this mode, thinking up other
ways to save lots of chips.
For example, on the Apple ][ I had designed gates and registers to generate
the needed system and memory timing signals. I then came up with a small
state machine approach, with a register and a 256 x 4 bit PROM. The PROM
took the current state and generated the next state of the register on
the next clock pulse. I used a synchronous register so that all the outputs
were free from switching glitches that could arise from a gated approach.
This state machine approach reduced perhaps 8 chips to 5. But even after
this improvement I kept looking. The timing signals tend to come in sequences,
signal A, then signal B, then C, and so on. This suggested a shift register
which progresses a pattern from left to right. I played with the timing
needed for the various RAM clocks and was able to have them occur at regular
clocked intervals that were multiples of the computer clock timing, which
had been pre-chosen based on color TV specs. Well, I wound up with this
single shift register, with feedback to re-initialize it at the right
time. The entire timing circuit now took only 1 chip.
I'd work in this fashion for 2 weeks to 4 weeks on projects like the Apple
][. Small improvements and changes would yet come over the next months,
but not much significant. Once the design was on paper I'd go in and think
out where all the chips would go on a breadboardin card that we had at
HP. If extra pins were needed for longer chips than the breadboarding
card was designed for I'd drill some holes. I layed out the chip positions
tightly and orderly and in a pattern that made sense from the schematic
(what needed to be near what other thing). I'd then solder each pin of
all the chips in. This generally took a night, including soldering all
the IC pins.
Then I'd come in for another night or two (or a weekend day) and wire
up my circuit. You can see that the actual assembly was very little of
the total time. It would generally take me just one more night to get
things totally working, which sometimes involved changes to the circuit.
Rarely I'd have to cut out a chip and solder a different one onto it's
stubs. I used sockets for the expensive chips like the processor, and
sometimes for all the chips. This was fortunate because my Apple ][ breadboard
would work for a while and die. I determined that it was failure of the
MOS Technology 6502's which were supposedly capable of 2 MHz operation
but couldn't if they got a little static electricity jolt. I remember
one time at the Homebrew Computer Club having to swap the processor with
one that I had in my pocket. By the time we went into production we had
processors that didn't have this problem.
That may sound like a lot, but the hardware was the easy part for me.
The software that I wrote was very tight because ROMs were small and expensive
back then. I'd work in all my free time, sleeping very little when things
were hot, for about 2 years leading up to the Apple ][ shipment in 1977.
Software is much more flexible than hardware, exhibiting many ways be
which to shorten code. I'd use the same techniques for my machine language
software that I used with hardware. That's why I included some hardware
examples that you wouldn't necessarily have understood. I couldn't afford
an assembler so I converted instructions to hexadecimal codes in memory
myself. This made me extremely intimate with the programs and with the
processor. I could carry around programs in my head and come up with ideas
for improvements. I wrote the startup programs this way (the 'monitor'
program of the Apple I) and the BASIC too. The BASIC was my hardest project
of all, taking over 4 months and working day and night on it (besides
my job at HP).
Of course I'd have program problems to debug. But I had no debugger. I
wrote a few aids myself to help me out, so that I could type instructions
in instead of hexadecimal codes, and so that I could see a disassembly
without variable references, only addresses or offsets. I spent a long
time trying to think my way through a piece of failing code and solved
many problems this way. Sometimes I had to write example inputs down and
work through the code and it's loops, keeping track of the variables on
paper. This technique almost always found the oversight. In hard cases,
I'd add code in the middle to stop at the correct point so that I could
single step through some code. I remember having built a circuit for use
with the Apple I that gave me a pushbutton to step instructions. I think
that I had some debugging code to do this on the Apple ][. I might have
to add code to my problematic routine to save some states in specific
memory locations, and then I could examine these locations for clues as
to what went wrong.
When worse came to worst I'd even have to hook up an oscilloscope and
look at the signals on each address or data pin of the processor, writing
them all down. I'd look at the signals and convert them to a sequence
of binary numbers. This would tell me where in the program an unexpected
address was being accessed, possibly by myself misunderstanding an addressing
mode of the processor, possibly by using an index that should have been
complemented.
Comment from E-mail:
What do you think of Java, have you ever programmed in it?
Woz:
No time these days. The last programming language that I learned, one
that has paid off very well for me, was AppleScript. I got the time to
learn it during a week long stay in Hawaii with my family. I've bought
Java books and started the first chapter, but as long as a phone or email
is near, forget it. There's no time (family, home, tons of computers to
keep running, WAN administration, classes, kids' activities, bills, but
mainly email).
Comment from E-mail:
I worked at Apple during most of John Scully's reign as CEO. I think
we lost so many loyalists because too many Mac verions were released in
rapid succession. A person would pay big bucks for a current model only
to have it made obsolete with another model introduction a couple of months
later.
Woz:
That's the story with computers for the last 40 years.
Comment from E-mail:
I've been forced to be a PC user at work for years, but I still have
2 Macs and an Apple ][c at home. Some of the best educational software
ever developed was for the Apple ][.
Woz:
Almost all of the educational software at one time was for the Macintosh.
But PC's caught up here. How long do you think that good titles would
be single platform once PC's had a large market share in schools?
Comment from E-mail:
It's a shame Apple didn't license the Mac for open production in 1984.
Macs would have flooded the market and we would never have heard of a
PC!
Woz:
I agree that would have been the best for Apple. I believe that Apple
would still have had plenty of control over the user experience. But they'd
probably be in court with the Justice Department by now and owners wouldn't
be so passionate. You have a strong purpose when you're a minority.
Comment from E-mail:
A friend of mine recently asked me about a quote of yours, in which
you supposedly said that the reason you came up with a computer design
before anyone else was, you took more LSD than anyone else. Is that an
accurate quotation? If so, hat's off to you!
Woz:
Sorry. I never took LSD or any other illegal drug. I just had a free thinking
head, technically and in other ways.
Comment from E-mail:
Just a quick reply to the gentleman who thinks Microsoft did nothing
wrong, took you off his hero list, and says he will never touch a Mac
again. While he's entitled to his opinion, he obviously has no clue of
anti-trust laws or why the exist. I find is hard to talk to people who
so arrogantly talk about things they don't understand.
Woz:
He might just have had a bad day. How do you feel when you press a button
on a game or computer and the proper action isn't taken? Could you kill
the person responsible sometimes? He's probably taking some inner frustration
out against the wrong party. Psychologists call this an attribution error.
The idea is that if you can't place the cause of a bad feeling, you blame
it on other handy things.
|