Files
erkyrath.infocom-zcode-terps/ibm/data.ezp
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

448 lines
11 KiB
Plaintext

SUBTTL DATA - VARIABLE DEFINITION AND STORAGE
PAGE
;
; ALL DATA SAVE THE PAGE TABLE (PAGTAB) ARE DEFINED BETWEEN THE ABOVE JMP
; AND THE STARTING DESTINATION.
;
;VARIBLE DEFINITIONS:
PUBLIC START,GAMFILE,SAVFILE,GAMHNDL,SAVHNDL,HANDLE,SEEKF
PUBLIC LASTDRV,LSTDFLG,DRVFLG,LASTSAV,SSBUF,DEFDRV,CURDRV
;GTBLKS
;************************************************************************
; DO NOT MOVE THESE VARIABLES. DEFINE NOTHING ABOVE THEM. CREATE
; IS DEPENDENT UPON THIS FIXED VARIABLE SETUP FOR GAMFILE AND
; SAVFILE. EACH SHOULD TOTAL 65 CHARACTERS IN LENGTH
;************************************************************************
;
GAMFILE DB "AMFV.DAT",0,0 ; PATCHED BY CREATE
DB 55 DUP (0) ; POTENTIAL LENGTH OF FILENAME
SAVFILE DB "AMFV.SAV",0,0
DB 54 DUP (0) ; POTENTIAL LENGTH OF FILENAME
LASTSAV DB 64 DUP (0)
;
GAMESIZ DW ? ; GAME SIZE IN 512 BYTE BLOCKS
GAMHNDL DW ? ; FOR STORAGE OF FILE HANDLES
SAVHNDL DW ?
SSFILE DB "SETUP.INF",0
SSBUF DW SSLNT/2 DUP (0)
SKPDRV DB 0 ; (7n) DON'T OUTPUT DRIVE NAME
DEFDRV DB ? ; BYTE FOR DEFAULT DRIVE
CURDRV DB ? ; BYTE FOR NEW DRIVE (SAVES)
DRVFLG DB 0 ; FLAG WHETHER DRIVE SPECIFIED ON SAV
LASTDRV DB ? ; TEMPORARY STORAGE FOR SAVE AND
LSTDFLG DB ? ; RESTORE FAILURE
HANDLE DW ? ; GENERAL HANDLE FOR GTBLKS ROUTINE
SEEKF DB 1 ; FLAG FOR WHETHER OR NOT TO SEEK
PRTBUF DB ? ; (7) BUFFER FOR PRINTER OUTPUT
PUBLIC DSKDIR
DSKDIR DB 0 ;0 FOR READ, 1 FOR WRITE
; SCREEN DEFINITIONS AND ANSI STRINGS
PUBLIC SCRATR,COLFLG,SCP,RCP,SCPL,SLPP,STINIT,STRESET
PUBLIC SPINIT,STINIT,CTRESET,CLS,CLSC
CURSAV DB 0 ; (A0) IS THE CURSOR POSITION SAVED?
SCRATR DB 7 ;(7) BLACK BACKGROUND FOR DEFAULT
COLFLG DB 0 ;(7) ARE WE USING COLOR
SCPL DB 80 ; WIDTH OF THE SCREEN IN COLUMNS (DEFAULTS)
SLPP DB 24 ; LENGTH OF THE SCREEN IN ROWS
NONIBM DW OFFSET NOHIGH ;(A9)
DW OFFSET INVERSE ;(A9)
DW OFFSET BOLD ;(A9)
DW 0 ;(A9)
DW OFFSET NOHIGH ;(A9)
HILITES DW OFFSET NOHIGH
DW OFFSET INVERSE
DW OFFSET BOLD
DW 0
DW OFFSET ITALIC
;
NOHIGH DB 4
DB 27,'[0m'
INVERSE DB 8
DB 27,'[0m',27,'[7m'
BOLD DB 8
DB 27,'[0m',27,'[1m'
ITALIC DB 8
DB 27,'[0m',27,'[4m'
;;
COLORS DW OFFSET NORMCOL
DW OFFSET INVCOL
DW OFFSET BOLDCOL
DW 0
DW OFFSET NORMCOL
;
NORMCOL DB 12
DB 27,'[0m',27,"[37;44m"
INVCOL DB 12
DB 27,'[0m',27,"[34;47m"
BOLDCOL DB 16
DB 27,'[0m',27,"[37;44m",27,'[1m'
EREOL DB 3
DB 27,'[K' ; (A0) ERASE TO EOL
SCP DB 3 ; (7) ANSI SAVE CURSOR POSITION
DB 27,'[s'
RCP DB 3 ; (7) ANSI RESTORE CURSOR POSITION
DB 27,'[u'
STINIT DB 16
DB 27,"[2J",27,"[0m",27,"[01;01H"
STRESET DB 4
DB 27,"[0m"
SPINIT DB 0
CTINIT DB 20
DB 27,"[37;44m",27,"[2J",27,"[01;01H"
CTRESET DB 0
CPINIT DB 0
CLS DB 12
DB 27,"[2J",27,"["
CLS1 DB "25;01H"
CLSC DB 20
DB 27,"[37;44m",27,"[2J",27,"["
CLS1C DB "25;01H"
;
WAIT DB 31
DB 27,"[12;28HThe story is loading..."
PUBLIC WINDOW1,COLWIN1,WINDOW0,COLWIN0,RADIX
WINDOW1 DB 8
DB 27,'[01;01H'
COLWIN1 DB 16
DB 27,'[01;01H',27,'[37;44m'
WINDOW0 DB 4
DB 27,'[0m'
COLWIN0 DB 8
DB 27,'[37;44m'
RADIX DB 10 ; THE DEFAULT RADIX FOR THE SCREEN
;SCRIPTING STUFF
PUBLIC GAMEIN,SCRHLD,SCRFLG,PRNNRDY
GAMEIN DB 0
SCRHLD DB 0 ; (7n) IS SCRIPTING TEMPORARILY OFF
SCRFLG DB 0
PRNNRDY DB " %Printer not ready: Abort or Retry? ",80H
PUBLIC RSEED1,RSEED2
;,SRHOLD,RNUM,IOCHAR
;OPRAND
RSEED1 DW ? ;SEED1 FOR RANDOM NUMBERS
RSEED2 DW ? ;SEED2 FOR RANDOM NUMBERS
RTEMP DW ? ;TEMP FOR RANDOM ROUTINE
;(LD1) RNDFLG DB ? ; (A0) RANDOM FLAG
SRHOLD DW ? ; (LD1) FOR NON RANDOM RANDOM
RNUM DW ? ; (LD1) THIS ALSO
IOCHAR DB ? ; (LD1) HOLD AL FOR A SECOND
PUBLIC RDWSTR,RDBOS,RDEOS,RDRET,RDNWDS,WRDOFF
;READ
ZTHIRD DW ? ; (A0) THIRD ZWORD REGISTER FOR ZWORD
RDWSTR DW 5 DUP(0) ; (A0) WORD STRING BUFFER FOR ZWORD
RDBOS DW 0 ;BEGINNING OF STRING POINTER
RDEOS DW 0 ;END OF STRING POINTER
RDRET DW 0 ;RETURN TABLE POINTER
RDNWDS DB 0 ;NUMBER OF WORDS READ
;PUTSTR
WRDOFF DW 0 ;OFFSET INTO WORD TABLE FOR CURRENT SET
DLYCNT DW ? ; (A0) DELAY COUNT IN 1/10THS SECONDS
PUBLIC CHRPTR,ENDBUF,BUFBIT,PREVBUF
;PUTCHR
; REDIRECTION AND BUFFERING OUTPUT
CHRPTR DW 0 ;POINTS TO NEXT CHARACTER POSITION
ENDBUF DW 0 ;POINTS JUST PAST END OF OUTPUT BUFFER (0)
CHRCNT DW 79 ; (A13) OUTPUT BUFFER DOWN COUNTER
BUFBIT DB 1 ; (A0) BUFFERED INPUT TOGGLE
PREVBUF DB 1 ; (A0) PREVIOUS BUFFERING STAT
RDIR DW 0 ; (A0) WHERE OUTPUT IS DIRECTED TO
RTABLE DW ? ; (A0) ADDRESS OF TABLE TO OUTPUT TO
RTABLE2 DW ? ; (A0) OFFSET INTO TABLE WHERE OUTPUT GOES
RDIROUT DW 0 ; (A0) NUMBER OF CHARS SENT TO TABLE
VIDFLG DB 1 ; (A10) SCRREN CONTROL 1=ON
;GETNUM
PUBLIC IRBRKS,ZORKID,ENDLOD,VOCTAB,OBJTAB,STABLE
PUBLIC GLOTAB,WRDTAB,PURBOT,ESIBKS,VWLEN,VWORDS,VOCBEG
PUBLIC OUTBUF,INBUF,RBRKS,BUFFERS,PAGES,INITTBL,SEGEND
;ZIPBGN
IRBRKS DB " ",9,13,12,".,?",0 ;INITIAL SET OF READ BREAK CHARS
ZORKID DW 0 ;UNIQUE GAME & VERSION IDENTIFIER
ENDLOD DW 0 ;ENDLOD BLOCK NUMBER
SEGEND DW 0 ; (6) ENDLOD THAT DOESN'T GET DIDDLED
VOCTAB DW 0 ;SAVE VOCABULARY TABLE POINTER
OBJTAB DW 0 ;OBJECT TABLE POINTER
GLOTAB DW 0 ;GLOBAL TABLE POINTER
WRDTAB DW 0 ;WORD TABLE POINTER
PURBOT DW 0 ;PURE CODE POINTER
ESIBKS DW 0 ;END OF SELF-INSERTING BREAK CHARACTERS
VWLEN DW 0 ;NUMBER OF BYTES IN A VOCABULARY WORD ENTRY
VWORDS DW 0 ;NUMBER OF WORD ENTRIES IN VOCABULARY
VOCBEG DW 0 ;BEGINNING OF ACTUAL VOCABULARY
OUTBUF DB 81 DUP(?) ;OUTPUT BUFFER
INBUF DB MAXLIN+2 DUP(?) ;INPUT BUFFER
RBRKS DB 32 DUP(?) ;STRING OF READ BREAK CHARACTERS
BUFFERS DW 0 ;(6) NUMBER OF 512 BYTE BUFFERS FOR PAGING
PAGES DW 0 ;SWAPPING AREA
CHRFLG DB 0
INITTBL DW 0FFFEH ; (A0)
DW 3 DUP (0)
; CMDLIN WAS CREATED FOR CHANGING CERTAIN PARAMETERS ON THE COMMAND LINE
; CURRENTLY THERE ARE SWITCHES (C,M,W). BITS ARE SET IN SCANCMD AND
; PROCESSED IN SYSINI OR SSETUP.
;
PUBLIC CMDLIN,MEMORY
CMDLIN DB 0 ; (7n) 16=IBM PARALLEL PRINTER
; (7) 8=SCROLL SET
; (7) 4=MEMORY SET
; (7) 2=COLOR SET
; (7) 1=MONOCHROME SET
MEMORY DW 0 ; (7) MEMORY SIZE SET ON CMDLIN
PUBLIC ZLOCS,ZPC1,ZPC2,ARGBLK,ZPCSEG,ZPCFLG
;RESTRT
ZLOCS DW 0 ;POINTER TO LOCALS
ZPC1 DW 0 ;ZPC BLOCK-POINTER
ZPC2 DW 0 ;ZPC BYTE-POINTER
ZPCSEG DB 0 ;(6) GAME SEGMENT WHERE ZPC IS
ZPCFLG DB 0 ; (7n) ZPC PAGE IS MUNGED?
ARGBLK DW 9 DUP(?) ; (A0) ARGUMENT BLOCK FOR EXTENDED OPERATIONS
PUBLIC CURPAG,CURBLK,CURTAB,CURSEG
;NEWZPC
CURPAG DW 0 ;CURRENT PAGE (WHERE ZPC IS) POINTER
CURBLK DW 0 ;CURRENT BLOCK, USUALLY SAME AS ZPC1
CURTAB DW 0 ;CURRENT PAGE TABLE POINTER +1
PUBLIC RTIME1,RTIME2,LPAGE,LPLOC,LPTAB,GAMESEG,SEG1,FITS
;GETPAG
RTIME1 DW 0 ;(A0)REFERENCE TIME, 1 1/2 WORDS USED
RTIME2 DW 0
LPAGE DW 0 ;LAST REFERENCED PAGE NUMBER
LPLOC DW 0 ;AND ITS CORE LOCATION
LPTAB DW 0 ;AND ITS TABLE POINTER
GAMESEG DW ? ;(6) FIRST (OR ZERO) GAME SEGMENT
SEG1 DW ? ;(6) SECOND GAMESEG (GAMESEG+64K)
CURSEG DB 0 ;(6) SEGMENT (0/1) FOR CURRENT PAGE
FITS DB 0 ;(6) FLAG FOR GAME ALL IN MEMORY
;GETBYT
LSTGET DB 0 ; (A16) HIGH BYTE FROM LAST GETBYTE
LSTGGD DB 0 ; (A16) GOODNESS OF LAST HIGH BYTE
;NXTBYT
LSTNXT DB 0 ; (A16) HIGH BYTE FROM LAST NXTBYT
LSTNGD DB 0 ; (A16) GOODNESS OF LAST HIGH BYTE
; SPLIT AND SCREEN VARS
PUBLIC SCRNFLG,SPLCOL,SPLTFLG
SCRNFLG DB 0 ; (7) WINDOW THAT WE ARE WRITING IN
SPLCOL DB 17H ; (7) GREEN BACKGROUD FOR WINDOW 1
SPLTFLG DB 0 ; (7) IS THE SCREEN SPLIT
; SOUND VARIABLES
TIMER DB ?
STABLE DW SND1,SND2 ; (A0) TABLES FOR SOUNDS 1 & 2
CLKLOW DW ?
;OPERATION TABLES: ;ZERO ARGUMENT OPERATIONS
PUBLIC ZEROOP,ONEOP,EXTOP
ZEROOP DW OPRTRU ;176
DW OPRFAL ;177
DW OPPRNI ;178
DW OPPRNR ;179
DW OPNOOP ;180
DW OPSAVE ;181
DW OPREST ;182
DW OPRSTT ;183
DW OPRSTA ;184
DW OPFSTA ;185
DW OPQUIT ;186
DW OPCRLF ;187
DW 0 ;188 OPUSL UNDER ZIP
DW OPVERI ;189
DW 0 ;190
DW 0 ;191
;ONE ARGUMENT OPERATIONS
ONEOP DW OPQZER ;128
DW OPQNEX ;129
DW OPQFIR ;130
DW OPLOC ;131
DW OPPTSI ;132
DW OPINC ;133
DW OPDEC ;134
DW OPPRNB ;135
DW OPCALL1 ;136
DW OPREMO ;137
DW OPPRND ;138
DW OPRETU ;139
DW OPJUMP ;140
DW OPPRIN ;141
DW OPVALU ;142
DW OPBCOM ;143
;TWO ARGUMENT AND EXTENDED ARGUMENT OPERATIONS
EXTOP DW 0 ;0
DW OPQEQU ;1
DW OPQLES ;2
DW OPQGRT ;3
DW OPQDLE ;4
DW OPQIGR ;5
DW OPQIN ;6
DW OPBTST ;7
DW OPBOR ;8
DW OPBAND ;9
DW OPQFSE ;10
DW OPFSET ;11
DW OPFCLE ;12
DW OPSET ;13
DW OPMOVE ;14
DW OPGET ;15
DW OPGETB ;16
DW OPGETP ;17
DW OPGTPT ;18
DW OPNEXT ;19
DW OPADD ;20
DW OPSUB ;21
DW OPMUL ;22
DW OPDIV ;23
DW OPMOD ;24
DW OPCALL2 ;25
DW 0 ;26
DW 0 ;27
DW 0 ;28
DW 0 ;29
DW 0 ;30
DW 0 ;31
DW OPCALL ;224
DW OPPUT ;225
DW OPPUTB ;226
DW OPPUTP ;227
DW OPREAD
;228
DW OPPRNC ;229
DW OPPRNN ;230
DW OPRAND ;231
DW OPPUSH ;232
DW OPPOP ;233
DW OPSPLT ;234
DW OPSCRN ;235
DW OPXCALL ;236
DW OPCLEAR ;237
DW OPERASE ;238
DW OPCURST ;239
DW OPCURGT ;240
DW OPHILIT ;241
DW OPBFOUT ;242
DW OPDIROU ;243
DW OPDIRIN ;244
DW OPSND ;245
DW OPINPUT ;246
DW OPINTBL ;247 (A12)
DW 0 ;248
DW 0 ;249
DW 0 ;250
DW 0 ;251
DW 0 ;252
DW 0 ;253
DW 0 ;254
DW 0 ;255
;(7) COPY PROTECTION STUFF
PUBLIC COMPATS,COMP1,IBMSTR
COMPATS DW 3 ; (7) NUMBER OF STRINGS IN THE LIST
COMP1 DB 'COMPAQ Co$'
IBMSTR DB 'COPR. IBM$' ; (7) EACH STRING MUST BE 9 CHARS
DB 'Tandy Cor$' ; (7v) ADD TANDY
;(A9) ENVIORNMENT
IBMPC DB 0 ; (A9) 1=IBMPC
;MCRLF
PUBLIC SCROLL,TOPLIN,MORLIN
; (7) SCROLL IS SEEMINGLY BACKWARDS BUT TOO INTERWOVEN TO
; GO AROUND AND FIX NOW.
; 0 = IBM Compatible 100% (use windowed scrolling)
; 1 = MS-DOS, no windowed scrolling
;
SCROLL DB 1
TOPSCR DW 0
TOPLIN DW 0 ; (7) WORD FOR CH,CL FOR UPPER RIGHT
MORE DB "[MORE]",80H ; (A12)
EMORE DB 13," ",13,80H
MORLIN DW 0 ; (7) COUNT OF LINES SCROLLED WITHOUT PAUSE
;STRUCTURE AND RECORD DEFINITIONS:
;OBJECT OPERATIONS
OBJECT STRUC
FLAGS1 DW ?
FLAGS2 DW ?
FLAGS3 DW ? ; (A0) EZIP EXTENDED FLAG WORD
PARENT DW ? ; (A0) EXTEND TO WORD
SIBLING DW ? ; (A0) EXTEND TO WORD
CHILD1 DW ? ; (A0) AGAIN^^
PROPS DW ?
OBJECT ENDS
PROPID RECORD PROPNUM:6
;STRING DEFINITIONS
;STATION IDENTIFICATION
; (A10) TWO DIGIT MINOR VERSION NUMBER
PUBLIC IDSTR
IDSTR DB 80H ; PATCH OUT THIS BYTE FOR TESTING
DB "IBM/PC-DOS 2.0 Interpreter Version ",ZVERSN,ZEDIT0,ZEDIT1,0
;TERMINAL SETUP
WANTCO DB "Do you want color (Y/N)? ",80H
PUBLIC SAV0,SAV1,SAV2,SAV3,ERR1,ERR2,ERR3,ERR4,ERR5,ERR6
;SAVE/RESTORE
SAV0 DB "Insert save disk then enter file name.",0
SAV1 DB "(Default is ",80H
SAV2 DB "): ",80H
SAV3 DB "Insert game disk then strike any key to continue.",0
ERR1 DB "SAVE file not found",0
ERR3 DB "Bad file name syntax",0
ERR4 DB "Unable to access file",0
ERR5 DB "No room on diskette for SAVE file",0
ERR6 DB "Read of SAVE file failed",0
;READ
ERR2 DB "Too many words typed, discarding: ",80H
PUBLIC FTL2,FTL4,FTL5,FTL6,FTL7,FTL9
;OPNEXT/OPPUTP
FTL2 DB "No such property",0
;ZIPBGN
FTL4 DB "Wrong game or version",0
;NXTINS
FTL5 DB "Illegal operation",0
;FINDPG
FTL6 DB "No free pages",0
;GTBLKS
FTL7 DB "Game file read error",0
;SYSINI
FTL9 DB "Game file not found",0
FTL10 DB 'Unauthorized copy',0
FTL11 DB 'Wrong DOS version. Must be 2.0 or higher',0
FTL12 DB 'Insufficient memory to play game',0
FTL13 DB 'Illegal argument',0
FTL14 DB 'Screen must be 80 characters wide',0
;Fatal error header
FATHDR DB "Fatal error: ",80H
;ZSTR CHARACTER CONVERSION VECTOR
PUBLIC ZCHRS
ZCHRS DB "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
DB " 0123456789.,!?_#'"
DB '"/\-:()'
PUBLIC STK_TOP,STKBOT,ZSTK_TP
; STACK SETUP
DW 200H DUP(?)
STK_TOP LABEL WORD
STKBOT DW LSTACK DUP(?)
ZSTK_TP LABEL WORD