|
|
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: 15360 (0x3c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package V_Tdm_Conf_I, seg_04ce26
└─⟦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_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;
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