;; ;; Z-80 MACRO LIBRARY ;; ;; THE FOLLOWING MACROS ENABLE ASSEMBLING Z-80 INSTRUCTIONS ;; WITH THE DIGITAL RESEARCH MACRO ASSEMBLER. ;; ;; INVOKE WITH "MACLIB Z80" ;; ;; ;; Macro's added to support Z80 Opcodes by Garry Kraemer - Senior Software Engineer ;; ;; ;; MACRO FORMATS ;; ----- ------- ;; ;; ;; MACRO ZILOG TDL ;; ----- ----- --- ;; ;; LDX R,D LD R,(IX+D) MOV R,D(IX) ;; LDY R,D LD R,(IY+D) MOV R,D(IY) ;; STX R,D LD (IX+D),R MOV D(IX),R ;; STY R,D LD (IY+D),R MOV D(IY),R ;; MVIX NN,D LD (IX+D),NN MVI D(IX) ;; MVIY NN,D LD (IY+D),NN MVI D(IY) ;; LDAI LD A,I LDAI ;; LDAR LD A,R LDAR ;; STAI LD I,A STAI ;; STAR LD R,A STAR ;; LXIX NNNN LD IX,NNNN LXI IX,NNNN ;; LXIY NNNN LD IY,NNNN LXI IY,NNNN ;; LBCD NNNN LD BC,(NNNN) LBCD NNNN ;; LDED NNNN LD DE,(NNNN) LDED NNNN ;; LSPD NNNN LD SP,(NNNN) LSPD NNNN ;; LIXD NNNN LD IX,(NNNN) LIXD NNNN ;; LIYD NNNN LD IY,(NNNN) LIYD NNNN ;; SBCD NNNN LD (NNNN),BC SBCD NNNN ;; SDED NNNN LD (NNNN),DE SDED NNNN ;; SSPD NNNN LD (NNNN),SP SSPD NNNN ;; SIXD NNNN LD (NNNN),IX SIXD NNNN ;; SIYD NNNN LD (NNNN),IY SIYD NNNN ;; SPIX LD SP,IX SPIX ;; SPIY LD SP,IY SPIY ;; PUSHIX PUSH IX PUSH IX ;; PUSHIY PUSH IY PUSH IY ;; POPIX POP IX POP IX ;; POPIY POP IY POP IY ;; EXAF EX AF,AF' EXAF ;; EXX EXX EXX ;; XTIX EX (SP),IX XTIX ;; XTIY EX (SP),IY XTIY ;; LDI LDI LDI ;; LDIR LDIR LDIR ;; LDD LDD LDD ;; LDDR LDDR LDDR ;; CCI CPI CCI ;; CCIR CPIR CCIR ;; CCD CPD CCD ;; CCDR CPDR CCDR ;; ADDX D ADD (IX+D) ADD D(IX) ;; ADDY D ADD (IY+D) ADD D(IY) ;; ADCX D ADC (IX+D) ADC D(IX) ;; ADCY D ADC (IY+D) ADC D(IY) ;; SUBX D SUB (IX+D) SUB D(IX) ;; SUBY D SUB (IY+D) SUB D(IY) ;; SBCX D SBC (IX+D) SBB D(IX) ;; SBCY D SBC (IY+D) SBB D(IY) ;; ANDX D AND (IX+D) ANA D(IX) ;; ANDY D AND (IY+D) ANA D(IY) ;; XORX D XOR (IX+D) XRA D(IX) ;; XORY D XOR (IY+D) XRA D(IY) ;; ORX D OR (IX+D) ORA D(IX) ;; ORY D OR (IY+D) ORA D(IY) ;; CMPX D CP (IX+D) CMP D(IX) ;; CMPY D CP (IY+D) CMP D(IY) ;; INRX D INC (IX+D) INR D(IX) ;; INRY D INC (IY+D) INR D(IY) ;; DCRX D INC (IX+D) INR D(IX) ;; DCRY D DEC (IY+D) DCR D(IY) ;; NEG NEG NEG ;; IM0 IM0 IM0 ;; IM1 IM1 IM1 ;; IM2 IM2 IM2 ;; DADC RR ADC HL,RR DADC RR ;; DSBC RR SBC HL,RR DSBC RR ;; DADX RR ADD IX,RR DADX RR ;; DADY RR ADD IY,RR DADY RR ;; INXIX INC IX INX IX ;; INXIY INC IY INX IY ;; DCXIX DEC IX DCX IX ;; DCXIY DEC IY DCX IY ;; BIT B,R BIT B,R BIT B,R ;; SETB B,R SET B,R SET B,R ;; RES B,R RES B,R RES B,R ;; BITX B,D BIT B,(IX+D) BIT B,D(IX) ;; BITY B,D BIT B,(IY+D) BIT B,D(IY) ;; SETX B,D SET B,(IX+D) SET B,D(IX) ;; SETY B,D SET B,(IY+D) SET B,D(IY) ;; RESX B,D RES B,(IX+D) RES B,D(IX) ;; RESY B,D RES B,(IY+D) RES B,D(IY) ;; JR ADDR JR ADDR-$ JMPR ADDR ;; JRC ADDR JR C,ADDR-$ JRC ADDR ;; JRNC ADDR JR NC,ADDR-$ JRNC ADDR ;; JRZ ADDR JR Z,ADDR-$ JRC ADDR ;; JRNZ ADDR JR NZ,ADDR-$ JRNZ ADDR ;; DJNZ ADDR DJNZ ADDR-$ DJNZ ADDR ;; PCIX JMP (IX) PCIX ;; PCIY JMP (IY) PCIY ;; RETI RETI RETI ;; RETN RETN RETN ;; INP R IN R,(C) INP R ;; OUTP R OUT (C),R OUTP R ;; INI INI INI ;; INIR INIR INIR ;; OUTI OTI OUTI ;; OUTIR OTIR OUTIR ;; IND IND IND ;; INDR INDR INDR ;; OUTD OTD OUTD ;; OUTDR OTDR OUTDR ;; RLCR R RLC R RLCR R ;; RLCX D RLC (IX+D) RLCR D(IX) ;; RLCY D RLC (IY+D) RLCR D(IY) ;; RALR R RL R RALR R ;; RALX D RL (IX+D) RALR D(IX) ;; RALY D RL (IY+D) RALR D(IY) ;; RRCR R RRC R RRCR R ;; RRCX D RRC (IX+D) RRCR D(IX) ;; RRCY D RRC (IY+D) RRCR D(IY) ;; RARR R RR R RARR R ;; RARX D RR (IX+D) RARR D(IX) ;; RARY D RR (IY+D) RARR D(IY) ;; SLAR R SLA R SLAR R ;; SLAX D SLA (IX+D) SLAR D(IX) ;; SLAY D SLA (IY+D) SLAR D(IY) ;; SRAR R SRA R SRAR R ;; SRAX D SRA (IX+D) SRAR D(IX) ;; SRAY D SRA (IY+D) SRAR D(IY) ;; SRLR R SRL R SRLR R ;; SRLX D SRL (IX+D) SRLR D(IX) ;; SRLY D SRL (IY+D) SRLR D(IY) ;; RLD RLD RLD ;; RRD RRD RRD ;; ;;****************************************************************** ;; ;; @CHK MACRO USED FOR CHECKING 8 BIT DISPLACMENTS ;; @CHK MACRO ?DD ;; USED FOR CHECKING RANGE OF 8-BIT DISP.S IF (?DD GT 07FH) AND (?DD LT 0FF80H) 'DISPLACEMENT RANGE ERROR - Z80 LIB' ENDIF ENDM @CHECK MACRO ?N ?DD SET ?N-$-2 IF (?DD GT 07FH) AND (?DD LT 0FF80H) 'RANGE ERROR - Z80 LIB' ?DD SET 0FEH ENDIF ENDM ;; ;; LDX MACRO ?R,?D ;;LOAD REG R FROM MEMORY AT (IX+D) @CHK ?D DB 0DDH,?R*8+46H,?D ENDM LDY MACRO ?R,?D ;;LOAD REG R FROM MEMORY AT (IY+D) @CHK ?D DB 0FDH,?R*8+46H,?D ENDM STX MACRO ?R,?D ;;STORE REG R AT MEMORY (IX+D) @CHK ?D DB 0DDH,70H+?R,?D ENDM STY MACRO ?R,?D ;;STORE REG R AT MEMORY (IY+D) @CHK ?D DB 0FDH,70H+?R,?D ENDM MVIX MACRO ?N,?D ;;MOV #N (8 BITS) INTO MEMORY AT (IX+D) @CHK ?D DB 0DDH,36H,?D,?N ENDM MVIY MACRO ?N,?D ;;MOV #N (8 BITS) INTO MEMORY AT (IY+D) @CHK ?D DB 0FDH,36H,?D,?N ENDM LDAI MACRO ;;LOAD ACC WITH REG I (INTERRUPT VECTOR) DB 0EDH,57H ENDM LDAR MACRO ;;LOAD ACC WITH THE REFRESH REG DB 0EDH,5FH ENDM STAI MACRO ;;STORE ACC INTO REG I DB 0EDH,47H ENDM STAR MACRO ;;STORE ACC INTO THE REFRESH REG DB 0EDH,4FH ENDM LXIX MACRO ?NNNN ;;LOAD IMMEDIATE (LDI) IX WITH #NNNN (16 BITS) DB 0DDH,21H DW ?NNNN ENDM LXIY MACRO ?NNNN ;;LDI REG PAIR IY WITH #NNNN (16 BITS) DB 0FDH,21H DW ?NNNN ENDM LDED MACRO ?NNNN ;;LOAD DE WITH CONTENTS OF MEMORY AT NNNN DB 0EDH,5BH ;; (E)=((NN)(NN)) DW ?NNNN ;; (D)=((NN)(NN+1)) ENDM LBCD MACRO ?NNNN ;;LOAD BC WITH CONTENTS OF MEMORY AT NNNN DB 0EDH,4BH DW ?NNNN ENDM LSPD MACRO ?NNNN ;;LOAD STACK POINTER WITH CONTENTS OF MEMORY DB 0EDH,07BH ;; AT NNNN DW ?NNNN ENDM LIXD MACRO ?NNNN ;;LOAD IX WITH CONTENTS OF MEMORY AT NNNN DB 0DDH,2AH DW ?NNNN ENDM LIYD MACRO ?NNNN ;;LOAD IY WITH CONTENTS OF MEMORY AT NNNN DB 0FDH,2AH DW ?NNNN ENDM SBCD MACRO ?NNNN ;;STORE BC IN MEMORY LOCATION NNNN DB 0EDH,43H ;; ((NN)(NN))=(C) DW ?NNNN ;; ((NN)(NN+1))=(B) ENDM SDED MACRO ?NNNN ;;STORE DE IN MEMORY LOC NNNN DB 0EDH,53H DW ?NNNN ENDM SSPD MACRO ?NNNN ;;STORE STACK POINTER IN MEMORY LOC NNNN DB 0EDH,73H DW ?NNNN ENDM SIXD MACRO ?NNNN ;;STORE IX IN MEMORY LOC NNNN DB 0DDH,22H DW ?NNNN ENDM SIYD MACRO ?NNNN ;;STORE IY IN MEMORY LOC NNNN DB 0FDH,22H DW ?NNNN ENDM SPIX MACRO ;;MOV IX INTO STACK POINTER (SP) DB 0DDH,0F9H ENDM SPIY MACRO ;;MOV IY INTO STACK POINTER (SP) DB 0FDH,0F9H ENDM PUSHIX MACRO ;;PUSH IX ONTO STACK DB 0DDH,0E5H ENDM PUSHIY MACRO ;;PUSH IY ONTO STACK DB 0FDH,0E5H ENDM POPIX MACRO ;;POP IX OFF STACK DB 0DDH,0E1H ENDM POPIY MACRO ;;POP IY OFF STACK DB 0FDH,0E1H ENDM EXAF MACRO ;;EXCHANGE AF AND AF' REGS DB 08H ENDM EXX MACRO ;;EXCHANGE BC AND BC' DB 0D9H ;; DE AND DE' ;; HL AND HL' ENDM XTIX MACRO ;;EXCHANGE TOP OF STACK WITH IX DB 0DDH,0E3H ENDM XTIY MACRO ;;EXCHANGE TOP OF STACK WITH IY DB 0FDH,0E3H ENDM LDI MACRO ;;LOAD MEMORY AT (H,L) TO MEMORY AT (D,E) DB 0EDH,0A0H ;; INC D,E INC H,L DEC B,C ENDM LDIR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0B0H ENDM LDD MACRO ;;LOAD MEMORY AT (H,L) TO MEMORY AT (D,E) DB 0EDH,0A8H ;; DEC H,L DEC D,E DEC B,C ENDM LDDR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0B8H ENDM CCI MACRO ;;COMPARE ACC WITH MEMORY AT (H,L) DB 0EDH,0A1H ;; INC H,L DEC B,C (P/V=0 IF B=0) ;; (ACC=(H,L) IF Z=0) ENDM CCIR MACRO ;;AS ABOVE REPEAT UNTIL (B,C) = 0 OR ;; (A) = (H,L) DB 0EDH,0B1H ENDM CCD MACRO ;;COMPARE ACC WITH MEMORY AT (H,L) DB 0EDH,0A9H ;; DEC H,L DEC B,C ENDM CCDR MACRO ;;AS ABOVE REPEAT UNTIL (BC) = 0 OR ;; (A) = (H,L) DB 0EDH,0B9H ENDM ADDX MACRO ?D ;;ACC=ACC+CONTENTS OF MEMORY AT (IX+D) @CHK ?D ;; ACC=ACC+((IX+D)) DB 0DDH,86H,?D ENDM ADDY MACRO ?D ;;ACC=ACC+((IY+D)) @CHK ?D DB 0FDH,86H,?D ENDM ADCX MACRO ?D ;;ACC=ACC+((IX+D))+CARRY @CHK ?D DB 0DDH,8EH,?D ENDM ADCY MACRO ?D ;;ACC=ACC+((IY+D))+CARRY @CHK ?D DB 0FDH,8EH,?D ENDM SUBX MACRO ?D ;;ACC=ACC-((IX+D)) @CHK ?D DB 0DDH,96H,?D ENDM SUBY MACRO ?D ;;ACC=ACC-((IY+D)) @CHK ?D DB 0FDH,96H,?D ENDM SBCX MACRO ?D ;;ACC=ACC-((IX+D))-BORROW @CHK ?D DB 0DDH,9EH,?D ENDM SBCY MACRO ?D ;;ACC=ACC-((IY+D))-BORROW @CHK ?D DB 0FDH,9EH,?D ENDM ANDX MACRO ?D ;;AND ACC WITH CONTENTS OF MEMORY (IX+D) @CHK ?D DB 0DDH,0A6H,?D ENDM ANDY MACRO ?D ;;AND ACC WITH CONTENTS OF MEMORY (IY+D) @CHK ?D DB 0FDH,0A6H,?D ENDM XORX MACRO ?D ;;EXCLUSIVE OR THE ACC WITH CONTEMTS OF @CHK ?D ;; MEMORY AT (IX+D) DB 0DDH,0AEH,?D ENDM XORY MACRO ?D ;;XOR ACC WITH CONTENTS OF MEMORY (IY+D) @CHK ?D DB 0FDH,0AEH,?D ENDM ORX MACRO ?D ;;OR THE ACC WITH CONTENTS OF MEMORY (IX+D) @CHK ?D DB 0DDH,0B6H,?D ENDM ORY MACRO ?D ;;OR ACC WITH CONTENTS OF MEMORY (IY+D) @CHK ?D DB 0FDH,0B6H,?D ENDM CMPX MACRO ?D ;;COMPARE THE ACC WITH CONTENTS OF MEMORY @CHK ?D ;; AT LOC (IX+D) DB 0DDH,0BEH,?D ENDM CMPY MACRO ?D ;;CMP ACC WITH CONTENTS OF MEMORY (IY+D) @CHK ?D DB 0FDH,0BEH,?D ENDM INRX MACRO ?D ;;INC MEMORY CONTENTS AT (IX+D) @CHK ?D DB 0DDH,34H,?D ENDM INRY MACRO ?D ;;INC MEMORY CONTENTS AT (IY+D) @CHK ?D DB 0FDH,34H,?D ENDM DCRX MACRO ?D ;;DEC MEMORY CONTENTS AT (IX+D) @CHK ?D DB 0DDH,035H,?D ENDM DCRY MACRO ?D ;;DEC MEMORY CONTENTS AT (IY+D) @CHK ?D DB 0FDH,35H,?D ENDM NEG MACRO ;;NEGATE ACC (2'S COMPLEMENT) DB 0EDH,44H ENDM IM0 MACRO ;;SET INTERRUPT MODE #0 DB 0EDH,46H ENDM IM1 MACRO ;;SET INTERRUPT MODE #1 (RESTART 0038H) DB 0EDH,56H ENDM IM2 MACRO ;;SET INTERRUPT MODE #2 DB 0EDH,5EH ;; RESTART AT LOC (INT REG I)(DEV SUPPLIED) ENDM BC EQU 0 DE EQU 2 HL EQU 4 IX EQU 4 IY EQU 4 DADC MACRO ?R ;;DOUBLE ADD (H,L)=(H,L)+(RP)+CARRY DB 0EDH,?R*8+4AH ENDM DSBC MACRO ?R ;;DOUBLE SUB (H,L)=(H,L)-(RP)-CARRY DB 0EDH,?R*8+42H ENDM DADX MACRO ?R ;;DOUBLE ADD (IX)=(IX)+(RP) DB 0DDH,?R*8+09H ENDM DADY MACRO ?R ;;DOUBLE ADD (IY)=(IY)+(RP) DB 0FDH,?R*8+09H ENDM INXIX MACRO ;;INC (IX) DB 0DDH,23H ENDM INXIY MACRO ;;INC (IY) DB 0FDH,23H ENDM DCXIX MACRO ;;DEC (IX) DB 0DDH,2BH ENDM DCXIY MACRO ;;DEC (IY) DB 0FDH,2BH ENDM BIT MACRO ?N,?R ;;TEST BIT N IN REG R DB 0CBH,?N*8+?R+40H ENDM SETB MACRO ?N,?R ;;SET BIT N IN REG R DB 0CBH,?N*8+?R+0C0H ENDM RES MACRO ?N,?R ;;RESET BIT N IN REG R DB 0CBH,?N*8+?R+80H ENDM BITX MACRO ?N,?D ;;TEST BIT N IN MEMORY LOC (IX+D) @CHK ?D DB 0DDH,0CBH,?D,?N*8+46H ENDM BITY MACRO ?N,?D ;;TEST BIT N IN MEMORY LOC (IY+D) @CHK ?D DB 0FDH,0CBH,?D,?N*8+46H ENDM SETX MACRO ?N,?D ;;SET BIT N IN MEMORY LOC (IX+D) @CHK ?D DB 0DDH,0CBH,?D,?N*8+0C6H ENDM SETY MACRO ?N,?D ;;SET BIT N IN MEMORY LOC (IY+D) @CHK ?D DB 0FDH,0CBH,?D,?N*8+0C6H ENDM RESX MACRO ?N,?D ;;RESET BIT N IN MEMORY LOC (IX+D) @CHK ?D DB 0DDH,0CBH,?D,?N*8+86H ENDM RESY MACRO ?N,?D ;;RESET BIT N IN MEMORY LOC (IY+D) @CHK ?D DB 0FDH,0CBH,?D,?N*8+86H ENDM JR MACRO ?N ;;JUMP RELATIVE @CHECK ?N DB 18H,?DD ENDM JMPR MACRO ?N ;;JUMP RELATIVE AS ABOVE @CHECK ?N DB 18H,?DD ENDM JRC MACRO ?N ;;JUMP RELATIVE ON CARRY @CHECK ?N DB 38H,?DD ENDM JRNC MACRO ?N ;;JUMP RELATIVE ON NOT CARRY @CHECK ?N DB 30H,?DD ENDM JRZ MACRO ?N ;;JUMP RELATIVE ON ZERO @CHECK ?N DB 28H,?DD ENDM JRNZ MACRO ?N ;;JUMP RELATIVE ON NOT ZERO @CHECK ?N DB 20H,?DD ENDM DJNZ MACRO ?N ;;DEC B AND JUMP RELATIVE ON B NOT ZERO @CHECK ?N DB 10H,?DD ENDM PCIX MACRO ;;MOV IX INTO PROGRAM COUNTER DB 0DDH,0E9H ENDM PCIY MACRO ;;MOV IY INTO PROGRAM COUNTER DB 0FDH,0E9H ENDM RETI MACRO ;;RETURN FROM INTERRUPT (EI NOT ENABLED) DB 0EDH,4DH ENDM RETN MACRO ;;RETURN FROM NON-MASKABLE INTERRUPT DB 0EDH,45H ENDM RETEI MACRO ;;RETURN FROM INTERRUPT (EI ENABLED) DB EI,0EDH,4DH ENDM INP MACRO ?R ;;GO TO INPUT PORT (SPECIFIED BY REG C) DB 0EDH,?R*8+40H ;; AND LOAD INTO REG R ENDM OUTP MACRO ?R ;;OUTPUT TO PORT (SPECIFIED BY REG C) DB 0EDH,?R*8+41H ;; FROM REG R ENDM INI MACRO ;;LOAD MEMORY (H,L) WITH INPUT PORT DB 0EDH,0A2H ;; (SPECIFIED BY REG C) INC H,L DEC B ENDM INIR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0B2H ENDM IND MACRO ;;LOAD MEMORY (H,L) WITH INPUT PORT DB 0EDH,0AAH ;; (SPECIFIED BY REG C) DEC H,L DEC B ENDM INDR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0BAH ENDM OUTI MACRO ;;OUTPUT TO PORT (SPECIFIED BY REG C) DB 0EDH,0A3H ;; FROM MEMORY (H,L) INC H,L DEC B ENDM OUTIR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0B3H ENDM OUTD MACRO ;;OUTPUT TO PORT (SPECIFIED BY REG C) DB 0EDH,0ABH ;; FROM MEMORY (H,L) DEC H,L DEC B ENDM OUTDR MACRO ;;AS ABOVE REPEAT UNTIL B=0 DB 0EDH,0BBH ENDM RLCR MACRO ?R ;;ROTATE LEFT CIRCULAR REG R DB 0CBH, 00H + ?R ENDM RLCX MACRO ?D ;;ROTATE LEFT CIRCULAR CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 06H ENDM RLCY MACRO ?D ;;ROTATE LEFT CIRCULAR CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 06H ENDM RALR MACRO ?R ;;ROTATE ARITHMETIC LEFT REG R DB 0CBH, 10H+?R ENDM RALX MACRO ?D ;;ROTATE ARITHMETIC LEFT CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 16H ENDM RALY MACRO ?D ;;ROTATE ARITHMETIC LEFT CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 16H ENDM RRCR MACRO ?R ;;ROTATE RIGHT CIRCULAR REG R DB 0CBH, 08H + ?R ENDM RRCX MACRO ?D ;;ROTATE RIGHT CIRCULAR CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 0EH ENDM RRCY MACRO ?D ;;ROTATE RIGHT CIRCULAR CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 0EH ENDM RARR MACRO ?R ;;ROTATE ARITHMETIC RIGHT REG R DB 0CBH, 18H + ?R ENDM RARX MACRO ?D ;;ROTATE ARITHMETIC RIGHT CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 1EH ENDM RARY MACRO ?D ;;ROTATE ARITHMETIC RIGHT CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 1EH ENDM SLAR MACRO ?R ;;SHIFT LEFT ARITHMETIC REG R DB 0CBH, 20H + ?R ENDM SLAX MACRO ?D ;;SHIFT LEFT ARITHMETIC CONTENTS OF MEMORY ;; AT(IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 26H ENDM SLAY MACRO ?D ;;SHIFT LEFT ARITHMETIC CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 26H ENDM SRAR MACRO ?R ;;SHIFT RIGHT ARITHMETIC REG R DB 0CBH, 28H+?R ENDM SRAX MACRO ?D ;;SHIFT RIGHT ARITHMETIC CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 2EH ENDM SRAY MACRO ?D ;;SHIFT RIGHT ARITHMETIC CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 2EH ENDM SRLR MACRO ?R ;;SHIFT RIGHT LOGICALLY REG R DB 0CBH, 38H + ?R ENDM SRLX MACRO ?D ;;SHIFT RIGHT LOGICALLY CONTENTS OF MEMORY ;; AT (IX+D) @CHK ?D DB 0DDH, 0CBH, ?D, 3EH ENDM SRLY MACRO ?D ;;SHIFT RIGHT LOGICALLY CONTENTS OF MEMORY ;; AT (IY+D) @CHK ?D DB 0FDH, 0CBH, ?D, 3EH ENDM RLD MACRO ;;ROTATE NIBBLE LEFT & RIGHT BETWEEN ACC DB 0EDH, 6FH ;; AND CONTENTS AT (H,L) ENDM RRD MACRO ;;ROTATE NIBBLE RIGHT & LEFT BETWEEN ACC DB 0EDH, 67H ;; AND CONTENTS AT (H,L) ENDM