|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 3200 (0xc80) Types: TextFile Names: »SRELOP.SRC«
└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80) └─ ⟦this⟧ »SRELOP.SRC«
;STRUCTURED RELATIVE OPERATORS ; NAME SRELOP ENTRY SEQUL,SNE,SLE,SLT,SGE,SGT ; ; ;THESE ROUTINES ARE CALLED WITH THE LENGTH OF ;THE PARAMETERS IN BC, AND THE PARAMETERS ;ARE ON THE STACK IMMEDIATELY UNDERNEATH THE ;RETURN ADDRESS. THE BYTE IN THE PARAMETER OCCUPYING ;THE HIGHEST MEMORY LOCATION IS THE MOST SIGNIFICANT. ;EXPRESSIONS ARE EVALUATED A<COND>B WHERE A IS ;THE PARAMETER OCCUPYING THE HIGHER MEMORY ADDRESSES. ;THE ROUTINES REMOVE THE PARAMETERS FROM THE STACK ;WHEN THEY RETURN AND SET THE CARRY IF THE ;CONDITION IS TRUE. Z0012 EQU 6 ;SYSTEM LOCATIONS ;STRUCTURED EQUALS SEQUL: CALL Z0009 RET ;STRUCTURED NOT EQUALS SNE: CALL Z0009 CMC ;COMPLEMENT THE CARRY RET ;STRUCTURED GREATER THAN SGT: CALL Z0010 RET ;STRUCTURED LESS THAN OR EQUALS SLE: CALL Z0010 CMC ;COMPLEMENT THE CARRY RET ;STRUCTURED LESS THAN SLT: CALL Z0011 RET ;STRUCTURED GREATER THAN OR EQUALS SGE: CALL Z0011 CMC ;COMPLEMENT CARRY RET ;Z0009 EVALUATES THE EQUALS CONDITION AND SETS THE CARRY Z0009: PUSH X LXI X,Z0012 DADX S PUSH X POP H ;HL POINTS TO SECOND OPERAND DADX B ;X POINTS TO FIRST OPERAND ;COMPARE THE TWO OPERANDS BYTE BY BYTE Z0001: MOV A,0(X) INX X CCI JRNZ Z0008 JV Z0001 ;THE TWO OPERANDS ARE IDENTICAL ;CONDITION IS TRUE, CLEAN UP AND SET THE CARRY Z0014: XTIX ;RESTORE IX POP H ;GET NEW SP POP D ;GET FIRST RETURN ADDR POP B ;GET SECOND RETURN ADDR SPHL ;SET NEW STACK POINTER PUSH B ;RESTORE SECOND RETURN ADDR XCHG ;RETURN ADDR -> HL XRA A ;CLEAR ACCUMULATOR STC ;SET THE CARRY PCHL ;RETURN ;THE TWO OPERANDS ARE NOT EQUAL Z0008: DADX B ;NEW STACK POINTER ;CONDITION IS FALSE, CLEAN UP AND RESET THE CARRY Z0013: XTIX ;RESTORE IX POP H ;GET NEW SP POP D ;GET FIRST RETURN ADDR POP B ;GET SECOND RETURN ADDR SPHL ;SET NEW STACK POINTER PUSH B ;RESTORE SECOND RETURN ADDR XCHG ;RETURN ADDR -> HL XRA A ;CLEAR ACCUMULATOR PCHL ;RETURN ;Z0010 EVALUATES THE GREATER THAN CONDITION AND SETS THE CARRY Z0010: PUSH X LXI X,Z0012-1 DADX S DADX B PUSH X POP H ;HL POINTS TO SECOND OPERAND DADX B ;X POINTS TO FIRST OPERAND PUSH X ;BEGINNING OF PARAMETER LIST ;COMPARE THE TWO OPERANDS BYTE BY BYTE Z0002: MOV A,M CMP 0(X) DCX X DCX H JRC Z0004 JRNZ Z0006 DCX B XRA A ;CLEAR CARRY AND CHECK FOR THE END OF PARAMETERS CMP B JRNZ Z0002 CMP C JRNZ Z0002 ; OPERANDS ARE ACTUALLY IDENTICAL Z0006: POP X INX X JMPR Z0013 ;THE GREATER THAN CONDITION IS TRUE Z0004: POP X INX X JMPR Z0014 ;Z0011 ACTUALLY EVALUATES THE LESS THAN CONDITION AND SETS THE CARRY ; ACCORDINGLY Z0011: PUSH X LXI X,Z0012-1 DADX S DADX B PUSH X POP H ;HL POINTS TO SECOND OPERAND DADX B ;X POINTS TO FIRST OPENAND PUSH X ;BEGINNING OF PARAMETER LIST ;COMPARE THE TWO OPERANDS BYTE BY BYTE Z0003: MOV A,M CMP 0(X) DCX X DCX H JRC Z0006 JRNZ Z0004 DCX B XRA A ;CLEAR CARRY AND CHECK FOR THE END OF PARAMETERS CMP B JRNZ Z0003 CMP C JRNZ Z0003 JR Z0006 «eof»