DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ A T

⟦26f24a82c⟧ TextFile

    Length: 96486 (0x178e6)
    Types: TextFile
    Names: »ADAROOT_SHARED_LIST«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦f794ecd1d⟧ 
            └─⟦24d1ddd49⟧ 
                └─⟦this⟧ 

TextFile

                                                ;    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_SHARED"
                                                
                                                ;
                                                ;  This assembly file is the root of the ADA runtime support
                                                ;  for an programs which may create tasks.
                                                ;
                                                
                                                
                                                        .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
                                                
                                                ;
                                                ;  Entry points from the elaboration code for a sequential program
                                                ;
                                                        .gbl.l  _.start_sequential
                                                        .gbl.l  __middle_sequential
                                                        .gbl.l  _.finish_sequential
                                                ;
                                                ;  Entry points from the elaboration code for a tasking program
                                                ;
                                                        .gbl.l  _.start_tasking
                                                        .gbl.l  __middle_tasking
                                                        .gbl.l  _.finish_tasking
                                                
                                                        .gbl.l  __process_exit          ; called from task end   
                                                        .gbl.l   __undefined_trap       ; referenced in module header
                                                        .gbl.l  __get_fp                ; return current frame pointer
                                                
                                                        .ext.l  __root_finish_return
                                                        .ext.l  __task_create_return
                                                        .ext.l  __task_finish_return
                                                
                                                        .ext.l  __rt_elaborate_indirect
                                                        .ext.l  __rt_finalize_indirect
                                                
                                                        .ext.l  __heap_ptr;
                                                        .ext.l  __heap_size_var;
                                                        .ext.l  __os_param_ptr;
                                                        .ext.l  __os_param_size;
                                                        .ext.l  __module_base_address
                                                        .ext.l  __global_base
                                                        .ext.l  __root_tcb
                                                        .ext.l  __root_task_id
                                                        .ext.l  __data_size_var
                                                        .ext.l  __main_code_start_var
                                                        .ext.l  __task_code_start_var
                                                
                                                        .ext.a  __msgq_entry_pointer
                                                        .ext.a  __process_descriptor_pointer
                                                        .ext.a  __runtime_entry_pointer
                                                
                                                        .ext.l  __report_fatal_error
                                                        .ext.l  __issue_warning
                                                        .ext.l  __main_handler_ferror
                                                        .ext.l  __error_path
                                                
                                                        .ext.l  __sequential_finalization
                                                        .ext.l  __sequential_elaboration
                                                        .ext.l  __tasking_elaboration
                                                        .ext.l  __tasking_finalization
                                                        .ext.l  __task_end
                                                
                                                        .ext.l  __raise_exception
                                                        .ext.l  __program_error
                                                        .ext.l  __numeric_error
                                                        .ext.l  __constraint_error
                                                        .ext.l  __trace_exception
                                                
                                                        .ext.l  __tasking_lock
                                                        .ext.l  __serialization.acquire_lock
                                                        .ext.l  __release_task_lock
                                                
                                                        .ext.l  __set_exception
                                                        .ext.l  __get_exception
                                                        .ext.l  __set_exception_indirect
                                                        .ext.l  __get_exception_indirect
                                                
                                                        .ext.l  __abort_main_program
                                                        .ext.l  __abort_main_indirect
                                                
                                                        .ext.l  __sequential_delay_statement
                                                        .ext.l  __tasking_delay_statement
                                                        .ext.l  __tdlystm_indirect
                                                
                                                        .ext.l  __sequential_signal_intercept
                                                        .ext.l  __tasking_signal_intercept
                                                        .ext.l  __signal_intercept_indirect
                                                
                                                        .ext.l  __runtime_compatibility_value
                                                
                                                ;
                                                ;    Definitions of 68881 trap enable bit assignments and rounding mode
                                                ;
                                                
                                                        bsun$enable     equ 2#1000_0000_0000_0000#;
                                                        snan$enable     equ 2#0100_0000_0000_0000#;
                                                        operr$enable    equ 2#0010_0000_0000_0000#; 
                                                        ovfl$enable     equ 2#0001_0000_0000_0000#;
                                                        unfl$enable     equ 2#0000_1000_0000_0000#;
                                                        dz$enable       equ 2#0000_0100_0000_0000#;
                                                        inex2$enable    equ 2#0000_0010_0000_0000#;
                                                        inex1$enable    equ 2#0000_0001_0000_0000#;
                                                
                                                        m68881$traps    equ operr$enable ! ovfl$enable ! dz$enable;
                                                
                                                        round$extended  equ 2#0000_0000_0000_0000#;
                                                        round$single    equ 2#0000_0000_0100_0000#;
                                                        round$double    equ 2#0000_0000_1000_0000#;
                                                        round$nearest   equ 2#0000_0000_0000_0000#;
                                                        round$zero      equ 2#0000_0000_0001_0000#;
                                                        round$minf      equ 2#0000_0000_0010_0000#;
                                                        round$pinf      equ 2#0000_0000_0011_0000#;
                                                
                                                        m68881$round    equ round$extended ! round$nearest
                                                    
                                                        m68881$control  equ m68881$traps ! m68881$round
                                                        
                                                ;
                                                ; Return frame pointer one level up.  Thus is A calls B which calls
                                                ; __get_fp, the value returned is the frame pointer for routine A.
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
                                                        .local
                                                        .align  2
        00000000                                __get_fp:
        00000000   200E                                 move.l  a6,d0                                   ; get current fp
        00000002   20300990                             move.l  (d0.l*1),d0                             ; Get fp one level up
        00000006   4E75                                 rts                                             ; -> Done
                                                
                                                ;
                                                \f


                                                ;
                                                ;   Initial entry point from the program after fork;
                                                ;   the global data pointer has already been setup
                                                ;   in the unshared program code.  The current process id
                                                ;   has been moved from D0 to D4.  Address to return
                                                ;   to in the program on top of stack
                                                ;
                                                
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
        00000008                                _.start_sequential:
                                                        .local
        00000008   41FB017000000000                     lea     (__sequential_elaboration,pc),a0        ; store indirection
        00000010   2B88017000000000                     move.l  a0,(__rt_elaborate_indirect,a5)         ;   for runtime elab
        00000018   41FB017000000000                     lea     (__sequential_finalization,pc),a0       ; store indirection
        00000020   2B88017000000000                     move.l  a0,(__rt_finalize_indirect,a5)          ;   for runtime finalize
                                                
        00000028   41FB017000000000                     lea     (set$current$exception,pc),a0           ; store indirection
        00000030   2B88017000000000                     move.l  a0,(__set_exception_indirect,a5)        ;   for set_exception
        00000038   41FB017000000000                     lea     (get$current$exception,pc),a0           ; store indirection
        00000040   2B88017000000000                     move.l  a0,(__get_exception_indirect,a5)        ;   for get_exception
        00000048   41FB017000000000                     lea     (__sequential_delay_statement,pc),a0    ; store indirection
        00000050   2B88017000000000                     move.l  a0,(__tdlystm_indirect,a5)              ;   for delay_statement
        00000058   41FB017000000000                     lea     (__sequential_signal_intercept,pc),a0   ; store indirection
        00000060   2B88017000000000                     move.l  a0,(__signal_intercept_indirect,a5)     ;   for signal_intercept
                                                
        00000068   6000                                 bra.b   common_start
                                                
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
        0000006A                                _.start_tasking:
                                                        .local
        0000006A   41FB017000000000                     lea     (__tasking_elaboration,pc),a0           ; store indirection
        00000072   2B88017000000000                     move.l  a0,(__rt_elaborate_indirect,a5)         ;   for runtime elab
        0000007A   41FB017000000000                     lea     (__tasking_finalization,pc),a0          ; store indirection
        00000082   2B88017000000000                     move.l  a0,(__rt_finalize_indirect,a5)          ;   for runtime finalize
                                                
        0000008A   41FB017000000000                     lea     (__set_exception,pc),a0                 ; store indirection
        00000092   2B88017000000000                     move.l  a0,(__set_exception_indirect,a5)        ;   for set_exception
        0000009A   41FB017000000000                     lea     (__get_exception,pc),a0                 ; store indirection
        000000A2   2B88017000000000                     move.l  a0,(__get_exception_indirect,a5)        ;   for get_exception
        000000AA   41FB017000000000                     lea     (__tasking_delay_statement,pc),a0       ; store indirection
        000000B2   2B88017000000000                     move.l  a0,(__tdlystm_indirect,a5)              ;   for delay_statement
        000000BA   41FB017000000000                     lea     (__tasking_signal_intercept,pc),a0      ; store indirection
        000000C2   2B88017000000000                     move.l  a0,(__signal_intercept_indirect,a5)     ; for signal_intercept
        000000CA   41FB017000000000                     lea     (__abort_main_program,pc),a0            ; store indirection
        000000D2   2B88017000000000                     move.l  a0,(__abort_main_indirect,a5)           ;   for abort main
                                                ;
                                                ;       setup base frame and exception handler
                                                ;
        000000DA                                common_start:
                                                        .local
        000000DA   205F                                 movea.l (sp)+,a0                ; a0 := return pc
        000000DC   49F5017000000000                     lea.l   (__root_tcb,a5),a4      ; compute address of root tcb
        000000E4   2F0C                                 move.l  a4,-(a7)                ; push root tcb ptr on the stack;
        000000E6   42A7                                 clr.l   -(a7)                   ; bogus return pc
        000000E8   487A0000                             pea     (main_handler:16,pc)    ; setup handler
        000000EC   42A7                                 clr.l   -(a7)                   ; bogus saved fp
        000000EE   2C4F                                 movea.l a7,a6                   ; establish frame
        000000F0   2F08                                 move.l  a0,-(sp)                ; save return pc
                                                ;
                                                ;       setup the unhandled exception message
                                                ;
        000000F2   3BBC0001017000000000                 move.w  #elaboration$ferror,(__main_handler_ferror,a5)
                                                ;
                                                ;       setup info in root tcb
                                                ;
        000000FC   2E35017000000000                     move.l  (__data_size_var,a5),d7         ; get program data area size
        00000104   D3C7                                 adda.l  d7,a1                           ; compute low stack bound
        00000106   29490008                             move.l  a1,(tcb.stack_bounds.first,a4)  ; save low stack bound
        0000010A   9C87                                 sub.l   d7,d6                           ; subtract data from total  
        0000010C   9C85                                 sub.l   d5,d6                           ; subtract param size
        0000010E   2946000C                             move.l  d6,(tcb.stack_bounds.size,a4)   ; rest is stack size
                                                
        00000112   41F5017000000000                     lea.l   (__main_code_start_var,a5),a0   ;
        0000011A   29480010                             move.l  a0,(tcb.code_start,a4)          ; save code start pointer
        0000011E   29440014                             move.l  d4,(tcb.process_id,a4)          ; save process id
                                                
        00000122   2B8D017000000000                     move.l  a5,(__global_base,a5)           ; save global base register
        0000012A   2B8A017000000000                     move.l  a2,(__os_param_ptr,a5)          ; save parameter pointer
        00000132   2B85017000000000                     move.l  d5,(__os_param_size,a5)         ; save size of command line para
                                                ms
        0000013A   2B8B017000000000                     move.l  a3,(__module_base_address,a5)   ; save module base address
                                                
        00000142   41FA0000                             lea     (__task_code_start:16,pc),a0    ; save code start
        00000146   2B88017000000000                     move.l  a0,(__task_code_start_var,a5)   ;   for Activate_Offspring
                                                
        0000014E   2B8C017000000000                     move.l  a4,(__root_task_id,a5)          ; save ref to tcb for debugger
                                                ;
                                                ;   Setup pointers from CPT to message queues and
                                                ;   OS-2000 process descriptor; runtime entry table
                                                ;   pointer was setup in user program at jump into
                                                ;   this code.
                                                ;
                                                ;
        00000156   200F                                 move.l  sp,d0                           ; get current stack pointer
        00000158   0280FE000000                         andi.l  #(-a32_size),d0                 ; mask for high order bits
        0000015E   223009A00458                         move.l  (cct_start + pi_cpt,d0),d1      ; get cpt address
                                                
        00000164   243019A00090                         move.l  (cpt_msgq_pointer,d1),d2        ; get msgq table pointer
        0000016A   2B82017000000000                     move.l  d2,(__msgq_entry_pointer,a5)    ; store pointer
                                                
        00000172   207019A00040                         movea.l (cpt_current_proc,d1),a0        ; get process dscptr pointer
        00000178   2B88017000000000                     move.l  a0,(__process_descriptor_pointer,a5)
                                                
                                                ;
                                                ;   Setup Ada information in OS-2000 process descriptor
                                                ;   for the current process
                                                ;
                                                ;      Current registers:  A4 - Current Task Id (TCB pointer
                                                ;                          A1 - Low stack bound for task                    
                                                ;                          A0 - Address of process desc object
                                                ;
                                                ;   The runtime is compiled without stack checks, so a cushion
                                                ;   of stack space must be reserved to allow the most space
                                                ;   consumptive runtime call to execute.
                                                ;
        00000180   2050                                 movea.l (a0),a0                         ; get current process dsptr
        00000182   214C03A8                             move.l  a4,(art$tsk_id,a0)              ; store TCB pointer 
        00000186   214C03B8                             move.l  a4,(art$prgkey,a0)              ; store TCB pointer as key
        0000018A   43E90400                             lea     (runtime$stack$cushion,a1),a1   ; reserve stack cushion
        0000018E   214903AC                             move.l  a1,(art$stk_lo,a0)              ; store stack bound
        00000192   42A803B0                             clr.l   (art$savefp,a0)                 ; clear saved frame pointer
                                                ;
                                                ;       Check Standard I/O paths and open if not defined
                                                ;
        00000196                                $check_standard_input:
        00000196   303C0000                             move.w  #standard_input,d0              ; path number
        0000019A   323C0006                             move.w  #ss_eof,d1                      ; EOF function code
                                                
        0000019E   4E40                                 trap    #os9_call                       ; make status call              
                                                        
        000001A0   008D                                 .dc.w   i$getstt                   
                                                
        000001A2   6400                                 bcc.b   $check_standard_output          ; check for error
                                                
        000001A4   B27C00C9                             cmp.w   #e$bpnum,d1                     ; see if bad path error
        000001A8   6600                                 bne.b   $check_standard_output          ; if not bad path, then ok
                                                
        000001AA   41FA0000                             lea     ($nil_device_name:16,pc),a0     ; open nil device 
        000001AE   303C0001                             move.w  #read_mode,d0                   ; file access mode
        000001B2   4E40                                 trap    #os9_call                       ; make open call
        000001B4   0084                                 .dc.w   i$open   
                                                    
        000001B6                                $check_standard_output:
        000001B6   303C0001                             move.w  #standard_output,d0             ; path number
        000001BA   323C0006                             move.w  #ss_eof,d1                      ; EOF function code
                                                
        000001BE   4E40                                 trap    #os9_call                       ; make status call              
                                                        
        000001C0   008D                                 .dc.w   i$getstt                   
                                                
        000001C2   6400                                 bcc.b   $check_standard_error           ; check for error
                                                
        000001C4   B27C00C9                             cmp.w   #e$bpnum,d1                     ; see if bad path error
        000001C8   6600                                 bne.b   $check_standard_error           ; if not bad path, then ok
                                                
        000001CA   41FA0000                             lea     ($nil_device_name:16,pc),a0     ; open nil device 
        000001CE   303C0002                             move.w  #write_mode,d0                  ; file access mode
                                                
        000001D2   4E40                                 trap    #os9_call                       ; make open call
        000001D4   0084                                 .dc.w   i$open   
                                                    
        000001D6                                $check_standard_error:
        000001D6   303C0002                             move.w  #standard_error,d0              ; path number
        000001DA   323C0006                             move.w  #ss_eof,d1                      ; EOF function code
                                                
        000001DE   4E40                                 trap    #os9_call                       ; make status call              
                                                        
        000001E0   008D                                 .dc.w   i$getstt                   
                                                
        000001E2   6400                                 bcc.b   $init_error_file                ; check for error
                                                
        000001E4   B27C00C9                             cmp.w   #e$bpnum,d1                     ; see if bad path error
        000001E8   6600                                 bne.b   $init_error_file                ; if not bad path, then ok
                                                
        000001EA   41FA0000                             lea.l   ($nil_device_name:16,pc),a0     ; open nil device 
        000001EE   303C0002                             move.w  #write_mode,d0                  ; file access mode
                                                
        000001F2   4E40                                 trap    #os9_call                       ; make open call
        000001F4   0084                                 .dc.w   i$open   
                                                ;
                                                ;   Initialize path to error message file
                                                ;
        000001F6                                $init_error_file:
        000001F6   7001                                 moveq.l #read_mode,d0                   ; access mode = read
        000001F8   41FA0000                             lea.l   ($error_msg_file:16,pc),a0      ; pointer to file name
        000001FC   4E40                                 trap    #os9_call
        000001FE   0084                                 .dc.w   i$open
        00000200   6400                                 bcc.b   $got_emf                        ; check for errors
                                                
        00000202   7000                                 moveq.l #0,d0                           ; error, so set path to 0     
                                                
        00000204                                $got_emf:
        00000204   3B80017000000000                     move.w  d0,(__error_path,a5)            ; save path to error file
                                                
                                                ;
                                                ;   Check if user program was linked with a compatible version
                                                ;   of the Ada Runtime.
                                                ;
        0000020C   0C350003017000000000                 cmpi.b  #compatibility_version,(__runtime_compatibility_value,a5)
        00000216   6700                                 beq.b   $setup_trap_handlers            ; program/runtime compatible
                                                    
        00000218   2F3C0000002E                         move.l  #rt$incompatible$ferror,-(sp)   ; incompatible!
        0000021E   60000000                             bra.w   report_error_and_die            ; issue message and terminate
                                                ;
                                                ;   Setup trap handler and signal intercept
                                                ;
        00000222                                $setup_trap_handlers:
        00000222   307C0000                             movea.w #0,a0                           ; use current stack
        00000226   43FA0000                             lea     (trap$table:16,pc),a1           ; address of trap table
        0000022A   4E40                                 trap    #os9_call                       ; make system call
        0000022C   000E                                 .dc.w   f$strap                         ; to setup trap table
        0000022E   6400                                 bcc.b   $setup_fpu                      ; check for errors
                                                
        00000230   2F3C00000025                         move.l  #init$trap$handler$ferror,-(sp) ; if error then
        00000236   61FF00000000                         bsr.l   __report_fatal_error            ; issure error message 
                                                
        0000023C                                $setup_fpu:
        0000023C   F23C900000003400                     fmove.l #m68881$control,fpcr            ; enable 68881 traps and roundin
                                                g
                                                
        00000244   41FA0000                             lea     (__signal_intercept:16,pc),a0   ; signal interceptor
        00000248   224E                                 movea.l a6,a1                           ; save a6
        0000024A   2C4D                                 movea.l a5,a6                           ; ref to global data
        0000024C   4E40                                 trap    #os9_call                       ; install signal
        0000024E   0009                                 .dc.w   f$icpt                          ;   intercept routine
        00000250   2C49                                 movea.l a1,a6                           ; restore a6
                                                ;
                                                ;   Create heap for the program
                                                ;
        00000252   2035017000000000                     move.l  (__Heap_Size_Var,a5),d0         ; get heap size to request
        0000025A   6700                                 beq.b   $no_heap                        ; if zero, don't attempt allocat
                                                e
        0000025C   4E40                                 trap    #os9_call                       ; make system call to allocate m
                                                em
        0000025E   0028                                 .dc.w   f$srqmem
        00000260   6400                                 bcc.b   $heap_created                   ; if no error, then have memory
                                                
        00000262   2F3C00000002                         move.l  #heap$create$warning,-(sp)      ; else give warning msg
        00000268   61FF00000000                         bsr.l   __issue_warning                 ;    about failure
                                                
        0000026E                                $no_heap:
        0000026E   4280                                 clr.l   d0                              ; zero heap values              
                                                          
        00000270   2440                                 movea.l d0,a2                           ; clear pointer to heap
        00000272   2B80017000000000                     move.l  d0,(__heap_size_var,a5)         ; clear heap size var
                                                
        0000027A                                $heap_created:
        0000027A   2B8A017000000000                     move.l  a2,(__heap_ptr,a5)              ; store pointer to heap
                                                
        00000282   4EB5017100000000                     jsr     ([__rt_elaborate_indirect,a5])  ; elaborate runtime
        0000028A   3BBC0005017000000000                 move.w  #lib$exception$ferror,(__main_handler_ferror,a5)
        00000294   4E75                                 rts
                                                
        00000296   2F68302F7379732F6172745F6572 $error_msg_file:        .asciz  "/h0/sys/art_errmsg"
                   726D736700                   
                                                                        .align
        000002AA   2F6E696C00                   $nil_device_name:       .asciz  "/nil"
                                                                        .align
                                                
                                                ;
                                                ;       Exception handler for unhandled exceptions
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
        000002B0                                main_handler:
                                                        .local
        000002B0   4E71                                 nop
        000002B2   0C8000000000                         cmpi.l  #0,d0                           ; is this abort exception?
        000002B8   6700                                 beq.b   main_suicide
        000002BA   3235017000000000                     move.w  (__main_handler_ferror,a5),d1
        000002C2   2F01                                 move.l  d1,-(sp)
        000002C4   61FF00000000                         bsr.l   __report_fatal_error
                                                        
        000002CA                                main_suicide:
        000002CA   3BBC0002017000000000                 move.w  #finalization$ferror,(__main_handler_ferror,a5)
        000002D4   4EB5017100000000                     jsr     ([__rt_finalize_indirect,a5])  ; do runtime finalization
        000002DC   7201                                 moveq   #some$error,d1
        000002DE   4E40                                 trap    #os9_call
        000002E0   0006                                 .dc.w   f$exit
                                                ;
                                                ;       Finish entry point from program
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000002E2                                _.finish_sequential:
        000002E2                                _.finish_tasking:
        000002E2   3BBC0002017000000000                 move.w  #finalization$ferror,(__main_handler_ferror,a5)
        000002EC   4EB5017100000000                     jsr     ([__rt_finalize_indirect,a5])  ; do runtime finalization
        000002F4   4E75                                 rts
                                                ;
                                                ;   Called from the program after elaboration of library units
                                                ;   but before the call to the main program.
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000002F6                                __middle_sequential:
        000002F6                                __middle_tasking:
        000002F6   3BBC0006017000000000                 move.w  #main$exception$ferror,(__main_handler_ferror,a5)
        00000300   4E75                                 rts
                                                ;
                                                \f


                                                ;
                                                ;       Set and Get exception for sequential programs   
                                                ;
                                                ;       procedure Set_Current_Exception (Id : System.Address);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000302                                set$current$exception:
        00000302   2BAF0004017000000000                 move.l  (4,sp),(__root_tcb+tcb.exception_id,a5)
        0000030C   4E740004                             rtd     #4
                                                ;
                                                ;       function Get_Current_Exception return System.Address;
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000310                                get$current$exception:
        00000310   2035017000000000                     move.l   (__root_tcb+tcb.exception_id,a5),d0
        00000318   4E75                                 rts
                                                ;
                                                \f


                                                ;
                                                ; This is one jump away from the entry point for the module
                                                ; that is passed to the F$Fork call whenever an Ada task is
                                                ; activated. Interesting register values at this point include:
                                                ;
                                                ;    A1 - high end of our parameter area (= base of our stack)
                                                ;    A7- low end of our parameter area (= high end of our data area)
                                                ;    D0 - Our Os9 process id    
                                                ;    D6 - total memory allocation (A1 - D6 = low end our data area)
                                                ;                                                     
                                                ; Format of parameter area is defined by Tasking_Types.Fork_Parameters:
                                                ;    This code address (32 bits), followed by the base address for
                                                ;    global data (32 bits), followed by the address of our TCB (32 bits)
                                                ;    The TCB is completely filled in, except for the Stack_Bounds field,
                                                ;    which we initialize here. The Activations_In_Progress field contains
                                                ;    the task's static link.
                                                ;    The last object in Fork_Parameters is the address of an instance
                                                ;    variable.  This is zero unless the task is declared in the outer
                                                ;    scope of a shared code generic, in which case it needs the IV to
                                                ;    reference objects declared in the outermost scope (which go in the
                                                ;    instance variable).  If the Instance_Variable field of Fork_Parameters
                                                ;    is non-null, then the task is expecting the IV to be passed as its
                                                ;    second parameter.
                                                ;    
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
        0000031A                                __task_code_start:          
                                                        .local
                                                                      
        0000031A   266F000C                             movea.l (12,a7), a3                     ; the instance variable
        0000031E   286F0008                             movea.l (8,a7),a4                       ; our TCB's address
        00000322   2A6F0004                             movea.l (4,a7),a5                       ; base address for global data
                                                
        00000326   4297                                 clr.l   (a7)
        00000328   487B017000000000                     pea     (ada$task$exception$handler,pc) ; establish handler
        00000330   42A7                                 clr.l   -(a7)                           ; bogus saved fp
        00000332   2C4F                                 movea.l a7,a6                           ; establish frame pointer
        00000334   2F2C003C                             move.l  (tcb.activations_in_progress,a4),-(a7)  ; static link       
        00000338   4A8B                                 tst.l   a3                              ; Is the IV null?
        0000033A   67FF00000000                         beq.l   $push_tcb
        00000340   2F0B                                 move.l  a3,-(a7)                        ; if not, push it on the stack
                                                                                                                           
        00000342                                $push_tcb:
        00000342   2F0C                                 move.l  a4,-(a7)                        ; push TCB ref on stack
        00000344   2D4C000C                             move.l  a4,(12,a6)                      ; Put TCB where debugger expects
                                                 it
                                                
        00000348   29400014                             move.l  d0,(tcb.process_id,a4)          ; set process id in TCB
        0000034C   93C6                                 suba.l  d6,a1                           ; get low stack bound  
        0000034E   29490008                             move.l  a1,(tcb.stack_bounds.first,a4)  ; set low stack bound in TCB  
        00000352   2946000C                             move.l  d6,(tcb.stack_bounds.size,a4)   ; set stack size in TCB
                                                
                                                ;
                                                ;   Setup Ada information in OS-2000 process descriptor
                                                ;   for the current process
                                                ;
                                                ;      Current registers:  A4 - Current Task Id (TCB pointer
                                                ;                          A1 - Low stack bound for task                    
                                                ;
                                                ;   The runtime is compiled without stack checks, so a cushion
                                                ;   of stack space must be reserved to allow the most space
                                                ;   consumptive runtime call to execute.
                                                ;
                                                ;   Also, clear parent and sibling id's in process descriptor
                                                ;   so that descriptor will be reclaimed when process EXIT's.
                                                ;
        00000356   2075017100000000                     movea.l ([__process_descriptor_pointer,a5]),a0  ; get current descriptor
                                                
        0000035E   214C03A8                             move.l  a4,(art$tsk_id,a0)              ; store TCB pointer 
        00000362   43E90400                             lea     (runtime$stack$cushion,a1),a1   ; reserve stack cushion
        00000366   214903AC                             move.l  a1,(art$stk_lo,a0)              ; store stack bound
        0000036A   42A803B0                             clr.l   (art$savefp,a0)                 ; clear saved frame pointer
                                                
        0000036E   43F5017000000000                     lea     (__root_tcb,a5),a1              ; compute root tcb addr
        00000376   214903B8                             move.l  a1,(art$prgkey,a0)              ; store as program key
                                                
        0000037A   42680002                             clr.w   (p$pid,a0)                      ; clear parent id
        0000037E   42680004                             clr.w   (p$sid,a0)                      ; clear sibling id    
                                                ;
                                                ;   Setup trap handler for process
                                                ;
        00000382   307C0000                             movea.w #0,a0                           ; use current stack
        00000386   43FB017000000000                     lea     (trap$table,pc),a1              ; address of trap table
        0000038E   4E40                                 trap    #os9_call                       ; make system call
        00000390   000E                                 .dc.w   f$strap                         ; to setup trap table
        00000392   6400                                 bcc.b   $traps_done                     ; check error status     
                                                
        00000394   2F3C00000025                         move.l  #init$trap$handler$ferror,-(sp) ; if error
        0000039A   61FF00000000                         bsr.l   __report_fatal_error            ; then give error message
                                                
        000003A0                                $traps_done:
        000003A0   F23C900000003400                     fmove.l #m68881$control,fpcr            ; enable 68881 traps/rounding
                                                
        000003A8   41FB017000000000                     lea.l   (__signal_intercept,pc),a0      ; signal interceptor
        000003B0   224E                                 movea.l a6,a1                           ; save a6
        000003B2   2C4D                                 movea.l a5,a6                           ; ref to global data
        000003B4   4E40                                 trap    #os9_call                       ; install signal handler
        000003B6   0009                                 .dc.w   f$icpt
        000003B8   2C49                                 movea.l a1,a6                           ; restore a6
                                                
        000003BA   4875017000000000                     pea     (__tasking_lock,a5)             ; pass the lock
        000003C2   61FF00000000                         bsr.l   __serialization.acquire_lock    ; synchronize activation group
        000003C8   61FF00000000                         bsr.l   __release_task_lock             ; so low priority member cannot
                                                                                                ; starve higer priority
                                                
        000003CE   226EFFFC                             movea.l (-4,a6),a1                      ; pass static link in a1
        000003D2   4EF5017100000000                     jmp     ([__task_create_return,a5])     ; branch to user program 
                                                
                                                ;
                                                ;   Exception handler for an Ada task
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000003DA                                ada$task$exception$handler:
        000003DA   4E71                                 nop
        000003DC   4A80                                 tst.l   d0                              ; is this an abort exception
        000003DE   6700                                 beq.b   $task_suicide
        000003E0   2F3C00000001                         move.l  #task$exception$warning,-(sp)   ; unhandle exception warning
                                                        statement      0,0,1
                                                 
        000003E6   61FF00000000                         bsr.l   __issue_warning
                                                        statement      0,0,0
                                                 
                                                
        000003EC                                $task_suicide:
        000003EC   61FF00000000                         bsr.l   __task_end                      ; suicide (should not return)
                                                ;
                                                ;    procedure Suicide;
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000003F2                                __process_exit:
        000003F2   4EF5017100000000                     jmp     ([__task_finish_return,a5])     ; branch to user for exit
                                                ;
                                                ;
                                                ;
                                                ;
                                                        .local
                                                
        000003FA                                trap$table:
                                                
        000003FA   000C0000                     $e$0:   .dc.w   t_adderr,       program_error_trap - ($e$0 + 4);
        000003FE   00080000                     $e$1:   .dc.w   t_buserr,       program_error_trap - ($e$1 + 4)
        00000402   00100000                     $e$2:   .dc.w   t_illins,       program_error_trap - ($e$2 + 4)
        00000406   00180000                     $e$3:   .dc.w   t_chk,          constraint_error_trap - ($e$3 + 4)
        0000040A   001C0000                     $e$4:   .dc.w   t_trapv,        numeric_error_trap  - ($e$4 + 4)
        0000040E   00C80000                     $e$5:   .dc.w   t_fpdivzer,     numeric_error_trap  - ($e$5 + 4)
        00000412   00C40000                     $e$6:   .dc.w   t_fpinxact,     numeric_error_trap - ($e$6 + 4)
        00000416   00D80000                     $e$7:   .dc.w   t_fpnotnum,     numeric_error_trap - ($e$7 + 4)
        0000041A   00D00000                     $e$8:   .dc.w   t_fpoprerr,     numeric_error_trap  - ($e$8 + 4)
        0000041E   00D40000                     $e$9:   .dc.w   t_fpoverfl,     numeric_error_trap  - ($e$9 + 4)
        00000422   00CC0000                     $e$a:   .dc.w   t_fpundrfl,     numeric_error_trap - ($e$a + 4)
        00000426   00C00000                     $e$b:   .dc.w   t_fpunordc,     numeric_error_trap - ($e$b + 4)
        0000042A   00140000                     $e$c:   .dc.w   t_zerdiv,       numeric_error_trap  - ($e$c +4)
        0000042E   FFFF                                 .dc.w   -1
                                                ;
                                                ;       Unhandled trap handler
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.trap
                                                 
        00000430                                __unexpected_trap:
        00000430                                __undefined_trap:
                                                        .local
                                                        statement    8,0,0                      ; return pc in A0
                                                 
        00000430   6100                                 bsr.b   restore_trap_registers
                                                        statement    1,0,0                      ; return pc in D1
                                                 
        00000432   2E49                                 movea.l a1,a7                           ; restore stack pointer
                                                
        00000434   2F01                                 move.l  d1,-(sp)                        ; push pc on stack
                                                
                                                        statement 16,0,0
                                                 
        00000436   42A7                                 clr.l   -(sp)                           ; push null for exception name  
                                                   
                                                        statement 16,0,1
                                                 
        00000438   61FF00000000                         bsr.l   __trace_exception               ; go to tracing routine
                                                        statement 16,0,0
                                                 
                                                        
        0000043E   42A7                                 clr.l   -(sp)                           ; push null for exception name  
                                                   
                                                        statement 16,0,1
                                                 
        00000440   2F3C00000003                         move.l  #unhandled$main$trap$ferror,-(sp)
                                                        statement 16,0,2
                                                 
                                                
        00000446                                report_error_and_die:
        00000446   61000000                             bsr.w   __report_fatal_error
        0000044A   7201                                 moveq   #some$error,d1
        0000044C   4E40                                 trap    #os9_call
        0000044E   0006                                 .dc.w   f$exit
                                                ;
                                                ;       This subprogram restores register d2-d7/a2-a7
                                                ;       from the OS2000 provided save area
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.trap
                                                 
        00000450                                restore_trap_registers:
                                                        .local
                                                        statement    8,0,0              ; return pc in A0
                                                 
        00000450   2208                                 move.l  a0, d1                  ; save raise PC in d1
                                                        statement    1,0,0              ; return pc in D1
                                                 
        00000452   204D                                 movea.l a5,a0                   ; get address of register save area
        00000454   5088                                 addq.l  #8,a0                   ; skip d0, d1
        00000456   4CD800FC                             movem.l (a0)+,d2-d7             ; restore data registers
        0000045A   5088                                 addq.l  #8,a0                   ; skip a0, a1
        0000045C   4CD87C00                             movem.l (a0)+,a2-a6             ; restore address registers
        00000460   4E75                                 rts
                                                ;
                                                ;       trap handler for generating Constraint_Error
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.trap
                                                 
        00000462                                constraint_error_trap:
                                                        .local
                                                        statement 8,0,0                        ; raise pc in A0
                                                 
        00000462   6100                                 bsr.b   restore_trap_registers
                                                        statement 1,0,0                         ; raise pc in D1 
                                                 
        00000464   2E49                                 movea.l a1,a7                           ; restore stack pointer
        00000466   203C00000000                         move.l  #__constraint_error,d0
        0000046C   D08D                                 add.l   a5,d0
        0000046E   2F01                                 move.l  d1,-(a7)                        ; push return pc for "call"
                                                
                                                        statement 16,0,0
                                                 
        00000470   F2800000                             fnop                                    ; synchronize fpu exceptions
        00000474   60FF00000000                         bra.l   __Raise_Exception               ; raise exception
                                                ;
                                                ;       trap handler for generating Program_Error
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.trap
                                                 
        0000047A                                program_error_trap:
                                                        .local
                                                        statement 8,0,0                        ; raise pc in A0
                                                 
        0000047A   6100                                 bsr.b   restore_trap_registers
                                                        statement 1,0,0                         ; raise pc in D1 
                                                 
        0000047C   2E49                                 movea.l a1,a7                           ; restore stack pointer
        0000047E   203C00000000                         move.l  #__program_error,d0
        00000484   D08D                                 add.l   a5,d0
        00000486   2F01                                 move.l  d1,-(a7)                        ; push return pc for "call"
                                                
                                                        statement 16,0,0
                                                 
        00000488   F2800000                             fnop                                    ; synchronize fpu exceptions
        0000048C   60FF00000000                         bra.l   __Raise_Exception               ; raise exception
                                                ;
                                                ;       trap handler for generating Numeric_Error
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.trap
                                                 
        00000492                                numeric_error_trap:       
                                                        statement 8,0,0                 ; return pc in a0
                                                 
        00000492   6100                                 bsr.b   restore_trap_registers
                                                        statement 1,0,0                 ; raise pc in d1 
                                                 
        00000494   2E49                                 movea.l a1,a7                   ; restore stack pointer
        00000496   203C00000000                         move.l  #__numeric_error,d0
        0000049C   D08D                                 add.l   a5,d0
        0000049E   2F01                                 move.l  d1,-(a7)                ; push return pc for "call"
                                                        statement 16,0,0
                                                 
        000004A0   F2800000                             fnop                            ; in case pending flt exception
        000004A4   60FF00000000                         bra.l    __raise_exception      ; raise exception
                                                ;
                                                ;       trap handler for signals
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.none
                                                 
        000004AA                                __signal_intercept:
        000004AA   2F0D                                 move.l  a5,-(sp)        ; save a5
        000004AC   2A4E                                 movea.l a6,a5
        000004AE   4280                                 clr.l   d0
        000004B0   3001                                 move.w  d1,d0
        000004B2   2F00                                 move.l  d0,-(sp)
        000004B4   2075017000000000                     movea.l (__signal_intercept_indirect,a5),a0
        000004BC   4E90                                 jsr     (a0)
                                                
        000004BE   2A5F                                 movea.l (sp)+,a5        ; restore a5
        000004C0   4E40                                 trap    #os9_call
        000004C2   001E                                 .dc.w   f$rte    
                                                
                                                        end_subprograms
                                                 
                                                
                                                        .end


      Program Section Name       Kind   Length   Patches Fixups
-------------------------------- ---- ---------- ------- -------
ADA_RUNTIME_CODE                  Rel       1220      19     118
DEBUG_BODY                        Rel        469      54      17
DEBUG_HDR_CU                      Rel         64       2       0


Standard include file: <none>
Object module version: 11

        Assembled 6946 lines in  1:17.990 elapsed, 44.621 CPU.
         5344 lines per elapsed minute.
         9340 lines per CPU minute.
         298 disk waits for this job.
         1901532 bytes of heap used by this job.