Wishlist of extended instructions for the Z80 ============================================= mdfs.net/Docs/Comp/Z80/WishList J.G.Harston - 26-Jun-2004 Sometime in about 1985 or 1986, Greg Heslington and I put together a list of additional instructions that it would be useful if the Z80 had, mainly by treating all the Z80's registers are completely generic registers. All 16-bit registers treated as completely generic registers, AF, BC, DE, HL, IX, IY, SP, PC. Any 16-bit register usable for any 16-bit operation including as an index register, any 8-bit half of any 16-bit register usable for any 8-bit operation. We worked out that almost all of them could be actually assembled to Z80 code by an assembler that understood the additional instructions, for instance, by defining macros. Instruction Summary ------------------- 8-bit data movement ------------------- LD r,r LD r,n LD r,(rr+n) LD (rr+n),r LD r,(nn) LD (nn),r 16-bit data movement -------------------- LD rr,rr LD rr,nn LD rr,(rr+n) LD (rr+n),rr LD rr,(nn) LD (nn),rr PUSH rr POP rr 8-bit arithmetic ---------------- alu r,r alu r,n alu r,(rr+n) alu (rr+n),r alu r,(nn) alu (nn),r INC r DEC r INC (rr+n) DEC (rr+n) INC (nn) DEC (nn) 16-bit arithmetic ----------------- alu rr,rr alu rr,nn alu rr,(rr+n) alu (rr+n),rr alu rr,(nn) alu (nn),rr INC rr DEC r INC (rr+n) DEC (rr+n) INC (nnnn) DEC (nnnn) Rotations/Bit operations ------------------------ rot r rot (rr+n) rot (nn) bit n,r bit n,(rr+n) bit n,(nn) Exchanges --------- EX r,r EX r,(rr+n) EX r,(nn) EX rr,rr EX rr,(rr+n) EX rr,(nn) Program control --------------- CALL rr CALL nn CALL (rr+n) CALL (nn) CALL cc,rr CALL cc,nn CALL cc,(rr+n) CALL cc,(nn) JP rr JP nn JP (rr+n) JP (nn) JP cc,rr JP cc,nn JP cc,(rr+n) JP cc,(nn) RET RET cc JR nn JR cc,nn Block Copy/Etc -------------- {LD,CP}{I,D}{,R} Input/Output ------------ IN r,(rr) OUT (rr),r IN r,(nn) OUT (nn),r IN{I,D}{,R} OT{I,D}{,R} Other Instructions ------------------ SCF CCF NEG CPL RLD RRD DAA NOP DJNZ RST nn EI DI IM n RETN RETI LD A,R LD R,A LD A,I LD I,A EXX EX AF,AF' Abbreviations ------------- r: A F B C D E H L IXL IXH IYL IYH rr: AF BC DE HL IX IY SP PC alu: ADD ADC SUB SBC AND XOR OR CP rot: RLC RRC RL RR SLA SRA SLS SRL bit: BIT RES SET cc: C NC Z NZ P M PE PO nn: 16-bit immediate n: 8-bit immediate Instruction Details ------------------- + indicated additional instructions 8-bit data movement ------------------- LD r,A +LD r,F LD r,B LD r,C LD r,D LD r,E LD r,H LD r,L LD r,IXL LD r,IXH LD r,IYL LD r,IYH LD A,n +LD F,n LD B,n LD C,n LD D,n LD E,n LD H,n LD L,n LD IXL,n LD IXH,n LD IYL,n LD IYH,n +LD r,(AF+n) +LD r,(BC+n) +LD r,(DE+n) +LD r,(HL+n) LD r,(IX+n) LD r,(IY+n) +LD r,(SP+n) +LD r,(PC+n) +LD (AF+n),r +LD (BC+n),r +LD (DE+n),r +LD (HL+n),r LD (IX+n),r LD (IY+n),r +LD (SP+n),r +LD (PC+n),r LD A,(nn) +LD F,(nn) +LD B,(nn) +LD C,(nn) +LD D,(nn) +LD E,(nn) +LD H,(nn) +LD L,(nn) +LD IXL,(nn) +LD IXH,(nn) +LD IYL,(nn) +LD IYH,(nn) LD (nn),A +LD (nn),F +LD (nn),B +LD (nn),C +LD (nn),D +LD (nn),E +LD (nn),H +LD (nn),L +LD (nn),IXL +LD (nn),IXH +LD (nn),IYL +LD (nn),IYH 16-bit data movement -------------------- +LD rr,AF +LD rr,BC +LD rr,DE +LD rr,HL +LD rr,IX +LD rr,IY +LD rr,SP +LD rr,PC +LD AF,nn LD BC,nn LD DE,nn LD HL,nn LD IX,nn LD IY,nn LD SP,nn +LD PC,nn +LD rr,(AF+n) +LD rr,(BC+n) +LD rr,(DE+n) +LD rr,(HL+n) +LD rr,(IX+n) +LD rr,(IY+n) +LD rr,(SP+n) +LD rr,(PC+n) +LD (AF+n),rr +LD (BC+n),rr +LD (DE+n),rr +LD (HL+n),rr +LD (IX+n),rr +LD (IY+n),rr +LD (SP+n),rr +LD (PC+n),rr +LD AF,(nn) LD BC,(nn) LD DE,(nn) LD HL,(nn) LD IX,(nn) LD IY,(nn) LD SP,(nn) +LD PC,(nn) +LD (nn),AF LD (nn),BC LD (nn),DE LD (nn),HL LD (nn),IX LD (nn),IY LD (nn),SP +LD (nn),PC PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY +PUSH SP +PUSH PC POP AF POP BC POP DE POP HL POP IX POP IY +POP SP +POP PC 8-bit arithmetic ---------------- +alu r,A +alu r,F +alu r,B +alu r,C +alu r,D +alu r,E +alu r,H +alu r,L +alu r,IXL +alu r,IXH +alu r,IYL +alu r,IYH alu A,n +alu F,n +alu B,n +alu C,n +alu D,n +alu E,n +alu H,n +alu L,n +alu IXL,n +alu IXH,n +alu IYL,n +alu IYH,n +alu r,(AF+n) +alu r,(BC+n) +alu r,(DE+n) +alu r,(HL+n) +alu r,(IX+n) +alu r,(IY+n) +alu r,(SP+n) +alu r,(PC+n) +alu A,(nn) +alu F,(nn) +alu B,(nn) +alu C,(nn) +alu D,(nn) +alu E,(nn) +alu H,(nn) +alu L,(nn) +alu IXL,(nn) +alu IXH,(nn) +alu IYL,(nn) +alu IYH,(nn) rot A rot F rot B rot C rot D rot E rot H rot L rot IXL rot IXH rot IYL rot IYH +rot (AF+n) +rot (BC+n) +rot (DE+n) +rot (HL+n) rot (IX+n) rot (IY+n) +rot (SP+n) +rot (PC+n) +rot (nn) INC/DEC A +INC/DEC F INC/DEC B INC/DEC C INC/DEC D INC/DEC E INC/DEC H INC/DEC L INC/DEC IXL INC/DEC IXH INC/DEC IYL INC/DEC IYH +INC/DEC (AF+n) +INC/DEC (BC+n) +INC/DEC (DE+n) +INC/DEC (HL+n) INC/DEC (IX+n) INC/DEC (IY+n) +INC/DEC (SP+n) +INC/DEC (PC+n) +INC/DEC (nn) 16-bit arithmetic ----------------- +alu rr,AF +alu rr,BC +alu rr,DE +alu rr,HL +alu rr,IX +alu rr,IY +alu rr,SP +alu rr,PC +alu AF,nn +alu BC,nn +alu DE,nn +alu HL,nn +alu IX,nn +alu IY,nn +alu SP,nn +alu PC,nn +alu rr,(AF) +alu rr,(BC) +alu rr,(DE) +alu rr,(HL) +alu rr,(IX) +alu rr,(IY) +alu rr,(SP) +alu rr,(PC) +alu AF,(nn) +alu BC,(nn) +alu DE,(nn) +alu HL,(nn) +alu IX,(nn) +alu IY,(nn) +alu SP,(nn) +alu PC,(nn) +rot AF +rot BC +rot DE +rot HL +rot IX +rot IY +rot SP +rot PC +rot (AF) +rot (BC) +rot (DE) +rot (HL) +rot (IX) +rot (IY) +rot (SP) +rot (PC) +rot (nn) +INC/DEC AF +INC/DEC BC +INC/DEC DE +INC/DEC HL +INC/DEC IX +INC/DEC IY +INC/DEC SP +INC/DEC PC +INC/DEC (AF) +INC/DEC (BC) +INC/DEC (DE) +INC/DEC (HL) +INC/DEC (IX) +INC/DEC (IY) +INC/DEC (SP) +INC/DEC (PC) +INC/DEC (nn) Bit operations -------------- bit b,A +bit b,F bit b,B bit b,C bit b,D bit b,E bit b,H bit b,L bit b,IXL bit b,IXH bit b,IYL bit b,IYH +bit b,(AF+n) +bit b,(BC+n) +bit b,(DE+n) +bit b,(HL+n) bit b,(IX+n) bit b,(IY+n) +bit b,(SP+n) +bit b,(PC+n) +bit b,(nn) Exchanges --------- +EX r,A +EX r,F +EX r,B +EX r,C +EX r,D +EX r,E +EX r,H +EX r,L +EX r,IXL +EX r,IXH +EX r,IYL +EX r,IYH +EX r,(AF+n) +EX r,(BC+n) +EX r,(DE+n) +EX r,(HL+n) +EX r,(IX+n) +EX r,(IY+n) +EX r,(SP+n) +EX r,(PC+n) +EX r,(nn) +EX rr,AF +EX rr,BC +EX rr,DE +EX rr,HL +EX rr,IX +EX rr IY +EX rr,SP +EX rr,PC +EX rr,(AF+n) +EX rr,(BC+n) +EX rr,(DE+n) +EX rr,(HL+n) +EX rr,(IX+n) +EX rr,(IY+n) +EX rr,(SP+n) +EX rr,(PC+n) +EX rr,(nn) Program control --------------- +CALL cc,AF +CALL cc,BC +CALL cc,DE +CALL cc,HL +CALL cc,IX +CALL cc,IY +CALL cc,SP +CALL cc,PC +CALL cc,(AF+n) +CALL cc,(BC+n) +CALL cc,(DE+n) +CALL cc,(HL+n) +CALL cc,(IX+n) +CALL cc,(IY+n) +CALL cc,(SP+n) +CALL cc,(PC+n) CALL cc,nn +CALL cc,(nn) +CALL AF +CALL BC +CALL DE +CALL HL +CALL IX +CALL IY +CALL SP +CALL PC +CALL (AF+n) +CALL (BC+n) +CALL (DE+n) +CALL (HL+n) +CALL (IX+n) +CALL (IY+n) +CALL (SP+n) +CALL (PC+n) CALL nn +CALL (nn) +JP cc,AF +JP cc,BC +JP cc,DE +JP cc,HL +JP cc,IX +JP cc,IY +JP cc,SP +JP cc,PC +JP cc,(AF+n) +JP cc,(BC+n) +JP cc,(DE+n) +JP cc,(HL+n) +JP cc,(IX+n) +JP cc,(IY+n) +JP cc,(SP+n) +JP cc,(PC+n) JP cc,nn +JP cc,(nn) JP rr - alias for LD PC,rr +JP (rr) - alias for LD PC,(rr) JP nn - alias for LD PC,nn +JP (nn) - alias for LD PC,(nn) JR cc,nn JR nn RET cc RET - alias for POP PC Block Copy/Search ----------------- LDI LDD LDIR LDDR CPI CPD CPIR CPDR Input/Output ------------ +IN r,(AF) IN r,(BC) +IN r,(DE) +IN r,(HL) +IN r,(IX) +IN r,(IY) +IN r,(SP) +IN r,(PC) +OUT (AF),r OUT (BC),r +OUT (DE),r +OUT (HL),r +OUT (IX),r +OUT (IY),r +OUT (SP),r +OUT (PC),r IN A,(nn) +IN F,(nn) +IN B,(nn) +IN C,(nn) +IN D,(nn) +IN E,(nn) +IN H,(nn) +IN L,(nn) +IN IXL,(nn) +IN IXH,(nn) +IN IYL,(nn) +IN IYH,(nn) OUT (nn),A +OUT (nn),F +OUT (nn),B +OUT (nn),C +OUT (nn),D +OUT (nn),E +OUT (nn),H +OUT (nn),L +OUT (nn),IXL +OUT (nn),IXH +OUT (nn),IYL +OUT (nn),IYH INI IND INIR INDR OTI OTD OTIR OTDR Misc ---- SCF CCF NEG CPL LD r,R LD R,r LD r,I LD I,r DJNZ nn RST nn RETN RETI RLD RRD EX AF,AF' EXX EI DI IM m DAA NOP Registers ALU Operations Bit Operations ========= ============== ============== r rr alu rot bit ------------ ------------- ------ A AF ADD RLC BIT F BC ADC RRC RES B DE SUB RL SET C HL SBC RR D IX AND SLA E IY XOR SRA H SP OR SLS L PC CP SRL IXL IXH XYL XYH