mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-28 04:38:09 +00:00
155 lines
1.9 KiB
Plaintext
155 lines
1.9 KiB
Plaintext
PAGE
|
|
SBTTL "--- 1-OPS ---"
|
|
|
|
; ----
|
|
; PUSH
|
|
; ----
|
|
|
|
; PUSH [ARG1] ONTO G-STACK
|
|
|
|
GPUSH: LDX ARG1+LO
|
|
LDA ARG1+HI
|
|
JMP PSHXA
|
|
|
|
; ---
|
|
; POP
|
|
; ---
|
|
|
|
; POP Z-STACK INTO VARIABLE [ARG1]
|
|
|
|
GPOP: JSR POPVAL
|
|
JMP DOPUT
|
|
|
|
; -----
|
|
; VALUE
|
|
; -----
|
|
|
|
; RETURN VALUE OF VARIABLE [ARG1]
|
|
|
|
GVALUE: LDA ARG1+LO ; GET VARIABLE ID
|
|
JSR VARGET ; PUT VALUE INTO [VALUE]
|
|
JMP PUTVAL
|
|
|
|
; ---
|
|
; INC
|
|
; ---
|
|
|
|
; INCREMENT VARIABLE [ARG1]
|
|
|
|
GINC: LDA ARG1+LO
|
|
JSR VARGET
|
|
JSR INCVAL
|
|
JMP DOPUT
|
|
|
|
; ---
|
|
; DEC
|
|
; ---
|
|
|
|
; DECREMENT VARIABLE [ARG1]
|
|
|
|
GDEC: LDA ARG1+LO
|
|
JSR VARGET
|
|
JSR DECVAL
|
|
|
|
DOPUT: LDA ARG1+LO
|
|
JMP VARPUT
|
|
|
|
; -----
|
|
; ZERO?
|
|
; -----
|
|
|
|
; [ARG1] = 0 ?
|
|
|
|
GZEROP: LDA ARG1+LO
|
|
ORA ARG1+HI
|
|
BEQ PYES
|
|
JMP PREDF
|
|
|
|
PYES: JMP PREDS
|
|
|
|
; ----
|
|
; BNOT
|
|
; ----
|
|
|
|
; COMPLEMENT [ARG1]
|
|
|
|
GBNOT: LDA ARG1+LO
|
|
EOR #$FF
|
|
TAX
|
|
LDA ARG1+HI
|
|
EOR #$FF
|
|
JMP VEXIT
|
|
|
|
; ----
|
|
; JUMP
|
|
; ----
|
|
|
|
; JUMP TO G-ADDRESS [ARG1]
|
|
|
|
GJUMP: JSR A12VAL ; MOVE [ARG1] TO [VALUE]
|
|
JMP PREDB3 ; A BRANCH THAT ALWAYS SUCCEEDS
|
|
|
|
; ------
|
|
; RETURN
|
|
; ------
|
|
|
|
; RETURN FROM "CALL" WITH VALUE [ARG1]
|
|
|
|
GRET: LDA OLDGSP
|
|
STA GSP ; SYNC THE G-STACK
|
|
|
|
JSR POPVAL ; POP # LOCALS INTO [X]
|
|
TXA ; ANY LOCALS?
|
|
BEQ RET2 ; NO, SKIP
|
|
|
|
; RESTORE ALL PUSHED LOCALS
|
|
|
|
ASL A ; WORD-ALIGN # LOCALS
|
|
STA ADEX ; USE FOR INDEXING
|
|
DEC ADEX ; ZERO-ALIGN THE INDEX
|
|
|
|
RET1: JSR POPVAL ; POP LOCAL INTO [X/A] AND [VALUE]
|
|
LDX ADEX ; GET INDEX
|
|
STA LOCALS,X ; STORE MSB IN TABLE
|
|
DEX
|
|
LDA VALUE+LO ; SAME FOR LSB
|
|
STA LOCALS,X
|
|
DEX
|
|
STX ADEX ; SAVE INDEX
|
|
BPL RET1 ; LOOP TILL EMPTY
|
|
|
|
; RESTORE GPC
|
|
|
|
RET2: JSR POPVAL ; RESTORE [GPC]
|
|
|
|
;***
|
|
STX GPC0 ; DON'T FORGET THAT 17TH BIT
|
|
JSR POPVAL
|
|
;***
|
|
|
|
STX GPCL
|
|
STA GPCH
|
|
LDA #0
|
|
STA GPCFLG ; PC HAS CHANGED
|
|
|
|
JSR POPVAL
|
|
STX OLDGSP ; RESTORE OLD GSP
|
|
|
|
LDX ARG1+LO
|
|
LDA ARG1+HI
|
|
|
|
; FALL THROUGH TO ...
|
|
|
|
; -----------------
|
|
; VALUE RETURN EXIT
|
|
; -----------------
|
|
|
|
; ENTRY: VALUE IN [X/A] (LSB/MSB)
|
|
|
|
VEXIT: STX VALUE+LO
|
|
STA VALUE+HI
|
|
JMP PUTVAL
|
|
|
|
END
|
|
|