mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-11 23:43:24 +00:00
201 lines
6.6 KiB
Plaintext
201 lines
6.6 KiB
Plaintext
PAGE
|
|
SBTTL "--- SOFTWARE EQUATES ---"
|
|
|
|
; -------------------
|
|
; MEMORY ORGANIZATION
|
|
; -------------------
|
|
|
|
BUFFER EQU MSTART ; 256-BYTE DISK BUFFER
|
|
GSTAKL EQU MSTART+$100 ; G-STACK LSBS
|
|
GSTAKH EQU MSTART+$200 ; G-STACK MSBS
|
|
MEMMAP EQU MSTART+$300 ; ABSOLUTE MEMORY MAP
|
|
PAGMAP EQU MSTART+$400 ; PAGING BUFFER MAP (128 BYTES)
|
|
LRUMAP EQU MSTART+$480 ; LRU MAP (128 BYTES)
|
|
VLOWS EQU MSTART+$500 ; LSB PLOT TABLE (192 BYTES)
|
|
VHIGHS EQU VLOWS+$C0 ; MSB PLOT TABLE (192 BYTES)
|
|
LOCALS EQU VLOWS+$180 ; LOCAL VARIABLE STORAGE (32 BYTES)
|
|
CARGS EQU LOCALS+$20 ; CALL ARGUMENT STORAGE (32 BYTES)
|
|
CTYPES EQU CARGS+$20 ; CALL ARGUMENT LIST (16 BYTES)
|
|
GRIP EQU MSTART+$700 ; BEGINNING OF GRIP CODE
|
|
GBEGIN EQU GRIP+$1800 ; START OF PRELOAD
|
|
|
|
; -----------------
|
|
; PROGRAM CONSTANTS
|
|
; -----------------
|
|
|
|
FALSE EQU 0
|
|
TRUE EQU $FF
|
|
LO EQU 0
|
|
HI EQU 1
|
|
INTRP EQU 'B' ; INTERPRETER VERSION #
|
|
|
|
; ---------------------
|
|
; G-CODE HEADER OFFSETS
|
|
; ---------------------
|
|
|
|
GVERS EQU 0 ; (BYTE) G-MACHINE VERSION ("1")
|
|
GMODE EQU 1 ; (BYTE) MODE BYTE
|
|
GID EQU 2 ; (WORD) GAME ID
|
|
GEND EQU 4 ; (WORD) END OF G-PRELOAD
|
|
GSTART EQU 6 ; (WORD) EXECUTION START ADDRESS
|
|
GPUR EQU 8 ; (WORD) START OF PURE G-CODE
|
|
GGLOB EQU 10 ; (WORD) START OF GLOBAL VARIABLE TABLE
|
|
GSER EQU 12 ; (6 BYTES) ASCII SERIAL NUMBER
|
|
GLEN EQU 18 ; (WORD) LENGTH OF G-PROGRAM IN BYTES
|
|
GCHECK EQU 20 ; (WORD) G-CODE CHECKSUM
|
|
IVERS EQU 22 ; (WORD) INTERPRETER VERSION
|
|
|
|
; ---------------------
|
|
; I-FILE HEADER OFFSETS
|
|
; ---------------------
|
|
|
|
ILEN EQU 0 ; (WORD) I-FILE LENGTH IN BYTES
|
|
IEND EQU 2 ; (WORD) END OF I-FILE PRELOAD
|
|
ICHECK EQU 4 ; (WORD) I-FILE CHECKSUM WORD
|
|
IBLKS EQU 6 ; (BYTE) # BLOCKSETS IN FILE
|
|
IICONS EQU 7 ; (BYTE) # ICONS IN FILE
|
|
|
|
; -------------------
|
|
; ZERO-PAGE VARIABLES
|
|
; -------------------
|
|
|
|
OPCODE EQU ZSTART ; (BYTE) CURRENT OPCODE
|
|
NARGS EQU OPCODE+1 ; (BYTE) CURRENT # ARGUMENTS
|
|
ARG1 EQU OPCODE+2 ; (WORD) ARGUMENT 1 REGISTER
|
|
ARG2 EQU OPCODE+4 ; (WORD) ARGUMENT 2 REGISTER
|
|
ARG3 EQU OPCODE+6 ; (WORD) ARGUMENT 3 REGISTER
|
|
ARG4 EQU OPCODE+8 ; (WORD) ARGUMENT 4 REGISTER
|
|
ABYTE EQU OPCODE+10 ; (BYTE) X-OP ARGUMENT BYTE
|
|
ADEX EQU OPCODE+11 ; (BYTE) X-OP ARGUMENT INDEX
|
|
ADEX2 EQU OPCODE+12 ; (BYTE) "CALL" ARG-BYTE INDEX
|
|
|
|
VALUE EQU OPCODE+13 ; (WORD) VALUE RETURN REGISTER
|
|
I EQU VALUE+2 ; (WORD) GENERAL INDEX REGISTER #1
|
|
J EQU VALUE+4 ; (WORD) GENERAL INDEX REGISTER #2
|
|
K EQU VALUE+6 ; (WORD) " " " #3
|
|
|
|
GPC EQU VALUE+8 ; (WORD) G-CODE PROGRAM COUNTER
|
|
GPCL EQU GPC ; (BYTE) LSB OF GPC
|
|
GPCH EQU GPC+1 ; (BYTE) MSB OF GPC
|
|
|
|
;***
|
|
GPC0: EQU GPC+2 ; (BYTE) BIT 0 OF BYTE IS BIT 0 OF GPC
|
|
;***
|
|
|
|
GPCFLG EQU GPC+3 ; (BYTE) GPC VALIDITY FLAG
|
|
GPOINT EQU GPC+4 ; (WORD) ABSOLUTE G-MEMORY POINTER
|
|
|
|
VPC EQU GPC+6 ; (WORD) VIRTUAL MEMORY POINTER
|
|
VPCL EQU VPC ; (BYTE) LSB OF VPC
|
|
VPCH EQU VPC+1 ; (BYTE) MSB OF VPC
|
|
|
|
;***
|
|
VPC0 EQU VPC+2 ; (BYTE) LEAST SIG BIT OF VPC
|
|
;***
|
|
|
|
VPCFLG EQU VPC+3 ; (BYTE) VPC VALIDITY FLAG
|
|
VPOINT EQU VPC+4 ; (WORD) ABSOLUTE V-MEMORY POINTER
|
|
VPCSAV EQU VPC+6 ; (WORD) [VPC] SAVE REGISTER
|
|
|
|
GSP EQU VPC+8 ; (BYTE) G-STACK POINTER
|
|
OLDGSP EQU GSP+1 ; (BYTE) OLD G-STACK POINTER
|
|
|
|
GCODE EQU GSP+2 ; (BYTE) ABS 1ST PAGE OF G-PRELOAD
|
|
ICODE EQU GCODE+1 ; (WORD) ABS START ADDR OF I-PRELOAD
|
|
|
|
GPURE EQU GCODE+3 ; (BYTE) 1ST V-PAGE OF "PURE" G-CODE
|
|
ISTART EQU GPURE+1 ; (BYTE) 1ST V-PAGE OF I-FILE
|
|
IPURE EQU GPURE+2 ; (BYTE) 1ST V-PAGE OF "PURE" I-FILE
|
|
|
|
PAGE0 EQU GPURE+3 ; (BYTE) ABS 1ST PAGE OF PAGING SPACE
|
|
PMAX EQU PAGE0+1 ; (BYTE) MAXIMUM # SWAPPING PAGES
|
|
STAMP EQU PAGE0+2 ; (BYTE) LRU TIMESTAMP
|
|
LRU EQU PAGE0+3 ; (BYTE) EARLIEST TIMESTAMP
|
|
SWAP EQU PAGE0+4 ; (BYTE) LRU SWAPPING PAGE
|
|
TARGET EQU PAGE0+5 ; (BYTE) TARGET BUFFER ADDRESS
|
|
|
|
GLOBAL EQU PAGE0+6 ; (WORD) ABSOLUTE GLOBAL TABLE ADDR
|
|
BTAB EQU GLOBAL+2 ; (WORD) ABSOLUTE BLOCKSET TABLE ADDR
|
|
ITAB EQU GLOBAL+4 ; (WORD) ABSOLUTE ICON TABLE ADDR
|
|
NBLOKS EQU GLOBAL+6 ; (BYTE) # BLOCKSETS IN I-FILE
|
|
NICONS EQU GLOBAL+7 ; (BYTE) # ICONS IN I-FILE
|
|
|
|
QUOT EQU GLOBAL+8 ; (WORD) QUOTIENT REGISTER
|
|
REMAIN EQU QUOT+2 ; (WORD) REMAINDER REGISTER
|
|
MTEMP EQU QUOT+4 ; (WORD) TEMP MATH REGISTER
|
|
QSIGN EQU QUOT+6 ; (BYTE) SIGN OF QUOTIENT
|
|
RSIGN EQU QUOT+7 ; (BYTE) SIGN OF REMAINDER
|
|
MUSHFT EQU QUOT+8 ; (BYTE) MULTIPLY TEMP FOR BLOCKS
|
|
MUL EQU QUOT+9 ; (BYTE) DITTO
|
|
MUH EQU QUOT+10 ; (BYTE) DITTO
|
|
|
|
IADR1 EQU QUOT+11 ; (WORD) ABS ADDR OF ICON #1
|
|
|
|
;***
|
|
IADR10 EQU IADR1+2 ; (BYTE) SAME IDEA AS VPC0
|
|
;***
|
|
|
|
IADR2 EQU IADR1+3 ; (WORD) ABS ADDR OF ICON #2
|
|
|
|
;***
|
|
IADR20 EQU IADR1+5 ; (BYTE) SAME IDEA AS VPC0
|
|
;***
|
|
|
|
IX1 EQU IADR1+6 ; (BYTE) X-SIZE OF ICON #1
|
|
IX2 EQU IADR1+7 ; (BYTE) X-SIZE OF ICON #2
|
|
IY1 EQU IADR1+8 ; (BYTE) Y-SIZE OF ICON #1
|
|
IY2 EQU IADR1+9 ; (BYTE) Y-SIZE OF ICON #2
|
|
XDEX1 EQU IADR1+10 ; (BYTE) X-INDEX #1
|
|
XDEX2 EQU IADR1+11 ; (BYTE) X-INDEX #2
|
|
YDEX1 EQU IADR1+12 ; (BYTE) Y-INDEX #1
|
|
YDEX2 EQU IADR1+13 ; (BYTE) Y-INDEX #2
|
|
ITERS EQU IADR1+14 ; (BYTE) # ICON ITERATIONS
|
|
ITICN EQU IADR1+15 ; (BYTE) COUNTER FOR ITERATE ROUTINE
|
|
ITPNT EQU IADR1+16 ; (BYTE) COUTNER FOR ITERATE ROUTINE
|
|
XPOS EQU IADR1+17 ; (WORD) ICON X-POSITION
|
|
YPOS EQU IADR1+19 ; (WORD) ICON Y-POSITION
|
|
TOPCUT EQU IADR1+21 ; (BYTE) TEMP FOR AMOUNT TO CUT OFF TOP IN SET
|
|
; UP ROUTINE OF SHOWI
|
|
SIDCUT EQU IADR1+22 ; (BYTE) SAME AS TOPCUT FOR SIDE
|
|
IXSKIP EQU IADR1+23 ; (BYTE) AMOUNT TO ADD TO IADR1 TO GET NEXT
|
|
; BLOCK AT NEXT ROW
|
|
MDXCUT EQU IADR1+24 ; (BYTE) IF YOU DON'T UNDERSTAND, OH WELL.
|
|
|
|
;MDYCUT EQU IADR1+25 ; (BYTE) NOT SHURE THIS IS USED IN FINAL
|
|
|
|
WINDX1 EQU IADR1+26 ; (BYTE) LEFT CLIP VALUE
|
|
WINDY1 EQU WINDX1+1 ; (BYTE) RIGHT CLIP VALUE
|
|
WINDX2 EQU WINDX1+2 ; (BYTE) TOP CLIP VALUE
|
|
WINDY2 EQU WINDX1+3 ; (BYTE) BOTTOM CLIP VALUE
|
|
WINDH EQU WINDX1+4 ; (BYTE) HEIGHT OF WINDOW (WINDY2-WINDY1)
|
|
WINDW EQU WINDX1+5 ; (BYTE) WIDTH OF WINDOW (WINDX2-WINDX1)
|
|
|
|
BSET EQU WINDX1+6 ; (BYTE) CURRENT BLOCKSET ID
|
|
BSADR EQU BSET+1 ; (WORD) ABS ADDR OF CURRENT BLOCKSET
|
|
BSIZE EQU BSET+3 ; (BYTE) # BLOCKS IN CURRENT BLOCKSET
|
|
BLOCK EQU BSET+4 ; (8 BYTES) IMAGE BLOCK BUFFER
|
|
MASK EQU BSET+12 ; (8 BYTES) IMAGE MASK BUFFER
|
|
MSKFLG EQU BSET+20 ; (BYTE) FLAG FOR MASKING 00=DISABLED
|
|
TOX EQU BSET+21 ; (BYTE) X-SAVE FOR "DUMP"
|
|
XPSAV EQU BSET+22 ; (WORD) X-POSITION SAVE
|
|
XCURS EQU BSET+24 ; (BYTE) GAME CURSOR X-POS
|
|
YCURS EQU BSET+25 ; (BYTE) GAME CURSOR Y-POS
|
|
NEGATE EQU BSET+26 ; (BYTE) BLOCK NEGATE FLAG
|
|
BLKLEN EQU BSET+27 ; (BYTE) # BYTES PER BLOCK
|
|
|
|
DBLOCK EQU BSET+28 ; (BYTE) G-CODE BLOCK TO ACCESS
|
|
DBTOP EQU DBLOCK+1 ; (BYTE) MSB HOLDER FOR "GETDSK"
|
|
DBUFF EQU DBLOCK+2 ; (WORD) DISK BUFFER PAGE POINTER
|
|
SECTOR EQU DBLOCK+4 ; (WORD) SECTOR ADDRESS
|
|
|
|
;***
|
|
DCNT EQU DBLOCK+6 ; (BYTE) COUNTER FOR GROS
|
|
;***
|
|
|
|
LINE EQU DBLOCK+7 ; (WORD) TEXT LINE ADDRESS
|
|
LEN EQU LINE+2 ; (BYTE) TEXT LINE LENGTH
|
|
CURSOR EQU LINE+3 ; (BYTE) TEXT CURSOR POSITION (0-39)
|
|
CHKSUM EQU LINE+4 ; (WORD) HOLDS IMAGE CHECKSUM FOR VERIFY
|
|
END
|
|
|