|
|
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: R T
Length: 49184 (0xc020)
Types: TextFile
Names: »RAISING_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 "RAISING"
.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 __raise_exception
.gbl.l __propagate_exception
.gbl.l __raise_constraint_error
.gbl.l __raise_numeric_error
.gbl.l __raise_program_error
.gbl.l __raise_storage_error
.gbl.l __raise_tasking_error
.gbl.l __unelaborated_subprogram
.gbl.l __debug.raise
.gbl.l __prolog_check
.gbl.l __claim_check
.gbl.l __undefined_trap
.gbl.l __put_error_msg_and_exit
.ext.l __process_descriptor_pointer
.ext.l __runtime_entry_pointer
.ext.l __get_exception_indirect
.ext.l __set_exception_indirect
.ext.l __trace_exception
.ext.l __error_path
.ext.l __constraint_error
.ext.l __numeric_error
.ext.l __program_error
.ext.l __storage_error
.ext.l __tasking_error
no_op equ 16#4e71# ; the opcode "nop"
subprogram sp_rt,sp.internal,linkage.simple
00000000 __raise_tasking_error:
00000000 41ED0000 lea (__tasking_error:16,a5),a0
00000004 6000 bra.b $move_and_raise
subprogram sp_rt,sp.internal,linkage.simple
00000006 __raise_storage_error:
00000006 41ED0000 lea (__storage_error:16,a5),a0
0000000A 6000 bra.b $move_and_raise
subprogram sp_rt,sp.internal,linkage.simple
0000000C __Raise_Numeric_Error:
0000000C 41ED0000 lea (__numeric_error:16,a5),a0
00000010 6000 bra.b $move_and_raise
subprogram sp_rt,sp.internal,linkage.simple
00000012 __unelaborated_subprogram:
00000012 __raise_program_error:
00000012 41ED0000 lea (__program_error:16,a5),a0
00000016 6000 bra.b $move_and_raise
subprogram sp_rt,sp.internal,linkage.simple
00000018 __raise_constraint_error:
00000018 41ED0000 lea (__constraint_error:16,a5),a0
0000001C $move_and_raise:
0000001C 2008 move.l a0,d0
0000001E 60000000 bra.w __raise_exception
;
; fall through to __Raise_Exception
;
subprogram sp_rt,sp.internal,linkage.simple
00000022 __raise_exception:
00000022 2F17 move.l (a7),-(a7) ; Save copy of raise pc
statement 0,0,1
00000024 2F00 move.l d0,-(a7) ; push exception id
statement 0,0,2
00000026 2F00 move.l d0,-(a7) ; push exception id
statement 0,0,3
00000028 2075017000000000 movea.l (__Set_Exception_Indirect,a5),a0; routine to set Exception_Id
00000030 4E90 jsr (a0) ; for current context
statement 0,0,2
00000032 61FF00000000 bsr.l __trace_exception
statement 0,0,1
; The debugger will set a breakpoint at the following NOP in order to
; intercept the raise of all exceptions. At this point, the raise PC
; must be on the top of the stack. It is only used by the debugger, so
; it is immediately thrown away when continuing beyond this point.
;
00000038 __debug.raise:
00000038 4E71 nop ; debugger breakpoint on NOP
0000003A 588F addq.l #4,a7 ; Remove raise pc
statement 0,0,0
0000003C __propagate_exception:
.local
0000003C 202E0004 $search:move.l (4,a6),d0 ; get handler for current frame
00000040 6600 bne.b handler_found ; any handler ?
00000042 4E5E $pop: unlk a6 ; no handler, so unwind frame
00000044 60F6 bra.b $search ; try next frame
00000046 handler_found:
00000046 2040 movea.l d0,a0 ; a0 := handler address
00000048 0C504E71 cmpi.w #no_op,(a0) ; is it a finalization handler?
0000004C 6600 bne.b $finalize
0000004E 2F08 move.l a0,-(a7) ; save handler address
statement 0,0,1
00000050 2075017000000000 movea.l (__get_exception_indirect,a5),a0
00000058 4E90 jsr (a0) ; d0 := exception id
0000005A 4E75 rts ; invoke handler
0000005C $finalize:
0000005C 43FAFFDE lea ($search:16,pc),a1 ; a1 := address of unwinder
00000060 2D490008 move.l a1,(8,a6) ; replace return pc in frame
00000064 4ED0 jmp (a0) ; invoke handler
;
; procedure prolog_check (amount : natural);
;
; Amount is passed in D0; This routine may alter D0, D1, and A0.
;
subprogram sp_rt,sp.internal,linkage.simple
00000066 __prolog_check:
00000066 2075017000000000 movea.l (__process_descriptor_pointer,a5),a0
0000006E 2050 movea.l (a0),a0
00000070 D0A803AC add.l (art$stk_lo,a0),d0
00000074 B08F cmp.l sp,d0
00000076 6400 bhs.s out_of_stack
00000078 4E75 rts
;
; procedure Claim_Check (Amount : Natural);
;
; Amount is passed on the stack. This routine may not
; alter ANY registers.
;
subprogram sp_rt,sp.internal,linkage.simple
0000007A __claim_check:
0000007A 2F08 move.l a0,-(sp) ; save a0
0000007C 2075017000000000 movea.l (__process_descriptor_pointer,a5),a0
00000084 2050 movea.l (a0),a0
00000086 206803AC movea.l (art$stk_lo,a0),a0
0000008A D1EF0008 adda.l (8,sp),a0
0000008E BFC8 cmpa.l a0,sp
00000090 6500 blo.s out_of_stack
00000092 205F movea.l (sp)+,a0
00000094 4E740004 rtd #4
00000098 out_of_stack:
00000098 3035017000000000 move.w (__error_path,a5),d0 ; get path for error messages
000000A0 323C0004 move.w #stack$request$warning,d1 ; get error number
000000A4 00418100 ori.w #warning$code,d1 ; set high byte
000000A8 4E40 trap #os9_call ; make system call to
000000AA 000F .dc.w f$perr ; put error message
000000AC 60000000 bra.w __raise_storage_error ; raise exception
;
; procedure undefined_trap;
;
subprogram sp_rt,sp.internal,linkage.trap
000000B0 __undefined_trap:
statement 8,0,0
000000B0 2208 move.l a0, d1 ; save raise PC in d1
statement 1,0,0
000000B2 204D movea.l a5,a0 ; get address of register save area
000000B4 5088 addq.l #8,a0 ; skip d0, d1
000000B6 4CD800FC movem.l (a0)+,d2-d7 ; restore data registers
000000BA 5088 addq.l #8,a0 ; skip a0, a1
000000BC 4CD87C00 movem.l (a0)+,a2-a6 ; restore address registers
000000C0 2E49 movea.l a1,a7 ; restore stack pointer
000000C2 2F01 move.l d1,-(sp) ; push pc on stack
statement 16,0,0
000000C4 42A7 clr.l -(sp) ; push null for exception name
statement 16,0,1
000000C6 61FF00000000 bsr.l __trace_exception
statement 16,0,0
000000CC 323C0003 move.w #unhandled$main$trap$ferror,d1; get error number
000000D0 60000000 bra.w __put_error_msg_and_exit
subprogram sp_rt,sp.internal,linkage.simple
000000D4 __put_error_msg_and_exit:
000000D4 3035017000000000 move.w (__error_path,a5),d0 ; get path for error messages
000000DC 00418000 ori.w #error$code,d1 ; set high byte
000000E0 4E40 trap #os9_call ; make system call
000000E2 000F .dc.w f$perr ; to report error
000000E4 7201 moveq.l #some$error,d1 ; flag some error
000000E6 4E40 trap #os9_call ; terminate process
000000E8 0006 .dc.w f$exit
end_subprograms
.end
Program Section Name Kind Length Patches Fixups
-------------------------------- ---- ---------- ------- -------
ADA_RUNTIME_CODE Rel 234 3 31
DEBUG_BODY Rel 278 32 10
DEBUG_HDR_CU Rel 43 2 0
Standard include file: <none>
Object module version: 11
Assembled 4244 lines in 34.817 elapsed, 26.148 CPU.
7314 lines per elapsed minute.
9738 lines per CPU minute.
92 disk waits for this job.
1098684 bytes of heap used by this job.