Why I have not picked one up yet… I think I just have a sweet spot for the 6502 and keep putting together KIM-1 kits.
(EDIT: Finally after years, I just pulled the trigger on their Classic II kit.)
roygbiv2 9 hours ago [-]
It's actually fairly easy and interesting to design your own z80 computer. I went from knowing about assembly and pcb design to a z80 computer with a serial interface and memory banking. Learnt a lot on the way an went on to build pcbs for other projects with the knowledge I had gained from that.
Due to its simplicity it's a fun little processor to program. Hacking on some assembly on a ZX spectrum emulator is a nice way to stay sane in this high abstraction LLM age.
flohofwoe 1 days ago [-]
"Simple" is really not a word I would associate with the Z80 ;)
The ISA is quite messy because of the backward compatibility requirement with the Intel 8080 (e.g. the Z80 had to fill undocumented gaps in the 8080 opcode encoding map with new instructions, four of which were prefix instructions to unlock additional instruction 'subsets' (DD/FD for replacing instructions involving the HL register pair with indexed addressing modes via the IX/IY registers, and ED/CB prefixes for adding two entirely new opcode blocks).
If the Zilog engineers would have been free to design their own ISA I'm sure they would have been able to come up with a much more elegant design.
Also the Z80 had more than twice as many transistors as the 6502 (8500 for the Z80 vs 3500 for 6502).
I still prefer programming the Z80 over the 6502 though :)
brucehoult 12 hours ago [-]
> I still prefer programming the Z80 over the 6502 though :)
I really don't.
There are some few things you can fit into and get working fast in the Z80's A + 6 registers (IX and IY are not useful if speed is the aim), but for anything complicated the 6502's 256 Zero page locations — any pair of which can hold a pointer you can index off — is far superior.
The Z80 is awful at accessing memory for anything other than a simple absolute address or sequential access or push/pop of a register pair. It's better for manipulating 16 bit values, but not as much as you'd think especially once you run out of three register pairs plus ToS.
flohofwoe 8 hours ago [-]
In the end, you could do memory load/stores with around 1 byte per microsecond on most home computers, no matter if 6502 or Z80. The Z80 did less work per clock, but was usually clocked 2..4x higher than 6502 based systems, which made up for the higher instruction cycle counts (the 2 MHz 6502 systems might have a slight edge against a 4 MHz Z80, but it wasn't night and day, and the C64 got away with its 1 MHz clock because the CPU was more or less just a controller for the various custom chips).
userbinator 12 hours ago [-]
The 6502 doesn't even have much of a stack.
brucehoult 11 hours ago [-]
The 256 byte hardware stack is plenty for function return addresses and temporary use within a function. How deep are you planning to nest function calls anyway?
You can create as many other stacks as you want using pairs of Zero Page locations as stack pointers.
Best practice for recursive/reentrant code (e.g. compiling C) is to follow modern RISC/x86_64 practice and reserve a few (16 maybe) Zero Page locations as argument/working registers, a few (16 maybe) as callee-save registers, and have prolog and epilog utility functions that create/destroy a stack frame and save/restore N bytes of callee-save ZP locations.
You can unroll those into a sequence of elements like...
lda $1F
dey
sta (SP),y
lda $1E
dey
sta (SP),y
:
lda $10
dey
sta (SP),y
... at 5 bytes and 11 cycles per byte saved. And of course jump into the appropriate part of the sequence.
rvba 1 days ago [-]
I am simplifying a lot since there were much more chips involved... but 3500 transistors to have countless hours of fun to play NES games really puts things into perspective
My 5090 has 92 billion transistors (I dont say they dont bring fun)
Lio 1 days ago [-]
> If the Zilog engineers would have been free to design their own ISA I'm sure they would have been able to come up with a much more elegant design.
That's an interesting idea. They were previously part of the team that designed the 8080 so they must have been very familiar with the ISA and the design philosophy.
I'm sure they'd be able to come up with improvements but how much more elegant it would have been is hard to say.
II2II 24 hours ago [-]
Making it even harder to say: the 8080 was based on the 8008. Even though the 8080 was based on the same instruction set as the 8008, it wasn't binary compatible. I assume that means the instruction encoding was different, which means those engineers probably did as much as the could to clean things up while designing the 8080.
Of course, the 8008's origins (along with the completely unrelated 4004) were outside of Intel. They were hired to design custom ICs. The 8008's architecture was dictated by a CTC terminal. While Intel designed the 4004, it was only intended to be used in calculators. Intel, and its engineers, probably put relatively little thought into microprocessor architecture until the 8080.
garaetjjte 24 hours ago [-]
They did eventually design their own clean-sheet instruction set for Z8000.
dosisking 1 days ago [-]
> If the Zilog engineers would have been free to design their own ISA I'm sure they would have been able to come up with a much more elegant design.
Since Zilog was founded by former Intel engineers, they were probably the ones who helped design the 8080 in the first place?
stevekemp 1 days ago [-]
I cut my teeth writing assembly on a ZX Spectrum (mostly hacking games for infinite lives, etc).
Over the past couple of years I've gone back to the Z80, working on CP/M emulation, testing, and similar things. It's fun to play the old infocom games, and mess around with BIOSes when all you have is 64k.
There's a lot of good CP/M reference material out there, and numerous emulators to run it on modern systems
Lio 1 days ago [-]
> Then, as a young engineer, I worked in a large mainframe computer system based on Z80.
This sentence threw me a little bit. Which mainframes were based on the Z80? I'd love to know more about that.
JPLeRouzic 12 hours ago [-]
Morrow systems ran on a Unix flavor, could address 16MB all on Z80, had memory protection and could have up to 6 simultaneous users.
Micronix was the only Unix-like multiuser system ever to run on an 8 bit processor.
S100 systems were sometimes called mainframes after their card cage construction: usually with the qualifier “s-100 mainframe” for the system or the enclosure and backplane.
helf 1 days ago [-]
If it wasnt some mostly custom system it was probably an HP 64000 Logic Development System. Which used Z80s to run user facing software and control the actual mainframe. I doubt it was a pure Z80 "mainframe". Loved to be proved wrong though!
julienmartlet 1 days ago [-]
Ironically (and sadly) the Z80 was discontinued not very long after this piece was published.
Gormo 23 hours ago [-]
IIRC, only the classic 40-pin DIP Z80 was discontinued. The eZ80, which is fully compatible, is still in production.
We still have the venerable 8051 for anyone who likes old architectures!!
spicyjpeg 1 days ago [-]
The 6502 and its variants are still ubiquitous as well, powering millions of toys based on Sunplus/GeneralPlus microcontrollers [1] [2] [3] as well as the vast majority of bootleg game consoles that use variants of "Famiclone" hardware (or occasionally general-purpose 6502 MCUs [4]) to this day. It's fascinating how the toy industry went for the 6502 over the 8051 and PIC12 clones more common in other cheap electronics; I suspect it had to do both with the architecture's better performance (important for tasks such as audio decoding) and with the historical availability of experienced 6502 assembly developers as the game industry moved away from 8-bit platforms.
It's still active as a mask for a more complex system on a single die. Even the support chips are available. The Juno project, orbiting Jupiter, had a Z80 compatible core for the radar signal processing.
nubinetwork 1 days ago [-]
The cpu possibly, but I had a hard time trying to find the support chips (ctc, sio/pio, etc)...
HeyLaughingBoy 1 days ago [-]
Do you have an actual use for them? I might have a few tubes of Z80-CTC & SIO in the basement if I haven't given them all away yet.
avadodin 1 days ago [-]
Many applications didn't even use those peripherals so I suppose production ended earlier.
The Z80 could even refresh the RAM by itself. It was not like the 8080 which required two support chips only to function.
analog31 14 hours ago [-]
The Z80 was my "first" microprocessor, in an odd way. I've never touched one.
It was the early 80s, and my mom was getting Byte Magazine, which I devoured. I had taken a high school programming class in BASIC, and was interested in electronics. Radio Shack had a shelf of books, and I was going through them one by one as I could afford them. They had William Barden's book on the Z80, published by Howard Sams, because the TRS-80 used it.
That book was so clearly and methodically written, that a high school kid could understand it. Later on I added some scraps of inline assembler here and there in programs, but eventually got into microcontrollers, which I continue to play with.
I admit that my mental model of microcontrollers is still based on those 8 bit machines, and I owe a debt to the Z80.
avadodin 8 hours ago [-]
I only went through the partially rat–soiled magazines my dad "stored" in his in-laws root cellar many decades later but I still love the CPU.
JoeAltmaier 1 days ago [-]
My first ambitious project was a Z80 assembler. The Z8000 (much later) was distinguished by being the last random-logic (not microcoded) microprocessor of it's day.
Reminded me good old days.. games loaded from cassette recorder and my first program for Spectrum which was a simple drawing tool I proudly called "graphic editor" :)
Sulfide6416 13 hours ago [-]
The Z80 living on as the eZ80 in embedded gear says a lot - a well-designed 8-bit core can outlast entire architectures built to replace it.
librasteve 1 days ago [-]
interesting to be reminded that an 8080 (8 bit datapath) took 4,800 transistors
an Apple M5 Max is 100,000,000,000 transistors (ok it’s 18 CPU + 40 GPU cores) by comparison so 17 million 8080 equivalents
Someone 1 days ago [-]
> so 17 million 8080 equivalents
At, ballpark, 1000 times the clock frequency. It’s a pity we do not how to connect such a large number of tiny cores in a way so that it can perform meaningful work. One hurdle is that, even ignoring the insane amount of connections needed, it would not be possible to connect each of those cores to each other one because their address spaces are so tiny.
ErroneousBosh 23 hours ago [-]
> It’s a pity we do not how to connect such a large number of tiny cores in a way so that it can perform meaningful work
Every so often someone reinvents the transputer, and it turns out not to be quite as good as mainstream multi-core CPUs, but the wheel must turn.
librasteve 1 days ago [-]
yeah, i have the notion that a grid would be good enough
imtringued 19 hours ago [-]
Cerebras built the wafer scale engine so I'm not sure what you're pitying.
dofm 1 days ago [-]
The ARM 1 only had 25,000 or so.
librasteve 1 days ago [-]
wonders how ARM did that - the MIPS R2000 came in at ~115k and the 80286 ~134k
anyway - say you want 50% of the transistors for on chip RAM these days, then thats
100 billion / 50 thousand = 2 million ARM 1s
clocking at say 3GHz
6e15 MIPS = 6 peta MIPS
so if you could run code on it, you would get a 10,000x speed up ;-)
booty 1 days ago [-]
GREAT classic question (with a well-defined answer)
In general, the reason why modern CPUs are so complex is because the gap in performance between CPU and memory has grown massively over time.
In the old days, something like a 6502 was running nearly synchronously with RAM.
That gap has grown massively over time; a modern CPU is orders of magnitude faster than RAM. So they have to jump through a lot of loops to avoid simply idling 99.99% of the time while they wait for some new data or instructions from RAM. On-CPU cache memory is one answer. Branch prediction and speculative execution are others. As you may imagine, speculatively executing code based on branch prediction is very complex because you must roll back any side effects from that execution if your prediction turns out wrong.
Example:
# assume `i` is a value stored in main memory
if i == 42
j += 1
k -= 1
l = 666
else
z = 123
q = 5879873
Waiting for `i` to arrive from main memory might take thousands of CPU cycles. So instead we will execute one, and possibly both of those branches. But we'll need to undo those side effects if turns out we executed something with an invalid prediction. It's complex, and messy, but still better than sitting around doing nothing for thousands of cycles.
That's why we can't just take an R2000 and scale it up to 3ghz. I mean, we could, but it wouldn't work very well unless we also had low-latency 3ghz main memory to pair with it.
librasteve 6 hours ago [-]
the von Neumann bottleneck
spacedcowboy 1 days ago [-]
> wonders how ARM did that
Acorn co-founder Hermann Hauser famously joked that he gave the original ARM microchip design team two distinct advantages: no time and no resources. With no money for a large crew or complex hardware, the tiny core team had to keep the processor design exceptionally simple, which ultimately birthed the revolutionary RISC architecture.
It also had to run in simulation on a BBC micro… Probably with a second processor via the Tube interface, but still.
joshu 15 hours ago [-]
berkeley/stanford birthed risc. acorn was inspired by the berkeley risc i papers.
spacedcowboy 6 hours ago [-]
"The revolutionary RISC architecture" here is referring to "the ARM architecture", which is a RISC architecture. I wasn't claiming that Acorn invented RISC.
ARM1 has no cache memory, no hardware multiply and division, no MMU and no cache.
dofm 22 hours ago [-]
Yeah — even ARM2 has no divide, as far as I recall from my days with an A310.
librasteve 6 hours ago [-]
Well even in deep pipelined FPUs (I'm thinking Weitek 1167 for example), the "divide" instruction is microcoded ... this chip had a full IEEE P764 64-bit single cycle barrel shifting MAC ... but divide was built via a special "3-bit and guess" kind of long division that was microcoded. MAYBE someone has built a hardcoded divider these days - but that would be a waste if good transistors in typical instruction mix.
dosisking 1 days ago [-]
This is understandable, considering that the M5 is the Ultimate Computer, powered by Dr. Richard Daystrom's very own engrams
ThrowawayR2 1 days ago [-]
But the M5 is clearly not safe to use in Enterprise¹ computing environments.
¹ USS Enterprise, that is.
librasteve 1 days ago [-]
excellent point
TacticalCoder 1 days ago [-]
Yup and Moore's law about transistors doubling every 18 to 24 months did basically hold, which is even more impressive.
Foreseen it was.
flohofwoe 1 days ago [-]
Nitpicking, but since the M5 includes cache and GPU a more realistic comparision would probably be to count all transistors in an entire 8-bit home computer system against a modern integrated GCPU (e.g. from googling around a C64 might have around 0.75 million transistors, most in the memory chips).
And in a way, those old 8-bit home computers also worked like a single integrated 'super-chip', because the whole system was driven by a single clock and entirely 'hard realtime', while modern computers are much more asynchronous (and I guess this asynchronous design is what enabled most performance improvements that go beyond pure transistor count scaling).
Z80 was the choice of a microprocessor for then home computers such as Radio Shack TRS-80, SORD M23P, M5, Sinclair ZX81, ZX Spectrum, KayPro II, and many other manufacturers.3 It was capable of running the CP/M operating system in most Z80-based PCs. Z80 had a reasonable share in the PC market until Intel revealed its 16-bit microprocessor in the mid-1980s. Z80 was very popular as a microprocessor not only in PC applications, but also in industrial embedded applications, and some of the big manufacturers have Z80 core inside their ASIC chips still today or use enhanced versions of Z80 in consumer electronic devices.4–7 Zilog still manufactures ez80, an enhanced version of the original Z80, which is still being used by Texas Instruments in its TI-84 and TI-84 Plus calculators.7 It is among the few silicon chips that made a remarkable impact on the electronic device industry.8 To this day, Zilog produces a range of Z80-based microprocessors and intelligent peripheral controllers, and they are available from reputed electronics component suppliers.2,9,10 This microprocessor is one of the longest living microprocessors of all time.
aruggirello 1 days ago [-]
Z80 also powered the whole MSX line of home computers, how could have he missed that?!?
Gormo 23 hours ago [-]
Also mentioned the KayPro II but omitted the Osborne 1.
0. https://www.ebay.ie/itm/206496219323
Why I have not picked one up yet… I think I just have a sweet spot for the 6502 and keep putting together KIM-1 kits.
(EDIT: Finally after years, I just pulled the trigger on their Classic II kit.)
https://codeberg.org/linker3000/Z80-Board
https://rc2014.co.uk/ai-policy/
The ISA is quite messy because of the backward compatibility requirement with the Intel 8080 (e.g. the Z80 had to fill undocumented gaps in the 8080 opcode encoding map with new instructions, four of which were prefix instructions to unlock additional instruction 'subsets' (DD/FD for replacing instructions involving the HL register pair with indexed addressing modes via the IX/IY registers, and ED/CB prefixes for adding two entirely new opcode blocks).
If the Zilog engineers would have been free to design their own ISA I'm sure they would have been able to come up with a much more elegant design.
Also the Z80 had more than twice as many transistors as the 6502 (8500 for the Z80 vs 3500 for 6502).
I still prefer programming the Z80 over the 6502 though :)
I really don't.
There are some few things you can fit into and get working fast in the Z80's A + 6 registers (IX and IY are not useful if speed is the aim), but for anything complicated the 6502's 256 Zero page locations — any pair of which can hold a pointer you can index off — is far superior.
The Z80 is awful at accessing memory for anything other than a simple absolute address or sequential access or push/pop of a register pair. It's better for manipulating 16 bit values, but not as much as you'd think especially once you run out of three register pairs plus ToS.
You can create as many other stacks as you want using pairs of Zero Page locations as stack pointers.
Best practice for recursive/reentrant code (e.g. compiling C) is to follow modern RISC/x86_64 practice and reserve a few (16 maybe) Zero Page locations as argument/working registers, a few (16 maybe) as callee-save registers, and have prolog and epilog utility functions that create/destroy a stack frame and save/restore N bytes of callee-save ZP locations.
You can unroll those into a sequence of elements like...
... at 5 bytes and 11 cycles per byte saved. And of course jump into the appropriate part of the sequence.My 5090 has 92 billion transistors (I dont say they dont bring fun)
That's an interesting idea. They were previously part of the team that designed the 8080 so they must have been very familiar with the ISA and the design philosophy.
I'm sure they'd be able to come up with improvements but how much more elegant it would have been is hard to say.
Of course, the 8008's origins (along with the completely unrelated 4004) were outside of Intel. They were hired to design custom ICs. The 8008's architecture was dictated by a CTC terminal. While Intel designed the 4004, it was only intended to be used in calculators. Intel, and its engineers, probably put relatively little thought into microprocessor architecture until the 8080.
Since Zilog was founded by former Intel engineers, they were probably the ones who helped design the 8080 in the first place?
Over the past couple of years I've gone back to the Z80, working on CP/M emulation, testing, and similar things. It's fun to play the old infocom games, and mess around with BIOSes when all you have is 64k.
There's a lot of good CP/M reference material out there, and numerous emulators to run it on modern systems
This sentence threw me a little bit. Which mainframes were based on the Z80? I'd love to know more about that.
https://ia902902.us.archive.org/20/items/mame0.211manualsful...
There are also FPGA emulated versions.
[1] https://spritesmods.com/?art=tamasingularity&page=2
[2] https://archive.org/details/furby-source
[3] https://dmitry.gr/?r=05.Projects&proj=37.%20Pixter#_TOC_a6fe...
[4] https://github.com/davidgiven/tony-sdk
The Z80 could even refresh the RAM by itself. It was not like the 8080 which required two support chips only to function.
It was the early 80s, and my mom was getting Byte Magazine, which I devoured. I had taken a high school programming class in BASIC, and was interested in electronics. Radio Shack had a shelf of books, and I was going through them one by one as I could afford them. They had William Barden's book on the Z80, published by Howard Sams, because the TRS-80 used it.
That book was so clearly and methodically written, that a high school kid could understand it. Later on I added some scraps of inline assembler here and there in programs, but eventually got into microcontrollers, which I continue to play with.
I admit that my mental model of microcontrollers is still based on those 8 bit machines, and I owe a debt to the Z80.
an Apple M5 Max is 100,000,000,000 transistors (ok it’s 18 CPU + 40 GPU cores) by comparison so 17 million 8080 equivalents
At, ballpark, 1000 times the clock frequency. It’s a pity we do not how to connect such a large number of tiny cores in a way so that it can perform meaningful work. One hurdle is that, even ignoring the insane amount of connections needed, it would not be possible to connect each of those cores to each other one because their address spaces are so tiny.
Every so often someone reinvents the transputer, and it turns out not to be quite as good as mainstream multi-core CPUs, but the wheel must turn.
anyway - say you want 50% of the transistors for on chip RAM these days, then thats
100 billion / 50 thousand = 2 million ARM 1s
clocking at say 3GHz
6e15 MIPS = 6 peta MIPS
so if you could run code on it, you would get a 10,000x speed up ;-)
In general, the reason why modern CPUs are so complex is because the gap in performance between CPU and memory has grown massively over time.
In the old days, something like a 6502 was running nearly synchronously with RAM.
That gap has grown massively over time; a modern CPU is orders of magnitude faster than RAM. So they have to jump through a lot of loops to avoid simply idling 99.99% of the time while they wait for some new data or instructions from RAM. On-CPU cache memory is one answer. Branch prediction and speculative execution are others. As you may imagine, speculatively executing code based on branch prediction is very complex because you must roll back any side effects from that execution if your prediction turns out wrong.
Example:
Waiting for `i` to arrive from main memory might take thousands of CPU cycles. So instead we will execute one, and possibly both of those branches. But we'll need to undo those side effects if turns out we executed something with an invalid prediction. It's complex, and messy, but still better than sitting around doing nothing for thousands of cycles.That's why we can't just take an R2000 and scale it up to 3ghz. I mean, we could, but it wouldn't work very well unless we also had low-latency 3ghz main memory to pair with it.
Acorn co-founder Hermann Hauser famously joked that he gave the original ARM microchip design team two distinct advantages: no time and no resources. With no money for a large crew or complex hardware, the tiny core team had to keep the processor design exceptionally simple, which ultimately birthed the revolutionary RISC architecture.
It also had to run in simulation on a BBC micro… Probably with a second processor via the Tube interface, but still.
https://www.righto.com/2015/12/reverse-engineering-arm1-ance...
¹ USS Enterprise, that is.
Foreseen it was.
And in a way, those old 8-bit home computers also worked like a single integrated 'super-chip', because the whole system was driven by a single clock and entirely 'hard realtime', while modern computers are much more asynchronous (and I guess this asynchronous design is what enabled most performance improvements that go beyond pure transistor count scaling).
https://youtu.be/-vz5LU2ECm0?is=g1T-QM8Lq9qNyiNK
Z80 was the choice of a microprocessor for then home computers such as Radio Shack TRS-80, SORD M23P, M5, Sinclair ZX81, ZX Spectrum, KayPro II, and many other manufacturers.3 It was capable of running the CP/M operating system in most Z80-based PCs. Z80 had a reasonable share in the PC market until Intel revealed its 16-bit microprocessor in the mid-1980s. Z80 was very popular as a microprocessor not only in PC applications, but also in industrial embedded applications, and some of the big manufacturers have Z80 core inside their ASIC chips still today or use enhanced versions of Z80 in consumer electronic devices.4–7 Zilog still manufactures ez80, an enhanced version of the original Z80, which is still being used by Texas Instruments in its TI-84 and TI-84 Plus calculators.7 It is among the few silicon chips that made a remarkable impact on the electronic device industry.8 To this day, Zilog produces a range of Z80-based microprocessors and intelligent peripheral controllers, and they are available from reputed electronics component suppliers.2,9,10 This microprocessor is one of the longest living microprocessors of all time.