DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b89abb32c⟧ Ada Source

    Length: 168960 (0x29400)
    Types: Ada Source
    Notes: 03_class, FILE, Long Ada Source, R1k_Segment, e3_tag, generic, package V_Interrupts, seg_056588

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--   VERDIX CORPORATION                        (C) COPYRIGHT 1988, 1992, 1993
--                                             Proprietary Information
--                                             Not to be Disclosed
--
--  FILE:     V_VADS_EXEC.A
--
--  UNITS:    VADS EXEC Package Specifications
--
--  PURPOSE:  This file contains the user's high level interface to VADS EXEC.
--            It contains packages for each of the following services:
--
--              Interrupt Handling  (package V_INTERRUPTS)
--              Tasking Extensions  (package V_XTASKING)
--              Mutexes/CVs         (package V_MUTEXES)
--              Semaphores          (package V_SEMAPHORES)
--              Mailboxes           (package V_MAILBOXES)
--              Memory Management   (package V_MEMORY)
--              Stack Operations    (package V_STACK)
--              Name Services       (package V_NAMES)
--
--            The specifications for the above packages are contained in
--            this file. The bodies are located in the following files also
--            found in this directory:
--              V_INTERRUPTS    v_intr_b.a
--              V_XTASKING      v_xtask_b.a
--              V_MUTEXES       v_mutexes_b.a
--              V_SEMAPHORES    v_semaph_b.a
--              V_MAILBOXES     v_mbox_b.a
--              V_MEMORY        v_mem_b.a
--              V_STACK         v_stack_b.a
--              V_NAMES         v_name_b.a
--
--            These packages are layered upon the Ada Kernel. The Ada Kernel
--            provides all the threads and synchronization services needed
--            to implement the VADS EXEC services. The interface to the Ada
--            Kernel services is definied in the ADA_KRN_I package. Its type
--            definitions are provided in the ADA_KRN_DEFS package. Both
--            packages may be found in standard.
--
--            Do not modify or recompile these packages.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

