My First Computer

The year was 1968. The Univac 1004 didn’t have magnetic tape or disk drives. A tape drive was available for this machine, but I’d never heard of such things. This machine had two trays for card input and five trays for card output. We used the 80-column IBM card. The card reader might get a card from one tray for master data (name, address, etc.) and from the other tray for transaction data. The output could contain cards from an input tray or cards punched as part of the operation. The trays were all selected by the running program. The output from one “run” was often the input for another run. It would often take several runs to complete a task.

This thing was programmed by means of plugging wires into a bakelite board that had 5,120 holes in it. The board was clamped into the computer to run a task. The plug ends of the wires would contact tiny sockets in the computer and the wires completed the computer’s circuits. Most shops had a number of boards on shelves ready to run. This was the program library. Our shop had one board that stayed in the computer, but I’m getting ahead of my story.

The program board’s middle row of holes was for operators. Because this row contained 62 holes, programs could contain no more than 62 steps. You’d plug a wire into an operator hole and into a hole that specified an operation such as add or read a card. So, what did you do if you had more add operations than you had add operation holes? You’d make an octopus. Wires came with a plug on each end, some locking, some not. To make an octopus, you’d cut two or more wires, then use a wire nut to bind the bare wire ends together. (Make sure that the wires you cut are long enough to reach from one hole to another.)

Associated with each operator hole were two operand holes. An instruction might be “Add A to B.” A and B were the operands. You’d have to run a wire from each of these holes to the place on the board where your data was available.

If a hardware program had to be modified so that one or more new instructions would be executed between two existing ones, you had two choices. One was that you could replace an existing instruction with a jump to a place where there were empty instruction holes. You would build the new instructions, possibly including the one that you had replaced, then jump back to the instruction after the one you’d replaced. This, however, required two extra instructions (the jumps). If your program was large (approaching the 62 step limit), you might not have enough capacity to make the change this way. The other option was to clear a place for the insertion of the new instructions by physically moving all of the instructions beyond the insertion point. If a wire’s plug was the locking type (and most of them were, for you didn’t want a wire inadvertently pulled out), you’d have to find the plug from the underside of the board, and squeeze the tiny spring-loaded piece of the plug that extended beyond the hole so that the plug would clear it. Now that was nothing but fun.

Our one hardware program was dual function. It would read a deck of cards (source) and punch another deck (object). It would read an object deck into core, then execute that part of core (memory). This made the UNIVAC 1004 capable of punched card programming, a great leap forward for a small business computer! However, the core was designed for holding data that was being processed, so by storing a program in it, we not only could hold a lot less data, but we’d have to keep track of what part of the core was being used for the program and what part could be used for data storage.

Programs punched into cards had a characteristic in common with the hardware: modifications to these programs often required that all instructions beyond the point of the modification be rewritten. The reason for this was absolute addresses. Each operator was associated with addresses. The instructions took a varying number of them. The locations of these addresses were not related to other addresses, but were absolute in that they referred to a specific location in the hardware.

This Univac 1004 was the machine that the computer school that I attended used. It was used for business purposes during the day and by the school in the evenings. I completed the course requirements in six weeks and needed something more to do while the other students completed their studies. My instructor, who was a programmer for the company that possessed the 1004, told me of a technical problem that they had. This was the problem connected with making a modification to a program: Having to recalculate the addresses of instructions and repunch a large part of a source program deck. They had determined that they couldn’t write a software program that would allow other programs to be written with relative addresses. It would have to be done with a hardware program. The problem was that they knew nobody with the skill to do the hardware programming. I took on the challenge and was given manuals.

I laid out the logical steps of the program on paper, then “copied” that logic onto forms that pictured the bakelite board by drawing lines from one hole to another. It took many forms, for if I drew all the wires on one form, I wouldn’t be able to follow a line from beginning to end. Each form provided a layer of wires. When I completed the forms, I used each form, in turn, to plug the board. When complete, the wires were between 2 and 3 inches (5 and 8 cm.) deep on the board. When debugging the program, I had to work late at night, after the programming class had ended, for I’d have to take full control of the computer, by plugging in my board and executing it.

One feature of my program is that it had 150 steps. This, in a machine with a 62 step hardware capability. (“They” said it couldn’t be done.) The way that I did it was to identify several sequences of operators that were the same, even though they were not logically related. At the end of each sequence, was a jump instruction. Each operand of the operators in these sequences was wired through a relay. Each side of the relay was wired to a different data location. If you executed these instructions with the relays off, one task would be done; if you executed them with the relays on, another task would be done. The last instruction would be a jump, executed only if the relays were on, to a place that would continue executing the instructions for the second logic. By doubling the functionality of sequences of instructions like this, I extended the logical number of steps. This process, though, introduced a bug.

In testing, I put the board in the computer, then pressed a button that executed one instruction. I then examined a panel of lights to determine what had happened. If it was OK, I’d press the button again to execute the next instruction. Using this stepping process, I eventually got my program to work correctly. But, if I pressed the button to run the program at full speed, it would crash. What had happened was that the instructions in the 1004 executed in 0.65 microseconds each. A relay, when tripped, took 5 milliseconds to complete the action. When stepping through the program, the relays had plenty of time to trip, but when running at full speed, the instruction to trip the relays would be given, but the instructions that were dependent on those relay settings would get executed before the relays had completed their tripping action, so that the current couldn’t go through either the on or the off circuits and the program would crash. While trying to solve the problem, I found an instruction that I had not used (or heard of) before. It would force the program into a loop until all relays were in the position called for by the program. I called it the “Has the relay tripped yet?” loop. Once I wired all instructions that used relays through that one, my program ran flawlessly.

That’s the way it was back in the good ol’ days of programming.

Even though

Your writing voice and your

They might decide to write cheap essay writer about their personal life and they would like to express it with just words which they would use in actual life.

individual comments on the subject will shine through on your essay and this is what’s going to capture the interest of your viewers.

you might be writing an article for another application, you will still should make sure that your essay is intriguing.

One Comment

  • Kerry Coulter says:

    Your tale brought back memories [aside from my marriage in ’68].
    I had already worked on the Univac II and Univac III and used the 1004 as an intelligent card reader. I progressed to the Univac 1108 and a number of IBM and Burroughs CPUs. Then I got “kicked upstairs” and the fun stopped.
    My fondest memories are from my U II days back in ’61. We had steel tape drives, cards with circular holes, four vacuum tubes per bit and a huge mercury rectifier that we’d gawk at on the midnight shift with the lights out. I also recall punching wee holes before-and-after tape blocks with parity errors so that they’d be ignored on future uses of the tape.

    Ah … memories. Now my son is in the business. In the blood? Possibly.

Leave a Reply

Your email address will not be published. Required fields are marked *