World Library  
Flag as Inappropriate
Email this Article

Zilog Z80


Zilog Z80

Zilog Z80
One of the first Z80 microprocessors manufactured; the date stamp is from June 1976.
Produced From 1976 to present
Common manufacturer(s)
A CMOS Z80 in a Quad Flat Package
Die of one of the many clones of the Z80A microprocessor. Total die size is 4950x4720 µm using a 5 µm technology node process.

The Zilog Z80 is an 8-bit microprocessor designed by Zilog and sold from July 1976 onwards. It was widely used both in desktop and embedded computer designs as well as for military purposes. The Z80 and its derivatives and clones made up one of the most commonly used CPU families of all time, and, along with the MOS Technology 6502 family, dominated the eight-bit microcomputer market from the late 1970s to the mid-1980s.[1][2]

Zilog licensed the Z80 design to several vendors, though many East European (for instance, Russian) manufacturers made unlicensed copies. This enabled a small company's product to gain acceptance in the world market since second sources from far larger companies such as Toshiba started to manufacture the device. Consequently, Zilog has made less than 50% of the Z80s since its conception. In recent decades Zilog has refocused on the ever-growing market for embedded systems (for which the original Z80 and the Z180 were designed) and the most recent Z80-compatible microcontroller family, the fully pipelined 24-bit eZ80 with a linear 16 MB address range, has been successfully introduced alongside the simpler Z180 and Z80 products.


  • History 1
  • Design 2
    • Programming model and register set 2.1
      • Registers 2.1.1
    • Z80 assembly language 2.2
      • Datapoint 2200 and Intel 8008 2.2.1
      • New syntax 2.2.2
    • Instruction set and encoding 2.3
      • Undocumented instructions 2.3.1
    • Example code 2.4
    • Instruction execution 2.5
    • Compatible peripherals 2.6
  • Second sources and derivatives 3
    • Second sources 3.1
    • Derivatives 3.2
  • Emulation 4
  • Notable uses 5
    • Desktop computers 5.1
    • Embedded systems and consumer electronics 5.2
      • Industry 5.2.1
      • Consumer electronics 5.2.2
      • Musical instruments 5.2.3
  • See also 6
  • Footnotes 7
  • References 8
  • Further reading 9
  • External links 10


A May 1976 advertisement for the Zilog Z-80 8-bit microprocessor
The Z80's original DIL40 chip package pinout

The Z80 came about when Federico Faggin, after working on the 8080, left Intel at the end of 1974 to found Zilog with Ralph Ungermann, and by July 1976 they had the Z80 on the market.[3] It was designed to be binary compatible with the Intel 8080[4][5] so that most 8080 code, notably the CP/M operating system, would run unmodified on it. Masatoshi Shima, co-designer of the 4004 and the 8080, also contributed to the development of the Z80.[6][7]

The Z80 offered many improvements over the 8080:[5]

  • An enhanced instruction set[8] including bit manipulation, block move, block input/output (I/O), and byte search instructions[9]
  • New IX and IY index registers with instructions for direct base+offset addressing
  • A better interrupt system
    • A more automatic and general vectorized interrupt system, mode 2, as well as a fixed vector interrupt system, mode 1, for simple systems with minimal hardware (mode 0 being the 8080-compatible mode).[10]
    • A non maskable interrupt (NMI) which can be used to respond to power down situations and/or other high priority events (and allowing a minimalistic Z80 system to easily implement a two-level interrupt scheme in mode 1).
    • Two separate register files, which could be quickly switched, to speed up response to interrupts or provide extra register space for applications
  • Less hardware required for power supply, clock generation and interface to memory and I/O
    • Single 5 volt power supply (the 8080 needed -5 V/+5 V/+12 V)
    • Single-phase 5 V clock (the 8080 needed a high-amplitude (9 to 12 volt) non-overlapping two-phase clock).
    • A built-in DRAM refresh mechanism that would otherwise have to be provided by external circuitry (although this necessarily reduced the i-fetch access from 3 cycles to 2 cycles, and, therefore, required substantially faster EPROMs than the 8086/8088.
    • Non-multiplexed buses (the 8080 had state-signals multiplexed onto the data bus)

The Z80 took over from the 8080 and its offspring, the 8085, in the processor market,[11] and became one of the most popular 8-bit CPUs.[1][2] Perhaps a key to the initial success of the Z80 was the built-in DRAM refresh, and other features which allowed systems to be built with fewer support chips (later on, most Z80 systems have been embedded systems, which typically uses static RAM and hence does not need this refresh).

For the original NMOS design, the specified upper clock frequency limit increased successively from the introductory 2.5 MHz, via the well known 4 MHz (Z80A), up to 6 (Z80B) and 8 MHz (Z80H).[12][13] A CMOS version was also developed with specified frequency limits ranging from 4 MHz up to 20 MHz for the version sold today. The CMOS version also allowed a low-power sleep with internal state retained (having no lower frequency limit). The fully compatible derivatives HD64180/Z180[14][15] and eZ80 are currently specified for up to 33 and 50 MHz respectively.


Programming model and register set

The Z80 architecture

The programming model and register set are conventional and similar to the related x86 family. The 8080 compatible registers AF, BC, DE, HL are duplicated as two separate banks in the Z80,[16] where the processor can quickly switch from one bank to the other;[17] a feature useful for speeding up responses to single-level, high-priority interrupts. This feature was present in the Datapoint 2200 but was not implemented by Intel in the 8008. The dual register-set makes sense as the Z80 (like most microprocessors at the time) was really intended for embedded use, not for personal computers, or the yet-to-be invented home computers. According to one of the designers, Masatoshi Shima, the market focus was on high performance printers, high-end cash registers, and intelligent terminals. The two register sets also turned out to be quite useful for heavily optimized manual assembly-language coding. Some software, especially games for the MSX, Sinclair ZX Spectrum and other Z80 based computers, took Z80 assembly optimization to rather extreme levels, employing the duplicated registers among other things to squeeze maximum performance out of the processor.


The Z80 registers
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bit position)
Main registers
A Flags AF (accumulator and flags)
H L HL (indirect address)
Alternate registers
A' Flags' AF '​ (accumulator and flags)
B' C' BC '​
D' E' DE '​
H' L' HL '​ (indirect address)
Index registers
IX Index X
IY Index Y
SP Stack Pointer
Other registers
  I Interrupt vector
  R Refresh counter
