3

Z80 has a 16-bit address bus and 16-bit arithmetic instructions such as add hl,de. Why is it still called a 8-bit CPU?

3
  • Voted to code as opinion-based on the basis that there’s no objective answer; it’s all fairly fuzzy.
    – Tommy
    Commented Mar 17 at 12:13
  • 1
    @Tommy and yet you managed to answer it :-)
    – JeremyP
    Commented Mar 18 at 13:20
  • @JeremyP the community doesn't always agree with what I think should be closed, understandably; since it was therefore possible that this was a QA-appropriate question, it was worth offering something. Even if, empirically, it was the worst answer.
    – Tommy
    Commented Mar 18 at 14:58

4 Answers 4

13

CPUs are about Data

Why is Z80 called a 8-bit CPU?

A CPU's 'size' is about the main data type it processes, not secondary types or how much thereof it can access. The Z80 fetches, processes and stores 8 bit at a time.

Z80 has a 16-bit address bus

If address bus would be a relevant measure to classify a CPU, then

  • 8088 would be not 16 but 20 bit and
  • 80286 would be 24 bit,

both running the same (16 bit) code?

But it gets better. I guess you agree that a 386DX is a 32 bit CPU, right? But then, what are other 386 variants using the same ISA but different numbers of address lines:

  • 80386SX has 24 address lines while
  • 80386EX has 26 lines.

Would that make them 24 or 26 bit CPUs?

Need more? Pentium Pro, without any doubt an IA32 CPU has a 36 bit address bus. And the AMD Athlon (still IA32) had 40 bit address bus.

The P5 Pentium marks the point where data bus size passed address bus size, as it featured a 32 address bus but a a 64 bit data bus - despite still being IA32. A fact that didn't change with x86-64 since then. Even the most recent and most capable server type Xeon and EPYC x86 do only support a maximum of 52 physical address lines.

Address size is not relevant for basic CPU classification.

and 16-bit arithmetic instructions such as add hl,be.

Those instructions are a special purpose subset intended to handle addresses, not primary data. They consist of LOAD, INC, DEC and ADD. That some can as well be useful with 16 bit data doesn't change the picture.

Why is it still called a 8-bit CPU?

Using the aspect 'still' is an interesting choice, possibly only seen in hindsight. Using a retroactive PoV is rarely a good way to understand any prior decision/classification.

Back then having an 8 bit CPU was a good thing. Way better than 4, and 16 was a different class only mini computers used - the ones where doubling the cost for memory interfacing was appropriate.

6
  • 1
    Then why don't AVX instructions make a CPU >64bits? I think the answer is at some point we switched the definition from ALU or data bus width to address/register width.
    – davolfman
    Commented Mar 18 at 21:17
  • 1
    @davolfman because AVX operations are not the main operations, but an add on, handling a special purpose data type. It's the very same misjudgement as with address (bus) size. Otherwise the 486 would be not 32 bit but an 80 bit CPU due its ability to operate on 80 bit floating point, wouldn't it?
    – Raffzahn
    Commented Mar 18 at 22:28
  • 1
    @Raffzan I think for a lot of code that cares about math the AVX instructions are the primary arithmetic instructions and everything else is just program control like those addressing instructions on the Z80. Not to mention for a long time most code for x64 CPUs was still the 32-bit code. So you could very much argue that x86-64 was just an extension on a 32-bit CPU, and earlier that real mode was an extension of a 16-bit x86 CPU. I think it was only from about 32-bits on that any of this sorta made consistent sense.
    – davolfman
    Commented Mar 18 at 23:45
  • 1
    @davolfman as mentioned, teh very same argument can be made about 80 bit float. Code that cared about Math on a 486 would have made a lot of use thereof, still, it doesn't make the 486 an 80 bit CPU. Same with AVX. Thse are secondary special purpose data types. BTW, the argument can be extended way back as well. the IBM /370 is with out any doubt a 32 bit CPU, despite commercial applications - that is the overwhelming number on mainframes - making heavy used of its BCD instructions handling BCD data. Still not turning it into a decimal CPU.
    – Raffzahn
    Commented Mar 18 at 23:53
  • @Raffzahn: I think it would be fair to characterize the 8087 as an 80-bit FPU, and view the 80486 as a combination of a 32-bit CPU and an 80-bit FPU. Chips which added AVX instructions on top of a 32-bit CPU could be described as containing a 32-bit CPU, 80-bit FPU, and 128-bit bit manipulation engine.
    – supercat
    Commented Mar 22 at 17:18
