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 <VADDR> | 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 <BNE> 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