Program counter
PC Program Counter
Status register
  S Z I H - P - C Flags

As on the 8080, 8-bit registers are typically coupled to provide 16-bit versions. The 8080 compatible registers[18] are:

  • AF: 8-bit accumulator (A) and flag bits (F) carry, zero, minus, parity/overflow, half-carry (used for BCD), and an Add/Subtract flag (usually called N) also for BCD
  • BC: 16-bit data/address register or two 8-bit registers
  • DE: 16-bit data/address register or two 8-bit registers
  • HL: 16-bit accumulator/address register or two 8-bit registers
  • SP: stack pointer, 16 bits
  • PC: program counter, 16 bits

The new registers introduced with the Z80 are:

  • IX: 16-bit index or base register for 8-bit immediate offsets
  • IY: 16-bit index or base register for 8-bit immediate offsets
  • I: interrupt vector base register, 8 bits
  • R: DRAM refresh counter, 8 bits (msb does not count)
  • AF': alternate (or shadow) accumulator and flags (toggled in and out with EX AF,AF' )
  • BC', DE' and HL': alternate (or shadow) registers (toggled in and out with EXX)
  • Four bits of interrupt status and interrupt mode status

There is no direct access to the alternate registers; instead, two special instructions, EX AF,AF' and EXX,[18] each toggles one of two multiplexer flip-flops; this enables fast context switches for interrupt service routines: EX AF, AF' may be used alone (for really simple and fast interrupt routines) or together with EXX to swap the whole BC, DE, HL set; still much faster than pushing the same registers on the stack (slower, lower priority, or multi level interrupts normally use the stack to store registers).

The refresh register, R, increments each time the CPU fetches an opcode (or opcode prefix) and has therefore no simple relationship with program execution. This has sometimes been used to generate pseudorandom numbers in games, and also in software protection schemes. It has also been employed as a "hardware" counter in some designs; an example of this is the ZX81, which lets it keep track of character positions on the TV screen by triggering an interrupt at wrap around (by connecting INT to A6).

The interrupt vector register, I, is used for the Z80 specific mode 2 interrupts (selected by the IM 2 instruction). It supplies the high byte of the base address for a 128-entry table of service routine addresses which are selected via an index sent to the CPU during an interrupt acknowledge cycle; this index is simply the low byte part of the pointer to the tabulated indirect address pointing to the service routine.[10] The pointer identifies a particular peripheral chip and/or peripheral function or event, where the chips are normally connected in a so-called daisy chain for priority resolution. Like the refresh register, this register has also sometimes been used creatively; in interrupt modes 0 and 1 it can be used as simply another 8-bit data register.

Z80 assembly language

Datapoint 2200 and Intel 8008

The first Intel 8008 assembly language was based on a very simple (but systematic) syntax inherited from the Datapoint 2200 design. This original syntax was later transformed into a new, somewhat more traditional, assembly language form for this same original 8008 chip. At about the same time, the new assembly language was also extended to accommodate the added addressing possibilities in the more advanced Intel 8080 chip (the 8008 and 8080 shared a language subset without being binary compatible; however, the 8008 was binary compatible with the Datapoint 2200).

In this process, the mnemonic L, for LOAD, was replaced by various abbreviations of the words LOAD, STORE and MOVE, intermixed with other symbolic letters. The mnemonic letter M, for memory (referenced by HL), was lifted out from within the instruction mnemonic to become a syntactically freestanding operand, while registers and combinations of registers became very inconsistently denoted; either by abbreviated operands (MVI D, LXI H and so on), within the instruction mnemonic itself (LDA, LHLD and so on), or both at the same time (LDAX B, STAX D and so on).

Datapoint 2200 & i8008 i8080 Z80 i8086/i8088
before ~1973 ~1974 1976 1978 meaning
put the value in the C register in the B register
put the value in the address pointed to by the BC register in the A register
put the value in the address pointed to by the HL register in the A register
put the value in the address pointed to by the HL register in the B register
put the value in the A register in the address pointed to by the DE register
put the value in the A register in the address pointed to by the HL register
put the value in the C register in the address pointed to by the HL register
LDI 56
MVI D,56
LD D,56
put the value 56 in the D register
LMI 56
MVI M,56
LD (HL),56
MOV byte ptr [BP],56
put the value 56 in the address pointed to by the HL register
LDA 1234
LD A,(1234)
MOV AL,[1234]
put the value in address 1234 in the A register
STA 1234
LD (1234),A
MOV [1234],AL
put the value in the A register in address 1234
LD B,(IX+56)
MOV BL,[SI+56]
put the value in the (base) address pointed to by the IX register +56 (offset) in the B register
LD (IX+56),C
MOV [SI+56],CL
put the value in the C register in the address pointed to by the SI register +56 (offset)
LD (IY+56),78
MOV byte ptr [DI+56],78
put the value 78 in the address pointed to by the IY register +56 (offset)
LXI B,1234
LD BC,1234
MOV BX,1234
put the value 1234 in the BC register
LXI H,1234
LD HL,1234
MOV BP,1234
put the value 1234 in the HL register
SHLD 1234
LD (1234),HL
MOV [1234],BP
put the value in the HL register in address 1234
LHLD 1234
LD HL,(1234)
MOV BP,[1234]
put the value in address 1234 in the HL register
LD BC,(1234)
MOV BX,[1234]
put the value in address 1234 in the BC register
LD IX,(1234)
MOV SI,[1234]
put the value in address 1234 in the IX register
Illustration of four syntaxes, using samples of equivalent, or (for 8086) very similar, load and store instructions.[19]

