;;
;;                      HD64180 MACRO LIBRARY
;;
;;   THE FOLLOWING MACROS ENABLE ASSEMBLING HD64180 INSTRUCTIONS
;;              WITH DRI COMPATIBLE MACRO ASSEMBLERS.
;;
;;                    INVOKE WITH "MACLIB H80"
;;
;;
;;
;;                          MACRO FORMATS
;;                          ----- -------
;;
;;      HD64180 Unique instructions:
;;
;;      SLP                     ; Enter SLEEP mode
;;      MLT     RR              ; 8 bit multiply with 16 bit result
;;      IN0     R,P (or IN0 P)  ; Input from internal port
;;      OUT0    P,R (or OUT0 P) ; Output to internal port
;;      OTIM                    ; Block output, increment
;;      OTIMR                   ; Block output, increment and repeat
;;      OTDM                    ; Block output, decrement
;;      OTDMR                   ; Block output, decrement and repeat
;;      TSTIO   P               ; Non destructive AND, I/O port and A
;;      TSTR    R  (or TST R)   ; Non destructive AND, reg and A
;;      TSTD    D  (or TST ID)  ; Non destructive AND, immediate data and A
;;      TSTP       (or TST M)   ; Non destructive AND, (HL) and A
;;
;;      INTEL                   HD64180/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-$        JRZ     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 127) AND (?DD LT -128)
'DISPLACEMENT RANGE ERROR - H80 LIB'
       ENDIF
       ENDM
;;
@CHKR   MACRO   ?DD
       IF (?DD GT 128) AND (?DD LT -127)
'-----OFFSET RANGE ERROR -- H80 LIB'
       ENDIF
       ENDM
;;
ERRNZ   MACRO   ?N
       IF ?N NE 00
       '----- NON-ZERO MACRO ERROR -----'
       ENDIF
       ENDM
;;
;; HD64180 orignal command support

??BC    EQU     0
??DE    EQU     1
??HL    EQU     2
??SP    EQU     3

SLP     MACRO
       DB      0EDH,76H
       ENDM

MLT     MACRO   ?R
       DB      0EDH,4CH+(??&?R AND 3) SHL 4
       ENDM

IN0     MACRO   ?R,?P
       IF      NUL ?P
       DB      0EDH,A SHL 3,?R
       ELSE
       DB      0EDH,(?R AND 7) SHL 3, ?P
       ENDIF
       ENDM

OUT0    MACRO   ?P,?R
       IF      NUL ?R
       DB      0EDH,1+A SHL 3,?P
       ELSE
       DB      0EDH,1+(?R AND 7) SHL 3,?P
       ENDIF
       ENDM

OTIM    MACRO
       DB      0EDH,83H
       ENDM

OTIMR   MACRO
       DB      0EDH,93H
       ENDM

OTDM    MACRO
       DB      0EDH,8BH
       ENDM

OTDMR   MACRO
       DB      0EDH,9BH
       ENDM

TSTIO   MACRO   ?P
       DB      0EDH,74H,?P
       ENDM

TSTR    MACRO   ?R
       DB      0EDH,4+(?R AND 7) SHL 3
       ENDM

TSTD    MACRO   ?P
       DB      0EDH,64H,?P
       ENDM

TSTP    MACRO
       DB      0EDH,34H
       ENDM

TST     MACRO   ?R
         ?D SET 0
         IRPC  ?X,?R
         ?D SET ?D+1
         ENDM
           IF ?D EQ 1
           IRPC ?X,ABCDEHLM
           ?Y SET ?X
             IF ?X EQ ?R
           EXITM
             ENDIF
           ENDM
             IF ?Y EQ ?R
             DB        0EDH,4+(?R AND 7) SHL 3
       EXITM
             ENDIF
           ENDIF
       DB      0EDH,64H,?R
       ENDM

;;
;; Standard Zilog Operation Codes
;;

JR      MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      18H,?N-$-1
       ENDM

JRC     MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      38H,?N-$-1
       ENDM

JRNC    MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      30H,?N-$-1
       ENDM

JRZ     MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      28H,?N-$-1
       ENDM

JRNZ    MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      20H,?N-$-1
       ENDM

DJNZ    MACRO   ?N
       ?D SET ?N-$-1
       @CHKR ?D
       DB      10H,?N-$-1
       ENDM
;;
;;
LDX     MACRO   ?R,?D
       @CHK    ?D
       DB      0DDH,?R*8+46H,?D
       ENDM

LDY     MACRO   ?R,?D
       @CHK    ?D
       DB      0FDH,?R*8+46H,?D
       ENDM

STX     MACRO   ?R,?D
       @CHK    ?D
       DB      0DDH,70H+?R,?D
       ENDM

