Build your own 6502 Microprocessor Kit
kswichit.com
kswichit.com
Somebody asked "why z80 and not 6502 (or 8085, etc.)" I guess the 6502 is a fine choice, but my subjective perception is that - out of the popular processors from that era - the z80 is the one that still has the most actual commercial applications, and is the one that is easiest to source, find up to date information on, etc. Maybe I'm wrong, but so far it seems going the z80 path is pretty accessible. I was able to source chips from Jameco with no problem (and they're pretty cheap), and the z80.info site has a ton of useful info on homebrew z80 machines[1].
I was also able to pickup a copy of the book "Build Your Own z80 Computer"[2] by Steve Ciarcia, which should help a little.
Anyway.. not to take anything away from the 6502. If it turns out that chips are available, I may take a stab at building one of those after I do this z80 thing. But for now, this feels like the "path of least resistance". But I'd love to hear about anyone else's experience building an 8-bit machine, regardless of which processor you chose.
[1]: http://www.z80.info/homebrew.htm
[2]: https://www.amazon.com/Build-Your-Own-Z80-Computer/dp/007010...
https://en.wikipedia.org/wiki/Intel_i960
It was intended to replace 286/386 and mainframes. I know: talk about shooting for the stars. Yet, manual shows it to be a brilliant design [vs i432 APX] that was basically an object-oriented, efficient RISC with error recovery, concurrency, and lock-step added. Just a few, small modifications to make this into a highly-secure, three-or-four-9's CPU. Might be Intel's best work in terms of engineering tradeoffs. Worth somebody imitating imho far as hobbyist clones or RISC-V projects go.
https://en.wikipedia.org/wiki/RCA_1802
It's another old one from my collection. Links to two implementations by modern hobbyists showing it can be done. Not sure if the architecture is worth reviving for education, experimentation or high-reliability but it paid off then esp on SOI processes. Included a stand-by mode, too, despite being 1970's chip. Intersil also still sells them for government or commercial clients for legacy systems presumably.
I do remember the 1802, there were some interesting hobby projects around it but I never built anything with it. The DMA controller looks interesting, I'm not aware of any other 8 bit CPU that had one.
Otherwise, what is the state of the art in microprocessors for embedded systems and the like? Something like the Cortex M7?
No. Closest thing in development with open code that I know about is Cambridge's CHERI processor that combines MIPS, capability-security, legacy compatibility, and FreeBSD. It's not exactly simple but it does some of things i960 intended.
https://www.cl.cam.ac.uk/research/security/ctsrd/cheri/
"what is the state of the art in microprocessors for embedded systems and the like?"
I only know stuff in that space that crosses into my research into high reliability, security, or subversion-resistance. Studying more MCU's for last one given gotta use old nodes. Found a few interesting things, though.
Plasma is a MIPS CPU & SOC in around 4,000 lines of HDL. Already has RTOS and stuff. PULPino is like a RISC-V version of Arduino with 32-bit core & lots of peripheral stuff. Some MCU's, no link on hand, are including I/O coprocessors that give some of benefits Channel I/O and server offloaders have. Another strategy is including HW accelerators for common, high-CPU (or I/O) functions. Outside C & serial, JOP is small, efficient CPU for Java code. Sandia's SSP is similar but highly-assured & rad-hard. AAMP7G is most reliable/secure in embedded with low-power, decent speed, triplicated circuits, mathematical verification, separation kernel, & easy ISA. I'm keeping an eye out for others that include things like DSP's or parallel architectures that aren't just toys. All I'm seeing so far that are being fabbed or used on FPGA's.
http://plasmacpu.no-ip.org:8080/cpu.htm
https://github.com/pulp-platform/pulpino
https://en.wikipedia.org/wiki/Channel_I/O
https://www.researchgate.net/profile/Victor_Winter/publicati...
http://www.rockwellcollins.com/~/media/Files/Unsecure/Produc...
http://www.nxp.com/products/microcontrollers-and-processors/...
(I think this is a variant too) http://www.nxp.com/products/microcontrollers-and-processors/...
Wise that you considered this. Any IT work, even hobby projects, can have long-term consequences for the person or the work itself. I often advise people to consider what it might turn into down the road, not to worry per se, but to notice if any tiny choices or efforts now might lead to a payoff later. Hypothetical example, you choosing z80 for software might lead you to reverse engineering, imitating, or porting amazing code onto your very own z80. That experience might get you in embedded work, demoscene, or even improving compiler efficiency. Kind of a variant of network effects maybe except for learning opportunities rather than ecosystem take-up. Hmm, first I thought about it like that. Maybe worth more thought?
Regardless, good luck on your project. I'm sure you'll enjoy it. My own forays into hardware for high-assurance security... despite working at a high-level... have been beyond enlightening. More people play with hardware, higher odds an OSS revolution for HW will show up outside academic teams doing RISC-V, etc. Cheap, FGPA boards & software are already there to enable it. Just need motivated people.
Personally I prefer the Z80 too mainly because of its more powerful and organised instruction set[2], and the fact that it's the ancestor of the 8086, although the 6502 is definitely a simpler design (which is probably largely responsible for its popularity.)
I used to use a similar thing in high school, the Z80 uProfessor, which is based on the Zilog Z80.
(edit: yep, I have used the same "Multitech MPF-1 Kit" board!!)
So many memories!!
It is not as easy as you might think.
Here is how we used to do it:
1. Draw a flow chart on paper
2. Translate the flow-chart to assembly source.
3. Keeping the processor data-sheet in your left hand, hand-translate assembly code into opcodes, by hand. Compute relative jumps by hand. Do not use a compiler. Be the compiler.
4. Now that you have your opcodes, get your board.
4.1 Set the starting address (it was 1800_h for me)
4.2 input opcode (two hex numbers, one byte)
4.1 increment address (the '+' key is for that)
4.3 if finished goto 5
4.4 goto 4.2
5. set address back to starting point (like 1800_h)
6. Run your code! (press 'go')
Now... 60% of the times, it fails every time. But I miss doing this kind of exercise :)
Erase an eprom with ultraviolet
Drive for miles to a friends place to use his eprom programmer
drive back home, and plug it in
then swear a lot when it still doesn't work..
ah, the memories... (that was with a hand-wired board and an MM57109 before the first microprocessors were available)
Or certain subversion-resistant schemes. That's out of scope here, though.