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: ┃ M T

⟦c57c13c16⟧ TextFile

    Length: 106550 (0x1a036)
    Types: TextFile
    Names: »MSQTI_OPS_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 "MESSAGE_QUEUE_TIMER_OPERATIONS"
                                                
                                                ;
                                                ;    Implements the body of the Ada packages Message_Queue and Timer
                                                ;
                                                
                                                
                                                        .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
                                                        .include    "^^common.msqti_definitions"
                                                ;
                                                ;       This assembly file defines the values for invoking
                                                ;       Message_Queues and Timer operations.  
                                                ;
                                                
                                                ;
                                                ;       Service call names definitions
                                                ;
                                                ;       These names are used in the low level assembler interface to address
                                                ;       the Message Queue Services via the Message_Qeueue_Globals address in
                                                ;       register a1.l.
                                                ;
                                                ;       Example:        jsr     ([Q$Send,a1])
                                                ;
                                                
                                                Q$Base          set     4
                                                Q$Create        equ     -Q$Base     ;'Create_Queue'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Delete        equ     -Q$Base     ;'Delete_Queue'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Find          equ     -Q$Base     ;'Find_Queue'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Length        equ     -Q$Base     ;'Length_of_Queue'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Assign        equ     -Q$Base     ;'Assign_Channel'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Deass         equ     -Q$Base     ;'Deassign_Channel'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$NewQAddr      equ     -Q$Base     ;'New_Queue_address'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$NewCAddr      equ     -Q$Base     ;'New_Channel_Address'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Send          equ     -Q$Base     ;'Send_Message'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Reserve       equ     -Q$Base     ;'Reserve_Message_Slot'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$UnRes         equ     -Q$Base ;'Return_Reserved_Message_Slot'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Remove        equ     -Q$Base     ;'Remove_Message'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Retriev       equ     -Q$Base     ;'Retrieve_Message'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$RetChan       equ     -Q$Base     ;'Retrieve_Message_from_Channel'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$Wait          equ     -Q$Base     ;'Wait_for_Queues'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$RQuData       equ     -Q$Base     ;'Read_User's_Queue_Data'.
                                                ;*
                                                Q$Base          set     Q$Base+4
                                                Q$WQuData       equ     -Q$Base     ;'Write_User's_Queue_Data'.
                                                \f


                                                
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Message Queue Services return codes.                                       *
                                                
                                                ;*                                                                             *
                                                
                                                ;*  These codes are returned from the Message Queues Services in register      *
                                                
                                                ;*  d1.w along with a Carry condition code.                                    *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Common error codes.                                                        *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                
                                                Q$IllQue   equ     11 + 16#1000#;     'Illegal queue address'.
                                                Q$IllPar   equ     12 + 16#1000#;     'Illegal parameter'.
                                                Q$InitErr  equ     13 + 16#1000#;     'Initiation error'.
                                                Q$IllCha   equ     14 + 16#1000#;     'Illegal channel address'.
                                                Q$NoMess   equ     15 + 16#1000#;     'No message for at retrieve or remove'.
                                                Q$NotAcc   equ     16 + 16#1000#;     'The specified queue was not accessible
                                                ;*                                     due to a persistent mutual exclusion
                                                ;*                                     lock'.
                                                Q$ToMany   equ     17 + 16#1000#;     'The maximum number of the specified
                                                ;*                                     resource type is already allocated'.
                                                Q$InFail   equ     18 + 16#1000#;     'Initiation failure'.
                                                ;*
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Send_Message specific error codes.                                         *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                
                                                Q$Full     equ     20 + 16#1000#;     'The maximum number of messages for 
                                                ;*                                     this channel already in the queue or
                                                ;*                                     no reserved slot when sending with
                                                ;*                                     qualifier Q$UseRes.
                                                Q$NoWait   equ     21 + 16#1000#;     'No waiter ready'.
                                                Q$TooBig   equ     22 + 16#1000#;     'Message too big'.
                                                ;*
                                                \f


                                                
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Retrieve_Message specific error codes.                                     *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                Q$TooSmal  equ     31 + 16#1000#;     'Retriever buffer not big enough to
                                                ;*                                     hold the maximum size message'.
                                                ;*
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Wait_for_Queues specific error codes.                                      *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                Q$MulWait  equ     41 + 16#1000#;     'Concurrent wait on the queue'.
                                                Q$EmpWs    equ     42 + 16#1000#;     'Empty wait set'.
                                                Q$QuesEmp  equ     43 + 16#1000#;     'All queues empty' when qualifier 
                                                ;*                                     Q$NonBlk was set.
                                                Q$QueDel   equ     44 + 16#1000#;     'A queue was deleted while currently
                                                ;*                                     waiting for it'.
                                                ;*        
                                                ;*******************************************************************************
                                                
                                                ;                                                                              *
                                                
                                                ;*  Create_Queue specific error codes.                                         *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                Q$DubDef   equ     51 + 16#1000#;     'Multiply defined queue'.
                                                Q$QueSiz   equ     52 + 16#1000#;     'Not enough resources (ram, too many
                                                ;*                                     queues created etc.) for queue'.
                                                ;*
                                                ;*******************************************************************************
                                                *
                                                ;*                                                                             *
                                                
                                                ;*  Delete_Queue specific error codes.                                         *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                Q$NotEmp   equ     61 + 16#1000#;     'Queue not empty'.
                                                \f


                                                
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Assign_Channel specific error codes.                                       *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;*
                                                Q$ChaSiz   equ     71 + 16#1000#;     'Not enough resources (ram etc. ) for 
                                                ;*                                     the channel'.
                                                ;*******************************************************************************
                                                
                                                ;*                                                                             *
                                                
                                                ;*  Reserve/ Unreserve_Slot specific error codes.                              *
                                                
                                                ;*                                                                             *
                                                
                                                ;*******************************************************************************
                                                
                                                ;
                                                Q$TooFew   equ     81 + 16#1000#;     'The common or reserve slot list for
                                                ;                                     the specified channel is empty'.
                                                
                                                ;
                                                ;       Message Queue Services qualifiers
                                                ;
                                                ;       These codes are set in register d1.w (one or many) at the calls 
                                                ;       of those services which take qualifiers.
                                                ;
                                                
                                                ;
                                                ;       Common qualifier codes.                                                 
                                                   *
                                                ;
                                                Q$NoQual        equ     0               ; No qualifiers.
                                                Q$UseCha        equ     16#8000#        ; Use the channel specification for
                                                Q$UseChaB       equ     15              ; this service.   
                                                ;
                                                ;       Create_Queue service specific qualifiers
                                                ;
                                                Q$NodWid        equ     16#4000#        ; Create this queue for node wide
                                                Q$NodWidB       equ     14              ; accessibility.
                                                ;
                                                ;       Delete_Queue service specific qualifiers
                                                ;
                                                Q$VerEmp        equ     16#8000#        ; Verify that queue is empty before
                                                Q$VerEmpB       equ     15              ; deletion and return Q$NotEmp if not.
                                                ;
                                                ;       Send_Message service specific qualifiers
                                                ;
                                                Q$UsePri        equ     16#4000#        ; Invoke the senders process priority
                                                Q$UsePriB       equ     14              ; on any waiter on this queue if the
                                                                                        ; waiter has lower priority.
                                                
                                                Q$RetRdy        equ     16#2000#        ; Deliver message only if a waiter is
                                                Q$RetRdyB       equ     13              ; currently waiting for the queue.
                                                
                                                Q$UseRes        equ     16#1000#        ; Use a reserved slot for this message.
                                                Q$UseResB       equ     12
                                                ;
                                                ;       Wait_for_Queues service specific qualifiers
                                                ;
                                                Q$NonBlk        equ     16#8000#        ; Return with status Q$QuesEmp if all
                                                Q$NonBlkB       equ     15              ; awaited queues are empty.
                                                ;
                                                ;       Wait_Set flag field specific qualifiers
                                                ;
                                                Q$SkpQue        equ     16#8000#        ; Skip this queue when forming the
                                                Q$SkpQueB       equ     15              ; set of awaited queues for this
                                                                                        ; wait service call
                                                
                                                Q$UserF1        equ     16#0001#        ; User flag 1.
                                                Q$UserF1B       equ     0
                                                
                                                Q$UserF2        equ     16#0002#        ; User flag 2.
                                                Q$UserF2B       equ     1
                                                
                                                Q$UserF3        equ     16#0003#        ; User flag 3.
                                                Q$UserF3B       equ     2
                                                
                                                Q$UserF4        equ     16#0004#        ; User flag 4.
                                                Q$UserF4B       equ     3
                                                
                                                Q$UserF5        equ     16#0005#        ; User flag 5.
                                                Q$UserF5B       equ     4
                                                
                                                Q$UserF6        equ     16#0006#        ; User flag 6.
                                                Q$UserF6B       equ     5
                                                
                                                Q$UserF7        equ     16#0007#        ; User flag 7.
                                                Q$UserF7B       equ     6
                                                
                                                Q$UserF8        equ     16#0008#        ; User flag 8.
                                                Q$UserF8B       equ     7
                                                ;
                                                ;       Timer calls
                                                ;
                                                        Ti$Start        equ     16#0001#;
                                                        Ti$Stop         equ     16#0002#;
                                                ;
                                                ;       Modifiers to Timer calls
                                                ;
                                                        Ti$OneSh        equ     16#20000000#    ; Start a one-shot timer
                                                        Ti$Cycl         equ     16#40000000#    ; Start a cyclic timer
                                                        Ti$Driv         equ     16#FFFFFFFF#    ; Start a timer used by a driver
                                                
                                                ;
                                                ;       Timer error codes
                                                ;
                                                        Ti$NoFrTe       equ     16#0000200A#
                                                        Ti$IllTT        equ     16#0000200C#
                                                        Ti$DelTL        equ     16#0000200B#
                                                        Ti$NoFrQS       equ     16#0000200D#
                                                        Ti$BTmrID       equ     16#00002014#
                                                
                                                ;
                                                
                                                
                                                        comp_unit  runtime_compunit
                                                 
                                                
                                                        .sect   ada_runtime_code,code,relocatable,alignment:=2
                                                    
                                                        .gbl.l  __msgq$create
                                                        .gbl.l  __msgq$delete
                                                        .gbl.l  __msgq$delete$veremp
                                                        .gbl.l  __msgq$send
                                                        .gbl.l  __msgq$send$retrdy
                                                        .gbl.l  __msgq$send$nopri
                                                        .gbl.l  __msgq$wait
                                                        .gbl.l  __msgq$wait$nonblk
                                                        .gbl.l  __msgq$retriev
                                                        .gbl.l  __msgq$retriev_if_available
                                                        .gbl.l  __msgq$remove
                                                        .gbl.l  __msgq$length
                                                        .gbl.l  __msgq$get_associated_data
                                                
                                                        .gbl.l  __timer$start
                                                        .gbl.l  __timer$stop
                                                
                                                        .ext.l  __msgq_entry_pointer
                                                        .ext.l  __process_descriptor_pointer
                                                
                                                ;
                                                ;   Have to a pointer to the table of entry points for
                                                ;   message queue operations in __MsgQ_Entry_Pointer.
                                                ;   Calls to the services are performed by
                                                ;
                                                ;       movea.l  (__MsgQ_Entry_Pointer, a5), a1
                                                ;       jsr      ([Q$service, a1])
                                                ;
                                                
                                                
                                                    Local_No_Channels equ 0;
                                                
                                                ;
                                                ;   procedure Create (Max_Message_Size : Message_Size;
                                                ;                     Max_Message_Count : Queue_Length;
                                                ;                     Result : out Stratus;
                                                ;                     New_Queue : out Id);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000000                                __msgq$create:
                                                        .local
                                                
                                                        $max_size'offset        equ 4+16
                                                        $max_count'offset       equ 8+16
                                                        $status'offset          equ 12+16
                                                        $queue'offset           equ 16+16
                                                
                                                        statement    0,0,0
                                                 
        00000000   48E73C00                             movem.l d2/d3/d4/d5,-(sp)
                                                        statement    16,0,0
                                                 
                                                
        00000004   41FA0000                             lea     ($null_queue_name:16,pc),a0     ; queue name string
        00000008   42AF001C                             clr.l   ($status'offset,sp)             ; result := successful
        0000000C   7000                                 moveq.l #local_no_channels,d0           ; qualifier flags        
        0000000E   282F0014                             move.l  ($max_size'offset,sp),d4        ; max message size
        00000012   2A2F0018                             move.l  ($max_count'offset,sp),d5       ; max number of messages
                                                
        00000016   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        0000001E   4EB10161FFFC                         jsr     ([q$create,a1])                 ; jump to create entry
                                                
        00000024   6500                                 bcs.b   $error                          ; check for error
                                                
        00000026   206F0020                             movea.l ($queue'offset,sp),a0           ; get pointer to id
        0000002A   30C2                                 move.w  d2,(a0)+                        ; upper part of id
        0000002C   2083                                 move.l  d3,(a0)                         ; lower part of id
                                                
        0000002E   4CDF003C                     $exit:  movem.l (sp)+,d2/d3/d4/d5               ; restore registers
                                                        statement     0,0,0
                                                 
        00000032   4E75                                 rts
                                                
        00000034   3F41001E                     $error: move.w  d1,($status'offset+2,sp)       ; result := error code
        00000038   60F4                                 bra.b   $exit
                                                
        0000003A                                $null_queue_name:
        0000003A   00                                   .asciz  ""
                                                        .align
                                                ;
                                                ;   procedure Delete (Queue  : Id;
                                                ;                     Result : out Stratus);
                                                ;
                                                ;   procedure Delete_If_Empty (Queue : Id;
                                                ;                              Result : out Stratus);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
                                                        .local
                                                        
                                                        $queue'offset   equ 4+8
                                                        $result'offset  equ 8+8
                                                
        0000003C                                __msgq$delete:
        0000003C   7000                                 moveq.l #0,d0                   ; set qualifier
        0000003E   6000                                 bra.b   $common
                                                
        00000040                                __msgq$delete$veremp:
        00000040   203C00008000                         move.l  #q$veremp,d0            ; set qualifier
                                                
        00000046   2F02                         $common:move.l  d2,-(sp)
                                                        statement 0,0,1
                                                 
        00000048   2F03                                 move.l  d3,-(sp)
                                                        statement 0,0,2
                                                 
                                                
        0000004A   206F000C                             movea.l ($queue'offset,sp),a0   ; pointer to queue id
        0000004E   42AF0010                             clr.l    ($result'offset,sp)    ; result := successful
        00000052   4282                                 clr.l   d2                      ; clear upper word
        00000054   3410                                 move.w  (a0),d2                 ; upper part of queue id
        00000056   26280002                             move.l  (2,a0),d3               ; lower part of queue id
                                                
        0000005A   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1 ; get entry table pointer
        00000062   4EB10161FFF8                         jsr     ([Q$Delete, a1])        ; jump to create entry
                                                
        00000068   6400                                 bcc.b    $return
                                                
        0000006A   3F410012                     $error: move.w  d1,($result'offset+2,sp)
                                                
        0000006E   261F                         $return:move.l  (sp)+,d3
                                                        statement 0,0,1
                                                 
        00000070   241F                                 move.l  (sp)+,d2
                                                        statement 0,0,0
                                                 
        00000072   4E75                                 rts
                                                ;
                                                ;   procedure Send (Buffer : System.Address;
                                                ;                   Size   : Message_Size;
                                                ;                   Queue  : Id;
                                                ;                   Result : out Stratus;
                                                ;                   Handle : out Message_Id);
                                                ;
                                                ;
                                                ;   procedure Conditional_Send (Buffer   : System.Address;
                                                ;                               Size     : Message_Size;
                                                ;                               To_Queue : Id;
                                                ;                               Result   : out Stratus;
                                                ;                               Handle   : out Message_Id);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
                                                        .local
                                                        $buffer'offset  equ 4+20
                                                        $size'offset    equ 8+20
                                                        $queue'offset   equ 12+20
                                                        $result'offset  equ 16+20
                                                        $handle'offset  equ 20+20
                                                
        00000074                                __msgq$send$retrdy:
        00000074   203C00006000                         move.l  #(Q$UsePri ! Q$RetRdy),d0       ; set qualifier
        0000007A   6000                                 bra.b   $common
                                                
        0000007C                                __msgq$send:
        0000007C   203C00004000                         move.l  #q$usepri,d0                    ; set qualifier
                                                    
        00000082   48E73E00                     $common:movem.l d2/d3/d4/d5/d6,-(sp)
                                                        statement 0,0,5
                                                 
                                                
        00000086   206F0020                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        0000008A   42AF0024                             clr.l   ($result'offset,sp)             ; result := successful
        0000008E   4282                                 clr.l   d2
        00000090   3410                                 move.w  (a0),d2                         ; upper part of queue id
        00000092   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        00000096   206F0018                             movea.l ($buffer'offset,sp),a0          ; address of message buffer
        0000009A   282F001C                             move.l  ($size'offset,sp),d4            ; message size
                                                
        0000009E   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        000000A6   4EB10161FFDC                         jsr     ([q$send,a1])                   ; jump to create entry
                                                
        000000AC   6500                                 bcs.b   $error                          ; check for error
                                                
        000000AE   2F450028                             move.l  d5,($handle'offset,sp)          ; handle := message id
                                                
                                                
        000000B2   4CDF007C                     $exit:  movem.l (sp)+,d2/d3/d4/d5/d6            ; restore registers
                                                        statement 0,0,0
                                                 
        000000B6   4E75                                 rts
                                                
        000000B8   42AF0028                     $error: clr.l   ($handle'offset,sp)             ; handle := null_message
        000000BC   3F410026                             move.w  d1,($result'offset+2,sp)        ; result := error code 
        000000C0   60F0                                 bra.b   $exit
                                                
                                                ;
                                                ;   procedure Send_Without_Priority (Value : Integer;
                                                ;                                    Queue : Id);
                                                ;
                                                ;   -- special purpose send for the reply queue
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000000C2                                __msgq$send$nopri:
                                                        .local
                                                        
                                                        $value'offset   equ 4+20
                                                        $queue'offset   equ 8+20
                                                
        000000C2   48E73E00                             movem.l d2/d3/d4/d5/d6,-(sp)
                                                        statement 0,0,5
                                                 
                                                
        000000C6   7000                                 moveq.l #0,d0                           ; set qualifier
                                                
        000000C8   206F001C                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        000000CC   4282                                 clr.l   d2
        000000CE   3410                                 move.w  (a0),d2                         ; upper part of queue id
        000000D0   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        000000D4   41EF0018                             lea.l   ($value'offset,sp),a0           ; address of value
        000000D8   7804                                 moveq.l #4,d4                           ; message size = 4 bytes
                                                
        000000DA   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        000000E2   4EB10161FFDC                         jsr     ([q$send,a1])                   ; jump to create entry
                                                
        000000E8   4CDF007C                             movem.l (sp)+,d2/d3/d4/d5/d6
                                                        statement     0,0,0
                                                 
        000000EC   4E740008                             rtd     #8
                                                ;
                                                ;   procedure Wait (On_List : System.Address;
                                                ;                   Maximum : Wait_List_Index;
                                                ;                   Available : out Wait_List_Index);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000000F0                                __msgq$wait:
                                                        .local
                                                        
                                                        $on_list'offset         equ 4+8
                                                        $maximum'offset         equ 8+8
                                                        $available'offset       equ 12+8
                                                
                                                ;   -- prior to blocking in message queue, save the
                                                ;   -- frame pointer and pc for the debugger
                                                
        000000F0   2075017000000000                     movea.l (__process_descriptor_pointer,a5),a0
        000000F8   2050                                 movea.l (a0),a0                         ; get current descriptor
        000000FA   215703B4                             move.l  (sp),(art$savepc,a0)            ; save pc
        000000FE   214E03B0                             move.l  a6,(art$savefp,a0)              ; save frame pointer
                                                
        00000102   2F02                                 move.l  d2,-(sp)
                                                        statement 0,0,1
                                                 
        00000104   2F03                                 move.l  d3,-(sp)
                                                        statement 0,0,2
                                                 
                                                
        00000106   7000                                 moveq.l #0,d0                           ; set qualifier
        00000108   206F000C                             movea.l ($on_list'offset,sp),a0         ; pointer to wait list
        0000010C   242F0010                             move.l  ($maximum'offset,sp),d2         ; max of queues in wait list
                                                
        00000110   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        00000118   4EB10161FFC4                         jsr     ([Q$Wait, a1])                  ; jump to create entry
                                                
        0000011E   426F0014                             clr.w   ($available'offset,sp)          ; clear upper word 
        00000122   3F430016                             move.w  d3,($available'offset+2,sp)     ; available := index
                                                
        00000126   261F                                 move.l  (sp)+,d3                        ; restore registers
                                                        statement 0,0,1
                                                 
        00000128   241F                                 move.l  (sp)+,d2 
                                                        statement 0,0,0
                                                 
                                                ;
                                                ;   now clear debugger blocking info
                                                ;
        0000012A   2075017000000000                     movea.l (__process_descriptor_pointer,a5),a0
        00000132   2050                                 movea.l (a0),a0                         ; get current descriptor
        00000134   42A803B0                             clr.l   (art$savefp,a0)                 ; clear saved frame pointer
        00000138   4E75                                 rts
                                                ;
                                                ;   procedure Wait_Nonblocking (On_List   : System.Address;
                                                ;                               Maximum   : Wait_List_Index;
                                                ;                               Result    : out Stratus;
                                                ;                               Available : out Wait_List_Index);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        0000013A                                __msgq$wait$nonblk:
                                                        .local
                                                        
                                                        $list'offset            equ 4+8
                                                        $maximum'offset         equ 8+8
                                                        $result'offset          equ 12+8
                                                        $available'offset       equ 16+8
                                                
        0000013A   2F02                                 move.l  d2,-(sp)
                                                        statement 0,0,1
                                                 
        0000013C   2F03                                 move.l  d3,-(sp)
                                                        statement 0,0,2
                                                 
                                                
        0000013E   42AF0014                             clr.l   ($result'offset,sp)             ; result := successful
        00000142   42AF0018                             clr.l   ($available'offset,sp)          ; available := 0 
        00000146   203C00008000                         move.l  #q$nonblk,d0                    ; set qualifier
                                                
        0000014C   206F000C                             movea.l ($list'offset,sp),a0            ; pointer to wait list
        00000150   242F0010                             move.l  ($maximum'offset,sp),d2         ; max of queues in wait list
                                                
        00000154   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        0000015C   4EB10161FFC4                         jsr     ([q$wait,a1])                   ; jump to create entry
                                                
        00000162   6500                                 bcs.b   $error
                                                
        00000164   3F43001A                             move.w  d3,($available'offset+2,sp)     ; available := index
                                                
        00000168   261F                         $exit:  move.l  (sp)+,d3
                                                        statement 0,0,1
                                                 
        0000016A   241F                                 move.l  (sp)+,d2
                                                        statement 0,0,0
                                                 
                                                
        0000016C   2075017000000000                     movea.l (__process_descriptor_pointer,a5),a0
        00000174   2050                                 movea.l (a0),a0                         ; a0 := descriptor pointer
        00000176   42A803B0                             clr.l   (art$savefp,a0)                  ; clear debugger info
        0000017A   4E75                                 rts
                                                
                                                
        0000017C   3F410016                     $error: move.w  d1,($result'offset+2,sp)        ; result := error code 
        00000180   60E6                                 bra.s   $exit
                                                ;
                                                ;   procedure Retrieve_Message (From_Queue  : Id;
                                                ;                               To_Buffer   : System.Address;
                                                ;                               Buffer_Size : Message_Size);
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000182                                __msgq$retriev:
                                                        $from_queue'offset      equ 4+16
                                                        $to_buffer'offset       equ 8+16
                                                        $buffer_size'offset     equ 12+16
                                                    
        00000182   48E73C00                             movem.l d2/d3/d4/d5,-(sp)
                                                        statement 0,0,4
                                                 
                                                
        00000186   206F0014                             movea.l ($from_queue'offset,sp),a0      ; pointer to queue id
        0000018A   4282                                 clr.l   d2                              ; clear upper word
        0000018C   3410                                 move.w  (a0),d2                         ; upper part of queue id
        0000018E   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        00000192   206F0018                             movea.l ($to_buffer'offset,sp),a0       ; address of message buffer
        00000196   282F001C                             move.l  ($buffer_size'offset,sp),d4     ; buffer size
                                                
        0000019A   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        000001A2   4EB10161FFCC                         jsr     ([q$retriev,a1])                ; jump to create entry
                                                
        000001A8   4CDF003C                             movem.l (sp)+,d2/d3/d4/d5               ; restore registers 
                                                        statement 0,0,0
                                                 
        000001AC   4E74000C                             rtd     #12
                                                ;
                                                ;   procedure Retrieve_If_Available (From_Queue  : Id;
                                                ;                                    To_Buffer   : System.Address;
                                                ;                                    Buffer_Size : Message_Size;
                                                ;                                    Result      : out Stratus);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000001B0                                __msgq$retriev_if_available:
                                                        .local
                                                        
                                                        $queue'offset           equ 4+16
                                                        $to_buffer'offset       equ 8+16
                                                        $buffer_size'offset     equ 12+16
                                                        $result'offset          equ 16+16
                                                
        000001B0   48E73C00                             movem.l d2/d3/d4/d5,-(sp)               ; save the nonvolatile registers
                                                
                                                        statement     16,0,0
                                                 
                                                
        000001B4   206F0014                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        000001B8   42AF0020                             clr.l   ($result'offset,sp)             ; result := successful
        000001BC   4282                                 clr.l   d2                              ; clear upper word
        000001BE   3410                                 move.w  (a0),d2                         ; upper part of queue id
        000001C0   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        000001C4   206F0018                             movea.l ($to_buffer'offset,sp),a0       ; address of message buffer
        000001C8   282F001C                             move.l  ($buffer_size'offset,sp),d4     ; buffer size
                                                
        000001CC   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        000001D4   4EB10161FFCC                         jsr     ([q$retriev,a1])                ; jump to create entry
                                                
        000001DA   6400                                 bcc.b   $exit
                                                
        000001DC   3F410022                     $error: move.w  d1,($result'offset+2,sp)        ; result := error code 
                                                
        000001E0   4CDF003C                     $exit:  movem.l (sp)+,d2-d5
                                                        statement 0,0,0
                                                 
        000001E4   4E75                                 rts
                                                ;
                                                ;   procedure Remove_Message (From_Queue : Id;
                                                ;                             Remove_Id : Message_Id;
                                                ;                             Result : out Stratus);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000001E6                                __msgq$remove:
                                                        .local
                                                        
                                                        $queue'offset   equ 4+12
                                                        $id'offset      equ 8+12
                                                        $result'offset  equ 12+12
                                                
        000001E6   48E73400                             movem.l d2/d3/d5,-(sp)                 ; save the nonvolatile
                                                        statement 0,0,3
                                                 
                                                
        000001EA   206F0010                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        000001EE   42AF0018                             clr.l   ($result'offset,sp)             ; result := successful        
        000001F2   4282                                 clr.l   d2                              ; clear upper word
        000001F4   3410                                 move.w  (a0),d2                         ; upper part of queue id
        000001F6   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        000001FA   2A2F0014                             move.l  ($id'offset,sp),d5              ; id of message to remove
                                                
        000001FE   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        00000206   4EB10161FFD0                         jsr     ([q$remove,a1])                 ; jump to create entry
        0000020C   6400                                 bcc.b   $exit
                                                
        0000020E   3F41001A                     $error: move.w  d1,($result'offset+2,sp)        ; result := error code 
                                                
        00000212   4CDF002C                     $exit:  movem.l  (SP)+,d2/d3/d5                 ; restore registers 
                                                        statement     0,0,0
                                                 
        00000216   4E75                                 rts
                                                ;
                                                ;   procedure Length (Of_Queue : Id;
                                                ;                     Result : out Stratus;
                                                ;                     Count : out Queue_Length);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000218                                __msgq$length:
                                                        .local
                                                        
                                                        $queue'offset   equ 4+12
                                                        $result'offset  equ 8+12
                                                        $count'offset   equ 12+12
                                                        
        00000218   48E73800                             movem.l d2/d3/d4,-(sp)
                                                        statement 0,0,3
                                                 
                                                
        0000021C   206F0010                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        00000220   42AF0014                             clr.l   ($result'offset,sp)             ; result := successful
        00000224   4282                                 clr.l   d2                              ; clear upper word
        00000226   3410                                 move.w  (a0),d2                         ; upper part of queue id
        00000228   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
                                                
        0000022C   2275017000000000                     movea.l (__msgq_entry_pointer,a5),a1    ; get entry table pointer
        00000234   4EB10161FFF0                         jsr     ([q$length,a1])                 ; jump to create entry
                                                
        0000023A   6500                                 bcs.b   $error
                                                
        0000023C   426F0018                             clr.w   ($count'offset,SP)              ; clear upper word
        00000240   3F44001A                             move.w  d4,($count'offset+2,sp)           ; count := computed   
                                                
        00000244   4CDF001C                     $exit:  movem.l (sp)+,d2/d3/d4
                                                        statement     0,0,0
                                                 
        00000248   4E75                                 rts
                                                
        0000024A   42AF0018                     $error: clr.l   ($count'offset,sp)              ; count := 0
        0000024E   3F410016                             move.w  d1,($result'offset+2,sp)        ; result := error code 
        00000252   60F0                                 bra.b   $exit
                                                ;
                                                ;
                                                ;   procedure Get_Associated_Data (For_Queue : Id;
                                                ;                                  Result : out Stratus;
                                                ;                                  Data : out Associated_Data);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        00000254                                __msgq$get_associated_data:
                                                        .local
                                                        
                                                        $queue'offset   equ 4+12
                                                        $result'offset  equ 8+12
                                                        $data'offset    equ 12+12
                                                
        00000254   48E73800                             movem.l d2/d3/d4,-(sp)
                                                        statement 0,0,3
                                                 
                                                
        00000258   206F0010                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        0000025C   42AF0014                             clr.l   ($result'offset,sp)             ; result := successful
        00000260   4282                                 clr.l   d2                              ; clear upper word
        00000262   3410                                 move.w  (a0),d2                         ; upper part of queue id
        00000264   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
                                                
        00000268   2275017000000000                     movea.l (__MsgQ_Entry_Pointer, a5), a1  ; get entry table pointer
        00000270   4EB10161FFC0                         jsr     ([Q$RQuData, a1])               ; jump to create entry
                                                
        00000276   6500                                 bcs.b   $error
        00000278   2F440018                             move.l  d4,($data'offset,sp)            ; store data
                                                
        0000027C   4CDF001C                     $exit:  movem.l (sp)+,d2/d3/d4                  ; restore registers 
                                                        statement     0,0,0
                                                 
        00000280   4E75                                 rts
                                                
        00000282   42AF0018                     $error: clr.l   ($data'offset,sp)               ; data := 0
        00000286   3F410016                             move.w  d1,($result'offset+2,sp)        ; result := error code 
        0000028A   60F0                                 bra.b   $exit
                                                ;
                                                ;   procedure Start (Time : Delay_Time;
                                                ;                    Queue : Message_Queue.Id;
                                                ;                    Signal : Timeout_Message;
                                                ;                    Result : out Stratus;
                                                ;                    Handle : out Id);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        0000028C                                __timer$start:
                                                        .local
                                                        
                                                        $rounding_factor        equ 15
                                                
                                                        $time'offset    equ 4+12
                                                        $queue'offset   equ 8+12
                                                        $signal'offset  equ 12+12
                                                        $result'offset  equ 16+12
                                                        $handle'offset  equ 20+12
                                                
        0000028C   48E73800                             movem.l d2/d3/d4,-(sp)
                                                        statement 0,0,3
                                                 
                                                
        00000290   202F0010                             move.l  ($time'offset,sp),d0            ; delay time in d0
        00000294   42AF001C                             clr.l   ($result'offset,sp)             ; result := successful
        00000298   720F                                 moveq.l #$rounding_factor,d1            ; factor to round up
        0000029A   D280                                 add.l   d0,d1                           ; do round 
        0000029C   6800                                 bvc.b   $timeok                         ; ok if not overflow
        0000029E   2200                                 move.l  d0,d1                           ; else get value passed 
                                                
        000002A0   E881                         $timeok:asr.l   #4,d1                           ; scale duration for timer
        000002A2   206F0014                             movea.l ($queue'offset,sp),a0           ; pointer to queue id
        000002A6   4282                                 clr.l   d2                              ; clear upper word
        000002A8   3410                                 move.w  (a0),d2                         ; upper part of queue id
        000002AA   26280002                             move.l  (2,a0),d3                       ; lower part of queue id
        000002AE   282F0018                             move.l  ($signal'offset,sp),d4          ; timeout message
                                                
        000002B2   203C20000001                         move.l  #(Ti$Start ! Ti$OneSh),d0
        000002B8   4E40                                 trap    #0
        000002BA   00FA                                 .dc.w   f$peab
                                                
        000002BC   6500                                 bcs.b   $error                          ; check for error
        000002BE   2F400020                             move.l  d0,($handle'offset,sp)          ; handle := id
                                                
                                                
        000002C2   4CDF001C                     $exit:  movem.l (sp)+,d2/d3/d4                  ; restore registers 
                                                        statement     0,0,0
                                                 
        000002C6   4E75                                 rts
                                                
        000002C8   42AF0020                     $error: clr.l   ($handle'offset,sp)             ; handle := 0
        000002CC   3F41001E                             move.w  d1,($result'offset+2,sp)        ; result := error code 
        000002D0   60F0                                 bra.b   $exit
                                                ;
                                                ;   procedure Stop (Handle : Id; Result : out Stratus);
                                                ;
                                                        subprogram sp_rt,sp.internal,linkage.simple
                                                 
        000002D2                                __timer$stop:
                                                        .local
                                                        
                                                        $handle'offset  equ 4
                                                        $result'offset  equ 8
                                                
        000002D2   222F0004                             move.l  ($handle'offset,sp),d1          ; time id
        000002D6   42AF0008                             clr.l   ($result'offset,sp)              ; result := successful
                                                
        000002DA   203C00000002                         move.l  #Ti$Stop,d0
        000002E0   4E40                                 trap    #0
        000002E2   00FA                                 .dc.w   F$PEAB
                                                
        000002E4   6400                                 bcc.b   $return
                                                
        000002E6   3F41000A                             move.w  d1,($result'offset+2,sp)
                                                
        000002EA   4E75                         $return:rts
                                                
                                                        end_subprograms
                                                 
                                                
                                                        .end


      Program Section Name       Kind   Length   Patches Fixups
-------------------------------- ---- ---------- ------- -------
ADA_RUNTIME_CODE                  Rel        748      14      27
DEBUG_BODY                        Rel        500      57      13
DEBUG_HDR_CU                      Rel         52       2       0


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

        Assembled 6808 lines in 54.512 elapsed, 43.313 CPU.
         7493 lines per elapsed minute.
         9431 lines per CPU minute.
         62 disk waits for this job.
         1941489 bytes of heap used by this job.