TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, PROLOGUE' 00050002 * /* START OF SPECIFICATIONS **** 00060002 * 00070002 *01* MODULE-NAME = IEAVVCRX 00080002 * 00092002 *02* CSECT-NAME = IEAVVCRX 00094002 * 00098002 *01* DESCRIPTIVE-NAME = OPERATOR INTERRUPT KEY INTERRUPT PROCESSOR 00098402 * 00099202 *01* COPYRIGHT = NONE 00099602 *01* STATUS = 02.01 00126602 * 00130602 *01* FUNCTION = THIS MODULE INCREMENTS A COUNT OF EXTERNAL INTERRUPT 00132602 * KEY INTERRUPTS PENDING, AND POST'S COMM TASK TO START PROCESSING 00133002 * AN EXTERNAL INTERRUPT WHICH IS A SIGNAL TO COMMTASK TO PERFORM A 00134302 * MASTER CONSOLE SWITCH. 00136302 * 00137002 *02* OPERATION = THE MODULE RECIEVES CONTROL FROM THE EXTERNAL 00138302 * INTERRUPT FLIH WHEN THE CONSOLE INTERRUPT KEY IS DEPRESSED AND 00140302 * INCREMENTS A COUNT OF EXTERNAL INTERRUPTS PENDING MAINTAINED 00142302 * IN FIELD UCMEXT OF THE UCM PREFIX. IN ADDITION, IF THE COUNT 00142702 * WAS ZERO, AN XMPOST IS ISSUED TO TO ECB UCMXECB TO SIGNAL COMM 00143102 * TASK THAT EXTERNAL INTERRUPTS ARE PENDING. THE MODULE THEN 00143202 * RETURNS TO THE EXTERNAL FLIH. 00143302 * 00143602 *01* NOTES = THE CONTENTS OF REGISTER 2, WHICH CONTAINS THE RETURN 00144802 * ADDRESS, IS PRESERVED IN REGISTER 9 ACROSS TH XMPOST. 00145202 * 00146102 *02* DEPENDENCIES = THIS MODULE DEPENDS ON THE USE OF COMPARE AND 00147402 * SWAP TOO BE USED BY ANY PROGRAMS WHICH MODIFY FIELD 'UCMEXT', 00157402 * AND ON CROSS MEMORY POST (XMPOST) TO NOT OBTAIN ANY SUSPEND 00167402 * TYPE LOCKS SUCH AS LOCAL OR CMS. 00169402 * 00170202 *03* CHARACTER-CODE-DEPENDENCIES = THIS MODULE IS NOT DEPENDENT 00170602 * ON CHARACTER CODE. 00171002 * 00171802 *02* RESTRICTIONS = THIS MODULE MUST BE SUPERVISOR STATE AND KEY 00171902 * WHEN ENTERED 00172002 * 00172102 *02* REGISTER-CONVENTIONS = SEE 'REGISTER EQUATES' BELOW. 00176702 * 00181202 *02* PATCH-LABEL = CRXPATCH (RESERVED FOR FUTURE USE) 00181302 * 00188002 *01* MODULE-TYPE = PROCEDURE 00190002 * 00190502 *02* PROCESSOR = ASSEMBLER-370R 00190602 * 00200702 *02* MODULE-SIZE = 200 BYTES 00226302 * 00234202 *02* ATTRIBUTES = NUCLEUS, ZERO PROTECT KEY, 00236202 * REENTERABLE, REFRESHABLE, SUPERVISOR MODE 00246202 * 00258702 *01* ENTRY-POINT = IEEBC1PE 00262102 * 00265502 *02* PURPOSE = TO NOTIFY COMM TASK THAT THE EXTERNAL INTERRUPT KEY 00265602 * HAS BEEN DEPRESSED. 00267602 * 00269002 *02* LINKAGE = BRANCHED TO BY THE EXTERNAL FLIH. 00271002 * AT ENTRY REGISTER 2 CONTAINS THE RETURN ADDRESS AND REGISTER 00271402 * 6 CONTAINS THE ENTRY POINT ADDRESS. 00271802 * 00272202 *02* INPUT = FIELD UCMXCT, AND UCMXECB 00272302 * 00278302 *02* OUTPUT = FIELD UCMXCT INCREMENT BY ONE, AND UCMXECB POSTED 00278702 * (XMPOST) IF COUNT WENT FROM ZERO TO ONE 00278802 * 00279102 *02* REGISTERS-SAVED = REGISTER 2 00279202 * 00279402 *02* REGISTER-USAGE = REFER TO THE COMMENTS ON THE 'REGISTER 00282802 * EQUATES' BELOW. 00284802 * 00285202 *02* REGISTERS-RESTORED = REGISTER 2 00285602 * 00286102 *01* EXIT-NORMAL = BR 2 00286202 * 00289502 *02* CONDITIONS = CONDITIONS AT EXIT ARE THE SAME AS AT ENTRY, EXIT 00289602 * IS MADE AT COMPLETION OF PROCESSING. 00299602 * 00300202 *02* OUTPUT = NONE 00302202 * 00304202 *02* RETURN-CODES = NONE 00306802 * 00316802 *01* EXIT-ERROR = NONE. 00329302 * 00329702 *01* EXTERNAL-REFERENCES = POST 00330102 * 00380102 *02* ROUTINES = XMPOST, BRANCH ENTRY 00430102 * 00480102 *02* DATA-AREAS = UCMXCT 00530102 * 00580102 *02* CONTROL-BLOCKS = AS FOLLOWS: 00630102 * CVT 00680102 * UCM 00730102 * 00780102 *01* TABLES = NONE 00830102 * 00880102 *01* MACROS = NONE 00930102 * 00980102 *02* SERIALIZATION = COMPARE AND SWAP FOR UCMXCT 01030102 * 01080102 *01* CHANGE-ACTIVITY = Y02751 01130102 * 01180102 *01* MESSAGES = NONE 01230102 * 01280102 *01* ABEND-CODES = NONE 01350002 * 01550002 **** END OF SPECIFICATIONS ***/ 01750002 TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, EQUATES' 01950002 IEAVVCRX CSECT 02150002 SPACE 03350002 IEEBC1PE EQU * 04350002 ENTRY IEEBC1PE 05350002 SPACE 2 06350002 * REGISTER EQUATES 07350002 SPACE 08350002 R0 EQU 0 REGISTER 0, UNUSED 09350002 R1 EQU 1 REGISTER 1, UNUSED 10350002 R2 EQU 2 RETURN REG 11350002 R3 EQU 3 BASE FOR CVT 12350002 R4 EQU 4 BASE FOR UCM 13350002 R5 EQU 5 BASE FOR UCM PREFIX 14350002 R6 EQU 6 USED IN COMPARE AND SWAP LOOP 15350002 R7 EQU 7 USED IN COMPARE AND SWAP LOOP 16350002 R8 EQU 8 USED IN COMPARE AND SWAP LOOP 17350002 R9 EQU 9 FOR SAVING REG 2 ACROSS POST 18350002 R10 EQU 10 PROGRAM BASE, EP ADDR AT ENTRY 19350002 R11 EQU 11 ADDR OF ECB FOR XMPOST 20350002 R12 EQU 12 CONTAINS ERRET ADDR FOR XMPOST 21350002 R13 EQU 13 USED TO PASS ASCB ADDR TO XMPOST 22350002 R14 EQU 14 RETURN REG FOR CALL TO XMPOST 23350002 R15 EQU 15 USED FOR EP ADDR TO CALL XMPOST 24350002 SPACE 2 25350002 * PARAMETER EQUATES 26350002 SPACE 27350002 PREFXPTR EQU 4 OFFSET TO UCM PREFIX PTR 28350002 ZERO EQU 0 SYMBOLIC FOR ARITHMATIC 0 29350002 ONEBYTE EQU 8 SHIFT VALUE TO ISOLATE INT. COUNT 30350002 INCRE EQU 1 INCRCEMENT FOR INTERRUPT COUNT 31350002 TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, PROCESSING' 32350002 USING IEAVVCRX,R10 33350002 L R3,CVTPTR GET ADDR OF CVT 34350002 USING CVT,R3 35350002 L R4,CVTCUCB GET ADDR OF UCM BASE 36350002 USING UCM,R4 37350002 LA R5,PREFXPTR DISPLACEMENT TO UCM PREFIX PTR 38350002 LNR R5,R5 DISPLACEMENT IS NEGATIVE 39350002 AR R5,R4 GET ADDR OF UCM PREFIX PTR 40350002 L R5,ZERO(R5) GET ADDR OF UCM PREFIX 41350002 USING UCMPRFX,R5 42350002 SPACE 43350002 SR R6,R6 CLEAR REG BEFORE USE 44350002 L R8,UCMXCT GET CURRENT COPY OF INTERRUPT COUNT 45350002 GETCOUNT DS 0H 46350002 LR R7,R8 SAVE COPY OF ORIGINAL FOR CS INSTR 47350002 SLDL R6,ONEBYTE MOVE INTERRUPT COUNT TO REG 6 48350002 LA R6,INCRE(R6) INCREMENT INTERRUPT COUNT 49350002 SRDL R6,ONEBYTE MOVE COUNT BACK TO REG 7 50350002 SPACE 51350002 CS R8,R7,UCMXCT STORE NEW COUNT IF OLD COUNT VALID 52350002 SPACE 53350002 BNE GETCOUNT IF COMPARE FAILED, GO BACK AND TRY 54350002 * AGAIN. NEW VALUE OF UCMEXT HAS BEEN 55350002 * PLACED IN REG 8 IF COMPARE FAILED. 56350002 SPACE 2 57350002 * TEST WHETHER COUNT WAS INCREMENT FROM 0 TO 1, AND IF IT WAS, POST 58350002 * UCMXECB TO NOTIFY COMM TASK. A CROSS MEMORY POST IS USED. ALL 59350002 * REGISTERS WILL BE DESTROYED BUT R9 WHICH WILL BE USED TO SAVE THE 60350002 * RETURN ADDRESS 61350002 SPACE 62350002 SLDL R6,ONEBYTE MOVE NEW COUNT FROM REG 7 TO REG 6 63350002 BCT R6,NOPOST IF NEW COUNT IS NOT 1, SKIP POST 64350002 SPACE 65350002 * IF NEW COUNT WAS 1, FALL THRU TO XMPOST 66350002 SPACE 67350002 L R15,CVT0PT01 GET ENTRY POINT TO POST 68350002 LA R11,UCMXECB POINT TO ECB TO BE POSTED 69350002 O R11,SIGNBIT TURN ON SIGN BIT FOR XMPOST 70350002 LA R12,CVTBRET USE CVT BR 14 FOR ERRET EXIT 71350002 L R13,UCMASCB POINT TO ASCB OF COMM TASK 72350002 SPACE 73350002 DROP R10 DROP BASE FOR PROGRAM 74350002 SPACE 75350002 SR R10,R10 SET COMPLETION CODE TO 0 76350002 LR R9,R2 SAVE RETURN ADDR IN REG 9 76400002 SPACE 76450002 BALR R14,R15 GO TO XMPOST ROUTINE 77350002 SPACE 78350002 LR R2,R9 RELOAD THE RETURN REG 79350002 NOPOST DS 0H 80350002 BR R2 RETURN TO EXTERNAL FLIH 81350002 TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, CONSTANTS' 82350002 DS 0F 83350002 SIGNBIT DC X'80000000' TO TURN ON HIGH ORDER BIT 84350002 TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, CVT MAPPING' 87350002 CVT DSECT=YES 88350002 TITLE 'IEAVVCRX, EXTERNAL INTERRUPT PROCESSOR, UCM MAPPING' 89350002 IEECUCM FORMAT=NEW 90350002 END 91350002