|
|
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: 17408 (0x4400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package V_Krn_Conf_I, seg_04ce21
└─⟦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
-- 14130-A Sullyfield Circle Proprietary Information
-- Chantilly, Virginia 22021 Not to be Disclosed
--
-- FILE: V_KRN_CONF_I.A
--
-- UNIT: VADS Interface for Configuring the Tasking (or No
-- Tasking) Kernel Program for the M68000 Processor Family Cross
-- Targets.
--
-- PURPOSE: This package provides the interface to the VADS kernel used by
-- the package V_KRN_CONF. It contains types, objects,
-- and subprograms used to convey configuration information to and
-- from the kernel. It also contains a generic for an
-- interrupt handler linked into the kernel program and the kernel
-- subprograms that can be called from interrupt handler packages
-- linked into the kernel program.
--
-- This package consists of the following type definitions,
-- constants, generics and kernel subprogram interfaces:
-- 1. Startup table
-- 2. Interrupt vector table
-- 3. Configuration table
-- 4. Misc kernel program variables
-- 5. VADS supplied kernel ISRs
-- 6. Boot subprogram
-- 7. Execute subprogram
-- 8. Interrupt handler generic
-- 9 . Kernel service subprograms
--
-- NOTES: Do not modify this package.
--
-- This package may only be included in the kernel program.
-- It MAY NOT be included in the user or TDM programs.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- Revision History:
--
-- 870706:2132 A00 Initial version.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
with System;
use System;
with Krn_Defs;
with V_I_Types;
with Link_Block;
with Unchecked_Conversion;
package V_Krn_Conf_I is
pragma Suppress (All_Checks);
pragma Suppress (Exception_Tables);
--------------------------- #i1: Startup Table ---------------------------------
type Startup_Table_T is
record
Startup_Stack_Base : Address;
-- specifies the address at which the
-- stack used during system
-- startup should begin. The stack
-- will grow from this address towards
-- lower memory.
--
-- Normally set to top of the heap/stack
-- area.
--
-- This stack is only used during startup.
Startup_Stack_Size : Integer;
-- is the size in BYTES of the startup
-- stack.
end record;
----------------------- #i2: Interrupt Vector Table ----------------------------
type Interrupt_Vector_Table_T is array (Natural range <>) of Address;
Untouchable_Vector : constant Address :=
System.Memory_Address (16#FFFF_FFFF#);
-------------------------- #i3: Configuration Table ----------------------------
subtype Floating_Point_Control_T is V_I_Types.Floating_Point_Control_T;
type Configuration_Table_T is
record
Heap_Stack_Bottom : Address;
Heap_Stack_Top : Address;
-- Bottom and top of memory where heaps
-- and stacks are allocated from.
-- Normally, HEAP_STACK_BOTTOM will be
-- set to first ram address following
-- end of kernel/TDM/user programs and
-- HEAP_STACK_TOP set to highest ram
-- location.
-- If HEAP_STACK_BOTTOM is set to the
-- constant,
-- v_krn_conf_i.END_OF_USER_PROGRAM,
-- then, this value is computed
-- dynamically by reading the user
-- program's group tables.
Krn_Stack_Size : Integer;
-- Size of kernel's stack.
Intr_Stack_Size : Integer;
-- Size of interrupt stack.
-- Stack size excludes room at bottom for
-- exception handling.
Krn_Exception_Stack_Size : Natural;
-- Space below the bottom of the
-- interrupt handlers' stack or the
-- kernel task stacks for exception
-- unwinding.
Task_Supervisor_Stack_Size : Integer;
-- Size of supervisor stack needed for
-- tasks executing in user state. The
-- task's supervisor stack is used for
-- kernel traps, numeric exception
-- handling and external interrupt
-- handling (before switching to interrupt
-- stack). Not used if
-- SUPERVISOR_TASKS_ENABLED parameter
-- is TRUE.
Zero_Stacks_Enabled : Boolean;
-- When true, at task create its
-- stack area is zeroed. Since the
-- stack area for all tasks is zeroed
-- at startup, normally only set to true
-- when using the debugger's "lt use"
-- command for dynamically terminated and
-- re-created tasks.
Supervisor_Tasks_Enabled : Boolean;
-- Set to TRUE to enable execution
-- of all user tasks in supervisor state.
Master_State_Enabled : Boolean;
-- When TRUE, the kernel and
-- supervisor tasks use the master
-- stack instead of the interrupt stack.
-- Not applicable to mc68000 or mc68010
-- processors.
User_Status : Short_Integer;
-- Setting of status register when user
-- program is started at completion of
-- kernel startup. If above
-- SUPERVISOR_TASKS_ENABLED parameter
-- is TRUE, then, user program is
-- started in supervisor state
-- irregardless of the S bit value for
-- this parameter. The above
-- MASTER_STATE_ENABLED parameter
-- is used to determine the setting
-- of the M bit.
Disable_Intr_Priority : Short_Integer;
-- Setting of interrupt priority mask
-- within status register when interrupts
-- are disabled within kernel.
--
-- Note only bits 8 .. 10 are used.
Vector_Base_Register : Address;
-- starting location of the interrupt
-- vector table.
Interrupt_Vector_Size : Integer;
-- indicates the number of interrupt
-- vectors associated with this processor.
Interrupt_Vector_Image : Address;
-- starting location of the user's image
-- of the vector table.
Floating_Point_Control : Floating_Point_Control_T;
-- is the initial value for the fpcr
-- register on the MC68881.
Time_Slicing_Enabled : Boolean;
-- Set to TRUE to enable time slicing.
Time_Slice_Interval : Duration;
-- Task's initial time slice value.
Time_Slice_Priority : Priority;
-- If time slicing is enabled, then, it
-- is only applicable to tasks whose
-- priority is less than or equal to
-- this threshold priority.
Idle_Stack_Size : Integer;
-- specifies the size in BYTES of the
-- internal Idle Task's stack.
Task_Storage_Size : Integer;
-- specifies the size in BYTES of the
-- area allocated in the task control
-- block for user storage
Pending_Count : Integer;
-- specifies the maximum number of kernel
-- service requests from an ISR (or
-- nested ISR) held pending until the
-- outer-most ISR completes. When
-- the outer-most ISR completes,
-- the kernel processes the queue of
-- pending requests.
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);
Untouchable_Vbr : constant Address := System.Memory_Address (16#FFFF_FFFF#);
No_Vbr : constant Address := System.Memory_Address (16#FFFF_FFFE#);
Untouchable_Table : constant Address :=
System.Memory_Address (16#FFFF_FFFF#);
End_Of_User_Program : constant Address :=
System.Memory_Address (16#FFFF_FFFF#);
--------------------- #i4: Misc Kernel Program Variables -----------------------
Stack_Limit : Address;
pragma Interface_Name (Stack_Limit, "STACK_LIMIT");
-- Bottom of kernel/interrupt stack
User_Link_Block : Link_Block.Link_Block_T;
pragma Interface_Name (User_Link_Block, "USER_LINK_BLOCK");
-- Link block in user's program.
Group_Table : array (1 .. 1) of Character;
pragma Interface_Name (Group_Table, "GROUP_TABLE");
-- Table generated by the cross linker that defines the
-- memory locations of the different program groups (text, constant,
-- data, bss and void). Compiler defined dope vector information
-- precedes the group records.
------------------------- #i5: VADS Supplied ISRs ------------------------------
procedure Bus_Error_Handler;
pragma Interface (Ada, Bus_Error_Handler);
pragma Interface_Name (Bus_Error_Handler, "KRN_BUS_ERROR_HANDLER");
-- #2
procedure Address_Error_Handler;
pragma Interface (Ada, Address_Error_Handler);
pragma Interface_Name (Address_Error_Handler, "KRN_ADDRESS_ERROR_HANDLER");
-- #3
procedure Zero_Divide_Handler;
pragma Interface (Ada, Zero_Divide_Handler);
pragma Interface_Name (Zero_Divide_Handler, "KRN_ZERO_DIVIDE_HANDLER");
-- #5
procedure Chk_Instr_Handler;
pragma Interface (Ada, Chk_Instr_Handler);
pragma Interface_Name (Chk_Instr_Handler, "KRN_CHK_INSTR_HANDLER");
-- #6
procedure Trapv_Cc_Instr_Handler;
pragma Interface (Ada, Trapv_Cc_Instr_Handler);
pragma Interface_Name (Trapv_Cc_Instr_Handler,
"KRN_TRAPV_CC_INSTR_HANDLER");
-- #7
procedure Float_Error_Handler;
pragma Interface (Ada, Float_Error_Handler);
pragma Interface_Name (Float_Error_Handler, "KRN_FLOAT_ERROR_HANDLER");
-- #50, 52, 53, 54
procedure Enter_From_User;
pragma Interface (Ada, Enter_From_User);
pragma Interface_Name (Enter_From_User, "__KRN_ENTER_FROM_USER");
-- Kernel service trap
-- #32 - trap 0 (default)
------------------------- #i6: Boot Subprogram ---------------------------------
procedure V_Boot (Configuration_Table_A : Address);
-- specifies the user's configuration table
-- declared in the configuration package.
pragma Interface (Ada, V_Boot);
pragma Interface_Name (V_Boot, "V_BOOT");
-- V_BOOT is called from the kernel startup program to
-- boot/initialize the kernel's tasking data structures.
------------------------ #i7: Execute Subprogram -------------------------------
procedure V_Execute;
pragma Interface (Ada, V_Execute);
pragma Interface_Name (V_Execute, "V_EXECUTE");
-- V_EXECUTE is called at the end of the kernel startup program to
-- start execution of the user program
---------------------- #i8: Interrupt Handler Generic --------------------------
generic
with procedure Process_Interrupt;
procedure Interrupt_Handler;
pragma Share_Body (Interrupt_Handler, False);
-- Interrupt handler wrapper
--
-- Instantiate your handler by:
-- my_interrupt_handler is new
-- V_KRN_CONF_I.interrupt_handler(my_process_interrupt);
--
-- See generic body below for details.
----------------------- #i9: Kernel Service Subprograms ------------------------
subtype Intr_Status_T is Krn_Defs.Intr_Status_T;
procedure Interrupts_Disable (Old_Status : out Intr_Status_T);
pragma Interface (Ada, Interrupts_Disable);
pragma Interface_Name (Interrupts_Disable, "__KRN_INTERRUPTS_DISABLE");
-- Disables interrupts by setting the Status Register's Interrupt
-- Priority Level (IPL) according to the DISABLE_INTR_PRIORITY
-- configuration parameter. The IPL is read before it is modified.
procedure Interrupts_Restore (Restore_Status : Intr_Status_T);
pragma Interface (Ada, Interrupts_Restore);
pragma Interface_Name (Interrupts_Restore, "__KRN_INTERRUPTS_RESTORE");
-- Restores IPL using status returned by previous
-- DISABLE_INTERRUPTS invocation.
function Replace_Vector
(Iv : Krn_Defs.Intr_Vector_Id_T; Isr : Address) return Address;
pragma Interface (Ada, Replace_Vector);
pragma Interface_Name (Replace_Vector, "__KRN_REPLACE_VECTOR");
-- Replace interrupt vector
--
-- intr_num - interrupt vector number
-- handler_address - the address of the handler to be placed
-- in the interrupt vector table, NO_ADDR
-- implies replace with RTS kernel's null handler
--
-- Returns the address of the previously installed handler.
procedure Isr_Enter;
pragma Interface (Ada, Isr_Enter);
pragma Interface_Name (Isr_Enter, "__KRN_ISR_ENTER");
-- Enter ISR handler
--
-- Increments the interrupt depth and switches to the interrupt stack
-- if the depth was incremented from 0 to 1.
--
-- Note: if MASTER_STATE is enabled for mc68020, the CPU already did
-- a switch from master to interrupt stack for an external interrupt.
--
-- The scratch registers (d0/d1/d2/d3/a0/a1) must be saved before calling
-- ISR_ENTER.
--
-- The address of the previous
-- stack is pushed on the new stack. This address is also pushed
-- for nested interrupts. The address points to last entry
-- pushed on the stack before the call.
--
--
procedure Isr_Complete;
pragma Interface (Ada, Isr_Complete);
pragma Interface_Name (Isr_Complete, "__KRN_ISR_COMPLETE");
-- Complete ISR handler
--
-- ISR_COMPLETE expects stack to look as follows -- 0 - return pc back to handler
-- 4 - pointer to previous stack (see below) (normally, the
-- address pushed on the new stack by ISR_ENTER)
--
-- where previous stack looks as follows:
-- 0 - d0/d1/d2/d3/a0/a1 (saved scratch registers)
-- 24 - handler's exception stack frame
--
-- ISR_ENTER must have been previously called for this interrupt.
--
--
-- Note: no return back to interrupt handler.
procedure Post_Alarm;
pragma Interface (Ada, Post_Alarm);
pragma Interface_Name (Post_Alarm, "__KRN_POST_ALARM");
-- Post alarm
--
-- This procedure is called by the timer interrupt handler
-- (in V_KRN_CONF.V_TIMER_SUPPORT package) to notify the
-- RTS that the scheduled alarm has been reached.
end V_Krn_Conf_I;
nblk1=10
nid=0
hdr6=20
[0x00] rec0=14 rec1=00 rec2=01 rec3=030
[0x01] rec0=17 rec1=00 rec2=02 rec3=020
[0x02] rec0=22 rec1=00 rec2=03 rec3=050
[0x03] rec0=1d rec1=00 rec2=04 rec3=026
[0x04] rec0=17 rec1=00 rec2=05 rec3=062
[0x05] rec0=16 rec1=00 rec2=06 rec3=008
[0x06] rec0=16 rec1=00 rec2=07 rec3=00a
[0x07] rec0=15 rec1=00 rec2=08 rec3=00a
[0x08] rec0=15 rec1=00 rec2=09 rec3=056
[0x09] rec0=1c rec1=00 rec2=0a rec3=014
[0x0a] rec0=17 rec1=00 rec2=0b rec3=056
[0x0b] rec0=1c rec1=00 rec2=0c rec3=076
[0x0c] rec0=1b rec1=00 rec2=0d rec3=07a
[0x0d] rec0=16 rec1=00 rec2=0e rec3=030
[0x0e] rec0=1b rec1=00 rec2=0f rec3=002
[0x0f] rec0=1b rec1=00 rec2=10 rec3=000
tail 0x2175424ae874f7c381bab 0x42a00088462060003