September 26, 2021

My computer biography

The idea here is to review and summarize my own involvement with computers. It began when a fellow asked me about some computers I was involved with in my early years, and as I began to dig up old memories, you have what you have here. No research so far, this is all from memory, which I think is best at this stage anyway.

Before computers (pre 1970)

I grew up in a world entirely without computers. This should be a surprising thought to many young people today. I grew up in Glendora, California and as far as I know there was no computer in my home town while I lived there.

One significant thing happened during my high school education. I took a typing class! This put me in a room with 30 girls, no doubt preparing themselves to be secretaries. Some boys would have considered such an arrangement to be a grand opportunity, but it was neither here nor there for me. But I learned to touch type, and this has been a valuable skill through my computing career.

The CDC 6400 at the University of Arizona

In 1970 I graduated high school and moved to Tucson, Arizona to attend the University of Arizona (studying Geological Engineering). I was following a recommended class plan in the college catalog and had 18 units lined up, but the catalog recommended 19 units for my first semester. So I needed a 1 unit class. I saw something labeled "FORTRAN" that was a 1 unit class and asked another student what it was. "Some kind of computer class" was the answer I got, and I added it to my schedule. Little did I know the impact a 1 unit class was going to have on my life.

There were two computers at that time on the University of Arizona campus. One was a Univac in the math department that nobody I know ever had access to. The other was a CDC Cyber 6400 that served the entire campus. These were days of keypunches and batch processing. You would prepare your deck at a keypunch, then submit it over a counter to a "priesthood" of people who served the computer. A notice was taped to the wall next to the counter estimating the "turnaround time". You would come back and check the return shelves after about that amount of time and find your card deck on top of a print out generated by your job. Typical turnaround times were at least 30 minutes.

Unique skills were used on keypunch machines. The most advanced users would set up a "drum card" which configured the machine, but most users never did. Cards could be duplicated on the machine, then held with your thumb while you added content to the new card. Dropping a card deck was a significant catastrophe.

After my first FORTRAN class (SIE-78), I talked my way into a senior level class (SIE-272) that taught assembly language programming (COMPASS) for the CDC 6400. After than I took one other class (SIE-170) which was a class in numerical methods (mathematical algorithms) and that comprised the 7 units of computer related education I acquired during my undergraduate journey.

The only language besides FORTRAN and COMPASS assembley that I ever heard about on the CDC 6400 was COBOL. I took one look at COBOL and avoided it like the plague.

A punch card story

The following story was told to me by a friend I once worked with. A certain scientist had a laboratory, and in that laboratory was a special cabinet designed just to hold standard computer punch cards. The scientist made a prediction, "some day a student is going to walk in here and not even know what these are". My friend walked into the lab, was curious, and pulled open one of the cabinets and exclaimed, "What the heck are all these?"

The DEC-10 and timesharing

During my last 2 years, the University of Arizona obtained a second machine, A Digital Equipment DEC-10. This was a timesharing machine and now instead of preparing card decks, you went to a room in the basement and found an available terminal to use. This was on a first come, first served basis.

I was still primarily using FORTRAN, specifically FORTRAN-IV which was the new thing at the time. The main aspect of FORTRAN-IV was that it allowed the use of logical operators like .LT. for "less than", whereas earlier fortran only provided the 3 branch arithmetic if. At some point I ran some timing tests that seemed to indicate that code written with the old 3 branch if ran faster, so I sacrificed readability and wrote some big pieces of code using the old construct. This required more statement numbers and made the miserable task of trying to keep statement numbers in order even more miserable.

The timesharing machines allowed you to save files on disk! This was almost unheard of on the CDC 6400! It also involved you with some kind of text editor. I used an editor called "SOS". The competitor at the time was an editor called "TECO", which I never learned or used. Both of these were line editors. Screen editors were still yet to come. It was said that TECO commands resemble line noise.

The only was to save programs was to use a tape drive. The CDC had big tape drives that I never used. The DEC offered little "DEC-tape" which would have been affordable to a starving student.

Computing Associates and the CDC 7600

Control Data came out with improved machines such as the 6600 and 7600. They also developed the Cray supercomputer, but I only read about those and never saw nor had any dealings with one. Not long after I graduated with my Geological Engineering degree, I took a job with a company in Tucson, Arizona called "Computing Associates". Our main business was to provide computer consulting services for mining companies. We also ran a remote terminal service for Control Data. Our site had a big card reader, a line printer, and two tape drives. Some kind of fast link connected us with a CDC 7600 in Houston, Texas. This was once again batch processing, but for the first time I was able to load my own card deck into the reader and stand expectantly next to the printer waiting for my output.

