mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-03-02 01:40:25 +00:00
208 lines
7.7 KiB
NASM
208 lines
7.7 KiB
NASM
PAGE
|
||
STTL "--- MEMORY ORGANIZATION ---"
|
||
|
||
|
||
TRUE EQU $FF
|
||
FALSE EQU 0
|
||
LO EQU 0
|
||
HI EQU 1
|
||
|
||
EZIP EQU $B00 ; AUTOBOOT LOCATION
|
||
|
||
; ALL THE VARIOUS BUFFERS NEEDED
|
||
|
||
IOBUFF EQU $B00 ; PAGENG BUFFER, PLACE IN SHARED MEMORY
|
||
|
||
ZSTKBL EQU $600 ; Z-STACK BOTTOM,LO (1K STACK FOR EZIP)
|
||
ZSTKTL EQU ZSTKBL+$100 ; TOP, LO
|
||
ZSTKBH EQU ZSTKBL+$200 ; BOTTOM, HI
|
||
ZSTKTH EQU ZSTKBL+$300 ; TOP, HI
|
||
|
||
NEXTPNT EQU IOBUFF+$100 ; PAGING TABLES
|
||
PREVPNT EQU NEXTPNT+$80
|
||
VPAGEH EQU PREVPNT+$80
|
||
VPAGEL EQU VPAGEH+$80
|
||
|
||
; LOCALS & BUFSAV IN BANK1 (SAME AS INTERPRETER)
|
||
|
||
LOCALS EQU $1100 ; LOCAL VARIABLE STORAGE (30 BYTES)
|
||
BUFSAV EQU LOCALS+$20 ; AUXILIARY INPUT BUFFER (80 BYTES)
|
||
XZIPSIZE EQU $3200 ; size of xzip
|
||
ZBEGIN EQU $1200+XZIPSIZE ; START OF PRELOAD
|
||
|
||
; ---------------------
|
||
; Z-CODE HEADER OFFSETS
|
||
; ---------------------
|
||
|
||
ZVERS EQU 0 ; VERSION BYTE
|
||
ZMODE EQU 1 ; MODE SELECT BYTE
|
||
ZID EQU 2 ; GAME ID WORD
|
||
ZENDLD EQU 4 ; # OF QUADWORDS ON SIDE 1 OF DISK
|
||
ZGO EQU 6 ; EXECUTION ADDRESS
|
||
ZVOCAB EQU 8 ; START OF VOCABULARY TABLE
|
||
ZOBJEC EQU 10 ; START OF OBJECT TABLE
|
||
ZGLOBA EQU 12 ; START OF GLOBAL VARIABLE TABLE
|
||
ZPURBT EQU 14 ; START OF "PURE" Z-CODE
|
||
ZSCRIP EQU 16 ; FLAG WORD
|
||
ZSERIA EQU 18 ; 3-WORD DB II SERIAL NUMBER
|
||
ZFWORD EQU 24 ; START OF FWORDS TABLE
|
||
ZLENTH EQU 26 ; LENGTH OF Z-PROGRAM IN WORDS
|
||
ZCHKSM EQU 28 ; Z-CODE CHECKSUM WORD
|
||
ZINTWD EQU 30 ; INTERPRETER ID WORD (SUPPLIED BY EZIP)
|
||
ZSCRWD EQU 32 ; SCREEN PARAMETER WORD ( " " " )
|
||
ZHWRD EQU 34 ; DISPLAY WIDTH IN PIXELS
|
||
ZVWRD EQU 36 ; DISPLAY HEIGHT IN PIXELS
|
||
ZFWRD EQU 38 ; FONT HEIGHT, FONT WIDTH
|
||
ZLMRG EQU 40 ; LEFT MARGIN IN PIXELS
|
||
ZRMRG EQU 42 ; RIGHT MARGIN IN PIXELS
|
||
ZCLRWD EQU 44 ; FORGROUND COLOR, BACKGROUND COLOR
|
||
ZTCHAR EQU 46 ; POINTER TO TBL OF TERMINATING CHARS
|
||
ZCRCNT EQU 48 ; COUNTER FOR CARRIAGE RETURNS
|
||
ZCRFUNC EQU 50 ; FUNCTION FOR CARRIAGE RETURNS
|
||
ZCHRSET EQU 52 ; POINTER TO CHAR SET TBL
|
||
|
||
; FOR FUTURE ENHANCEMENTS
|
||
ZMSETBL EQU 52 ; MOUSE TBL CHANGE WORD
|
||
ZMSEDIR EQU 54 ; DIRECTION MENU
|
||
ZMSEINV EQU 56 ; INVENTORY MENU
|
||
ZMSEVRB EQU 58 ; FREQUENT VERB MENU
|
||
ZMSEWRD EQU 60 ; FREQUENT WORD MENU
|
||
ZBUTTN EQU 62 ; BUTTON HANDLER
|
||
ZJOYST EQU 64 ; JOYSTICK HANDLER
|
||
ZBSTAT EQU 66 ; BUTTON STATUS
|
||
ZJSTAT EQU 68 ; JOYSTICK STATUS
|
||
|
||
; FONT 3 & 4 OFFSETS
|
||
|
||
FONT3T EQU 32 ; TRACK & SECTOR TO FIND
|
||
FONT3S EQU 0 ; FONT FILES ON
|
||
FONT4T EQU 33
|
||
FONT4S EQU 0
|
||
|
||
GCOUNT EQU 0 ; (WORD) # OF CHAR DEFS. IN FILE
|
||
GOFF EQU 2 ; (WORD) REFNUM OF INITIAL CHAR
|
||
GSIZE EQU 4 ; (WORD) X * Y SIZE OF CHAR
|
||
CSTART EQU 32 ; START OF CHAR DEFINITIONS
|
||
|
||
|
||
STTL "--- ZIP Z-PAGE VARIABLES ---"
|
||
|
||
|
||
OPCODE EQU ZEROPG ; (BYTE) CURRENT OPCODE
|
||
VALUE EQU OPCODE+1 ; (WORD) VALUE RETURN REGISTER
|
||
I EQU VALUE+2 ; (WORD) GEN-PURPOSE REGISTER #1
|
||
J EQU VALUE+4 ; (WORD) GEN-PURPOSE REGISTER #2
|
||
K EQU VALUE+6 ; (WORD) GEN-PURPOSE REGISTER #3
|
||
L EQU VALUE+8 ; (WORD) GEN-PURPOSE REGISTER #4
|
||
ZPC EQU VALUE+10 ; (3 BYTES) ZIP PROGRAM COUNTER
|
||
ZPCL EQU ZPC ; (BYTE) LOW 8 BITS OF [ZPC]
|
||
ZPCM EQU ZPC+1 ; (BYTE) MIDDLE 8 BITS OF [ZPC]
|
||
ZPCH EQU ZPC+2 ; (BYTE) HIGH BIT OF [ZPC]
|
||
ZPCPNT EQU ZPC+3 ; (3 BYTES) ABS POINTER TO CURRENT Z-PAGE
|
||
ZPNTL EQU ZPCPNT ; FIRST 2 BYTES = SAME AS FOR ZIP (EZIP)
|
||
ZPNTH EQU ZPCPNT+1 ; (BYTE)
|
||
ZPCBNK EQU ZPCPNT+2 ; (BYTE) INDICATES AUXILIARY MEMORY
|
||
MPC EQU ZPCPNT+3 ; (3 BYTES) MEMORY PROGRAM COUNTER
|
||
MPCL EQU MPC ; (BYTE) LOW 8 BITS OF [MPC]
|
||
MPCM EQU MPC+1 ; (BYTE) MIDDLE 8 BITS OF [MPC]
|
||
MPCH EQU MPC+2 ; (BYTE) HIGH BIT OF [MPC]
|
||
MPCPNT EQU MPC+3 ; (3 BYTES) ABS POINTER TO CURRENT M-PAGE
|
||
MPNTL EQU MPCPNT ; FIRST 2 BYTES = SAME AS FOR ZIP (EZIP)
|
||
MPNTH EQU MPCPNT+1 ; (BYTE)
|
||
MPCBNK EQU MPCPNT+2 ; (BYTE) INDICATES AUXILIARY MEMORY
|
||
ZCODE EQU MPCPNT+3 ; (BYTE) 1ST ABSOLUTE PAGE OF PRELOAD
|
||
ZPURE EQU ZCODE+1 ; (WORD) 1ST PAGE ON SIDE 2 OF DISK
|
||
GLOBAL EQU ZPURE+2 ; (WORD) GLOBAL VARIABLE POINTER
|
||
VOCAB EQU GLOBAL+2 ; (WORD) VOCAB TABLE POINTER
|
||
FWORDS EQU GLOBAL+4 ; (WORD) F-WORDS TABLE POINTER
|
||
OBJTAB EQU GLOBAL+6 ; (WORD) OBJECT TABLE POINTER
|
||
TCHARS EQU GLOBAL+8 ; (WORD) TERMINATOR CHARS TBL POINTER
|
||
|
||
; Z-STRING MANIPULATION VARIABLES
|
||
|
||
SOURCE EQU GLOBAL+10 ; (BYTE) SOURCE BUFFER POINTER
|
||
RESULT EQU SOURCE+1 ; (BYTE) RESULT TABLE POINTER
|
||
LINLEN EQU SOURCE+2 ; (BYTE) LENGTH OF CURRENT LINE
|
||
WRDLEN EQU SOURCE+3 ; (BYTE) LENGTH OF CURRENT WORD
|
||
ENTRY EQU SOURCE+4 ; (WORD) ADDR OF CURRENT RESULT ENTRY
|
||
NENTS EQU SOURCE+6 ; (WORD) # ENTRIES IN VOCAB TABLE
|
||
ESIZE EQU SOURCE+8 ; (BYTE) SIZE OF VOCAB TABLE ENTRIES
|
||
PSET EQU SOURCE+9 ; (BYTE) PERMANENT CHARSET
|
||
TSET EQU SOURCE+10 ; (BYTE) TEMPORARY CHARSET
|
||
ZCHAR EQU SOURCE+11 ; (BYTE) CURRENT Z-CHAR
|
||
OFFSET EQU SOURCE+12 ; (BYTE) F-WORD TABLE OFFSET
|
||
ZFLAG EQU SOURCE+13 ; (BYTE) Z-WORD ACCESS FLAG
|
||
ZWORD EQU SOURCE+14 ; (WORD) CURRENT Z-WORD
|
||
CONCNT EQU SOURCE+16 ; (BYTE) Z-STRING SOURCE COUNTER
|
||
CONIN EQU SOURCE+17 ; (BYTE) CONVERSION SOURCE INDEX
|
||
CONOUT EQU SOURCE+18 ; (BYTE) CONVERSION DEST INDEX
|
||
DBLOCK EQU SOURCE+19 ; (WORD) Z-BLOCK TO READ
|
||
DBUFF EQU DBLOCK+2 ; (WORD) RAM PG TO ACCESS (LSB = 0)
|
||
|
||
DIRFLG EQU DBUFF+2 ; (BYTE) OUTPUT TO SCREEN (0) TABLE (1) FLAG
|
||
DIRTBL EQU DBUFF+3 ; (WORD) CONTAINS TBLE TO STORE CHARS TO
|
||
DIRITM EQU DBUFF+5 ; (WORD) OFFSET IN OUTPUT TBL (DIRTBL)
|
||
DIRCNT EQU DBUFF+7 ; (WORD) COUNT OF CHARS IN TBL (DIRTBL)
|
||
BUFFLG EQU DBUFF+9 ; (BYTE) DISPLAY BUFFERED (0) UNBUFFERED (1)
|
||
CHRMAX EQU DBUFF+10 ; (BYTE) # CHARS CAN INPUT FROM KEYBOARD
|
||
XSIZE EQU DBUFF+11 ; (BYTE) SCREEN WIDTH FOR TESTS
|
||
|
||
RAND1 EQU XSIZE+1 ; (BYTE)
|
||
SPLITF EQU XSIZE+2 ; (BYTE) WHICH WINDOW TO WRITE IN
|
||
RDTBL1 EQU XSIZE+3 ; (WORD) READ TABLE 1 (ABSOLUTE- EZIP)
|
||
RDTBL2 EQU RDTBL1+2 ; (WORD) READ TABLE 2
|
||
LENGTH EQU RDTBL1+4 ; (BYTE) CHAR POSITION ON THE SCREEN
|
||
CHRCNT EQU LENGTH+1 ; (BYTE) CHAR POSITION IN [LBUFF]
|
||
OLDLEN EQU CHRCNT+1 ; (BYTE) OLD LINE LENGTH
|
||
OLDEND EQU OLDLEN+1 ; (BYTE) OLD LAST CHAR IN [LBUFF]
|
||
SCRIPT EQU OLDEND+1 ; (BYTE) SCRIPT ENABLE FLAG
|
||
LINCNT EQU SCRIPT+1 ; (BYTE) LINE COUNTER
|
||
IOCHAR EQU LINCNT+1 ; (BYTE) CHARACTER BUFFER
|
||
SPSTAT EQU IOCHAR+1 ; (BYTE) SPLIT SCREEN STATUS FLAG
|
||
LFROM EQU SPSTAT+1 ; (WORD) "FROM" LINE ADDRESS
|
||
LTO EQU LFROM+2 ; (WORD) "TO" LINE ADDRESS
|
||
PRLEN EQU LTO+2 ; (BYTE) SCRIPT LINE LENGTH
|
||
SECTOR EQU PRLEN+1 ; (BYTE) TARGET SECTOR
|
||
TRACK EQU SECTOR+1 ; (BYTE) TARGET TRACK
|
||
GPOSIT EQU SECTOR+2 ; (BYTE) DEFAULT SAVE POSITION
|
||
GDRIVE EQU GPOSIT+1 ; (BYTE) DEFAULT SAVE DRIVE
|
||
TPOSIT EQU GDRIVE+1 ; (BYTE) TEMP SAVE POSITION
|
||
TDRIVE EQU TPOSIT+1 ; (BYTE) TEMP SAVE DRIVE
|
||
DRIVE EQU TDRIVE+1 ; (BYTE) CURRENT DRIVE
|
||
SIDEFLG EQU DRIVE+1 ; (BYTE) =1 IF WE ARE ON SIDE 1 2 IF SIDE 2
|
||
TIMER EQU SIDEFLG+1 ; (WORD) TIMED INPUT COUNTER
|
||
ZSP EQU TIMER+2 ; (WORD)
|
||
OLDZSP EQU ZSP+2 ; (WORD)
|
||
SCREENF EQU OLDZSP+2 ; (BYTE) DIROUT FLAG FOR SCREEN OUTPUT
|
||
SCRIPTF EQU SCREENF+1 ; (BYTE) DIROUT FLAG FOR PRINTER OUTPUT
|
||
TABLEF EQU SCRIPTF+1 ; (BYTE) DIROUT FLAG FOR TABLE OUTPUT
|
||
VOCEND EQU TABLEF+1 ; (3 BYTES) HOLDS MPC IN VOCAB SEARCH
|
||
|
||
DVD EQU TABLEF+5 ; (WORD) DISK DIVIDEND
|
||
DSOR EQU TABLEF+7 ; (WORD) DISK DIVISOR
|
||
DTEMP EQU TABLEF+9 ; (WORD) DISK TEMP VARIABLE
|
||
|
||
TOP EQU DTEMP+2 ; (BYTE) HOLDS WTOP
|
||
|
||
; BANKS MUST BE IN THIS ORDER!!
|
||
BANK2 EQU DTEMP+3 ; (BYTE) TO USE HIGH MEMORY BANK 0 (X)
|
||
BANK1 EQU DTEMP+4 ; (BYTE) CONTAINS BANK1 CONFIGURATION
|
||
BANK0 EQU DTEMP+5 ; (BYTE) AND BANK0 CONFIG. SET AT COLD
|
||
|
||
NARGS EQU DTEMP+6 ; (BYTE) # ARGUMENTS
|
||
ARG1 EQU NARGS+2 ; (WORD) ARGUMENT #1
|
||
ARG2 EQU NARGS+4 ; (WORD) ARGUMENT #2
|
||
ARG3 EQU NARGS+6 ; (WORD) ARGUMENT #3
|
||
ARG4 EQU NARGS+8 ; (WORD) ARGUMENT #4
|
||
ARG5 EQU NARGS+10 ; (WORD)
|
||
ARG6 EQU NARGS+12 ; (WORD)
|
||
ARG7 EQU NARGS+14 ; (WORD)
|
||
ARG8 EQU NARGS+16 ; (WORD)
|
||
ABYTE EQU NARGS+18 ; (BYTE) X-OP ARGUMENT BYTE
|
||
BBYTE EQU NARGS+19 ; (BYTE) XCALL ARG BYTE (EZIP)
|
||
ADEX EQU NARGS+20 ; (BYTE) X-OP ARGUMENT INDEX
|
||
|
||
LASTZP EQU ADEX+1 ; CHECK FOR OVER ZERO PAGE
|
||
|
||
END
|
||
|