2023-11-16 18:19:54 -05:00

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