One of my favorite jobs was to read magnetic tapes provided by clients. They would bring us their data on big reels of 9 or 7 track tape, written by some other computer. I loved the puzzle of figuring out how to read their data. We had one or two Tektronix 4006 or 4010 graphics terminals. These could draw lines on a storage tube display, but once written the only way to get rid of them was to clear the entire display. We also had a big Calcomp plotter to produce the maps that the mining companies expected. At some point I rewrote the Calcomp software and set up a system with an intermediate graphics file that could be either sent to the plotter or displayed on one of the Tektronix terminals. Being able to "preview" plots on the screen before commiting them to paper saved time and money. The entire package was called PPLOT for "Polygon Plot".

Computing Associates partnered with another company and together they purchased a DEC-20. This was very much like the DEC-10 I had used at the University. For the first time ever, I had unlimited computing resources available to me. With the CDC machines, every job had accounting information and you paid for every second of computing time you used. I remember one time when another of the programmers at computing associates had a job going that had run for several hours (rates were on the order of $1000 per hour, I don't really remember). He and the boss were trying to decide whether all was well and they should just let it continue or whether it was in a loop and should be terminated. This event led to adding the ability to perform big computations in sections, checking each for correctness before submitting a job for the next section. Having the DEC-20 "in house" got away from much of this and led to much faster software development cycles.

This was the first time I heard about the C language. I was told that DEC was using C to write systems software. I was disgusted. My way of thinking at the time was that all systems software ought to be done is assembly. It was only in later years that I realized that speed was not the only metric worth paying attention to. We hired a fellow who incessantly told us about "structured programming". The problem was that he was never able to actually produce anything and he was fired after not too much time. He was right of course, but couldn't produce anything to add weight to his opinions.

The Lunar Lab, the Interdata 8/32, and unix

The CDC 6000 and 7000 series machines were clearly "mainframes". I am not sure what a DEC-10 or DEC-20 might be called, they were big machines. Based on size I would not call them "minicomputers", but given that they did not do batch processing, I would not call them "mainframes". In this era, there were IBM machines, notably the 360 and 370. I had minimal dealings with these. They had an arcane language called JCL ("job control language"). To get a sense of its flavor, take a look at SQL, which seems to be a hold-over from this IBM era.

After a couple of exciting years, I quit my job at Computing Associates and went back to the University of Arizona to work on an MS degree in Geology. I finished this and went to work at the Lunar and Planetary Lab at the University of Arizona. The department had an Interdata 8/32 which was my first experience with what might be called a minicomputer. It had 2 washing machine sized disk drives, two tape drives (one 7 track and the other 9 track), and had terminals all through the building connected to it. It had 1 megabyte of memory and probably was a 1 MIPS machine. Rumor has it that the instruction set was much like the IBM 370.

It ran a wretched vendor supplied operating system called OS-32. One thing I remember was that the terminal driver did not support "type ahead". If the computer was not ready and you typed anything, it was simply lost! Compiling anything took a long time. I would set up a compile script to "beep" when the compile finished, and then lean back and read a book until the compile finished!

One day, my boss brought me a tape with a label "software tools". It was software from the book "Software Tools" by Kernighan and Plauger. Little did he know the trouble he was starting!

The book introduced structured programming and "ratfor". What "ratfor" was, was a preprocessor that made FORTRAN look as much like C as possible. In particular it did away with statement numbers, replacing them with block structure (via curly braces) and syntax like every modern language. As soon as I had ratfor running, I said goodbye to FORTRAN forever!

The book introduced an idea that was revolutionary for me, namely that speed was not all important. It is more important to write software that is clear, easy to maintain and modify that to be fast. Before this, I was all about using any trick to make things faster, feeling clever for writing assembly language when possible.

Another big idea in the book "Software Tools" was that there is nothing special or mysterious about "system software". Programs are programs. It is amazing what a new mindset and world view can do. I began running a screen editor that was part of "software tools". I proudly showed it to the other programmer I was working with, and he quickly moved to outlaw it, saying that such a thing was an inappropriate use of computer resources.

I was a threat to this fellow, and anything I did to improve the computing environment was met with strong opposition. One day I found a tape in a drawer labeled "Unix edition 7 for the Interdata 8/32". I asked why in the world we were not running this rather than OS-32 and you would have thought I had insulted his mother.

This fellow moved on and the day came when we were able to purchase a bigger pair of SMD disk drives to replace our washing machine drives. The two washing machines (with removable packs) were 80M each and these new rack mount SMD were 300M each. The problem was getting OS-32 to support them was an impasse. I made a suggestion. If we ran unix, we have all the source code and anything is possible. So we began running unix in the morning until noon, then swapping packs and running OS-32 the rest of the day. I was on a crash course learning C, unix, and disk drivers, but my gamble worked out and we were up and running with unix on the new 300M drives.

One thing that was missed was an optimizing fortran compiler that ran on OS-32 (Perkin Elmer provided two compilers -- the vanilla compiler than compiled fast and produced satisfactory code, and an optimizing compiler that ran more slowly but produced significantly faster code. I found that traps used for system calls by unix were entirely different from those used by OS-32. This made it possible to run the old compiler executable under unix and then intercept the traps intended for OS-32 and emulate those calls. Once I wrote the emulator layer, we were able to run the old optimizing compiler under unix without having source code for it.

Initially there was some resentment towards the change to unix. Scientists just want to get their work done and any change is an unwanted interruption. Some years later I was talking to one of those scientists, who told me that he didn't realize it at the time, but switching to unix on the 8/32 set him up perfectly for using Sun workstations which later replaced the interdata -- and he thanked me for it.

The Data General MV-10000

I left my job at the Lunar Lab and moved across the street to work for Steward Observatory. Around this time (1980?) the VAX machines from Digital Equipment were wildly popular. Data General was making machines to compete with the VAX, and was able to sell them because they were perhaps a bit faster, but primarily they were less expensive for similar performance. Steward Observatory had purchased a big one in collaboration with the Lunar Lab. I always hated this machine. It ran their AOS/VS operating system. It offered a unix emulation layer on top of AOS/VS which I always used. This was probably the first machine that repulsed me so strongly that I simply avoided learning its assembly language and architecture. It wasn't long before Sun workstations came on the scene running a nice BSD derived unix and they were quite nice by comparison.

The lesson of course is software. Fast or cheap hardware with mediocre software will always be a miserable thing. The old saying is that a computer without software is simply an expensive space heater.

Sun workstations

At some point in time, I had a Sun 3/60 on my desk. This was a diskless workstation with a monochrome bitmapped display. It has a Motorola MC68020 processor inside, which I dearly loved. My appreciation for the 68000 processors was based significantly on highly negative experiences with the Intel 8088. The whole business of segmented memory and a fussy assembler for the 8088 was in vivid contrast to the linear address space of the 68000. There was nothing good to say about DOS either (nor early Windows 3.1 and such).

Along with Sun workstations came the network. There may have been UUCP before that and dial up modems and such, but I had little to do with them. Fast ethernet (10 Mbit) made diskless workstations possible, it not wonderful and Sun had the clever slogan "the network is the computer".

Suns were 68000 machines until the SPARC came along. I remember our first SPARC at Steward Observatory, a machine named "hercules". I copied a program to the machine and type the "cc" command to compile it and immediately the prompt came back at me. I was certain something had gone wrong. Nothing had gone wrong. The SPARC machines were that much faster than the 68000. It used to be an overnight process to rebuild a kernel back in those days on a 68000 based Sun.

BSD unix

At some point I got an x86 machine in my office, probably a 386 or eventually a 486. Linux was in its infancy (I remember the announcement on a usenet group, "I have written an operating system"). The world rushed headlong after Linux, but I decided to run NetBSD. At least in part, this was misplaced loyalty to the BSD roots in Sun machines. I stuck with this for perhaps 2 years, but at some point realized that I was just making things hard on myself. Whenever I wanted to run some new package, I had to get the sources as a tar file and work hard for several days to get it to compile and run. Linux had a package system (and of course so does Linux these days).

I also had some kind of DOS/Windows PC in my office. I needed it to support microcontrollers, burn EPROMS and such. The tools and compilers to support hardware and microcontrollers would never be available for linux or sun machines. There was never any love lost between me and the world of microsoft software. It was always a huge pain to set up networking, whereas it "just worked" with linux or BSD. But I didn't spend time using DOS in any way. As long as it booted up and then would run my applications without too much trouble, I was happy.

VME machines

This marked a milestone -- a computer in my own office! The diskless Sun 3/60 came later. The machine was a rack mount VME machine with a Motorola 68000 processor. The most amazing thing to me though was an 80M disk drive. It was small enough that I could hold it in one hand (but two would be better). It was an MFM interface drive.

I began working with some kind of real time operating system. Probably PDOS from Motorola. It had some awful editor that I needed to learn and came with a buggy C compiler. I worked with several such real time operating systems before we settled on VxWorks. The beauty of VxWorks was cross development. The compilers, editors, and linkers were hosted on the Sun machines and were both familiar and first class. Sun workstations had nice disk drives, big displays with window systems, fast network and all of that. I gave thought to porting a decent editor to PDOS, but VxWorks came along and saved me from that chore. The genius of VxWorks is not trying to create a full computing enviroment (and doing a poor job of it), but leveraging the work of others and focusing on a real time kernel.

The VME era marked a turn in my career. I left "number crunching" behind and focused my attention on using computer for control. From this point on my software was controlling motors or some other actuator and reading various sensors. I wrote software used at the University of Arizona mirror lab and at various telescopes.

Electronics and Microcontrollers

I missed the whole 8 bit microcomputer era and have no regrets. While everybody else was fiddling around with CP/M, Z80 and 6502 processors, and early IBM PC machines, I was working with minicomputers and early unix. My involvement with 8 bit processors has almost always been for some kind of embedded gadget, not as a general purpose computer. At some point I got my hands on a discarded Z80 S100 system (a northstar horizon) and played with it. It had a pair of 5.25 inch floppy drives and you needed them both to shuffle disks around to run the different passes of a C compiler. I also worked on a 6502 based Commodore 64 and worked up a forth like TIL (threaded interpreted language), which I abandoned as soon as the task was done.

My office at the observatory was alongside the electronics shop. I would see people every day building things, wiring things, fixing things. It was only natural that I would pay attention and begin learning electronics myself. The book "The Art of Electronics" was invaluable and my copy of the first edition is worn out and falling apart. Once I had learned some electronics, it was only natural to begin building some things and working with microcontrollers.

I used the 8751 for a lot of small projects that needed an embedded processor. You had the choice of using a device with a window and a UV erasble memory or using an 8031 with an outboard ROM. The latter choice allowed you to use a ROM emulator, which is a box with a serial port on one side and a cable to plug into a rom socket on the other. I did plenty of projects using both, and the ROM emulator is the cadillac was to work. Once everything is running and debugged, you burn a EPROM, put the screws in the box, and move on.

Convergent Technologies miniframe

Every electronics and computer "addict" spends time in surplus stores. One day I was walking the aisle in one and spotted a big board with a Motorola 68010 mounted on it. I bought it, and eventually acquired a second one. They turned out to be main boards from a Convergent Technologies "Miniframe". This became a big project of mine with the idea of one day having my own machine that would run unix. I never got that far, but had a lot of fun writing standalone utilities to format the hard disk and such.

What was happening was that computers were becoming more affordable. In addition, my disposable income was growing. Sun workstations began to appear as "surplus" and I spent some time running SunOS (their form of BSD unix) on them at home, and they displaced the miniframe (but were not as much fun - I never did get down to writing bare metal software on them). A lesson I quickly learned was that finding computers on the surplus market indicates that the world has definitely moved on. It became clear that if a person wanted to run some kind of unix at home, running linux on a commodity PC was the best way to do that.

An important lesson for a person who enjoys programming is that you do not have to work with the latest or even fast hardware to enjoy yourself. I find that I have the most fun staying close to the hardware, writing device drivers and operating systems code. There is no question that I could have great fun dragging out one of my old Sun3 boards are bringing up some new operating system on it. Getting unix edition 7 from the Interdata era running on a sun3 could be a fun project.

Kyu and ARM processors

One of my coworkers was taking classes in the Computer Science department at the University. The University allows employees to take classes almost for free, and at some point this fellow sold me on the idea and I began taking classes also. In retrospect, I didn't leap forward in any way particularly. I had already made myself a very competent computer scientist. The 3 classes I most enjoyed were Networking, Operating Systems, and Theory of Computation. The latter was a mathematical class with proofs and theorems, and I could easily have taken a turn at a younger age into pure mathematics, but never did. Eventually I accumulated enough classes to get an MS degree in Computer Science. However I had to either take the masters exam or do a thesis project.

I considered the exam, but unlike regular students who had taken all the classes within the past year, I had taken them over 5 years or more and a lot of material was no longer fresh in my mind. So I opted for the thesis. Some time later I asked an advisor, "so what happens if a person does not pass the masters exam?" She said, "I don't know, nobody has ever not passed!"

As a thesis project I decided to write a real time operating system. I was inspired by VxWorks, particulary the concept of cross development and using a linux system for development. My thesis was that with threads, semaphores, and a scheduler with a real time policy, I was done. The project was a huge amount of work, both the programming required and writing the thesis itself. I used an otherwise idle and discarded "pentium" based PC and got my Kyu operating system running on the x86 architecture (it was then called "Skidoo"). So I finished a second MS degree and have another feather to wear in my hat.

Around 2010, I retired from the Observatory. I began experimenting with small ARM based boards that were capable of running linux. I selected the Beaglebone Black (BBB) which has an ARM core running at 1 Ghz along with 512M of ram and a decent network. I avoided the wildly popular Raspberry Pi because the BBB has more IO pins and much better documentation (a 4000 page tech manual from Texas Instruments). At some point I began wondering how hard it would be to port my thesis project from the x86 to the ARM. I did some experiments to check some things and then dove in. It was much less work that writing the original code (which is one definition of portability). After work on the BBB, I ported Kyu to several other ARM based boards. At some point I realized that I could spend every waking moment working on a project like this and stopped making it a major focus in order to give attention to other activities of interest.


Feedback? Questions? Drop me a line!

Tom's Computer Info / [email protected]