ibm:vm370-lib:rscs:dmtext.assemble_src
Table of Contents
DMTEXT Source
References
- Fixes Applied : 0
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [Unmodified]
Source Listing
- DMTEXT.ASSEMBLE.txt
- EXT TITLE 'DMTEXT (RSCS) VM/370 - RELEASE 6' 00001000
- *. 00002000
- * MODULE NAME - 00003000
- * 00004000
- * DMTEXT 00005000
- * 00006000
- * FUNCTION - 00007000
- * 00008000
- * THE DMTEXT MODULE IS THE MSUP EXTERNAL INTERRUPT 00009000
- * HANDLER. DMTEXT RECEIVES CONTROL DIRECTLY ON AN 00010000
- * EXTERNAL INTERRUPT AND SAVES THE STATUS OF THE 00011000
- * EXECUTING TASK IF ONE WAS INTERRUPTED. 00012000
- * 00013000
- * ATTRIBUTES - 00014000
- * 00015000
- * REUSABLE, EXECUTABLE DISABLED ONLY 00016000
- * 00017000
- * ENTRY POINTS - 00018000
- * 00019000
- * DMTEXT - DIRECTLY ON EXTERNAL INTERRUPT 00020000
- * 00021000
- * 00022000
- * ENTRY CONDITIONS - 00023000
- * 00024000
- * MAY BE ENTERED AT ANY TIME THE EXTERNAL INTERRUPT 00025000
- * MASK IS ON. THE EXTERNAL INTERRUPT CODE IS STORED 00026000
- * IN THE EXTERNAL OLD PSW ON ENTRY. 00027000
- * 00028000
- * 00029000
- * EXIT CONDITIONS - 00030000
- * 00031000
- * NORMAL - 00032000
- * 00033000
- * ON EXIT TO AN ASYNCHRONOUS EXIT ROUTINE, 00034000
- * GPR13 = ADDR OF TASK ELEMENT FOR ASYN EXIT'S TASK 00035000
- * GPR14 = RETURN ADDR TO DMTEXT 00036000
- * GPR15 = ADDR OF ENTRY TO ASYN EXIT ROUTINE 00037000
- * 00038000
- * ERROR - 00039000
- * 00040000
- * NONE (NO ERROR CONDITIONS POSSIBLE) 00041000
- EJECT 00042000
- * 00043000
- * CALLS TO OTHER ROUTINES - 00044000
- * 00045000
- * DMTDSP - TO RESUME DISPATCHED PROCESSING 00046000
- * 00047000
- * 00048000
- * EXTERNAL REFERENCES - 00049000
- * 00050000
- * NONE 00051000
- * 00052000
- * 00053000
- * TABLES / WORKAREAS - 00054000
- * 00055000
- * TAREA - INTERRUPTED TASK'S SAVE AREA, TO SAVE STATUS 00056000
- * TASKE - TASK ELEMENT, TO LOCATE TAREA 00057000
- * ASYNE - EXTERNAL ASYNCH EXIT ELEMENT, TO LOCATE EXITS 00058000
- * 00059000
- * 00060000
- * 00061000
- * REGISTER USAGE - 00062000
- * 00063000
- * R1 - ASYNCHRONOUS EXIT ELEMENT 00063500
- * R2 - PREVIOUS ASYNCHRONOUS EXIT ELEMENT IN CHAIN 00064000
- * R4 - NEXT ASYNCHRONOUS EXIT ELEMENT IN CHAIN 00064500
- * R5 - LINK REG 00065000
- * R9 - LINKTABL FOR TASK TAKING ASYNCH INTERRUPT 00065500
- * GPR15 = DMTEXT BASE REGISTER 00067000
- * 00068000
- * NOTES - 00069000
- * 00070000
- * NONE 00071000
- * 00072000
- * OPERATION - 00073000
- * 00074000
- * 00075000
- * IF A TASK WAS EXECUTING AT THE TIME OF THE INTERRUPT, IT IS 00075200
- * SUSPENDED. IF THERE HAVE BEEN NO REQUESTS FOR 00075400
- * EXTERNAL INTERRUPT ASYNCHRONOUS EXITS, EXIT IS MADE TO 00075600
- * THE DISPATCHER. IF THERE HAVE BEEN REQUESTS MADE, THE 00075800
- * EXTERNAL INTERRUPT CODE IS EXAMINED. ONLY THE FOLLOWING 00076000
- * INTERRUPT CODES ARE SERVICED, ALL OTHERS RESULT IN AN 00076200
- * IMMEDIATE EXIT TO THE DISPATCHER: 00076400
- * 00076600
- * X'1004' - CLOCK COMPARATOR 00076800
- * 00077000
- * THE QUEUE IS SCANNED TO FIND THE ASYNCHRONOUS QUEUE 00077200
- * ELEMENT WHICH CORRESPONDS TO THIS INTERRUPT. 00077400
- * 00077600
- * FOR CLOCK COMPARATOR INTERRUPTS, THE FIRST ELEMENT SHOULD 00077800
- * SATISFY THE SEARCH, SINCE THEY ARE QUEUED IN ASSENDING ORDER 00078000
- * WITH THE FIRST ELEMENT BEING THE ACTIVE ONE. 00078200
- * THE QUEUE ELEMENT IS DEQUEUED AND RETURNED TO THE POOL. 00078400
- * IF THERE IS ANOTHER CLOCK COMPARATOR QUEUE ELEMENT BEHIND 00078600
- * IT, IT IS MADE THE ACTIVE ELEMENT AND THE CLOCK COMPARATOR 00078800
- * IS SET FOR ITS VALUE; IF THERE ARE NO MORE CLOCK COMPARATOR 00079000
- * REQUESTS BEHIND IT, THE CLOCK COMPARATOR IS SET FOR ALL 00079200
- * HEX F'S. IN EITHER CASE, THEREAFTER THE USER TASK EXIT 00079400
- * IS TAKEN 00079600
- * 00079800
- * AFTER THE EXIT HAS BEEN TAKEN, RETURN IS MADE TO 00080000
- * THE DISPATCHER 00080200
- * 00084000
- *. 00085000
- EJECT 00086000
- DMTEXT CSECT 00087000
- SPACE 00088000
- * EXTERNAL INTERRUPT ENTRY POINT 00089000
- SPACE 00090000
- USING SVECTORS,0 GET SVECTORS ADDRESSABILITY 00091000
- STM R14,R15,SSAVE SAVE WORK REGS TEMPORARILY 00092000
- L R15,NEWEXT+4 GET ADDRESS OF ENTRY POINT 00093000
- USING DMTEXT,R15 DEFINE ADDRESSING FOR EXTERNAL HANDL 00094000
- USING TASKE,R14 GET TASK ELEMENT ADDRESSABILITY 00095000
- CLI ACTIVE,X'00' WAS THE DISPATCHER WAITING? 00096000
- BE EXTNOSAV DON'T BOTHER TO SAVE REGISTERS IF IT WAS 00097000
- SPACE 00098000
- L R14,ACTIVE REG 14 = ADDR OF ELEMENT FOR INTERRUPTED TASK 00099000
- L R14,TASKSAVE REG.14 = ADDR OF THAT TASK'S SAVE AREA 00100000
- DROP R14 00101000
- USING TAREA,R14 DEFINE TASK SAVE AREA DSECT ADDRESSA 00102000
- SPACE 00103000
- MVC TPSW(8),OLDEXT MOVE RESUME PSW TO TASK'S SAVE AREA 00104000
- STM R0,R13,TGREG0 SAVE THE INTERRUPTED TASK'S REGISTERS 00105000
- MVC TGREG14(8),SSAVE AND MOVE IN SAVED REGS 14 & 15 00106000
- MVI ACTIVE,X'00' INDICATE NOT RUNNING DISPATCHED 00107000
- SPACE 00108000
- DROP R14 00109000
- EJECT 00110000
- EXTNOSAV EQU * 00111000
- USING ASYNE,R1 @VA03349 00112000
- LH R0,OLDEXT+2 GET INTERRUPT CODE @VA03349 00112400
- CH R0,=X'1004' IS THIS A CLOCK COMPARATOR @VA03349 00112800
- BE SRCHQ YES, GO SEARCH THE QUEUE @VA03349 00113200
- B EXTGO NOT CC OR RSI, FORGET IT @VA03349 00113600
- SRCHQ LA R1,EXTQ-(ASYNNEXT-ASYNE) INITIALIZE ELEM PTR @VA03349 00114000
- LOOKNEXT LR R2,R1 SAVE PREV ELEM PTR @VA03349 00114400
- ICM R1,B'1111',ASYNNEXT GET ADDR OF NEXT ELEM @VA03349 00114800
- BZ CHKTYPE NO MORE ELEMS, DONE @VA03349 00115200
- CH R0,ASYNCODE IS THIS ELEM FOR SAME CODE @VA03349 00115600
- BNE LOOKNEXT NOPE, GO LOOK AT THE NEXT ONE @VA03349 00116000
- BAL R5,SCANLINK GO FIND THE LINKTABL @VA03349 00116400
- USING LINKTABL,R9 @VA03349 00116800
- MVC LNKCLOCK(8),FFS UNSTAMP LINKTAB @VA03349 00117200
- L R13,ASYNTASK PASS TASKE IN R13 @VA03349 00117600
- L R3,ASYNEXIT SAVE EXIT ADDRESS @VA03349 00118000
- L R4,ASYNNEXT GET PTR TO NEXT (OR ZERO) @VA03349 00118400
- ST R4,ASYNNEXT-ASYNE(R2) AND PLACE IN PREV ELEM @VA03349 00118800
- L R15,QREQ ELEM UNCHAINED, NOW RETURN IT @VA03349 00119200
- BALR R14,R15 ... @VA03349 00119600
- L R15,NEWEXT+4 RESTORE BASE REG QUICK LIKE @VA03349 00120000
- LTR R1,R4 WAS THERE A NEXT? @VA03349 00120400
- BZ SETHI NO, QUEUE EMPTY, GO SET HI VALUE @VA03349 00120800
- CLC ASYNCODE(2),=X'1004' IS NEXT A CLOCK COMPARATOR @VA03349 00121200
- BNE SETHI NOPE, USE HI VALUE @VA03349 00121600
- BAL R5,SCANLINK GO GET THE LINKTABLE @VA03349 00122000
- SCKC LNKCLOCK SET THE CLOCK @VA03349 00122400
- TAKEXIT LR R15,R3 EXIT ADDR IN R15 @VA03349 00122800
- EXITNOW BALR R14,R15 TAKE THE EXIT @VA03349 00123200
- L R15,DISPATCH NOW RETURN TO DISPATCHER @VA03349 00123600
- BALR R14,R15 ... @VA03349 00124000
- SPACE 00124400
- SETHI SCKC FFS SET CLOCK COMPARATOR TO FFS @VA03349 00124800
- B TAKEXIT AND TAKE THE EXIT @VA03349 00125200
- SPACE 00125600
- SCANLINK L R8,ASYNTASK GET TASK ELEMENT ADDRESS @VA03349 00126000
- L R8,TASKNAME-TASKE(R8) GET TASK NAME @VA03349 00126400
- L R9,TLINKS GET LINKTABLE ANCHOR @VA03349 00126800
- L R10,0(R9) GET NUMBER OF ENTRIES @VA03349 00127200
- LA R9,8(R9) BUMP TO FIRST ENTRY @VA03349 00127600
- CHKNEXT TM LFLAG,LACTIVE IS THIS AN ACTIVE LINK? @VA03349 00128000
- BZ BUMPNEXT NOPE, THEN SKIP IT, BR. @VA03349 00128400
- CL R8,LACTTNME SAME TASK NAME? @VA03349 00128800
- BER R5 YES, LINKTABL ENTRY FOUND, RETURN@VA03349 00129200
- BUMPNEXT LA R9,LINKLEN(R9) BUMP TO NEXT ENTRY @VA03349 00129600
- BCT R10,CHKNEXT AND KEEP LOOKING @VA03349 00130000
- DC H'0' THATS THE END OF THE ROAD. @VA03349 00130400
- SPACE 00130800
- CHKTYPE CH R0,=X'1004' IS THIS A CLOCK COMPARATOR? @VA03349 00131200
- BNE EXTGO NOPE, ALL SET @VA03349 00131600
- SCKC FFS YES, THEN PREVENT RECURRANCE @VA03349 00132000
- SPACE 00139000
- EXTGO EQU * 00140000
- L R15,DISPATCH REG.15 = ADDRESS OF DISPATCHER ENTRY POINT 00141000
- BALR R14,R15 GO TRY TO RUN SOME TASK 00142000
- DS 0D @VA03349 00142100
- FFS DC 8X'FF' @VA03349 00142200
- SPACE 00143000
- EJECT 00145000
- COPY RSSEQU 00146000
- COPY SVECTORS 00148000
- COPY TAREA 00150000
- COPY TASKE 00152000
- COPY ASYNE 00154000
- COPY LINKTABL @VA03349 00154500
- END 00155000
ibm/vm370-lib/rscs/dmtext.assemble_src.txt ยท Last modified: 2023/08/06 13:39 by Site Administrator