Trailing-Edge
-
PDP-10 Archives
-
BB-P363B-SM_1985
-
mcb/nml/nmuint.bli
There are 3 other files named nmuint.bli in the archive. Click here to see a list.
!NET:<DECNET20-V3P1.NMU>NMUINT.BLI.2 16-Jun-81 13:05:55, Edit by JENNESS
!
! Change completely to simpler form of interrupt handling.
!
module NMUINT ( ! Interrupt handling facility
ident = 'X00.01'
) =
begin
!
! COPYRIGHT (c) 1980, 1981, 1982
! DIGITAL EQUIPMENT CORPORATION
! Maynard, Massachusetts
!
! This software is furnished under a license and may be used
! and copied only in accordance with the terms of such license
! and with the inclusion of the above copyright notice. This
! software or any other copies thereof may not be provided or
! otherwise made available to any other person. No title to
! and ownership of the software is hereby transferred.
!
! The information in this software is subject to change
! without notice and should not be construed as a commitment
! by DIGITAL EQUIPMENT CORPORATION.
!
! DIGITAL assumes no responsibility for the use or reliability
! of its software on equipment which is not supplied by
! DIGITAL.
!
!++
! Facility: LSG DECnet Network Management
!
! Abstract:
!
! This set of routines provides an interface to the
! software interrupt system.
!
! Environment: TOPS20 user mode
!
! Author: Steven M. Jenness, Creation date: 18 August 1980
!
!--
!
! Include files
!
library 'NMULIB'; ! All required definitions
!
! Global routines
!
forward routine
NMU$INTERRUPT_INITIALIZE : novalue;
!
! Local routines
!
forward routine
ARITH_OVRFLW: novalue, ! Arithmetic error interrupt
PDL_OVRFLW: novalue, ! Stack overflow
ILL_INST: novalue, ! Illegal instruction
ILL_MREF: novalue, ! Illegal memory reference
SYS_FAILURE : novalue; ! System resource failure
!
! Own variables
!
INTERRUPT_DATA_BASE; ! Setup interrupt data base
!
! Global variables
!
global
INTNST; ! Nesting count for PION/PIOFF
!
! External references
!
external routine
NMU$TEXT_MANAGER,
NMU$SCHED_MANAGER;
%global_routine ('NMU$INTERRUPT_INITIALIZE') : novalue =
!++
! Functional description:
!
! This routine in initializes the interrupt system and
! clears any pending interrupts. The interrupt system
! is enabled on completion of this routine.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
!
! Clear current state of interrupt system
!
CLEAR_INTERRUPT_SYSTEM;
!
! Initialize interrupt system and data base
!
INITIALIZE_INTERRUPT_SYSTEM;
!
! Set up calls for panic interrupts
!
ARITHMETIC_OVERFLOW (ARITH_OVRFLW);
STACK_OVERFLOW (PDL_OVRFLW);
ILLEGAL_INSTRUCTION (ILL_INST);
ILLEGAL_MEMORY_REFERENCE (ILL_MREF);
SYSTEM_RESOURCE_FAILURE (SYS_FAILURE);
end; ! End of NMU$INTERRUPT_INITIALIZE
%routine ('ARITH_OVRFLW') : novalue =
!++
! Functional description:
!
! This is the routine that receives that Panic interrupt
! when an arithmetic error occurs in the process.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
local
TASK : ref TASK_BLOCK;
TASK = CURRENT_TASK;
$NMU$TEXT (%ref (ch$ptr (TASK [TB_ERROR_BUFFER])),
100,
'Arithmetic overflow at PC: %(6)P',
.LEV1PC <0, 18, 0> - 1);
TASK [TB_ERROR_PC] = .LEV1PC <0, 18, 0> - 1;
LEV1PC = NMU$SCHED_COMPLETE;
end; ! End of ARITH_OVRFLW
%routine ('PDL_OVRFLW') : novalue =
!++
! Functional description:
!
! This is the routine that receives the push down list
! overflow Panic interrupt.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
local
TASK : ref TASK_BLOCK;
TASK = CURRENT_TASK;
$NMU$TEXT (%ref (ch$ptr (TASK [TB_ERROR_BUFFER])),
100,
'Stack overflow at PC: %(6)P',
.LEV1PC <0, 18, 0> - 1);
TASK [TB_ERROR_PC] = .LEV1PC <0, 18, 0> - 1;
LEV1PC = NMU$SCHED_COMPLETE;
end; ! End of PDL_OVRFLW
%routine ('ILL_INST') : novalue =
!++
! Functional description:
!
! This is the routine that receives the illegal instruction
! trap Panic interrupts.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
local
TASK : ref TASK_BLOCK;
TASK = CURRENT_TASK;
$NMU$TEXT (%ref (ch$ptr (TASK [TB_ERROR_BUFFER])),
100,
'Illegal instruction at PC: %(6)P',
.LEV1PC <0, 18, 0> - 1);
TASK [TB_ERROR_PC] = .LEV1PC <0, 18, 0> - 1;
LEV1PC = NMU$SCHED_COMPLETE;
end; ! End of ILL_INST
%routine ('ILL_MREF') : novalue =
!++
! Functional description:
!
! This is the routine that receives the illegal memory
! reference Panic interrupts.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
local
TASK : ref TASK_BLOCK;
TASK = CURRENT_TASK;
$NMU$TEXT (%ref (ch$ptr (TASK [TB_ERROR_BUFFER])),
100,
'Illegal memory reference at PC: %(6)P',
.LEV1PC <0, 18, 0>);
TASK [TB_ERROR_PC] = .LEV1PC <0, 18, 0>;
LEV1PC = NMU$SCHED_COMPLETE;
end; ! End of ILL_MREF
%routine ('SYS_FAILURE') : novalue =
!++
! Functional description:
!
! This is the routine that receives the system
! resource failure Panic interrupts.
!
! Formal parameters: none
!
! Routine value: none
! Side effects: none
!
!--
begin
local
TASK : ref TASK_BLOCK;
TASK = CURRENT_TASK;
$NMU$TEXT (%ref (ch$ptr (TASK [TB_ERROR_BUFFER])),
100,
'System resource failure at PC: %(6)P',
.LEV1PC <0, 18, 0> - 1);
TASK [TB_ERROR_PC] = .LEV1PC <0, 18, 0> - 1;
LEV1PC = NMU$SCHED_COMPLETE;
end; ! End of SYS_FAILURE
end ! End of module NMUINT
eludom