mikpe.pdp10-tools/doc/Interrupts.txt
2017-08-02 17:14:42 +02:00

80 lines
3.6 KiB
Plaintext

doc/Interrupts.txt
Copyright (C) 2015-2017 Mikael Pettersson
This file is part of pdp10-tools.
pdp10-tools is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
pdp10-tools is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with pdp10-tools. If not, see <http://www.gnu.org/licenses/>.
PDP10 Interrupt Architecture
============================
The PDP10 interrupt architecture is based on two cooperating systems:
- the Priority Interrupt system, which determines which interrupts are enabled,
and allows software to enable or disable specific interrupt levels; and
- the Interrupt Dispatch system, which determines how the processor handles an
interrupt once it has been accepted.
The Priority Interrupt System
-----------------------------
The PDP10 has 8 interrupt levels, numbered 0-7, with 0 having highest priority.
Levels 1-7 can be individually masked or unmasked, level 0 cannot be masked.
Devices can be assigned any level from 1 to 7 (assigning level 0 disconnects it).
Devices can share levels.
A device sends an interrupt request by signalling its assigned level to the processor.
The request is recognized if both the priority interrupt system and the specific level
are enabled, and the processor is not already handling a request at the same or higher
priority.
Once the processor starts handling an interrupt, it is held until dismissed.
While held, all interrupts at that and lower priority leves are blocked.
WRPI aka "CONO 4, EA" writes to the priority interrupt system.
RDPI aka "CONI 4, EA" reads the current interrupt mask.
The Interrupt Dispatch System
-----------------------------
Early processors (PDP6, KA10, KI10, KL10, KS10) handle a recognized interrupt by
executing an "interrupt instruction" at a level-specific location. An interrupt
instruction is encoded as an ordinary PDP10 instruction, but only a subset of PDP10
instructions are permitted, and the state (PC and registers) is still that of the
interrupted context. In practice, this limits the permissible instructions to
simple I/O transfers or calls to service routines.
On the extended KL10, the preferred interrupt instruction for calling a service
routine is XPCW, and the service routine should then return with XJEN (JRST 7,).
On non-extended processors, the instructions to use are JSR and JEN (JRST 12,).
Later processors (KC10, XKL-1) eliminate interrupt instructions and instead require
vectors of "interrupt control blocks" for use by implicit XPCW instructions.
The different processor generations vary in:
1. Which instructions, if any, are permitted as interrupt instructions.
2. The exact locations of the dispatch vectors. Locations 040-057 are commonly used in
early processors, while later processors use different locations in the EPT.
3. The exact hardware protocol by which the interrupting device informs the processor
about how to handle the interrupt (KL10 has additional features here).
References
----------
- TOAD-1 System Architecture Reference Manual, Chapter 4 "Earlier Processors",
Section 4.1 "KL10 System Operations", Subsection 4.1.1 "Priority Interrupt", pages 334-342.
- TOAD-1 System Architecture Reference Manual, Chapter 3 "TOAD-1 System and
XKL-1 Processor Operations", Section 3.1 "Priority Interrupt", pages 212-221.
- KC10 Exec Mode, Rev. 6