New syntax

Because Intel had a copyright on their assembly mnemonics,[20] a new assembly syntax had to be developed. This time a more systematic approach was used:

  • All registers and register pairs are explicitly denoted by their full names
  • Parentheses are consistently used to indicate "memory contents at" (indirection, or pointer dereferencing) with the exception of some jump instructions.[21]
  • All load and store instructions use the same mnemonic name, LD, for LOAD (a return to the simplistic Datapoint 2200 vocabulary); other common instructions, such as ADD and INC, use the same mnemonic regardless of addressing mode or operand size. This is possible because the operands themselves carry enough information.

These principles made it straightforward to find names and forms for all new Z80 instructions, as well as orthogonalizations of old ones, such as LD BC,(1234).

Apart from naming differences, and despite a certain discrepancy in basic register structure, the Z80 and 8086 syntax are virtually isomorphous for a large portion of instructions. Only quite superficial similarities (such as the word MOV, or the letter X, for extended register) exist between the 8080 and 8086 assembly languages, although 8080 programs can be assembled into 8086 object code using a special assembler or translated to 8086 assembly language by a translator program.[22][23]

Instruction set and encoding

The Z80 uses 252 out of the available 256 codes as single byte opcodes ("root instruction"); the four remaining codes are used extensively as opcode prefixes:[24] CB and ED enable extra instructions and DD or FD selects IX+d or IY+d respectively (in some cases without displacement d) in place of HL. This scheme gives the Z80 a large number of permutations of instructions and registers; Zilog categorizes these into 158 different "instruction types", 78 of which are the same as those of the Intel 8080[24] (allowing operation of 8080 programs on a Z80). The Zilog documentation further groups instructions into the following categories:

  • 8-bit arithmetic and logic operations
  • 16-bit arithmetic
  • 8-bit load
  • 16-bit load
  • Bit set, reset, and test
  • Call, return, and restart
  • Exchange, block transfer, and search
  • General purpose arithmetic and CPU control
  • Input and output
  • Jump
  • Rotate and shift

No multiply instruction is available in the original Z80.[25] Different sizes and variants of additions, shifts, and rotates have somewhat differing effects on flags because the flag-influencing properties of the 8080 were copied. Load instructions do not affect the flags (except for the special purpose I and R register loads).

The index register (IX/IY) instructions can be useful for accessing data organised in fixed heterogenous structures (such as records) or at fixed offsets relative a variable base address (as in recursive stack frames) and can also reduce code size by removing the need for multiple short instructions using non-indexed registers. However, although they may save speed in some contexts when compared to long/complex "equivalent" sequences of simpler operations, they incur a lot of additional CPU time (e.g. 19 T-states to access one indexed memory location vs. as little as 11 to access the same memory using HL and INCrement it to point to the next). Thus, for simple or linear accesses of data, IX and IY tend to be slower. Still, they may be useful in cases where the 'main' registers are all occupied, by removing the need to save/restore registers. Their officially undocumented 8-bit halves (see below) can be especially useful in this context, for they incur less slowdown than their 16-bit parents. Similarly, instructions for 16-bit additions are not particularly fast (11 clocks) in the original Z80; nonetheless, they are about twice as fast as performing the same calculations using 8-bit operations, and equally important, they reduce register usage.

The 10-year-newer microcoded Z180 design could initially afford more "chip area", permitting a slightly more efficient implementation (using a wider ALU, among other things); similar things can be said for the Z800, Z280, and Z380. However, it was not until the fully pipelined eZ80 was launched in 2001 that those instructions finally became approximately as cycle-efficient as it is technically possible to make them, i.e. given the Z80 encodings combined with the capability to do an 8-bit read or write every clock cycle.

Undocumented instructions

The index registers, IX and IY, were intended as flexible 16 bit pointers, enhancing the ability to manipulate memory, stack frames and data structures. Officially, they were treated as 16-bit only. In reality, they were implemented as a pair of 8-bit registers,[26] in the same fashion as the HL register, which is accessible either as 16 bits or separately as the High and Low registers. Even the binary opcodes (machine language) were identical, but preceded by a new opcode prefix.[27] Zilog published the opcodes and related mnemonics for the intended functions, but did not document the fact that every opcode that allowed manipulation of the H and L registers was equally valid for the 8 bit portions of the IX and IY registers. As an example, the opcode 26h followed by an immediate byte value (LD H,n) will load that value into the H register. Preceding this two-byte instruction with the IX register's opcode prefix, DD, would instead result in the most significant 8 bits of the IX register being loaded with that same value. A notable exception to this would be instructions similar to LD H,(IX+d) which make use of both the HL and IX or IY registers in the same instruction;[27] in this case the DD prefix is only applied to the (IX+d) portion of the instruction.

There are several other undocumented instructions as well.[28] Undocumented or illegal opcodes are not detected by the Z80 and have various effects, some of which are useful. However, as they are not part of the formal definition of the instruction set, different implementations of the Z80 are not guaranteed to work the same way for every undocumented opcode.

Example code

