VM02/src/global.inc

956 lines
30 KiB
PHP
Executable File

;*****************************************************************************
;*
;* GNU GENERAL PUBLIC LICENSE
;* Version 2, June 1991
;*
;* Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
;* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;* Everyone is permitted to copy and distribute verbatim copies
;* of this license document, but changing it is not allowed.
;*
;* Preamble
;*
;* The licenses for most software are designed to take away your
;* freedom to share and change it. By contrast, the GNU General Public
;* License is intended to guarantee your freedom to share and change free
;* software--to make sure the software is free for all its users. This
;* General Public License applies to most of the Free Software
;* Foundation's software and to any other program whose authors commit to
;* using it. (Some other Free Software Foundation software is covered by
;* the GNU Lesser General Public License instead.) You can apply it to
;* your programs, too.
;*
;* When we speak of free software, we are referring to freedom, not
;* price. Our General Public Licenses are designed to make sure that you
;* have the freedom to distribute copies of free software (and charge for
;* this service if you wish), that you receive source code or can get it
;* if you want it, that you can change the software or use pieces of it
;* in new free programs; and that you know you can do these things.
;*
;* To protect your rights, we need to make restrictions that forbid
;* anyone to deny you these rights or to ask you to surrender the rights.
;* These restrictions translate to certain responsibilities for you if you
;* distribute copies of the software, or if you modify it.
;*
;* For example, if you distribute copies of such a program, whether
;* gratis or for a fee, you must give the recipients all the rights that
;* you have. You must make sure that they, too, receive or can get the
;* source code. And you must show them these terms so they know their
;* rights.
;*
;* We protect your rights with two steps: (1) copyright the software, and
;* (2) offer you this license which gives you legal permission to copy,
;* distribute and/or modify the software.
;*
;* Also, for each author's protection and ours, we want to make certain
;* that everyone understands that there is no warranty for this free
;* software. If the software is modified by someone else and passed on, we
;* want its recipients to know that what they have is not the original, so
;* that any problems introduced by others will not reflect on the original
;* authors' reputations.
;*
;* Finally, any free program is threatened constantly by software
;* patents. We wish to avoid the danger that redistributors of a free
;* program will individually obtain patent licenses, in effect making the
;* program proprietary. To prevent this, we have made it clear that any
;* patent must be licensed for everyone's free use or not licensed at all.
;*
;* The precise terms and conditions for copying, distribution and
;* modification follow.
;*
;* GNU GENERAL PUBLIC LICENSE
;* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
;*
;* 0. This License applies to any program or other work which contains
;* a notice placed by the copyright holder saying it may be distributed
;* under the terms of this General Public License. The "Program", below,
;* refers to any such program or work, and a "work based on the Program"
;* means either the Program or any derivative work under copyright law:
;* that is to say, a work containing the Program or a portion of it,
;* either verbatim or with modifications and/or translated into another
;* language. (Hereinafter, translation is included without limitation in
;* the term "modification".) Each licensee is addressed as "you".
;*
;* Activities other than copying, distribution and modification are not
;* covered by this License; they are outside its scope. The act of
;* running the Program is not restricted, and the output from the Program
;* is covered only if its contents constitute a work based on the
;* Program (independent of having been made by running the Program).
;* Whether that is true depends on what the Program does.
;*
;* 1. You may copy and distribute verbatim copies of the Program's
;* source code as you receive it, in any medium, provided that you
;* conspicuously and appropriately publish on each copy an appropriate
;* copyright notice and disclaimer of warranty; keep intact all the
;* notices that refer to this License and to the absence of any warranty;
;* and give any other recipients of the Program a copy of this License
;* along with the Program.
;*
;* You may charge a fee for the physical act of transferring a copy, and
;* you may at your option offer warranty protection in exchange for a fee.
;*
;* 2. You may modify your copy or copies of the Program or any portion
;* of it, thus forming a work based on the Program, and copy and
;* distribute such modifications or work under the terms of Section 1
;* above, provided that you also meet all of these conditions:
;*
;* a) You must cause the modified files to carry prominent notices
;* stating that you changed the files and the date of any change.
;*
;* b) You must cause any work that you distribute or publish, that in
;* whole or in part contains or is derived from the Program or any
;* part thereof, to be licensed as a whole at no charge to all third
;* parties under the terms of this License.
;*
;* c) If the modified program normally reads commands interactively
;* when run, you must cause it, when started running for such
;* interactive use in the most ordinary way, to print or display an
;* announcement including an appropriate copyright notice and a
;* notice that there is no warranty (or else, saying that you provide
;* a warranty) and that users may redistribute the program under
;* these conditions, and telling the user how to view a copy of this
;* License. (Exception: if the Program itself is interactive but
;* does not normally print such an announcement, your work based on
;* the Program is not required to print an announcement.)
;*
;* These requirements apply to the modified work as a whole. If
;* identifiable sections of that work are not derived from the Program,
;* and can be reasonably considered independent and separate works in
;* themselves, then this License, and its terms, do not apply to those
;* sections when you distribute them as separate works. But when you
;* distribute the same sections as part of a whole which is a work based
;* on the Program, the distribution of the whole must be on the terms of
;* this License, whose permissions for other licensees extend to the
;* entire whole, and thus to each and every part regardless of who wrote it.
;*
;* Thus, it is not the intent of this section to claim rights or contest
;* your rights to work written entirely by you; rather, the intent is to
;* exercise the right to control the distribution of derivative or
;* collective works based on the Program.
;*
;* In addition, mere aggregation of another work not based on the Program
;* with the Program (or with a work based on the Program) on a volume of
;* a storage or distribution medium does not bring the other work under
;* the scope of this License.
;*
;* 3. You may copy and distribute the Program (or a work based on it,
;* under Section 2) in object code or executable form under the terms of
;* Sections 1 and 2 above provided that you also do one of the following:
;*
;* a) Accompany it with the complete corresponding machine-readable
;* source code, which must be distributed under the terms of Sections
;* 1 and 2 above on a medium customarily used for software interchange; or,
;*
;* b) Accompany it with a written offer, valid for at least three
;* years, to give any third party, for a charge no more than your
;* cost of physically performing source distribution, a complete
;* machine-readable copy of the corresponding source code, to be
;* distributed under the terms of Sections 1 and 2 above on a medium
;* customarily used for software interchange; or,
;*
;* c) Accompany it with the information you received as to the offer
;* to distribute corresponding source code. (This alternative is
;* allowed only for noncommercial distribution and only if you
;* received the program in object code or executable form with such
;* an offer, in accord with Subsection b above.)
;*
;* The source code for a work means the preferred form of the work for
;* making modifications to it. For an executable work, complete source
;* code means all the source code for all modules it contains, plus any
;* associated interface definition files, plus the scripts used to
;* control compilation and installation of the executable. However, as a
;* special exception, the source code distributed need not include
;* anything that is normally distributed (in either source or binary
;* form) with the major components (compiler, kernel, and so on) of the
;* operating system on which the executable runs, unless that component
;* itself accompanies the executable.
;*
;* If distribution of executable or object code is made by offering
;* access to copy from a designated place, then offering equivalent
;* access to copy the source code from the same place counts as
;* distribution of the source code, even though third parties are not
;* compelled to copy the source along with the object code.
;*
;* 4. You may not copy, modify, sublicense, or distribute the Program
;* except as expressly provided under this License. Any attempt
;* otherwise to copy, modify, sublicense or distribute the Program
;* void, and will automatically terminate your rights under this License.
;* However, parties who have received copies, or rights, from you under
;* this License will not have their licenses terminated so long as such
;* parties remain in full compliance.
;*
;* 5. You are not required to accept this License, since you have not
;* signed it. However, nothing else grants you permission to modify or
;* distribute the Program or its derivative works. These actions are
;* prohibited by law if you do not accept this License. Therefore, by
;* modifying or distributing the Program (or any work based on the
;* Program), you indicate your acceptance of this License to do so, and
;* all its terms and conditions for copying, distributing or modifying
;* the Program or works based on it.
;*
;* 6. Each time you redistribute the Program (or any work based on the
;* Program), the recipient automatically receives a license from the
;* original licensor to copy, distribute or modify the Program subject to
;* these terms and conditions. You may not impose any further
;* restrictions on the recipients' exercise of the rights granted herein.
;* You are not responsible for enforcing compliance by third parties to
;* this License.
;*
;* 7. If, as a consequence of a court judgment or allegation of patent
;* infringement or for any other reason (not limited to patent issues),
;* conditions are imposed on you (whether by court order, agreement or
;* otherwise) that contradict the conditions of this License, they do not
;* excuse you from the conditions of this License. If you cannot
;* distribute so as to satisfy simultaneously your obligations under this
;* License and any other pertinent obligations, then as a consequence you
;* may not distribute the Program at all. For example, if a patent
;* license would not permit royalty-free redistribution of the Program by
;* all those who receive copies directly or indirectly through you, then
;* the only way you could satisfy both it and this License would be to
;* refrain entirely from distribution of the Program.
;*
;* If any portion of this section is held invalid or unenforceable under
;* any particular circumstance, the balance of the section is intended to
;* apply and the section as a whole is intended to apply in other
;* circumstances.
;*
;* It is not the purpose of this section to induce you to infringe any
;* patents or other property right claims or to contest validity of any
;* such claims; this section has the sole purpose of protecting the
;* integrity of the free software distribution system, which is
;* implemented by public license practices. Many people have made
;* generous contributions to the wide range of software distributed
;* through that system in reliance on consistent application of that
;* system; it is up to the author/donor to decide if he or she is willing
;* to distribute software through any other system and a licensee cannot
;* impose that choice.
;*
;* This section is intended to make thoroughly clear what is believed to
;* be a consequence of the rest of this License.
;*
;* 8. If the distribution and/or use of the Program is restricted in
;* certain countries either by patents or by copyrighted interfaces, the
;* original copyright holder who places the Program under this License
;* may add an explicit geographical distribution limitation excluding
;* those countries, so that distribution is permitted only in or among
;* countries not thus excluded. In such case, this License incorporates
;* the limitation as if written in the body of this License.
;*
;* 9. The Free Software Foundation may publish revised and/or new versions
;* of the General Public License from time to time. Such new versions will
;* be similar in spirit to the present version, but may differ in detail to
;* address new problems or concerns.
;*
;* Each version is given a distinguishing version number. If the Program
;* specifies a version number of this License which applies to it and "any
;* later version", you have the option of following the terms and conditions
;* either of that version or of any later version published by the Free
;* Software Foundation. If the Program does not specify a version number of
;* this License, you may choose any version ever published by the Free Software
;* Foundation.
;*
;* 10. If you wish to incorporate parts of the Program into other free
;* programs whose distribution conditions are different, write to the author
;* to ask for permission. For software which is copyrighted by the Free
;* Software Foundation, write to the Free Software Foundation; we sometimes
;* make exceptions for this. Our decision will be guided by the two goals
;* of preserving the free status of all derivatives of our free software and
;* of promoting the sharing and reuse of software generally.
;*
;* NO WARRANTY
;*
;* 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
;* FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
;* OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
;* PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
;* OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
;* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
;* TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
;* PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
;* REPAIR OR CORRECTION.
;*
;* 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
;* WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
;* REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
;* INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
;* OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
;* TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
;* YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
;* PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
;* POSSIBILITY OF SUCH DAMAGES.
;*
;*****************************************************************************
;*
;* Copyright 2010, David Schmenk
;*
;*****************************************************************************
;**********************************************************
;*
;* GLOBAL DEFINES
;*
;**********************************************************
;*
;* DEBUG OPTIONS
;*
;DEBUG = 1
;DEBUG_BREAK = 1
;DEBUG_DUMP = 1 ; SLOT TO DUMP TO
;DEBUG_TIMER = 1
;DEBUG_MEMMGR = 1
;DEBUG_GC = 1
;DEBUG_LOCK = 1
;DEBUG_LOAD = 1
;DEBUG_INVOKE = 1
;DEBUG_INTERP = 1
;DEBUG_THREAD = 1
;DEBUG_FINALIZE = 1
;DEBUG_EXCEPT = 1
;DEBUG_PARAMS = 1
;DEBUG_DVM = 1
;DEBUG_SWAP = 1
;*
;* HANDY MACROS
;*
.DEFINE EQU =
.IFDEF DEBUG
.MACRO PERR MSG
.IMPORT PUTSLN
JSR PUTSLN
.ASCIIZ MSG
.ENDMACRO
.ELSE
.MACRO PERR MSG
.ENDMACRO
.ENDIF
.MACRO PSTR MSG
.IMPORT PUTS
JSR PUTS
.ASCIIZ MSG
.ENDMACRO
.MACRO PSTRLN MSG
.IMPORT PUTSLN
JSR PUTSLN
.ASCIIZ MSG
.ENDMACRO
;
;**********************************************************
;*
;* SYSTEM LIMITS AND OPTIONS
;*
;**********************************************************
;
MAX_THREADS EQU 4 ; MAX THREADS ALLOWED
FLOATING_POINT EQU 1 ; SINGLE PRECISION FLOATING POINT OPERATIONS
IDLE_GC EQU 1 ; DO GC DURING IDLE LOOP
IDLE_GC_DELAY EQU 1 ; DELAY BETWEEN GC DURING IDLE LOOP
IDLE_GC_WAIT EQU 16 ; DELAY BEFORE STARTING GC DURING IDLE LOOP
SWAPPING EQU 1 ; MEMORY HANDLE SWAPPING TO DISK
;BIGMEM EQU 1 ; 128K MEMORY SUPPORT FOR //C AND //E
;
;**********************************************************
;*
;* ZERO PAGE LOCATIONS
;*
;**********************************************************
;
OPJMP EQU $01 ; CONTAINS A JMP INTRUCTION
OPADDR EQU $02 ; CONTAINS ADDRESS OF JMP INSTRUCTION
OPCNT EQU $04
;*
;* LOWERCASE MASKS FOR CONSOLE I/O
;*
LCOUT_MASK EQU $06
LCIN_MASK EQU $07
;*
;* THREAD/BYTECODE INTERPRETER ZERO PAGE LOCATIONS
;*
ZP_THREAD_STATE EQU $0A
ZP_THREAD_SIZE EQU $14
EXECFLAGS EQU $0A
IEXECCLASS EQU $0B ; INDEX TO CURRENT CLASS
EXECCONSTPL EQU $0C ; POINTER TO CONSTANT POOL
HEXECFRAME EQU $0E ; HANDLE TO CURRENT FRAME
EXECPC EQU $10 ; PROGRAM COUNTER
EXECCODEBASE EQU $12 ; POINTER TO CODE SEGMENT
BPT EQU $14 ; BASE TYPE POINTER
BP0 EQU $16 ; BASE BYTE0 POINTER
BP1 EQU $18 ; BASE BYTE1 POINTER
BP2 EQU $1A ; BASE BYTE2 POINTER
BP3 EQU $1C ; BASE BYTE3 POINTER
;*
;* CODE MANAGER ZERO PAGE LOCATIONS
;*
CODEBLKPTR EQU $56
CODECOPYPTR EQU $58
;*
;* OPCODE INTERPRETER ZERO PAGE LOCATIONS
;*
ICONST EQU $60
PCINC EQU $60
CONSTPTR EQU $62
ARRAYPTR EQU $62
FIELDPTR EQU $62
ARRAYHNDL EQU $62
TARGETCLASS EQU $64
TARGETOBJ EQU $66
TARGETSIZE EQU $68
TARGETOFFSET EQU $68
TARGETTYPE EQU $6A
TARGETDEPTH EQU $6E
ADEPTH EQU $6F
;*
;* SWITCH OPCODE ZERO PAGE LOCATIONS
;*
TABLEIDX EQU $64
TABLEPTR EQU $6A
MATCHPTR EQU $6C
MATCHCNT EQU $6E
;*
;* INT MATH ZERO PAGE LOCATIONS
;*
MULTPLR EQU $60
MULTPLND EQU $64
PROD EQU $68
MULIDX EQU $6C
MULSIGN EQU $6D
DVDND EQU $60
DVSR EQU $64
REMNDR EQU $68
DVSIGN EQU $6C
;*
;* FLOATING POINT MATH ZERO PAGE LOCATIONS
;*
FP1MAN0 EQU $60
FP1MAN1 EQU $61
FP1MAN2 EQU $62
FP1MAN3 EQU $63
FP1SGN EQU $63
FP1EXP EQU $64
FP2MAN0 EQU $65
FP2MAN1 EQU $66
FP2MAN2 EQU $67
FP2MAN3 EQU $68
FP2SGN EQU $68
FP2EXP EQU $69
FPMAN0 EQU $6A
FPMAN1 EQU $6B
FPMAN2 EQU $6C
FPMAN3 EQU $6D
FPSGN EQU $6E
FPEXP EQU $6F
;*
;* FRAME MANAGER ZERO PAGE LOCATIONS
;*
RETURN_REF EQU $60
SCANPTR EQU $62
FRAMEPTR EQU $64
EXCEPTPTR EQU $66
STACKPOS EQU $66
SCANPOS EQU $67
EXCEPTCNT EQU $68
STACKPOPPED EQU $68
VARCNT EQU $69
CALLCLASS EQU $6A
LOCKCLASS EQU $6B
FRMVARS EQU $6C
;*
;* DAVE'S VIRTUAL MACHINE BYTECODE INTERPRETER ZERO PAGE LOCATIONS
;*
DVM_PC EQU $6C ; PROGRAM COUNTER
DVM_PTR EQU $6E ; MEMORY POINTER
;*
;* NATIVE METHOD ZERO PAGE LOCATIONS
;*
NATIVECODEPTR EQU $A0
NATIVE_00 EQU $A0
NATIVE_01 EQU $A1
HMETHODCODE EQU $A2
NATIVE_02 EQU $A2
NATIVE_03 EQU $A3
NATIVE_04 EQU $A4
NATIVE_05 EQU $A5
NATIVE_06 EQU $A6
NATIVE_07 EQU $A7
NATIVE_08 EQU $A8
NATIVE_09 EQU $A9
NATIVE_0A EQU $AA
NATIVE_0B EQU $AB
NATIVE_0C EQU $AC
NATIVE_0D EQU $AD
NATIVE_0E EQU $AE
NATIVE_0F EQU $AF
;*
;* SYSTEM CLASS ZERO PAGE LOCATIONS
;*
CCLASSPTR EQU $B0
CCLASSCNT EQU $B2
CCLASSSUPR EQU $B3
CCLASSINDEX EQU $B4
CCLASSNAME EQU $B6
CCLASSDESC EQU $B8
CCTBLPTR EQU $BA
CCTBLOFST EQU $BA
CCINSTPTR EQU $BC
CCINST EQU $BE
;*
;* CLASS LOADER/FRAME HANDLER ZERO PAGE LOCATIONS
;*
METHODPTR EQU $C0
CLBUFFPTR EQU $C0
CLBUFFOFST EQU $C2
CLBUFFPAGE EQU $C3
SUPERPTR EQU $C2
CLASSLDPTR EQU $C4
LDPTR EQU $C6
LDCNT EQU $C8
ACNT EQU $CA
CLDPTR EQU $CC
CCNT EQU $CE
VCNT EQU $CE
;*
;* STRING POOL ZERO PAGE LOCATIONS
;*
STRPTR EQU $D0
HSTR EQU $D2
STRMATCHPTR EQU $D4
STRHASH EQU $D6
HSTRNEXT EQU $D8
REFCNT EQU $DA
;*
;* UTILITIES ZERO PAGE LOCATIONS
;*
SRCADDR EQU $DC
DSTADDR EQU $DE
;*
;* GARBAGE COLLECTION ZERO PAGE LOCATIONS
;*
GCHNDL EQU $E0
GCMPTR EQU $E2
GCMEND EQU $E4
GCMLEN EQU $E4
GCTMP EQU $E6
GCBEST EQU $E8
GCNEIGHBOR EQU $EA
GCNEEDED EQU $EC
;*
;* FINALIZER ZERO PAGE LOCATIONS
;*
FINPTR EQU $EE
;*
;* MEMORY MANAGER ZERO PAGE LOCATIONS
;*
HUNUSED EQU $F0
HFREE EQU $F2
HNDL EQU $F4
MPTR EQU $F6
MLEN EQU $F8
MEND EQU $FA
TMP EQU $FC
TMPTR EQU $FC
HBEST EQU $FE
;
;**********************************************************
;*
;* EXTERNAL LINKEAGE JUMP TABLE
;*
;**********************************************************
;
LINK_TABLE EQU $0300
LINK_YIELD EQU LINK_TABLE+$00
LINK_LOCKENTER EQU LINK_TABLE+$02
LINK_LOCKEXIT EQU LINK_TABLE+$04
;
LINK_HMEMPTR EQU LINK_TABLE+$06
LINK_HMEMALLOC EQU LINK_TABLE+$08
LINK_HMEMALLOCFIXED EQU LINK_TABLE+$0A
LINK_HMEMFREE EQU LINK_TABLE+$0C
LINK_HMEMLOCK EQU LINK_TABLE+$0E
LINK_HMEMUNLOCK EQU LINK_TABLE+$10
;
LINK_THREADNEW EQU LINK_TABLE+$12
LINK_THREADPUSH EQU LINK_TABLE+$14
LINK_THREADSTART EQU LINK_TABLE+$16
LINK_THREADEXIT EQU LINK_TABLE+$18
LINK_THREADKILL EQU LINK_TABLE+$1A
LINK_THREADGETCURRENT EQU LINK_TABLE+$1C
LINK_THREADSETTIMEOUTL EQU LINK_TABLE+$1E
LINK_THREADSETTIMEOUTH EQU LINK_TABLE+$20
LINK_THREADNOTIMEOUT EQU LINK_TABLE+$22
LINK_THREADSETSTATE EQU LINK_TABLE+$24
LINK_THREADGETSTATE EQU LINK_TABLE+$26
LINK_THREADSETPRIORITY EQU LINK_TABLE+$28
LINK_THREADGETPRIORITY EQU LINK_TABLE+$2A
LINK_THREADSETCLASS EQU LINK_TABLE+$2C
LINK_THREADSETREF EQU LINK_TABLE+$2E
LINK_THREADGETCLASS EQU LINK_TABLE+$30
LINK_THREADGETREF EQU LINK_TABLE+$32
LINK_THREADWAITIO EQU LINK_TABLE+$34
LINK_THREADNOTIFYIO EQU LINK_TABLE+$36
LINK_SYSTEMTIC EQU LINK_TABLE+$38
LINK_GETTICL EQU LINK_TABLE+$3A
LINK_GETTICH EQU LINK_TABLE+$3C
;
LINK_MEMSRC EQU LINK_TABLE+$3E
LINK_MEMDST EQU LINK_TABLE+$40
LINK_MEMCPY EQU LINK_TABLE+$42
LINK_MEMCLR EQU LINK_TABLE+$44
;
LINK_HSTRADD EQU LINK_TABLE+$46
;
SAVEZPIRQ EQU LINK_TABLE+$49 ; SAVED ZERO PAGE LOCS FOR IRQ
;
LINK_SCRPRT EQU LINK_TABLE+$50
LINK_SCRPRTLN EQU LINK_TABLE+$52
;
LINK_PRODOS EQU LINK_TABLE+$54
;
LINK_HMEMREFINC EQU LINK_TABLE+$56
LINK_HMEMREFDEC EQU LINK_TABLE+$58
;
LINK_MEMSET EQU LINK_TABLE+$5A
;
RAMAVAIL EQU LINK_TABLE+$5E
;
CODEHEAPTOP EQU LINK_TABLE+$60
;
LINK_CLASSLOAD EQU LINK_TABLE+$62
;
LINK_GC EQU LINK_TABLE+$64
LINK_FINALIZE EQU LINK_TABLE+$66
;
LINK_EXITSTATUS EQU LINK_TABLE+$68
;
; OPEN FILE REFNUM LIST SO FILES CAN BE CLEANED UP AT EXIT
;
LINK_OPENFILES EQU LINK_TABLE+$6A
;
LINK_DEVPOLL EQU LINK_TABLE+$70
LINK_DEVREAD EQU LINK_TABLE+$70
LINK_DEVREAD1 EQU LINK_TABLE+$72
LINK_DEVREAD2 EQU LINK_TABLE+$74
LINK_DEVREAD3 EQU LINK_TABLE+$76
LINK_DEVREAD4 EQU LINK_TABLE+$78
LINK_DEVREAD5 EQU LINK_TABLE+$7A
LINK_DEVREAD6 EQU LINK_TABLE+$7C
LINK_DEVREAD7 EQU LINK_TABLE+$7E
LINK_DEVSELECT EQU LINK_TABLE+$80
LINK_DEVWRITE EQU LINK_TABLE+$80
LINK_DEVWRITE1 EQU LINK_TABLE+$82
LINK_DEVWRITE2 EQU LINK_TABLE+$84
LINK_DEVWRITE3 EQU LINK_TABLE+$86
LINK_DEVWRITE4 EQU LINK_TABLE+$88
LINK_DEVWRITE5 EQU LINK_TABLE+$8A
LINK_DEVWRITE6 EQU LINK_TABLE+$8C
LINK_DEVWRITE7 EQU LINK_TABLE+$8E
LINK_VMCALL EQU LINK_TABLE+$90
LINK_DEVCTRL EQU LINK_TABLE+$90
LINK_DEVCTRL1 EQU LINK_TABLE+$92
LINK_DEVCTRL2 EQU LINK_TABLE+$94
LINK_DEVCTRL3 EQU LINK_TABLE+$96
LINK_DEVCTRL4 EQU LINK_TABLE+$98
LINK_DEVCTRL5 EQU LINK_TABLE+$9A
LINK_DEVCTRL6 EQU LINK_TABLE+$9C
LINK_DEVCTRL7 EQU LINK_TABLE+$9E
LINK_DEVIRQ EQU LINK_TABLE+$A0
LINK_DEVIRQ1 EQU LINK_TABLE+$A2
LINK_DEVIRQ2 EQU LINK_TABLE+$A4
LINK_DEVIRQ3 EQU LINK_TABLE+$A6
LINK_DEVIRQ4 EQU LINK_TABLE+$A8
LINK_DEVIRQ5 EQU LINK_TABLE+$AA
LINK_DEVIRQ6 EQU LINK_TABLE+$AC
LINK_DEVIRQ7 EQU LINK_TABLE+$AE
;
;*
;* SWAPFILENAME
;*
SWAPFILE EQU $03B0 ; PUT SWAPFILE HERE SO CLEANUP IN WARM-INIT
;
ENTER_DVM EQU LINK_TABLE+$E1
LINK_DVM EQU LINK_TABLE+$E2
LINK_DUMPSTACK EQU LINK_TABLE+$E4
EXIT_STATUS EQU LINK_TABLE+$E8
LINK_REBOOT EQU LINK_TABLE+$EA
CHAIN_CMD EQU LINK_TABLE+$EC
LINK_EXIT EQU LINK_TABLE+$EE
;
.IFDEF BIGMEM
;
;##########################################################
;#
;# BIGMEM SETTINGS
;#
;##########################################################
;
;**********************************************************
;*
;* BIGMEM HANDLE/DATA TABLES/BUFFERS
;*
;**********************************************************
;*
;* BIGMEM I/O BUFFERS
;*
SWAPFILE_IO_BUFF EQU $0C00 ; MUST BE PAGE BOUNDARY I.E. LSB = $00
CLASSFILE_IO_BUFF EQU $0800
;
;*
;* MEMORY HANDLE TABLE
;*
HTBL_END EQU $E000 ; MUST BE PAGE BOUNDARY I.E. LSB = $00
HMAX EQU $0800 ; MORE HANDLES IF SWAPPING
HTBL_LEN EQU HMAX*2
HTBL EQU HTBL_END-HTBL_LEN
;*
;* TOP OF HEAP
;*
TOPOFHEAP EQU $BF00
;*
;* STRING POOL DATA HASH TABLE: $0C00 - $0DFF
;*
HSTR_HASHL EQU $E100
HSTR_HASHH EQU $E200
;*
;* CLASS HANDLE TABLE: $0E00 - $0EFF
;*
HCLASS_TBLL EQU $0E000
HCLASS_TBLH EQU $0E080
;*
;* THREAD LOCAL STORAGE STACK: $E300 - $E3FF
;*
TLS EQU $E300
;*
;* DVM OP TABLE: $E400 - $E4FF
;*
;*
;* AUXMEM ACCESS MACROS
;*
.MACRO AUXZP_ACCESS_ON
SEI ; TURN INTERRUPTS OFF
STA ALTZPON ; TURN ON ALT ZP AND LC
.ENDMACRO
.MACRO AUXZP_ACCESS_OFF
STA ALTZPOFF ; TURN OFF ALT ZP AND LC
CLI ; TURN INTERRUPTS BACK ON
.ENDMACRO
.MACRO AUXMEM_RDACCESS_ON
SEI
STA ALTRAMRDON
.ENDMACRO
.MACRO AUXMEM_RDACCESS_OFF
STA ALTRAMRDOFF
CLI
.ENDMACRO
.MACRO AUXMEM_WRACCESS_ON
SEI
STA ALTRAMWRON
.ENDMACRO
.MACRO AUXMEM_WRACCESS_OFF
STA ALTRAMWROFF
CLI
.ENDMACRO
.ELSE ; NON-BIGMEM
;
;##########################################################
;#
;# NON-BIGMEM SETTINGS
;#
;##########################################################
;
;**********************************************************
;*
;* HANDLE/DATA TABLES/BUFFERS
;*
;**********************************************************
;*
;* I/O BUFFERS
;*
SWAPFILE_IO_BUFF EQU $BB00 ; MUST BE PAGE BOUNDARY I.E. LSB = $00
CLASSFILE_IO_BUFF EQU $0800
;*
;* MEMORY HANDLE TABLE
;*
.IFDEF SWAPPING
HTBL_END EQU $BB00 ; RIGHT BELOW SWAPFILE BUFFER
.ELSE
HTBL_END EQU $BF00 ; MUST BE PAGE BOUNDARY I.E. LSB = $00
.ENDIF ; SWAPPING
TOPOFHEAP EQU HTBL
HMAX EQU $0400
HTBL_LEN EQU HMAX*2
HTBL EQU HTBL_END-HTBL_LEN
;*
;* STRING POOL DATA HASH TABLE: $0C00 - $0DFF
;*
HSTR_HASHL EQU $0C00
HSTR_HASHH EQU $0D00
;*
;* CLASS HANDLE TABLE: $0E00 - $0EFF
;*
HCLASS_TBLL EQU $0E00
HCLASS_TBLH EQU $0E80
;*
;* THREAD LOCAL STORAGE STACK: $0F80 - $0FFF
;*
TLS EQU $0F80
;*
;* AUXMEM ACCESS MACROS
;*
.MACRO AUXZP_ACCESS_ON
.ENDMACRO
.MACRO AUXZP_ACCESS_OFF
.ENDMACRO
.MACRO AUXMEM_RDACCESS_ON
.ENDMACRO
.MACRO AUXMEM_RDACCESS_OFF
.ENDMACRO
.MACRO AUXMEM_WRACCESS_ON
.ENDMACRO
.MACRO AUXMEM_WRACCESS_OFF
.ENDMACRO
.ENDIF ; BIGMEM
;##########################################################
;*
;* TYPEAHEAD BUFFER: $02B0 - $02BF
;*
TYPEBUFFLEN EQU $0280
TYPEBUFF EQU $0281
TYPEBUFFMAX EQU $0E
;*
;* DVM OP TABLE: $0290
;*
;
;**********************************************************
;*
;* SYSTEM ROUTINES AND LOCATIONS
;*
;**********************************************************
;*
;* MONITOR SPECIAL LOCATIONS AND PRODOS MLI
;*
CSWL EQU $36
CSWH EQU $37
PROMPTCHAR EQU $33
PRODOS EQU $BF00
MACHID EQU $BF98
;*
;* HARDWARE ADDRESSES
;*
KEYBD EQU $C000
CLRKBD EQU $C010
SPKR EQU $C030
ROMIN EQU $C081
LCBNK2 EQU $C083
LCBNK1 EQU $C08B
ALTZPOFF EQU $C008
ALTZPON EQU $C009
ALTRAMRDOFF EQU $C002
ALTRAMRDON EQU $C003
ALTRAMWROFF EQU $C004
ALTRAMWRON EQU $C005
;
;**********************************************************
;*
;* SYSTEM TYPES
;*
;**********************************************************
;*
;* CONSTANT TYPE IDENTIFIERS
;*
CONST_UTF8 EQU 1
CONST_INTEGER EQU 3
CONST_FLOAT EQU 4
CONST_LONG EQU 5
CONST_DOUBLE EQU 6
CONST_CLASS EQU 7
CONST_STRING EQU 8
CONST_FIELDREF EQU 9
CONST_METHDREF EQU 10
CONST_IFACEMETHDREF EQU 11
CONST_NAMETYPE EQU 12
;*
;* DATA TYPE IDENTIFIERS
;*
T_BOOLEAN EQU 4 ; 0
T_CHAR EQU 5 ; 1
T_FLOAT EQU 6 ; 2
T_DOUBLE EQU 7 ; 3
T_BYTE EQU 8 ; 0
T_SHORT EQU 9 ; 1
T_INT EQU 10 ; 2
T_LONG EQU 11 ; 3
; 0
T_ARRAY EQU 13 ; 1
T_REF EQU 14 ; 2
;*
;* SYSTEM CLASS INDECES
;*
CL_NULL EQU 0
CL_OBJ EQU 1
CL_ARRAY EQU 2
CL_STR EQU 3
CL_SYS EQU 3
;*
;* THREAD STATES
;*
S_FREE EQU 0 ; NOT ALLOCATED
S_IDLE EQU 1 ; WAITING TO BE SET TO RUN
S_SUSPEND EQU 2 ; SUSPENDED
S_SLEEP EQU 3 ; SLEEPING
S_BLOCK EQU 4 ; BLOCKED ON OBJECT LOCK
S_WAITNOTIFY EQU 5 ; WAITING FOR NOTIFY
S_WAITIO EQU 8 ; WAIT FOR I/O = 8 + SLOT #
S_RUNNABLE EQU 16 ; WAITING TO RUN
S_RUNNING EQU 17 ; RUNNING
S_INTERRUPTED EQU 18 ; INTERRUPTED
;*
;* DEVICE CONTROL COMMANDS
;* COMBINED WITH SLOT NUMBER IN BITS 7-4
;*
IOCTL_ID EQU (1<<3) ; IDENTIFY DEVICE
;IOCTL_INIT EQU (2<<3) ; INIT DEVICE
IOCTL_OPEN EQU (3<<3) ; ENABLE DEVICE FOR PROGRAM USE
IOCTL_CLOSE EQU (4<<3) ; DISABLE DEVICE FOR PROGRAM USE
IOCTL_AVAIL EQU (5<<3) ; CHARS AVAILABLE
IOCTL_SPACE EQU (6<<3) ; SPACE TO WRITE
IOCTL_INBUFF EQU (7<<3) ; IN BUFFER ADDRESS
IOCTL_INBUFFSZ EQU (8<<3) ; IN BUFFER SIZE
IOCTL_OUTBUFF EQU (9<<3) ; OUT BUFFER ADDRESS
IOCTL_OUTBUFFSZ EQU (10<<3) ; OUT BUFFER SIZE
IOCTL_DEACTIVATE EQU (11<<3) ; DEACTIVATE DEVICE COMPLETELY
;
; CONSOLE IOCTLS
;
CONCTL_HOME EQU (16<<3)
CONCTL_GOTOXY EQU (17<<3) ; XY LOC IN XY REGS
CONCTL_TEXT80 EQU (20<<3) ; SET 80 COLUMN TEXT MODE
;
; MOUSE IOCTLS
;
MOUSECTL_CALLFW EQU (16<<3) ; CALL FW FUNC IN X REG
MOUSECTL_NOIRQ EQU (17<<3) ; UNINSTALL VBL INTERRUPT
MOUSECTL_CLAMPX EQU (18<<3)
MOUSECTL_CLAMPY EQU (19<<3)
MOUSECTL_READMOUSE EQU (20<<3) ; READ MOUSE STATUS/POSITION
;
; SERIAL PORT IOCTLS
;
SERCTL_BAUD EQU (16<<3)
SERCTL_STOPBITS EQU (17<<3)
SERCTL_PARITYBITS EQU (18<<3)
SERCTL_DATABITS EQU (19<<3)
SERCTL_XONXOFF EQU (20<<3)
;
; ETHERNET IOCTLS
;
ETHRCTL_RECVPKT EQU (16<<3)
ETHRCTL_XMITPKT EQU (17<<3)
ETHRCTL_DONEPKT EQU (18<<3)
ETHRCTL_SETMAC01 EQU (19<<3)
ETHRCTL_SETMAC23 EQU (20<<3)
ETHRCTL_SETMAC45 EQU (21<<3)
;
; GRAPHICS TABLET IOCTLS
;
GTCTL_CALLFW EQU (16<<3) ; CALL FW TO READ POS W/O DELAY