ibm:vm370-lib:cp:dmkcfd.assemble_src
Table of Contents
DMKCFD Source
References
- Fixes Applied : 2
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC104DK]
Source Listing
- DMKCFD.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkcfd.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator