Type ASSEMBLE
Source Lines : 292
Fixes Applied : 3
Most Recent Version : Tuesday, December 12, 1978
Last Fix ID : [HRC004DS]
Module
DMSITI P3031
Function
TO HANDLE ALL INPUT/OUTPUT INTERRUPTIONS, PASS CONTROL TO THE INTERRUPT PROCESSING ROUTINE, AND RETURN CONTROL TO THE INTERRUPTED PROGRAM.
Attributes
NUCLEUS RESIDENT, RE-ENTRANT
Operation
DMSITI SAVES THE I/O OLD PSW AND THE CHANNEL STATUS WORD (CSW). IT THEN DETERMINES THE NATURE OF THE DEVICE CAUSING THE INTERRUPTION AND PASSES CONTROL TO THE PROGRAM THAT PROCESSES INTERRUPTIONS FROM THAT DEVICE. IT DOES THIS BY SCANNING THE ENTRIES IN THE DEVICE TABLE (DEVTAB) UNTIL IT FINDS THE ONE CONTAINING THE DEVICE ADDRESS THAT IS THE SAME AS THAT OF THE INTERRUPTING DEVICE. WHEN THE INTERRUPT HANDLING PROGRAM CORRESPONDING TO THE INTERRUPTING DEVICE COMPLETES ITS PROCESSING, IT RETURNS CONTROL TO DMSITI. AT THIS POINT, DMSITI TESTS THE WAIT BIT IN THE SAVED I/O OLD PSW. IF THIS BIT IS OFF, IT USUALLY INDICATES THAT THE INTERRUPTION WAS CAUSED BY A TERMINAL (ASYNCHRONOUS) I/O OPERATION. IN THIS CASE, DMSITI RETURNS CONTROL TO THE INTERRUPTED PROGRAM BY LOADING THE I/O OLD PSW. IF THE WAIT BIT IS ONE, THIS USUALLY INDICATES THAT THE INTERRUPTION WAS CAUSED BY A NON-TERMINAL (SYNCHRONOUS) I/O OPERATION AND THAT THE PROGRAM THAT INITIATED THE OPERATION CALLED THE WAIT FUNCTION PROGRAM TO WAIT FOR A PARTICULAR TYPE OF INTERRUPTION (USUALLY A DEVICE END, SIGNALING THE COMPLETION OF AN I/O OPERATION). IN THIS CASE, DMSITI DETERMINES WHETHER OR NOT AN INTERRUPTION FROM THE INTERRUPTING DEVICE IS BEING WAITED FOR. IT DOES THIS BY CHECKING THE PSEUDO-WAIT BIT IN THE DEVICE TABLE ENTRY FOR THE INTERRUPTING DEVICE. IF THIS BIT IS OFF, THE SYSTEM IS WAITING FOR SOME EVENT OTHER THAN THE INTERRUPTION FROM THE INTERRUPTING DEVICE; DMSITI RETURNS TO THE WAIT STATE BY LOADING THE SAVED I/O OLD PSW. (THIS PSW HAS THE WAIT BIT ON.) IF THE PSEUDO-WAIT BIT IS ON, AN INTERRUPTION FROM A PARTICULAR DEVICE IS BEING WAITED FOR. (THE WAIT FUNCTION PROGRAM SETS THIS BIT WHEN CALLED BY A PROGRAM THAT IS WAITING FOR AN I/O INTERRUPTION FROM A PARTICULAR DEVICE.) IN THIS CASE, DMSITI DETERMINES WHETHER OR NOT THE INTERRUPTION WAS THE ONE BEING WAITED FOR. THE PROGRAM THAT PROCESSES THE INTERRUPTION FROM THE INTERRUPTING DEVICE WILL INFORM DMSITI OF THIS. IF THE INTERRUPTION IS NOT THE ONE BEING WAITED FOR, IOINT LOADS THE SAVED I/O OLD PSW. THIS WILL AGAIN PLACE THE MACHINE IN THE WAIT STATE. IF THE INTERRUPTION IS THE ONE BEING WAITED FOR, DMSITI RESETS BOTH THE PSEUDO-WAIT BIT IN THE DEVICE TABLE ENTRY AND THE WAIT BIT IN THE I/O OLD PSW. IT THEN LOADS THAT PSW. THIS CAUSES CONTROL TO BE RETURNED TO THE WAIT FUNCTION PROGRAM, WHICH, IN TURN, RETURNS CONTROL TO THE PROGRAM THAT CALLED IT TO WAIT FOR THE INTERRUPTION.
Calls to Other Routines
CALLS VARIOUS INTERRUPT PROCESSING ROUTINES.