I've been playing around with computers for the last 34 years or so, and thinking about them even longer. If there is one constant in my life, it is computers. This fascination seems to go back as far as I can push my memories, but when I get to ages <10, electronics was the main interest I had, but I was determined to build robots at that time and this (I now realize) requires computers.
If you're the type of person who dislikes computers, or just uses them at work then forgets about them afterwards, these pages aren't for you. If, on the other hand, you experience nirvana through the act of picking up a well laid out circuit board, then read on.
My computer experiences consisted first in attempting to build my own machines, and when I realized that this was unlikely to occur using at first paper-clip logic, and secondly RTL logic, I got into programming in a batch environment on the Sytem 360 system. This was in late 1968, and once I started programming in FORTRAN, I was hooked (I don't use FORTRAN much anymore, but I find it hard to not program). While it was neat to submit ones deck of cards to the IBM 360 (I was never better at writing error free programs than in 1969 when a single error meant a delay of 24-48 hours in getting program output), being allowed access to a PDP-8 computer at the University of Calgary was much more to my liking. This machine had 4 Kwords of core memory and could be programmed via front panel switches or paper tape reader. Paper tape is slow, but I still find it neat. Shortly after I started playing with the standalone PDP-8, the TSS-8 system was setup at UofC which consisted of a PDP-8 computer with a hard disk, some 36Kwords of core and about 16 teletype terminals which were simultaneously serviced by the computer. Since this is getting into a tangential reminiscence about my UofC days, it is continued here.
In 1970 I spent a November day in Calgary reading a PDP-11 manual. This was one of the peak experiences of my life; I had mastered the PDP-8 instruction set thoroughly, and here was a machine with 16 bit registers and it had 8 of them! (The PDP-8 had a single accumulator). I had a premonition at that time that the PDP-11 would figure prominently in my future, but after I finished high school I was in university studying biology and had little time to play with computers aside from doing batch programs for simulations and statistics (this was in the days before calculators were widely available).
My orientation at this time became slanted more and more towards hardware. There was no such thing as a personal computer, and the PDP-8/S (a serial version of the PDP-8 went for some $10,000 at this time. This machine had instruction times measured in tens of microseconds!). I was getting into electrophysiology and I wanted to automate my data gathering. The way people worked at the time was to use a storage oscilloscope, and when the appropriate event was present on the screen, take a polaroid picture. If one wanted to record physiologic data for a longer period of time, one either used the mechanically driven smoked paper drum recorders (yes, I have used one of these!), or one used large quantities of film which was used to create a movie of what was happening on ones oscilloscope screen. The most annoying part, in my opinion, was the days to weeks of manual measurements on the recorded data. I wanted to automate the measurement process and so set off in this direction.
This was a non-trivial process as, while there were microprocessors around, the 8008 cost some $100-200 at the time (considering that I thought a job paying $3.59/hour as a very good one, microprocessor based systems were out). TTL SSI and MSI circuits were available in profusion, but surplus DTL was much much cheaper, so I used DTL whenever possible. Memory was a problem as the largest SRAM chips I could afford were 1024x1. For my first project, I was able to afford a single 1024 bit SRAM, and I designed logic to access this device serially to emulate 128 8 bit words. The device I built was one which would generate inter-event interval histograms directly. The steps in my hardware hacking career are given in the following links:
This hardware hacking took place between 1974-1978. I still have the results of my efforts and think they have some historical interest. All of the circuitry and scans of the logic boards are available at the above links.
My specialization by the end of 1978 was definately in the area of physiologic data acquisition, and when I decided it was time to find some work, I ended up at UBC in the Pharmacology department programming PDP-11's to analyze electrophysiologic data. Except for a few months in 1970, I had never had total control of a computer. I got to hook my hardware to minicomputers in Ottawa, but I was not controlling the machine. At UBC, here was a PDP-11/34 with 128 Kb of RAM totally at my disposal. What was even more amazing was that this machine had a programmable real time clock, a 16 channel 10 bit A/D converter and 4 channel D/A converter. There were also a few digital output lines that could be used for display blanking or intensification, etc. The period from 1978 to 1987 was a very productive one for me in terms of programming the PDP-11 under RT-11 or just the bare machine for doing data acquisition as fast as was possible by the hardware. This was the first time that I became aware of the conflicts hacking can cause in ones personal life (programming seems to take up all available time and it still isn't enough), and ones employer (the time period allocated to complete this program is far too short). I have most of my programs that I wrote at UBC and make all available under the GPL. Whether anyone will use them is another question, but they still have limited utility for those who have no choice but to continue to use PDP-11's (not that it is a bad choice since this is still my favorite CPU). The following areas are some of the highlights of this work, and I'm slowly adding the various sections. If you can't link to it, it isn't written yet:
There is a lot more material I could talk about, but this is a start. In August of 1987, I was accepted into medical school at the University of Calgary,. One of the greatest anxieties I had was regarding computer access. By 1987, I was totally immersed in the PDP-11 weltanschaaung. It was the greatest machine ever designed and I could do anything on it. When I was in Calgary, all I had at my disposal was my Commodore64 (C64) which didn't have the same power; it prevented me from going into serious computer withdrawal, but it was a machine that I saw usefull primarily as a low level hardware controller. Fortunately, I did have access to Macintosh systems at UofC medical school at this time, and in February 1988, I got my fathers old Mac512 when he upgraded to the MacPlus.
When I first got into medical school, I was terrified that I would be forever behind in terms of computers since I was separated from PDP-11's. Looking back on the whole process, it now seems to be the best thing that ever happened to me since it severed my close ties with the PDP-11 which, while a very nice machine, is dead-end technology. The skills I learned while programming the PDP-11 are invaluable, but I now realize it was time to move on. My progrmas for the PDP-11 were basically translations of batch processing environment card input fields to a serial input interface; I've run some of my early programs and am embarassed to say that I have to go to the source code to find out what kind of input is expected. They were very intuitive to me at the time, but very few people shared similar experiences of spending days at a time awake while feeding decks of cards to a batch processing monster.
The only programming language I was able to get my hands on was Basic for the Mac; this is a Micro$oft product, but of course they don't support it any more, and the latest incarnation only runs in 24 bit mode on the Macintosh (typical behaviour for Micro$oft). I did manage to get a FORTRAN for the Mac, but this proved to be little more usefull than my assembly programming experiments on the Mac. The Mac was my next great love in the computer sphere, but the Mac is a real bitch to program. The graphical user interface is very seductive and easy to use, but it hides the vast amount of processing that is necessary to construct this illusion. When one attempts to write a program on the Mac, one is suddenly faced with a host of calls to various graphics routines which create the illusion of the Mac desktop, and ones program needs to cooperate with the other programs living in this peculiar reality. The only programming environment that I was able to do anything productive was Quickbasic, and despite my despising Basic, I was able to create some nifty programs in short order to perform data acquisition using a C64 as front end. I also did some contract programming in Calgary translating a boneage determination program from outdated basic to "modern" Quickbasic.
I now realize that my decision to use Quickbasic was the best I could have made at the time. The Mac is a very unforgiving programming environment. The boneage program that I eventually completed in 1990 was initially contracted out to a programmer to code in C. She spent about a year on this endeavor and when I took over, it seemed that her code had gotten nowhere -- it is now clear to me that C was too low level a language to attempt this program. Quickbasic has high level constructs such as windows which could be created with a single line of code and a few more lines of code would suffice to specify the window default font and size. In C, the same process took many lines of code and it was also necessary to deliberately code in such calls as waitnextevent() in order to allow cooperative multitasking to occur properly. It is typical of Micro$oft that they came up with an early program which was excellent and then totally abandoned Quickbasic users when upgrades were required.
The first task I set myself on the Macintosh was to impliment a system for getting some neurophysiologic data and this was a combination system using a C64 to time an array of switches to 1 msec precision to get Alternating two Finger Tapping data (AFT) and a serial link to a Macintosh that stored the data on disk, analyzed it and did pretty displays of the data. The biggest obstacle in getting this system running was debugging the assembly language routines on C64 since the C64 disk drive has a data transfer rate about equivalent to a 2400 baud modem; it didn't help that the 6502 assembler I was using was buggy. I've made complete source code for both C64 and Mac sections of this program available online along with schematics.