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

163 lines
6.0 KiB
NASM

PAGE
SBTTL "--- MEMORY ORGANIZATION ---"
TRUE EQU $FF
FALSE EQU 0
LO EQU 0
HI EQU 1
IOBUFF EQU $500 ; 256-BYTE DISK BUFFER
ZSTAKL EQU IOBUFF+$100 ; Z-STACK LSBS
ZSTAKH EQU IOBUFF+$200 ; Z-STACK MSBS
PTABL EQU IOBUFF+$300 ; PAGING TABLE LSBS
PTABH EQU IOBUFF+$400 ; PAGING TABLE MSBS
LOCALS EQU IOBUFF+$500 ; LOCAL VARIABLE STORAGE (32 BYTES)
BUFSAV EQU IOBUFF+$520 ; I/O AUX BUFFER (80 BYTES)
ZIP EQU MSTART ; START OF EXECUTABLE CODE
ZBEGIN EQU ZIP+$1800 ; START OF Z-CODE (ASSUME 6K ZIP)
; ---------------------
; Z-CODE HEADER OFFSETS
; ---------------------
ZVERS EQU 0 ; VERSION BYTE
ZMODE EQU 1 ; MODE SELECT BYTE
ZID EQU 2 ; GAME ID WORD
ZENDLD EQU 4 ; START OF NON-PRELOADED Z-CODE
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 ASCII 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
PAGE
SBTTL "--- ZIP Z-PAGE VARIABLES ---"
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
ABYTE EQU OPCODE+10 ; (BYTE) X-OP ARGUMENT BYTE
ADEX EQU OPCODE+11 ; (BYTE) X-OP ARGUMENT INDEX
VALUE EQU OPCODE+12 ; (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
ZSP EQU VALUE+8 ; (BYTE) Z-STACK POINTER
OLDZSP EQU ZSP+1 ; (BYTE) OLD Z-STACK POINTER
ZPC EQU ZSP+2 ; (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]
ZPCFLG EQU ZPC+3 ; (BYTE) FLAG: "TRUE" IF [ZPCPNT] VALID
ZPCPNT EQU ZPC+4 ; (WORD) ABS POINTER TO CURRENT Z-PAGE
MPC EQU ZPC+6 ; (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]
MPCFLG EQU MPC+3 ; (BYTE) FLAG: "TRUE" IF [MPCPNT] VALID
MPCPNT EQU MPC+4 ; (WORD) ABS POINTER TO CURRENT M-PAGE
LRU EQU MPC+6 ; (BYTE) PAGING INDEX
ZCODE EQU LRU+1 ; (BYTE) 1ST ABSOLUTE PAGE OF PRELOAD
ZPURE EQU LRU+2 ; (BYTE) 1ST VIRTUAL PAGE OF "PURE" Z-CODE
PAGE0 EQU LRU+3 ; (BYTE) 1ST PAGE OF ACTUAL SWAPPING SPACE
PMAX EQU LRU+4 ; (BYTE) MAXIMUM # OF SWAPPING PAGES
ZPAGE EQU LRU+5 ; (BYTE) CURRENT SWAPPING PAGE
TARGET EQU LRU+6 ; (WORD) TARGET PAGE FOR SWAPPING
GLOBAL EQU LRU+8 ; (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
; Z-STRING MANIPULATION VARIABLES
IN EQU GLOBAL+8 ; (6 BYTES) INPUT BUFFER
OUT EQU IN+6 ; (6 BYTES) OUTPUT BUFFER
SOURCE EQU OUT+6 ; (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
QUOT EQU SOURCE+19 ; (WORD) QUOTIENT FOR DIVISION
REMAIN EQU QUOT+2 ; (WORD) REMAINDER FOR DIVISION
MTEMP EQU QUOT+4 ; (WORD) MATH TEMPORARY REGISTER
QSIGN EQU QUOT+6 ; (BYTE) SIGN OF QUOTIENT
RSIGN EQU QUOT+7 ; (BYTE) SIGN OF REMAINDER
DIGITS EQU QUOT+8 ; (BYTE) DIGIT COUNT FOR "PRINTN"
TIMEFL EQU QUOT+9 ; (BYTE) "TRUE" IF TIME MODE
LENGTH EQU TIMEFL+1 ; (BYTE) LENGTH OF LINE IN [LINBUF]
OLDLEN EQU TIMEFL+2 ; (BYTE) OLD LINE LENGTH
SCRIPT EQU TIMEFL+3 ; (BYTE) SCRIPT ENABLE FLAG
OLDX EQU TIMEFL+4 ; (BYTE) OLD CURSOR X
OLDY EQU TIMEFL+5 ; (BYTE) OLD CURSOR Y
LINCNT EQU TIMEFL+6 ; (BYTE) LINE COUNTER
;LMAX EQU TIMEFL+7 ; (BYTE) MAX # LINES/SCREEN
IOCHAR EQU TIMEFL+7 ; (BYTE) CHARACTER BUFFER
;SLINE EQU IOCHAR+1 ; (BYTE) BORDERLINE FOR SPLIT
;SPSTAT EQU IOCHAR+2 ; (BYTE) SPLIT SCREEN STATUS FLAG
LFROM EQU IOCHAR+1 ; (WORD) "FROM" LINE ADDRESS
LTO EQU IOCHAR+3 ; (WORD) "TO" LINE ADDRESS
PSTAT EQU IOCHAR+5 ; (BYTE) PRINTER STATUS FLAG
;STRING EQU IOCHAR+3 ; (WORD) STRING ADDRESS
;STRLEN EQU IOCHAR+5 ; (BYTE) STRING LENGTH
PRLEN EQU IOCHAR+6 ; (BYTE) SCRIPT LINE LENGTH
;LENDEX EQU IOCHAR+7 ; (BYTE) LINE PRINTING INDEX
DBLOCK EQU IOCHAR+7 ; (WORD) Z-BLOCK TO READ
DBUFF EQU DBLOCK+2 ; (WORD) RAM PAGE TO ACCESS (LSB = 0)
GPOSIT EQU DBLOCK+4 ; (BYTE) DEFAULT SAVE POSITION
GDRIVE EQU DBLOCK+5 ; (BYTE) DEFAULT SAVE DRIVE
TPOSIT EQU DBLOCK+6 ; (BYTE) TEMP SAVE POSITION
TDRIVE EQU DBLOCK+7 ; (BYTE) TEMP SAVE DRIVE
CFLAG EQU DBLOCK+8 ; (BYTE) CURSOR ON/OFF FLAG
;BLINK EQU DBLOCK+8 ; (WORD) CURSOR BLINK TIMER
SECBLK EQU DBLOCK+8 ; (LBL) DISK R/W INSTRUCTION BLOCK
DRIVE EQU SECBLK ; (BYTE) CURRENT DRIVE
MEMADD EQU SECBLK+1 ; (DBLWORD) MEMORY ADDRESS TO R/W TO/FROM
PARAM EQU SECBLK+5 ; (BYTE) # OF PARAMETERS, ALWAYS 3
COMMD EQU SECBLK+6 ; (BYTE) READ ($53) WRITE ($4B)
TRACK EQU SECBLK+7 ; (BYTE) TARGET TRACK
SECTOR EQU SECBLK+8 ; (BYTE) TARGET SECTOR
L EQU SECBLK+9 ; (BYTE) SECTOR LENGTH, ALWAYS $21 (= 256)
RWRSLT EQU SECBLK+10 ; (BYTE) R/W FAILED/SUCCEEDED
HOLDX EQU SECBLK+11 ; (BYTE) HOLD FOR SCROLL
NDEX EQU HOLDX+1 ; (BYTE) HOLD FOR SCROLL
RAND1 EQU HOLDX+2 ; (BYTE) RANDOM BYTE #1
RAND2 EQU RAND1+1 ; (BYTE) RANDOM BYTE #2
RNDFLG EQU RAND1+2 ; (BYTE) FLAG FOR 1ST CHAR ENTERED.
END