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

⟦a3b5e4a33⟧ TextFile

    Length: 11170 (0x2ba2)
    Types: TextFile
    Notes: R1k Text-file segment

Derivation

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

TextFile

-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--   VERDIX CORPORATION                               (C) COPYRIGHT 1988, 1989
--   14130-A Sullyfield Circle                        Proprietary Information
--   Chantilly, Virginia 22021                        Not to be Disclosed
--
--  FILE:     V_USR_CONF_I.A
--
--  UNIT:     VADS Interface for Configuring A User Program for
--            VADS_MICRO/MC68020.
--
--  PURPOSE:  This package provides the interface to VADS used by the 
--            the package V_USR_CONF.  It contains types, objects,
--            and subprograms used to convey configuration information to and
--            from VADS.
--
--            This package consists of the following type definitions,
--            constants and subprogram interfaces:
--            1.  Small block sizes table
--			  2.  Memory allocation configuration table
--            3.  Configuration table
--            4.  Misc user program variables
--            5.  Ada RTS init
--            6.  Ada exit subprogram
--
--  NOTES:    Do not modify this package.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
with SYSTEM;        use SYSTEM;
with ada_krn_defs;
with link_block;
with v_i_types;
with v_i_cifo;
with language;      use language;
with unchecked_conversion;

package V_USR_CONF_I is

    pragma suppress(ALL_CHECKS);
    pragma suppress(EXCEPTION_TABLES);
    pragma not_elaborated;
    pragma local_access;

	subtype alloc_t is v_i_types.alloc_t;

------------------------ #i1: Small Block Sizes Table --------------------------

    type small_block_sizes_t is array(positive range <>) of alloc_t;

----------------- #i2: Memory Allocation Configuration Table -------------------

	type allocation_strategy_t is (FIRST_FIT, BEST_FIT);

	type mem_alloc_conf_table_t is record
		min_size                  : alloc_t;
                                    -- for larger objects, gives the size at
                                    -- which an over-large space will be broken
                                    -- into a perfect fit and a new free
                                    -- storage block.  Should be set to
									-- smallest block one ever expects to
									-- allocate and should never be larger
									-- than the smallest block in the
									-- small_block_sizes list table
		num_small_block_sizes     : integer;
                                    -- specifies the number of elements in
                                    -- the small block sizes table.
		small_block_sizes_address : address;
                                    -- starting location of the small block
                                    -- sizes table.
		min_list_length           : integer;
                                    -- specifies the minimum list length
									-- of a small blocks list to keep the
									-- allocator from coalescing blocks off
									-- of the list. (Used for tuning
									-- performance)
		intr_obj_size             : alloc_t;
                                    -- specifies fixed size of
									-- blocks to be allocated when a "new" is
									-- performed from an interrupt handler
		initial_intr_heap         : integer;
                                    -- specifies number of blocks to be
									-- pre-allocated for allocation from
									-- an interrupt handler.
		allocation_strategy       : allocation_strategy_t;
                                    -- specifies aa_global_new's strategy
                                    -- to be used when choosing a block
                                    -- from the free list.
    end record;