The following Z80 assembly source code is for a subroutine named memcpy that copies a block of data bytes of a given size from one location to another. Important: The example code does not handle a certain case where the destination block overlaps the source; a fatal bug. The sample code is extremely inefficient, intended to illustrate various instruction types, rather than best practices for speed. In particular the Z80 has a single instruction that will execute the entire loop ("LDIR "). The data block is copied one byte at a time, and the data movement and looping logic utilizes 16-bit operations. Note that the assembled code is binary-compatible with the Intel 8080 and 8085 CPUs.

                 ; memcpy --
                 ; Copy a block of memory from one location to another.
                 ; Entry registers
                 ;      BC - Number of bytes to copy
                 ;      DE - Address of source data block
                 ;      HL - Address of target data block
                 ; Return registers
                 ;      BC - Zero
 1000                        org     1000h       ;Origin at 1000h
 1000            memcpy      public
 1000 78         loop        ld      a,b         ;Test BC,
 1001 B1                     or      c           ;If BC = 0,
 1002 C8                     retz                ;Return
 1003 1A                     ld      a,(de)      ;Load A from (DE)
 1004 77                     ld      (hl),a      ;Store A into (HL)
 1005 13                     inc     de          ;Increment DE
 1006 23                     inc     hl          ;Increment HL
 1007 0B                     dec     bc          ;Decrement BC
 1008 C3 00 10               jp      loop        ;Repeat the loop
 100B                        end

Instruction execution

Each instruction is executed in steps that are usually termed machine cycles (M-cycles), each of which can take between three and six clock periods (T-cycles).[29] Each M-cycle corresponds roughly to one memory access and/or internal operation. Many instructions actually end during the M1 of the next instruction which is known as a fetch/execute overlap.

Examples of typical instructions (R=read, W=write)
Total M-cycles instruction M1 M2 M3 M4 M5 M6
opcode n
opcode internal internal
SET b,(HL)
prefix opcode R(HL), set W(HL)
LD (IX+d),n
prefix opcode d n,add W(IX+d)
INC (IY+d)
prefix opcode d add R(IY+d),inc W(IY+d)

The Z80 machine cycles are sequenced by an internal state machine which builds each M-cycle out of 3, 4, 5 or 6 T-cycles depending on context. This avoids cumbersome asynchronous logic and makes the control signals behave consistently at a wide range of clock frequencies. It also means that a higher frequency crystal must be used than without this subdivision of machine cycles (approximately 2–3 times higher). It does not imply tighter requirements on memory access times, however, as a high resolution clock allows more precise control of memory timings and memory therefore can be active in parallel with the CPU to a greater extent (i.e. sitting less idle), allowing more efficient use of available memory bandwidth.

One central example of this is that, for opcode fetch, the Z80 combines two full clock cycles into a memory access period (the M1-signal). In the Z80 this signal therefore lasts for a much larger (relative) part of the typical instruction execution time than in a more asynchronous processor design such as the 6800, 6502, or similar, where this period would typically last only a (rather inprecise) fraction (typically 30-40%) of a clock cycle. With memory chip affordability (i.e. access times around 450-250 ns in the 1980s) typically determining the fastest possible access time, this meant that such designs were locked to a significantly longer clock cycle (i.e. lower internal clock speed) than the Z80.

Memory, especially EPROM, but also Flash, were generally slow as compared to the state machine sub-cycles (clock cycles) used in contemporary microprocessors. The shortest machine cycle that could safely be used in embedded designs has therefore often been limited by memory access times, not by the maximum CPU frequency (especially so during the home computer era). However, this relation has slowly changed during the last decades, particularly regarding SRAM; cacheless, single-cycle designs such as the eZ80 have therefore become much more meaningful recently.

Compatible peripherals

Zilog introduced a number of peripheral parts for the Z80, which all supported the Z80's interrupt handling system and I/O address space. These included the Counter/Timer Channel (CTC),[36] the SIO (Serial Input Output), the DMA (Direct Memory Access), the PIO (Parallel Input-Output) and the DART (Dual Asynchronous Receiver Transmitter). As the product line developed, low-power, high-speed and CMOS versions of these chips were produced.

Like the 8080, 8085 and 8086 processors, but unlike processors such as the Motorola 6800 and MOS Technology 6502, the Z80 and 8080 had a separate control line and address space for I/O instructions. While some Z80-based computers such as the Osborne 1 used "Motorola-style" memory mapped input/output devices, usually the I/O space was used to address one of the many Zilog peripheral chips compatible with the Z80. Zilog I/O chips supported the Z80's new mode 2 interrupts which simplified interrupt handling for large numbers of peripherals.

The Z80 was officially described as supporting 16-bit (64 KB) memory addressing, and 8-bit (256 ports) I/O-addressing. All I/O instructions actually assert the entire 16-bit address bus. OUT (C),reg and IN reg,(C) places the contents of the entire 16 bit BC register on the address bus;[37] OUT (n),A and IN A,(n) places the contents of the A register on b8-b15 of the address bus and n on b0-b7 of the address bus. A designer could choose to decode the entire 16 bit address bus on I/O operations in order to take advantage of this feature, or use the high half of the address bus to select subfeatures of the I/O device. This feature has also been used to minimise decoding hardware requirements, such as in the Amstrad CPC/PCW and ZX81.

Second sources and derivatives

Second sources

Mostek's Z80: MK3880
NEC's μPD780C Z80 second-sourced by NEC
Sharp's LH0080 Sharp version of the Z80
The T34BM1, a Russian Z80 clone
Toshiba TMPZ84C015; a standard Z80 with several Z80-family peripherals on chip in a QFP package
The Z80 compatible Hitachi HD64180
Z180 in a PLCC package
The Z80 compatible R800 in QFP
The Z280 in a PLCC package

Mostek, who produced the first Z80 for Zilog, offered it as second-source as MK3880. SGS-Thomson (now STMicroelectronics) was a second-source, too, with their Z8400. Sharp and NEC developed second sources for the NMOS Z80, the LH0080 and µPD780C respectively. The µPD780C was used in the Sinclair ZX80 and ZX81, original versions of the ZX Spectrum, and several MSX computers, and in musical synthesizers such as Oberheim OB-8 and others. The LH0080 was used in various home computers and personal computers made by Sharp and other Japanese manufacturers, including Sony MSX computers, and a number of computers in the Sharp MZ series.[38]

