233 lines
6.9 KiB
Plaintext
233 lines
6.9 KiB
Plaintext
|
;**********************************************************************
|
|||
|
;
|
|||
|
; Copyrigth (C) 1984 Logitech. All Rights Reserved.
|
|||
|
;
|
|||
|
; Permission is hereby granted to registered users to use or
|
|||
|
; abstract the following program in the implementation of
|
|||
|
; customized versions. This permission does not include the
|
|||
|
; right to redistribute the source code of this program.
|
|||
|
;
|
|||
|
;
|
|||
|
; Common Definitions, Run-Time-Support for Modula-2 System (RTS).
|
|||
|
;
|
|||
|
; Version: 8086 processor, RAM-version
|
|||
|
; IBM-PC under PC-DOS 1.1 and 2.0
|
|||
|
;
|
|||
|
; Release: 1.1 - Dec 84
|
|||
|
;
|
|||
|
; Copyright: LOGITECH SA.
|
|||
|
; CH-1143 Apples
|
|||
|
; Switzerland
|
|||
|
;
|
|||
|
; WARNING: This program has to be modified with utmost care!
|
|||
|
; Modula-2 programs contain calls to this assembly
|
|||
|
; part and therefore a user must not modify those
|
|||
|
; functions of this Run-Time Support which are
|
|||
|
; accessed through interrupt 'RTS_INT'.
|
|||
|
;
|
|||
|
;**********************************************************************
|
|||
|
|
|||
|
TRUE EQU 0FFFFH
|
|||
|
FALSE EQU 0
|
|||
|
|
|||
|
; The following definitions may be modified by a user,
|
|||
|
; to adapt the RTS to his particular system:
|
|||
|
|
|||
|
RTS_INT EQU 228
|
|||
|
; Interrupt vector for main entry in RTS. This vector is used by the
|
|||
|
; compiler. If you modify it, you have to correct the corresponding
|
|||
|
; value in the compiler (modula 'CompPara', see section 'System
|
|||
|
; Configuration' in Modula-2/86 User's Guide).
|
|||
|
|
|||
|
|
|||
|
NBR_ISR EQU 8
|
|||
|
; Number of interrupts that can be used together at any one time.
|
|||
|
; This parameter allows to adapt the size of tables to the really
|
|||
|
; needed size. If you want to treat more than 16 interrupts together,
|
|||
|
; you have to write additional interrupt service routines, each of
|
|||
|
; which consists of 2 instructions: NOP, CALL COM_ISR. See the
|
|||
|
; existing ones (named ISR0 through ISR15).
|
|||
|
|
|||
|
|
|||
|
MAX_MEM_FOR_M2 EQU 0FFFFH ; In number of paragraphs.
|
|||
|
; With this constant you can limit the total amount of memory
|
|||
|
; that will be used for the Modula-2 programs. The space used
|
|||
|
; for the Run-Time-Support (the program you are now looking at)
|
|||
|
; and for the Resident Part are not included in this memory size.
|
|||
|
; If this number is larger than the available memory, the total
|
|||
|
; physical memory will be used. Usually this number is therefore
|
|||
|
; set to 0FFFFH.
|
|||
|
|
|||
|
|
|||
|
KEEP_COM EQU TRUE
|
|||
|
; This switch is used to specify if the transient portion of
|
|||
|
; COMMAND.COM of the DOS operating system has to be preserved
|
|||
|
; in memory or if it can be overwritten by the Modula program.
|
|||
|
; It is convenient to keep COMMAND.COM in memory, on systems
|
|||
|
; with little memory however, that portion may be used too.
|
|||
|
; Its size is 17K bytes.
|
|||
|
|
|||
|
|
|||
|
DUMP_ENABLE EQU TRUE
|
|||
|
; With this switch you can disable the Post Mortem Dump generation.
|
|||
|
; During development phase of a program this switch should be turned
|
|||
|
; on, to allow debugging. In case your Modula System runs only
|
|||
|
; debugged programs (typically when you distribute an application),
|
|||
|
; this switch can be turned off.
|
|||
|
|
|||
|
|
|||
|
; End of user-modifiable definitions.
|
|||
|
;******************************************************
|
|||
|
|
|||
|
OS EQU 21H ; Interrupt Vector for MS-DOS
|
|||
|
SP_INI_SIZE EQU 18 ; 18 bytes are needed to prepare
|
|||
|
; the stack of a new process.
|
|||
|
SP_RESERVE EQU 20 ; Reserve for 10 PUSHes
|
|||
|
DEFAULT_FCB EQU 5CH ; inside the BASE_PAGE
|
|||
|
DEFAULT_DMA EQU 80H ; inside the BASE_PAGE
|
|||
|
NIL_SEG EQU 0FFFFh
|
|||
|
NIL_OFF EQU 0FFFFH ; Offset value for a NIL pointer
|
|||
|
; Note: NIL = highest legal address
|
|||
|
NIL_CARD EQU 0FFFFH ; NIL value for a CARDINAL
|
|||
|
|
|||
|
|
|||
|
;cur_process equ [si] ; see RTS.ASM data segment
|
|||
|
|
|||
|
ProcessDescriptor STRUC
|
|||
|
; The type 'ProcessDescriptor' in module 'System'
|
|||
|
; must have the same structure!
|
|||
|
PD_AX dw 0
|
|||
|
PD_BX dw 0
|
|||
|
PD_CX dw 0
|
|||
|
PD_DX dw 0
|
|||
|
PD_SP dw 0
|
|||
|
PD_BP dw 0
|
|||
|
PD_SI dw 0
|
|||
|
PD_DI dw 0
|
|||
|
PD_DS dw 0
|
|||
|
PD_SS dw 0
|
|||
|
PD_ES dw 0
|
|||
|
PD_CS dw 0
|
|||
|
PD_IP dw 0
|
|||
|
PD_FLAGS dw 0 ; processor flags register
|
|||
|
PD_STATUS dw 0 ; program/process status
|
|||
|
PD_PROG_ID dw 1 ; default program id
|
|||
|
PD_AUX_ID dw 0 ; (not yet used)
|
|||
|
PD_SHARED_ID dw 1 ; prog id of last shared level
|
|||
|
PD_FATHER_PROC dd 0FFFFffffh
|
|||
|
; Points to the 'father process' descriptor
|
|||
|
; The father process is the main process of
|
|||
|
; a program (overlay). The father itself has
|
|||
|
; no father (NIL value). This is used to
|
|||
|
; terminate the whole program if a 'son process'
|
|||
|
; terminates.
|
|||
|
unused dw 0
|
|||
|
PD_PRIO_MASK dw 0 ; Interrupt mask for priority level of
|
|||
|
; this process
|
|||
|
PD_dbug_status dw 0 ; to tell debugger state of pgm
|
|||
|
PD_PROG_END dd 0 ; Program End Stack
|
|||
|
PD_INT_VECT dw 0 ; Interrupt Vector
|
|||
|
PD_OLD_ISR dd 0 ; Old addr of Int Service R.
|
|||
|
PD_INT_PROC dd 0 ; Addr, where to store the
|
|||
|
; interrupted process (in ISR)
|
|||
|
PD_HEAP_BASE dd 0 ; Heap Base (initially after code)
|
|||
|
PD_HEAP_TOP dd 0 ; Heap Top (= highwater marker)
|
|||
|
PD_MOD_TABLE dd 0FFFFffffh ; Pointer to first Module Descriptor
|
|||
|
|
|||
|
ProcessDescriptor ENDS
|
|||
|
|
|||
|
NBR_FCT EQU 46
|
|||
|
; Number of existing functions in RTS
|
|||
|
|
|||
|
RESET_FCT EQU 0
|
|||
|
HALT_FCT EQU 1
|
|||
|
TRANSFER_FCT EQU 2
|
|||
|
IOTRANSFER_FCT EQU 3
|
|||
|
NEWPROCESS_FCT EQU 4
|
|||
|
MON_ENTRY_FCT EQU 5
|
|||
|
MON_EXIT_FCT EQU 6
|
|||
|
LISTEN_FCT EQU 7
|
|||
|
SAVE_RET_FCT EQU 8
|
|||
|
REST_RET_FCT EQU 9
|
|||
|
SET_RET_FCT EQU 10
|
|||
|
TERMINATE_FCT EQU 11
|
|||
|
CASE_1_FCT EQU 12
|
|||
|
CASE_2_CARD_FCT EQU 13
|
|||
|
CASE_2_INT_FCT EQU 14
|
|||
|
CASE_3_CARD_FCT EQU 15
|
|||
|
CASE_3_INT_FCT EQU 16
|
|||
|
CASE_ERR_FCT EQU 17
|
|||
|
PAR_COPY_FCT EQU 18
|
|||
|
DYNPAR_COPY_FCT EQU 19
|
|||
|
STACK_CHECK_FCT EQU 20
|
|||
|
FREE_INT_FCT EQU 21
|
|||
|
WRT_STATUS_FCT EQU 22
|
|||
|
GET_PD_ADDRESS EQU 23
|
|||
|
ALLOC_HEAP_FCT EQU 24
|
|||
|
FCT_RET_ERR_FCT EQU 25
|
|||
|
NORM_ADDR_FCT EQU 26
|
|||
|
ADD_ADDR_FCT EQU 27
|
|||
|
ADD_ADDR_CARD_FCT EQU 28
|
|||
|
SUB_ADDR_FCT EQU 29
|
|||
|
SUB_ADDR_CARD_FCT EQU 30
|
|||
|
EQ_ADDR_FCT EQU 31
|
|||
|
GT_ADDR_FCT EQU 32
|
|||
|
GT_EQ_ADDR_FCT EQU 33
|
|||
|
CONV_ADDR_CARD_FCT EQU 34
|
|||
|
CARD_OVF_FCT EQU 35
|
|||
|
INTEGER_OVF_FCT EQU 36
|
|||
|
RANGE_ERR_FCT EQU 37
|
|||
|
PSP_PTR_FCT EQU 38
|
|||
|
DEBUG_MODE_FCT EQU 39
|
|||
|
addr_ovffct equ 40
|
|||
|
term_proc equ 41
|
|||
|
real_ovf_fct equ 42
|
|||
|
real_udf_fct equ 43
|
|||
|
get_device_status_fct equ 44
|
|||
|
set_device_status_fct equ 45
|
|||
|
|
|||
|
;********************************************************
|
|||
|
;The Error-codes:
|
|||
|
;********************************************************
|
|||
|
; Correspond to the enumeration type 'Status' of
|
|||
|
; module 'System'.
|
|||
|
|
|||
|
HIGHEST_ERR_CODE EQU 26
|
|||
|
|
|||
|
NORMAL_CODE EQU 0
|
|||
|
WARNED_CODE EQU 1
|
|||
|
STOP_CODE EQU 2
|
|||
|
ASSERTED_CODE EQU 3
|
|||
|
HALT_CODE EQU 4
|
|||
|
|
|||
|
CASE_ERR_CODE EQU 5
|
|||
|
STACK_OVF_CODE EQU 6
|
|||
|
HEAP_OVF_CODE EQU 7
|
|||
|
FCT_RET_ERR_CODE EQU 8
|
|||
|
ADDR_OVF_CODE EQU 9
|
|||
|
REAL_OVF_CODE EQU 10
|
|||
|
real_udf_code equ 11
|
|||
|
bad_operand equ 12
|
|||
|
CARD_OVF_CODE EQU 13
|
|||
|
INTEGER_OVF_CODE EQU 14
|
|||
|
RANGE_ERR_CODE EQU 15
|
|||
|
ZERO_DIVIDE_CODE EQU 16
|
|||
|
PROCESS_END_CODE EQU 17
|
|||
|
|
|||
|
LOAD_ERR_CODE EQU 18
|
|||
|
CALL_ERR_CODE EQU 19
|
|||
|
NO_PROG_CODE EQU 20
|
|||
|
NO_MODULE_CODE EQU 21
|
|||
|
INCOMPAT_MOD_CODE EQU 22
|
|||
|
BAD_FILE_CODE EQU 22
|
|||
|
; may be used in an application program
|
|||
|
ILL_INSTR_CODE EQU 24
|
|||
|
; possible with the 8087
|
|||
|
ILL_FCT_CODE EQU 25
|
|||
|
; illegal RTS-function or illegal
|
|||
|
; error-code
|
|||
|
INT_ERR_CODE EQU 26
|
|||
|
; attempt to treat too many
|
|||
|
; interrupts at the same time
|
|||
|
|
|||
|
|