STY     MACRO   ?R,?D
       @CHK    ?D
       DB      0FDH,70H+?R,?D
       ENDM

MVIX    MACRO   ?N,?D
       @CHK    ?D
       DB      0DDH,36H,?D,?N
       ENDM

MVIY    MACRO   ?N,?D
       @CHK    ?D
       DB      0FDH,36H,?D,?N
       ENDM

LDAI    MACRO
       DB      0EDH,57H
       ENDM

LDAR    MACRO
       DB      0EDH,5FH
       ENDM

STAI    MACRO
       DB      0EDH,47H
       ENDM

STAR    MACRO
       DB      0EDH,4FH
       ENDM

LXIX    MACRO   ?NNNN
       DB      0DDH,21H
       DW      ?NNNN
       ENDM

LXIY    MACRO   ?NNNN
       DB      0FDH,21H
       DW      ?NNNN
       ENDM

LDED    MACRO   ?NNNN
       DB      0EDH,5BH
       DW      ?NNNN
       ENDM

LBCD    MACRO   ?NNNN
       DB      0EDH,4BH
       DW      ?NNNN
       ENDM

LSPD    MACRO   ?NNNN
       DB      0EDH,07BH
       DW      ?NNNN
       ENDM

LIXD    MACRO   ?NNNN
       DB      0DDH,2AH
       DW      ?NNNN
       ENDM

LIYD    MACRO   ?NNNN
       DB      0FDH,2AH
       DW      ?NNNN
       ENDM

SBCD    MACRO   ?NNNN
       DB      0EDH,43H
       DW      ?NNNN
       ENDM

SDED    MACRO   ?NNNN
       DB      0EDH,53H
       DW      ?NNNN
       ENDM

SSPD    MACRO   ?NNNN
       DB      0EDH,73H
       DW      ?NNNN
       ENDM

SIXD    MACRO   ?NNNN
       DB      0DDH,22H
       DW      ?NNNN
       ENDM

SIYD    MACRO   ?NNNN
       DB      0FDH,22H
       DW      ?NNNN
       ENDM

SPIX    MACRO
       DB      0DDH,0F9H
       ENDM

SPIY    MACRO
       DB      0FDH,0F9H
       ENDM

PUSHIX  MACRO
       DB      0DDH,0E5H
       ENDM

PUSHIY  MACRO
       DB      0FDH,0E5H
       ENDM

POPIX   MACRO
       DB      0DDH,0E1H
       ENDM

POPIY   MACRO
       DB      0FDH,0E1H
       ENDM

EXAF    MACRO
       DB      08H
       ENDM

EXX     MACRO
       DB      0D9H
       ENDM

XTIX    MACRO
       DB      0DDH,0E3H
       ENDM

XTIY    MACRO
       DB      0FDH,0E3H
       ENDM

LDI     MACRO
       DB      0EDH,0A0H
       ENDM

LDIR    MACRO
       DB      0EDH,0B0H
       ENDM

LDD     MACRO
       DB      0EDH,0A8H
       ENDM

LDDR    MACRO
       DB      0EDH,0B8H
       ENDM

CCI     MACRO
       DB      0EDH,0A1H
       ENDM

CCIR    MACRO
       DB      0EDH,0B1H
       ENDM

CCD     MACRO
       DB      0EDH,0A9H
       ENDM

CCDR    MACRO
       DB      0EDH,0B9H
       ENDM

ADDX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,86H,?D
       ENDM

ADDY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,86H,?D
       ENDM

ADCX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,8EH,?D
       ENDM

ADCY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,8EH,?D
       ENDM

SUBX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,96H,?D
       ENDM

SUBY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,96H,?D
       ENDM

SBCX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,9EH,?D
       ENDM

SBCY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,9EH,?D
       ENDM

ANDX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,0A6H,?D
       ENDM

ANDY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,0A6H,?D
       ENDM

XORX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,0AEH,?D
       ENDM

XORY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,0AEH,?D
       ENDM

ORX     MACRO   ?D
       @CHK    ?D
       DB      0DDH,0B6H,?D
       ENDM

ORY     MACRO   ?D
       @CHK    ?D
       DB      0FDH,0B6H,?D
       ENDM

CMPX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,0BEH,?D
       ENDM

CMPY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,0BEH,?D
       ENDM

INRX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,34H,?D
       ENDM

INRY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,34H,?D
       ENDM

DCRX    MACRO   ?D
       @CHK    ?D
       DB      0DDH,035H,?D
       ENDM

DCRY    MACRO   ?D
       @CHK    ?D
       DB      0FDH,35H,?D
       ENDM

NEG     MACRO
       DB      0EDH,44H
       ENDM

IM0     MACRO
       DB      0EDH,46H
       ENDM

