A few days ago I was going to say here about my favourite lab at college, the one that came before the programming class. And now’s a good as time as any to tell about it, to warm up my fingers before writing for the day.
It was two days, as it happens, not one, and part of the Electronics strand. We worked in pairs in on of the basements of - wow, I can’t remember the name of the building, that’s bad - anyway, underground. The building had a four storey van de Graff generator on the side, one of those devices they use to impress schoolkids when it’s four feet tall because it makes you hand stand on end from the static electricity. It’s a conveyer built that pulls electrons along and generates charge. It was built at great expense in the 50s or 60s as a particle accelerator, it managed to get a separation of 1kV or something and just as they finished it, tabletop accelerators were brought out that could do the same and much more. It’s been turned into offices now.
The lab practical was divided into sections. We’d been learning about how semiconductors worked, and the level of Fermi surfaces, and how if you put two semiconductors together you could apply a small potential and shift the levels of the surfaces and all the electrons would go running off in one direction. Or something. I’m doing this from memory and I never managed to actually get my hands on the lab notes. God knows where they are. Oh, and I’m forgetting all my physics, which is really terrible.
So in the first section we built big transistors and tested them, drew graphs etc.
Then we took them to bits and got manufactured ones from a bucket.
In the next section we used these transistors and put them together into complex arrangements to figure out how to make gates. I say “put them together”, but we were led through the learning by a bunch of experiments and it took ages, but there we were: we had a NAND gate.
Chuck it away, get a pre-fab one.
For this section we had a circuit board with gates of various kinds on it and we had to use boolean logic and the various equivalence rules (what are they, de morgan or something?) to figure out how to do various things by joining together the gates in different ways.
We ended up constructing gates that did simple sums, and worked our way up to registers to do sums on binary numbers, shift registers to store the results, until eventually we’d learned about memory and clocks and how numbers would ripple through the circuits.
I can’t remember exactly what happened in these last sections, but I do remember that we took our big tangle of wires and gates apart and had to learn machine code on a piece of paper instead. Then we got registers and memory etc all put together: a really simple computer based on a 6502 chip. It had a hex keypad and an enter key, and some instructions about how to put programs into it.
Then as we finished that section, the last section, we typed in the program we’d written, then keyed in the two numbers we needed to add up, the result of which would be displayed on the single-digit LCD, and pressed enter, I could see those numbers and addresses rippling through the registers, the networks of gates changing between 1 and 0 in non-obvious patterns, like watching city traffic at junctions from the air, the cascades of electrons tipping and washing around the circuit, all synchronised and coming together: I could see all these layers we usually abstract away all at once.
It was awesome.
The programming course. It was luck that I’d had exposure to Unix before so I could understand that there were tiny programs interacting, and I understood pipe and commands (a little, anyway, a very little). That was close enough to the sort of things we did in the lab for it to meet up. And then it was only luck again that we did our programming course on old NeXT machines, which of course had a terminal and you could see the workings of the machine, and we wrote Pascal in a text editor (plain text, like at the chip levels programmes and data are both the same), and piped it to the Pascal interpreter. And Pascal is simple enough that I could see the links between the machine code we wrote before and the language I was writing then. And it all built up for me. I could see it all.
I’ve filled in a couple of gaps recently. There’s a book, Lyon’s Commentary, which is the annotated source code of the most famous early Unix. That’s a good read. It’s incredible to see what a process actually is, or how the source understands a file, or pipes. Or booting.
So before all of that: I’m not sure I would’ve been so excited about making computers do what I wanted to do. But how can I not, now, after seeing all of that?
A few days ago I was going to say here about my favourite lab at college, the one that came before the programming class. And now’s a good as time as any to tell about it, to warm up my fingers before writing for the day.
It was two days, as it happens, not one, and part of the Electronics strand. We worked in pairs in on of the basements of - wow, I can’t remember the name of the building, that’s bad - anyway, underground. The building had a four storey van de Graff generator on the side, one of those devices they use to impress schoolkids when it’s four feet tall because it makes you hand stand on end from the static electricity. It’s a conveyer built that pulls electrons along and generates charge. It was built at great expense in the 50s or 60s as a particle accelerator, it managed to get a separation of 1kV or something and just as they finished it, tabletop accelerators were brought out that could do the same and much more. It’s been turned into offices now.
The lab practical was divided into sections. We’d been learning about how semiconductors worked, and the level of Fermi surfaces, and how if you put two semiconductors together you could apply a small potential and shift the levels of the surfaces and all the electrons would go running off in one direction. Or something. I’m doing this from memory and I never managed to actually get my hands on the lab notes. God knows where they are. Oh, and I’m forgetting all my physics, which is really terrible.
So in the first section we built big transistors and tested them, drew graphs etc.
Then we took them to bits and got manufactured ones from a bucket.
In the next section we used these transistors and put them together into complex arrangements to figure out how to make gates. I say “put them together”, but we were led through the learning by a bunch of experiments and it took ages, but there we were: we had a NAND gate.
Chuck it away, get a pre-fab one.
For this section we had a circuit board with gates of various kinds on it and we had to use boolean logic and the various equivalence rules (what are they, de morgan or something?) to figure out how to do various things by joining together the gates in different ways.
We ended up constructing gates that did simple sums, and worked our way up to registers to do sums on binary numbers, shift registers to store the results, until eventually we’d learned about memory and clocks and how numbers would ripple through the circuits.
I can’t remember exactly what happened in these last sections, but I do remember that we took our big tangle of wires and gates apart and had to learn machine code on a piece of paper instead. Then we got registers and memory etc all put together: a really simple computer based on a 6502 chip. It had a hex keypad and an enter key, and some instructions about how to put programs into it.
Then as we finished that section, the last section, we typed in the program we’d written, then keyed in the two numbers we needed to add up, the result of which would be displayed on the single-digit LCD, and pressed enter, I could see those numbers and addresses rippling through the registers, the networks of gates changing between 1 and 0 in non-obvious patterns, like watching city traffic at junctions from the air, the cascades of electrons tipping and washing around the circuit, all synchronised and coming together: I could see all these layers we usually abstract away all at once.
It was awesome.
The programming course. It was luck that I’d had exposure to Unix before so I could understand that there were tiny programs interacting, and I understood pipe and commands (a little, anyway, a very little). That was close enough to the sort of things we did in the lab for it to meet up. And then it was only luck again that we did our programming course on old NeXT machines, which of course had a terminal and you could see the workings of the machine, and we wrote Pascal in a text editor (plain text, like at the chip levels programmes and data are both the same), and piped it to the Pascal interpreter. And Pascal is simple enough that I could see the links between the machine code we wrote before and the language I was writing then. And it all built up for me. I could see it all.
I’ve filled in a couple of gaps recently. There’s a book, Lyon’s Commentary, which is the annotated source code of the most famous early Unix. That’s a good read. It’s incredible to see what a process actually is, or how the source understands a file, or pipes. Or booting.
So before all of that: I’m not sure I would’ve been so excited about making computers do what I wanted to do. But how can I not, now, after seeing all of that?