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