mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-18 21:37:26 +00:00
78 lines
1.4 KiB
Plaintext
78 lines
1.4 KiB
Plaintext
SUBTTL LOGICOPS
|
|
PAGE
|
|
|
|
;LESS?
|
|
PUBLIC OPQLES,OPQGRT,OPBTST,OPBOR,OPBCOM,OPBAND
|
|
OPQLES PROC
|
|
CMP AX,BX ;IS OPR1 LESS THAN OPR2?
|
|
JL JPT ;YES, PREDICATE TRUE
|
|
JPF: JMP PFALSE ;NO, PREDICATE FALSE
|
|
JPT: JMP PTRUE
|
|
OPQLES ENDP
|
|
|
|
;GRTR?
|
|
OPQGRT PROC
|
|
CMP AX,BX ;IS OPR1 GREATER THAN OPR2?
|
|
JG JPT ;YES, PREDICATE TRUE
|
|
JMP JPF ;NO, PREDICATE FALSE
|
|
OPQGRT ENDP
|
|
|
|
SUBTTL LOGICAL OPERATIONS
|
|
PAGE +
|
|
|
|
;BTST
|
|
OPBTST PROC
|
|
NOT AX ;TURN OFF BITS IN OPR2 THAT ARE ON IN OPR1
|
|
AND BX,AX
|
|
JE JPT ;SUCCESS IF OPR2 COMPLETELY CLEARED
|
|
JMP JPF
|
|
OPBTST ENDP
|
|
|
|
;BOR
|
|
OPBOR PROC
|
|
OR AX,BX ;LOGICAL OR
|
|
JMP PUTVAL ;RETURN THE VALUE
|
|
OPBOR ENDP
|
|
|
|
;BCOM
|
|
OPBCOM PROC
|
|
NOT AX ;LOGICAL COMPLEMENT
|
|
JMP PUTVAL ;RETURN THE VALUE
|
|
OPBCOM ENDP
|
|
|
|
;BAND
|
|
OPBAND PROC
|
|
AND AX,BX ;LOGICAL AND
|
|
JMP PUTVAL ;RETURN THE VALUE
|
|
OPBAND ENDP
|
|
|
|
SUBTTL GENERAL PREDICATES
|
|
PAGE +
|
|
|
|
PUBLIC OPQEQU,OPQZER
|
|
;EQUAL?
|
|
OPQEQU PROC
|
|
NOP ;TELL CALLER TO USE ARGUMENT BLOCK
|
|
MOV BX,ARGBLK ;GET OPR1
|
|
CMP BX,ARGBLK[2] ;IS OPR1 EQUAL TO OPR2?
|
|
JE OQE1$ ;YES
|
|
CMP AX,3 ;NO, IS THERE A THIRD OPERAND?
|
|
JL OQE2$ ;NO
|
|
CMP BX,ARGBLK[4] ;YES, IS IT EQUAL TO OPR1?
|
|
JE OQE1$ ;YES
|
|
CMP AX,4 ;NO, IS THERE A FOURTH?
|
|
JL OQE2$ ;NO
|
|
CMP BX,ARGBLK[6] ;YES, IS IT EQUAL TO OPR1?
|
|
JNE OQE2$ ;NO
|
|
OQE1$: JMP PTRUE ;PREDICATE TRUE IF EQUAL
|
|
OQE2$: JMP PFALSE ;PREDICATE FALSE IF NOT
|
|
OPQEQU ENDP
|
|
|
|
;ZERO?
|
|
OPQZER PROC
|
|
CMP AX,0 ;IS OPR ZERO?
|
|
JNE OQZ1$ ;NO, PREDICATE FALSE
|
|
JMP PTRUE ;YES, PREDICATE TRUE
|
|
OQZ1$: JMP PFALSE
|
|
OPQZER ENDP
|