TITLE 'ICATS MAINLINE' ICA00010
*********************************************************************** ICA00020
* * ICA00030
* MODULE NAME = ICATS MAINLINE SUPERVISOR/DISPATCHER * ICA00040
* * ICA00050
* FUNCTION = RUN THE ICATS VIRTUAL MACHINE. * ICA00060
* * ICA00070
* ENTRY POINTS = ICATS * ICA00080
* * ICA00090
* LINKAGE = BALR R14,R15 FROM CMS. THIS IS THE MODULE THAT * ICA00100
* GETS CONTROL WHEN THIS PROGRAM IS FIRST STARTED. * ICA00110
* * ICA00120
* REGISTER CONTENTS UPON ENTRY = * ICA00130
* R1 = POINTS TO THE PARAMETER LIST (NOT USED) * ICA00140
* R14 = RETURN ADDRESS BACK TO CMS * ICA00150
* R15 = ENTRY POINT TO THIS MODULE * ICA00160
* * ICA00170
* REGISTER USAGE = * ICA00180
* R0 = USED TO PASS PARAMETERS TO SOME SUBROUTINES. * ICA00190
* R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * ICA00200
* R2 = USED TO ADDRESS THE ICATS COMMON DATA AREA. * ICA00210
* R3 = USED TO ADDRESS THE TERMINAL CONTROL BLOCKS. * ICA00220
* R4 = USED TO ADDRESS THE UTS CONTROL BLOCKS. * ICA00230
* R5 = USED TO ADDRESS THE USER CONTROL BLOCKS. * ICA00240
* R6 = USED TO ADDRESS THE DISK CONTROL BLOCKS. * ICA00250
* R7 = MOSTLY FREE, BUT USED TO ADDRESS THE SMSG BUFFER QUEUE. * ICA00260
* R8-R10 = FREE * ICA00270
* R11 = BASE REGISTER. * ICA00280
* R12-R13 = FREE * ICA00290
* R14 = MY RETURN ADDRESS WHEN I CALL SOMEBODY * ICA00300
* R15 = SUBROUTINE ADDRESS * ICA00310
* * ICA00320
* LOW CORE USAGE (BECAUSE OF THIS LOW CORE USAGE, THIS PROGRAM * ICA00330
* TEMPORARILY CHANGES THE VIRTUAL STORAGE * ICA00340
* PROTECT KEY TO 0 TO AVOID PROGRAM EXCEPTIONS, * ICA00350
* BUT IMMEDIATELY RESTORES IT) * ICA00360
* 1) SAVES AND RESTORES LBENT IN NUCON (THE COUNT OF LOADER * ICA00370
* TABLE ENTRIES IN HIGH STORAGE) WHEN LOADING IN A * ICA00380
* NON-RESIDENT COMMAND PROCESSING ROUTINE. REPLACED * ICA00390
* AFTER THE COMMAND ROUTINE COMPLETES. * ICA00400
* * ICA00410
* MODULE LOGIC = * ICA00420
* I) INITIALIZE * ICA00430
* 1) SET UP TO HANDLE SMSGS * ICA00440
* A) SET UP TO HANDLE EXTERNAL INTERRUPTS * ICA00450
* B) SET LOW ORDER BIT OF CONTROL REGISTER 0 TO 1 * ICA00460
* C) AUTHORIZE MYSELF BY ISSUING DIAGNOSE X'68' * ICA00470
* 2) DETERMINE THE USER ID OF THIS VIRTUAL MACHINE * ICA00480
* AND THE NODE ID OF THIS VM SYSTEM. * ICA00490
* II) READ THE CONFIGURATION FILE AND CONFIGURE. * ICA00500
* III) TRY TO VARY ON AND ATTACH ALL THE UTS MACHINES TO ME. * ICA00510
* IV) CALL THE DISPATCHER TO START DOING SOME WORK. * ICA00520
* (DON'T LEAVE THIS LOOP UNTIL WE QUIT) * ICA00530
* 1) DISABLE ALL INTERRUPTS SO THAT NEW REQUESTS WON'T * ICA00540
* COME IN AFTER WE'VE CHECKED FOR THEM AND BEFORE * ICA00550
* THE WAIT STATE IN STEP 6). * ICA00560
* 2) CHECK FOR ANY STACKED COMMANDS FROM THE CONSOLE. * ICA00570
* IF ANY, GO READ THEM AND PROCESS THE REQUEST. * ICA00580
* 3) CHECK FOR INTERRUPTS RECEIVED FROM ANY OF THE * ICA00590
* REMOTE, DIALED CONSOLES WE'RE SUPPORTING. * ICA00600
* IF ANY HAVE, PROCESS THAT INTERRUPT. * ICA00610
* 4) CHECK FOR ANY SMSG'S THAT HAVE COME IN. IF ANY * ICA00620
* HAVE, GO PROCESS THE SMSG REQUEST. * ICA00630
* 5) CHECK FOR ANY UTS ATTENTION INTERRUPTS. * ICA00640
* IF SO, GO READ REQUEST CONTROL BLOCK AND * ICA00650
* PROCESS THE REQUEST. * ICA00660
* 6) IF NONE OF THE ABOVE, THEN GO INTO A WAIT STATE. * ICA00670
* A) LOAD AN ENABLED WAIT STATE POINTING TO THE * ICA00680
* TOP OF THIS DISPATCH ROUTINE. WAIT FOR * ICA00690
* SOMETHING TO HAPPEN. CMS WILL TURN OFF THE * ICA00700
* WAIT BIT IN THIS PSW WHEN AN I/O INTERRUPT * ICA00710
* COMES IN. MY EXTERNAL INTERRUPT ROUTINE WILL * ICA00720
* TURN IT OFF IF AN SMSG COMES IN. * ICA00730
* V) SHUTDOWN * ICA00740
* 1) QUIT HANDLING EXTERNAL INTERRUPTS. * ICA00750
* 2) SET LOW ORDER BIT OF CONTROL REGISTER 0 TO 0. * ICA00760
* 3) UNAUTHORIZE MYSELF BY ISSUING DIAGNOSE X'68'. * ICA00770
* 4) RETURN TO CMS WITH A RETURN CODE OF ZERO. * ICA00780
* * ICA00790
* NORMAL EXIT = * ICA00800
* R15 = 0 * ICA00810
* * ICA00820
* EXTERNAL REFERENCES = ICATEXIH, QUIT, STATUS, TRACE, TEST, FAKIT, * ICA00830
* IGNORCMD, CAT, READ, WRITE, TIME, RESTART, * ICA00840
* TERMIO, CONFIG, ATTACH, DOTERM, READRCB, * ICA00850
* READUTS, WRITEUTS, INTERUTS, DOTERMIO, * ICA00860
* MESSAGE, ACCESS, ETTE, PARSE, CONHEX, * ICA00870
* CONEHEX, CONDEC, REJECT. * ICA00880
* * ICA00890
* CONTROL BLOCKS = ICDATA ICATS COMMON DATA AREA * ICA00900
* UTSCB UTS MACHINE CONTROL BLOCK * ICA00910
* USERCB USER FOR THIS UTS CONTROL BLOCK * ICA00920
* DISKCB DISK FOR THIS USER CONTROL BLOCK * ICA00930
* TERMCB DIAL-ABLE TERMINALS CONTROL BLOCK * ICA00940
* * ICA00950
* * ICA00960
* NON-STANDARD MACROS (FOUND IN ICATS MACLIB) * ICA00970
* ICDATA = ICATS COMMON DATA AREA DSECT. * ICA00980
* ETTE = ENTER TRACE TABLE ENTRY SUBROUTINE * ICA00990
* * ICA01000
* CHANGE ACTIVITY * ICA01010
* DATE NAME REASON FOR CHANGE * ICA01020
* 01/17/83 RICK JASPER INITIAL PROGRAM CREATION (DEBUG VERSION) * ICA01030
* 04/18/83 RICK JASPER MAJOR REVISION * ICA01040
* 05/24/83 RICK JASPER ADDED DIAL-ABLE TERMINAL SUPPORT. CAN * ICA01050
* NOW LOGON TO UTS FROM VM TERMINAL. * ICA01060
* 06/24/83 RICK JASPER CHANGED THE LENGTH OF THE READ FOR THE * ICA01070
* REQUEST CONTROL BLOCK FROM 128 TO 108. * ICA01080
* THIS WAS BECAUSE OF HARDWARE PROBLEMS * ICA01090
* WITH JEFF DOBBEK'S DOBBOX. ONE OF THESE * ICA01100
* DAYS HE MAY SAY TO CHANGE IT BACK. * ICA01110
* * ICA01120
*********************************************************************** ICA01130
EJECT ICA01140
PRINT GEN,NODATA ICA01150
ENTRY ICATS,TRACETBL,NEXTTTE,ICDATA ICA01160
EXTRN ICATEXIH ICA01170
ICATS START X'20000' CMS LOAD ADDRESS ICA01180
USING NUCON,R0 NUCON DOESN'T NEED A BASE REGISTER ICA01190
USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA ICA01200
USING CBTERM,R3 USE R3 TO ADDRESS TERMINAL CB'S ICA01210
USING CBUTS,R4 USE R4 TO ADDRESS UTS CONTROL BLOCK ICA01220
USING CBUSER,R5 USE R5 TO ADDRESS USER CONTROL BLOCK ICA01230
USING CBDISK,R6 USE R6 TO ADDRESS DISK CONTROL BLOCK ICA01240
USING SMSGNTRY,R7 SMSG BUFFER BASE REGISTER. R7 IS ICA01250
* USED ONLY OCCASIONALLY AND MUST BE RELOADED EACH TIME ICA01260
USING *,R11,R12 R11 AND R12 BOTH WILL BE BASE REGS ICA01270
LR R11,R15 ESTABLISH FIRST BASE REGISTER ICA01280
LA R12,4095(R11) ESTABLISH SECOND BASE REGISTER ICA01290
LA R12,1(R12) ICA01300
L R2,AICDATA ESTABLISH DATA AREA ADDRESSABILITY ICA01310
ST R14,SAVER14 SAVE CMS RETURN ADDRESS ICA01320
EJECT ICA01330
*********************************************************************** ICA01340
* SET UP TO HANDLE SPECIAL MESSAGES (SMSG'S) * ICA01350
*********************************************************************** ICA01360
HNDEXT SET,ICATEXIH HANDLE EXTERNAL INTERRUPTS ICA01370
* ICA01380
STCTL C0,C0,CONTROL0 GET A COPY OF CONTROL REGISTER 0 ICA01390
OI CONTROL0+3,X'01' TURN ON LOW ORDER BIT AND ICA01400
LCTL C0,C0,CONTROL0 RELOAD IT ICA01410
* ICA01420
* SET UP VMCF PARAMETER LIST (VMCPARM) FOR AUTHORIZE ICA01430
* ICA01440
MVI VMCPFLG1,VMCPSMSG I WILL ACCEPT SMSG'S ONLY ICA01450
* NO SPECIFIC OR PRIORITY REQUESTS ICA01460
MVC VMCPFUNC,=AL2(VMCPAUTH) AUTHORIZE VMCF SUBFUNCTION ICA01470
MVC VMCPVADA,=A(SMSGBUFF) SPECIFY MY INPUT BUFFER ICA01480
MVC VMCPLENA,=A(L'SMSGBUFF) ICA01490
LA R7,VMCPARM ICA01500
DIAG R7,R8,X'0068' AUTHORIZE MYSELF TO ACCEPT SMSG'S ICA01510
LTR R8,R8 CHECK VMCF RETURN CODE ICA01520
BZ CONT1 IT REALLY SHOULD NEVER FAIL ICA01530
LINEDIT TEXT='THE VMCP AUTHORIZE INSTRUCTION FAILED. THE RETU-ICA01540
RN CODE IS ....',SUB=(DEC,(R8)) ICA01550
B QUIT ICA01560
SPACE 4 ICA01570
*********************************************************************** ICA01580
* DETERMINE AND SAVE MY VM USER ID AND THIS VM NODE ID. * ICA01590
*********************************************************************** ICA01600
CONT1 EQU * ICA01610
LA R1,IDENTIFY ICA01620
SVC 202 THIS STACKS A LINE INTO THE CONSOLE STACK ICA01630
DC AL4(*+4) ICA01640
RDTERM CURRTEXT THE LINE CONTAINS 9 TOKENS LIKE SO, ICA01650
LA R1,CURRLEN+1 USERID . NODEID . NET-USER-ID . ICA01660
STH R0,CURRLEN STORE LINE LENGTH JUST BEFORE LINE ICA01670
LA R0,PARM1 MIGHT AS WELL TEMPORARILY USE PARM1-15 ICA01680
L R15,APARSE ICA01690
BALR R14,R15 ICA01700
MVC MYVMUID,PARM1 ICA01720
MVC MYNODEID,PARM3 ICA01710
MVC NETVMUID,PARM5 ICA01730
EJECT ICA01740
*********************************************************************** ICA01750
* GO READ IN THE CONFIGURATION FILE, CONFIGURE, AND THEN GO * ICA01760
* VARY ON AND ATTACH EACH UTS. * ICA01770
*********************************************************************** ICA01780
L R15,=V(CONFIG) GET CONFIG MODULE'S ENTRY POINT ICA01790
BALR R14,R15 GO CONFIGURE ICA01800
L R15,=V(ATTACH) GO TRY TO VARY ON EACH UTS ICA01810
BALR R14,R15 ICA01820
EJECT ICA01830
*********************************************************************** ICA01840
* THIS IS THE DISPATCHER. LOOP HERE UNTIL THEY SAY TO QUIT. * ICA01850
* THIS IS WHERE MY WAIT STATE PSW POINTS TO WHEN THERE'S NOTHING * ICA01860
* TO DO. WHEN AN INTERRUPT COMES IN, THE WAIT BIT IN THAT PSW * ICA01870
* GETS SHUT OFF AND WE START RUNNING FROM THIS POINT. * ICA01880
*********************************************************************** ICA01890
* ICA01900
DISPATCH DS 0H ICA01910
TM FLAGA,ENDPGM TIME TO QUIT YET ?? ICA01920
BO QUIT YEP, GO AHEAD AND QUIT. ICA01930
SSM DISABSSM SHUT OFF I/O & EXTERNAL INTERRUPTS ICA01940
* NUMFINRD IS A NUCON LABEL ICA01950
CLC NUMFINRD,=H'0' ANY COMMANDS FROM THE CONSOLE ?? ICA01960
BNE CONSOLE IF SO, GO BRANCH TO READ COMMAND. ICA01970
* ICA01980
TM FLAGA,TERMINT CHECK FOR A TERMINAL INTERRUPT ICA01990
BNO DISPCONA IF THERE WASN'T ONE, CONTINUE ON ICA02000
L R15,=V(DOTERM) ELSE CALL THE ROUTINE THAT'LL ICA02010
* HANDLE TERMINAL REQUESTS. ICA02020
BALR R14,R15 GO HANDLE A TERMINAL INTERRUPT ICA02030
B DISPATCH THEN RETURN TO THE DISPATCHER. ICA02040
* ICA02050
DISPCONA CLC CURRSMSG,NEXTSMSG SEE IF THERE'S A STACKED SMSG ICA02060
BNE SMSG IF THERE WAS ONE, GO GET IT. ICA02070
* ICA02080
TM FLAGA,UTSINT CHECK FOR ANY UTS INTERRUPTS ICA02090
BO UTS IF THERE WAS ONE, GO GET RCB. ICA02100
* ICA02110
*********************************************************************** ICA02120
* WE HAVEN'T ANYTHING TO DO, SO LET'S GO INTO AN ENABLED WAIT * ICA02130
* STATE UNTIL SOMETHING HAPPENS. IF ANY I/O INTERRUPTS TAKE * ICA02140
* PLACE, CMS WILL WAKE US UP BY TURNING OFF THE WAIT BIT IN OUR * ICA02150
* PSW. IF AN SMSG COMES IN, OUR EXTERNAL INTERRUPT HANDLER * ICA02160
* ROUTINE WILL SHUT IT OFF. * ICA02170
*********************************************************************** ICA02180
ETTE SLEEPTTE ICA02190
LPSW WAITPSW WAIT FOR SOMETHING TO HAPPEN ICA02200
SLEEPTTE DC AL1(L'SLEEPTXT) ICA02210
SLEEPTXT DC C'NOTHING TO DO. TIME TO SLEEP' ICA02220
DS 0H ICA02230
EJECT ICA02240
* ICA02250
*********************************************************************** ICA02260
* COME HERE FROM THE DISPATCHER ROUTINE WITH INTERRUPTS STILL * ICA02270
* DISABLED WHEN THERE'S A LINE WAITING TO BE READ FROM THE * ICA02280
* CONSOLE. * ICA02290
* 1) TURN ON "DOING A CONSOLE COMMAND" FLAG, * ICA02300
* 2) TURN THE INTERRUPTS BACK ON, * ICA02310
* 3) READ THE LINE, * ICA02320
* 4) GO PROCESS THE COMMAND. * ICA02330
* 5) TURN OFF "DOING A CONSOLE COMMAND" FLAG * ICA02340
*********************************************************************** ICA02350
* ICA02360
CONSOLE DS 0H ICA02370
OI FLAGB,CONSCMD REMEMBER YOU'RE DOING A CONSOLE CMD ICA02380
SSM ENABSSM TURN INTERRUPTS BACK ON ICA02390
RDTERM CURRTEXT READ THE LINE IN ICA02400
STH R0,CURRLEN REMEMBER LINE LENGTH ICA02410
BAL R14,PARSECMD GO PROCESS THE COMMAND ICA02420
NI FLAGB,ALL-CONSCMD FINISHED WITH THIS CONSOLE COMMAND ICA02430
B DISPATCH GO BACK TO DISPATCHER ICA02440
EJECT ICA02450
* ICA02460
*********************************************************************** ICA02470
* COME HERE FROM THE DISPATCHER ROUTINE WITH INTERRUPTS STILL * ICA02480
* DISABLED WHEN THE CURRENT SMSG POINTER IS NOT EQUAL TO THE * ICA02490
* NEXT SMSG POINTER (MEANING THAT THERE'S AN SMSG TO PROCESS). * ICA02500
* 1) MOVE THAT SMSG DATA INTO THE CURRENT SMSG AREA, * ICA02510
* 2) BUMP TO THE NEXT SMSG BUFFER, * ICA02520
* 3) TURN THE INTERRUPTS BACK ON, * ICA02530
* 4) GO PROCESS THE COMMAND, * ICA02540
* 5) TURN OFF "DOING A CONSOLE COMMAND" FLAG, * ICA02550
* 6) AND RETURN TO THE DISPATCHER. * ICA02560
*********************************************************************** ICA02570
* ICA02580
SMSG DS 0H ICA02590
OI FLAGB,SMSGCMD REMEMBER YOU'RE DOING AN SMSG CMD ICA02600
L R7,CURRSMSG PICK UP NEXT SMSG ICA02610
MVC SMSGVMID,SMSGUID REMEMBER USER ID OF SMSG SENDER ICA02620
MVC CURRLEN,SMSGLEN MOVE SMSG LENGTH ICA02630
MVC CURRTEXT,SMSGTEXT MOVE IN SMSG TEXT, BLANKS AND ALL ICA02640
LA R7,139(R7) BUMP TO NEXT SMSG BUFFER AREA ICA02650
C R7,LASTSMSG TOO BIG YET ?? ICA02660
BNH SMSGCONT NOPE, CONTINUE ON ICA02670
L R7,FRSTSMSG ELSE USE FIRST SMSG BUFFER AGAIN ICA02680
SMSGCONT DS 0H ICA02690
ST R7,CURRSMSG SAVE IT BEFORE INTERRUPTS ARE ON ICA02700
SSM ENABSSM NOW TURN INTERRUPTS BACK ON ICA02710
BAL R14,PARSECMD GO PROCESS THE COMMAND ICA02720
NI FLAGB,ALL-SMSGCMD FINISHED WITH THIS SMSG COMMAND ICA02730
B DISPATCH RETURN TO DISPATCHER ICA02740
EJECT ICA02750
* ICA02760
*********************************************************************** ICA02770
* COME HERE FROM THE DISPATCHER ROUTINE WITH INTERRUPTS STILL * ICA02780
* DISABLED WHEN THERE'S A UTS MACHINE OUT THERE WAITING TO BE * ICA02790
* SERVICED. * ICA02800
* 1) LOOP THROUGH THE UTSCB CHAIN AND FIND WHICH UTS NEEDS * ICA02810
* SERVICING. * ICA02820
* A) IF NO UTS NEEDS SERVICING, THEN * ICA02830
* 1) TURN OFF THE A-UTS-NEEDS-SERVICING FLAG. * ICA02840
* 2) TURN INTERRUPTS BACK ON. * ICA02850
* 3) RETURN TO THE DISPATCHER. * ICA02860
* B) IF ONE IS FOUND, THEN * ICA02870
* 1) TURN OFF HIS INTERRUPT-IS-IN FLAG. * ICA02880
* 2) TURN ON HIS I'M-GETTING-SERVICED FLAG. * ICA02890
* 3) TURN ON THE I'M-DOING-A-UTS-COMMAND FLAG. * ICA02900
* 4) MOVE THE ADDRESS OF THIS UTSCB INTO THISUTS. * ICA02910
* 5) TURN INTERRUPTS BACK ON. * ICA02920
* 6) GO READ IN THE REQUEST CONTROL BLOCK FROM THIS UTS. * ICA02930
* 7) GO PROCESS THE COMMAND. * ICA02940
* 8) TURN OFF HIS I'M-GETTING-SERVICED FLAG. * ICA02950
* 9) TURN OFF THE I'M-DOING-A-UTS-COMMAND FLAG. * ICA02960
* 10) RETURN TO THE DISPATCHER. * ICA02970
*********************************************************************** ICA02980
* ICA02990
UTS DS 0H ICA03000
* LOOP THROUGH THE UTSCB CHAIN TO SEE WHICH UTS NEEDED SERVICING ICA03010
* IT'LL BE THE ONE WITH THE INTERRUPT-IS-IN FLAG TURNED ON. ICA03020
L R4,CBFIRST GET ADDRESS OF FIRST UTSCB ICA03030
UTSLOOPA LTR R4,R4 ARE WE PAST THE END-OF-CHAIN ?? ICA03040
BZ UTSNONE YEP, A NEEDY UTS WAS NOT FOUND ICA03050
TM CBUTSFGA,INTISIN ELSE, SEE IF THIS ONE'S IN NEED ICA03060
BO UTSGOTIT YEP, IT IS. GO SERVICE HIM. ICA03070
L R4,CBUTSFP HAVEN'T FOUND A NEEDY UTS YET. ICA03080
B UTSLOOPA GO CHECK THE NEXT ONE. ICA03090
* ICA03100
* COME HERE WHEN THERE'S NO UTS OUT THERE THAT NEEDS TO BE SERVICED. ICA03110
* THIS'LL HAPPEN AFTER WE'VE JUST GOT THROUGH SERVICING ONE AND A ICA03120
* NEW REQUEST FROM ANOTHER UTS HAS NOT COME IN (NORMAL CASE). ICA03130
UTSNONE DS 0H ICA03140
NI FLAGA,ALL-UTSINT TURN OFF UTS INTERRUPT SWITCH ICA03150
SSM ENABSSM TURN INTERRUPTS BACK ON ICA03160
B DISPATCH RETURN TO DISPATCHER ICA03170
* ICA03180
* WE'VE FOUND A UTS THAT NEEDS SERVICING. LET'S GO DO IT. ICA03190
UTSGOTIT DS 0H ICA03200
NI CBUTSFGA,ALL-INTISIN TURN OFF INTERRUPT-IS-IN FLAG ICA03210
OI CBUTSFGA,IGOTIT TURN ON I'M-GETTING-IT FLAG ICA03220
OI FLAGB,UTSCMD REMEMBER YOU'RE DOING A UTS CMD ICA03230
ST R4,THISUTS REMEMBER THIS UTSCB ADDRESS ICA03240
SSM ENABSSM TURN INTERRUPTS BACK ON ICA03250
* GO GET HIS REQUEST COMMAND BLOCK ICA03260
* LA R0,128 R0 = LENGTH OF THE REQUEST CONTROL BLOCK ICA03270
LA R0,108 FOR NOW, ONLY READ 108 BYTES. RAJ 6-24-83 ICA03280
LA R1,PARM0 R1 = ADDRESS OF THE RCB ICA03290
L R15,AREADRCB ICA03300
BALR R14,R15 GO READ IN THE REQUEST CONTROL BLOCK ICA03310
LTR R10,R15 WERE THERE ANY I/O ERRORS ?? ICA03320
BZ DOUTSCMD ICA03330
LH R8,CBUTSCSW ICA03340
SR R9,R9 ICA03350
IC R9,SENSE0 ICA03360
LINEDIT TEXT='I/O ERROR GETTING REQUEST CONTROL BLOCK. REQUES-ICA03370
T IGNORED. READRCB RC = ...., CSW STATUS = ...., SENSE -ICA03380
BYTE = ..',SUB=(DEC,(R10),HEX,(R8),HEX,(R9)),RENT=NO ICA03390
B DONTDO ICA03400
DOUTSCMD BAL R14,DOCMD GO PROCESS THE COMMAND ICA03410
DONTDO NI FLAGB,ALL-UTSCMD FINISHED WITH THIS UTS COMMAND ICA03420
NI CBUTSFGA,ALL-IGOTIT TURN OFF I'M-GETTING-IT FLAG ICA03430
NI FLAGC,ALL-FAKEINT RESET FAKE UTS INTERRUPT FLAG ICA03440
B DISPATCH RETURN TO DISPATCHER ICA03450
EJECT ICA03460
*********************************************************************** ICA03470
* THIS IS THE COMMAND PROCESSOR. COME HERE TO INTERPRET THE * ICA03480
* COMMAND AND TO LOCATE AND EXECUTE THE CORRECT COMMAND ROUTINE. * ICA03490
* THERE ARE TWO ENTRY POINTS YOU CAN BRANCH AND LINK TO, * ICA03500
* PARSECMD - IF YOU NEED UNFORMATTED INPUT PARSED INTO 8-BYTE * ICA03510
* TOKENS (USING CMS'S SCAN ROUTINE) FIRST, OR * ICA03520
* DOCMD - IF THE COMMAND IS ALREADY PARSED (AS IT IS WHEN THE * ICA03530
* COMMAND IS FROM ONE OF THE UTS MACHINES). * ICA03540
* UPON ENTRY, THE FOLLOWING CONDITIONS ARE SET UP; * ICA03550
* R2 = ADDRESS OF ICDATA (AS ALWAYS) * ICA03560
* R11 = FIRST BASE REGISTER * ICA03570
* R12 = SECOND BASE REGISTER * ICA03580
* R14 = MY RETURN ADDRESS. * ICA03590
* FLAGB = INDICATES WHETHER THIS IS A CONSOLE COMMAND, AN * ICA03600
* SMSG COMMAND, OR A UTS COMMAND. * ICA03610
* PARM0 = REQUESTOR'S USER ID (CONSOLE & SMSG CMDS ONLY). * ICA03620
* CURRLEN = LENGTH OF UNPARSED COMMAND IF PARSE REQUESTED. * ICA03630
* CURRTEXT = UNPARSED COMMAND TEXT IF PARSE REQUESTED. * ICA03640
* PARM0-PARM15 = UP TO 16 8-BYTE TOKENS IF COMMAND IS * ICA03650
* ALREADY PARSED. * ICA03660
* * ICA03670
* FUNCTION: * ICA03680
* 1) IF PARSING IS NEEDED, THE FIELDS CURRLEN & CURRTEXT * ICA03690
* ARE PARSED INTO THE FIELDS PARM1-PARM15. * ICA03700
* 2) PUT AN ENTRY INTO THE TRACE TABLE. * ICA03710
* 3) PARM1 IS TAKEN TO BE THE COMMAND NAME AND A CHECK * ICA03720
* IS MADE OF THE RESIDENT COMMAND ROUTINE LIST. * ICA03730
* IF THE COMMAND IS RESIDENT, THEN TURN ON THE * ICA03740
* RESIDENT-COMMAND FLAG AND GO TO STEP 5). * ICA03750
* 4) IF THE COMMAND IS NOT RESIDENT, LOOK ON OUR DISK * ICA03760
* FOR THE FILE 'COMMAND-NAME TEXT A'. IF THERE, THEN * ICA03770
* GO TO STEP 4), ELSE IT'S AN UNKNOWN COMMAND NAME. * ICA03780
* REJECT THIS REQUEST. * ICA03790
* 5) IF THE COMMAND EXISTS OUT ON DISK, THEN SAVE THE * ICA03800
* LOADER COUNT AND "INCLUDE" THE TEXT FILE IN. * ICA03810
* CONTINUE ON JUST AS IF THE ROUTINE WAS RESIDENT ALL * ICA03820
* ALONG (EXCEPT THE RESIDENT-COMMAND FLAG IS NOT SET). * ICA03830
* 6) BRANCH AND LINK TO THE COMMAND ROUTINE. * ICA03840
* 7) UPON RETURN, IF THE RESIDENT-COMMAND FLAG IS OFF, * ICA03850
* THEN RESTORE THE LOADER COUNT. * ICA03860
* 8) YOU'RE DONE PROCESSING THIS COMMAND. RETURN TO CALLER. * ICA03870
*********************************************************************** ICA03880
PARSECMD DS 0H ICA03890
ST R14,DOCMDR14 SAVE MY RETURN ADDRESS ICA03900
LA R0,PARM1 PUT PARMS STARTING AT PARM1, NOT PARM0 ICA03910
LA R1,CURRLEN+1 GET ADDRESS OF COMMAND LENGTH & TEXT ICA03920
L R15,APARSE GET ADDRESS OF PARSE ROUTINE ICA03930
BALR R14,R15 GO PARSE THE COMMAND LINE ICA03940
B CMDCONTB GO INTERPRET WHAT WE'VE GOT ICA03950
* ICA03960
* ALTERNATE ENTRY POINT WHEN YOU DON'T REQUIRE PARSING ICA03970
* ICA03980
DOCMD DS 0H ICA03990
ST R14,DOCMDR14 SAVE MY RETURN ADDRESS ICA04000
CMDCONTB DS 0H ICA04010
* PUT AN ENTRY INTO THE TRACE TABLE ICA04020
TM FLAGB,UTSCMD START THE TRACE TABLE ENTRY ICA04030
BNO CMDTRAC1 WITH THE TYPE OF COMMAND THIS ICA04040
MVC DISPTYPE,=C'UTS ' IS, EITHER A UTS COMMAND, A ICA04050
B CMDTRAC3 CONSOLE COMMAND, OR A SMSG ICA04060
CMDTRAC1 TM FLAGB,CONSCMD COMMAND. ICA04070
BNO CMDTRAC2 ICA04080
MVC DISPTYPE,=C'CONSOLE' ICA04090
B CMDTRAC3 ICA04100
CMDTRAC2 MVC DISPTYPE,=C'SMSG ' ICA04110
CMDTRAC3 ETTE DISPTTE RECORD PARM0 - PARM15 ICA04120
LH R7,CMDCNT GET COUNT OF RESIDENT COMMANDS ICA04130
LTR R7,R7 TEST FOR NO RESIDENT COMMANDS ICA04140
BZ NOTRES BRANCH IF THERE ARE NONE TO CHECK ICA04150
LA R8,RESCMDS GET ADDRESS OF RESIDENT COMMAND NAMES ICA04160
B CMDCONTC SKIP NEXT INSTR. FIRST TIME THROUGH ICA04170
CMDUP3 LA R8,12(R8) BUMP TO THE NEXT RESIDENT COMMAND NAME ICA04180
CMDCONTC CLC PARM1,0(R8) IS IT THIS RESIDENT COMMAND ?? ICA04190
BE FOUNDRES YEP, GOT A RESIDENT COMMAND ICA04200
BCT R7,CMDUP3 NOPE, CHECK NEXT RESIDENT COMMAND NAME ICA04210
* ICA04220
NOTRES DS 0H THIS COMMAND IS NOT RESIDENT, LOOK FOR IT ON DISK ICA04230
MVC STATEFN,PARM1 MOVE COMMAND NAME INTO FSSTATE FN ICA04240
LA R7,STATEFN PREPARE FOR FSSTATE MACRO ICA04250
FSSTATE (R7) DOES THE FILE COMMAND-NAME TEXT A EXIST ? ICA04260
LTR R15,R15 WAS THE FILE FOUND ?? ICA04270
BNZ BADCMD NO, THIS MUST BE A INVALID COMMAND ICA04280
*********************************************************************** ICA04290
* WE'VE FOUND THE FILE COMMAND-NAME TEXT ON OUR A-DISK. NOW * ICA04300
* LOAD IT IN (ACTUALLY DONE WITH CMS'S INCLUDE COMMAND, NOT * ICA04310
* CMS'S LOAD COMMAND SO THAT THE LOADER TABLES ARE PRESERVED * ICA04320
* AND THE COMMAND MODULE'S EXTERNAL REFERENCES GET RESOLVED) * ICA04330
*********************************************************************** ICA04340
CMDCONTD DS 0H ICA04350
OI FLAGC,NORESCMD TURN ON NON-RESIDENT COMMAND FLAG ICA04360
MVC SAVTBENT,TBENT SAVE LOADER'S EXTERNAL ENTRY COUNT ICA04370
* SO THAT NEXT TIME WE CALL THIS COMMAND, WE WON'T GET THE ICA04380
* "DUPLICATE IDENTIFIER" MESSAGE FROM THE LOADER ICA04390
MVC CMDNAME,PARM1 MOVE COMMAND NAME TO INCLUDE CMD FN ICA04400
L R1,AINCLCMD ICA04410
SVC 202 GO LOAD IN THE COMMAND MODULE ICA04420
DC AL4(*+4) ICA04430
L R8,=X'0002C000' GET COMMAND MODULE'S ENTRY POINT ICA04440
LTR R7,R15 DID EVERYTHING GO OK WITH THE LOAD? ICA04450
BZ CMDCONTE GREAT, CONTINUE ON ICA04460
*********************************************************************** ICA04470
* YOU GOT SOME ERROR LOADING THIS COMMAND ROUTINE IN. SEE WHO TO * ICA04480
* GIVE THIS ERROR MESSAGE TO, THE UTS, THE CONSOLE, OR THE SMSG'ER. * ICA04490
*********************************************************************** ICA04500
TM FLAGB,UTSCMD IS THIS A UTS COMMAND ?? ICA04510
BNO LOADCONA NOPE, CONTINUE ON ICA04520
* SET RETCODE = X'5000' AND DATA LENGTH = 0 ICA04530
MVC PARM15,=X'5000000000000000' ICA04540
LA R0,128 PREPARE FOR REPLY-TO-UTS ROUTINE ICA04550
LA R1,PARM0 ICA04560
L R15,AWRITUTS GIVE THE REPLY CONTROL BLOCK TO THE UTS ICA04570
BALR R14,R15 IGNORE ANY ERRORS ICA04580
B LOADBYE RETURN TO THE DISPATCHER ICA04590
LOADCONA DS 0H ICA04600
LINEDIT TEXT='ERROR LOADING THE ........ COMMAND ROUTINE. INC-ICA04610
LUDE COMMAND RC = ....',SUB=(CHARA,PARM1,DEC,(R7)),RENT=-ICA04620
NO,DISP=NONE,BUFFA=MYBUFR ICA04630
LA R1,MYBUFR GET ADDRESS OF INVALID COMMAND MESSAGE ICA04640
L R15,AMESSAGE GET THE ADDRESS OF THE MESSAGE ROUTINE ICA04650
BALR R14,R15 DELIVER THE ABOVE MESSAGE ICA04660
LOADBYE DS 0H ICA04670
B CMDEND WE'RE FINISHED HERE. ICA04680
EJECT ICA04690
FOUNDRES DS 0H ICA04700
L R8,8(R8) GET RESIDENT COMMAND'S ENTRY POINT ICA04710
CMDCONTE DS 0H ICA04720
*********************************************************************** ICA04730
* JOIN HERE WHETHER COMMAND IS RESIDENT OR NOT WITH ITS STARTING * ICA04740
* ADDRESS IN R8, WAITING FOR THE BALR TO IT. * ICA04750
*********************************************************************** ICA04760
LR R15,R8 MOVE COMMAND ENTRY POINT TO R15 ICA04770
BALR R14,R15 GO DO THIS COMMAND ICA04780
*********************************************************************** ICA04790
* WE ARE DONE PROCESSING THIS COMMAND (FOR BETTER OR FOR WORSE). * ICA04800
* CHECK TO SEE IF WE GOTTA RESTORE THE LOADER FLAG AND RETURN. * ICA04810
*********************************************************************** ICA04820
CMDEND DS 0H ICA04830
TM FLAGC,NORESCMD ICA04840
BNO CMDCONTF DON'T DO IT IF A RESIDENT CMD ICA04850
SPKA 0(0) SET PSW KEY TO 0 FOR STORE, ELSE ICA04860
* WE'LL GET A PROTECTION EXCEPTION ICA04870
MVC TBENT,SAVTBENT RESTORE LOADER'S COUNTER IN NUCON ICA04880
SPKA X'E0' SET PSW KEY BACK TO NORMAL (X'E') ICA04890
NI FLAGC,ALL-NORESCMD RESET FLAG ICA04900
CMDCONTF L R14,DOCMDR14 ICA04910
BR R14 RETURN TO CALLER ICA04920
EJECT ICA04930
*********************************************************************** ICA04940
* COME HERE WHEN THIS COMMAND ISN'T IN OUR RESIDENT COMMAND LIST AND * ICA04950
* WE CAN'T FIND IT ON OUR A-DISK, THEREFORE IT'S AN INVALID COMMAND. * ICA04960
* DETERMINE WHERE IT CAME FROM AND TELL HIM HE SCREWED UP. * ICA04970
*********************************************************************** ICA04980
BADCMD DS 0H ICA04990
TM FLAGB,UTSCMD IS THIS A UTS COMMAND ?? ICA05000
BNO BADCONTA NOPE, CONTINUE ON ICA05010
* SET RETCODE = X'1000' AND DATA LENGTH = 0 ICA05020
MVC PARM15,=X'1000000000000000' ICA05030
LA R0,128 PREPARE FOR REPLY-TO-UTS ROUTINE ICA05040
LA R1,PARM0 ICA05050
L R15,AWRITUTS GIVE THE REPLY CONTROL BLOCK TO THE UTS ICA05060
BALR R14,R15 IGNORE ANY ERRORS. ICA05070
B BADBYE RETURN TO THE DISPATCHER ICA05080
BADCONTA DS 0H ICA05090
MVC MSG1CMD,PARM1 PUT THE INVALID COMMAND IN THE MESSAGE ICA05100
LA R1,MSG1 GET ADDRESS OF INVALID COMMAND MESSAGE ICA05110
L R15,AMESSAGE GET THE ADDRESS OF THE MESSAGE ROUTINE ICA05120
BALR R14,R15 SAY "XXX IS NOT AN ICATS COMMAND" ICA05130
* THE REASON I DON'T USE THE REJECT ROUTINE HERE IS BECAUSE I WANTED ICA05140
* TO DIFFERENTIATE BETWEEN NOT FINDING THE COMMAND MODULE AS IN THIS ICA05150
* CASE, AND A COMMAND MODULE REJECTING THE COMMAND. ICA05160
* THE FIRST CASE GIVES XXX IS NOT AN ICATS COMMAND. ICA05170
* THE SECOND CASE GIVES XXX IS AN INVALID ICATS COMMAND. ICA05180
BADBYE DS 0H ICA05190
B CMDEND WE'RE FINISHED HERE. ICA05200
EJECT ICA05210
*********************************************************************** ICA05220
* HERE IS WHERE THE SHUTDOWN ROUTINE GOES * ICA05230
*********************************************************************** ICA05240
QUIT DS 0H ICA05250
* ICA05260
* BLAH BLAH BLAH BLAH BLAH BLAH BLAH ICA05270
* THERE'S WORK TO BE DONE HERE ALSO, LIKE STOP TAKING INTERRUPTS ICA05280
* FROM THE UTS'S ICA05290
HNDEXT CLR STOP HANDLING EXTERNAL INTERRUPTS ICA05300
NI CONTROL0+3,X'FE' SHUT OFF THAT BIT TO STOP TAKING ICA05310
LCTL C0,C0,CONTROL0 SMSG'S AND RESTORE CONTROL REG 0 ICA05320
* ICA05330
* SET UP VMCF PARAMETER LIST (VMCPARM) FOR UNAUTHORIZE ICA05340
* ICA05350
MVC VMCPFUNC,=AL2(VMCPUAUT) UNAUTHORIZE VMCF SUBFUNCTION ICA05360
LA R7,VMCPARM ICA05370
DIAG R7,R8,X'0068' ICA05380
LTR R8,R8 CHECK VMCF RETURN CODE ICA05390
BZ QUIT1 IT REALLY SHOULD NEVER FAIL ICA05400
LINEDIT TEXT='THE VMCP UNAUTHORIZE INSTRUCTION FAILED. THE RE-ICA05410
TURN CODE IS ....',SUB=(DEC,(R8)) ICA05420
QUIT1 DS 0H ICA05430
*********************************************************************** ICA05440
* GET RID OF ALL THE DIALABLE TERMINALS. * ICA05450
*********************************************************************** ICA05460
L R3,TERM1ST GET ADDRESS OF FIRST TERMCB ICA05470
LOOPA LTR R3,R3 ARE WE PAST THE END-OF-CHAIN ?? ICA05480
BZ QUIT2 YEP, GET OUT OF THIS LOOP. ICA05490
MVC DROPCUU(3),CBTERMEA ICA05500
LA R1,DROPCMD ICA05510
SVC 202 ICA05520
DC AL4(*+4) ICA05530
L R3,CBTERMFP GO ON TO NEXT TERMINAL ICA05540
B LOOPA IF THERE IS A NEXT ONE. ICA05550
QUIT2 DS 0H ICA05560
LA R15,0 MAKE CMS RETURN CODE = 0 ICA05570
L R14,SAVER14 ICA05580
BR R14 RETURN TO CMS ICA05590
DROP R11 ICA05600
DROP R12 ICA05610
* ICA05620
*********************************************************************** ICA05630
******************* ******************* ICA05640
******************* END OF ICATS MAINLINE ******************* ICA05650
******************* ******************* ICA05660
*********************************************************************** ICA05670
EJECT ICA05680
PRINT GEN,NODATA ICA05690
* ICA05700
*********************************************************************** ICA05710
* START OF ICATS DATA AREA * ICA05720
*********************************************************************** ICA05730
* ICA05740
DS 0D PUT PSW'S ON DOUBLEWORD BOUNDARY ICA05750
CMSXNEW DS D SAVE AREA FOR CMS'S EXTERNAL NEW PSW ICA05760
ENABSSM DC X'FF' MASK TO ENABLE I/O & EXT. INTERRUPTS ICA05770
DISABSSM DC X'00' MASK TO DISABLE I/O & EXT. INTERRUPTS ICA05780
AICDATA DC A(ICDATA) ADDRESS OF ICATS COMMON DATA AREA ICA05790
TEMP DS F TEMPORARY WORK SPACE ICA05800
CONTROL0 DS F MY CONTROL REGISTER 0 - LATER RESTORED ICA05810
* THE NEXT LINE MUST BE DONE THIS WAY INSTEAD OF A LA INSTRUCTION ICA05820
AINCLCMD DC X'00',AL3(INCLCMD) TO INSURE HIGH ORDER BYTE IS X'00' ICA05830
IDENTIFY DS 0D IDENTIFY COMMAND ICA05840
DC CL8'IDENTIFY' ICA05850
DC CL8'(' ICA05860
DC CL8'LIFO' ICA05870
DC 8X'FF' ICA05880
* ICA05890
INCLCMD DS 0D CMS INCLUDE COMMAND TO LOAD ICA05900
DC CL8'INCLUDE' NON-RESIDENT COMMAND MODULES IN WITH ICA05910
CMDNAME DS CL8 ICA05920
DC CL8'(' ICA05930
DC CL8'ORIGIN' PUT HIM AT X'2C000' SINCE I'M AT ICA05940
DC CL8'2C000' X'20000' - THAT GIVES ME 48 K ICA05950
DC CL8'NOMAP' DON'T BOTHER WITH A LOAD MAP ICA05960
DC CL8'NOAUTO' DON'T RESOLVE UNRESOLVED REFERENCES ICA05970
DC CL8'NOLIBE' DON'T SEARCH IN ANY LIBRARIES ICA05980
DC 8X'FF' ICA05990
* ICA06000
DS 0D ICA06010
STATEFN DC CL8' ' ICA06020
DC CL8'TEXT' ICA06030
DC CL2'A' ICA06040
DC 8X'FF' ICA06050
* ICA06060
DS 0D ICA06070
DROPCMD DC CL8'CP' ICA06080
DC CL8'DETACH' ICA06090
DROPCUU DC CL8' ' ICA06100
DC 8X'FF' ICA06110
* ICA06120
SAVTBENT DS H ICA06130
*********************************************************************** ICA06140
* RESIDENT COMMAND LIST. TO MAKE A COMMAND RESIDENT, INCREMENT * ICA06150
* THE RESIDENT COMMAND COUNT (CMDCNT) AND INCLUDE THE COMMAND * ICA06160
* NAME ALONG WITH IT'S ADDRESS IN THE RESIDENT COMMAND LIST * ICA06170
* (RESCMDS). IF THE COMMAND MODULE IS ASSEMBLED SEPARATE * ICA06180
* FROM THIS ICATS MAINLINE, IT MUST HAVE A V-TYPE ADDRESS * ICA06190
* CONSTANT. ELSE USE AN A-TYPE ADDRESS CONSTANT. CMS WILL * ICA06200
* AUTOMATICALLY LOAD THE COMMAND MODULE WHEN ICATS GETS LOADED. * ICA06210
* THIS SCHEME ALSO ALLOWS ANY NUMBER OF ABBREVIATIONS OR * ICA06220
* SYNONYMS OF RESIDENT COMMANDS ONLY (NO ABBREVIATIONS OR * ICA06230
* SYNONYMS FOR NON-RESIDENT COMMMANDS - MAYBE SOME DAY) BY * ICA06240
* SIMPLY LISTING THEM. SEE QUIT AND TRACE FOR EXAMPLES. * ICA06250
* ALSO, CERTAIN COMMANDS MAY BE IGNORED HERE LIKE ENTERING * ICA06260
* AN ASTERISK (CONSIDERED A COMMENT). * ICA06270
*********************************************************************** ICA06280
CNOP 2,4 ICA06290
CMDCNT DC H'16' ICA06300
RESCMDS DC CL8'QUIT ',V(QUIT) ICA06310
DC CL8'Q ',V(QUIT) ICA06320
DC CL8'STATUS ',V(STATUS) ICA06330
DC CL8'TRACE ',V(TRACE) ICA06340
DC CL8'TEST ',V(TEST) ICA06350
DC CL8'T ',V(TRACE) ICA06360
DC CL8'FAKIT ',V(FAKIT) ICA06370
DC CL8'F ',V(FAKIT) ICA06380
DC CL8'* ',V(IGNORCMD) ICA06390
DC CL8' ',V(IGNORCMD) ICA06400
DC CL8'CAT ',V(CAT) ICA06410
DC CL8'READ ',V(READ) ICA06420
DC CL8'WRITE ',V(WRITE) ICA06430
DC CL8'TIME ',V(TIME) ICA06440
DC CL8'RESTART ',V(RESTART) ICA06450
DC CL8'TERMIO ',V(TERMIO) ICA06460
EJECT ICA06470
* ICA06480
*********************************************************************** ICA06490
* TRACE TABLE ENTRIES * ICA06500
*********************************************************************** ICA06510
CONCTTE DC AL1(L'CONCTTET) ICA06520
CONCTTET DC C'DISPATCH CONSOLE CMD ' ICA06530
SMSGCTTE DC CL24'GOT AN SMSG COMMAND. ' ICA06540
UTSCTTE DC CL24'GOT A UTS COMMAND. ' ICA06550
* ICA06560
*********************************************************************** ICA06570
* ICATS MESSAGES * ICA06580
*********************************************************************** ICA06590
MSG1 DC AL1(MSG1EQU) ICA06600
MSG1CMD DS CL8 PUT THE UNKNOWN COMMAND NAME HERE ICA06610
DC C' IS NOT AN ICATS COMMAND' ICA06620
MSG1EQU EQU *-MSG1-1 ICA06630
EJECT ICA06640
* * ICA06650
*********************************************************************** ICA06660
* VMCPARM CONTROL BLOCK AS DESCRIBED IN THE VM SYSTEM * ICA06670
* PROGRAMMERS GUIDE ON PAGE 174. THE NUMBERS AND LETTERS * ICA06680
* IN THE LAST PART OF THE LINE IS A GUIDE TO WHICH FIELDS * ICA06690
* ARE USED FOR EACH FUNCTION (0-B). * ICA06700
* VMCF FUNCTIONS = 0 1 2 3 4 5 6 7 8 9 A B * ICA06710
*********************************************************************** ICA06720
DS 0D ICA06730
VMCPARM DS 0CL40 ICA06740
VMCPFLG1 DC X'00' 0 2 3 4 A ICA06750
VMCPAUTS EQU X'80' ICA06760
VMCPPRTY EQU X'40' ICA06770
VMCPSMSG EQU X'20' ICA06780
VMCPFLG2 DC X'00' ICA06790
VMCPFUNC DC X'0000' 0 1 2 3 4 5 6 7 8 9 A B ICA06800
VMCPAUTH EQU X'0000' ICA06810
VMCPUAUT EQU X'0001' ICA06820
VMCPSEND EQU X'0002' ICA06830
VMCPSENR EQU X'0003' ICA06840
VMCPSENX EQU X'0004' ICA06850
VMCPRECV EQU X'0005' ICA06860
VMCPCANC EQU X'0006' ICA06870
VMCPREPL EQU X'0007' ICA06880
VMCPQUIE EQU X'0008' ICA06890
VMCPRESM EQU X'0009' ICA06900
VMCPIDEN EQU X'000A' ICA06910
VMCPRJCT EQU X'000B' ICA06920
VMCPMID DC X'00000000' 2 3 4 5 6 7 B ICA06930
VMCPUSER DC X'0000000000000000' 0 2 3 4 5 6 7 A B ICA06940
VMCPVADA DC X'00000000' 0 2 3 4 5 7 ICA06950
VMCPLENA DC X'00000000' 0 2 3 4 5 7 ICA06960
VMCPVADB DC X'00000000' 3 ICA06970
VMCPLENB DC X'00000000' 3 ICA06980
VMCPUSE DC X'0000000000000000' 2 3 4 5 7 A B ICA06990
EJECT ICA07000
SAVER14 DS F ICA07010
DOCMDR14 DS F ICA07020
MYBUFR DS CL80 ICA07030
LTORG ICA07040
*********************************************************************** ICA07050
* HERE ARE ALL THE BIG DATA STRUCTURES. THEY MUST GO AFTER * ICA07060
* ALL THE ICATS MAINLINE DATA AREAS AND SUBROUTINES, AND * ICA07070
* CAN GO HERE BEFORE ALL THE COMMON SUBROUTINES THAT USE * ICA07080
* THEIR OWN BASE REGISTERS. NOBODY ADDRESSES THESE THINGS * ICA07090
* DIRECTLY, BUT RATHER EVERYBODY USES POINTERS TO THESE * ICA07100
* AREAS THAT RESIDE IN THE ICATS COMMON DATA AREA (ICDATA). * ICA07110
*********************************************************************** ICA07120
*********************************************************************** ICA07130
* SMSG BUFFER AREA. THERE'S ROOM HERE FOR 10 SMSG'S. EACH GETS * ICA07140
* STACKED IN A CIRCULAR QUEUE BY THE EXTERNAL INTERRUPT HANDLING * ICA07150
* ROUTINE AND GETS PULLED OUT BY THE SMSG COMMAND HANDLING ROUTINE. * ICA07160
* THE SMSG COMMAND HANDLER IS ALWAYS TRYING TO CATCH UP TO THE * ICA07170
* EXTERNAL INTERRUPT HANDLING ROUTINE. * ICA07180
* TO CHANGE THE SIZE OF THE SMSG BUFFER, SIMPLY CHANGE THE NUMBER * ICA07190
* 10 IN THE DC'S FOR LASTMSG AND SMSGBUFR. * ICA07200
*********************************************************************** ICA07210
SMSGBUFR DS 10CL139 SMSG BUFFER (1390 BYTES) ICA07220
*********************************************************************** ICA07230
* THIS IS THE TRACE TABLE. THERE'S ROOM FOR ABOUT 28 144-BYTE * ICA07240
* ENTRIES. TRACE TABLE ENTRIES ARE VARIABLE LENGTH AND IN THIS * ICA07250
* FORMAT; DC AL8('HEX TIME STAMP') * ICA07260
* DC AL1('LENGTH OF FOLLOWING ENTRY') 255 MAX * ICA07270
* DC C'ANY LENGTH TRACE TABLE ENTRY' PADDED TO * ICA07280
* END ON A 16-BYTE BOUNDARY * ICA07290
* TO CHANGE THE SIZE OF THE TRACE TABLE, SIMPLY CHANGE THE NUMBER * ICA07300
* 512 IN THE DC'S FOR LASTTTE (IN ICDATA) AND TRACETBL. * ICA07310
*********************************************************************** ICA07320
* ICA07330
ORG (*-ICATS+15)/16*16+ICATS ICA07340
TRACETBL DS 512CL16 512 * 16 = 8192 = AN 8K TRACE TABLE ICA07350
*********************************************************************** ICA07360
* THIS IS THE UTS, THE USER, AND THE DISK CONTROL BLOCK CHAINS. * ICA07370
* TO CHANGE THE SIZE OF THE RESERVED STORAGE FOR THESE STRUCTURES, * ICA07380
* CHANGE THE 1000 IN THE DC'S FOR CBEND (IN ICDATA) AND CBCHAIN. * ICA07390
*********************************************************************** ICA07400
* ICA07410
CBCHAIN DS 1000D ICA07420
* ICA07430
EJECT ICA07440
ICDATA GEN=REAL ICA07450
LTORG ICA07460
NUCON ICA07470
ICATS CSECT RETURN TO NORMAL CSECT ICA07480
* ICA07490
* THE NEXT 2 LINES ARE THERE JUST TO LET CMS KNOW, VIA THE LOADER, ICA07500
* HOW MUCH MEMORY I INTEND TO USE IN THIS PROGRAM. THE LAST THING ICA07510
* IN MY MEMORY WILL BE THE OUTPUT BUFFER WHICH STARTS AT X'30000' ICA07520
* AND GOES ON FOR X'30088' (SEE ABUFFER & LBUFFER). ICA07530
* 262280 = X'40088' = (START OF BUFFER) + (LENGTH OF BUFFER) ICA07540
* - START OF PROGRAM (X'20000') ICA07550
* THE REASON I DO THIS IS SO THAT CMS WILL NOT ALLOCATE GETMAIN ICA07560
* AND DMSFREE REQUESTS OVER THE TOP OF MY PROGRAM. ICA07570
* ORG ICATS+262280 ICA07580
* DC X'FA' ICA07590
END ICA07600