Computer Programming

I had a lot of hobbies when I was a kid. By the time I was 17, I had read a lot of books on how to build a microcomputer. This was way back in the late 70’s when only Apple II and Commodore Pet ruled the PC market. Both computers were out of my price range. So I build a single-board computer using an 8085 CPU, 4k of static RAM and an UV erasable PROM chip. I managed to get the computer working with help from an electronic engineer that was my neighbor. He had the equipment to find timing problems that I was too green to understand. Fortunately, there was only one signal that needed a delay and the whole computer board worked just fine. I remember thirsting for knowledge about how a computer works. I thought the CPU was just magical. I couldn’t understand how it know what to do with the next instruction. Until I stumbled onto a book that explained the micro-program circuit. Suddenly it all came together and I had my missing piece of information about computers. That was the moment I became disappointed that there was no magic involved. Darn, it was just a machine that just read signals from memory and followed commands one by one.

My disappointment wore off quick though, because there was so much I wanted to do with a computer. In those days writing a program consisted of physically writing it on paper and working out as many details as possible before typing it in. I learned 8080/8085 assembly language and performed some simple programming in that language. I also learned BASIC, from books. I still have some of those books, like: "Basic Computer Games" by David H. Ahl and the second one "More Basic Computer Games" also by David H. Ahl.

After high school, I attended college for one partial year and discovered that I had no financial means of continuing college. So I joined the Navy and entered into the Advanced Electronics program. This was a 6 year enlistment and included Basic Electricity and Electronics school (BEE) that was self-paced. I blew through that school in about 6 weeks (I could have done it much faster if I could schedule two or more tests each day). Then I attended A school, which is the standard school for all electronics technicians in the Navy. At the end of A school, I had the highest grade in my class. The Navy provides a list of orders that students pick from starting with the person with the highest grade first. I chose orders to continue on to C school for satellite communications, automated systems and a 3-year stint on the U.S.S. Worden (CG-18) out of Pearl Harbor.

While I was stationed in Pearl, the Apple Macintosh and IBM PC became available (actually, the PC was available when I was in high school, but it was expensive then). I saved a lot of money and bought the Mac because it fit in a small space. I also bought Microsoft Basic to go with it and found out rather quickly, that 128k doesn’t do a whole lot on a computer with a graphical interface. I look back now and laugh. By the time the OS loaded and I started up MS Basic, there was probably 10k left for the source code of a program. Fortunately, it wasn’t long before Apple offered an upgrade (one that consisted of replacing the motherboard) to a "Fat Mac" which consisted of 512k of memory. Then I got serious. So I was working on a small game when I discovered the tyranny of line numbers. Oh boy, I was spending more time trying to renumber the lines and keep track of where my procedures started than I was spending working on the actual code. So I went to the Mac store and browsed for new products. Sure enough, they had a language called Mac Pascal on the shelf and the back of the box had some sample code on it. It looked a lot like Basic. Without the ugly line numbers. So I bought it. Mac Pascal was a run-time language, not a compiler. I learned a lot about Pascal, really fast. So I was working on a game (yup, you guessed it, I liked to program games as a hobby), and I discovered that the global memory that can be allocated for Mac Pascal was limited to 32k. Yikes! My solution? Buy a book, or two. I read about dynamic memory, linked lists, double-linked-lists, etc. I used dynamic structures to store my playing boards, my units, etc. This solved my issues for a while until I stumbled onto Turbo Pascal by Borland. It came out a year or two later and I was excited about having the ability to compile a stand-alone executable file.

After I was honorable discharged from the Navy, I went back to school to get my degree in Computer Science. I was way ahead of my classes. Some students had prior knowledge of programming but not many. Nobody had both the hardware experience that I had and the deep programming knowledge, including pointers and dynamic structures. I had to buy my own PC to do my homework projects because it didn’t take long for the students to discover that I can solve any programming problem and explain any technical issue in a different manner from their instructor. Entering the computer lab was hazardous business. I also got recruited to participate in the ACM regional programming contests. I didn’t hestitate to sign up for that opportunity. I love a good competition.

While I was attending college I resurrected my 8085 single board computer project. The old computer was lost sometime while I was in the Navy. By this time the 8085 CPU was obsolete and cheap. Static memory could be purchased as a single-chip 32k module. I ended up building an EPROM burner from a magazine article (I still have this device, see picture).

EPROM Burner
EPROM Burner Insides
I had to write a program to take hex code from a file and send it over the serial port to the EPROM programmer. I ended up writing this for my Macintosh. I later wrote a simple assembler that converted assembly commands (fortunately, the 8085 CPU has few commands) into the proper hex code and transmitted it to the EPROM programmer.

By this time I had a lot of experience in troubleshooting digital circuits. I was trained to repair the UYK-20 minicomputer, and I was really good at it. So building this little 8085 was a snap (I still have this computer too, see pictures below).

8085 CPU top
8085 CPU bottom
By the end of college PCs were starting to get powerful and cheap. The speed of CPUs was increasing rapidly and my oscilliscope was too slow to build anything more powerful than an 80286 CPU. So I shelved the single board project and moved on to other programming projects. Single-board computers still serve a purpose as micro-controllers, but my career path led me into a different direction. I do miss the good old days of assembly and getting my fingers into digital circuit design.