9

No one seems to have (as yet) mentioned that the ALU was only 4-bit, which muddies the waters even further - so I'll throw that into the ring as well.

So, the Z80 had:

  • 4 bit ALU;
  • 8 bit data bus, and;
  • 16 bit address bus.

The width of the data bus took precedence, in the scheme of naming.

As already stated, it is more of a marketing thing, calling it an 8-bit CPU - but back then we all knew what it meant.

From more information, regarding the ALU, see the (possibly) related question, Why did the Z80 with 4-bit ALU out-perform the fully 8-bit Intel 8080?

3
  • 1
    And there are some bit instructions as well.
    – ghellquist
    Commented Mar 18 at 10:51
  • 1
    The Z80 had a full-function 4-bit ALU and a limited function 16-bit ALU. An interesting quirk of its design history is that the choice to use a 4-bit ALU affects the performance of almost no 8080 instructions, but severely undermines the usefulness of many Z80-specific features such as (IX+d) addressing.
    – supercat
    Commented Mar 22 at 17:40
  • @Greenonline: That information is found in your linked answer about "why did the Z80 with a 4-bit ALU...".
    – supercat
    Commented Mar 22 at 18:26
7

There is no well-defined test for the ‘bitness’ of a CPU; it’s marketing as much as anything else.

The Z80 was considered an 8-bit CPU in its day because it has an 8-bit data bus and an overwhelming focus on 8-bit operations; in the latter it differs from processors such as the 8088, 68008 and 65816 that all also sit atop an 8-bit data bus.

The machines using a Z80 also tend to fit neatly into a generation of technology that has acquired the ‘8-bit’ signifier as a shorthand.

7

It works on 8-bit numbers. It has 8-bit data bus, both externally and internally. There is no operation that can be performed in a single 16-bit operation, and the specific example of adding two 16-bit registers can't be done in one operation.

Even if the internal data path would allow copying of a register pair to another in one 16-bit operation, it would not be enough to make it a 16-bit CPU, for the reasons mentioned above.

So while there are many conflicting and different ways to determine a bitness of the CPU, there is little doubt in this case.

Even the manufacturer advertizes the CPU as an 8-bit CPU.

So it's basically the data handling capability that is used to define bitness of the CPU. Most 8-bit MCUs may have 16-bit address bus. The 8086 has 20-bit address bus and 80286 has 24-bit address bus, but they are 16-bit CPUs. A Pentium also has 64-bit external data bus but it's still a 32-bit CPU.

12
  • 1
    How is add hl,be not “one operation”? Commented Mar 17 at 16:04
  • 2
    @user3840170 To you it might look like a single opcode does a single 16-bit operation. But with that single instruction, the CPU might need to do multiple steps. Maybe in two 8-bit operations. Maybe in four 4-bit operations. How Z80 does 16-bit math is asked and answered already here : retrocomputing.stackexchange.com/questions/6640/…
    – Justme
    Commented Mar 17 at 16:33
  • @Justme While I agree that ADD HL,BE does't work as an argument as its an outlier, it's still a single operation as defined per ISA.
    – Raffzahn
    Commented Mar 17 at 16:46
  • 2
    While ADD HL,BE is split into four 4-bit operations, INC HL and DEC HL are processed with a 16-bit increment/decrement unit.
    – supercat
    Commented Mar 17 at 17:06
  • 1
    @user3840170 add a,b is 4 cycles. add hl, be is 11 cycles. One of them is clearly doing a lot more work internally. For comparison, on the 16-bit 8086, 8-bit and 16-bit adds are both 3 cycles. Commented Mar 17 at 22:57

Not the answer you're looking for? Browse other questions tagged .