|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 168960 (0x29400)
Types: Ada Source
Notes: 03_class, FILE, Long Ada Source, R1k_Segment, e3_tag, generic, package V_Interrupts, seg_04f07a
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- 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;
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 0x2175682728773683a5199 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 | ┆