Where can I learn how a computer works?

Add an interface chip on the bus and write a program to operate the LEDs on a simple binary display.  This will get tiresome since a UV erase cycle is needed each time.
Add a RAM chip to the bus.  Write a program loader to pull in software over RS-232 and execute after loading.  Or, if you are clever, build a set of commands that give you more control.
With RAM and a program loader, now you can experiment with software loading.  You can write values to the register of the interface chip and make it do simple things.

Answer by Phillip Remaker:

Depending in the level of detail you desire, you may have just asked for three or four years of focused and intense university study, including a lot of lab time. 

The sequence of events I used to learn 25+ years ago:

Compute

  • Learn boolean logic, formally.
  • Learn a high level, structured programming language.
  • Learn a lower level programming language (C).
  • Learn assembly language (including a debugger).
  • Learn how a compiler changes a high level language to assembly language.
  • Understand how to write to and read from registers.
  • Understand locking, mutexes, and race conditions.
  • Understand bit masking and logic operations.

Hardware

  • Learn about basic electronics: KCL, KVL, Ohm's Law.
  • Learn about Operational Amplifiers and square waves and clocks.
  • Learn about transistors, and diodes.  Make note of Open Collectors.
  • Learn how to build logic gates.
  • Learn about shift registers.
  • Learn about DRAM and cell storage and addressing.
  • Learn about signalling techniques like RS-232.
  • Learn that ground is a funny thing.

Now.  Build a computer. 

Get a wire wrap board, a logic probe, and an Intel 8085

Apply power, passives and a crystal to the CPU.  Verify a clock is generated.

  • Add an EPROM.  Write a simple program (zero-jump-to-zero) and see that the program it is read and running.
  • Add an interface chip on the bus and write a program to operate the LEDs on a simple binary display.  This will get tiresome since a UV erase cycle is needed each time.
  • Add a RAM chip to the bus.  Write a program loader to pull in software over RS-232 and execute after loading.  Or, if you are clever, build a set of commands that give you more control.
  • With RAM and a program loader, now you can experiment with software loading.  You can write values to the register of the interface chip and make it do simple things.
  • Now, add some other chip to the bus and make it do something interesting.  I used a synthesizer chip and wrote values to it from a table to play notes based on the keypress on the keyboard.  The shift bit made a major chord, the ctrl bit a minor chord, and the ctrl+shift bits together a 7th chord.

These days, doing such a basic thing is a lot easier with the system-on-a-chip, Arduino, and Raspberry Pi. but you only understand the interior of a computer if you go deep inside.  Understand it one instruction cycle at a time.  Everything builds on everything else, and when it is designed correctly, all of the complexity is hidden from view.  The only way to fully understand at the zeroes-and-ones level is to look at it from the ground up, block by excruciating block.

Graphics is a whole discipline unto itself, to which you should allot about another two or three years to get a reasonable grasp.  I can say things like "ray tracing," "SIMD," and "fill rate" as if I know what I am talking about, but I have not been far down that rabbit hole.

I also haven't really studied VHDL, FPGAs and stuff like that, but those may also help you get a grip on the inner workings of a computer.

There is a hell of a lot of magic inside that silicon chip, and there is no shortcut to learn.  The way to learn is to build it, break it, fix it, expand it, and keep repeating until you know what is going on.  This is not something you read about, this is something you have to live.

Edit:
Alan Richmond suggests Coursera's "From NAND to Tetris" to get a foundational understanding in just 7 weeks.  From the curriculum, that course looks promising.  I would love to hear from people who take it.  This seems like it may be the inaugural offering of the course.

See (and upvote): Alan Richmond's answer to I want to know how a computer works in its core. How it translates an operation in the form of 0 and 1 to a result, or how it displays colors on my screen. I built my PC and I find it fascinating that some seemingly inert transistors can produce such a result. Where can I learn how it works?

Edit #2:
This thread has a lot of good information, too: How do computers work the way they do? When does electricity become executable logic and how? Hat tip to William Emmanuel Yu for the pointer.

Where can I learn how a computer works?

Advertisements

Leave a comment

Filed under Life

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s