2023-11-16 18:19:54 -05:00

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