mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-26 11:52:34 +00:00
Initial commit.
This commit is contained in:
160
atari/ops0.src
Normal file
160
atari/ops0.src
Normal file
@@ -0,0 +1,160 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user