Toshiba made a CMOS-version, the TMPZ84C00, which is believed (but not verified) to be the same design also used by Zilog for its own CMOS Z84C00. There were also Z80-chips made by GoldStar (alias LG) and the BU18400 series of Z80-clones (including DMA, PIO, CTC, DART and SIO) in NMOS and CMOS made by ROHM Electronics.

In East Germany, an unlicensed clone of the Z80, known as the U880, was manufactured. It was very popular and was used in Robotron's and VEB Mikroelektronik Mühlhausen's computer systems (such as the KC85-series) and also in many self-made computer systems (such as COMP JU+TER). In Romania another unlicensed clone could be found, named MMN80CPU and produced by Microelectronica, used in home computers like TIM-S, HC, COBRA.

Also, several clones of Z80 were created in the Soviet Union, notable ones being the T34BM1, also called КР1858ВМ1 (parallelling the Russian 8080-clone KR580VM80A) The first marking was used in pre-production series, while the second had to be used for a larger production. Though, due to the collapse of Soviet microelectronics in the late 1980s, there are many more T34BM1s than КР1858ВМ1s.


Compatible with the original Z80
  • Hitachi developed the HD64180, a microcoded and partially dynamic Z80 in CMOS, with on chip peripherals and a simple MMU giving a 1 MB address space. It was later second sourced by Zilog, initially as the Z64180, and then in the form of the slightly modified Z180[39] which has bus protocol and timings better adapted to Z80 peripheral chips. Z180 has been maintained and further developed under Zilog's name, the newest versions being based on the fully static S180/L180 core with very low power draw and EMI (noise).
  • Toshiba developed the 84 pin Z84013 / Z84C13 and the 100 pin Z84015 / Z84C15 series of "intelligent peripheral controllers", basically ordinary NMOS and CMOS Z80 cores with Z80 peripherals, watch dog timer, power on reset, and wait state generator on the same chip. Manufactured by Sharp as well as Toshiba. These products are today second sourced by Zilog.[40]
  • The 32-bit Z80 compatible Zilog Z380, introduced 1994, is used mainly in telecom equipment.
  • Zilog's fully pipelined Z80 compatible eZ80[41] with an 8/16/24-bit word length and a linear 16 MB address space was introduced in 2001. It exists in versions with on chip SRAM and/or flash memory, as well as with integrated peripherals. One variant has on chip MAC (media access controller), and available software include a TCP/IP stack. In contrast with the Z800 and Z280, there are only a few added instructions (primarily LEAs, PEAs, and variable-address 16/24-bit loads), but instructions are instead executed between 2 and 11 times as clock cycle efficient as on the original Z80 (with a mean value around 3-5 times). It is currently specified for clock frequencies up to 50 MHz.
  • Kawasaki developed the binary compatible KL5C8400 which is approximately 1.2-1.3 times as clock cycle efficient as the original Z80 and can be clocked at up to 33 MHz. Kawasaki also produces the KL5C80A1x family, which has peripherals as well as a small RAM on chip; it is approximately as clock cycle efficient as the eZ80 and can be clocked at up to 10 MHz (2006).[42]
  • The NEC uPD9002 was an hybrid CPU compatible with both Z80 and x86 families.
  • The Chinese Actions Semiconductor's audio processor family of chips (ATJ2085 and others) contains a Z80-compatible MCU together with a 24-bit dedicated DSP processor.[43] These chips are used in many MP3 and media player products.
  • The T80 (VHDL) and TV80 (Verilog) synthesizable soft cores are available from[44]
  • The Toshiba TLCS 900 series of high volume (mostly OTP) microcontrollers are based on the Z80; they share the same basic BC,DE,HL,IX,IY register structure, and largely the same instructions, but are not binary compatible, while the previous TLCS 90 is Z80-compatible.[45]
  • The NEC 78K series microcontrollers are based on the Z80; they share the same basic BC,DE,HL register structure, and has similar (but differently named) instructions; not binary compatible.
Partly compatible
No longer produced
  • The ASCII Corporation R800 was a fast 16-bit processor used in MSX TurboR computers; it was software, but not hardware compatible with the Z80 (signal timing, pinout & function of pins differ from the Z80).
  • Zilog's NMOS Z800 and CMOS Z280 were 16-bit Z80-implementations (before the HD64180 / Z180) with a 16 MB paged MMU address space; they added many orthogonalizations and addressing modes to the Z80 instruction set. Minicomputer features such as, user and system modes, multiprocessor support, on chip MMU, on chip instruction and data cache and so on was seen rather as more complexity than as functionality and support for the (usually electronics-oriented) embedded systems designer, it also made it very hard to predict instruction execution times.


Software emulation of the Z80 instruction set is easily possible on modern PCs, since their processors run much faster than any of the original Z80 family. Programs emulating the processor are common and form an essential component of many full-hardware emulators of home computers (such as Amstrad CPC, MSX and Sinclair ZX Spectrum), video game consoles, and arcade game systems (such as MAME); SIMH emulates the MITS Altair 8800 computer with Intel 8080, Zilog Z80, or Intel 8086 processors. Coding a software-based emulation of the Z80 has been done by many people, whether as part of a fuller-featured emulator or as a programming project in its own right.

Notable uses

Desktop computers

The Z80A was used as the CPU in a number of gaming consoles, such as this ColecoVision.

During the late 1970s and early 1980s, the Z80 was used in a great number of fairly anonymous business-oriented machines with the CP/M operating system, a combination that dominated the market at the time.[48][49] Two well-known examples of Z80+CP/M business computers are the portable Osborne 1 and the Kaypro series. Research Machines manufactured the 380Z and 480Z microcomputers which were networked with a thin Ethernet type LAN and CP/NET in 1981. Other manufacturers of such systems included Televideo, Xerox (820 range) and a number of more obscure firms. Some systems used multi-tasking operating system software to share the one processor between several concurrent users.

