# How was the Zero Flag implemented on Z80 ALU?

Z80 was a popular 8-bit processor with a 4-bit ALU.

Implementing a zero flag for a register should be straight forward, it would be a logical `NOR` of all the bits on the register.

Something like that would work for a small number of inputs. As for a 64-bit processor you cannot make one gigantic `NOR` gate with 64 inputs. The fan-in would be too high. 8 transistors would be in series. The circuit capacitance would be high thus slowing down everything else.

I can see some other options.

• The zero flag could be generated directly from the 8-bit result using 2 level logic.

• The zero flag could be generated directly from the 8-bit result using 3 level logic.

• The zero flag could be generated from each nibble and then put together, like if there was a "half"-zero flag. The result for the lower would be saved using a flip-flop while waiting for the high nibble result to be calculated.

Ken Shirriff wrote a nice article about reverse engineering the Z80 ALU. However when it comes to the zero flag he states:

Not shown in the block diagram are the simple circuits to compute parity, test for zero, and check if a 4-bit value is less than 10. These values are used to set the condition flags.

So, although they are simple circuits I would like to know exactly how they were implemented and if they used any of the implementations proposed above or something else completely different.

• Your assertion that the "fan in would be too high" has hidden assumptions that may not be valid. – caskey Apr 24 '15 at 6:57
• @JasonGeffner The question is about reverse engineering. I want to know exactly how something was implemented. I have no doubts on how the electronics behind it work. – GabrielOshiro Apr 24 '15 at 16:43
• @GabrielOshiro nice images but you forget the simplest one: wired or + single negator. The zero flag can be located anywhere (ALU,Register file,any of the data BUS,...) and also would need some gating because not all operations change ZF. The truth can be found only by examinaning the DIE (which is time consuming) or ask someone that created the Z80 circuitry/die masks inside Zilog Company ...or the clones copies like U880A ... – Spektre Apr 28 '15 at 11:33
• – Jason Geffner May 2 '15 at 15:35

Well if you want to know how it was done exactly

Then download the Z80 die shot of model you want to investigate, crop the ALU part and identify all the gates you can until you dig to Zero flag your self (sorry for indirect answer).

Here my Z80 ALU post processed die shot

• white - metal
• green - poly-Si
• red - dopped-Si (diffusion)
• Gray - conductive joints between layers

Try to identify all gates and buses you can (and mark them to the image)

When found familiar structure like Wire OR, (N)OR cascade, ... then you will know for sure. Just try to find the basic components like:

form the circuit schematics and make some sense of it.

• Of course Spektre is telling you how to reverse engineer it, you did ask on a site called Reverse Engineering! :) – Jason C Apr 30 '15 at 13:00
• @Spektre Thanks for you answer! You got the reward :P – GabrielOshiro May 4 '15 at 1:57