Migrant Software Worker: A Technical Memoir of the Beginning of the PC EraThe primary focus would be my career as a software engineer, which was somewhat unusual. I was writing telemetry software for the Voyager mission at Jet Propulsion Labs when I was 18, and I worked for several startups in the 1980s and 1990s.
Being a technical memoir also avoids the danger of too much self-revealing. I am reminded of P.J. O'Rourke's remark that if you accuse a Hollywood celebrity of being a drunken, drug-addicted pervert, his response would be, "Thank you for reading my autobiography."
Of course, to make it interesting requires explaining technologies that are largely hidden from modern developers, such as a problem at one small company where we were installing one of the first of the plug-compatible memory cards for Interdata minicomputers. With the memory card installed, the operating system would not boot. I had an assembly language listing of a slightly older version of the operating system. My only debugging tool was inserting a JSR * (jump relative to self) instruction through the front console into various memory addresses and seeing if I got that far. I keep inserting this further and further back. I finally demonstrated that the failure was when the OC (Output Command) instruction started the DMA operation that loaded data from the hard disk into RAM. After that executed, bit 13 of every word in the first 32 KB (yes, that's KB) was turned off. The next instruction after the OC was now an illegal instruction. The processor therefore performed an Illegal Instruction interrupt. The first instruction of the Illegal Instruction interrupt service routine (ISR) was DI (disable interrupts) but with bit 13 off, it was an illegal instruction, and so the the Illegal Instruction interrupt happens again, and the ISR again throws the exception.
After much analysis with an oscilloscope by our hardware engineer, it turned out the memory card was fine. Interdata's hard disk controller was not conformant to their own specifications. It was missing a data line on the data bus; hence the DMA turned off bit 13.
The guy that ran this company also could not figure out how to write an assembly language subroutine to unpack binary to decimal. He had persuaded the customer to use hexadecimal part numbers; he hired me because he couldn't use this approach for prices.