IM1     MACRO
       DB      0EDH,56H
       ENDM

IM2     MACRO
       DB      0EDH,5EH
       ENDM


?BC     EQU     0
?DE     EQU     2
?HL     EQU     4
?IX     EQU     4
?IY     EQU     4
?SP     EQU     6

DADC    MACRO   ?R
       DB      0EDH,?&?R*8+4AH
       ENDM

DSBC    MACRO   ?R
       DB      0EDH,?&?R*8+42H
       ENDM

DADX    MACRO   ?R
       DB      0DDH,?&?R*8+09H
       ENDM

DADY    MACRO   ?R
       DB      0FDH,?&?R*8+09H
       ENDM

INXIX   MACRO
       DB      0DDH,23H
       ENDM

INXIY   MACRO
       DB      0FDH,23H
       ENDM

DCXIX   MACRO
       DB      0DDH,2BH
       ENDM

DCXIY   MACRO
       DB      0FDH,2BH
       ENDM

BIT     MACRO   ?N,?R
       DB      0CBH,?N*8+?R+40H
       ENDM

SETB    MACRO   ?N,?R
       DB      0CBH,?N*8+?R+0C0H
       ENDM

RES     MACRO   ?N,?R
       DB      0CBH,?N*8+?R+80H
       ENDM

BITX    MACRO   ?N,?D
       @CHK    ?D
       DB      0DDH,0CBH,?D,?N*8+46H
       ENDM

BITY    MACRO   ?N,?D
       @CHK    ?D
       DB      0FDH,0CBH,?D,?N*8+46H
       ENDM

SETX    MACRO   ?N,?D
       @CHK    ?D
       DB      0DDH,0CBH,?D,?N*8+0C6H
       ENDM

SETY    MACRO   ?N,?D
       @CHK    ?D
       DB      0FDH,0CBH,?D,?N*8+0C6H
       ENDM

RESX    MACRO   ?N,?D
       @CHK    ?D
       DB      0DDH,0CBH,?D,?N*8+86H
       ENDM

RESY    MACRO   ?N,?D
       @CHK    ?D
       DB      0FDH,0CBH,?D,?N*8+86H
       ENDM


PCIX    MACRO
       DB      0DDH,0E9H
       ENDM

PCIY    MACRO
       DB      0FDH,0E9H
       ENDM

RETI    MACRO
       DB      0EDH,4DH
       ENDM

RETN    MACRO
       DB      0EDH,45H
       ENDM

INP     MACRO   ?R
       DB      0EDH,?R*8+40H
       ENDM

OUTP    MACRO   ?R
       DB      0EDH,?R*8+41H
       ENDM

INI     MACRO
       DB      0EDH,0A2H
       ENDM

INIR    MACRO
       DB      0EDH,0B2H
       ENDM

IND     MACRO
       DB      0EDH,0AAH
       ENDM

INDR    MACRO
       DB      0EDH,0BAH
       ENDM

OUTI    MACRO
       DB      0EDH,0A3H
       ENDM

OUTIR   MACRO
       DB      0EDH,0B3H
       ENDM

OUTD    MACRO
       DB      0EDH,0ABH
       ENDM

OUTDR   MACRO
       DB      0EDH,0BBH
       ENDM


RLCR    MACRO   ?R
       DB      0CBH, 00H + ?R
       ENDM

RLCX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 06H
       ENDM

RLCY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 06H
       ENDM

RALR    MACRO   ?R
       DB      0CBH, 10H+?R
       ENDM

RALX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 16H
       ENDM

RALY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 16H
       ENDM

RRCR    MACRO   ?R
       DB      0CBH, 08H + ?R
       ENDM

RRCX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 0EH
       ENDM

RRCY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 0EH
       ENDM

RARR    MACRO   ?R
       DB      0CBH, 18H + ?R
       ENDM

RARX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 1EH
       ENDM

RARY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 1EH
       ENDM

SLAR    MACRO   ?R
       DB      0CBH, 20H + ?R
       ENDM

SLAX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 26H
       ENDM

SLAY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 26H
       ENDM

SRAR    MACRO   ?R
       DB      0CBH, 28H+?R
       ENDM

SRAX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 2EH
       ENDM

SRAY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 2EH
       ENDM

SRLR    MACRO   ?R
       DB      0CBH, 38H + ?R
       ENDM

SRLX    MACRO   ?D
       @CHK    ?D
       DB      0DDH, 0CBH, ?D, 3EH
       ENDM

SRLY    MACRO   ?D
       @CHK    ?D
       DB      0FDH, 0CBH, ?D, 3EH
       ENDM

RLD     MACRO
       DB      0EDH, 6FH
       ENDM

RRD     MACRO
       DB      0EDH, 67H
       ENDM

;; End of H80.LIB