ibm:vm370-lib:cp:dmkdeh.assemble_src
Table of Contents
DMKDEH Source
References
- Fixes Applied : 0
- This Source Date : Friday, August 7, 1981
- Last Fix ID : [Unmodified]
Source Listing
- DMKDEH.ASSEMBLE.txt
- DEH TITLE 'DMKDEH (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 00002000
- COPY OPTIONS 00003000
- COPY LOCAL 00004000
- SPACE 2 00005000
- *. 00006000
- * MODULE NAME - 00007000
- * 00008000
- * DMKDEH 00009000
- * 00010000
- * CONTENTS - 00011000
- * 00012000
- * DMKDEHIN - 'DEFINE' A VIRTUAL CHANNEL OR VIRTUAL STORAGE 00013000
- *. 00014000
- SPACE 00015000
- DMKDEH CSECT 00016000
- SPACE 00017000
- DC CL8'DMKDEH' PAGEABLE MODULE IDENTIFIER 00018000
- SPACE 00019000
- USING SAVEAREA,R13 00020000
- USING DMKDEH,R12 00021000
- USING VMBLOK,R11 00022000
- USING PSA,0 00023000
- SPACE 2 00024000
- EXTRN DMKCVTDB,DMKCVTBD 00025000
- EXTRN DMKUDRFU,DMKUDRMD,DMKUDRRV 00026000
- EXTRN DMKCFPRR,DMKPGSPO,DMKBLDRL,DMKBLDRT 00027000
- EXTRN DMKERMSG 00028000
- EXTRN DMKQCNWT @VA01771 00029000
- EJECT 00030000
- *. 00031000
- * SUBROUTINE NAME - 00032000
- * 00033000
- * DMKDEHIN - 'DEFINE' (OR REDEFINE) A VIRTUAL CHANNEL/STORAGE 00034000
- * 00035000
- * FUNCTION - 00036000
- * 00037000
- * TO DYNAMICALLY ALTER OR AUGMENT THE VIRTUAL MACHINE 00038000
- * DEVICE CONFIGURATION OR STORAGE SIZE. 00039000
- * 00040000
- * COMMAND LINE FORMAT - 00041000
- * 00042000
- * +--------+---------------------------------------+ 00043000
- * | DEFINE | STORAGE <AS> NNNNNK | 00044000
- * | | STORAGE <AS> NNM | 00045000
- * | | | 00046000
- * | | CHANNELS <AS> <SEL|BMX> | 00047000
- * +--------+---------------------------------------+ 00048000
- * 00049000
- * ATTRIBUTES - 00050000
- * 00051000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00052000
- * 00053000
- * ENTRY CONDITIONS - 00054000
- * 00055000
- * GPR 0 = LENGTH OF ARGUMENT IN COMMAND LINE 00056000
- * GPR 1 = ADDRESS OF ARGUMENT 00057000
- * GPR 9 = ADDRESS OF COMMAND BUFFER 00058000
- * GPR 10 = DUMMY UDEVBLOK ADDRESS 00059000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00060000
- * GPR 12 = ADDRESS OF DMKDEHIN 00061000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00062000
- * 00063000
- * EXIT CONDITIONS - 00064000
- * 00065000
- * EXIT TO CALLER (DMKDEF) IF SUCCESSFUL, OR TO DMKERMSG WITH 00066000
- * ERROR-CODE (SEE ERROR MESSAGES) IF UNSUCCESSFUL. 00067000
- EJECT 00068000
- * CALLS TO OTHER ROUTINES - 00069000
- * 00070000
- * DMKCVTDB 00071000
- * DMKCVTBD 00072000
- * DMKERMSG 00073000
- * DMKUDRFU 00074000
- * DMKUDRRD 00075000
- * DMKUDRRV 00076000
- * DMKPGSPO 00077000
- * DMKCFPRR 00078000
- * DMKCFPRD 00079000
- * DMKBLDRL 00080000
- * DMKBLDRT 00081000
- * DMKQCNWT 00082000
- * DMKFREE 00083000
- * 00084000
- * EXTERNAL REFERENCES - 00085000
- * 00086000
- * NONE 00087000
- * 00088000
- * TABLES / WORK AREAS - 00089000
- * 00090000
- * NONE 00091000
- * 00092000
- * REGISTER USAGE - 00093000
- * 00094000
- * GPR 9 = ADDRESS OF COMMAND BUFFER 00095000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00096000
- * GPR 12 = BASE REGISTER 00097000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00098000
- * 00099000
- * GPRS 0-5 AND 14-15 ARE WORK REGISTERS. 00100000
- * 00101000
- * GPRS 6-8 AND 10 ARE NOT USED. 00102000
- * 00103000
- * NOTES - 00104000
- * 00105000
- * THIS MODULE WAS CREATED TO HOLD LOGIC THAT USED TO BE LOCATED 00106000
- * IN DMKDEF WHEN THAT MODULE OUTGREW A PAGE. THIS MODULE 00107000
- * ALWAYS EXITS BACK TO DMKDEF (ITS ONLY CALLER). 00108000
- * 00109000
- EJECT 00110000
- * OPERATION - 00111000
- * 00112000
- * STORAGE REDEFINED VIRTUAL STORAGE 00113000
- * STOR " " " 00114000
- * CHANNELS REDEFINES VIRTUAL CHANNELS 00115000
- * CHAN " " " 00116000
- * 1. FOR DEFINE STORAGE, AFTER THE USUAL CHECKS FOR COMMAND 00117000
- * VALIDITY, THE USER MACHINE BLOCK IN THE CP DIRECTORY FOR THE 00118000
- * USER IS CHECKED TO ENSURE THAT THE DESIRED STORAGE SIZE DOES 00119000
- * NOT EXCEED THE MAXIMUM STORAGE SIZE PERMITTED TO THE USER. 00120000
- * (IF TOO LARGE, ERROR MESSAGE AND CODE RETURNED). IF OK, THEN 00121000
- * ALL TABLES PERTAINING TO THE STORAGE PRESENTLY IN USE FOR THE 00122000
- * USER'S VIRTUAL MACHINE ARE RETURNED TO FREE STORAGE, AND NEW 00123000
- * SEGMENT, PAGE, AND SWAP TABLES ARE CREATED BASED ON THE 00124000
- * REQUESTED STORAGE SIZE. 00125000
- * 00126000
- * 2. FOR DEFINE CHANNELS, AFTER THE VALIDATION OF THE COMMAND, 00127000
- * DMKCFPRR IS CALLED TO RESET THE VIRTUAL MACHINE. THE VIRTUAL 00128000
- * MACHINES CONTROL BLOCKS (I/O) ARE THE SCANNED, AND THE VIRTUAL 00129000
- * CHANNELS ARE FLAGGED ACCORDING TO THE OPTION REQUESTED. ANY 00130000
- * VIRTUAL CHANNEL THAT HAS A CTCA ATTACHED TO IT WILL BE FLAGGED 00131000
- * AS BEING A SELECTOR CHANNEL. 00132000
- * 00133000
- * RESPONSES - 00134000
- * 00135000
- * 'STORAGE = NNNNNK' 00136000
- * 'CHANNELS = XXX' 00137000
- * 00138000
- * NOTE - NORMAL RESPONSES WILL BE SUPPRESSED IF USER ISSUED 00139000
- * "SET IMSG OFF" COMMAND. 00140000
- * 00141000
- * ERROR MESSAGES - 00142000
- * 00143000
- * DMKDEH025E STORAGE MISSING OR INVALID 00144000
- * DMKDEH026E OPERAND MISSING OR INVALID 00145000
- * DMKDEH092E DEV VADDR NOT DEFINED; TYPE VADDR ALREADY DEFINED 00146000
- * DMKDEH094E STORAGE EXCEEDS ALLOWED MAXIMUM 00147000
- *. 00148000
- EJECT 00149000
- DMKDEHIN RELOC , DEFINE OR RE-DEFINE VIRTUAL DEVICE 00150000
- USING DMKDEH,R12 00151000
- USING UDEVBLOK,R10 .... 00152000
- SPACE 00153000
- CLI UDEVTYPC,X'FF' IS IT 'DEFINE STORAGE' ? 00154000
- BE DEFCORE YES 00155000
- B DEFCHAN ONLY OTHER CHOICE IS DEFINE CHAN 00156000
- EJECT 00157000
- DEFCORE EQU * RE-DEFINE VIRTUAL MEMORY SIZE 00158000
- LR R2,R0 PARM LENGTH 00159000
- BCTR R2,0 ...MINUS ONE 00160000
- LA R3,0(R2,R1) LOOK FOR THE "K" 00161000
- LA R4,10(0) SHIFT COUNT FOR 'K' PARM 00162000
- CLI 0(R3),C'K' ...WHICH MUST BE THERE 00163000
- BE DEFCOREK YES - MULTIPLIER = 1024 BYTES 00164000
- LA R4,18(0) SHIFT COUNT FOR 'M' PARM 00165000
- CLI 0(R3),C'M' THIS IS THE OTHER CHOICE 00166000
- BNE INVCORE SORRY 00167000
- DEFCOREK EQU * 00168000
- LR R0,R2 COUNT OF PARM - "K" 00169000
- C R0,F5 PARM COUNT OVER 5 ? (00000K) 00170000
- BH INVCORE YES -- INVALID STORAGE VALUE 00171000
- CALL DMKCVTDB CONVERT STORAGE SIZE 00172000
- BNZ INVCORE 00173000
- LTR R1,R1 STORAGE VALUE OF ZERO ? 00174000
- BZ INVCORE YES - INVALID STORAGE VALUE 00175000
- CLI 0(R3),C'M' DEFINING BY MEG? 00176000
- BNE MUSTBEK @VA04509 00177000
- CL R1,F16 ASKING FOR MORE THAN 16 MEG? @VA04509 00178000
- BH INVCORE YES - CANT DO @VA04509 00179000
- B NOROUND @VA04509 00180000
- MUSTBEK CL R1,F8 AT LEAST MINIMUM 8K? @VA04509 00181000
- BL INVCORE NO 00182000
- CL R1,=F'16384' ASKING FOR MORE THAN 16 MEG? @VA04509 00183000
- BH INVCORE YES - CANT DO @VA04509 00184000
- LA R1,3(,R1) ROUND UP TO PAGE BOUNDARY 00185000
- SRL R1,2(0) ... 00186000
- NOROUND EQU * 00187000
- SLL R1,2(R4) 'K' = 1024 BYTES, 'M' = 1,048,576 BYTES 00188000
- ST R1,DEVADDR SAVE IT HERE FOR NOW 00189000
- CL R1,VMSTOR MAYBE I CAN GET AWAY WITH A MSG @VA05181 00190000
- BE STORMSG JUST NEEDS MSG @V408246 00191000
- BL SKIPDIR IF LESS, THEN NO NEED TO CHECK @V408246 00192000
- * DIRECTORY 00193000
- * SEE IF SPECIFIED SIZE EXCEEDS USER MAXIMUM 00194000
- LA R0,UDBFSIZE DIRECTORY BUFFER BLOCK 00195000
- CALL DMKFREE 00196000
- LR R2,R1 00197000
- USING UDBFBLOK,R2 00198000
- XC UDBFVADD(8),UDBFVADD CLEAR LAST DBL-WD 00199000
- LA R1,VMUSER POINT TO USERID 00200000
- LA R0,8 ...LENGTH 00201000
- CALL DMKUDRFU FIND HIS DIRECTORY 00202000
- LA R1,UDIRDISP-UDIRBLOK(,R2) POINT TO 'UDIRDISP' 00203000
- CALL DMKUDRMD READ NEXT BLOCK (UMACBLOK) @V407466 00204000
- L R4,UMACMCOR-UMACBLOK(,R2) GET MAXIMUM CORE SIZE 00205000
- DROP R2 00206000
- CALL DMKUDRRV RELEASE HIS DIRECTORY 00207000
- LR R1,R2 ADDRESS OF UDBFBLOK 00208000
- LA R0,UDBFSIZE ITS SIZE 00209000
- CALL DMKFRET GIVE IT BACK 00210000
- CL R4,DEVADDR CHECK AGAINST SPECIFIED SIZE 00211000
- BL EXCESIV HE WANTS TOO MUCH 00212000
- SKIPDIR EQU * @V304635 00213000
- SLR R2,R2 RELEASE ALL OF USERS STORAGE. @V304635 00214000
- CALL DMKCFPRR RESET THE VM @V304635 00215000
- OI VMQSTAT,VMINHMIG PREVET MIGRATION @V408246 00216000
- CALL DMKPGSPO,PARM=UNLOCK RELEASE ALL STORAGE @V304735 00217000
- L R1,VMSIZE GET OLD STORAGE SIZE @V304635 00218000
- SRL R1,12 RANGE OF STORAGE SIZE. @V304635 00219000
- BCTR R1,R0 MINUS 1 PAGE @V304635 00220000
- CALL DMKBLDRL,PARM=DELPAGES+DELSEGS RELEASE OLD .. @V304635 00221000
- L R1,DEVADDR NEW STORAGE SIZE @V304635 00222000
- ST R1,VMSIZE .... @V304635 00223000
- ST R1,VMSTOR SAVE MEMORY SIZE.. @V304635 00224000
- SRL R1,12 RANGE FOR 'DMKBLD' @V304635 00225000
- BCTR R1,R0 MINUS 1 PAGE. @V304635 00226000
- LA R2,NEWSEGS+VRALOC BUILD SEGEMNTS ONLY @V408246 00227000
- TM VMPSTAT,VMREAL V=R POSSIBLE ? @V408246 00228000
- BZ *+8 NO, R2 ALL SET @V408246 00229000
- LA R2,NEWPAGES(,R2) YES, BUILD ALL TABLES @V408246 00230000
- CALL DMKBLDRT @V408246 00231000
- NI VMQSTAT,255-VMINHMIG ALLOW MIGRATION @V408246 00232000
- * TYPE VERIFICATION MSG IF INFO MSGS NOT SUPPRESSED BY USER 00233000
- STORMSG EQU * @V2A3663 00234000
- TM VMMLVL2,VMMIMSG USER WANT THE MSG? @V2A3663 00235000
- BZ DEFEXIT NOPE @V2A3663 00236000
- MVI SAVEWRK2,X'40' CLEAR BUFFER 00237000
- MVC SAVEWRK2+1(31),SAVEWRK2 ... 00238000
- MVC SAVEWRK2(8),DEFLAST "STORAGE " 00239000
- MVI SAVEWRK4,C'=' ... 00240000
- L R1,VMSTOR NEW CORE SIZE @VA06246 00241000
- SRL R1,10(0) DIVIDE BY 1024 00242000
- CALL DMKCVTBD 00243000
- STC R0,SAVEWRK4+2 USE FIVE-DIGIT NUMBER 00244000
- STCM R1,B'1111',SAVEWRK4+3 ... 00245000
- MVI SAVEWRK5+3,C'K' ... 00246000
- LA R0,SAVEWRK6-SAVEWRK2 MESSAGE LENGTH 00247000
- LA R1,SAVEWRK2 MESSAGE ADDRESS @VM01072 00248000
- CALL DMKQCNWT,PARM=NORET GO GIVE HIM THE MESSAGE 00249000
- B DEFEXIT CLEAN UP AND BEAT IT 00250000
- EJECT 00251000
- DEFCHAN MVI DEFLAGS,X'00' CLEAR OUT FLAG BYTE @VM01072 00252000
- CL R0,F3 ARG = 3 BYTES LONG? @VM01072 00253000
- BNE INVTYPE NOPE, TOO BAD @VM01072 00254000
- CLC 0(3,R1),=C'SEL' REQUEST FOR SELECTOR CHANNEL @VM01072 00255000
- BNE *+8 NOPE, SKIP @VM01072 00256000
- MVI DEFLAGS,VCHSEL YUP, SET FOR SELECTOR @VM01072 00257000
- CLC 0(3,R1),=C'BMX' REQUEST FOR BLOCK MPX? @VM01072 00258000
- BNE *+8 NO - @VA01771 00259000
- MVI DEFLAGS,VCHBMX YES - FLAG AS SUCH. @VA01771 00260000
- CLI DEFLAGS,X'00' WAS IT SEL OR BMX ? @VA01771 00261000
- BE INVTYPE NO - SEND ERROR MESSAGE @VA01771 00262000
- CALL DMKCFPRR RESET THE VIRTUAL MACHINE. @VA01771 00263000
- NI VMFSTAT,X'FF'-VMFBMX TURN OFF BMX BIT @VA01771 00264000
- USING VCHBLOK,R6 @VA01771 00265000
- USING VCUBLOK,R7 @VA01771 00266000
- CLI DEFLAGS,VCHBMX BLOCK MULTIPLEXER CHANNEL @VA01771 00267000
- BNE *+8 NO @VA01771 00268000
- OI VMFSTAT,VMFBMX SET UP FOR QUERY COMMAND. @VA01771 00269000
- SLR R3,R3 CLEAR @VA01771 00270000
- SLR R1,R1 ZERO VMCHTBL INDEX REG. @VA01771 00271000
- LA R4,2 LOAD INDEX INCREMENT @VA01771 00272000
- LA R5,30 LOAD INDEX COMPARAND @VA01771 00273000
- DEFCH LH R6,VMCHTBL(R1) LOAD NEXT CHANNEL BLOK INDEX. @VA01771 00274000
- LTR R6,R6 DOES CHANNEL EXIST. @VA01771 00275000
- BM DEFXCH NO - INDEX TO NEXT ONE. @VA01771 00276000
- AL R6,VMCHSTRT GET ADDRESS OF CHANNEL BLOK @VA01771 00277000
- CH R3,VCHADD IS THIS CHANNEL ZERO ? @VA01771 00278000
- BE DEFXCH YES - GO GET NEXT CHANNEL BLOK. @VA01771 00279000
- MVC VCHTYPE,DEFLAGS SET IT PER DEFINE CMD.. @VA01771 00280000
- SLR R2,R2 ZERO VCHCUTBL INDEX @VA01771 00281000
- DEFCU LH R7,VCHCUTBL(R2) LOAD NEXT CU BLOK INDEX. @VA01771 00282000
- LTR R7,R7 DOES CONTROL UNIT EXIST. @VA01771 00283000
- BM DEFXCU NO - INDEX TO NEXT ONE. @VA01771 00284000
- AL R7,VMCUSTRT POINT TO VCUBLOK @VA01771 00285000
- TM VCUTYPE,VCUCTCA CHANNEL TO CHANNEL ADAPTER CU ? @VA01771 00286000
- BZ DEFXCU NO - GET NEXT CONTROL UNIT @VA01771 00287000
- MVI VCHTYPE,VCHSEL MARK CHANNEL AS SELECTOR. @VA01771 00288000
- B DEFXCH NOW GET NEXT CHANNEL TO PROCESS. @VA01771 00289000
- SPACE 1 00290000
- DEFXCU BXLE R2,R4,DEFCU BR. IF MORE CU ON THIS CHANNEL. @VA01771 00291000
- DEFXCH BXLE R1,R4,DEFCH BR. IF MORE CHANNELS ON THIS VM. @VA01771 00292000
- TM VMMLVL2,VMMIMSG USER WANT THE MSG?? @V2A3663 00293000
- BZ CHXIT NO @V2A3663 00294000
- MVC SAVEWRK2(14),=C'CHANNELS = BMX' ASSUME BMX @V2A3663 00295000
- TM VMFSTAT,VMFBMX ARE THEY BLOCK MULTIPLEXER ? @VA01771 00296000
- BO *+10 YES - PUT OUT RESPONSE @VA01771 00297000
- MVC SAVEWRK2+11(3),=C'SEL' NO - CHANGE TO SELECTOR @VA01771 00298000
- LA R0,14 MESSAGE LENGTH @VA01771 00299000
- LA R1,SAVEWRK2 SET BUFFER ADDRESS @VA01771 00300000
- CALL DMKQCNWT,PARM=NORET @VA01771 00301000
- CHXIT EXIT @V2A3663 00302000
- EJECT 00303000
- DEFEXIT EQU * EXIT WITH NO SPECIAL SETTINGS 00304000
- EXIT 00305000
- EJECT 00306000
- INVTYPE EQU * OPERAND MISSING OR INVALID 00307000
- LA R2,026(,0) MSG= DMKDEH026E 00308000
- B MSGONLY NO EXTRA DATA 00309000
- INVCORE EQU * STORAGE MISSING OR INVALID 00310000
- LA R2,025(,0) MSG= DMKDEH025E 00311000
- B MSGONLY NO EXTRA DATA 00312000
- EXCESIV EQU * STORAGE EXCEEDS ALLOWED MAXIMUM 00313000
- LA R2,094(,0) MSG= DMKDEH094E 00314000
- SPACE 00315000
- MSGONLY EQU * MSG WITHOUT VARIABLE FIELDS 00316000
- SLR R0,R0 00317000
- SLR R1,R1 00318000
- B *+8 SKIP OVER 'LA' FOR R1 00319000
- MSGSEND EQU * SEND ERROR MESSAGE 00320000
- LA R1,SAVEWRK2 VARIABLE DATA LOCATION 00321000
- MSGIDBLD EQU * BUILD MOD ID FOR MSG @V60B6B8 00322000
- ICM R0,B'1110',DMKDEH+3 MODULE IDENTIFIER 00323000
- CALL DMKERMSG BUILD + TYPE ERROR MESSAGE 00324000
- * "DMKERMSG" WILL NOT RETURN 00325000
- SPACE 2 00326000
- * BITS DEFINED FOR CALL TO DMKPGS 00327000
- UNLOCK EQU X'02' UNLOCK ANY 'LOCKED' PAGES @V304735 00328000
- SPACE 2 00329000
- DEFLAST DC C'STORAGE ' 00330000
- DEFENTS EQU *-DEFLAST LENGTH OF ONE ENTRY 00331000
- EJECT 00332000
- LTORG 00333000
- EJECT 00334000
- COPY SAVE 00335000
- SPACE 00336000
- * FIELDS DEFINED WITHIN THE SAVEAREA : 00337000
- * 00338000
- DEFLAGS EQU SAVEWRK1 INTERNAL FLAGS FOR 'DEFINE' 00339000
- DEVADDR EQU SAVEWRK2 DEVICE ADDRESS FOR RE-DEFINE 00340000
- * EQUATES DEFINING FIELDS WITHIN THE SAVE AREA 00341000
- ************************************************************ 00342000
- FIRSTADR EQU SAVEWRK2 @V60B6B8 00343000
- LASTADDR EQU SAVEWRK3 @V60B6B8 00344000
- CURRADDR EQU SAVEWRK4 @V60B6B8 00345000
- FIRSTBUF EQU SAVEWRK5 @V60B6B8 00346000
- CURRBUFF EQU SAVEWRK6 @V60B6B8 00347000
- RDEVADR1 EQU SAVEWRK7 @V60B6B8 00348000
- ADDR2 EQU SAVEWRK8 @V60B6B8 00349000
- SPACE 00350000
- ************************************************************ 00351000
- EJECT 00352000
- * 00353000
- EJECT 00354000
- COPY VMBLOK 00355000
- COPY VBLOKS 00356000
- COPY RBLOKS 00357000
- COPY IOBLOKS 00358000
- COPY UDIRECT 00359000
- COPY DEVTYPES 00360000
- COPY EQU 00361000
- PSA 00362000
- END DMKDEH 00363000
ibm/vm370-lib/cp/dmkdeh.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator