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