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