Files
erkyrath.infocom-zcode-terps/apple/xzip/eq.asm
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

181 lines
7.3 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
PAGE
STTL "--- MEMORY ORGANIZATION ---"
TRUE EQU $FF
FALSE EQU 0
LO EQU 0
HI EQU 1
; SEE "HARDEQ.ASM" FOR APPLE II MEMORY MAP
; ---------------------
; 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
PAGE
STTL "--- ZIP Z-PAGE VARIABLES ---"
ZEROPG EQU $56 ; FIRST FREE Z-PAGE LOCATION
OPCODE EQU ZEROPG ; (BYTE) CURRENT OPCODE
NARGS EQU OPCODE+1 ; (BYTE) # ARGUMENTS
ARG1 EQU OPCODE+2 ; (WORD) ARGUMENT #1
ARG2 EQU OPCODE+4 ; (WORD) ARGUMENT #2
ARG3 EQU OPCODE+6 ; (WORD) ARGUMENT #3
ARG4 EQU OPCODE+8 ; (WORD) ARGUMENT #4
ARG5 EQU OPCODE+10 ; (WORD)
ARG6 EQU OPCODE+12 ; (WORD)
ARG7 EQU OPCODE+14 ; (WORD)
ARG8 EQU OPCODE+16 ; (WORD)
ABYTE EQU OPCODE+18 ; (BYTE) X-OP ARGUMENT BYTE
BBYTE EQU OPCODE+19 ; (BYTE) XCALL ARG BYTE (EZIP)
ADEX EQU OPCODE+20 ; (BYTE) X-OP ARGUMENT INDEX
VALUE EQU OPCODE+21 ; (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 ;ZSP+4 ; (3 BYTES) ZIP PROGRAM COUNTER
ZPCL EQU ZPC ; (BYTE) <8 BITS OF [ZPC]
ZPCM EQU ZPC+1 ; (BYTE) MIDDLE 8 BITS OF [ZPC]
ZPCH EQU ZPC+2 ; (BYTE) >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) <8 BITS OF [MPC]
MPCM EQU MPC+1 ; (BYTE) MIDDLE 8 BITS OF [MPC]
MPCH EQU MPC+2 ; (BYTE) >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 VIRTUAL PAGE OF "PURE" Z-CODE
GLOBAL EQU ZCODE+3 ; (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 TABLE POINTER
; Z-STRING MANIPULATION VARIABLES
IN EQU GLOBAL+10 ; (9 BYTES) INPUT BUFFER
OUT EQU IN+9 ; (9 BYTES) OUTPUT BUFFER
SOURCE EQU OUT+9 ; (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
PSVFLG EQU SOURCE+19 ; (BYTE) PRESERVE FLAG FOR LEX 0=DON'T 1=DO
VOCFLG EQU SOURCE+20 ; (BYTE) WHICH VOC TBL, 0=NORMAL 1= ARG3
ALLFLG EQU SOURCE+21 ; (BYTE) IF =1 ALL FCN KEYS (>127) ARE TCHARS
DBLOCK EQU SOURCE+22 ; (WORD) Z-BLOCK TO READ
DBUFF EQU DBLOCK+2 ; (WORD) RAM PG TO ACCESS (LSB = 0)
PAGEOT EQU DBLOCK+4 ; (WORD) ZPCH,M OF 1ST VIRTUAL PAGE
; THAT WILL HAVE TO GO IN PAGENG
DIRFLG EQU PAGEOT+2 ; (BYTE) OUTPUT TO SCREEN (0) TABLE (1) FLAG
DIRTBL EQU PAGEOT+3 ; (WORD) CONTAINS TBLE TO STORE CHARS TO
DIRITM EQU PAGEOT+5 ; (WORD) OFFSET IN OUTPUT TBL (DIRTBL)
DIRCNT EQU PAGEOT+7 ; (WORD) COUNT OF CHARS IN TBL (DIRTBL)
BUFFLG EQU PAGEOT+9 ; (BYTE) DISPLAY BUFFERED (0) UNBUFFERED (1)
CHRMAX EQU PAGEOT+10 ; (BYTE) # CHARS CAN INPUT FROM KEYBOARD
XSIZE EQU PAGEOT+11 ; (BYTE) SCREEN WIDTH FOR TESTS
RAND1 EQU XSIZE+1 ; (BYTE)
RAND2 EQU XSIZE+2 ; (BYTE) RANDOM #
SPLITF EQU XSIZE+3 ; (BYTE) WHICH WINDOW TO WRITE IN
RDTBL1 EQU XSIZE+4 ; (WORD) READ TABLE 1 (ABSOLUTE- EZIP)
RDTBL2 EQU RDTBL1+2 ; (WORD) READ TABLE 2
QUOT EQU RDTBL1+4 ; (WORD) QUOTIENT FOR DIVISION
REMAIN EQU QUOT+2 ; (WORD) REMAINDER FOR DIVISION
QSIGN EQU REMAIN+2 ;(BYTE) SIGN OF QUOTIENT
RSIGN EQU QSIGN+1 ; (BYTE) SIGN OF REMAINDER
DIGITS EQU RSIGN+1 ; (BYTE) DIGIT COUNT FOR "PRINTN"
LENGTH EQU DIGITS+1 ; (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
LMAX EQU LINCNT+1 ; (BYTE) MAX # LINES/SCREEN
IOCHAR EQU LMAX+1 ; (BYTE) CHARACTER BUFFER
SLINE EQU IOCHAR+1 ; (BYTE) BORDERLINE FOR SPLIT
SPSTAT EQU SLINE+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 ; (WORD) TARGET SECTOR
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
TSLOT EQU TDRIVE+1 ; (BYTE) TEMP SAVE SLOT
DRIVE EQU TSLOT+1 ; (BYTE) CURRENT DRIVE
SIDEFLG EQU DRIVE+1 ; (BYTE) =1 IF WE ARE ON SIDE 1 2 IF SIDE 2
SRHOLD EQU SIDEFLG+1 ; (BYTE)
TIMER EQU SRHOLD+1 ; (WORD) TIMED INPUT COUNTER
ZSP EQU TIMER+2 ; (WORD)
OLDZSP EQU ZSP+2 ; (WORD)
DBLK EQU OLDZSP+2 ; (WORD)
SCREENF EQU DBLK+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
TSTVAL EQU TABLEF+4 ; (BYTE) FOR MEMCHECK DONE AT START
LASTZP EQU TABLEF+5 ; CHECK FOR OVER ZERO PAGE
END