TITLE 'ICATS FAKE-A-UTS-INTERRUPT ROUTINE' FAK00010
*********************************************************************** FAK00020
* * FAK00030
* MODULE NAME = FAKIT * FAK00040
* * FAK00050
* FUNCTION = SIMULATE AN ATTENTION INTERRUPT FOR THE SPECIFIED * FAK00060
* UTS. I/O FOR THIS UTS REQUEST WON'T REALLY BE DONE, * FAK00070
* RATHER IT WILL BE SIMULATED FROM AND TO CMS FILES. * FAK00080
* THE FORMAT OF THE COMMAND IS * FAK00090
* FAKIT <UTS-VIRTUAL-ADDRESS> * FAK00100
* IF THE UTS-VIRTUAL-ADDRESS IS LEFT OFF, THEN IT * FAK00110
* DEFAULTS TO THE FIRST UTS IN THE UTSCB CHAIN. * FAK00120
* FAKIT IS NOT VALID FROM A UTS MACHINE. * FAK00130
* * FAK00140
* ENTRY POINTS = FAKIT * FAK00150
* * FAK00160
* LINKAGE = BALR R14,R15 FROM ICATS MAINLINE. * FAK00170
* * FAK00180
* REGISTER CONTENTS UPON ENTRY = * FAK00190
* R2 = POINTS TO THE ICATS COMMON DATA AREA, AS ALWAYS. * FAK00200
* R14 = RETURN ADDRESS BACK TO ICATS MAINLINE * FAK00210
* R15 = ENTRY POINT TO THIS MODULE * FAK00220
* * FAK00230
* REGISTER USAGE = * FAK00240
* R0-R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * FAK00250
* R2 = USED TO ADDRESS THE ICATS COMMON DATA AREA. * FAK00260
* R3 = FREE * FAK00270
* R4 = USED TO ADDRESS THE UTS CONTROL BLOCKS. * FAK00280
* R5-R10 = FREE * FAK00290
* R11 = MY BASE REGISTER * FAK00300
* R14 = MY RETURN ADDRESS WHEN I CALL SOMEBODY * FAK00310
* R15 = SUBROUTINE ADDRESS * FAK00320
* * FAK00330
* * FAK00340
* MODULE LOGIC: * FAK00350
* 1) SEE WHERE THIS COMMAND CAME FROM. REJECT THIS * FAK00360
* COMMAND IF IT CAME FROM A UTS MACHINE. * FAK00370
* 2) ELSE GO AHEAD AND SIMULATE AN INTERRUPT. * FAK00380
* * FAK00390
* NORMAL EXIT = * FAK00400
* R15 = 0 * FAK00410
* * FAK00420
* EXTERNAL REFERENCES = NONE * FAK00430
* * FAK00440
* MACROS = ICDATA = ICATS COMMON DATA AREA * FAK00450
* ETTE = ENTER TRACE TABLE ENTRY SUBROUTINE * FAK00460
* * FAK00470
* CHANGE ACTIVITY * FAK00480
* DATE NAME REASON FOR CHANGE * FAK00490
* 04/19/83 RICK JASPER BROKEN AWAY FROM ICATS MAINLINE INTO * FAK00500
* SEPARATE SUBROUTINE * FAK00510
* * FAK00520
*********************************************************************** FAK00530
PRINT GEN,NODATA FAK00540
FAKIT CSECT FAK00550
USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA FAK00560
USING CBUTS,R4 ADDRESS UTS CONTROL BLOCK FAK00570
USING *,R15 USE R15 FOR NEXT INSTRUCTION ONLY FAK00580
STM R0,R14,FAKEREGS SAVE ALL THE REGISTERS FAK00590
DROP R15 FAK00600
USING FAKIT,R11 SWITCH BASE REGISTER TO R11 FAK00610
LR R11,R15 FAK00620
TM FLAGB,UTSCMD DID THIS COMMAND COME FROM A UTS ?? FAK00630
BNO FAKECONA DON'T REJECT IT IF NOT. FAK00640
L R15,AREJECT GO TO REJECT-THIS-COMMAND ROUTINE FAK00650
BALR R14,R15 FAK00660
B FAKEBYE FAK00670
FAKECONA DS 0H FAK00680
CLC PARM2,=CL8' ' DID HE WANT THE DEFAULT UTS ?? FAK00690
BNE FAKECONB NOPE, GO CONVERT REAL ADDRESS. FAK00700
L R4,CBFIRST GET ADDRESS OF FIRST UTSCB FAK00710
LTR R4,R4 IS IT NULL ?? SHOULDN'T BE. FAK00720
BNZ FAKECOND NOPE, GOOD. GO SET INTERRUPT BIT ON. FAK00730
FAKENONE LA R1,NONEMSG FAK00740
B FAKEMSG FAK00750
* FAK00760
FAKECONB DS 0H FAK00770
LA R1,PARM2 CONVERT UTS ADDRESS TO HEX FAK00780
L R15,ACONHEX FAK00790
BALR R14,R15 FAK00800
LTR R15,R15 DID THE CONVERSION GO OK ?? FAK00810
BNZ FAKEERR1 NOPE, ERROR THEN. FAK00820
* GO FIND THIS UTS MACHINE'S CONROL BLOCK IN THE UTSCB CHAIN FAK00830
* R0 = THE REQUESTED UTS MACHINE'S VIRTUAL ADDRESS IN HEX FAK00840
L R4,CBFIRST GET ADDRESS OF FIRST UTSCB FAK00850
LTR R4,R4 ARE THERE ANY UTS'S ?? FAK00860
BZ FAKENONE ERROR IF THERE'S NO UTSCB'S FAK00870
FAKELOOP CH R0,CBUTSVAD IS THIS THE UTS TO BE FAKED ?? FAK00880
BE FAKECOND YEP, GO FAKE AN INTERRUPT FROM HIM. FAK00890
L R4,CBUTSFP GET POINTER TO NEXT UTSCB. FAK00900
LTR R4,R4 ARE WE AT THE END OF THE CHAIN ?? FAK00910
BNE FAKELOOP NOPE, GO CHECK THIS UTSCB FAK00920
LA R1,NOMSG FAK00930
FAKEMSG DS 0H FAK00940
* GIVE THE REQUESTOR THE ERROR MESSAGE THAT R1 IS POINTING TO FAK00950
L R15,AMESSAGE FAK00960
BALR R14,R15 FAK00970
B FAKEBYE GOODBYE FAK00980
* FAK00990
* NOW R4 IS POINTING TO THE CORRECT UTSCB. FAK01000
* TURN ON THE I-NEED-SERVICING FLAG FOR THIS UTS & FAK01010
* TURN ON THE A-UTS-NEEDS-SERVICING FLAG. FAK01020
FAKECOND DS 0H FAK01030
OI CBUTSFGA,INTISIN FAK01040
OI FLAGA,UTSINT FAK01050
OI FLAGC,FAKEINT FAK01060
FAKEBYE DS 0H FAK01070
LM R0,R14,FAKEREGS FAK01080
SR R15,R15 RETURN CODE = 0 FAK01090
BR R14 BYE FAK01100
FAKEERR1 DS 0H FAK01110
LA R1,INVMSG FAK01120
B FAKEMSG FAK01130
FAKEREGS DS 15F FAK01140
* FAK01150
NONEMSG DC AL1(NONEMSGE) FAK01160
DC C'SORRY, BUT THERE ARE NO UTS''S TO TURN ON' FAK01170
NONEMSGE EQU *-NONEMSG-1 FAK01180
* FAK01190
INVMSG DC AL1(INVMSGE) FAK01200
DC C'INVALID ADDRESS GIVEN' FAK01210
INVMSGE EQU *-INVMSG-1 FAK01220
* FAK01230
NOMSG DC AL1(NOMSGE) FAK01240
DC C'THERE''S NO UTS MACHINE AT THAT ADDRESS' FAK01250
NOMSGE EQU *-NOMSG-1 FAK01260
LTORG FAK01270
ICDATA FAK01280
END FAK01290