In the U.S., the Radio Shack TRS-80, introduced in 1977, as well as the Models II, III, IV, and the proposed Model V, used the Z80. In the United Kingdom, Sinclair Research used the Z80 and Z80A in its ZX80, ZX81 and, ZX Spectrum home computers. Amstrad used them in their Amstrad CPC range and an early UK computer, the Nascom 1 and 2 also used the Z80. The Commodore 128 featured a Z80 processor alongside its MOS Technology 8502 processor for CP/M compatibility.[50] Other 6502 architecture computers on the market at the time, such as the BBC Micro, Apple II,[51] and the 6510 based Commodore 64,[52] could make use of the Z80 with an external unit, a plug-in card, or an expansion ROM cartridge. The Microsoft Z-80 SoftCard for the Apple II was a particularly successful add-on card and one of Microsoft's few hardware products of the era.

In 1981, Multitech (later to become Acer) introduced the Microprofessor I, a simple and inexpensive training system for the Z80 microprocessor. Currently, it is still manufactured and sold by Flite Electronics International Limited in Southampton, England.

Embedded systems and consumer electronics

Z80 based PABX. The Z80 is third chip in from the left, to the right of the chip with the hand-written white label on it.

The Zilog Z80 has long been a popular microprocessor in embedded systems and microcontroller cores,[18] where it remains in widespread use today.[1][53] The following list provides examples of such applications of the Z80, including uses in consumer electronics products.


  • Probably the first use of the Z80 in a PC expansion card was in the IBM PC-XT's hard drive controller, which was actually an IBM adaptation of the Xebec 1410 SASI controller, but on a PC-XT bus, not a SASI bus. The logic diagram of the IBM implementation is nearly identical to the Xebec 1410, down to the use of Xebec's proprietary LSI chip, and Xebec's proprietary data recovery circuit. Of course, SASI was Shugart Associate's invention, and it was the de facto hard drive interface standard up until the 1986 standardization of its replacement, SCSI.
  • Office equipment such as matrix printers, fax machines, answering machines, and photocopiers are known examples.
  • Industrial programmable logic controllers (PLCs) use the Z80 in CPU modules, for auxiliary functions such as analog I/O, or in communication modules.
  • It has also been employed in robots, for example for speech recognition[54] and low level tasks such as servo processors in pick and place machines.
  • RS232 multiplexers connecting large numbers of old style "terminals" to minicomputers or mainframes used arrays of Z80 CPU/SIO boards.
  • Applications such as TV broadcast vision mixers have used the Z80 for embedded real time subtasks.[55][56]
  • It has also been used in Seagate Technology's and other manufacturers' hard disks.
  • Credit card consoles controlling fuel pumps used Z80 CPU and PIOs (US patents 4930665, 4962462 and 5602745).
  • Retail industry point-of-sale credit card terminals manufactured by VeriFone used the Z80 processor.
  • Several PC expansion cards, such as Adaptecs SCSI boards, have been using the Z80/Z180 and peripheral chips.
  • Z80/Z180/Z380 have been used in telecommunication equipment such as telephone switches and various kinds of modems.
  • The Stofor message switch, used extensively by banks and brokers in the UK was Z80 based.
  • Cash registers and store management systems
  • Home automation, wireless sprinkler control and wireless mesh using the N8VEM open source homebrew system.
  • Breathalyzer equipment used by law enforcement agencies.[57]

Consumer electronics

Musical instruments

