Files
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

208 lines
7.7 KiB
NASM
Raw Permalink 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
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