;
; SYSLIB Module Name:  SCOMP
; Author:  Richard Conn
; SYSLIB Version Number:  2.0
; Module Version Number:  1.0
; Module Entry Points:
;       COMPB           COMPBC
; Module External References:
;       None
;

;
;  SCOMP --
;       Vector Compare Routine.  Compare vector pointed to by HL with that
; pointed to by DE.  Vector is B bytes long for COMPB and BC bytes long for
; COMPBC.  On exit, Zero Flag Set indicates match, Carry Flag Set indicates
; that vector pointed to by HL is binarily less than vector pointed to by DE.
;       PSW is affected.  HL, DE, BC are not affected.
;

COMPB::
       PUSH    B       ; SAVE BC
       MOV     C,B     ; SET COUNT IN C
       MVI     B,0
       CALL    COMPBC  ; USE BC FOR COUNT
       POP     B       ; RESTORE BC
       RET

COMPBC::
       PUSH    H       ; SAVE REGISTERS
       PUSH    D
       PUSH    B

;  COMPARE LOOP
COMP:
       LDAX    D       ; GET BYTE PTED TO BY DE
       CMP     M       ; COMPARE TO BYTE PTED TO BY HL
       JNZ     COMPDN  ; DONE IF NO MATCH
       INX     H       ; PT TO NEXT
       INX     D
       DCX     B       ; COUNT DOWN
       MOV     A,B     ; DONE?
       ORA     C
       JNZ     COMP

;  DONE WITH COMPARE; Z=>MATCH, C=>(HL)>(DE)
COMPDN:
       JZ      CMPDN   ; DON'T COMPLEMENT CARRY IF ZERO SET
       CMC             ; C=>(HL)<(DE)
CMPDN:
       POP     B       ; RESTORE REGISTERS
       POP     D
       POP     H
       RET

       END