with Ada_Krn_Defs;
with System;
package V_Interrupts is

    pragma Suppress (All_Checks);

    --   PURPOSE : V_INTERRUPTS provides interrupt processing support
    --             for the use of user-defined interrupt service
    --             routines (ISR's), the getting/setting of interrupt status and
    --             entering/leaving of supervisor state for the current task.
    --
    --             Refer to V_INTERRUPTS's machine dependent body in
    --             V_INTR_B.A file for an outline of the actions that must
    --             be performed in an ISR.
    --
    --
    --     NOTES ON FLOATING-POINT COPROCESSOR SAVE/RESTORE IN ISR's:
    --
    --             A save/restore of the floating-point coprocessor state is
    --             necessary if a coprocessor is in use and
    --             floating-point objects might be used
    --             during the execution of the interrupt handler.  Note
    --             that VADS_EXEC does not use floating-point
    --             objects; thus, a coprocessor save/restore is not
    --             necessary before calling the services.
    --
    --     NOTES ON DATA REFERENCES IN ISR's:
    --
    --             The user-defined interrupt handler must not reference
    --             non-local stack-relative data (including tasks declared
    --             within a subprogram).  Instead, all references should
    --             be either to objects declared in library-level
    --             package specifications/bodies, in the interrupt
    --             handler itself or in subprograms called by the handler.
    --
    --     NOTES ON EXCEPTION PROPAGATION IN ISR's:
    --
    --             Exceptions raised in an interrupt handler must be
    --             handled locally.  An "others" exception handler should
    --             be provided to prevent attempting to propogate an
    --             exception from an interrupt handler.  If you don't provide
    --             a handler for a raised exception (such as NUMERIC_ERROR),
    --             then, the entire program is abandoned (just like an unhandled
    --             exception for the main subprogram).
    --
    --     NOTES ON ISR/ADA TASK INTERACTION:
    --
    --             An ISR executes in the context of the task it interrupted.
    --             Since the ISR does not have its own task state, it must
    --             not perform any Ada tasking operations which would affect
    --             the state of the interrupted task:
    --
    --               - task creations
    --               - accept statements
    --               - entry calls
    --               - delay statements
    --               - abort statements
    --               - evaluation of an allocator or deallocator
    --
    --             In addition, the ISR cannot invoke any VADS_EXEC service which
    --             might block:
    --
    --               - WAIT_SEMAPHORE
    --               - READ_MAILBOX
    --               - any V_MEMORY allocator or deallocator
    --
    --             If the ISR calls a service that would block, the
    --             TASKING_ERROR exception is raised.
    --
    --             It may, however, invoke any non-blocking operation,
    --             including:
    --
    --               - RESUME_TASK or SUSPEND_TASK
    --               - SIGNAL_SEMAPHORE
    --               - WRITE_MAILBOX
    --
    --             Floating-point registers do not have to be saved before
    --             invoking VADS_EXEC services from an ISR.
    --
    --             The tasking and interrupt services support pre-emptive
    --             task scheduling.  If a call to a service from an
    --             interrupt handler causes a task with a priority higher
    --             than that of the interrupted task to become ready to run,
    --             the higher priority task will run immediately upon return
    --             from the outermost interrupt service routine.
    --
    --
    --   EXAMPLE :
    --
    --             package ISR_EXAMPLE is
    --             end;
    --
    --             with V_INTERRUPTS;
    --             with SYSTEM;
    --             package body ISR_EXAMPLE is
    --
    --               INTEGER_CNT: integer := 0;
    --               FLOAT_CNT: float := 0.0;
    --
    --               procedure INTEGER_HANDLER is
    --               begin
    --                 -- No floating point operations
    --
    --                 INTEGER_CNT := INTEGER_CNT + 1;
    --               end;
    --
    --               procedure FLOAT_HANDLER is
    --               begin
    --                 -- Does floating point operations
    --
    --                 FLOAT_CNT := FLOAT_CNT + 1.0;
    --               end;
    --
    --
    --               procedure INTEGER_ISR is new
    --                   V_INTERRUPTS.ISR(INTEGER_HANDLER);
    --                 -- An instantiated isr that doesn't perform any floating
    --                 -- point operations.
    --
    --               procedure WRAPPED_FLOAT_HANDLER is new
    --                   V_INTERRUPTS.FLOAT_WRAPPER(FLOAT_HANDLER);
    --                 -- An instantiated subprogram with floating point state
    --                 -- saved and initialized upon entry and then restored
    --                 -- upon return. This wrapped procedure is passed when
    --                 -- the isr is instantiated.
    --
    --               procedure FLOAT_ISR is new
    --                   V_INTERRUPTS.ISR(WRAPPED_FLOAT_HANDLER);
    --                 -- An instantiated isr that performs floating point
    --                 -- operations.
    --             begin
    --               declare
    --                 prev_isr: SYSTEM.address;
    --               begin
    --                 -- Attach above instantiated isr's
    --                 prev_isr := V_INTERRUPTS.ATTACH_ISR(16#80#,
    --                   INTEGER_ISR'address);
    --                 prev_isr := V_INTERRUPTS.ATTACH_ISR(16#81#,
    --                   FLOAT_ISR'address);
    --               end;
    --             end ISR_EXAMPLE;


    -- The following type is used to specify the valid range for
    -- interrupt vector numbers.

    type Vector_Id is new Ada_Krn_Defs.Intr_Vector_Id_T;

    -- The following type is used for interrupt status

    type Interrupt_Status_T is new Ada_Krn_Defs.Intr_Status_T;

    -- Machine independent interrupt status constants

    Enable_Interrupt : constant Interrupt_Status_T :=
       Interrupt_Status_T (Ada_Krn_Defs.Enable_Intr_Status);

    Disable_Interrupt : constant Interrupt_Status_T :=
       Interrupt_Status_T (Ada_Krn_Defs.Disable_Intr_Status);


    -- The following exceptions may be raised by interrupt services.

    Invalid_Interrupt_Vector : exception;

    -- INVALID_INTERRUPT_VECTOR is raised if the vector number passed to the
    -- service is not a valid vector number.

    Vector_In_Use : exception;

    -- VECTOR_IN_USE is raised if an attempt is made to attach an ISR
    -- to a vector that is already attached to an ISR.

    Unexpected_V_Interrupts_Error : exception;

    -- UNEXPECTED_V_INTERRUPTS_ERROR may be raised if an unexpected
    -- error occurs in an V_INTERRUPTS routine.

    generic
        with procedure Interrupt_Handler;
    procedure Isr;
    pragma Share_Code (Isr, False);

    -- Purpose:     ISR provides the wrapper required for all
    --              interrupt service routines.  It may be instantiated
    --              with a parameterless procedure which provides the
    --              handler for a particular interrupt.  The address
    --              of the resulting instantiation should be passed to
    --              ATTACH_ISR to attach the interrupt service routine
    --              to a particular vector.
    --
    -- Notes:       This wrapper doesn't save/restore the floating point
    --              context.
    --
    --              This generic must be instantiated at the library
    --              package level.


    generic
        with procedure Interrupt_Handler;
    procedure Fast_Isr;
    pragma Share_Code (Fast_Isr, False);

    -- Purpose:     Faster version of the above ISR wrapper.  Refer
    --              to V_INTERRUPTS's machine dependent body in
    --              V_INTR_B.A file for additional restrictions imposed   --              on the INTERRUPT_HANDLER procedure.


    generic
        with procedure Float_Handler;
    procedure Float_Wrapper;
    pragma Share_Code (Float_Wrapper, False);

    -- Purpose:     FLOAT_WRAPPER saves/restores the floating point state.
    --              Before FLOAT_HANDLER is called, the floating point state
    --              is reset and float exceptions are enabled according to
    --              the FLOATING_POINT_CONTROL parameter in the kernel
    --              program's configuration package (V_KRN_CONF).
    --              See the body of this generic for further details.
    --
    --              The resultant instantiation is normally used as an input
    --              procedure parameter to the above ISR generic.


    function Attach_Isr (Vector : in Vector_Id; Isr : in System.Address)
                        return System.Address;

    -- Purpose:       To attach an interrupt service routine to a given
    --                interrupt vector. It returns the previously attached
    --                ISR.
    -- Where:
    --
    --   vector       specifies the interrupt vector number to which
    --                the interrupt service routine is to be attached.
    --                The vector number is the number, not address,
    --                of the interrupt vector.
    --
    --   isr          specifies the address of the interrupt service routine.
    --
    -- Exceptions:
    --
    --   INVALID_INTERRUPT_VECTOR is raised if the vector number is
    --   out-of-range.
    --
    --   VECTOR_IN_USE is raised if an interrupt handler has already been
    --   assigned to the vector.


    procedure Attach_Isr (Vector : in Vector_Id; Isr : in System.Address);

    -- Purpose:       Provide backward compatibility by overloading
    --                ATTACH_ISR with a procedure version that doesn't
    --                return the previously attached vector.


    function Detach_Isr (Vector : in Vector_Id) return System.Address;

    -- Purpose:       To detach an interrupt routine from a given
    --                interrupt vector (the attachment may have been
    --                performed during VADS kernel initialization if the vector
    --                was given an initial value in the user's interrupt
    --                vector table). Returns the previously attached ISR.
    --
    -- Where:
    --
    --   vector       specifies the number of the interrupt vector
    --                which is to be detach.  The vector number is
    --                the number, not address, of the interrupt vector.
    --
    -- Notes:         The interrupt service routine V_DEFAULT_ISR
    --                defined in the V_KRN_CONF package will
    --                be attached to the vector.
    --
    -- Exceptions:
    --
    --   INVALID_INTERRUPT_VECTOR is raised if the vector number is
    --   out-of-range.


    procedure Detach_Isr (Vector : in Vector_Id);

    -- Purpose:       Provide backward compatibility by overloading
    --                DETACH_ISR with a procedure version that doesn't
    --                return the previously attached vector.


    function Get_Isr (Vector : in Vector_Id) return System.Address;

    -- Purpose:       To return the address of the currently attached ISR
    --                for the given interrupt vector.
    -- Where:
    --
    --   vector       specifies the interrupt vector number of the ISR.
    --
    -- Exceptions:
    --
    --   INVALID_INTERRUPT_VECTOR is raised if the vector number is
    --   out-of-range.


    function Get_Ivt return System.Address;

    -- Purpose:       To return the address of the current Interrupt
    --                Vector Table (IVT).  Normally, the IVT is an array
    --                of ISR addresses.  However, the IVT representation
    --                is CPU dependent (for 386 cross, its the IDT).
    -- Exceptions:
    --
    --   None.


    function Current_Interrupt_Status return Interrupt_Status_T;

    -- Purpose:       To get the current CPU interrupt status (mask or priority
    --                level).


    function Set_Interrupt_Status
                (New_Status : in Interrupt_Status_T) return Interrupt_Status_T;

    -- Purpose:       To set the interrupt status (mask or priority) to a
    --                different setting.  The previous interrupt status
    --                is returned.
    -- Where:
    --
    --   new_status   specifies the new interrupt status setting.


    function Current_Supervisor_State return Boolean;

    -- Purpose:       To get the supervisor/user state of the current task.
    --                If the task is in supervisor state, returns TRUE.

    procedure Enter_Supervisor_State;

    -- Purpose:       To enter supervisor state for the current task.
    --                This allows subsequent execution of privilege
    --                instructions.

    procedure Leave_Supervisor_State;

    -- Purpose:       To leave supervisor state for the current task.
    --                Subsequent execution of privilege instructions results
    --                in a CPU exception.

    function Set_Supervisor_State (New_State : in Boolean) return Boolean;

    -- Purpose:       To set the supervisor/user state for the current task
    --                to a different setting.  The previous state
    --                is returned.
    --
    -- Where:
    --
    --   new_state    TRUE selects supervisor state, FALSE selects user state.

end V_Interrupts;





E3 Meta Data

    nblk1=a4
    nid=2
    hdr6=22
        [0x00] rec0=16 rec1=00 rec2=01 rec3=01c
        [0x01] rec0=13 rec1=00 rec2=94 rec3=048
        [0x02] rec0=18 rec1=00 rec2=95 rec3=082
        [0x03] rec0=13 rec1=00 rec2=96 rec3=024
        [0x04] rec0=13 rec1=00 rec2=97 rec3=00a
        [0x05] rec0=19 rec1=00 rec2=98 rec3=010
        [0x06] rec0=19 rec1=00 rec2=99 rec3=010
        [0x07] rec0=17 rec1=00 rec2=9a rec3=00c
        [0x08] rec0=19 rec1=00 rec2=9b rec3=04e
        [0x09] rec0=1f rec1=00 rec2=9c rec3=046
        [0x0a] rec0=17 rec1=00 rec2=9d rec3=002
        [0x0b] rec0=17 rec1=00 rec2=9e rec3=012
        [0x0c] rec0=18 rec1=00 rec2=9f rec3=078
        [0x0d] rec0=18 rec1=00 rec2=a0 rec3=022
        [0x0e] rec0=1d rec1=00 rec2=a1 rec3=02c
        [0x0f] rec0=1e rec1=00 rec2=a2 rec3=07a
        [0x10] rec0=19 rec1=00 rec2=a3 rec3=000
        [0x11] rec0=12 rec1=00 rec2=93 rec3=028
        [0x12] rec0=0f rec1=00 rec2=92 rec3=072
        [0x13] rec0=17 rec1=00 rec2=91 rec3=002
        [0x14] rec0=15 rec1=00 rec2=90 rec3=054
        [0x15] rec0=1e rec1=00 rec2=8f rec3=020
        [0x16] rec0=1a rec1=00 rec2=8e rec3=020
        [0x17] rec0=1b rec1=00 rec2=8d rec3=086
        [0x18] rec0=17 rec1=00 rec2=8c rec3=020
        [0x19] rec0=24 rec1=00 rec2=8b rec3=00a
        [0x1a] rec0=1d rec1=00 rec2=8a rec3=026
        [0x1b] rec0=1b rec1=00 rec2=89 rec3=024
        [0x1c] rec0=18 rec1=00 rec2=88 rec3=01a
        [0x1d] rec0=19 rec1=00 rec2=87 rec3=058
        [0x1e] rec0=1c rec1=00 rec2=86 rec3=04a
        [0x1f] rec0=1a rec1=00 rec2=85 rec3=06e
        [0x20] rec0=1b rec1=00 rec2=84 rec3=012
        [0x21] rec0=1a rec1=00 rec2=83 rec3=068
        [0x22] rec0=1d rec1=00 rec2=82 rec3=016
        [0x23] rec0=18 rec1=00 rec2=81 rec3=014
        [0x24] rec0=12 rec1=00 rec2=80 rec3=022
        [0x25] rec0=12 rec1=00 rec2=7f rec3=082
        [0x26] rec0=12 rec1=00 rec2=7e rec3=05e
        [0x27] rec0=1c rec1=00 rec2=7d rec3=020
        [0x28] rec0=19 rec1=00 rec2=7c rec3=07c
        [0x29] rec0=16 rec1=00 rec2=7b rec3=008
        [0x2a] rec0=1d rec1=00 rec2=7a rec3=01c
        [0x2b] rec0=15 rec1=00 rec2=79 rec3=02e
        [0x2c] rec0=14 rec1=00 rec2=78 rec3=002
        [0x2d] rec0=12 rec1=00 rec2=77 rec3=016
        [0x2e] rec0=11 rec1=00 rec2=76 rec3=008
        [0x2f] rec0=12 rec1=00 rec2=75 rec3=066
        [0x30] rec0=15 rec1=00 rec2=74 rec3=054
        [0x31] rec0=0f rec1=00 rec2=73 rec3=014
        [0x32] rec0=15 rec1=00 rec2=72 rec3=01c
        [0x33] rec0=10 rec1=00 rec2=71 rec3=064
        [0x34] rec0=16 rec1=00 rec2=70 rec3=05c
        [0x35] rec0=14 rec1=00 rec2=6f rec3=04c
        [0x36] rec0=1a rec1=00 rec2=6e rec3=00e
        [0x37] rec0=18 rec1=00 rec2=6d rec3=032
        [0x38] rec0=19 rec1=00 rec2=6c rec3=05e
        [0x39] rec0=19 rec1=00 rec2=6b rec3=006
        [0x3a] rec0=1a rec1=00 rec2=6a rec3=028
        [0x3b] rec0=17 rec1=00 rec2=69 rec3=032
        [0x3c] rec0=18 rec1=00 rec2=68 rec3=060
        [0x3d] rec0=1b rec1=00 rec2=67 rec3=006
        [0x3e] rec0=11 rec1=00 rec2=66 rec3=040
        [0x3f] rec0=19 rec1=00 rec2=65 rec3=02a
        [0x40] rec0=1d rec1=00 rec2=64 rec3=036
        [0x41] rec0=1f rec1=00 rec2=63 rec3=00c
        [0x42] rec0=17 rec1=00 rec2=62 rec3=032
        [0x43] rec0=19 rec1=00 rec2=61 rec3=05e
        [0x44] rec0=1a rec1=00 rec2=60 rec3=056
        [0x45] rec0=18 rec1=00 rec2=5f rec3=018
        [0x46] rec0=18 rec1=00 rec2=5e rec3=004
        [0x47] rec0=16 rec1=00 rec2=5d rec3=03e
        [0x48] rec0=17 rec1=00 rec2=5c rec3=026
        [0x49] rec0=14 rec1=00 rec2=5b rec3=032
        [0x4a] rec0=1c rec1=00 rec2=5a rec3=050
        [0x4b] rec0=1e rec1=00 rec2=59 rec3=006
        [0x4c] rec0=18 rec1=00 rec2=58 rec3=082
        [0x4d] rec0=15 rec1=00 rec2=57 rec3=03c
        [0x4e] rec0=1b rec1=00 rec2=56 rec3=06c
        [0x4f] rec0=16 rec1=00 rec2=55 rec3=016
        [0x50] rec0=1e rec1=00 rec2=54 rec3=060
        [0x51] rec0=1b rec1=00 rec2=53 rec3=03e
        [0x52] rec0=21 rec1=00 rec2=52 rec3=020
        [0x53] rec0=12 rec1=00 rec2=51 rec3=08c
        [0x54] rec0=16 rec1=00 rec2=50 rec3=06e
        [0x55] rec0=16 rec1=00 rec2=4f rec3=068
        [0x56] rec0=1c rec1=00 rec2=4e rec3=004
        [0x57] rec0=1d rec1=00 rec2=4d rec3=024
        [0x58] rec0=16 rec1=00 rec2=4c rec3=06e
        [0x59] rec0=19 rec1=00 rec2=4b rec3=04e
        [0x5a] rec0=1d rec1=00 rec2=4a rec3=026
        [0x5b] rec0=1d rec1=00 rec2=49 rec3=026
        [0x5c] rec0=18 rec1=00 rec2=48 rec3=00c
        [0x5d] rec0=17 rec1=00 rec2=47 rec3=080
        [0x5e] rec0=27 rec1=00 rec2=46 rec3=020
        [0x5f] rec0=14 rec1=00 rec2=45 rec3=02c
        [0x60] rec0=10 rec1=00 rec2=44 rec3=088
        [0x61] rec0=1a rec1=00 rec2=43 rec3=01e
        [0x62] rec0=19 rec1=00 rec2=42 rec3=04a
        [0x63] rec0=1b rec1=00 rec2=41 rec3=03c
    tail 0x21762498287c443086933 0x42a00088462060003
Free Block Chain:
  0x2: 0000  00 03 01 c0 80 20 73 75 70 70 6f 72 74 65 64 20  ┆      supported ┆
  0x3: 0000  00 04 03 fc 80 42 20 20 20 20 20 20 20 20 6e 61  ┆     B        na┆
  0x4: 0000  00 05 03 fc 00 06 20 20 20 20 2d 2d 06 00 43 20  ┆          --  C ┆
  0x5: 0000  00 06 03 fa 80 15 66 69 6e 64 20 61 6e 20 61 6c  ┆      find an al┆
  0x6: 0000  00 07 03 fc 80 1c 6f 72 74 65 64 20 62 79 20 74  ┆      orted by t┆
  0x7: 0000  00 08 03 fc 80 11 70 72 6f 67 72 61 6d 20 70 61  ┆      program pa┆
  0x8: 0000  00 09 03 fc 80 01 2e 01 00 06 20 20 20 20 2d 2d  ┆      .       --┆
  0x9: 0000  00 0a 03 fc 80 09 78 63 65 70 74 69 6f 6e 3b 09  ┆      xception; ┆
  0xa: 0000  00 0b 03 fc 80 1d 6f 20 73 70 65 63 69 66 79 20  ┆      o specify ┆
  0xb: 0000  00 0c 03 fc 80 17 20 70 72 6f 67 72 61 6d 5f 69  ┆       program_i┆
  0xc: 0000  00 0d 03 fc 80 20 72 61 67 6d 61 20 49 4e 4c 49  ┆      ragma INLI┆
  0xd: 0000  00 0e 03 fc 80 2f 63 65 64 75 72 65 20 69 73 20  ┆     /cedure is ┆
  0xe: 0000  00 0f 03 fc 00 48 20 20 20 20 2d 2d 20 20 20 55  ┆     H    --   U┆
  0xf: 0000  00 10 03 f9 80 0e 6f 66 20 70 6f 6f 6c 73 20 77  ┆      of pools w┆
  0x10: 0000  00 11 03 fc 80 0f 74 69 72 65 20 66 6c 65 78 20  ┆      tire flex ┆
  0x11: 0000  00 12 03 fc 80 08 20 6d 65 6d 6f 72 79 2e 08 00  ┆       memory.  ┆
  0x12: 0000  00 13 03 fc 80 22 20 74 68 65 20 6d 61 78 69 6d  ┆     " the maxim┆
  0x13: 0000  00 14 03 fc 80 22 20 20 20 54 6f 20 64 65 6c 65  ┆     "   To dele┆
  0x14: 0000  00 15 03 fc 80 17 65 20 6f 66 20 74 68 65 20 70  ┆      e of the p┆
  0x15: 0000  00 16 03 fc 00 1b 20 20 20 20 74 79 70 65 20 4f  ┆          type O┆
  0x16: 0000  00 17 03 fa 80 0c 20 20 20 20 6e 61 74 75 72 61  ┆          natura┆
  0x17: 0000  00 18 03 fc 00 4c 20 20 20 20 2d 2d 20 20 20 20  ┆     L    --    ┆
  0x18: 0000  00 19 03 fc 80 10 69 6f 6e 2f 64 65 61 6c 6c 6f  ┆      ion/deallo┆
  0x19: 0000  00 1a 03 fc 80 08 6c 6f 63 61 74 65 64 2e 08 00  ┆      located.  ┆
  0x1a: 0000  00 1b 03 fc 80 1c 67 65 6d 65 6e 74 20 72 6f 75  ┆      gement rou┆
  0x1b: 0000  00 1c 03 fc 80 0b 69 78 65 64 20 6d 65 6d 6f 72  ┆      ixed memor┆
  0x1c: 0000  00 1d 03 fc 80 06 59 53 54 45 4d 3b 06 00 13 70  ┆      YSTEM;   p┆
  0x1d: 0000  00 1e 03 fc 80 29 20 20 20 20 20 20 20 20 20 20  ┆     )          ┆
  0x1e: 0000  00 1f 03 fc 80 3d 50 75 72 70 6f 73 65 3a 20 20  ┆     =Purpose:  ┆
  0x1f: 0000  00 20 03 fc 80 22 20 20 20 20 20 20 20 20 20 20  ┆     "          ┆
  0x20: 0000  00 21 03 fc 80 15 69 6c 62 6f 78 20 69 73 20 6e  ┆ !    ilbox is n┆
  0x21: 0000  00 22 03 fc 80 1f 74 69 6f 6e 20 74 6f 20 62 65  ┆ "    tion to be┆
  0x22: 0000  00 23 03 fc 80 24 3a 20 69 6e 20 20 20 20 20 6d  ┆ #   $: in     m┆
  0x23: 0000  00 24 03 fc 80 0f 65 20 57 52 49 54 45 5f 4d 41  ┆ $    e WRITE_MA┆
  0x24: 0000  00 25 03 fc 80 07 46 4f 52 45 56 45 52 07 00 45  ┆ %    FOREVER  E┆
  0x25: 0000  00 26 03 fc 00 00 00 00 18 20 20 70 72 6f 63 65  ┆ &         proce┆
  0x26: 0000  00 27 03 fb 80 1b 20 77 61 69 74 69 6e 67 20 74  ┆ '     waiting t┆
  0x27: 0000  00 28 03 fc 80 0a 68 65 20 63 72 65 61 74 65 2c  ┆ (    he create,┆
  0x28: 0000  00 29 03 fc 80 1f 6c 65 20 74 68 65 20 63 75 72  ┆ )    le the cur┆
  0x29: 0000  00 2a 03 fc 80 3b 6e 6f 6e 2d 77 61 69 74 65 64  ┆ *   ;non-waited┆
  0x2a: 0000  00 2b 03 fc 80 1f 72 61 69 73 65 64 20 69 66 20  ┆ +    raised if ┆
  0x2b: 0000  00 2c 03 fc 80 17 20 20 20 20 20 20 20 20 20 20  ┆ ,              ┆
  0x2c: 0000  00 2d 03 fc 80 22 62 65 20 72 61 69 73 65 64 20  ┆ -   "be raised ┆
  0x2d: 0000  00 2e 03 fc 80 0d 61 69 74 69 6e 67 20 6f 6e 20  ┆ .    aiting on ┆
  0x2e: 0000  00 2f 03 fc 80 01 61 01 00 45 2d 2d 20 20 20 20  ┆ /    a  E--    ┆
  0x2f: 0000  00 30 03 fc 80 0c 20 73 70 65 63 69 66 79 20 68  ┆ 0     specify h┆
  0x30: 0000  00 31 03 fc 80 1b 20 74 79 70 65 20 62 69 6e 61  ┆ 1     type bina┆
  0x31: 0000  00 32 03 fc 80 26 20 20 20 20 20 20 20 20 20 20  ┆ 2   &          ┆
  0x32: 0000  00 33 03 fc 80 10 69 6e 20 20 20 20 20 64 75 72  ┆ 3    in     dur┆
  0x33: 0000  00 34 03 fc 80 0d 20 61 20 73 65 6d 61 70 68 6f  ┆ 4     a semapho┆
  0x34: 0000  00 35 03 fc 80 30 20 20 20 20 20 20 20 20 20 20  ┆ 5   0          ┆
  0x35: 0000  00 36 03 fc 00 49 20 20 20 20 2d 2d 20 20 20 20  ┆ 6   I    --    ┆
  0x36: 0000  00 37 03 f9 80 04 48 4f 52 45 04 00 30 20 20 20  ┆ 7    HORE  0   ┆
  0x37: 0000  00 38 03 fc 80 0b 61 70 68 6f 72 65 5f 69 64 29  ┆ 8    aphore_id)┆
  0x38: 0000  00 39 03 fc 80 2e 20 20 52 65 61 64 79 20 61 6c  ┆ 9   .  Ready al┆
  0x39: 0000  00 3a 03 fc 80 03 69 6c 73 03 00 3c 20 20 20 20  ┆ :    ils  <    ┆
  0x3a: 0000  00 3b 03 fc 80 08 4d 41 50 48 4f 52 45 3a 08 00  ┆ ;    MAPHORE:  ┆
  0x3b: 0000  00 3c 03 fc 80 24 73 20 74 68 65 20 69 6e 69 74  ┆ <   $s the init┆
  0x3c: 0000  00 3d 03 fc 80 3d 20 20 20 20 20 20 20 20 20 20  ┆ =   =          ┆
  0x3d: 0000  00 3e 03 fc 80 2f 28 69 6e 69 74 69 61 6c 5f 63  ┆ >   /(initial_c┆
  0x3e: 0000  00 3f 03 fc 80 19 45 20 20 20 20 20 20 20 20 20  ┆ ?    E         ┆
  0x3f: 0000  00 40 03 fc 80 43 45 4d 41 50 48 4f 52 45 5f 4e  ┆ @   CEMAPHORE_N┆
  0x40: 0000  00 41 03 fc 80 10 20 20 20 20 3a 20 65 78 63 65  ┆ A        : exce┆
  0x41: 0000  00 42 03 fc 80 24 6c 79 2c 20 74 68 65 73 65 20  ┆ B   $ly, these ┆
  0x42: 0000  00 43 03 fc 80 37 69 6e 67 20 74 79 70 65 20 72  ┆ C   7ing type r┆
  0x43: 0000  00 44 03 fc 00 17 2d 2d 20 20 20 20 20 20 20 20  ┆ D    --        ┆
  0x44: 0000  00 45 03 f9 80 33 6c 65 20 28 74 68 65 20 63 6f  ┆ E   3le (the co┆
  0x45: 0000  00 46 03 fc 80 33 5f 53 45 4d 41 50 48 4f 52 45  ┆ F   3_SEMAPHORE┆
  0x46: 0000  00 47 03 fc 80 08 6e 73 3a 20 20 74 68 65 08 00  ┆ G    ns:  the  ┆
  0x47: 0000  00 48 03 fc 00 4c 20 20 20 20 2d 2d 20 20 6d 75  ┆ H   L    --  mu┆
  0x48: 0000  00 49 03 fa 80 29 6e 74 69 66 69 65 73 20 74 68  ┆ I   )ntifies th┆
  0x49: 0000  00 4a 03 fc 80 16 20 20 20 20 20 3a 20 69 6e 20  ┆ J         : in ┆
  0x4a: 0000  00 4b 03 fc 80 20 73 65 64 20 69 66 20 61 20 74  ┆ K    sed if a t┆
  0x4b: 0000  00 4c 03 fc 80 12 20 72 65 74 75 72 6e 73 20 61  ┆ L     returns a┆
  0x4c: 0000  00 4d 03 fc 80 04 61 6d 65 2e 04 00 06 20 20 20  ┆ M    ame.      ┆
  0x4d: 0000  00 4e 03 fc 80 04 20 20 2d 2d 04 00 0d 20 20 20  ┆ N      --      ┆
  0x4e: 0000  00 4f 03 fc 80 0f 65 64 75 72 65 20 69 73 20 63  ┆ O    edure is c┆
  0x4f: 0000  00 50 03 fc 80 08 45 55 49 4e 47 20 29 3b 08 00  ┆ P    EUING );  ┆
  0x50: 0000  00 51 03 fc 80 0a 72 20 70 72 6f 67 72 61 6d 73  ┆ Q    r programs┆
  0x51: 0000  00 52 03 fc 80 07 54 45 5f 43 4f 4e 44 07 00 35  ┆ R    TE_COND  5┆
  0x52: 0000  00 53 03 fc 80 1e 74 68 65 20 6d 75 74 65 78 20  ┆ S    the mutex ┆
  0x53: 0000  00 54 03 fc 80 18 63 65 65 64 2e 20 20 49 66 20  ┆ T    ceed.  If ┆
  0x54: 0000  00 55 03 fc 80 02 65 2e 02 00 00 00 00 19 20 20  ┆ U    e.        ┆
  0x55: 0000  00 56 03 fc 00 06 20 20 20 20 2d 2d 06 00 44 20  ┆ V        --  D ┆
  0x56: 0000  00 57 03 f9 80 27 5f 4e 4f 54 5f 57 41 49 54 20  ┆ W   '_NOT_WAIT ┆
  0x57: 0000  00 58 03 fc 00 4c 20 20 20 20 2d 2d 20 20 20 20  ┆ X   L    --    ┆
  0x58: 0000  00 59 03 fb 80 3a 20 2d 2d 20 20 20 20 42 49 4e  ┆ Y   : --    BIN┆
  0x59: 0000  00 5a 03 fc 80 04 61 73 6b 2e 04 00 00 00 00 00  ┆ Z    ask.      ┆
  0x5a: 0000  00 5b 03 fc 80 30 73 20 74 68 65 20 61 74 74 72  ┆ [   0s the attr┆
  0x5b: 0000  00 5c 03 fc 80 2c 43 72 65 61 74 65 73 20 61 20  ┆ \   ,Creates a ┆
  0x5c: 0000  00 5d 03 fc 80 23 6e 20 20 20 20 41 44 41 5f 4b  ┆ ]   #n    ADA_K┆
  0x5d: 0000  00 5e 03 fc 80 33 2d 2d 20 4e 4f 54 5f 41 5f 43  ┆ ^   3-- NOT_A_C┆
  0x5e: 0000  00 5f 03 fc 80 1e 41 4c 52 45 41 44 59 5f 42 4f  ┆ _    ALREADY_BO┆
  0x5f: 0000  00 60 03 fc 80 1e 5f 43 4f 4e 44 20 69 66 20 61  ┆ `    _COND if a┆
  0x60: 0000  00 61 03 fc 80 0c 53 4f 4c 56 45 5f 4d 55 54 45  ┆ a    SOLVE_MUTE┆
  0x61: 0000  00 62 03 fc 80 32 78 20 69 73 20 6c 6f 63 6b 65  ┆ b   2x is locke┆
  0x62: 0000  00 63 03 fc 80 38 49 4d 45 44 5f 57 41 49 54 5f  ┆ c   8IMED_WAIT_┆
  0x63: 0000  00 64 03 fc 80 03 41 4d 45 03 00 26 2d 2d 20 20  ┆ d    AME  &--  ┆
  0x64: 0000  00 65 03 fc 80 23 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ┆ e   #==========┆
  0x65: 0000  00 66 03 fc 80 23 76 61 6c 69 64 20 75 6e 6c 6f  ┆ f   #valid unlo┆
  0x66: 0000  00 67 03 fc 80 42 20 20 20 20 20 20 20 20 20 20  ┆ g   B          ┆
  0x67: 0000  00 68 03 fc 80 1a 20 66 6f 72 20 74 68 65 20 63  ┆ h     for the c┆
  0x68: 0000  00 69 03 fc 80 2e 6b 20 66 72 6f 6d 20 62 65 69  ┆ i   .k from bei┆
  0x69: 0000  00 6a 03 fc 80 2c 20 20 54 6f 20 61 6c 6c 6f 77  ┆ j   ,  To allow┆
  0x6a: 0000  00 6b 03 fc 80 03 20 2d 2d 03 00 49 20 20 20 20  ┆ k     --  I    ┆
  0x6b: 0000  00 6c 03 fc 80 1a 66 6f 72 20 74 68 65 20 56 41  ┆ l    for the VA┆
  0x6c: 0000  00 6d 03 fc 80 30 70 72 6f 76 69 64 65 64 20 61  ┆ m   0provided a┆
  0x6d: 0000  00 6e 03 fc 80 25 61 20 49 4e 4c 49 4e 45 5f 4f  ┆ n   %a INLINE_O┆
  0x6e: 0000  00 6f 03 fc 80 1b 73 6b 5f 6e 61 6d 65 20 20 20  ┆ o    sk_name   ┆
  0x6f: 0000  00 70 03 fc 80 1c 6e 74 65 67 65 72 29 3b 20 20  ┆ p    nteger);  ┆
  0x70: 0000  00 71 03 fc 80 1b 20 64 69 66 66 65 72 65 6e 74  ┆ q     different┆
  0x71: 0000  00 72 03 fc 80 3e 20 20 20 20 20 20 20 20 70 72  ┆ r   >        pr┆
  0x72: 0000  00 73 03 fc 80 3b 20 20 20 20 20 20 20 20 20 20  ┆ s   ;          ┆
  0x73: 0000  00 74 03 fc 80 1e 20 74 68 65 20 75 73 65 72 20  ┆ t     the user ┆
  0x74: 0000  00 75 03 fc 80 16 74 68 65 20 56 41 44 53 5f 4d  ┆ u    the VADS_M┆
  0x75: 0000  00 76 03 fc 80 41 2d 2d 20 20 20 20 20 20 20 20  ┆ v   A--        ┆
  0x76: 0000  00 77 03 fc 80 40 20 20 20 20 20 20 20 20 20 49  ┆ w   @         I┆
  0x77: 0000  00 78 03 fc 80 44 20 20 20 2d 2d 20 20 20 20 20  ┆ x   D   --     ┆
  0x78: 0000  00 79 03 fc 80 07 41 4d 5f 43 41 4c 4c 07 00 3f  ┆ y    AM_CALL  ?┆
  0x79: 0000  00 7a 03 fc 80 37 20 20 20 20 20 20 73 65 72 76  ┆ z   7      serv┆
  0x7a: 0000  00 7b 03 fc 80 02 2d 2d 02 00 49 20 20 20 20 2d  ┆ {    --  I    -┆
  0x7b: 0000  00 7c 03 fc 80 0d 64 2e 20 4f 74 68 65 72 77 69  ┆ |    d. Otherwi┆
  0x7c: 0000  00 7d 03 fc 80 3f 52 4f 47 52 41 4d 28 74 61 73  ┆ }   ?ROGRAM(tas┆
  0x7d: 0000  00 7e 03 fc 80 1a 70 72 6f 63 20 6d 75 73 74 20  ┆ ~    proc must ┆
  0x7e: 0000  00 7f 03 fc 80 08 74 61 72 67 65 74 73 2c 08 00  ┆      targets,  ┆
  0x7f: 0000  00 80 03 fc 80 2e 20 20 20 74 68 65 20 4f 53 27  ┆     .   the OS'┆
  0x80: 0000  00 81 03 fc 80 3c 20 20 20 20 20 20 20 20 20 20  ┆     <          ┆
  0x81: 0000  00 82 03 fc 80 0c 72 65 64 20 52 75 6e 74 69 6d  ┆      red Runtim┆
  0x82: 0000  00 83 03 fc 80 10 20 74 68 65 20 74 68 65 20 74  ┆       the the t┆
  0x83: 0000  00 84 03 fc 80 3a 20 20 20 20 20 20 20 20 20 20  ┆     :          ┆
  0x84: 0000  00 85 03 fc 80 04 61 73 6b 2e 04 00 06 20 20 20  ┆      ask.      ┆
  0x85: 0000  00 86 03 fc 80 0d 20 61 20 6e 65 77 20 76 61 6c  ┆       a new val┆
  0x86: 0000  00 87 03 fc 80 08 6e 74 20 74 61 73 6b 2e 08 00  ┆      nt task.  ┆
  0x87: 0000  00 88 03 fc 80 38 65 3a 20 20 20 20 20 54 68 69  ┆     8e:     Thi┆
  0x88: 0000  00 89 03 fc 80 3b 55 53 50 45 4e 44 20 69 73 20  ┆     ;USPEND is ┆
  0x89: 0000  00 8a 03 fc 80 04 69 6d 65 3a 04 00 06 20 20 20  ┆      ime:      ┆
  0x8a: 0000  00 8b 03 fc 80 1e 67 6d 61 20 49 4e 4c 49 4e 45  ┆      gma INLINE┆
  0x8b: 0000  00 8c 03 fc 80 0b 4f 4e 4c 59 28 56 5f 49 44 29  ┆      ONLY(V_ID)┆
  0x8c: 0000  00 8d 03 fc 80 02 68 65 02 00 4a 20 20 20 20 2d  ┆      he  J    -┆
  0x8d: 0000  00 8e 03 fc 80 3b 20 20 54 6f 20 72 65 74 75 72  ┆     ;  To retur┆
  0x8e: 0000  00 8f 03 fc 80 1d 20 20 20 20 20 20 20 20 20 20  ┆                ┆
  0x8f: 0000  00 90 03 fc 00 00 00 00 38 20 20 74 79 70 65 20  ┆        8  type ┆
  0x90: 0000  00 91 03 fa 80 44 20 2d 2d 20 54 79 70 65 20 6f  ┆     D -- Type o┆
  0x91: 0000  00 92 03 fc 80 01 72 01 00 48 2d 2d 20 20 20 20  ┆      r  H--    ┆
  0x92: 0000  00 93 03 fc 80 34 72 65 61 64 27 73 20 74 61 73  ┆     4read's tas┆
  0x93: 0000  00 a4 03 fc 80 18 69 6e 20 61 20 72 65 61 64 79  ┆      in a ready┆
  0xa4: 0000  00 00 0e 80 20 01 01 a0 03 f0 54 34 00 7c 07 04  ┆          T4 |  ┆