Z80

From CPCWiki

Jump to: navigation, search
Zilog Z80A
Zilog Z80A

Microprocessor from Zilog, wich is used in the Amstrad CPC Computers. The Z80/Z80A was a very popular microprocessor, used in a great variety of home computers and appliances as far-fetched as satelites. It was even used in the Commodore C128 as a secondary processor in order to achieve CP/M compatibility.

Contents

Description

The Z80 microprocessor is an 8 bit CPU with a 16 bit address bus capable of direct access of 64k of memory space. It has a language of 252 root instructions and with the reserved 4 bytes as prefixes, acceses an additional 308 instructions. The Z80 was modeled after the 8088 and contains the 78 - 8088 opcodes as a subset to it's language.

Programming features include an accumulator and six eight bit registers that can be paired as 3-16 bit registers. In addition to the general registers, a stack-pointer, program-counter, and two index (memory pointers) registers are provided. While not in the same leauge as the 80486 or 68000 series, the Z80 is extremely useful for low cost control applications. One of the more useful features of the Z80 is the built-in refresh circuitry for ease of design with DRAMs.

The Z80 comes in a 40 pin DIP package. It has been manufactured in A, B, and C models, differing only in maximum clock speed. It also has been manufactured as a stand-alone microcontroler with various configurations of on-chip RAM and EPROM.

See also

Tutorials

Weblinks

Opcodes

Check the end of the document for explanations of abbreviations used below.

Alfabethical list