See also


  1. ^ a b c d Balch, Mark (2003-06-18). "Digital Fundamentals". Complete Digital Design: A Comprehensive Guide to Digital Electronics and Computer System Architecture. Professional Engineering.  
  2. ^ a b The Seybold report on professional computing. Seybold Publications. 1983. In the 8-bit world, the two most popular microcomputers are the Z80 and 6502 computer chips. 
  3. ^ Anderson 1994, p. 51
  4. ^ Anderson 1994, p. 57
  5. ^ a b Brock, Gerald W. (2003). The second information revolution. Harvard University Press.  
  6. ^ "History of the 8-bit: travelling far in a short time". InfoWorld (Palo Alto, CA: Popular Computing Inc.) 4 (47): pp. 58–60. November 29, 1982.  
  7. ^  
  8. ^ Mathur. Introduction to Microprocessors. p. 111.  
  9. ^ Ciarcia 1981, pp. 31,32
  10. ^ a b Wai-Kai Chen (2002). The circuits and filters handbook.  
  11. ^ Adrian, Andre. "Z80, the 8-bit Number Cruncher". 
  12. ^ Popular Computing.  
  13. ^ Markoff, John (18 October 1982). "Zilog's speedy Z80 soups up 8-bit to 16-bit perfofrmance".  
  14. ^ Electronic design. Hayden. 1988. p. 142. In addition to supporting the entire Z80 instruction set, the Z180 
  15. ^ Ganssle, Jack G. (1992). "The Z80 Lives!". The designers picked an architecture compatible with the Z80, giving Z80 users a completely software compatible upgrade path. The 64180 processor runs every Z80 instruction exactly as a Z80 does 
  16. ^ Kilobaud. 1001001. 1977. p. 22. 
  17. ^ Zaks, Rodnay (1982). Programming the Z80 (3rd ed.). SYBEX. p. 62.  
  18. ^ a b c Steve Heath. (2003). Embedded systems design. Oxford: Newnes. p. 21.  
  19. ^ Frank Durda IV. "8080/Z80 Instruction Set". 
  20. ^ Jump (JP) instructions, which load the program counter with a new instruction address, do not themselves access memory. Absolute and relative forms of the jump reflect this by omitting the round brackets from their operands. Register based jump instructions such as "JP (HL)" include round brackets in an apparent deviation from this convention."Z80 Relocating Macro Assembler User's Guide". p. Page B–2. 
  21. ^ Scanlon, Leo J. (1988). 8086/8088/80286 assembly language. Brady Books. p. 12.  
  22. ^ Nelson, Ross P. (1988). The 80386 book: assembly language programmer's guide for the 80386. Microsoft Press. p. 2.  
  23. ^ a b "Z80 CPU Introduction". Zilog. 1995. It has a language of 252 root instructions and with the reserved 4 bytes as prefixes, accesses an additional 308 instructions. 
  24. ^ Sanchez, Julio; Canton, Maria P. (2008). Software Solutions for Engineers And Scientists. Taylor & Francis. p. 65.  
  25. ^ Froehlich, Robert A. (1984). The free software catalog and directory. Crown Publishers. p. 133.  
  26. ^ a b Bot, Jacco J. T. "Z80 Undocumented Instructions". Home of the Z80 CPU. If an opcode works with the registers HL, H or L then if that opcode is preceded by #DD (or #FD) it works on IX, IXH or IXL (or IY, IYH, IYL), with some exceptions. The exceptions are instructions like LD H,IXH and LD L,IYH 
  27. ^ Robin Nixon The Amstrad Notepad Advanced User Guide ,Robin Nixon, 1993 ISBN 1-85058-515-6, pages 219-223
  28. ^ Zilog (2005). Z80 Family CPU User Manual. Zilog. p. 11 url = 
  29. ^ Ciarcia 1981, p. 65
  30. ^ Zaks, Rodnay (1989). Programming the Z80 (69). Sybex. p. 200.  
  31. ^ Ciarcia 1981, p. 63
  32. ^ Ciarcia 1981, p. 77
  33. ^ Ciarcia 1981, p. 36
  34. ^ Ciarcia 1981, p. 58
  35. ^ "Z80 Family CPU Peripherals User Manual". EEWORLD Datasheet. ZiLOG. 2001. Retrieved April 2014. 
  36. ^ Young, Sean (1998). "Z80 Undocumented Features (in software behaviour)". The I/O instructions use the whole of the address bus, not just the lower 8 bits. So in fact, you can have 65536 I/O ports in a Z80 system (the Spectrum uses this). IN r,(C), OUT (C),r and all the I/O block instructions put the whole of BC on the address bus. IN A,(n) and OUT (n),A put A*256+n on the address bus. 
  37. ^ "Overview of the SHARP MZ-series". Most MZ's use the 8bit CPU LH0080 / Z80 [...] 
  38. ^ Ganssle, Jack G. (1992). "The Z80 Lives!". The 64180 is a Hitachi-supplied Z80 core with numerous on-chip "extras". Zilog's version is the Z180, which is essentially the same part. 
  39. ^ Ganssle, Jack G. (1992). "The Z80 Lives!". Both Toshiba and Zilog sell the 84013 and 84015, which are Z80 cores with conventional Z80 peripherals integrated on-board. 
  40. ^ "EZ80 ACCLAIM Product Family". Zilog. 
  41. ^ Electronic Business Asia. Cahners Asia Limited. 1997. p. 5. Kawasaki's KL5C80A12, KL5C80A16 and KL5C8400 are high speed 8-bit MCUs and CPU. Their CPU code, KC80 is compatible with Zilog's Z80 at binary level. KC80 executes instructions about four times faster than Z80 at the same clock rate 
  42. ^ "Hardware specs". 2005. 
  43. ^ "Projects :: OpenCores". 
  44. ^ "Section 6 MOS MPU, MCU, and Peripherals Market Trends". p. 16. 
  45. ^ Axelson, Jan (2003). Embedded ethernet and internet complete. Lakeview research. p. 93.  
  46. ^ Hyder, Kamal; Perrin, Bob (2004). Embedded systems design using the Rabbit 3000 microprocessor. Newnes. p. 32.  
  47. ^ Holtz, Herman (1985). Computer work stations. Chapman and Hall. p. 223.  
  48. ^ Dvorak, John C. (10 May 1982). "After CP/M, object oriented operating systems may lead the field".  
  49. ^ Byte.  
  50. ^ Petersen, Marty (6 February 1984). "Review: Premium Softcard IIe".  
  51. ^ Popular Computing.  
  52. ^ Ian R. Sinclair. (2000). Practical electronics handbook. Oxford, Angleterre: Newnes. p. 204.  
  53. ^ A. Meystel. (1991). Autonomous mobile robots : vehicles with cognitive control. Teaneck, N.J.: World Scientific. p. 44.  
  54. ^ American Society of Cinematographers (1983). American cinematographer. ASC Holding. p. 18. 
  55. ^ Bruce A. Artwick. (1980). Microcomputer interfacing. Englewood Cliffs, N.J.: Prentice-Hall: Prentice-Hall. p. 25.  
  56. ^ Anderson, Nate. "Source code requests force breathalyzer maker to sober up". Ars Technica. The Intoxilyzer 5000EN, a breathalyzer, runs on a pair of Z80 processors 
  57. ^ "Game Board Schematic". Midway Pac-Man Parts and Operating Manual (PDF).  
  58. ^ "Game Logic Schematic". Midway Galaxian Parts and Operating Manual (PDF).  
  59. ^ "Schematics and Wiring Diagrams". Midway Galega Parts and Operating Manual (PDF).  
  60. ^ InfoWorld (Vol. 4, No. 50): 33. 20 December 1982.  
  61. ^ Daniel Sanchez-Crespo Dalmau (2004). Core techniques and algorithms in game programming. Indianapolis, Ind.: New Riders. p. 14.  
  62. ^ nintendods (2004-09-29). "季節報 Nintendo DS ブログ : 解体新書。初代GBをバラしてみる。" [Game Boy hardware dissection] (in Japanese). Retrieved 2009-01-02. 
  63. ^ Campbell, Robert (2001). "TI-82/83/85/86 Mathematics Use". UMBC. 
  64. ^ Machek, Pavel (2005-11-18). "Ericsson GA628". Hackable cell-phones. Retrieved 2012-07-17. 
  65. ^ Miesenberger, Klaus (2008). Computers Helping People with Special Needs. Berlin: Springer. p. 556.  
  66. ^ Reid, Gordon (March 1999). "Sequential Circuits Prophet Synthesizers 5 & 10 (Retro)". Sound on Sound. Although the Prophet 5s and Prophet 10s incorporated Z80 microprocessors, 
  67. ^ "About MemoryMoog". Moog MemoryMoog User Group. CPU is Z80 + Z80CTC 


  • Zilog Components Data Book.  
  • Zilog Z-80 Data Book (pdf).  
  • Anderson, Alexander John (8 September 1994). Foundations of Computer Technology (1st ed.).  
  • "Sharp LH0080 Z80 CPU Reference Manual" (pdf).  

