(arch z80
(operand A RegA "A" "A")
(operand B RegB "B" "B")
(operand C RegC "C" "C")
(operand D RegD "D" "D")
(operand E RegE "E" "E")
(operand H RegH "H" "H")
(operand L RegL "L" "L")
(operand HL RegHL "HL" "HL")
(operand HL$ MemHL "[HL]" "(HL)")
(operand BC RegBC "BC" "BC")
(operand BC$ MemBC "[BC]" "(BC)")
(operand DE RegDE "DE" "DE")
(operand DE$ MemDE "[DE]" "(DE)")
(operand AF RegAF "AF" "AF")
(operand AF- AltAF "AF-" "AF'")
(operand SP RegSP "SP" "SP")
(operand SP$ MemSP "[SP]" "(SP)")
(operand PQ RegPQ "PQ" "PQ")
(operand IX RegIX "IX" "IX")
(operand IX$ MemIX "[IX %B]" "(IX+%B)")
(operand IY RegIY "IY" "IY")
(operand IY$ MemIY "[IY %B]" "(IY+%B)")
(operand N ImmN "%B" "0+ %B" NN temp)
(operand N$ MemN "[%B]" "(%B)" NN$ temp)
(operand NN ImmNN "%W" "0+ %W" N)
(operand NN$ MemNN "[%W]" "(%W)" N$)
(operand C$ MemC "[C]" "(C)")
(operand I RegI "I" "I")
(operand R RegR "R" "R")
(operand F RegF "F" "F")
(operand NZ? CondNZ "NZ?" "NZ")
(operand Z? CondZ "Z?" "Z")
(operand NC? CondNC "NC?" "NC")
(operand C? CondC "C?" "C")
(operand PO? CondPO "PO?" "PO")
(operand PE? CondPE "PE?" "PE")
(operand P? CondP "P?" "P")
(operand M? CondM "M?" "M")
(registers A B C D E H L I R F AF AF- BC DE HL IX IY SP)
(conditions
(NZ? !=? not-zero?)
(Z? ==? zero?)
(NC? >=? not-carry?)
(C? <? carry?)
(PO? odd? not-over?)
(PE? even? over?)
(P? plus?)
(M? minus?))
(map R8 A 7 B 0 C 1 D 2 E 3 H 4 L 5)
(map QQ BC 0 DE 1 HL 2 AF 3)
(map DD BC 0 DE 1 HL 2 SP 3)
(map PP BC 0 DE 1 IX 2 SP 3)
(map RR BC 0 DE 1 IY 2 SP 3)
(map CC NZ? 0 Z? 1 NC? 2 C? 3 PO? 4 PE? 5 P? 6 M? 7)
(opcode LD (a b)
(R8 R8) [(+ 0b0100_0000 (R8 a 3) (R8 b))]
(R8 N) [(+ 0b0000_0110 (R8 a 3)) (=l b)]
(R8 HL$) [(+ 0b0100_0110 (R8 a 3))]
(R8 IX$) [0xDD (+ 0b0100_0110 (R8 a 3)) (=l b)]
(R8 IY$) [0xFD (+ 0b0100_0110 (R8 a 3)) (=l b)]
(HL$ R8) [(+ 0b0111_0000 (R8 b))]
(IX$ R8) [0xDD (+ 0b0111_0000 (R8 b)) (=l a)]
(IY$ R8) [0xFD (+ 0b0111_0000 (R8 b)) (=l a)]
(HL$ N) [0x36 (=l b)]
(IX$ N) [0xDD 0x36 (=l a) (=l b)]
(IY$ N) [0xFD 0x36 (=l a) (=l b)]
(A BC$) [0x0A]
(A DE$) [0x1A]
(A NN$) [0x3A (=l b) (=h b)]
(BC$ A) [0x02]
(DE$ A) [0x12]
(NN$ A) [0x32 (=l a) (=h a)]
(A I) [0xED 0x57]
(A R) [0xED 0x5F]
(I A) [0xED 0x47]
(R A) [0xED 0x4F]
(DD NN) [(+ 0b0000_0001 (DD a 4)) (=l b) (=h b)]
(IX NN) [0xDD 0x21 (=l b) (=h b)]
(IY NN) [0xFD 0x21 (=l b) (=h b)]
(HL NN$) [0x2A (=l b) (=h b)]
(DD NN$) [0xED (+ 0b0100_1011 (DD a 4)) (=l b) (=h b)]
(IX NN$) [0xDD 0x2A (=l b) (=h b)]
(IY NN$) [0xFD 0x2A (=l b) (=h b)]
(NN$ HL) [0x22 (=l a) (=h a)]
(NN$ DD) [0xED (+ 0b0100_0011 (DD b 4)) (=l a) (=h a)]
(NN$ IX) [0xDD 0x22 (=l a) (=h a)]
(NN$ IY) [0xFD 0x22 (=l a) (=h a)]
(SP HL) [0xF9]
(SP IX) [0xDD 0xF9]
(SP IY) [0xFD 0xF9])
(opcode PUSH (a)
(QQ) [(+ 0b1100_0101 (QQ a 4))]
(IX) [0xDD 0xE5]
(IY) [0xFD 0xE5])
(opcode POP (a)
(QQ) [(+ 0b1100_0001 (QQ a 4))]
(IX) [0xDD 0xE1]
(IY) [0xFD 0xE1])
(opcode EX (a b)
(DE HL) [0xEB]
(AF AF-) [0x08]
(SP$ HL) [0xE3]
(SP$ IX) [0xDD 0xE3]
(SP$ IY) [0xFD 0xE3])
(opcode EXX () () [0xD9])
(opcode LDI () () [0xED 0xA0])
(opcode LDIR () () [0xED 0xB0])
(opcode LDD () () [0xED 0xA8])
(opcode LDDR () () [0xED 0xB8])
(opcode CPI () () [0xED 0xA1])
(opcode CPIR () () [0xED 0xB1])
(opcode CPD () () [0xED 0xA9])
(opcode CPDR () () [0xED 0xB9])
(opcode ADD (a b)
(A R8) [(+ 0b1000_0000 (R8 b))]
(A N) [0xC6 (=l b)]
(A HL$) [0x86]
(A IX$) [0xDD 0x86 (=l b)]
(A IY$) [0xFD 0x86 (=l b)]
(HL DD) [(+ 0b0000_1001 (DD b 4))]
(IX PP) [0xDD (+ 0b0000_1001 (PP b 4))]
(IY RR) [0xFD (+ 0b0000_1001 (RR b 4))])
(opcode ADC (a b)
(A R8) [(+ 0b1000_1000 (R8 b))]
(A N) [0xCE (=l b)]
(A HL$) [0x8E]
(A IX$) [0xDD 0x8E (=l b)]
(A IY$) [0xFD 0x8E (=l b)]
(HL DD) [0xED (+ 0b0100_1010 (DD b 4))])
(opcode SUB (a)
(R8) [(+ 0b1001_0000 (R8 a))]
(N) [0xD6 (=l a)]
(HL$) [0x96]
(IX$) [0xDD 0x96 (=l a)]
(IY$) [0xFD 0x96 (=l a)])
(opcode SBC (a b)
(A R8) [(+ 0b1001_1000 (R8 b))]
(A N) [0xDE (=l b)]
(A HL$) [0x9E]
(A IX$) [0xDD 0x9E (=l b)]
(A IY$) [0xFD 0x9E (=l b)]
(HL DD) [0xED (+ 0b0100_0010 (DD b 4))])
(opcode AND (a)
(R8) [(+ 0b1010_0000 (R8 a))]
(N) [0xE6 (=l a)]
(HL$) [0xA6]
(IX$) [0xDD 0xA6 (=l a)]
(IY$) [0xFD 0xA6 (=l a)])
(opcode OR (a)
(R8) [(+ 0b1011_0000 (R8 a))]
(N) [0xF6 (=l a)]
(HL$) [0xB6]
(IX$) [0xDD 0xB6 (=l a)]
(IY$) [0xFD 0xB6 (=l a)])
(opcode XOR (a)
(R8) [(+ 0b1010_1000 (R8 a))]
(N) [0xEE (=l a)]
(HL$) [0xAE]
(IX$) [0xDD 0xAE (=l a)]
(IY$) [0xFD 0xAE (=l a)])
(opcode CP (a)
(R8) [(+ 0b1011_1000 (R8 a))]
(N) [0xFE (=l a)]
(HL$) [0xBE]
(IX$) [0xDD 0xBE (=l a)]
(IY$) [0xFD 0xBE (=l a)])
(opcode INC (a)
(R8) [(+ 0b0000_0100 (R8 a 3))]
(HL$) [0x34]
(IX$) [0xDD 0x34 (=l a)]
(IY$) [0xFD 0x34 (=l a)]
(DD) [(+ 0b0000_0011 (DD a 4))]
(IX) [0xDD 0x23]
(IY) [0xFD 0x23])
(opcode DEC (a)
(R8) [(+ 0b0000_0101 (R8 a 3))]
(HL$) [0x35]
(IX$) [0xDD 0x35 (=l a)]
(IY$) [0xFD 0x35 (=l a)]
(DD) [(+ 0b0000_1011 (DD a 4))]
(IX) [0xDD 0x2B]
(IY) [0xFD 0x2B])
(opcode RLCA () () [0x07])
(opcode RLA () () [0x17])
(opcode RRCA () () [0x0F])
(opcode RRA () () [0x1F])
(opcode RLC (a)
(R8) [0xCB (+ 0b0000_0000 (R8 a))]
(HL$) [0xCB 0x06]
(IX$) [0xDD 0xCB (=l a) 0x06]
(IY$) [0xFD 0xCB (=l a) 0x06])
(opcode RL (a)
(R8) [0xCB (+ 0b0001_0000 (R8 a))]
(HL$) [0xCB 0x16]
(IX$) [0xDD 0xCB (=l a) 0x16]
(IY$) [0xFD 0xCB (=l a) 0x16])
(opcode RRC (a)
(R8) [0xCB (+ 0b0000_1000 (R8 a))]
(HL$) [0xCB 0x0E]
(IX$) [0xDD 0xCB (=l a) 0x0E]
(IY$) [0xFD 0xCB (=l a) 0x0E])
(opcode RR (a)
(R8) [0xCB (+ 0b0001_1000 (R8 a))]
(HL$) [0xCB 0x1E]
(IX$) [0xDD 0xCB (=l a) 0x1E]
(IY$) [0xFD 0xCB (=l a) 0x1E])
(opcode SLA (a)
(R8) [0xCB (+ 0b0010_0000 (R8 a))]
(HL$) [0xCB 0x26]
(IX$) [0xDD 0xCB (=l a) 0x26]
(IY$) [0xFD 0xCB (=l a) 0x26])
(opcode SRA (a)
(R8) [0xCB (+ 0b0010_1000 (R8 a))]
(HL$) [0xCB 0x2E]
(IX$) [0xDD 0xCB (=l a) 0x2E]
(IY$) [0xFD 0xCB (=l a) 0x2E])
(opcode SRL (a)
(R8) [0xCB (+ 0b0011_1000 (R8 a))]
(HL$) [0xCB 0x3E]
(IX$) [0xDD 0xCB (=l a) 0x3E]
(IY$) [0xFD 0xCB (=l a) 0x3E])
(opcode RLD () () [0xED 0x6F])
(opcode RRD () () [0xED 0x67])
(opcode BIT (a b)
(N R8) [0xCB (=i a (+ 0b0100_0000 (R8 b)) 0x07 3)]
(N HL$) [0xCB (=i a 0b0100_0110 0x07 3)]
(N IX$) [0xDD 0xCB (=l b) (=i a 0b0100_0110 0x07 3)]
(N IY$) [0xFD 0xCB (=l b) (=i a 0b0100_0110 0x07 3)])
(opcode SET (a b)
(N R8) [0xCB (=i a (+ 0b1100_0000 (R8 b)) 0x07 3)]
(N HL$) [0xCB (=i a 0b1100_0110 0x07 3)]
(N IX$) [0xDD 0xCB (=l b) (=i a 0b1100_0110 0x07 3)]
(N IY$) [0xFD 0xCB (=l b) (=i a 0b1100_0110 0x07 3)])
(opcode RES (a b)
(N R8) [0xCB (=i a (+ 0b1000_0000 (R8 b)) 0x07 3)]
(N HL$) [0xCB (=i a 0b1000_0110 0x07 3)]
(N IX$) [0xDD 0xCB (=l b) (=i a 0b1000_0110 0x07 3)]
(N IY$) [0xFD 0xCB (=l b) (=i a 0b1000_0110 0x07 3)])
(bytemap JP 0xFF 0 0 0xE9)
(opcode JP (a)
(NN) [0xC3 (=l a) (=h a)]
(HL$) [0xE9]
(IX$) [0xDD (=m a JP)]
(IY$) [0xFD (=m a JP)])
(opcode JP (a b) (CC NN) [(+ 0b1100_0010 (CC a 3)) (=l b) (=h b)])
(opcode JR (a) (NN) [0x18 (=rl a -2)])
(opcode JR (a b)
(C? NN) [0x38 (=rl b -2)]
(NC? NN) [0x30 (=rl b -2)]
(Z? NN) [0x28 (=rl b -2)]
(NZ? NN) [0x20 (=rl b -2)])
(opcode DJNZ (a) (NN) [0x10 (=rl a -2)])
(opcode CALL (a) (NN) [0xCD (=l a) (=h a)])
(opcode CALL (a b) (CC NN) [(+ 0b1100_0100 (CC a 3)) (=l b) (=h b)])
(opcode RET () () [0xC9])
(opcode RET (a) (CC) [(+ 0b1100_0000 (CC a 3))])
(opcode RETI () () [0xED 0x4D])
(opcode RETN () () [0xED 0x45])
(opcode RST (a) (N) [(=i a 0b1100_0111 0b0011_1000 0)])
(opcode #.jump (a) (NN) [0xC3 (=l a) (=h a)])
(opcode #.jump (a b) (NN CC) [(+ 0b1100_0010 (CC b 3)) (=l a) (=h a)])
(opcode #.call (a) (NN) [0xCD (=l a) (=h a)])
(opcode #.call (a b) (NN CC) [(+ 0b1100_0100 (CC b 3)) (=l a) (=h a)])
(opcode IN (a b)
(A N$) [0xDB (=l b)]
(R8 C$) [0xED (+ 0b0100_0000 (R8 a 3))])
(opcode INI () () [0xED 0xA2])
(opcode INIR () () [0xED 0xB2])
(opcode IND () () [0xED 0xAA])
(opcode INDR () () [0xED 0xBA])
(opcode OUT (a b)
(N$ A) [0xD3 (=l a)]
(C$ R8) [0xED (+ 0b0100_0001 (R8 b 3))])
(opcode OUTI () () [0xED 0xA3])
(opcode OTIR () () [0xED 0xB3])
(opcode OUTD () () [0xED 0xAB])
(opcode OTDR () () [0xED 0xBB])
(opcode DAA () () [0x27])
(opcode CPL () () [0x2F])
(opcode NEG () () [0xED 0x44])
(opcode CCF () () [0x3F])
(opcode SCF () () [0x37])
(opcode NOP () () [0x00])
(opcode HALT () () [0x76])
(opcode DI () () [0xF3])
(opcode EI () () [0xFB])
(bytemap IM 0b0011 0 2 0x46 0x56 0x5E 0)
(opcode IM (a) (N) [0xED (=m a IM)])
(operator <- (a b)
(R8 _) [(LD (= a) (= b))]
(I _) [(LD (= a) (= b))]
(R _) [(LD (= a) (= b))]
(DD _) [(LD (= a) (= b))]
(IX _) [(LD (= a) (= b))]
(IY _) [(LD (= a) (= b))]
(DD PQ) [(#.LDP (= a) (= b))])
(operator -> (a b)
(R8 _) [(LD (= b) (= a))]
(I _) [(LD (= b) (= a))]
(R _) [(LD (= b) (= a))]
(DD _) [(LD (= b) (= a))]
(IX _) [(LD (= b) (= a))]
(IY _) [(LD (= b) (= a))]
(NN _) [(LD (= b) (= a))]
(DD PQ) [(#.LDP (= b) (= a))])
(operator <-> (a b)
(AF AF-) [(EX AF AF-)]
(DE HL) [(EX DE HL)]
(HL DE) [(EX DE HL)]
(HL SP$) [(EX SP$ HL)]
(SP$ HL) [(EX SP$ HL)])
(operator -push (a) (_) [(PUSH (= a))])
(operator -pop (a) (_) [(POP (= a))])
(operator ++ (a) (_) [(INC (= a))])
(operator -- (a) (_) [(DEC (= a))])
(operator -not (a) (A) [(CPL)])
(operator -neg (a) (A) [(NEG)])
(operator + (a b) (_ _) [(ADD (= a) (= b))])
(operator +$ (a b) (_ _) [(ADC (= a) (= b))])
(operator - (a b)
(HL _) [(OR A) (SBC HL (= b))]
(A _) [(SUB (= b))])
(operator -$ (a b) (_ _) [(SBC (= a) (= b))])
(operator -? (a b) (A _) [(CP (= b))])
(operator & (a b) (A _) [(AND (= b))])
(operator "|" (a b) (A _) [(OR (= b))])
(operator ^ (a b) (A _) [(XOR (= b))])
(operator <* (a b)
(A NN) [(#.REP (= b) `[(RLCA)])]
(_ NN) [(#.REP (= b) `[(RLC (= a))])])
(operator <*$ (a b)
(A NN) [(#.REP (= b) `[(RLA)])]
(_ NN) [(#.REP (= b) `[(RL (= a))])])
(operator >* (a b)
(A NN) [(#.REP (= b) `[(RRCA)])]
(_ NN) [(#.REP (= b) `[(RRC (= a))])])
(operator >*$ (a b)
(A NN) [(#.REP (= b) `[(RRA)])]
(_ NN) [(#.REP (= b) `[(RR (= a))])])
(operator << (a b) (_ NN) [(#.REP (= b) `[(SLA (= a))])])
(operator >> (a b) (_ NN) [(#.REP (= b) `[(SRA (= a))])])
(operator >>> (a b) (_ NN) [(#.REP (= b) `[(SRL (= a))])])
(operator -set (a b) (_ _) [(SET (= b) (= a))])
(operator -reset (a b) (_ _) [(RES (= b) (= a))])
(operator -bit? (a b) (_ _) [(BIT (= b) (= a))])
(operator -in (a b)
(A C) [(IN A C$)]
(_ C) [(IN (= a) C$)]
(A NN) [(IN A (= b NN$))])
(operator -out (a b)
(A C) [(OUT C$ A)]
(_ C) [(OUT C$ (= a))]
(A NN) [(OUT (= b NN$) A)])
(operator -zero? (a)
(A) [(AND (= a))]
(DD) [(#.INVALID (= a))]
(IX) [(#.INVALID (= a))]
(IY) [(#.INVALID (= a))]
(_) [(INC (= a)) (DEC (= a))])
(operator -jump (a) (NN) [(#.jump (= a))])
(operator -jump-if (a b) (NN CC) [(#.jump (= a) (= b))])
(operator -jump-unless (a b)
(NN NZ?) [(#.jump (= a) Z? )]
(NN Z?) [(#.jump (= a) NZ?)]
(NN NC?) [(#.jump (= a) C? )]
(NN C?) [(#.jump (= a) NC?)]
(NN PO?) [(#.jump (= a) PE?)]
(NN PE?) [(#.jump (= a) PO?)]
(NN M?) [(#.jump (= a) P? )]
(NN P?) [(#.jump (= a) M? )]))
(arch (+undocumented z80)
(operand IXH RegIXH "IXH" "IXH")
(operand IXL RegIXL "IXL" "IXL")
(operand IYH RegIYH "IYH" "IYH")
(operand IYL RegIYL "IYL" "IYL")
(registers IXH IXL IYH IYL)
(map X8 A 7 B 0 C 1 D 2 E 3 IXH 4 IXL 5)
(map Y8 A 7 B 0 C 1 D 2 E 3 IYH 4 IYL 5)
(map A-E A 7 B 0 C 1 D 2 E 3)
(opcode LD (a b)
(X8 IXH) [0xDD (+ 0b0100_0000 (X8 a 3) (X8 b))]
(IXH A-E) [0xDD (+ 0b0100_0000 (X8 a 3) (X8 b))]
(X8 IXL) [0xDD (+ 0b0100_0000 (X8 a 3) (X8 b))]
(IXL A-E) [0xDD (+ 0b0100_0000 (X8 a 3) (X8 b))]
(Y8 IYH) [0xFD (+ 0b0100_0000 (Y8 a 3) (Y8 b))]
(IYH A-E) [0xFD (+ 0b0100_0000 (Y8 a 3) (Y8 b))]
(Y8 IYL) [0xFD (+ 0b0100_0000 (Y8 a 3) (Y8 b))]
(IYL A-E) [0xFD (+ 0b0100_0000 (Y8 a 3) (Y8 b))]
(IXH N) [0xDD (+ 0b0000_0110 (X8 a 3)) (=l b)]
(IXL N) [0xDD (+ 0b0000_0110 (X8 a 3)) (=l b)]
(IYH N) [0xFD (+ 0b0000_0110 (Y8 a 3)) (=l b)]
(IYL N) [0xFD (+ 0b0000_0110 (Y8 a 3)) (=l b)])
(opcode ADD (a b)
(A IXH) [0xDD (+ 0b1000_0000 (X8 b))]
(A IXL) [0xDD (+ 0b1000_0000 (X8 b))]
(A IYH) [0xFD (+ 0b1000_0000 (Y8 b))]
(A IYL) [0xFD (+ 0b1000_0000 (Y8 b))])
(opcode ADC (a b)
(A IXH) [0xDD (+ 0b1000_1000 (X8 b))]
(A IXL) [0xDD (+ 0b1000_1000 (X8 b))]
(A IYH) [0xFD (+ 0b1000_1000 (Y8 b))]
(A IYL) [0xFD (+ 0b1000_1000 (Y8 b))])
(opcode SUB (a)
(IXH) [0xDD (+ 0b1001_0000 (X8 a))]
(IXL) [0xDD (+ 0b1001_0000 (X8 a))]
(IYH) [0xFD (+ 0b1001_0000 (Y8 a))]
(IYL) [0xFD (+ 0b1001_0000 (Y8 a))])
(opcode SBC (a b)
(A IXH) [0xDD (+ 0b1001_1000 (X8 b))]
(A IXL) [0xDD (+ 0b1001_1000 (X8 b))]
(A IYH) [0xFD (+ 0b1001_1000 (Y8 b))]
(A IYL) [0xFD (+ 0b1001_1000 (Y8 b))])
(opcode AND (a)
(IXH) [0xDD (+ 0b1010_0000 (X8 a))]
(IXL) [0xDD (+ 0b1010_0000 (X8 a))]
(IYH) [0xFD (+ 0b1010_0000 (Y8 a))]
(IYL) [0xFD (+ 0b1010_0000 (Y8 a))])
(opcode OR (a)
(IXH) [0xDD (+ 0b1011_0000 (X8 a))]
(IXL) [0xDD (+ 0b1011_0000 (X8 a))]
(IYH) [0xFD (+ 0b1011_0000 (Y8 a))]
(IYL) [0xFD (+ 0b1011_0000 (Y8 a))])
(opcode XOR (a)
(IXH) [0xDD (+ 0b1010_1000 (X8 a))]
(IXL) [0xDD (+ 0b1010_1000 (X8 a))]
(IYH) [0xFD (+ 0b1010_1000 (Y8 a))]
(IYL) [0xFD (+ 0b1010_1000 (Y8 a))])
(opcode CP (a)
(IXH) [0xDD (+ 0b1011_1000 (X8 a))]
(IXL) [0xDD (+ 0b1011_1000 (X8 a))]
(IYH) [0xFD (+ 0b1011_1000 (Y8 a))]
(IYL) [0xFD (+ 0b1011_1000 (Y8 a))])
(opcode INC (a)
(IXH) [0xDD (+ 0b0000_0100 (X8 a 3))]
(IXL) [0xDD (+ 0b0000_0100 (X8 a 3))]
(IYH) [0xFD (+ 0b0000_0100 (Y8 a 3))]
(IYL) [0xFD (+ 0b0000_0100 (Y8 a 3))])
(opcode DEC (a)
(IXH) [0xDD (+ 0b0000_0101 (X8 a 3))]
(IXL) [0xDD (+ 0b0000_0101 (X8 a 3))]
(IYH) [0xFD (+ 0b0000_0101 (Y8 a 3))]
(IYL) [0xFD (+ 0b0000_0101 (Y8 a 3))])
(opcode RLC (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0000_0000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0000_0000 (R8 a))])
(opcode RL (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0001_0000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0001_0000 (R8 a))])
(opcode RRC (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0000_1000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0000_1000 (R8 a))])
(opcode RR (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0001_1000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0001_1000 (R8 a))])
(opcode SLA (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0010_0000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0010_0000 (R8 a))])
(opcode SLL (a)
(R8) [0xCB (+ 0b0011_0000 (R8 a))]
(HL$) [0xCB 0x36]
(IX$) [0xDD 0xCB (=l a) 0x36]
(IY$) [0xFD 0xCB (=l a) 0x36])
(opcode SLL (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0011_0000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0011_0000 (R8 a))])
(opcode SRA (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0010_1000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0010_1000 (R8 a))])
(opcode SRL (a b)
(R8 IX$) [0xDD 0xCB (=l b) (+ 0b0011_1000 (R8 a))]
(R8 IY$) [0xFD 0xCB (=l b) (+ 0b0011_1000 (R8 a))])
(opcode BIT (a b c)
(R8 N IX$) [0xDD 0xCB (=l c) (=i b (+ 0b0100_0000 (R8 a)) 0x07 3)]
(R8 N IY$) [0xFD 0xCB (=l c) (=i b (+ 0b0100_0000 (R8 a)) 0x07 3)]
(N IX$ R8) [0xDD 0xCB (=l b) (=i a (+ 0b0100_0000 (R8 c)) 0x07 3)]
(N IY$ R8) [0xFD 0xCB (=l b) (=i a (+ 0b0100_0000 (R8 c)) 0x07 3)])
(opcode SET (a b c)
(R8 N IX$) [0xDD 0xCB (=l c) (=i b (+ 0b1100_0000 (R8 a)) 0x07 3)]
(R8 N IY$) [0xFD 0xCB (=l c) (=i b (+ 0b1100_0000 (R8 a)) 0x07 3)]
(N IX$ R8) [0xDD 0xCB (=l b) (=i a (+ 0b1100_0000 (R8 c)) 0x07 3)]
(N IY$ R8) [0xFD 0xCB (=l b) (=i a (+ 0b1100_0000 (R8 c)) 0x07 3)])
(opcode RES (a b c)
(R8 N IX$) [0xDD 0xCB (=l c) (=i b (+ 0b1000_0000 (R8 a)) 0x07 3)]
(R8 N IY$) [0xFD 0xCB (=l c) (=i b (+ 0b1000_0000 (R8 a)) 0x07 3)]
(N IX$ R8) [0xDD 0xCB (=l b) (=i a (+ 0b1000_0000 (R8 c)) 0x07 3)]
(N IY$ R8) [0xFD 0xCB (=l b) (=i a (+ 0b1000_0000 (R8 c)) 0x07 3)])
(opcode IN (a) (C$) [0xED 0x70])
(opcode IN (a b) (F C$) [0xED 0x70])
(opcode OUT (a b) (C$ N) [0xED (=i b 0x71 0 0)])
(operator <- (a b)
(IXH _) [(LD (= a) (= b))]
(IXL _) [(LD (= a) (= b))]
(IYH _) [(LD (= a) (= b))]
(IYL _) [(LD (= a) (= b))])
(operator -> (a b)
(IXH _) [(LD (= b) (= a))]
(IXL _) [(LD (= b) (= a))]
(IYH _) [(LD (= b) (= a))]
(IYL _) [(LD (= b) (= a))])
(operator <<< (a b) (_ NN) [(#.REP (= b) `[(SLL (= a))])]))