The Z-80 has a 4-bit ALU. Here's how it works.

13 years ago (righto.com)

CPUs of this era were normally multi-cycle for every instruction, but I never expected in the Z-80 at least one cycle was because the ALU was only 4 bit. Love the detailed analysis - and this is just the tip of the iceberg of that site.

One thing I'm missing from this article is an approximate gate count. Obviously going 4 bit was motivated by gate and area saving, but halving the ALU size isn't going to halve the gate count or area, because it still needs the same width bus and extra latches for the partial answer. Or was it critical path? What kind of saving was it from an 8 bit ALU?

  • I don't have a gate count (yet). You're right that the 4-bit ALU doesn't save a lot of space overall. The Z-80 designer talks a bit about the 4-bit ALU [1] but doesn't really explain the motivation. My guess was he was able to use two cycles for the ALU without increasing the overall cycle count because memory cycles were the bottleneck. If you can cut the ALU in half "for free", why not? Hopefully as I continue analyzing the chip this will become clearer.

    [1] See page 10 in http://archive.computerhistory.org/resources/access/text/Ora...

    Note: if you're interested in Z-80 architecture, you seriously should read that link.

    • One of the reasons I was told was that the circuit extended to 16 bits easily (and was later used in the Z8000 as I recall) and doing decimal (BCD) math was easier. DAA (decimal adjust accumulator) was driven by the half carry flag. In '85 Intel wrote a Z80 emulator in 8086 machine code to try to win some Japanese game console design win and the decimal arithmetic stuff[1] was a PITA (and as it turned out not used a lot in games :-)

      [1] The 8080 also had these decimal arithmetic hacks but it didn't have an alternate set of registers to pull from.

      14 replies →

  • I think it started life as a 4 bit processor to compete with the 4004 and went out the door as 8 after the 8080 so they just muxed what was already there.

    I don't know that, I just think that. :-)

  • Indeed .. in all the years I spent programming the Z80, I never for a minute suspected it had this ALU architecture. It's not even mentioned in Rodney Zaks's great work.

  • I remember the Z80 felt distinctively more sluggish than the 6502 (I had an Apple II with a Z-80 Softcard in it so it could run CP/M). Now I know why.

    • No you don't, this was a clever optimization not a performance degrading hack. It was possible to save half the ALU transistors "for free" so the designer did. The for free bit is important. The Z80 ran a superset of the 8085 instruction set at equal or greater speed, but the 8085 had an 8 bit ALU.

      1 reply →

The Pentium 4 also had a 16-bit ALU, which computed a 16-bit operation on each of the rising and falling edges of the clock to maintain 1-cycle latency. www.cs.virginia.edu/~mc2zk/cs451/mco_P4.ppt‎.

  • The requested URL /~mc2zk/cs451/mco_P4.ppt‎ was not found on this server.

    I don't know who is mangling the URL (Chrome, Apache, MITM?) nor why it's happening.

    • There's an invisible Unicode U+200E left-to-right mark at the end of the URL, probably picked up when the parent cut-and-paste the URL into HN. This in UTF-8 is E2 80 8E, which gets misinterpreted by the server as Windows-1252 character set: E2 = â, 80 = €, 8e = Ž. (It could be iso-8859-1, except that doesn't include €.) Interestingly, Chrome's DOM inspector shows this character as the HTML entity ‎ while view-source has it as the actual invisible character.

      I think the poster of the URL originally mangled it, but it would be nice if the HN software filtered out invisible characters from URLs. There's not much the destination server can do about it.

      (Yes, I've dealt with too many character set issues in the past.)

    • There's a U+200E character between "www.cs.virginia.edu/~mc2zk/cs451/mco_P4.ppt" and "."

This is awesome. I'm going through the Elements of Computing Systems book/course (a.k.a. From NAND to Tetris) http://www.nand2tetris.org/ and it's been great in helping me understand how CPU's are constructed.

The course actually has you make a ALU from logic gates, so you understand at a deep level just how it's done.

  • That looks like a great course. I find it interesting how real processors mostly use the same principles you learn in school, but then they throw in clever tricks and optimizations that you never learn about. And every processor I've looked at (6502, 8085, Z-80) has its own style.