|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: A T
Length: 44129 (0xac61)
Types: TextFile
Names: »ADAROOT_UTIL_LIST«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦24d1ddd49⟧
└─⟦this⟧
; The use of this system is subject to the software license terms and
; conditions agreed upon between Rational and the Customer.
;
; Copyright 1988 by Rational.
;
; RESTRICTED RIGHTS LEGEND
;
; Use, duplication, or disclosure by the Government is subject to
; restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
; Technical Data and Computer Software clause at 52.227-7013.
;
;
; Rational
; 3320 Scott Boulevard
; Santa Clara, California 95054-3197
;
; PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
; USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
; IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
; AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
; 1976. CREATED 1988. ALL RIGHTS RESERVED.
;
;
.module "ADAROOT_UTILITIES"
;
; This assembly file contains some utility routines which are
; shared by the sequential and tasking adaroots.
;
.include "^^standard_assembler_include_file"
00000000 .push_list
00000000 .pop_list
00000000 .list macro_expansion = none
.include "^^common.runtime_definitions"
;
; This number is used to check the compatibility
; of the program and the loaded shared runtime.
; The value must be incremented whenever an execution
; incompatible change is made in the runtime.
;
; Version Incompatible changes in this version
; ------- ------------------------------------
; 0 Initial release of shared runtime
;
; 1 Changed Os2000_Process_Defs to use
; special Ada work area rather than
; user accounting area.
;
; 2 Added 12 long words of spare storage
; in Runtime_Data; this will permit
; some addition of data in the shared
; runtime to be compatible.
;
; 3 1.) Rev 6 compiler
; 2.) Runtime entry point table now 16-bit
; offset from table to entry in words.
; 3.) Deleted some unnecessary shared data items.
; 4.) General cleanup
compatibility_version equ 3
;
; Amount of stack space reserved for the runtime in bytes
;
runtime$stack$cushion equ 1024
;
; Values for certain runtime error messages and warnings.
;
error$code equ 16#8000#
warning$code equ 16#8100#
elaboration$ferror equ 1
finalization$ferror equ 2
unhandled$main$trap$ferror equ 3
lib$exception$ferror equ 5
main$exception$ferror equ 6
init$trap$handler$ferror equ 37
insufficient$stack$ferror equ 44
no$runtime$ferror equ 45
rt$incompatible$ferror equ 46
task$exception$warning equ 1
heap$create$warning equ 2
stack$request$warning equ 4
;
; Values used in exit system call
;
No$Error equ 0
Some$Error equ 1
;
; Comp Unit id for all runtime units except predefined exceptions
;
runtime_compunit equ 17
;
; Comp Unit id for predefined exception
;
exception_compunit equ 1
;
; Subprogram kind for runtime suprograms
;
sp_rt equ 1
;
; Special statement numbers
;
stmt.end_prolog equ 1
stmt.begin_epilog equ 16#7FFF#
;
; Subprogram ids for debug directives within runtime
; entry points.
;
sp.internal equ 16#0_00#
sp.enum_image equ 16#1_00#
sp.enum_pos equ 16#1_01#
sp.enum_pred equ 16#1_02#
sp.enum_succ equ 16#1_03#
sp.enum_value equ 16#1_04#
sp.enum_width equ 16#1_05#
sp.int_image equ 16#1_06#
sp.int_value equ 16#1_07#
sp.int_width equ 16#1_08#
sp.allocate_collection equ 16#2_00#
sp.allocate_fixed_cell equ 16#2_01#
sp.deallocate_collection equ 16#2_02#
sp.deallocate_fixed_cell equ 16#2_03#
sp.collection_size equ 16#2_04#
sp.initialize_master equ 16#3_00#
sp.create_task equ 16#3_01#
sp.activate_offspring equ 16#3_02#
sp.notify_parent equ 16#3_03#
sp.task_end equ 16#3_04#
sp.await_dependents equ 16#3_05#
sp.task_completion equ 16#3_06#
sp.terminate_allocated_offspring equ 16#3_07#
sp.terminate_dependent_offspring equ 16#3_08#
sp.entry_call equ 16#3_09#
sp.conditional_entry_call equ 16#3_0A#
sp.timed_entry_call equ 16#3_0B#
sp.begin_accept equ 16#3_0C#
sp.end_accept equ 16#3_0D#
sp.quick_accept equ 16#3_0E#
sp.close_alternatives equ 16#3_0F#
sp.open_delay equ 16#3_10#
sp.open_entry equ 16#3_11#
sp.open_terminate equ 16#3_12#
sp.select_rendezvous equ 16#3_13#
sp.abort_multiple_tasks equ 16#3_14#
sp.check_return_task equ 16#3_15#
sp.delay_statement equ 16#3_16#
sp.entry_count equ 16#3_17#
sp.task_callable equ 16#3_18#
sp.task_stack_size equ 16#3_19#
sp.task_terminated equ 16#3_1A#
sp.raise_exception equ 16#4_00#
sp.raise_constraint_error equ 16#4_01#
sp.propagate_exception equ 16#4_02#
sp.stack_check equ 16#4_03#
sp.mantissa equ 16#5_00#
sp.large equ 16#5_01#
sp.fixed_multiply equ 16#5_02#
sp.compare_8_bit_unsigned equ 16#5_03#
sp.compare_8_bit_signed equ 16#5_04#
sp.compare_16_bit_unsigned equ 16#5_05#
sp.compare_16_bit_signed equ 16#5_06#
sp.compare_32_bit_unsigned equ 16#5_07#
sp.compare_32_bit_signed equ 16#5_08#
;
; Linkage mechanisms used in assembly routines.
;
; Identification of the mechanism in a .subprogram directive
; and information provided in .statement directives enable
; the debugger to find the return pc.
;
linkage.frame equ 16#00_00_00_00# ; return pc may be found at
; offset from frame pointer
linkage.simple equ 16#10_00_00_00# ; return pc may be found at
; offset from stack pointer
linkage.none equ 16#50_00_00_00# ; no return pc exists,
; in bottom routine
linkage.trap equ 16#60_00_00_00# ; in trap handling code
;
; Definitions for locking primitives
;
.offset 0 ; type Q_Element is
; record
00000008 element'size: ; end record;
;
; Ada task control block (TCB) definitions
;
.offset 0
00000050 tcb'size:
b.action_state.exception_pending equ 3
.include "^^common.os2000_definitions"
;
; Definitions for CCT (Communication Control Table)
;
cct_start equ 1024 ; CCT offset from window start
pi_cpt equ 88 ; Offset for pointer to CPT
;
; HSI addressing conventions
;
a32_size equ 16#02000000#;
;
; Offsets in the Configuration Parameter Table.
;
CPT_System_Time equ 0 ; Offset to system time HW pointer
CPT_Political_Time equ 4 ; Offset to political time offset
CPT_Current_Proc equ 64 ; Offset to Os9 current process pointer
CPT_MsgQ_Pointer equ 144 ; Offset to Message_Queues pointer
; points to MqGlobals control block
CPT_Ada_Runtime_Ptr equ 152 ; Offset in CPT to Ada Runtime pointer
; points to beginning of table of
; runtime entry points
;
; OS9 system call definitions
;
os9_call equ 0
;
; An OS9 system call is perform with the following sequence:
; trap #OS9_Call
; .dc.w call_code
;
; where call code is one of the following user mode calls
; or I/O calls
;
; User mode system call definitions
;
F$Exit equ 16#006#
F$Fork equ 16#003#
F$Icpt equ 16#009#
F$Julian equ 16#020#
F$Link equ 16#000#
F$PEAB equ 16#0FA#
F$PErr equ 16#00F#
F$RTE equ 16#01E#
F$SPrior equ 16#00D#
F$SRqMem equ 16#028#
F$STime equ 16#016#
F$STrap equ 16#00E#
F$Send equ 16#008#
F$Sleep equ 16#00A#
F$Time equ 16#015#
;
; OS9 I/O system call definitions
;
I$Close equ 16#08F#
I$Create equ 16#083#
I$Delete equ 16#087#
I$GetStt equ 16#08D#
I$Last equ 16#093#
I$Open equ 16#084#
I$Read equ 16#089#
I$ReadLn equ 16#08B#
I$SGetSt equ 16#092#
I$Seek equ 16#088#
I$SetStt equ 16#08E#
I$WritLn equ 16#08C#
I$Write equ 16#08A#;
;
; Access mode for Open
;
Read_Mode equ 1
Write_Mode equ 2
Execute equ 4
;
; Function codes for the I$GetStt call
;
SS_Opt equ 16#0000#
SS_Size equ 16#0002#
SS_Pos equ 16#0005#
SS_EOF equ 16#0006#
SS_DevNm equ 16#000E#
;
; Standard paths
;
Standard_Input equ 0
Standard_Output equ 1
Standard_Error equ 2
;
; I/O Error Codes
;
E$BPNum equ 16#00C9# ; bad path number
;
; OS9 trap definitions
;
T_AddErr equ 16#000C#
T_BusErr equ 16#0008#
T_IllIns equ 16#0010#
T_CHK equ 16#0018#
T_TRAPV equ 16#001C#
T_FPDivZer equ 16#00C8#
T_FPInxact equ 16#00C4#
T_FPNotNum equ 16#00D8#
T_FPOprErr equ 16#00D0#
T_FPOverFl equ 16#00D4#
T_FPUndrFl equ 16#00CC#
T_FPUnordC equ 16#00C0#
T_ZerDiv equ 16#0014#
;
; OS2000 process descriptor definitions
;
P$DefIOSiz equ 32 ; Default I/O data area size
P$NumPaths equ 32 ; Number of local paths
P$MemBlks equ 32 ; Number of separate memory blocks per process
.offset 0 ; Process descriptor
00000398 p$JobCon:
000003A8 P$AdaWrk:
000003E8 P$Last: ; Size of a process header
00000800 P$Stack: ; Top of system stack for process
00000800 P$Size: ; Size of process descriptor
;
; Values for process state (P$STATE)
;
P$SysState equ 16#80# ; Executing system state routine
P$TimSleep equ 16#40# ; Timed sleep
P$TimOut equ 16#20# ; time slice has expired
P$ImgChg equ 16#10# ; SPU/MMU protection map has changed
P$Condemn equ 16#02# ; process is condemned
P$Dead equ 16#01# ; Process has terminated
;
; Values for process queue id (P$QUEUID
;
P$QActive equ 'a' ; active process queue
P$QSleep equ 's' ; sleep queue
P$QWait equ 'w' ; Waiting queue
P$QEvent equ 'e' ; Event queue
P$QCurrnt equ '*' ; No queue, currently running
P$QDebug equ 'd' ; No queue, inactively debugging
P$QDead equ '-' ; No queue, dead process
;
; User register stack image
;
.offset 0
00000048 R$Size: ; Size of register package
;
; Status register equates
;
R$TraceBit equ 16#8000# ; Trace bit in SR word
R$SupvrBit equ 16#2000# ; Supervisor bit in SR word
R$IntMask equ 16#0700# ; Interrupt mask in SR word
R$Extend equ 16#0010# ; Extend bit
R$Negative equ 16#0008# ; Negative bit
R$Zero equ 16#0004# ; Zero bit
R$Ov equ 16#0002# ; Overflow
R$Carry equ 16#0001# ; Carry
; 68881 FPU context save area
.offset 0
comp_unit Runtime_Compunit
.sect ada_runtime_code,code,relocatable,alignment:=2
.gbl.l __delay_statement
.gbl.a __tcb_checksum
.gbl.a __atomic_add_bounded
.gbl.a __heap_align_value
.gbl.a __primitive_read
.gbl.a __primitive_write
.gbl.l __report_fatal_error
.gbl.l __issue_warning;
.ext.l __error_path
.ext.l __tdlystm_indirect
subprogram sp_rt,sp.internal,linkage.simple
00000000 __delay_statement:
00000000 2075017000000000 movea.l (__tdlystm_indirect,a5),a0
00000008 4ED0 jmp (a0)
;
; procedure Primitive_Write (Count : Natural; Buffer : System.Address);
;
subprogram sp_rt,sp.internal,linkage.simple
0000000A __primitive_read:
.local
$count'offset equ 4
$buffer'offset equ 8
0000000A 7000 moveq.l #standard_input,d0 ; standard input
0000000C 222F0004 move.l ($count'offset,sp),d1 ; max byte count
00000010 206F0008 movea.l ($buffer'offset,sp),a0 ; buffer address
00000014 4E40 trap #os9_call
00000016 0089 .dc.w i$read
00000018 4E740008 rtd #8
;
; procedure Primitive_Write (Count : Natural; Buffer : System.Address);
;
subprogram sp_rt,sp.internal,linkage.simple
0000001C __primitive_write:
.local
$count'offset equ 4
$buffer'offset equ 8
0000001C 7001 moveq.l #standard_output,d0 ; standard out
0000001E 222F0004 move.l ($count'offset,sp),d1 ; byte count
00000022 206F0008 movea.l ($buffer'offset,sp),a0 ; buffer address
00000026 4E40 trap #os9_call
00000028 008A .dc.w i$write
0000002A 4E740008 rtd #8
;
; procedure Report_Fatal_Warning (Id : Integer);
;
subprogram sp_rt,sp.internal,linkage.simple
0000002E __report_fatal_error:
.local
$id'offset equ 4
0000002E 3035017000000000 move.w (__error_path,a5),d0 ; get path for error messages
00000036 222F0004 move.l ($id'offset,sp),d1 ; get error number
0000003A 00418000 ori.w #error$code,d1 ; set high byte
0000003E 4E40 trap #os9_call ; make system call
00000040 000F .dc.w f$perr
00000042 4E740004 rtd #4
;
; procedure Issue_Warning (Id : Integer);
;
subprogram sp_rt,sp.internal,linkage.simple
00000046 __issue_warning:
.local
$id'offset equ 4
00000046 3035017000000000 move.w (__error_path,a5),d0 ; get path for error messages
0000004E 222F0004 move.l ($id'offset,sp),d1 ; get error number
00000052 00418100 ori.w #warning$code,d1 ; set high byte
00000056 4E40 trap #os9_call ; make system call
00000058 000F .dc.w f$perr
0000005A 4E740004 rtd #4
;
; function Tcb_Checksum (Id : Task_Id) return Integer;
;
subprogram sp_rt,sp.internal,linkage.simple
0000005E __tcb_checksum:
.local
$id'offset equ 4
0000005E 202F0004 move.l ($id'offset,a7),d0
00000062 4680 not.l d0
00000064 4E740004 rtd #4
;
; function Atomic_Add_Bounded (Result : System.Address;
; Addend : Integer;
; Max : Integer) return Integer;
;
subprogram sp_rt,sp.internal,linkage.simple
00000068 __atomic_add_bounded:
.local
$result'offset equ 4
$addend'offset equ 8
$max'offset equ 12
00000068 206F0004 movea.l ($result'offset,sp),a0 ; a0 := address of result
0000006C 2010 move.l (a0),d0 ; d0 := result
0000006E 2200 $retry: move.l d0,d1
00000070 D2AF0008 add.l ($addend'offset,sp),d1 ; d1 := result + addend
00000074 6900 bvs.b $overflow
00000076 B2AF000C cmp.l ($max'offset,sp),d1 ; check <= Maximum
0000007A 6E00 bgt.b $overflow
0000007C 0ED00040 cas.l d0,d1,(a0) ; atomic assign sum to sum_ref.all
00000080 66EC bne.b $retry ; try again if concurrent interference
00000082 4E74000C rtd #12 ; d0 has result value
00000086 $overflow:
00000086 7000 moveq.l #0,d0
00000088 4E74000C rtd #12
;
; function Heap_Align (Value : Integer) return Integer;
;
subprogram sp_rt,sp.internal,linkage.simple
0000008C __heap_align_value:
.local
$value'offset equ 4
0000008C 202F0004 move.l ($value'offset,sp),d0 ; d0 := value
00000090 5E80 addq.l #7,d0 ; add amount
00000092 020000F8 andi.b #16#F8#,d0
00000096 4E740004 rtd #4
end_subprograms
.end
Program Section Name Kind Length Patches Fixups
-------------------------------- ---- ---------- ------- -------
ADA_RUNTIME_CODE Rel 154 2 11
DEBUG_BODY Rel 136 16 8
DEBUG_HDR_CU Rel 37 2 0
Standard include file: <none>
Object module version: 11
Assembled 2955 lines in 24.855 elapsed, 18.720 CPU.
7133 lines per elapsed minute.
9471 lines per CPU minute.
7 disk waits for this job.
802687 bytes of heap used by this job.