MnemonicClockSizeSZHPNCOpcodeDescriptionNotes
ADC A, r41*** V0 *88 + rbAdd with CarryA = A + s + CY
ADC A, N72CE XX
ADC A, (HL)718E
ADC A, (IX + N)193DD 8E XX
ADC A, (IY + N)193FD 8E XX
ADC HL, BC152**? V0 *ED 4AAdd with CarryHL = HL + ss + CY
ADC HL, DE152ED 5A
ADC HL, HL152ED 6A
ADC HL, SP152ED 7A
ADD A, r41*** V0 *80 + rbAdd (8-bit)A = A + s
ADD A, N72C6 XX
ADD A, (HL)7186
ADD A, (IX + N)193DD 86 XX
ADD A, (IY + N)193FD 86 XX
ADD HL, BC111--?- 0 *09Add (16-bit)HL = HL + ss
ADD HL, DE11119
ADD HL, HL11129
ADD HL, SP11139
ADD IX, BC152--?- 0 *DD 09Add (IX register)IX = IX + pp
ADD IX, DE152DD 19
ADD IX, IX152DD 29
ADD IX, SP152DD 39
ADD IY, BC152--?- 0 *FD 09Add (IY register)IY = IY + rr
ADD IY, 152FD 19
ADD IY, IY152FD 29
ADD IY, SP152FD 39
AND r41***P00A0+rbLogical ANDA=A&s
AND N72E6 XX
AND (HL)71A6
AND (IX+N)193DD A6 XX
AND (IY+N)193FD A6 XX
BIT b,r82?*1?0-CB 40+8*b+rbTest Bitm&{2^b}
BIT b,(HL)122CB 46+8*b
BIT b,(IX+N)204DD CB XX 46+8*b
BIT b,(IY+N)204FD CB XX 46+8*b
CALL NN173------CD XX XXUnconditional Call-(SP)=PC,PC=nn
CALL C,NN17/13------DC XX XXConditional CallIf Carry = 1
CALL NC,NN17/13D4 XX XXIf carry = 0
CALL M,NN17/13FC XX XXIf Sign = 1 (negative)
CALL P,NN17/13F4 XX XXIf Sign = 0 (positive)
CALL Z,NN17/13CC XX XXIf Zero = 1 (ans.=0)
CALL NZ,NN17/13C4 XX XXIf Zero = 0 (non-zero)
CALL PE,NN17/13EC XX XXIf Parity = 1 (even)
CALL PO,NN17/13E4 XX XXIf Parity = 0 (odd)
CCF41--?-0*3FComplement Carry FlagCY=~CY
CP r41***V1*B8+rbCompareCompare A-s
CP N72FE XX
CP (HL)71BE
CP (IX+N)193DD BE XX
CP (IY+N)193FD BE XX
CPD162****1-ED A9Compare and DecrementA-(HL),HL=HL-1,BC=BC-1
CPDR21/12****1-ED B9Compare, Dec., RepeatCPD till A=(HL)or BC=0
CPI162****1-ED A1Compare and IncrementA-(HL),HL=HL+1,BC=BC-1
CPIR21/12****1-ED B1Compare, Inc., RepeatCPI till A=(HL)or BC=0
CPL41--1-1-2FComplementA=~A
DAA41***P-*27Decimal Adjust Acc.A=BCD format (dec.)
DEC A41***V1-3DDecrement (8-bit)s=s-1
DEC B4105
DEC C410D
DEC D4115
DEC E411D
DEC H4125
DEC L422D
DEC (HL)11135
DEC (IX+N)233DD 35 XX
DEC (IY+N)233FD 35 XX
DEC BC61------0BDecrement (16-bit)ss=ss-1
DEC DE611B
DEC HL612B
DEC SP613B
DEC IX102------DD 2BDecrementxx=xx-1
DEC IY102FD 2B
DI41------F3Disable Interrupts
DJNZ $+213/81------10Dec., Jump Non-ZeroB=B-1 till B=0
EI41------FBEnable Interrupts
EX (SP),HL191------E3Exchange(SP)<->HL
EX (SP),IX232DD E3(SP)<->xx
EX (SP),IY232FD E3
EX AF,AF'4108AF<->AF'
EX DE,HL41EBDE<->HL
EXX41------D9Exchangeqq<->qq' (except AF)
HALT41------76Halt
IM 082------ED 46Interrupt Mode (n=0,1,2)
IM 182ED 56
IM 282ED 5E
IN A,(N)112------DB XXInputA=(n)
IN (C)122***P0-ED 70Input*(Unsupported)
IN A,(C)122***P0-ED 78Inputr=(C)
IN B,(C)122ED 40
IN C,(C)122ED 48
IN D,(C)122ED 50
IN E,(C)122ED 58
IN H,(C)122ED 60
IN L,(C)122ED 68
INC A41***V0-3CIncrement (8-bit)r=r+1
INC B4104
INC C410C
INC D4114
INC E411C
INC H4124
INC L412C
INC BC61------03Increment (16-bit)ss=ss+1
INC DE6113
INC HL6123
INC SP6133
INC IX102------DD 23Incrementxx=xx+1
INC IY102FD 23
INC (HL)111***V0-34Increment (indirect)(HL)=(HL)+1
INC (IX+N)233***V0-DD 34 XXIncrement(xx+d)=(xx+d)+1
INC (IY+N)233FD 34 XX
IND162?*??1-ED AAInput and Decrement(HL)=(C),HL=HL-1,B=B-1
INDR21/12?1??1-ED BAInput, Dec., RepeatIND till B=0
INI162?*??1-ED A2Input and Increment(HL)=(C),HL=HL+1,B=B-1
INIR21/12?1??1-ED B2Input, Inc., RepeatINI till B=0
JP NN103------C3 XX XXUnconditional JumpPC=nn
JP (HL)41E9PC=(HL)
JP (IX)82DD E9PC=(xx)
JP (IY)82FD E9
JP C,$NN10/13------DA XX XXConditional JumpIf Carry = 1
JP NC,$NN10/13D2 XX XXIf Carry = 0
JP M,$NN10/13FA XX XXIf Sign = 1 (negative)
JP P,$NN10/13F2 XX XXIf Sign = 0 (positive)
JP Z,$NN10/13CA XX XXIf Zero = 1 (ans.= 0)
JP NZ,$NN10/13C2 XX XXIf Zero = 0 (non-zero)
JP PE,$NN10/13EA XX XXIf Parity = 1 (even)
JP PO,$NN10/13E2 XX XXIf Parity = 0 (odd)
JR $N+2122------18 XXRelative JumpPC=PC+e
JR C,$N+212/72------38 XXCond. Relative JumpIf cc JR(cc=C,NC,NZ,Z)
JR NC,$N+212/7230 XX
JR Z,$N+212/7228 XX
JR NZ,$N+212/7220 XX
LD I,A92------ED 47Load*dst=src
LD R,A92ED 4F
LD A,I92**0*0-ED 57Load*dst=src
LD A,R92ED 5F
LD A,r41------78+rbLoad (8-bit)dst=src
LD A,N723E XX
LD A,(BC)710A
LD A,(DE)711A
LD A,(HL)717E
LD A,(IX+N)193DD 7E XX
LD A,(IY+N)193FD 7E XX
LD A,(NN)1333A XX XX
LD B,r4140+rb
LD B,N7206 XX
LD B,(HL)7146
LD B,(IX+N)193DD 46 XX
LD B,(IY+N)193FD 46 XX
LD C,r4148+rb
LD C,N720E XX
LD C,(HL)714E
LD C,(IX+N)193DD 4E XX
LD C,(IY+N)193FD 4E XX
LD D,r4150+rb
LD D,N7216 XX
LD D,(HL)7156
LD D,(IX+N)193DD 56 XX
LD D,(IY+N)193FD 56 XX
LD E,r4158+rb
LD E,N721E XX
LD E,(HL)715E
LD E,(IX+N)193DD 5E XX
LD E,(IY+N)193FD 5E XX
LD H,r4160+rb
LD H,N7226 XX
LD H,(HL)7166
LD H,(IX+N)193DD 66 XX
LD H,(IY+N)193FD 66 XX
LD L,r4168+rb
LD L,N722E XX
LD L,(HL)716E
LD L,(IX+N)193DD 6E XX
LD L,(IY+N)193FD 6E XX
LD BC,(NN)204------ED 4B XX XX Load (16-bit)dst=src
LD BC,NN10301 XX XX
LD DE,(NN)204ED 5B XX XX
LD DE,NN10311 XX XX
LD HL,(NN)2032A XX XX
LD HL,NN10321 XX XX
LD SP,(NN)204ED 7B XX XX
LD SP,HL61F9
LD SP,IX102DD F9
LD SP,IY102FD F9
LD SP,NN10331 XX XX
LD IX,(NN)204DD 2A XX XX
LD IX,NN144DD 21 XX XX
LD IY,(NN)204FD 2A XX XX
LD IY,NN144FD 21 XX XX
LD (HL),r71------70+rbLoad (Indirect)dst=src
LD (HL),N10236 XX
LD (BC),A7102
LD (DE),A7112
LD (NN),A13332 XX XX
LD (NN),BC204ED 43 XX XX
LD (NN),DE204ED 53 XX XX
LD (NN),HL16322 XX XX
LD (NN),IX204DD 22 XX XX
LD (NN),IY204FD 22 XX XX
LD (NN),SP204ED 73 XX XX
LD (IX+N),r193DD 70+rb XX
LD (IX+N),N194DD 36 XX XX
LD (IY+N),r193FD 70+rb XX
LD (IY+N),N194FD 36 XX XX
LDD162--0*0-ED A8Load and Decrement(DE)=(HL),HL=HL-1,#
LDDR21/12--000-ED B8Load, Dec., RepeatLDD till BC=0
LDI162--0*0-ED A0Load and Increment(DE)=(HL),HL=HL+1,#
LDIR21/12--000-ED B0Load, Inc., RepeatLDI till BC=0
NEG82***V1*ED 44NegateA=-A
NOP41------00No Operation
OR r41***P00B0+rbLogical inclusive ORA=Avs
OR N72F6 XX
OR (HL)71B6
OR (IX+N)193DD B6 XX
OR (IY+N)193FD B6 XX
OUT (N),A112------D3 XXOutput(n)=A
OUT (C),0122ED 71Output*(Unsupported)
OUT (C),A122ED 79Output(C)=r
OUT (C),B122ED 41
OUT (C),C122ED 49
OUT (C),D122ED 51
OUT (C),E122ED 59
OUT (C),H122ED 61
OUT (C),L122ED 69
OUTD162?*??1-ED ABOutput and Decrement(C)=(HL),HL=HL-1,B=B-1
OTDR21/12?1??1-ED BBOutput, Dec., RepeatOUTD till B=0
OUTI162?*??1-ED A3Output and Increment(C)=(HL),HL=HL+1,B=B-1
OTIR21/12?1??1-ED B3Output, Inc., RepeatOUTI till B=0
POP AF101------F1Popqq=(SP)+
POP BC101C1
POP DE101D1
POP HL101E1
POP IX142------DD E1Popxx=(SP)+
POP IY142FD E1
PUSH AF111------F5Push(SP)=qq
PUSH BC111C5
PUSH DE111D5
PUSH HL111E5
PUSH IX152------DD E5Push-(SP)=xx
PUSH IY152
RES b,r82------CB 80+8*b+rbReset bitm=m&{~2^b}
RES b,(HL)152CB 86+8*b
RES b,(IX+N)234DD CB XX 86+8*b
RES b,(IY+N)234FD CB XX 86+8*b
RET101------C9ReturnPC=(SP)+
RET C11/51D8Conditional ReturnIf Carry = 1
RET NC11/51D0If Carry = 0
RET M11/51F8If Sign = 1 (negative)
RET P11/51F0If Sign = 0 (positive)
RET Z11/51C8If Zero = 1 (ans.=0)
RET NZ11/51C0If Zero = 0 (non-zero)
RET PE11/51E8If Parity = 1 (even)
RET PO11/51E0If Parity = 0 (odd)
RET101------C9ReturnPC=(SP)+
RET C11/51------D8Conditional ReturnIf Carry = 1
RET NC11/51D0If Carry = 0
RET M11/51F8If Sign = 1 (negative)
RET P11/51F0If Sign = 0 (positive)
RET Z11/51C8If Zero = 1 (ans.=0)
RET NZ11/51C0If Zero = 0 (non-zero)
RET PE11/51E8If Parity = 1 (even)
RET PO11/51E0If Parity = 0 (odd)
RETI142------ED 4DReturn from InterruptPC=(SP)+
RETN142------ED 45Return from NMIPC=(SP)+
RLA41--0-0*17Rotate Left Acc.A={CY,A}<-
RL r82**0P0*CB 10+rbRotate Leftm={CY,m}<-
RL (HL)152CB 16
RL (IX+N)234DD CB XX 16
RL (IY+N)234FD CB XX 16
RLCA41--0-0*07Rotate Left Cir. Acc.A=A<-
RLC r82**0P0*CB 00+rbRotate Left Circularm=m<-
RLC (HL)152CB 06
RLC (IX+N)234DD CB XX 06
RLC (IY+N)234FD CB XX 06
RLD182**0P0-ED 6FRotate Left 4 bits{A,(HL)}={A,(HL)}<- ##
RRA41--0-0*1FRotate Right Acc.A=->{CY,A}
RR r8 2**0P0*CB 18+rbRotate Rightm=->{CY,m}
RR (HL)152CB 1E
RR (IX+N)234DD CB XX 1E
RR (IY+N)234FD CB XX 1E
RRCA41--0-0*0FRotate Right Cir.Acc.A=->A
RRC r82**0P0*CB 08+rbRotate Right Circularm=->m
RRC (HL)152CB 0E
RRC (IX+N)234DD CB XX 0E
RRC (IY+N)234FD CB XX 0E
RRD182**0P0-ED 67Rotate Right 4 bits{A,(HL)}=->{A,(HL)} ##
RST 0111------C7Restart(p=0H,8H,10H,...,38H)
RST 08H111CF
RST 10H111D7
RST 18H111DF
RST 20H111E7
RST 28H111EF
RST 30H111F7
RST 38H111FF
SBC r41***V1*98+rbSubtract with CarryA=A-s-CY
SBC A,N72DE XX
SBC (HL)719E
SBC A,(IX+N)193DD 9E XX
SBC A,(IY+N)193FD 9E XX
SBC HL,BC152**?V1*ED 42Subtract with CarryHL=HL-ss-CY
SBC HL,DE152ED 52
SBC HL,HL152ED 62
SBC HL,SP152ED 72
SCF41--0-0137Set Carry FlagCY=1
SET b,r82------CB C0+8*b+rbSet bitm=mv{2^b}
SET b,(HL)152CB C6+8*b
SET b,(IX+N)234DD CB XX C6+8*b
SET b,(IY+N)234FD CB XX C6+8*b
SLA r82**0P0*CB 20+rbShift Left Arithmeticm=m*2
SLA (HL)152CB 26
SLA (IX+N)234DD CB XX 26
SLA (IY+N)234FD CB XX 26
SRA r82**0P0*CB 28+rbShift Right Arith.m=m/2
SRA (HL)152CB 2E
SRA (IX+N)234DD CB XX 2E
SRA (IY+N)234FD CB XX 2E
SLL r82**0P0*CB 30+rbShift Left Logical*m={0,m,CY}<-

(SLL Instructions are unsupported)

SLL (HL)152CB 36
SLL (IX+N)234DD CB XX 36
SLL (IY+N)234FD CB XX 36
SRL r82**0P0*CB 38+rbShift Right Logicalm=->{0,m,CY}
SRL (HL)152CB 3E
SRL (IX+N)234DD CB XX 3E
SRL (IY+N)234FD CB XX 3E
SUB r41***V1*90+rbSubtractA=A-s
SUB N72D6 XX
SUB (HL)7196
SUB (IX+N)193DD 96 XX
SUB (IY+N)193FD 96 XX
XOR r41***P00A8+rbLogical Exclusive ORA=Axs
XOR N72EE XX
XOR (HL)71AE
XOR (IX+N)193DD AE XX
XOR (IY+N)193FD AE XX

Sorted by opcode

Ordered by function

Personal tools
Multiple Upload
Server space and bandwidth kindly donated by
CMO Internet Dienstleistungen GmbH
Image:Cmologo55x25.gif

CPC-TopSite