CFD TITLE 'DMKCFD (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 *. 00003000 * MODULE NAME - 00004000 * DMKCFD 00005000 * 00006000 * FUNCTION - 00007000 * TO HANDLE THE 'LOCATE' AND 'ADSTOP' COMMANDS. 00008000 * 00009000 * ATTRIBUTES - 00010000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00011000 * 00012000 * ENTRY POINTS - 00013000 * DMKCFDLO - TO PRINT THE ADDRESS OF REAL DEVICE BLOKS 00014000 * OR VMBLOK AND/OR VIRTUAL DEVICE BLOK ADDRESSES. 00015000 * DMKCFDAD - TO STOP EXECUTION OF THE VIRTUAL MACHINE AT A 00016000 * SPECIFIC ADDRESS. 00017000 * 00018000 * ENTRY CONDITIONS - 00019000 * GPR9 - ADDRESS OF THE COMMAND LINE BUFFER. 00020000 * GPR11- ADDRESS OF USERS VMBLOK. 00021000 * GPR12- ADDRESS OF THE ENTRY POINT. 00022000 * GPR13- ADDRESS OF THE STANDARD SAVE AREA. 00023000 * 00024000 * EXIT CONDITIONS - 00025000 * NORMAL - 00026000 * GPR2 = 0 00027000 * 00028000 * ERROR - 00029000 * GPR2 = ERROR MESSAGE NUMBER 00030000 * 00031000 * CALLS TO OTHER ROUTINES - 00032000 * DMKSCNFD - TO LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE 00033000 * BUFFER. 00034000 * DMKSCNAU - TO LOCATE THE VMBLOK OF A SPECIFIED USERID. 00035000 * DMKSCNVU - TO LOCATE THE ADDRESSES OF VITUAL DEVICE BLOKS. 00036000 * DMKSCNRU - TO LOCATE THE ADDRESSES OF REAL DEVICE BLOKS. 00037000 * DMKCVTHB - TO CONVERT HEXIDECIMAL NUMBERS TO BINARY. 00038000 * DMKCVTBH - TO CONVERT BINARY NUMBERS TO HEXIDECIMAL. 00039000 * DMKFREE - TO OBTAIN STORAGE FOR BUFFERS. 00040000 * DMKFRET - TO RETURN ACQUIRED STORAGE TO THE SYSTEM. 00041000 * DMKQCNWT - TO SEND MESSAGES TO THE TERMINAL. 00042000 * DMKERMSG - SEND ERROR MESSAGES TO TERMINAL. 00043000 * DMKPSASC - TO CHECK IF ADDRESS IS IN A SHARED PAGE 00044000 * DMKATSCF - TO UNSHARE A NAMED SYSTEM 00045000 * 00046000 * TABLES AND WORKAREAS - 00047000 * NONE 00048000 * 00049000 * REGISTER USAGE - 00050000 * GPR0 - FIELD LENGTH REGISTER. 00051000 * GPR1 - ADDRESS OF ARGUMENT IN COMMAND LINE. 00052000 * GPR2 - PARAMETER REGISTER FOR CALLED ROUTINES. 00053000 * GPR3 - PARAMETER REGISTER FOR CALLED ROUTINES. 00054000 * GPR4 - WORK REGISTER. 00055000 * GPR5 - WORK REGISTER. 00056000 * GPR6 - ADDRESS OF RCHBLOK OR VCHBLOK 00057000 * GPR7 - ADDRESS OF RCUBLOK OR VCUBLOK 00058000 * GPR8 - ADDRESS OF RDEVBLOK OR VDEVBLOK. 00059000 * GPR9 - ADDRESS OF COMMAND LINE BUFFER. 00060000 * GPR10 - ADDRESS OF OUTPUT BUFFER. 00061000 * GPR11 - ADDRESS OF VMBLOK 00062000 * GPR12 - BASE REGISTER. 00063000 * GPR13 - ADDRESS OF SAVEAREA. 00064000 * GPR14 - LINKAGE REGISTER. 00065000 * GPR15 - LINKAGE REGISTER. 00066000 * 00067000 * NOTES - 00068000 * NONE 00069000 * 00070000 * OPERATION - 00071000 * THE COMMAND ROUTINES ARE CALLED BY DMKCFM. THE FORMAT AND 00072000 * DESCRIPTION OF EACH COMMAND IS LISTED IN SEPARATE PROLOGS 00073000 * BELOW. 00074000 *. 00075000 EJECT 00076000 DMKCFD CSECT 00077000 MODID DC CL8'DMKCFD' 00078000 SPACE 00079000 EXTRN DMKSCNFD 00080000 EXTRN DMKPSASC,DMKATSCF @V60BC11 00081000 EXTRN DMKCVTHB 00082000 EXTRN DMKCVTBH 00083000 EXTRN DMKSCNAU 00084000 EXTRN DMKSCNVU 00085000 EXTRN DMKSCNRU 00086000 EXTRN DMKERMSG 00087000 EXTRN DMKCPEND,DMKSYMTB HRC104DK 00087500 SPACE 00088000 USING PSA,R0 00089000 USING VMBLOK,R11 00090000 USING SAVEAREA,R13 00091000 SPACE 00092000 NOFREE EQU X'80' INDICATES NO CALL TO DMKFREE 00093000 EJECT 00094000 *********************************************************************** 00095000 * * 00096000 * 'LOCATE' * 00097000 * * 00098000 *********************************************************************** 00099000 *. 00100000 * SUBROUTINE NAME - 00101000 * DMKCFDLO 00102000 * 00103000 * 00104000 * FUNCTION - 00105000 * TO DISPLAY THE ADDRESS OF THE SYSTEM CONTROL BLOKS ASSOCIATED 00106000 * WITH A SPECIFIC USER OR A REAL SYSTEM DEVICE. 00107000 * 00108000 * COMMAND FORMAT - 00109000 * +----------+-----------------+ 00110000 * | LOCATE | USERID | 00111000 * | LOC | RADDR | 00112000 * | | SYMBOL_NAME | HRC104DK 00112500 * +----------+-----------------+ 00113000 * 00114000 * OPERATION - 00115000 * 00116000 * 1. CALL DMKSCNFD TO LOCATE THE FIRST ARGUMENT. IF NO ARGUMENT 00117000 * IS FOUND, CALL DMKERMSG TO SEND ERROR MESSAGE 00118000 * DMKCFD026E AND EXIT. 00119000 * 2. CALL DMKSCNAU TO SEE IF IT IS A USERID. IF RETURN FROM 00120000 * DMKSCNAU INDICATES A VALID USER, THEN CALL DMKCVTBH 00121000 * TO CONVERT THE VMBLOK ADDRESS TO PRINTABLE FORM. 00122000 * THEN CALL DMKSCNFD AGAIN TO SEE IF VADDR REQUEST. IF NONE 00123000 * IS FOUND, OUTPUT JUST THE VMBLOK ADDRESS.IF ONE FOUND, CALL 00124000 * DMKCVTHB TO CONVERT THE ADDRESS TO BINARY. IF CONVERT 00125000 * FAILS, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFD022E AND 00126000 * EXIT.ELSE, CALL DMKSCNVU TO LOCATE THE VIRTUAL DEVICE 00127000 * BLOKS. IF BLOKS ARE NOT FOUND, CALL DMKERMSG TO SEND 00128000 * ERROR MESSAGE DMKCFD040E AND EXIT. ELSE, CALL DMKCVTBH TO 00129000 * CONVERT THESE ADDRESSES TO PRINTABLE FORM. THEN CALL 00130000 * DMKQCNWT TO OUTPUT ADDRESSES. 00131000 * 3. IF NOT A USERID, CALL DMKCVTHB TO CONVERT THE REAL 00132000 * ADDRESS TO BINARY. IF CONVERT FAILS, CALL DMKERMSG TO 00133000 * SEND ERROR MESSAGE DMKCFD021E AND EXIT. ELSE, CALL DMKSCNRU 00134000 * TO LOCATE THE REAL DEVICE BLOKS. IF NOT FOUND, CALL 00135000 * DMKERMSG TO SEND ERROR MESSAGE DMKCFD040E AND EXIT. IF OK, 00136000 * CALL DMKCVTBH TO CONVERT THE REAL BLOK ADDRESSES 00137000 * TO PRINTABLE FORM. THEN CALL DMKQCNWT TO SEND THE MESSAGE. 00138000 * 00139000 * RESPONSES - 00140000 * 00141000 * SYMBOL = XXXXXX PAGEABLE, REAL = XXXXXX HRC104DK 00142190 * SYMBOL = XXXXXX RESIDENT HRC104DK 00142380 * HRC104DK 00142570 * VMBLOK = XXXXXX HRC104DK 00142760 * 00143000 * VMBLOK VCHBLOK VCUBLOK VDEVBLOK 00144000 * XXXXXX XXXXXX XXXXXX XXXXXX 00145000 * 00146000 * RCHBLOK RCUBLOK RDEVBLOK 00147000 * XXXXXX XXXXXX XXXXXX 00148000 * 00149000 * WHERE XXXXXX IS THE ADDRESS OF THE RESPECTIVE BLOK. 00150000 * 00151000 * ERROR MESSAGES - 00152000 * DMKCFD021E RADDR MISSING OR INVALID 00153000 * DMKCFD022E VADDR MISSING OR INVALID 00154000 * DMKCFD026E OPERAND MISSING OR INVALID 00155000 * DMKCFD040E DEV (ADDR) DOES NOT EXIST 00156000 * DMKCFD1003E XXXXX WAS NOT FOUND. (THIS WILL BE ADDED) HRC104DK 00156500 *. 00157000 SPACE 3 00158000 DMKCFDLO RELOC 00159000 MVI SAVEWRK1,X'00' ZERO FLAG AREA 00160000 CALL DMKSCNFD LOCATE FIRST ARGUMENT 00161000 BNZ CFD026 MISSING ARGUMENT 00162000 STM R0,R1,SAVEWRK2 SAVE LENGTH AND ADDRESS OF ARG. 00163000 CALL DMKSCNAU SEE IF VALID USERID 00164000 BNZ LOCRADDR BRANCH IF NOT - GO SEE IF VALID RADDR 00165000 LR R3,R1 SAVE USERID VMBLOK ADDRESS 00166000 CALL DMKCVTBH CONVERT VMBLOK ADDRESS 00167000 LR R4,R0 SAVE VMBLOK ADDRESS 00168000 LR R5,R1 . . 00169000 CALL DMKSCNFD LOCATE VADDR IF ANY 00170000 BNZ VMONLY BRANCH IF NONE FOUND 00171000 CL R0,F3 ARGUMENT OVER THREE CHARACTERS 00172000 BH CFD022 BAD NEWS IF TAKE BRANCH 00173000 STM R0,R4,SAVEWRK2 SAVE REGISTERS 00174000 LM R0,R4,SAVEWRK2 RESTORE REGISTERS 00175000 CALL DMKCVTHB CONVERT ADDRESS 00176000 BNZ CFD022 INVALID ADDRESS 00177000 LR R10,R11 SAVE CALLERS VMBLOK ADDRESS 00178000 LR R11,R3 POINT R11 TO USERID VMBLOK ADDRESS 00179000 CALL DMKSCNVU GET BLOK ADDRESSES 00180000 LR R11,R10 RESTORE CALLERS VMBLOK ADDRESS 00181000 BNZ CFD040 UNIT NOT FOUND 00182000 * 00183000 * GPR6 = VCHBLOK ADR.;GPR7 = VCUBLOK ADR.; GPR8 = VDEVBLOK ADR. 00184000 * 00185000 LA R0,38 LOAD LENGTH OF HEADER RECORD 00186000 LA R1,VMHDR ADDRESS OF HEADER 00187000 CALL DMKQCNWT,PARM=NORET SEND HEADER 00188000 LA R0,LOCMSGSZ SIZE OF BUFFER 00189000 CALL DMKFREE GET BUFFER 00190000 LR R10,R1 ADDRESS OF BUFFER TO R10 00191000 USING LOCMSG,R10 00192000 MVC LOCMSG(8),BLANKS BLANK MSG AREA 00193000 MVC LOCMSG+8((LOCMSGSZ*8)-8),LOCMSG . . 00194000 STCM R4,3,VMBLKADR STORE VMBLOK ADDRESS IN MESSAGE 00195000 STCM R5,15,VMBLKADR+2 . . 00196000 LR R1,R6 ADDRESS OF VCHBLOK TO R1 00197000 CALL DMKCVTBH CONVERT TO PRINTABLE FORM 00198000 STCM R0,3,VMCHADR STORE VCHBLOK ADDRESS IN MESSAGE 00199000 STCM R1,15,VMCHADR+2 . . 00200000 LR R1,R7 VCUBLOK ADDRESS TO R1 00201000 CALL DMKCVTBH CONVERT 00202000 STCM R0,3,VMCUADR STORE INTO MESSAGE 00203000 STCM R1,15,VMCUADR+2 00204000 LR R1,R8 ADDRESS OF VDEVBLOK TO R1 00205000 CALL DMKCVTBH CONVERT 00206000 STCM R0,3,VMDEVADR STORE INTO MESSAGE 00207000 STCM R1,15,VMDEVADR+2 00208000 LA R0,36 LENGTH OF MESSAGE 00209000 LR R1,R10 ADDRESS OF MESSAGE 00210000 DROP R10 00211000 B CFDWRIT GO SEND MESSAGE AND EXIT 00212000 SPACE 6 00213000 VMONLY OI SAVEWRK1,NOFREE SET NO CALL TO DMKFREE BIT 00214000 MVC SAVEWRK2(6),VMHDR MOVE 'VMBLOK' TO MESSAGE 00215000 MVC SAVEWRK3+2(3),=C' = ' INSERT EQUAL 00216000 STCM R4,3,SAVEWRK4+1 STORE VMBLOK ADDRESS INTO MESSAGE 00217000 STCM R5,15,SAVEWRK4+3 . . 00218000 LA R0,15 MESSAGE LENGTH 00219000 LA R1,SAVEWRK2 ADDRESS OF MESSAGE 00220000 B CFDWRIT GO SEND IT 00221000 SPACE 6 00222000 LOCRADDR OI SAVEWRK1,NOFREE SET NO CALL TO DMKFREE BIT 00223000 LM R0,R1,SAVEWRK2 LOAD LENGTH AND ADDRESS OF ARG. 00224000 CL R0,F3 CHECK FOR VALID RADDR 00225000 BH SCNSYM BRANCH IF TOO MANY CHARACTERS HRC104DK 00226490 CALL DMKCVTHB CONVERT REAL ADDRESS TO BINARY 00227000 BNZ CFD021 INVALID RADDR 00228000 CALL DMKSCNRU GET ADDRESSES OF BLOKS 00229000 BNZ CFD040 CAN'T FIND 00230000 LA R0,28 LENGTH OF HEADER 00231000 LA R1,RADRHDR ADDRESS OF HEADER 00232000 CALL DMKQCNWT,PARM=NORET SEND IT 00233000 MVC SAVEWRK2(8),BLANKS BLANK MESSAGE AREA 00234000 MVC SAVEWRK4(22),SAVEWRK2 . . 00235000 LR R1,R6 RCHBLOK ADDRESS TO R1 00236000 CALL DMKCVTBH CONVERT ADDRESS 00237000 STCM R0,3,SAVEWRK2 STORE ADDRESS IN MESSAGE 00238000 STCM R1,15,SAVEWRK2+2 . . 00239000 LR R1,R7 ADDRESS OF RCUBLOK 00240000 CALL DMKCVTBH CONVERT 00241000 STCM R0,3,SAVEWRK4+2 STORE INTO MESSAGE 00242000 STCM R1,15,SAVEWRK5 . . 00243000 LR R1,R8 ADDRESS OF RDEVBLOK 00244000 CALL DMKCVTBH CONVERT 00245000 STCM R0,3,SAVEWRK7 STORE IT 00246000 STCM R1,15,SAVEWRK7+2 . . 00247000 LA R0,26 MESSAGE LENGTH 00248000 LA R1,SAVEWRK2 MESSAGE ADDRESS 00249000 B CFDWRIT SEND MESSAGE NEXT HRC104DK 00249010 SPACE , HRC104DK 00249020 SCNSYM DS 0H HRC104DK 00249030 LM R2,R3,SAVEWRK2 LOAD LENGTH AND ADDRESS OF ARG. HRC104DK 00249040 L R1,=A(DMKSYMTB) HRC104DK 00249050 BCTR R2,0 DECREMENT FOR EXECUTE HRC104DK 00249060 SPACE , HRC104DK 00249070 SCNSYMLP DS 0H HRC104DK 00249080 CLI 0(R1),X'00' END OF LIST? HRC104DK 00249090 BE SCNSYMDN HRC104DK 00249100 EX R2,SYMCLC HRC104DK 00249110 BE SYMFND HRC104DK 00249120 LA R1,12(,R1) INCREMENT TO NEXT HRC104DK 00249130 B SCNSYMLP HRC104DK 00249140 SPACE , HRC104DK 00249150 SYMCLC CLC 0(0,R3),0(R1) HRC104DK 00249160 SPACE , HRC104DK 00249170 SCNSYMDN DS 0H HRC104DK 00249180 B CFD1003 HRC104DK 00249190 SPACE , HRC104DK 00249200 SYMFND DS 0H HRC104DK 00249210 LR R3,R1 GET ADDRESS OF DATA HRC104DK 00249220 LA R0,SYMMSGSZ HRC104DK 00249230 CALL DMKFREE GET BUFFER HRC104DK 00249240 LR R10,R1 HRC104DK 00249250 USING SYMMSG,R10 HRC104DK 00249260 MVC SYMBOL,0(R3) MOVE SYMBOL NAME HRC104DK 00249270 MVC SYMBOL+8,=C' = ' HRC104DK 00249280 L R1,8(R3) GET ADDRESS OF DATA HRC104DK 00249290 CALL DMKCVTBH HRC104DK 00249300 STCM R0,B'0011',SYMADR HRC104DK 00249310 STCM R1,B'1111',SYMADR+2 HRC104DK 00249320 MVC SYMRES,=C' RESIDENT' HRC104DK 00249330 LA R0,26 HRC104DK 00249340 L R2,8(R3) GET ADDRESS OF DATA HRC104DK 00249350 CL R2,=A(DMKCPEND) END OF NUCLEUS HRC104DK 00249360 BNH SYMADDR HRC104DK 00249370 MVC SYMRES,=C' PAGEABLE' HRC104DK 00249380 L R15,ASYSVM SYSTEM VMBLOK HRC104DK 00249390 LCTL C1,C1,VMSEG-VMBLOK(R15) SEGMENT TABLE HRC104DK 00249400 LRA R1,0(0,R2) GET REAL ADDRESS HRC104DK 00249410 BNZ SYMNREAL HRC104DK 00249420 LCTL C1,C1,VMSEG RESTORE USERS SEGMENT TABLE HRC104DK 00249430 MVC SYMREAL,=C', REAL = ' HRC104DK 00249440 CALL DMKCVTBH HRC104DK 00249450 STCM R0,B'0011',SYMRADR HRC104DK 00249460 STCM R1,B'1111',SYMRADR+2 HRC104DK 00249470 LA R0,41 HRC104DK 00249480 B SYMADDR HRC104DK 00249490 SPACE , HRC104DK 00249500 SYMNREAL DS 0H HRC104DK 00249510 LCTL C1,C1,VMSEG RESTORE USERS SEGMENT TABLE HRC104DK 00249520 SPACE , HRC104DK 00249530 SYMADDR DS 0H HRC104DK 00249540 LR R1,R10 HRC104DK 00249550 CALL DMKQCNWT,PARM=NORET SEND MESSAGE HRC104DK 00249560 LA R0,SYMMSGSZ SIZE OF BUFFER HRC104DK 00249570 B CFDFRET HRC104DK 00249580 SPACE 00250000 CFDWRIT CALL DMKQCNWT,PARM=NORET SEND MESSAGE 00251000 TM SAVEWRK1,NOFREE MUST I FRET ??? 00252000 BO CFDEXIT NO - GO EXIT 00253000 LA R0,LOCMSGSZ SIZE OF BUFFER 00254000 CFDFRET LR R1,R10 ADDRESS OF BUFFER HRC104DK 00255490 CALL DMKFRET 00256000 CFDEXIT EXIT RETURN 00257000 EJECT 00258000 VMHDR DC CL38'VMBLOK VCHBLOK VCUBLOK VDEVBLOK' 00259000 RADRHDR DC CL28'RCHBLOK RCUBLOK RDEVBLOK' 00260000 EJECT 00261000 *********************************************************************** 00262000 * * 00263000 * 'ADSTOP' * 00264000 * * 00265000 *********************************************************************** 00266000 *. 00267000 * SUBROUTINE NAME - 00268000 * DMKCFDAD 00269000 * 00270000 * FUNCTION - 00271000 * TO STOP EXECUTION OF THE VIRTUAL MACHINE WHEN THE INSTRUCTION 00272000 * AT THE LOCATION SPECIFIED IS HIT. 00273000 * 00274000 * COMMAND FORMAT - 00275000 * +----------+------------+ 00276000 * | ADSTOP | LOCATION | 00277000 * | ADSTOP | OFF | 00278000 * +----------+------------+ 00279000 * 00280000 * OPERATION - 00281000 * 1. CALL DMKSCNFD TO LOCATE THE ARGUMENT. IF NONE FOUND, 00282000 * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFD026E AND EXIT. 00283000 * 2. IF 'OFF' IS SPECIFIED, SEE IF USER WANTS SVCS HANDLED 00284000 * BY VM ASSIST, AND IF SO, TURN ON VM ASSIST SVC HANDLING. 00285000 * GET THE BUFFER ADDRESS FOUND 00286000 * IN THE VMBLOK FROM THE PREVIOUS ADSTOP. THIS BUFFER 00287000 * CONTAINS THE INSTRUCTION AND ITS LOCATION THAT IS TO BE 00288000 * RESTORED. GO TO STEP 5. WHEN RETURN FROM STEP 5, CALL 00289000 * DMKFRET TO FRET THE BUFFER AND THEN EXIT. 00290000 * 3. IF NOT 'OFF', CALL DMKCVTHB TO CONVERT THE ADDRESS TO 00291000 * BINARY. IF CONVERT FAILS, SEND ERROR MESSAGE DMKCFD004E AND 00292000 * EXIT. IF GOOD, CHECK ADDRESS TO SEE IF WITHIN BOUNDS OF 00293000 * VIRTUAL STORAGE. IF NOT, CALL DMKERMSG TO SEND ERROR 00294000 * MESSAGE DMKCFD160E AND EXIT. IF GOOD, TURN OFF VM ASSIST 00295000 * SVC HANDLING (BECAUSE CP MUST HANDLE SVCS IN ORDER TO 00296000 * DO THE ADSTOP). THEN CHECK TO SEE IF ADDRESS IS 00297000 * IN A SHARED PAGE. IF IT IS , CALL DMKERMSG TO SEND ERROR 00298000 * MESSAGE DMKCFD161E AND EXIT. 00299000 * 4. IF PREVIOUS ADSTOP IS ACTIVE, GO TO STEP 5 TO RESTORE 00300000 * INSTRUCTION. WHEN RETURN FROM STEP 5, GO TO STEP 4A. IF 00301000 * NO PREVIOUS ADSTOP, CALL DMKFREE TO GET A BUFFER. 00302000 * 4A. SAVE THE INSTRUCTION AND INST. ADDRESS IN THE BUFFER. 00303000 * OVERLAY THE INSTRUCTION WITH AN SVC B3 AND EXIT. 00304000 * 5. TRANS IN THE ADSTOP LOCATION. RESTORE THE INTRUCTION 00305000 * WITH THE INSTRUCTION FOUND IN THE BUFFER AND RETURN. 00306000 * 00307000 * RESPONSES - 00308000 * 00309000 * ADDRESS STOP AT XXXXXX 00310000 * 00311000 * ERROR MESSAGES - 00312000 * DMKCFD004E INVALID HEXLOC - (HEXLOC) 00313000 * DMKCFD026E OPERAND MISSING OR INVALID 00314000 * DMKCFD160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00315000 * DMKCFD161E HEXLOC (HEXLOC) IN SHARED STORAGE 00316000 *. 00317000 EJECT 00318000 USING ADSTBLOK,R10 00319000 SPACE 00320000 DMKCFDAD RELOC SIMULATE ADDRESS STOP 00321000 CALL DMKSCNFD LOCATE ARGUMENT 00322000 BNZ CFD026 NO ARGUMENT 00323000 L R10,VMADSTOP LOAD ADDRESS OF ADSTOP BUFFER 00324000 STM R0,R1,SAVEWRK2 SAVE ADDRESS AND LENGTH OF ARG. 00325000 CL R0,F6 ARGUMENT OVER SIX CHARACTERS ??? 00326000 BH CFD004 BRANCH TO ERROR IF IT IS 00327000 LM R0,R1,SAVEWRK2 RESTORE REGISTERS 00328000 LR R2,R0 LENGTH TO GPR2 00329000 BCTR R2,0 MINUS ONE FOR 'EX' 00330000 EX R2,COMPOFF IS THIS AN 'OFF' REQUEST ??? 00331000 BE ADSTPOFF TAKE BRANCH IF IT IS 00332000 CALL DMKCVTHB CONVERT ADDRESS TO BINARY 00333000 BNZ CFD004 INVALID ADDRESS 00334000 CL R1,VMSIZE LOCATION WITHIN USER STORAGE ? 00335000 BNL CFD160 ADDRESS TOO HIGH 00336000 LR R8,R1 SAVE ADDRESS 00337000 OI VMMCR6,VMMSVC INDICATE MICROCDE NOT HANDLE SVCS@V201537 00338000 LTR R10,R10 IS THERE AN ADSTOP IN PROGRESS ?? 00339000 BZ CHEKSHR BRANCH IF NO 00340000 BAL R4,RESTINST YES - GO RESTORE INSTRUCTION 00341000 CHEKSHR LR R1,R8 LOAD VIRTUAL ADDRESS IN REG1 00342000 TRANS 2,1,OPT=(BRING,DEFER),ADEX=CFD164 GET PAGE @V304635 00343000 EX R1,TESTODD ADDRESS MUST BE EVEN @V304635 00344000 BNZ CFD004 ERROR IF ODD ADDRESS SPECIFIED. @V304635 00345000 LR R7,R2 SAVE REAL ADDRESS @V304635 00346000 LH R6,VMSHRSYS RUNNING ANY SHARED SYSTEM'S @V304635 00347000 LTR R6,R6 . . 00348000 BZ GETBFR BRANCH IF NO 00349000 SLR R0,R0 INDICATE ABLE TO STORE ANYWHERE @V304735 00350000 CALL DMKPSASC STORING INTO A SHARED PAGE? @V304735 00351000 BZ GETBFR NO - OK TO ALTER PAGE @V304735 00352000 LR R2,R8 GET VITURAL ADDRESS @VA12533 00352500 CALL DMKATSCF BUILD NON-SHARED PAGE TABLES @V60BC11 00353000 B CHEKSHR RE-ISSUE TRANS FOR PAGE @VA07408 00354200 GETBFR LTR R10,R10 DO WE ALREADY HAVE BUFFER ?? 00355000 BNZ SETSTOP BRANCH IF YES 00356000 LA R0,ADSTBFSZ SIZE OF BUFFER NEEDED 00357000 CALL DMKFREE GET BUFFER 00358000 LR R10,R1 ADDRESS OF ADSTOP BUFFER TO GPR10 00359000 SETSTOP ST R8,ADSTINAD SAVE INSRUCTION ADDRESS 00360000 MVC ADSTINST(2),0(R7) SAVE INSTRUCTION 00361000 MVC 0(2,R7),=XL2'0AB3' MOVE SVC B3 IN PLACE OF INST 00362000 MVC ADSTFLAG(2),ZEROES ZERO FLAG AREA 00363000 ST R10,VMADSTOP SAVE BUFFER ADDRESS IN VMBLOK 00364000 NORMEXIT EXIT RETURN 00365000 SPACE 4 00366000 ADSTPOFF LTR R10,R10 DO WE HAVE BUFFER 00367000 BZ NORMEXIT NO - TAKE BRANCH 00368000 TM VMESTAT,VMMICSVC USER RQST MICRO HANDLE SVCS?@V201537 00369000 BZ NOMICRO NO, LEAVE SVC BIT SET TO 1 @V201537 00370000 NI VMMCR6,X'FF'-VMMSVC YES, INDICATE MICRO DO SVCS @V201537 00371000 NOMICRO DS 0H @V201537 00372000 BAL R4,RESTINST RESTORE INSTRUCTION 00373000 LA R0,ADSTBFSZ SIZE OF BUFFER 00374000 LR R1,R10 ADDRESS OF BUFFER 00375000 CALL DMKFRET RETURN BUFFER TO FREE STORAGE 00376000 SR R10,R10 ZERO REG 00377000 ST R10,VMADSTOP CLEAR BUFFER ADDRESS 00378000 B NORMEXIT 00379000 SPACE 3 00380000 RESTINST L R1,ADSTINAD LOAD ADDRESS OF INSTRUCTION TO RESTORE 00381000 TRANS 2,1,OPT=(BRING,DEFER) BRING INST. INTO CORE 00382000 BNZR R4 RETURN IF PAGE NO-LONGER THERE @V304635 00383000 LH R15,ADSTINST GET INSTRUCTION TO RESTORE 00384000 CLC 0(2,R2),=XL2'0AB3' IS THE "SVC B3" STILL THERE ? 00385000 BNE RESTINX1 IF NOT, WE NEED AN EXTRA CHECK 00386000 STH R15,0(,R2) YES - RESTORE THE INSTRUCTION, AND 00387000 BR R4 RETURN 00388000 * 00389000 RESTINX1 CLI 0(R2),X'0A' IS THE "SVC" STILL THERE ? 00390000 BNE RESTINX2 NO - LEAVE WELL ENOUGH ALONE 00391000 STCM R15,B'0010',0(R2) YES - PUT BACK THE 1ST BYTE 00392000 RESTINX2 CLI 1(R2),X'B3' IS THE "B3" STILL THERE ? 00393000 BCR 7,R4 NO - RETURN TO CALLER. 00394000 STC R15,1(,R2) YES - PUT BACK THE 2ND BYTE 00395000 BR R4 AND RETURN TO CALLER. 00396000 DROP R10 00397000 SPACE 2 00398000 TESTODD TM F1+3,0 EXECUTED TO CHECK FOR ODD ADDRESS 00399000 COMPOFF CLC 0(0,R1),=C'OFF ' EXECUTED COMPARE 00400000 EJECT 00401000 CFD004 LM R0,R1,SAVEWRK2 LOAD ARGUMENT ADDRESS AND LENGTH 00402000 LA R2,4 ERROR CODE 00403000 B CALLERM . . . 00404000 SPACE 00405000 CFD021 LA R2,21 ERROR CODE 00406000 B NOVAR . . . 00407000 SPACE 00408000 CFD022 LA R2,22 ERROR CODE 00409000 B NOVAR . . . 00410000 SPACE 00411000 CFD1003 EQU * LATER HRC104DK 00411500 CFD026 LA R2,26 ERROR CODE 00412000 B NOVAR . . . 00413000 CFD040 LM R0,R1,SAVEWRK2 LOAD ADDRESS AND LENGTH 00414000 LA R2,40 ERROR CODE 00415000 B CALLERM 00416000 SPACE 00417000 CFD160 LM R0,R1,SAVEWRK2 ADDRESS AND LENGTH OF BAD ARGUMENT 00418000 LA R2,160 ERROR CODE 00419000 B CALLERM . . . 00420000 SPACE 1 00421000 CFD164 LA R2,164 DMKCFD164E ERROR @V304635 00422000 LM R0,R1,SAVEWRK2 ADDR. AND LENGTH OF MESSAGE @VM03009 00423000 B CALLERM @V304635 00424000 NOVAR SR R1,R1 ZERO PARM REG. 00425000 CALLERM ICM R0,14,MODID+3 INSERT MODULE ID 00426000 CALL DMKERMSG GO SEND ERROR MESSAGE 00427000 * 00428000 * CSM WILL RETURN DIRECTLY TO DMKCFM TO PROCESS NEXT COMMAND 00429000 * 00430000 EJECT 00431000 LTORG 00432000 EJECT 00433000 LOCMSG DSECT 00434000 VMBLKADR DS CL6 00435000 DS CL4 00436000 VMCHADR DS CL6 00437000 DS CL4 00438000 VMCUADR DS CL6 00439000 DS CL4 00440000 VMDEVADR DS CL6 00441000 DS CL4 00442000 LOCMSGSZ EQU (*-LOCMSG)/8 SIZE IN DOUBLE WORDS 00443000 SPACE 3 , HRC104DK 00443100 SYMMSG DSECT HRC104DK 00443200 SYMBOL DS CL8 HRC104DK 00443300 DS CL3 HRC104DK 00443400 SYMADR DS CL6 HRC104DK 00443500 SYMRES DS CL9 HRC104DK 00443600 SYMREAL DS CL9 ', REAL = ' HRC104DK 00443700 SYMRADR DS CL6 HRC104DK 00443800 SYMMSGSZ EQU (*-SYMMSG+7)/8 SIZE IN DOUBLE WORDS HRC104DK 00443900 EJECT 00444000 ADSTBLOK DSECT 00445000 ADSTINAD DS 1F ADDRESS OF INSTRUCTION 00446000 ADSTINST DS 1F INSRUCTION 00447000 ADSTFLAG DS 1H 00448000 DS 0D 00449000 ADSTBFSZ EQU (*-ADSTBLOK)/8 SIZE IN DOUBLE WORDS 00450000 EJECT 00451000 PSA , @V306638 00452000 COPY EQU @V306638 00453000 COPY RBLOKS @V306638 00454000 COPY CORE @V304735 00455000 COPY SAVE @V306638 00456000 COPY VBLOKS @V306638 00457000 COPY VMBLOK @V306638 00458000 END 00459000