mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-18 00:52:38 +00:00
161 lines
2.5 KiB
Plaintext
161 lines
2.5 KiB
Plaintext
PAGE
|
|
SBTTL "--- 0-OPS ---"
|
|
|
|
; -----
|
|
; RTRUE
|
|
; -----
|
|
|
|
; SIMULATE A "RETURN 1"
|
|
|
|
ZRTRUE: LDX #1
|
|
|
|
ZRT0: LDA #0
|
|
|
|
ZRT1: STX ARG1+LO ; GIVE TO
|
|
STA ARG1+HI ; [ARG1]
|
|
JMP ZRET ; AND DO THE RETURN
|
|
|
|
; ------
|
|
; RFALSE
|
|
; ------
|
|
|
|
; SIMULATE A "RETURN 0"
|
|
|
|
ZRFALS: LDX #0
|
|
BEQ ZRT0
|
|
|
|
; ------
|
|
; PRINTI
|
|
; ------
|
|
|
|
; PRINT Z-STRING FOLLOWING THE OPCODE
|
|
|
|
ZPRI: LDA ZPCH ; MOVE [ZPC] INTO [MPC]
|
|
STA MPCH
|
|
LDA ZPCM
|
|
STA MPCM
|
|
LDA ZPCL
|
|
STA MPCL
|
|
|
|
LDA #0
|
|
STA MPCFLG ; [MPC] NO LONGER VALID
|
|
|
|
JSR PZSTR ; PRINT THE Z-STRING AT [MPC]
|
|
|
|
LDX #5 ; COPY STATE OF [MPC]
|
|
PRIL: LDA MPC,X ; INTO [ZPC]
|
|
STA ZPC,X
|
|
DEX
|
|
BPL PRIL
|
|
RTS
|
|
|
|
; ------
|
|
; PRINTR
|
|
; ------
|
|
|
|
; DO A "PRINTI," FOLLOWED BY "CRLF" AND "RTRUE"
|
|
|
|
ZPRR: JSR ZPRI
|
|
JSR ZCRLF
|
|
JMP ZRTRUE
|
|
|
|
; ------
|
|
; RSTACK
|
|
; ------
|
|
|
|
; "RETURN" WITH VALUE ON STACK
|
|
|
|
ZRSTAK: JSR POPVAL ; GET VALUE INTO [X/A]
|
|
JMP ZRT1 ; AND GIVE IT TO "RETURN"
|
|
|
|
; ------
|
|
; VERIFY
|
|
; ------
|
|
|
|
; VERIFY GAME CODE ON DISK
|
|
|
|
ZVER: JSR VERNUM ; DISPLAY VERSION NUMBER, GET SIDE 1
|
|
|
|
LDX #3
|
|
LDA #0
|
|
ZVR: STA J+LO,X ; CLEAR [J], [K]
|
|
STA MPC,X ; [MPC] AND [MPCFLG]
|
|
DEX
|
|
BPL ZVR
|
|
|
|
LDA #64 ; POINT [MPC] TO Z-ADDRESS $00040
|
|
STA MPCL ; 1ST 64 BYTES AREN'T CHECKED
|
|
|
|
LDA #K+HI ; PATCH THE "GETBYT" ROUTINE
|
|
STA PATCH ; TO USE [K+HI]=0 INSTEAD OF [ZPURE]
|
|
|
|
LDA ZBEGIN+ZENDLD ; GET LAST BYTE OF ENDLOAD
|
|
STA I+HI ; FIRST MSB
|
|
LDA ZBEGIN+ZENDLD+1
|
|
STA I+LO ; THEN LSB
|
|
|
|
; CHECKSUM THE PRELOAD (SIDE 1)
|
|
|
|
VSUM: JSR GETBYT ; GET A Z-BYTE INTO [A]
|
|
CLC
|
|
ADC J+LO ; ADD IT TO SUM
|
|
STA J+LO ; IN [J]
|
|
BCC VSUM0
|
|
INC J+HI
|
|
|
|
VSUM0: LDA MPCL ; END OF Z-CODE YET?
|
|
CMP I+LO ; CHECK LSB
|
|
BNE VSUM
|
|
|
|
LDA MPCM ; AND MIDDLE BYTE
|
|
CMP I+HI ; (HIGH BIT NEEDN'T BE CHECKED)
|
|
BNE VSUM
|
|
|
|
; CHECKSUM "PURE" CODE (SIDE 2)
|
|
|
|
JSR SIDE2 ; PROMPT FOR SIDE 2
|
|
|
|
LDA ZBEGIN+ZLENTH ; GET MSB
|
|
STA I+HI ; AND
|
|
LDA ZBEGIN+ZLENTH+1 ; LSB OF Z-CODE LENGTH IN BYTES
|
|
ASL A ; MULTIPLY BY
|
|
STA I+LO ; TWO
|
|
ROL I+HI ; TO GET # BYTES
|
|
ROL K+LO ; IN GAME
|
|
|
|
VSUM2: JSR GETBYT ; GET A Z-BYTE INTO [A]
|
|
CLC
|
|
ADC J+LO ; ADD IT TO SUM
|
|
STA J+LO ; IN [J]
|
|
BCC VSUM3
|
|
INC J+HI
|
|
|
|
VSUM3: LDA MPCL ; END OF Z-CODE YET?
|
|
CMP I+LO ; CHECK LSB
|
|
BNE VSUM2
|
|
|
|
LDA MPCM ; MIDDLE BYTE
|
|
CMP I+HI
|
|
BNE VSUM2
|
|
|
|
LDA MPCH ; AND HIGH BIT
|
|
CMP K+LO
|
|
BNE VSUM2
|
|
|
|
LDA #ZPURE ; UNPATCH "GETBYT"
|
|
STA PATCH
|
|
|
|
LDA ZBEGIN+ZCHKSM+1 ; GET LSB OF CHECKSUM
|
|
CMP J+LO ; DOES IT MATCH?
|
|
BNE BADVER ; NO, PREDICATE FAILS
|
|
|
|
LDA ZBEGIN+ZCHKSM ; ELSE CHECK MSB
|
|
CMP J+HI ; LOOK GOOD?
|
|
BNE BADVER ; IF MATCHED,
|
|
JMP PREDS ; GAME IS OKAY
|
|
|
|
BADVER: JMP PREDF
|
|
|
|
END
|
|
|