Further reading

  • El-Hajj A, Kabalan KY, Mneimneh M, Karablieh F, C. D. (August 2000). "Microprocessor simulation and program assembling using spreadsheets". Simulation 75 (2): 82–90.  
  • Nagasawa K, Taki K, Tamemoto H, Lee BY, Tanaka H, Imai S, Kajikawa Y, Azuma D (April 1997). "Design and evaluation for super low power Z80 with pass-transistor logic". Sharp Technical Journal 67: 35–40. 
  • Lunscher W (1985). "Semaphore Strategy For Z80". IEEE Micro (IEEE) 5 (3): 4.  
  • Smith MF, Luff BE, M.; Luff, B. (1984). "Automatic Assembler Source Translation From The Z80 To The Mc6809". IEEE Micro (IEEE) 4 (2): 3–9.  
  • Diab HB, Demashkieh I, H.B.; Demashkieh, I. (May 1991). "A computer-aided teaching package for microprocessor systems education". IEEE Transactions on Education (IEEE) 34 (2): 179–183.  
  • Nehrir MH, Odermann AJ, Bowen BD, M.H.; Odermann, A.J.; Bowen, B.D. (November 1990). "A microcomputer-microprocessor-based DC motor speed controller for undergraduate electric machinery laboratory". IEEE Transactions on Education (IEEE) 33 (4): 341–345.  
  • C. D. Spencer and P. F. Seligmann, C. D. (May 1986). "Microcomputers as digital electronics". American Journal of Physics (AAPT) 54 (5): 411–415.  
  • Mudge TN, Buzzard GD, Trevor N.; Buzzard, Gregory D. (1983). "Teaching Assembly Language Programming With ZIP, A Z80 Assembly Language Interpreter Program". IEEE Transactions on Education (IEEE) 26 (3): 91–98.  
  • Microprofessor I Z80 System hardware, associated coursework & training manuals.
  • Otieno FO, Kola BO, Onyango FN, F O; Kola, B O; Onyango, F N (March 1997). "On-line determination of thermophysical properties in an absorption calorimeter". Measurement Science & Technology (IOP) 8 (3): 239–244.  
  • Altieri S, Fossati F, Lanza A, Pinelli T, S.; Fossati, F.; Lanza, A.; Pinelli, T. (April 1995). "An Automated-System to Control the Polarization Voltage of Silicon Detectors". IEEE Transactions on Nuclear Science (IEEE) 42 (2): 57–60.  
  • Xiao FM, Li S, Fengmei; Li, Shi (1992). "A Front-End Data Acquisition-System for Mossbauer-Spectroscopy". Hyperfine Interactions (Springer Netherlands) 71: 1531–1534.  
  • T Brenner, S Buttgenbach, T Fabula and W Rupprecht, T; Buttgenbach, S; Fabula, T; Rupprecht, W (1988). "Real-time data acquisition system for laser and radio frequency spectroscopy". J. Phys. E: Sci. Instrum. (IOP) 21 (12): 1150–1153.  
  • P M Kennedy and Z H Stachurski, P M; Stachurski, Z H (1986). "A novel semi-contact extensometer based on Z80 microprocessor". J. Phys. E: Sci. Instrum. (IOP) 19 (2): 115–118.  
  • Thomas L. Bunn, W. Stephen Woodward, and Tomas Baer, Thomas L.; Woodward, W. Stephen; Baer, Tomas (November 1984). "Design and operation of a 12.5-ns multichannel scaler". Review of Scientific Instruments (AIP) 55 (11): 1849–1853.  
  • K. L. Sala, R. LeSage, and R. W. Yip, K. L. (November 1982). "S–100/Z80 microprocessor-based scanning microdensitometer and signal processing system". Review of Scientific Instruments (AIP) 53 (11): 1682–1684.  

External links

  • Zilog Z80 Product Family
  • Z80-Family Official Support Page
  • Z80 software emulators
  • Yet Another Z80 Emulator by AG (YAZE-AG)
  • DEEDS - Digital Electronics Education and Design Suite - Simulators for Digital Design Training - The suite covers also microprocessor systems based on the DMC8 (an 8 bit CPU derived from Z80), and exports projects in VHDL and on FPGA (free download)
  • Flite Electronics: Manufacturer of the Z80 Microprofessor Training System
  • Free Z80 CPU core (VHDL code), (Verilog code)
  • The Undocumented Z80 Documented
  • Z80 opcode list
  • Mostek Z80 Processor Technical Manual
  • Sharp LH0080 at CPU World
  • Z80 Bus Emulator for education purpose. Includes NEC's TK-80 Training-Kit-, ZX-80 Microcomputer-, CP/M 2.2 Emulator.
  • How the Z80's registers are implemented in silicon
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.