> On 04/21/2024 7:06 PM CDT Peter Coghlan via cctalk <cctalk@classiccmp.org> 
> wrote:
>
>
>
> Why is that? Did the Z80 take more cycles to implement it's more complex
> instructions? Is this an early example of RISC vs CISC?
>
> Regards,
> Peter Coghlan

I'm certainly no authority, but I have programmed both processors in assembly 
and studied them somewhat.  It took many years for me to believe that the 6502 
was "faster" than the Z80, but now I'm (mostly) a believer.  So here is my take.

First, yes, the Z80 takes roughly 4 times as many clock cycles per instruction. 
 Where the 6502 can complete a simple instruction in a single clock, the Z80 
takes a minimum of four.

The 02 certainly has a simpler architecture, but calling it a RISC machine 
would probably make the RISC believers cringe.  It is simple, but it doesn't 
follow the pattern of lots of registers (well, maybe) and a load/store 
architecture.  But that may be its strongest point.  The zero page instructions 
effectively make the first 256 bytes of RAM into a large (128 or 256) register 
file.

Along with all those pseudo-registers in page zero, the 02 has some really nice 
addressing modes.  In effect, all those pseudo registers can be used as index 
registers in addition to directly holding operands.  The simple, fast 
instructions operating on 8 bit registers runs fast.  In the Z80, there are a 
fair number of registers, but most are limited to what they can be used for.  
You almost always have to go through the accumulator (register A.)  So you end 
up moving stuff between memory and various registers, often shuffling stuff 
around once loaded, then store it back to memory.  The Z80 has the IX and IY 
index registers, but they are even slower, adding another machine cycle (4 
clocks?) to an already slowish instruction just for the fetch, then another 
memory cycle.  If you have to load the operand then store the result, that 
doubles the extra time needed.

So all of that leads to faster assembly language on the 02.  Good 6502 
programmers (I'm NOT one of them) know tons of tricks to get the most out of 
it, too.  People spent years learning the ins and outs of that particular 
processor.  I think the Z80 didn't get that kind of love, at least not as much. 
 Most Z80 machines were running CP/M and most didn't have the graphics and 
sound that made the 02 machines no nice for home computers and games.  In 
addition, an awful lot of Z80 code/programmers were part time, moving to and 
from the 8080 which was really a different machine.

As a rough approximation I would say that a Z80 would require somewhere between 
4 to 8 times the clock for equivalent assembly language performance.  No doubt 
others will have other opinions.

However, the Z80 was probably more likable by the computer science people.  And 
it was a LOT easier to write a halfway decent compiler for.  It didn't need as 
many "tricks" to make it perform.  If you look at compiled code for the two, 
you will usually either find severe limitations on the 02 or very slow code.  
Especially if you are looking at any "modern" language (Algol family, such as C 
or Pascal.)  A BASIC (or perhaps even Fortran) compiler that doesn't have all 
the local variables and nested structure will usually fare better.

Anyway, that's my 1/2 cent worth.  Take it for what its worth.

Will


Grownups never understand anything by themselves and it is tiresome for 
children to be always and forever explaining things to them,

Antoine de Saint-Exupery in The Little Prince

Reply via email to