mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-01-13 23:27:21 +00:00
181 lines
8.0 KiB
NASM
181 lines
8.0 KiB
NASM
|
|
******************************************************
|
|
* Z-LANGUAGE INTERPRETER PROGRAM FOR THE TI-99 *
|
|
******************************************************
|
|
|
|
* REGISTER USAGE
|
|
* ----------------------------------------------------------
|
|
* R0 - GENERALLY, SINGLE VALUES ARE PASSED OR RETURNED
|
|
* HERE. OTHERWISE, R0 IS SCRATCH.
|
|
|
|
* R1 THROUGH R4 - USED FOR PASSING MULTIPLE VALUES.
|
|
* OTHERWISE, THESE REGISTERS MUST BE PRESERVED ACROSS EACH
|
|
* SUBROUTINE CALL. TOP-LEVEL ROUTINES, OPx ROUTINES, ARE
|
|
* EXCLUDED FROM THIS RESTRICTION.
|
|
|
|
* R5 AND R6 - VIRTUAL STACK AND ZIP STACK POINTERS.
|
|
|
|
* R7 THROUGH R15 - SCRATCH. REGISTERS FROM R11 UP ARE
|
|
* USED TRANSIENTLY BY "BL" AND "BLWP" SUBROUTINE CALLS.
|
|
|
|
|
|
* MEMORY USAGE
|
|
* ----------------------------------------------------------
|
|
* PRELOADED GAME CODE: >A000 TO >F400
|
|
* SINCE THERE IS ROOM FOR EXACTLY 44 BLOCKS HERE, "ENDLOD"
|
|
* FOR ANY GIVEN GAME MUST NOT EXCEED 44 x 512 (OR THE ZIP
|
|
* INITIALIZER WILL SIGNAL AN ERROR).
|
|
|
|
* STACK AND BUFFER SPACE: >2000 TO >2700
|
|
* THIS SPACE IS INITIALLY OCCUPIED BY THE SYSTEM LOADER
|
|
* BUT BECOMES AVAILABLE ONCE ZIP IS RUNNING.
|
|
|
|
* ZIP: >2700 T0 >3F30, >F100 TO >FF80
|
|
* ZIP WAS COMPILED INTO TWO SECTIONS TO ALLOW PRELOADED
|
|
* GAME CODE TO OCCUPY CONTIGUOUS MEMORY. THE UPPER LIMITS
|
|
* ARE DUE TO THE SYSTEM LOADER'S SYMBOL TABLE, STARTING
|
|
* AT ABOUT >3F30, AND THE X-BASIC PROGRAM WHICH CALLS THE
|
|
* SYSTEM LOADER, STARTING AT ABOUT >FF80.
|
|
*
|
|
* BECAUSE MEMORY SPACE IS VERY TIGHT IN THE TI, INITIAL-
|
|
* IZATION CODE IS LOCATED AT THE FRONT OF ZIP AND COMPILED
|
|
* SUCH THAT IT OVERLAPS THE AREA OF PRELOADED GAME CODE.
|
|
* IT NEED EXECUTE ONLY ONCE, AND IS THEN OVERWRITTEN.
|
|
* THIS TECHNIQUE INCREASES PRELOAD SPACE BY TWO BLOCKS.
|
|
|
|
* PAGE SWAPPING SPACE IS LOCATED IN THE SEPARATE VDP (VIDEO
|
|
* DISPLAY PROCESSOR) MEMORY. ABOUT 4K (25 PERCENT) OF VDP
|
|
* IS OCCUPIED BY DISK UTILITIES AND VIDEO DISPLAY TABLES.
|
|
* JUDICIOUS ARRANGEMENT OF THE TABLES LEAVES ROOM FOR
|
|
* EXACTLY 24 PAGE FRAMES.
|
|
|
|
PAGE -----------------------------------------------
|
|
|
|
* VDP MEMORY IS THE BEST CHOICE FOR THE LOCATION OF PAGE
|
|
* FRAMES BECAUSE OF ITS FOLLOWING PROPERTIES/LIMITATIONS:
|
|
*
|
|
* [] DATA READ FROM THE DISK IS ALWAYS DEPOSITED DIRECTLY
|
|
* INTO VDP MEMORY. A SPECIAL SUBROUTINE CALL IS
|
|
* NECESSARY TO GET THIS DATA, ONE BYTE AT A TIME, TO A
|
|
* PROGRAM IN MAIN MEMORY. NOTE THAT THIS CORRESPONDS
|
|
* CLOSELY TO THE WAY IN WHICH ZIP IS DESIGNED TO READ
|
|
* PAGED DATA.
|
|
*
|
|
* [] VDP MEMORY IS NOT WITHIN THE ADDRESS SPACE OF THE
|
|
* CPU; ASSEMBLY LANGUAGE PROGRAMS (E.G. ZIP) CANNOT
|
|
* THEMSELVES BE EXECUTED FROM VDP MEMORY.
|
|
|
|
|
|
* SUBROUTINE LINKAGE
|
|
* ----------------------------------------------------------
|
|
* SINCE THE TI-99 DOES NOT SUPPORT STACK-BASED SUBROUTINE
|
|
* LINKAGE, ZIP INCLUDES A SUBROUTINE (JSR) WHICH EMULATES
|
|
* THE PDP-11 SUBROUTINE CALL OF THE SAME NAME. THE TI'S
|
|
* INTRINSIC REGISTER-BASED LINKAGE INSTRUCTIONS ARE USED
|
|
* OCCASIONALLY FOR CALLING SYSTEM UTILITIES.
|
|
|
|
PAGE ---------------------------------------------------
|
|
|
|
*********************************
|
|
* VDP MEMORY MAP *
|
|
*********************************
|
|
|
|
* >0000 +-----------------------------------------------+
|
|
* | Script buffer - 40 chars max |
|
|
* >0030 +-----------------------------------------------+
|
|
* | Peripheral Access Blocks, free space |
|
|
* | |
|
|
* >0100 +-----------------------------------------------+
|
|
* | Pattern Descriptor Table - 96 chars x 8 |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >0400 +-----------------------------------------------+
|
|
* | Screen Image Table - 40 cols x 24 rows |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >07C0 +-----------------------------------------------+
|
|
* >07D0 +-----------------------------------------------+
|
|
* | Page Swapping Space - 24 pages x 512 |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
*
|
|
* ~ ~
|
|
*
|
|
* | |
|
|
* | |
|
|
* >37D0 +-----------------------------------------------+
|
|
* >37D8 +-----------------------------------------------+
|
|
* | Reserved by System: Disk I/O |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >3FFF +-----------------------------------------------+
|
|
|
|
PAGE -------------------------------------------------
|
|
|
|
*********************************
|
|
* MAIN MEMORY MAP *
|
|
*********************************
|
|
|
|
* >2000 +-----------------------------------------------+
|
|
* | ZIP stacks, buffers |
|
|
* | |
|
|
* | |
|
|
* >2700 +-----------------------------------------------+
|
|
* | ZIP |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >3F30 +-----------------------------------------------+
|
|
* | System REF/DEF Table (program entry address) |
|
|
* | |
|
|
* >3FFF +-----------------------------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
* >A000 +-----------------------------------------------+
|
|
* | Preloaded game code |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
*
|
|
* ~ ~
|
|
*
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >xxxx +-----------------------------------------------+
|
|
* | more ZIP |
|
|
* | |
|
|
* | |
|
|
* | |
|
|
* >FF80 +-----------------------------------------------+
|
|
* | Extended Basic Line Table |
|
|
* >FFFF +-----------------------------------------------+
|
|
|