mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-21 10:03:09 +00:00
132 lines
1.9 KiB
Plaintext
132 lines
1.9 KiB
Plaintext
PAGE
|
|
SBTTL "--- 0-OPS ---"
|
|
|
|
; -----
|
|
; RTRUE
|
|
; -----
|
|
|
|
; Simulate a RETURN 1
|
|
|
|
ZRTRUE: LDB #1
|
|
|
|
ZRT: CLRA
|
|
STD ARG1 ; SAVE VALUE HERE
|
|
JMP ZRET
|
|
|
|
; ------
|
|
; RFALSE
|
|
; ------
|
|
|
|
; Simulate a RETURN 0
|
|
|
|
ZRFALS: CLRB
|
|
BRA ZRT
|
|
|
|
; ------
|
|
; PRINTI
|
|
; ------
|
|
|
|
; Print the Z-string immediately following the opcode
|
|
|
|
ZPRI: LDA ZPCH ; MOVE ZPC INTO MPC
|
|
STA MPCH
|
|
LDD ZPCM
|
|
STD MPCM
|
|
CLR MPCFLG ; ZERO MPC FLAG
|
|
|
|
JSR PZSTR ; PRINT THE STRING AT [MPC]
|
|
|
|
LDA MPCH ; UPDATE ZPC FROM MPC
|
|
STA ZPCH
|
|
LDD MPCM
|
|
STD ZPCM
|
|
LDA MPCFLG ; ALSO UPDATE FLAG
|
|
STA ZPCFLG
|
|
LDD MPCPNT ; AND PAGE POINTER
|
|
STD ZPCPNT
|
|
|
|
; FALL THROUGH TO ...
|
|
|
|
; ----
|
|
; NOOP
|
|
; ----
|
|
|
|
ZNOOP: RTS
|
|
|
|
; ------
|
|
; PRINTR
|
|
; ------
|
|
|
|
; Execute a PRINTI, followed by CRLF and RTRUE
|
|
|
|
ZPRR: BSR ZPRI
|
|
JSR ZCRLF
|
|
BRA ZRTRUE
|
|
|
|
; ------
|
|
; RSTACK
|
|
; ------
|
|
|
|
; Execute a RETURN, with CALL value on top of the stack
|
|
|
|
ZRSTAK: JSR POPSTK
|
|
STD ARG1 ; TOS WAS LEFT IN [D]
|
|
JMP ZRET
|
|
|
|
; ------
|
|
; VERIFY
|
|
; ------
|
|
|
|
; Verify the game code
|
|
|
|
ZVER: JSR VERNUM ; DISPLAY ZIP VERSION CODE
|
|
LDD ZCODE+ZLENTH ; GET LENGTH OF Z-CODE
|
|
STD ARG2 ; IN WORDS
|
|
|
|
; CLEAR VARIABLES
|
|
|
|
CLRA
|
|
CLRB
|
|
STD ARG1
|
|
STD ARG3 ; BIT 17 OF Z-CODE LENGTH
|
|
STD TEMP ; BYTE COUNT
|
|
|
|
; CONVERT Z-CODE LENGTH TO BYTES
|
|
|
|
ASL ARG2+1 ; BOTTOM 8 BITS
|
|
ROL ARG2 ; MIDDLE 8 BITS
|
|
ROL ARG3+1 ; 17TH BIT OF LENGTH
|
|
|
|
LDA #$40 ; 1ST 64 BYTES
|
|
STA TEMP+1 ; ARE NOT CHECKED
|
|
JSR SETWRD ; [TEMP] POINTS TO FIRST BYTE
|
|
|
|
LDA #ARG3 ; PATCH [GETBYT] ROUTINE
|
|
STA PATCH ; SO PRELOAD WILL BE READ FROM DISK
|
|
|
|
VSUM: JSR GETBYT ; GET A BYTE
|
|
CLRB ; CLEAR CARRY
|
|
ADCA ARG1+1 ; ADD TO SUM
|
|
STA ARG1+1
|
|
BCC VSUM0
|
|
INC ARG1
|
|
|
|
VSUM0: LDD MPCM ; END OF GAME YET?
|
|
CMPD ARG2
|
|
BNE VSUM
|
|
|
|
LDA MPCH ; ALSO CHECK TOP BIT
|
|
CMPA ARG3+1
|
|
BNE VSUM
|
|
|
|
LDA #ZPURE
|
|
STA PATCH ; UNPATCH [GETBYT]
|
|
|
|
LDD ZCODE+ZCHKSM ; GET CHECKSUM
|
|
CMPD ARG1 ; SAME AS CALCULATED?
|
|
LBEQ PREDS ; YES, PREDICATE SUCCEEDS
|
|
JMP PREDF ; ELSE FAILURE ...
|
|
|
|
END
|
|
|