When I crafted my MIPS subset dual core CPU in a senior design class, I chose the 6502 method. That is, perform ADD, OR, XOR, etc in parallel at word width (that is 32 bits x the number of operations) and select the correct output using a multiplexer. The 8085 method seems smaller but I wonder how much delay it adds to the circuit.
It can also be enlightening to study 1-bit architectures. The lower limit of processor complexity.
This wiki-page http://en.wikipedia.org/wiki/Motorola_MC14500B has links to the data sheet and a high quality applications handbook.
Wow, that MC14500B (from 1977) is interesting. It really is a 1-bit microprocessor, with 1 input bit, one register bit, and 1 output bit. It's not a bit-slice processor, intended as a building block for a larger processor, but is designed for really simple industrial logic, such as "turn on pump if inputs A, B, and C are closed". It normally works with input and output latch chips, so you can use more that one input and output, and they get processed one bit at a time. Strangely, the program counter is on a separate chip (MC14516B), which is just a 4-bit binary counter. The application handbook explains how to do addition with the chip - by the time you deal with carries, single-bit addition takes 12 instructions! It's amazing that people actually could do useful things with a one-bit processor.
I decided to write a gnu as x86 interpreter, now 700 lines later, I realize that I know nothing about assembly / CPUs and should have never started.
I keep going until "hello world!" works but it's really depressing to realize that you underestimated the complexity of something.
This picture reminds me about the complexity.
> I realize that I know nothing about assembly / CPUs and should have never started.
Strong disagree! Starting gained you knowledge, if only that you didn't know anything about the subject. Now that you know you know nothing you also know that there is something here for your to learn about.
Before you tackle a subject this complex it might help to tackle similar problems of lesser complexity: a 6502, 6800 or 6809 assembler + emulator, then if you feel brave a 68K one, then maybe a risc chip (ARM, MIPS), and then ,if you still feel like it finally the x86 series starting with the 8086, working your way up to today. You'll be learning all the time and at the end of those exercises you'll be quite knowledgeable about CPU architectures, design pitfalls and so on.
If you should decide to give up halfway you'll be in an excellent position to know what you don't know.
The above circuit will take you a couple of years at least, assuming you are otherwise gainfully employed. It would be fantastic if you did it because we really do need people that have that level of insight and there are ever fewer of them.
I agree with Jacques here, its not depressing it is enlightening to know what complexity lays below.
If you have the chance, a simple FPGA evaluation board (my suggestion is the Altera DE-2-70) and some time reading about computer architecture, and you will know a ton about how computers really work. And that will give you insights into all sorts of things.
I have a DE2 (35k LUTS, IIRC) and it is a great platform. Tons of peripherals to learn how to write either HDL or software drivers! VGA, RCA Video (NTSC/PAL), SRAM, DRAM, Ethernet, USB, IR, PS/2, RS232, SD card, and more!
Hey here's a good article from a old friend of mine about one somewhat tricky part which is the ALU / arithmetic flags (which he gets to after rambling a bit about various x86 simulation techniques)
http://www.emulators.com/docs/nx11_flags.htm
[edit]
Here is my MIPS-- ALU in VHDL: https://github.com/jevinskie/mips--/blob/master/project4/sou...
Quite simple, really. The hard part is the control lines and the cache!