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

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