-------------------------- #i3: Configuration Table ----------------------------

    type configuration_table_t is record
      main_task_stack_size      : natural;
                                    -- Size of main subprogram's stack. Stack
                                    -- size excludes room at bottom for
                                    -- exception handling.
      default_task_stack_size   : natural;
                                    -- Default size for each task's stack
                                    -- area. This value is overridden
                                    -- via the "for T'STORAGE_SIZE use ###"
                                    -- length clause.
	  exception_stack_size	    : natural;
									-- Space set aside below the bottom
									-- of the task stack for exception
									-- unwinding.
	  idle_stack_size			: natural;	
									-- Size of stack for the idle task.
	  signal_task_stack_size	: natural;
									-- Size of stack for tasks created
									-- for doing rendezvous with
									-- interrupt entries.
	  fast_rendezvous_enabled	: boolean;
                                    -- When true, if the acceptor task
									-- is already waiting, then, the
									-- rendzvous is executed in the context
									-- of the caller task.
	  wait_stack_size			: natural;	
									-- For a fast rendezvous, the acceptor
									-- saves it register context, switches
									-- to a wait stack and waits. Eventually,
									-- the caller task restores and uses the
									-- acceptor's saved register context.
									-- This parameter
									-- specifies how much stack is needed
									-- for when the acceptor switches from
									-- its normal task stack to a special
									-- stack it can use to call a kernel
									-- service to block itself.
									--
									-- If fast_rendezvous_enabled == FALSE,
									-- then, not used.
	  heap_extend               : alloc_t;
                                    -- the minimum number of storage units
                                    -- requested from get_heap_memory_callout
	  get_heap_memory_callout   : address;
                                    -- is the address of the routine
                                    -- called when more memory is needed
                                    -- by the underlying allocator for
                                    -- "new" allocations
      mem_alloc_conf_table_address : address;
                                    -- starting location of the table that
									-- specifies memory allocation
									-- configuration and tuning parameters
									-- (can be user defined)
	  default_task_attributes   : ada_krn_defs.task_attr_t;
                                    -- Default task attributes to be
                                    -- passed to underlying OS at task
                                    -- create.
	  main_task_attr_address	: address;
									-- is the address of the task attributes
									-- to be used for the main task. Set
									-- to NO_ADDR to use the default task
									-- attributes.
	  signal_task_attr_address  : address;
									-- is the address of the task attributes
									-- to be used for the tasks created to
									-- rendezvous with interrupt entries.
									-- Set to NO_ADDR to use the default task
									-- attributes.
	  masters_mutex_attr_address: address;
									-- is the address of the mutex attributes
									-- to be used to initialize the Ada
									-- kernel's master mutex.
									--
									-- Set to NO_ADDR to use the default
									-- mutex attributes.
	  mem_alloc_mutex_attr_address: address;
									-- is the address of the mutex attributes
									-- to be used to initialize the mutex
									-- used for mutual exclusion during
									-- memory allocation.
									--
									-- Set to NO_ADDR to use the default
									-- mutex attributes.
	  ada_io_mutex_attr_address : address;
									-- is the address of the mutex attributes
									-- to be used to initialize the mutex
									-- used for mutual exclusion during
									-- Ada I/O operations.
									--
									-- Set to NO_ADDR to use the default
									-- mutex attributes.
      old_style_max_intr_entry  : address;
									-- For backwards compatibility, if the
									-- address in the interrupt entry 
									-- "for use at" clause is <=
									-- OLD_STYLE_MAX_INTR_ENTRY, then, it
									-- contains the interrupt vector value and
									-- not a pointer to the
									-- ada_krn_defs.intr_entry_t record.
									-- Setting OLD_STYLE_MAX_INTR_ENTRY to 0
									-- disables the old way of interpretation.
    end record;

	type a_configuration_table_t is access configuration_table_t;
	function to_a_configuration_table_t is new unchecked_conversion(
		address, a_configuration_table_t);


--------------------- #i4: Misc User Program Variables -------------------------

    stack_limit: address;

    pragma interface_name(stack_limit, "STACK_LIMIT");
      -- Bottom of user program's stack.  This location is updated by
      -- the kernel for each task switch.

	stop: address;
    pragma interface_name(stop, "_STOP");
      -- Top return address on the call stack. Used to "stop" exception
      -- unwinding.

	
	-- The user's link block is created by the linker
	usr_link_block: link_block.link_block_t;
		pragma interface_name(usr_link_block, "LINK_BLOCK");


---------------------------- #i5: Ada RTS Init ------------------------------

	-- This routine is called explicity by startup to set up the Ada RTS
	function TS_INITIALIZE(
		usr_link_block		: link_block.a_link_block_t;
		configuration_table	: v_usr_conf_i.a_configuration_table_t;
		main_pragmas		: v_i_cifo.a_main_pragmas_t;
		startup_continue	: address) return integer;
      pragma interface(ADA, TS_INITIALIZE);
	  pragma interface_name(ts_initialize, "TS_INITIALIZE");

      -- TS_INITIALIZE is called from the user startup program to
	  -- boot/initialize the tasking and memory allocation data structures.
	  -- When TS_INITIALIZE completes its processing, control is
	  -- transferred to startup_continue.
	  --
	  -- If TS_INITIALIZE returns, then, the program is ready to exit and
	  -- it returns the exit status.


	-- This routine is called explicity by startup to initialize
	-- the Ada "new" allocation
	procedure AA_INIT(
		configuration_table: v_usr_conf_i.a_configuration_table_t);
	  pragma interface(ADA, AA_INIT);
	  pragma interface_name(AA_INIT, "AA_INIT");


------------------------- #i6: Ada Exit Subprogram -----------------------------

    procedure ADA_EXIT(status: integer := 0);
      pragma interface(ADA, ADA_EXIT);
      pragma interface_name(ADA_EXIT, "_ADA_EXIT");

      -- ADA_EXIT is called when the last elaborated package (main subprogram)
      -- returns. It does cleanup logic before returning back to OS.

-- These routines will not exist unless a DA runtime is used               --
------------------------- #i7: DA configuration -----------------------------

    procedure dt_start;
      pragma interface(ADA, dt_start);
      pragma interface_name(dt_start, "DT_START");
	
	procedure dt_elaborate;
      pragma interface(ADA, dt_elaborate);
      pragma interface_name(dt_elaborate, "DT_ELABORATE");

end V_USR_CONF_I