PAGE SBTTL "--- MEMORY ORGANIZATION ---" TRUE EQU $FF FALSE EQU 0 LO EQU 0 HI EQU 1 ; ALL THE VARIOUS BUFFERS NEEDED IOBUFF EQU MSTART ; PAGENG BUFFER ZSTKBL EQU MSTART+$100 ; 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 MSTART+$500 ; PAGING TABLES PREVPNT EQU NEXTPNT+$80 VPAGEH EQU PREVPNT+$80 VPAGEL EQU VPAGEH+$80 LOCALS EQU MSTART+$700 ; LOCAL VARIABLE STORAGE (30 BYTES) BUFSAV EQU LOCALS+$20 ; AUXILIARY INPUT BUFFER (80 BYTES) EZIP EQU MSTART+$800 ZBEGIN EQU EZIP+$2A00 ; 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 ; 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 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 ( " " " ) ; THESE ARE THE FLAGS & REGISTERS USED TO ACCESS THE 256K ; EXPANSION RAM FOR THE C64 IF IT IS ATTACHED XFLAGS EQU $DF00 ; THE PAGE THE FLAGS ARE ON XFER EQU 1 ; (BYTE) WRITE TO THIS TO DO TRANSFER XBUFF EQU 2 ; (WORD) ADDR OF TRANSFER BUFFER IN MAIN MEMORY XRAM EQU 4 ; (WORD) ADDR OF BUFFER IN XPANSION RAM (XRAM) XBANK EQU 6 ; (BYTE) WHICH BANK OF XPANSION RAM XSIZ EQU 7 ; (WORD) SIZE OF TRANSFER IN BYTES XINT EQU 9 ; (BYTE) SET FOR NO INTERRUPTS DURING TRANSFERS XINCR EQU 10 ; (BYTE) SET FOR POINTERS TO INCREMENT SBTTL "--- ZIP Z-PAGE VARIABLES ---" OPCODE EQU ZEROPG ; (BYTE) CURRENT OPCODE VALUE EQU OPCODE+1 ; 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) 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 ; (BYTE) 1ST VIRTUAL PAGE OF "PURE" Z-CODE GLOBAL EQU ZCODE+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 ; Z-STRING MANIPULATION VARIABLES ;IN EQU GLOBAL+8 ; (9 BYTES) INPUT BUFFER ;OUT EQU IN+9 ; (9 BYTES) OUTPUT BUFFER SOURCE EQU GLOBAL+8 ; 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 DBLOCK EQU SOURCE+19 ; (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 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 (LC-A) RAND1 EQU CHRMAX+1 ; (BYTE) RANDOM # SPLITF EQU CHRMAX+2 ; (BYTE) WHICH WINDOW TO WRITE IN RDTBL1 EQU CHRMAX+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 LMAX EQU LINCNT+1 ; (BYTE) MAX # LINES/SCREEN IOCHAR EQU LINCNT+2 ; (BYTE) CHARACTER BUFFER SLINE EQU IOCHAR+1 ; (BYTE) BORDERLINE FOR SPLIT SPSTAT EQU IOCHAR+2 ; (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 SRHOLD EQU SIDEFLG+1 ; (BYTE) TIMER EQU SRHOLD+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 PSTAT EQU TABLEF+4 ; (BYTE) PRINTER STATUS DVD EQU TABLEF+5 ; (WORD) DISK DIVIDEND DSOR EQU TABLEF+7 ; (WORD) DISK DIVISOR DTEMP EQU TABLEF+9 ; (WORD) DISK TEMP VARIABLE SAVSIZ EQU TABLEF+11 ; (BYTE) # OF SECTORS PER SAVE NUMSAV EQU SAVSIZ+1 ; (BYTE) # SAVES OF THIS GAME POSSIBLE OLDX EQU SAVSIZ+2 ; (BYTE) OLDY EQU SAVSIZ+3 ; (BYTE) SCREEN COORDS. ;TOP EQU SAVSIZ+4 ; (BYTE) HOLDS WTOP (LC-A) NARGS EQU SAVSIZ+4 ; (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 RNUM1 EQU NARGS+21 ; (BYTE) FOR RANDOM - DON'T USE RNUM2 EQU NARGS+22 ; (BYTE) FOR RANDOM - DON'T USE ; THE REST OF THE VARIABLES (THAT WOULDN'T FIT) ARE AT THE END OF IO.ASM LASTZP EQU RNUM2+1 ; CHECK FOR OVER ZERO PAGE END