mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-11 23:43:24 +00:00
76 lines
1.6 KiB
Plaintext
76 lines
1.6 KiB
Plaintext
SUBTTL VARIABLE OPERATIONS
|
|
PAGE +
|
|
|
|
PUBLIC OPVALU,OPSET,OPPUSH,OPPOP
|
|
;VALUE (GET VALUE OF VAR)
|
|
OPVALU PROC
|
|
CALL GETVAR ;GET THE VALUE
|
|
JMP PUTVAL ;AND RETURN IT
|
|
OPVALU ENDP
|
|
|
|
;SET (VAR TO VALUE)
|
|
OPSET PROC
|
|
JMP PUTVAR ;STORE THE VALUE
|
|
OPSET ENDP
|
|
|
|
;PUSH (A VALUE ONTO THE STACK)
|
|
OPPUSH PROC
|
|
PUSHZ AX ;PUSH THE VALUE
|
|
RET
|
|
OPPUSH ENDP
|
|
|
|
;POP (A VALUE OFF THE STACK INTO VAR)
|
|
OPPOP PROC
|
|
POPZ BX ;POP A VALUE
|
|
JMP PUTVAR ;AND STORE IT
|
|
OPPOP ENDP
|
|
|
|
PUBLIC OPINC,OPDEC
|
|
;INC (INCREMENT VAR)
|
|
OPINC PROC
|
|
MOV CX,AX ;VARIABLE
|
|
CALL GETVAR ;GET VAR'S VALUE
|
|
INC AX ;INCREMENT IT
|
|
OPINC1: MOV BX,AX ;VALUE
|
|
MOV AX,CX ;VARIABLE
|
|
JMP PUTVAR ;STORE NEW VALUE
|
|
OPINC ENDP
|
|
|
|
;DEC (DECREMENT VAR)
|
|
OPDEC PROC
|
|
MOV CX,AX ;VARIABLE
|
|
CALL GETVAR ;GET VAR'S VALUE
|
|
DEC AX ;DECREMENT IT
|
|
JMP OPINC1 ;STORE NEW VALUE
|
|
OPDEC ENDP
|
|
|
|
PUBLIC OPQIGR,OPQDLE
|
|
;IGRTR? (INCREMENT VAR & TEST IF GREATER THAN VAL)
|
|
OPQIGR PROC
|
|
PUSH AX ;SAVE VARIABLE
|
|
CALL GETVAR ;GET VAR'S VALUE
|
|
INC AX ;INCREMENT IT
|
|
SUB CX,CX ;SET FLAG FALSE
|
|
CMP AX,BX ;NEW VALUE GREATER THAN VAL?
|
|
JLE OPQIG1 ;NO
|
|
OPQIG0: INC CX ;YES, CHANGE FLAG TO TRUE
|
|
OPQIG1: MOV BX,AX ;VALUE
|
|
POP AX ;RESTORE VARIABLE
|
|
CALL PUTVAR ;STORE NEW VALUE
|
|
CMP CX,0 ;TEST FLAG
|
|
JE OQI1$ ;FALSE, PREDICATE FALSE
|
|
JMP PTRUE ;ELSE, PREDICATE TRUE
|
|
OQI1$: JMP PFALSE
|
|
OPQIGR ENDP
|
|
|
|
;DLESS? (DECREMENT VAR & TEST IF LESS THAN VAL)
|
|
OPQDLE PROC
|
|
PUSH AX ;SAVE VARIABLE
|
|
CALL GETVAR ;GET VAR'S VALUE
|
|
DEC AX ;DECREMENT IT
|
|
SUB CX,CX ;SET FLAG FALSE
|
|
CMP AX,BX ;NEW VALUE LESS THAN VAL?
|
|
JGE OPQIG1 ;NO, PREDICATE FALSE
|
|
JMP OPQIG0 ;YES, PREDICATE TRUE
|
|
OPQDLE ENDP
|