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

⟦f8845d44f⟧ Ada Source

    Length: 15360 (0x3c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package V_Tdm_Conf_I, seg_04ce26

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
--   14130-A Sullyfield Circle                        Proprietary Information
--   Chantilly, Virginia 22021                        Not to be Disclosed
--
--  FILE:     V_TDM_CONF_I.A
--
--  UNIT:     VADS Interface for Configuring the Target Debug
--            Monitor (TDM) Program for the M68000 Processor Family Cross
--            Targets
--
--  PURPOSE:  This package provides the interface to TDM used by the
--            the package V_TDM_CONF.  It contains types, objects,
--            and subprograms used to convey configuration information to and
--            from TDM.
--
--            This package consists of the following type definitions,
--            constants, generics and TDM subprogram interfaces:
--            1.  Startup table
--            2.  Interrupt vector table
--            3.  Configuration table
--            4.  Misc TDM program variables
--            5.  VADS supplied TDM ISRs
--            6.  Boot subprogram
--            7.  Execute subprogram
--            8.  Interrupt handler generic
--            9.  TDM service subprograms
--
--  NOTES:    Do not modify or recompile this package.
--
--            This package may only be included in the TDM program.
--            It MAY NOT be included in the user or kernel programs.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--  Revision History:
--
--  870706:2132     A00     Initial version.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

with System;
use System;
with V_Mem_Conf;
package V_Tdm_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 by TDM during system
            -- startup should begin.  The stack
            -- will grow from this address towards
            -- lower memory.
            --
            -- Normally set to the same location
            -- as the kernel program's startup
            -- stack, top of RAM.
            --
            -- This stack is used until the
            -- application program being debugged
            -- changes it.
            Hardware_Initialization : Address;
            -- is the address of the routine called
            -- at the beginning of system initial-
            -- ization to initialize the hardware.
        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 ----------------------------

    type Configuration_Table_T is
        record
            Tdm_Stack_Base : Address;
            -- specifies the starting address
            -- of the stack used by TDM after system
            -- startup.  The stack will grow from
            -- this address toward lower memory.
            Tdm_Stack_Size : Integer;
            -- size of the TDM stack
            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.
            Setup_Tdm_Entry_Callout : Address;
            -- is the address of the routine called
            -- immediately after TDM is entered via a
            -- breakpoint, TDM trap request, or TDM
            -- handled exception.
            Setup_Tdm_Return_Callout : Address;
            -- is the address of the routine called
            -- called by TDM immediately prior to
            -- starting execution of the user program.
            Test_Message_Size : Integer;
            -- indicates the length of the
            -- tdm test message.
            Test_Message_Image : Address;
            -- starting location of the
            -- tdm test message.
            Passthru_Callout : Address;
            -- is the address of the routine to
            -- be called to scan, parse and execute
            -- a debugger "pass" command
            Tdm_Idle_Callout : Address;
            -- is the address of the routine to
            -- be called when TDM is waiting for
            -- input from the host.
            Kernel_Start_Enabled : Boolean;
            Kernel_Start_Address : Address;
            -- if TRUE, then, at the conclusion of TDM
            -- elaboration and initialization, instead
            -- of waiting for a command from the host
            -- debugger, TDM jumps to the kernel's
            -- start address. When TRUE, the kernel and
            -- user programs must already be loaded on
            -- the target.
            Memory_Write_Callout : Address;
            -- is the address of the routine to be
            -- called when TDM is writing memory for
            -- purposes of downloading or setting
            -- breakpoints.
            Memory_Read_Callout : Address;
            -- is the address of the routine to be
            -- called when TDM is reading memory for
            -- purposes of examining memory or memory
            -- mapped I/O.
            Memory_Fill_Callout : Address;
            -- is the address of the routine to be
            -- called when TDM is filling memory.
            Memory_Search_Callout : Address;
            -- is the address of the routine to be
            -- called when TDM is searching memory.
        end record;

    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#);


--------------------- #i4: Misc TDM program variables -------------------------

    Stack_Limit : Address;
    pragma Interface_Name (Stack_Limit, "STACK_LIMIT");
    -- Bottom of tdm stack

    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 TDM ISRs --------------------------

    procedure Bus_Handler;
    pragma Interface (Ada, Bus_Handler);
    pragma Interface_Name (Bus_Handler, "TDM_BUS_HANDLER");
    --  #2
    procedure Address_Handler;
    pragma Interface (Ada, Address_Handler);
    pragma Interface_Name (Address_Handler, "TDM_ADDRESS_HANDLER");
    --  #3
    procedure Illegal_Handler;
    pragma Interface (Ada, Illegal_Handler);
    pragma Interface_Name (Illegal_Handler, "TDM_ILLEGAL_HANDLER");
    --  #4
    procedure Privilege_Handler;
    pragma Interface (Ada, Privilege_Handler);
    pragma Interface_Name (Privilege_Handler, "TDM_PRIVILEGE_HANDLER");
    --  #8
    procedure Trace_Handler;
    pragma Interface (Ada, Trace_Handler);
    pragma Interface_Name (Trace_Handler, "TDM_TRACE_HANDLER");
    --  #9
    procedure Format_Handler;
    pragma Interface (Ada, Format_Handler);
    pragma Interface_Name (Format_Handler, "TDM_FORMAT_HANDLER");
    --  #14
    procedure Trap_Handler;
    pragma Interface (Ada, Trap_Handler);
    pragma Interface_Name (Trap_Handler, "TDM_TRAP_HANDLER");
    --  #47 - trap 15 (default)
    procedure Unexpected_Handler;
    pragma Interface (Ada, Unexpected_Handler);
    pragma Interface_Name (Unexpected_Handler, "TDM_UNEXPECTED_HANDLER");
    --  #???


---------------------------- #i6: Boot subprogram -----------------------------

    procedure V_Boot (Configuration_Table_A : Address);
    --  specifies the TDM configuration table
    --  declared in the configuration package.
    pragma Interface (Ada, V_Boot);
    pragma Interface_Name (V_Boot, "V_BOOT");
    -- V_BOOT is called to boot/initialize TDM. It initializes the
    -- interrupt vector, resets mc68881/mc68882 coprocessor (if
    -- present).



-------------------------- #i7: Execute subprogram ----------------------------

    procedure V_Execute;
    pragma Interface (Ada, V_Execute);
    pragma Interface_Name (V_Execute, "V_EXECUTE");
    -- V_EXECUTE is called to start the execution of TDM. If the
    -- configuration parameter, KERNEL_START_ENABLED is TRUE, then,
    -- V_EXECUTE jumps to the kernel program via the KERNEL_START_ADDRESS
    -- parameter. Otherwise, TDM waits for and processes commands sent
    -- from the host.


---------------------- #i8: Interrupt handler generic --------------------------

    --
    -- Note: this ISR wrapper is used only by serial TDM
    -- and not by Network TDM.
    --

    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_TDM_CONF_I.interrupt_handler(my_process_interrupt);
    --
    -- See generic body below for details.


---------------------- #i9: TDM service subprograms ---------------------------

    procedure Passthru_Put_Chr (C : Character);
    pragma Interface (Ada, Passthru_Put_Chr);
    pragma Interface_Name (Passthru_Put_Chr, "TDM_PUT_CHR");
    -- Called by the passthru command handlers to have a
    -- character displayed by the host debugger.

    procedure Passthru_Put_Str (S : String);
    pragma Interface (Ada, Passthru_Put_Str);
    pragma Interface_Name (Passthru_Put_Str, "TDM_PUT_STR");
    -- Called by the passthru command handlers to have a
    -- string displayed by the host debugger.

    --
    -- Note: the following subprograms are used only by serial TDM's
    -- ISR wrapper and not by Network TDM.
    --
   procedure Enter_Interrupt;
    pragma Interface (Ada, Enter_Interrupt);
    pragma Interface_Name (Enter_Interrupt, "TDM_ENTER_INTERRUPT");
    -- Enter interrupt handler
    --
    -- The parameter and scratch registers (d0/d1/d2/d3/a0/a1) must be
    -- saved before calling ENTER_INTERRUPT.
    --
    -- Note: the TDM version of this routine doesn't switch stacks.
    -- However, for compatibility with the kernel, the address of the
    -- input stack is pushed on the stack before returning.  The address
    -- points to the last entry pushed on the stack before the call.
    --

    procedure Complete_Interrupt;
    pragma Interface (Ada, Complete_Interrupt);
    pragma Interface_Name (Complete_Interrupt, "TDM_COMPLETE_INTERRUPT");
    -- Complete interrupt handler
    --
    -- COMPLETE_INTERRUPT 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 ENTER_INTERRUPT)
    --
    --  where previous stack looks as follows:
    --     0 - d0/d1/d2/d3/a0/a1 (parameter and saved scratch registers)
    --    24 - handler's exception stack frame
    --
    -- ENTER_INTERRUPT must have been previously called for this interrupt.
    --
    --
    -- Note: no return back to interrupt handler.

    procedure Post_Comm_Intr;
    pragma Interface (Ada, Post_Comm_Intr);
    pragma Interface_Name (Post_Comm_Intr, "TDM_POST_COMM_INTR");
    --
    -- Post Communications Interrupt
    --
    -- In RS-232 TDM only, this procedure is called by the
    -- UART receive interrupt handler in package
    -- V_TDM_CONF.V_SERIAL_SUPPORT to notify TDM of the interrupt.
    -- This procedure is called by the communications
    -- interrupt handler to notify TDM of the interrupt.

    function Validate_Memory
                (Addr : Address;
                 Count : Integer;
                 Memory_Acc : V_Mem_Conf.Memory_Acc_T) return Integer;
    pragma Interface (Ada, Validate_Memory);
    pragma Interface_Name (Validate_Memory, "TDM_VALIDATE_MEMORY");
    --
    -- Validate a range of memory addresses
    --
    -- This procedure is called by the default implementations of the
    -- read, write, fill, and search routines in the V_MEM_CONF
    -- sub-package of V_TDM_CONF.  It returns the number of contiguous
    -- bytes starting at addr that are accessible in the way specified by
    -- the memory_acc parameter (READ_ONLY, WRITE_ONLY, READ_WRITE).

end V_Tdm_Conf_I;


E3 Meta Data

    nblk1=e
    nid=0
    hdr6=1c
        [0x00] rec0=16 rec1=00 rec2=01 rec3=01a
        [0x01] rec0=1a rec1=00 rec2=02 rec3=008
        [0x02] rec0=1c rec1=00 rec2=03 rec3=030
        [0x03] rec0=1c rec1=00 rec2=04 rec3=006
        [0x04] rec0=15 rec1=00 rec2=05 rec3=030
        [0x05] rec0=15 rec1=00 rec2=06 rec3=02e
        [0x06] rec0=19 rec1=00 rec2=07 rec3=010
        [0x07] rec0=17 rec1=00 rec2=08 rec3=08e
        [0x08] rec0=1b rec1=00 rec2=09 rec3=010
        [0x09] rec0=1c rec1=00 rec2=0a rec3=05e
        [0x0a] rec0=1d rec1=00 rec2=0b rec3=002
        [0x0b] rec0=16 rec1=00 rec2=0c rec3=020
        [0x0c] rec0=1a rec1=00 rec2=0d rec3=020
        [0x0d] rec0=0f rec1=00 rec2=0e rec3=000
    tail 0x217542524874f7c443d44 0x42a00088462060003