When I left headhunting, I was 22. I had a short assignment writing PL/I for something called the Formalwear Information System. My employer, Telos Computing, had basically decided that I was not socially fit for the office (they were probably right). Instead of just laying me off, my boss Dick Brewer, who was a heck of a nice guy, assigned me to this contract with Palm Beach Formalwear, who rented tuxedos. This ran on an IBM System/370 under MVS. This was a big virtual memory mainframe. We used IMS as the database, and DL-I as the query language. (This was a bit odd; CICS/DL-I was the combination more typically used at the time.) Do not ask me to describe either now. Ditto for JCL. We used TSO from IBM 3270 terminals instead of punch cards. The response time was so slow that we called it turnaround because pressing a key was like almost submitting a card deck to the mainframe.
We only had two terminals and desks for three programmers, so I worked swing shift. This really turned my day around. I did what little I did for fun during the day, which simplified many tasks. Businesses such as dry cleaners had something like banker's hours in Santa Monica. It also meant grocery shopping at Mayfair on Wilshire Blvd. in the wee hours. They were one of the few 24 hour markets at the time. Shopping at 2:00 AM gave a combination of customers weirder than me, and the inventory people wandering the store working for RGIS. (Little did I know that I would briefly work for them part-time some years later.)
Anyway, the Formalwear Information System (or was it Formal Wear Information System? the acronym was FWIS, I think), was only a few months, and I needed a new job. I interviewed with a very strange small company, called Futuredata (on the edge of being purchased although I did not know it) building something that I did not fully understand. But the only offer that I received was from Lexitron out in Chatsworth. (Chatsworth at that time was the rural northwestern edge of the San Fernando Valley.) They offered me a decent salary; I think about $30,000 a year. On the way through HR, some bigwig saw that I lacked a degree and my salary offer became $24,000. I was miffed, but I had met the girl of my dreams and I think that I had proposed by that point. We planned on moving to Chatsworth, renting an apartment, and she would continue her education at CSU Northridge.
Lexitron was a division of Raytheon. They built what was about to become a dinosaur: a dedicated word processing system. It was a portrait layout screen that provided a nice editing and proofing system. These were widely owned by big government agencies of the time, which is probably why Raytheon bought Lexitron.
I remember only one project that I worked on during my four weeks there. My boss needed something textual (perhaps some sort of grammar rules) transformed in some way that was big enough that doing it manually was impractical. I was handed a tool called Stage 2 that was something that might result from an unhealthy relationship between awk and sed. I managed to beat Stage 2 into submission. In retrospect, this may have been my boss seeing if I was up to the task. I was, to my surprise.
Anyway, GenRad was a big East Coast old electronics company that apparently laid the framework for the oscilloscope (yes, that old) before selling it to a little Oregon company, Tektronix, who found something useful to do with the technology. GenRad bought Futuredata and with increased funding they made me a decent job offer, about $30,000 a year. Not having to leave Santa Monica for remotest Chatsworth and a raise made this an easy choice.
This was my first experience of startup wealth. Paul Page and Bruce Gladstone were President and VP of Futuredata. Bruce bought a BMW 733i, back when these were signs of wealth, before most of America became rich. Paul bought two Porsche 928s for himself and his wife. One red, one white. Like Bruce's BMW, these seemed like astonishing wealth.
What did Futuredata build? They made one of the first in-circuit emulators not made by the chip manufacturer. (Intel eventually trademarked that phrase, so we started selling it as an "in-situ emulator.") Imagine the microprocessors of that era: Intel 8080, 8085, 8086 (a lot of military projects then), 8088 (IBM PC), Zilog Z80 (most S100 bus microcomputers of the time), Z8000 (Atari's short-lived venture into PCs), MOS Technology 6502 (Apple II), Motorola 6809 and 68000. How do you load and test software?
You pull the chip out of the socket on your motherboard and plug in our product. Our probe contained the chip, and the associated hardware kept track of all the microprocessor bus signals. References to RAM were rerouted to the emulator's simulation memory. Every signal on the bus was accessible and controllable. You can set breakpoints to suspend execution when the IP (instruction pointer) reached a particular address, when a particular byte of memory was read or written, you could even examine things like instruction prefetch.
Instruction prefetch was one of the ways that processors such as the Motorola 68000 could be so fast. When it was executing the current instruction, the processor has already fetched the next instruction, determined if it would need to fetch memory contents, and started that operation. The next cycle was ready to do the add. The 68000 would sometimes be doing stuff six cycles beyond the current instruction.
We had a gadget called a logic analyzer that would let you watch, record, and stop on particular actions on the microprocessor bus.
You could also run on the target processor with simulation memory or vice versa if something was timing dependent. It was fabulous.
We had no easy way to force a stop in the 8086. There was no NMI line (non-maskable interrupt) so we had to force an INT 3 instruction into memory, which forced an interrupt so we could take control of the processor, then restore the original memory contents. This was a painful effort. I had code that had to be loaded into memory to do this while an EE sat watching the bus on an oscilloscope to verify that we were successful.
At some point I saw that we had paid an unreasonable amount of money to some consultant to write a disassembler for the 8086 processor. Disassemblers are programs that looks at the machine code and figure out the corresponding assembly language. On the Interdata 16-bit minicomputers, for example 4A10 5234 was Add Halfword 1, x'5234'. Add the contents of that memory address to register 1. I had written disassemblers before (in high school) so I knew it was trivially easy.
I do not remember which was the first one. It took about 20 hours, mostly developing a general strategy. By the time I reached the 6502, it took five hours. This is all written in Z80 assembly code. But boy did I have a have a great debugger!
This was the most fun that I had until I started working in startups. I was working with my best friend (best man at my wedding), and a bunch of fun and eccentric engineers.
In the 70s and again in the 80s, I was the programmer at a company which built 6800 and 6809 based microcomputers. (Yes , "the" programmer- it was a very small shop.) We had an ICE for debugging, which I referred to as "the bigger hammer" (what you get out for a really difficult problem). I don't remember the make; it could have been Futuredata. I really loved what one could do with it.
ReplyDeleteI also remember having to write a disassembler.