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

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 +-----------------------------------------------+