;
;               EXTENDED OPCODE LIBRARY
;
;
;REGISTER INDEXED ADDRESS
RXAD    MACRO   REGPR,BSADD     ;(HL)<-REGPR+BSADD
       LXI     H,BSADD
       DAD     REGPR
       ENDM
;
;REGISTER INDEXED LOAD
RXLD    MACRO   REG,REGPR,BSADD ;REG<-(REGPR+BSADD)
       RXAD    REGPR,BSADD
       MOV     REG,M
       ENDM
;
;REGISTER INDEXED STORE
RXST    MACRO   REG,REGPR,BSADD ;(REGPR+BSADD)<-REG
       RXAD    REGPR,BSADD
       MOV     M,REG
       ENDM
;
;REGISTER DIRECT LOAD
RDLD    MACRO   REG,ADDR        ;REG<-(ADDR)
       LXI     H,ADDR
       MOV     REG,M
       ENDM
;
;REGISTER DIRECT STORE
RDST    MACRO   REG,ADDR
       LXI     H,ADDR
       MOV     M,REG
       ENDM
;
;REGISTER INDIRECT LOAD
LIND    MACRO   REG,ADDR        ;REG<-((ADDR))
       LHLD    ADDR
       MOV     REG,M
       ENDM
;
;REGISTER STORE INDIRECT
SIND    MACRO   REG,ADDR        ;((ADDR))<-REG
       LHLD    ADDR
       MOV     M,REG
       ENDM
;
;ADD TO ACCUMULATOR INDIRECT
ADDI    MACRO   ADDR    ;A<-A+((ADDR))
       LHLD    ADDR
       ADD     M
       ENDM
;
;SUBTRACT FROM ACCUMULATOR INDIRECT
SUBI    MACRO   ADDR    ;A<-A-((ADDR))
       LHLD    ADDR
       SUB     M
       ENDM
;
;IF REG NOT 0, THEN JUMP TO LABEL
JNZR    MACRO   REG,LABEL
       XRA     A
       CMP     REG
       JNZ     LABEL
       ENDM
;
;IF REG 0, THEN JUMP TO LABEL
JZR     MACRO   REG,LABEL
       CMP     REG
       JZ      LABEL
       ENDM
;
;(DE) STORED AT ADDRESS IN (HL)
STDM    MACRO
       MOV     M,E
       INX     H
       MOV     M,D
       ENDM
;
;SAVE ALL REGISTERS
SAVE    MACRO
       PUSH    PSW
       PUSH    B
       PUSH    D
       PUSH    H
       ENDM
;
;RESTORE ALL REGISTERS
UNSAVE  MACRO
       POP     H
       POP     D
       POP     B
       POP     PSW
       ENDM
;
;MOVE 'C' BYTES FROM (HL) TO (DE)
MOVE    MACRO   FROM,TO,NBYTES
       LOCAL   MO1
       MVI     C,NBYTES
       LXI     H,FROM
       LXI     D,TO
MO1:    MOV     A,M
       STAX    D
       INX     H
       INX     D
       DCR     C
       JNZ     MO1
       ENDM
;
;FILL REGION FROM (HL) TO (DE) WITH CHAR
FILL    MACRO   FROM,TO,CHAR
       LOCAL   FI1
       LXI     H,FROM
       LXI     D,TO
FI1:    MVI     A,CHAR
       MOV     M,A
       INX     H
       MOV     A,L
       CMP     E
       JNZ     FI1
       MOV     A,H
       CMP     D
       JNZ     FI1
       ENDM
;
;SHIFT ACCUMULATOR 1 BIT TO RIGHT
SHRT    MACRO
       RRC
       ANI     7FH
       ENDM
;
;SHIFT ACCUMULATOR 1 BIT TO LEFT
SHLT    MACRO
       RLC
       ANI     0FEH
       ENDM
;
;SHIFT ACCUMULATOR RIGHT AMT BITS INDEXED IN REG
SHRV    MACRO   REG,AMT
       LOCAL   SH1
       MVI     REG,AMT
SH1:    RRC
       ANI     7FH
       DCR     REG
       JNZ     SH1
       ENDM
;
;SHIFT ACCUMULATOR LEFT AMT BITS INDEXED IN REG
SHLV    MACRO   REG,AMT
       LOCAL   SH1
       MVI     REG,AMT
SH1:    RLC
       ANI     0FEH
       DCR     REG
       JNZ     SH1
       ENDM
;