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