CDM TITLE 'DMKCDM (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
*. 00003000
* MODULE NAME - 00004000
* DMKCDM 00005000
* FUNCTION - 00006000
* TO EXECUTE THE DUMP AND DMCP COMMANDS. 00007000
* 00008000
* ATTRIBUTES - 00009000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00010000
* 00011000
* ENTRY POINTS - 00012000
* DMKCDMDM - TO DUMP REAL STORAGE TO THE SPOOLED PRINTER. 00013000
* DMKCDMDU - TO DUMP VIRTUAL STORAGE TO THE SPOOLED PRINTER. 00014000
* 00015000
* ENTRY CONDITIONS - 00016000
* GPR9 - ADDRESS OF THE COMMAND LINE. 00017000
* GPR11 - ADDRESS OF THE USERS VMBLOK. 00018000
* GPR12 - ADDRESS OF THE ENTRY POINT. 00019000
* GPR13 - ADDRESS OF THE STANDARD SAVE AREA. 00020000
* 00021000
* EXIT CONDITIONS - 00022000
* NORMAL - 00023000
* GPR2 = 0 00024000
* 00025000
* ERROR - 00026000
* GPR2 = ERROR MESSAGE CODE NUMBER 00027000
* 00028000
* CALLS TO OTHER ROUTINES - 00029000
* DMKSCNFD - TO LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE 00030000
* DMKCVTBD - CONVERT BINARY NUMBER TO DECIMAL 00031000
* DMKCVTBH - CONVERT BINARY NUMBER TO HEXADECIMAL 00032000
* DMKCVTDB - CONVERT DECIMAL NUMBER TO BINARY 00033000
* DMKCVTHB - CONVERT HEXADECIMAL NUMBER TO BINARY 00034000
* DMKCVTFP - CONVERT FLOATING POINT NUMBER TO PRINTABLE FORM 00035000
* DMKFREE - TO GET STORAGE FOR AN OUTPUT BUFFER 00036000
* DMKFRET - TO RETURN STORAGE TO THE SYSTEM 00037000
* DMKVATAB - TO MAINTAIN SHADOW PAGE AND SEGMENT TABLES 00038000
* DMKQCNWT - TO SEND MESSAGES TO THE TERMINAL 00039000
* DMKVSPRT - PRINT LINE OF DUMP TO THE SPOOL PRINTER 00040000
* DMKPTRAN - TO BRING USER PAGE INTO STORAGE 00041000
* DMKERMSG - TO TYPE ERROR MESSAGES 00042000
* 00043000
* TABLES/WORKAREAS 00044000
* ECBLOK 00045000
* PSA 00046000
* SAVEAREA 00047000
* VMBLOK 00048000
* OUTPUT BUFFER CONTAINS CONTROL INFORMATION 00049000
* USED BY THE DUMP ROUTINES. THE FORMAT AND DESCRIPTION 00050000
* OF THE BUFFER ARE IN A DSECT BELOW. 00051000
* 00052000
* REGISTER USAGE - 00053000
* GPR0 - FIELD LENGTH REGISTER 00054000
* GPR1 - POINTER TO NEXT FIELD IN BUFFER AND REAL STORAGE ADDR. 00055000
* GPR2 - PARAMETER REGISTER FOR CALLED ROUTINES. 00056000
* GPR3 - ADDRESS OF THE PAGE TABLE 00057000
* GPR4 - BAL REGISTER (3RD LEVEL) 00058000
* GPR5 - POINTER TO THE NEXT ARGUMENT IN THE INPUT BUFFER 00059000
* GPR6 - LENGTH ON NEXT ARGUMENT IN THE INPUT BUFFER 00060000
* GPR7 - BAL REGISTER (1ST LEVEL) 00061000
* GPR8 - BAL REGISTER (2ND LEVEL) 00062000
* GPR9 - ADDRESS OF THE COMMAND LINE 00063000
* GPR10 - BASE REGISTER FOR THE OUTPUT BUFFER 00064000
* GPR11 - ADDRESS OF THE VMBLOK 00065000
* GPR12 - BASE REGISTER FOR THIS PROGRAM 00066000
* GPR13 - ADDRESS OF THE STANDARD SAVEAREA 00067000
* GPR14 - LINKAGE REGISTER 00068000
* GPR15 - LINKAGE REGISTER 00069000
* 00070000
* NOTES - 00071000
* NONE 00072000
* 00073000
* OPERATION - 00074000
* THE COMMAND ROUTINES ARE CALLED BY THE COMMAND 00075000
* ANALYSIS ROUTINE DMKCFM. 00076000
* THE FORMAT AND DESCRIPTION OF EACH COMMAND IS LISTED IN 00077000
* SEPARATE PROLOGUES BELOW. 00078000
*. 00079000
EJECT 00080000
ISEQ 73,80 00081000
COPY OPTIONS 00082000
EJECT 00083000
COPY LOCAL 00084000
EJECT 00085000
PUNCH 'SPB' 00086000
SPACE 2 00087000
DMKCDM START 00088000
SPACE 00089000
MODID DC CL8'DMKCDM' 00090000
USING PSA,R0 00091000
USING DISPBFR,R10 **** THIS COVERS AN INTERNAL DSECT **** 00092000
USING VMBLOK,R11 00093000
USING SAVEAREA,R13 00094000
SPACE 3 00095000
EXTRN DMKERMSG 00096000
EXTRN DMKVSPRT @V200820 00097000
EXTRN DMKCVTBD,DMKCVTBH,DMKCVTDB,DMKCVTHB,DMKCVTFP 00098000
EXTRN DMKSYSRM 00099000
EXTRN DMKSCNFD 00100000
EXTRN DMKDMPTR 00101000
EXTRN DMKVATAB @V200820 00102000
EXTRN DMKSYSAP @V4075A0 00103000
EXTRN DMKVMASH @VA08317 00103400
EJECT 00104000
* EQUATES FOR SAVEWRK1 ON DUMP OR DISPLAY 00105000
DISPC EQU X'00' 00106000
DUMPC EQU X'80' 00107000
REALC EQU X'00' 00108000
VIRTC EQU X'40' 00109000
RANGE EQU X'20' 00110000
DISLEN EQU X'10' LENGTH RANGE INDICATION @V200930 00111000
HEXLOC EQU X'08' INDICATES A LOCATION REQUEST 00112000
BYPGPR EQU X'02' BYPAS DUMP REGS ON NEXT ARG @V200930 00113000
PROC1 EQU X'01' INDICATE AT LEAST ONE OPERAND PROCESSED 00114000
SPACE 00115000
* EQUATES FOR SAVEWRK1+1 ON DUMP OR DISPLAY 00116000
CONVLEN EQU X'80' INDICATE TO CONVERT LENGTH @V200930 00117000
MPREF EQU X'08' @V4075A0 00118000
NPREF EQU X'04' @V4075A0 00119000
CHEX EQU X'01' 00120000
SPACE 2 00121000
********************************************************************* 00122000
* SAVEWRK1 SWITCH USAGE DURING DUMP OR DISPLAY 00123000
* SAVEWRK1 00124000
* X'80' - 0 = DISPLAY, 1 = DUMP 00125000
* X'40' - 0 = REAL MACHINE, 1 = VIRTUAL MACHINE 00126000
* X'20' - 0 = ONLY ONE ADDRESS, 1 = RANGE OF ADDRESSES 00127000
* X'10' - 0 = NO LENGTH, 1 = LENGTH RANGE 00128000
* 00129000
* 00130000
* 00131000
* SAVEWRK1+1 00132000
* X'80' - FIELD CONTAINS AN ARGUMENT 00133000
* X'40' - LOGICAL CARRIAGE RETURN FOUND 00134000
* X'08' - 1= TREAT ADDRESS AS MAIN PREFIXED @V4075A0 00135000
* X'04' - 1= TREAT ADDRESS AS ATTACHED PROC PREFIXED @V4075A0 00136000
* X'01' - HEXIDECIMAL FIELD CONVERSION 00137000
********************************************************************9 00138000
EJECT 00139000
*********************************************************************** 00140000
* * 00141000
* 'DUMP' * 00142000
* * 00143000
*********************************************************************** 00144000
*. 00145000
* SUBROUTINE NAME - 00146000
* DMKCDMDU 00147000
* FUNCTION - 00148000
* 00149000
* TO DUMP TO THE SPOOL PRINTER THE CONTENTS OF THE SPECIFIED 00150000
* LOCATIONS ALONG WITH THE REGISTERS,PSW,AND STORAGE KEYS. 00151000
* 00152000
* COMMAND FORMAT - 00153000
* +--------+------------------------------------------+ 00154000
* | DUMP | <M|N>LHEXLOC1 <<-> > | 00155000
* | DU | <M|N>THEXLOC1 <<:> > <*USERID> | 00156000
* | | <M|N>HEXLOC1 <<-HEXLOC2> > | 00157000
* | | 0 <<:HEXLOC2> > | 00158000
* | | <<-END> > | 00159000
* | | <<:END> > | 00160000
* | | <<.> > | 00161000
* | | <<.BYTECOUNT > | 00162000
* | | <<.END> > | 00163000
* +--------+------------------------------------------+ 00164000
* 00165000
* THE FOLLOWING EXAMPLES WILL PRODUCE ONE FULL DUMP EACH 00166000
* 00167000
* DU L DU T DU - DU : DU . 00168000
* DU . DU L- DU T- DU L: DU T: 00169000
* DU L. DU T. DU 0- DU 0: DU 0. 00170000
* DU 0:END DU L.END DU T.END DU 0.END DU T:END 00171000
* DU 0:END DU L.END DU T.END DU 0.END 00172000
* 00173000
* 00174000
* THE FOLLOWING WILL PRODUCE 3 FULL DUMPS. 00175000
* DU T . L 00176000
* 00177000
* OPERATION - 00178000
* 1. SET A BIT IN SAVEWRK1 TO INDICATE THAT A DUMP OF VIRTUAL 00179000
* STORAGE, REGISTERS, PSW, AND STORAGE KEYS. 00180000
* CONTROL IS THEN PASSED THRU THE REGISTER, PSW, AND DUMP 00181000
* SUBROUTINES AS DESCRIBED IN THE PROLOGUE FOR DISPLAY. 00182000
* 00183000
* RESPONSES - 00184000
* 00185000
* COMMAND COMPLETE 00186000
* 00187000
* ERROR MESSAGES - 00188000
* DMKCDM003E INVALID OPTION - (OPTION) 00189000
* DMKCDM004E INVALID HEXLOC - (HEXLOC) 00190000
* DMKCDM009E INVALID RANGE - (RANGE) 00191000
* DMKCDM033E HEXLOC MISSING OR INVALID 00192000
* DMKCDM060E DUMP FAILED; VIRTUAL PRINTER UNAVAILABLE 00193000
* DMKCDM061E DUMP FAILED; VIRTUAL PRINTER ERROR 00194000
* DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00195000
*. 00196000
DMKCDMDU RELOC 00197000
TM VMOSTAT,VMSHR IS USER RUNNING SHARED SYSTEM ? @VA08317 00197100
BNO NOCHANGE NO, CONTINUE DUMP PROCESSING @VA08317 00197200
C R11,LASTUSER DID USER CHANGE ? @VA08317 00197300
BNE NOCHANGE YES, CONTINUE DUMP PROCESSING @VA08317 00197400
CALL DMKVMASH PROCESS ANY CHANGED SHARED PAGES @VA08317 00197500
NOCHANGE EQU * CONTINUE DUMP PROCESSING @VA08317 00197600
MVI SAVEWRK1,DUMPC+VIRTC REMEMBER TO DUMP VIRTUAL STORAGE 00198000
B DISGETB 00199000
EJECT 00200000
*********************************************************************** 00201000
* * 00202000
* 'DUMP' * 00203000
* * 00204000
*********************************************************************** 00205000
*. 00206000
* SUBROUTINE NAME - 00207000
* DMKCDMDU 00208000
* FUNCTION - 00209000
* TO DUMP TO THE VIRTUAL PRINTER VIRTUAL STORAGE LOCATIONS, 00210000
* REGISTERS AND PSW 00211000
* 00212000
* OPERATION - 00213000
* 00214000
* THE FOLLOWING DESCRIBES THE OPERATION OF DUMP AND DMCP 00215000
* 00216000
* 1. CALL DMKFREE TO OBTAIN A BUFFER. THIS BUFFER WILL CONTAIN 00217000
* THE DATA,FLAGS,ADDRESS INCREMENT COUNTS, AND POINTERS USED 00218000
* IN CONSTRUCTING A LINE OF OUTPUT. 00219000
* 2. SET UP THE NUMBER OF CHARACTERS PER LINE 00220000
* 3. GO TO STEP 20 TO OUTPUT A LINE AND REINITIALIZE THE BUFFER. 00221000
* 4. CALL DMKSCNFD TO LOCATE THE TYPE OF REQUEST (E.G., M,N,L,T) 00222000
* IF NO ARGUMENTS AT ALL HAVE BEEN PROCESSED, CALL DMKERMSG 00223000
* TO SEND ERROR MESSAGE DMKCDM033E 00224000
* 5. CHECK THE ARGUMENT FOR A VALID TYPE. IF NONE FOUND 00225000
* ASSUME THE SAME TYPE AS THE LAST VALID ARGUMENT. 00226000
* GO TO THE SUBROUTINE TO HANDLE THE PARTICULAR TYPE. 00227000
* 6. DUMPPSW - PLACES THE PSW INTO THE DUMP 00228000
* 7. DUMPGPR - SET THE BEGINNING ADDRESS TO 0, ENDING ADDRESS 00229000
* TO 15 AND CONTINUE. 00230000
* 8A. DISCOMM-THIS IS A SUBROUTINE USED BY SEVERAL OTHERS TO 00231000
* SET UP THE DATA IN THE BUFFER. FIRST CHECK IF AT THE 00232000
* BEGINNING OF THE BUFFER. IF NOT GO TO STEP 10B. IF SO, 00233000
* GO TO STEP 19 TO BUILD A LINE HEADER. THEN CONTINUE. 00234000
* 10B. CONVERT THE NEXT PIECE OF DATA TO BE DISPLAYED VIA A CALL 00235000
* TO DMKCVTBH. PLACE THIS DATA IN THE BUFFER. ADJUST THE 00236000
* BUFFER POINTER AND BUFFER COUNT. THEN IF THE BUFFER IS 00237000
* FULL, GO TO STEP 20 TO OUTPUT THE BUFFER AND REINITIALIZE 00238000
* IT. IF THE BUFFER IS NOT FULL, GO TO STEP 17 TO GET THE 00239000
* NEXT ADDRESS TO DISPLAY. 00240000
* 11. DUMPFPR SET UP BEGINNING AND ENDING ADDRESSES 00241000
* TO INCLUDE ALL FLOATING POINT REGISTERS. 00242000
* THEN VIA CALLS TO DMKCVTBH, CONVERT THE VIRTUAL FLOATING 00243000
* POINT REGISTERS FOUND IN THE VMBLOK TO PRINTABLE 'HEX' AND 00244000
* ALSO CALL DMKCVTFP TO GET THE FLOATING POINT FORMAT. PLACE 00245000
* THIS IN THE BUFFER AND GO TO STEP 20 TO OUTPUT. 00246000
* 12. DUMPECR DEFAULT ADDRESSES TO INCLUDE ALL THE 00247000
* CONTROL REGISTERS. LOAD THE VALUE OF THE NEXT CONTROL 00248000
* REGISTER AND GO TO STEP 10B TO FORMAT AND PROCESS. 00249000
* WHEN THE NEXT REGISTER IS NEEDED CONTROL WILL BE RETURNED 00250000
* TO THIS ROUTINE TO GET THE DATA. 00251000
* 13.DUMPLOC-SET A FLAG TO INDICATE A HEXLOC 00252000
* REQUEST, ZERO SAVEWRK2. THIS WILL BE USED FOR INDEXING 00253000
* THRU THE DUMP FUNCTIONS. GO TO STEP 18 00254000
* TO OUTPUT THE DUMPID (IF ANY). THEN GO TO STEP 10 TO 00255000
* START PROCESSING THE REGISTERS. 00256000
* 13A. SET UP THE MAXIMUM ENDING ADDRESS FOR EITHER THE VIRTUAL 00257000
* MACHINE OR REAL MACHINE DEPENDING ON REQUEST. THEN GO TO 00258000
* STEP 16 TO INITIALIZE BEGINNING AND ENDING ADDRESSES. 00259000
* IF A VIRTUAL REQUEST, TRANS IN THE NEXT ADDRESS TO BE 00260000
* DUMPED. IF A REAL REQUEST, JUST PICK UP THE NEXT REAL 00261000
* ADDRESS. IN AN AP SYSTEM THE ADDRESS IS TRANSLATED 00262000
* BASED UPON THE M/N SPECIFICATION AND WHICH PROCESSOR WE 00263000
* ON. THE PURPOSE IS TO REACH THE PROPER PAGE GIVEN THE 00264000
* VALUES OF THE TWO PREFIX REGISTERS. 00265000
* GO TO STEP 10A. TO FORMAT THE OUTPUT. CONTROL WILL BE 00266000
* RETURNED TO THIS STEP FOR EACH ADDRESS UNTIL - 00267000
* ALL THE REQUESTED LOCATIONS HAVE BEEN DUMPED. 00268000
* IN AN AP SYSTEM THE PARAMETER PREFIX 'M' CAUSES THE 00269000
* ADDRESS TO BE TREATED AS SEEN THROUGH THE MAIN PROCESSOR 00270000
* PREFIX REGISTER. THE LETTER 'N' DESIGNATES THE ATTACHED 00271000
* PROCESSOR. OTHERWISE THE ADDRESS IS TREATED AS AN ABSOLUT 00272000
* ADDRESS. 'N' IS VALID ONLY WHEN THE ATTACHED PROCESSOR IS 00273000
* IN OPERATION. 'M' IS VALID IF THE SYSTEM HAS BEEN GEN'D 00274000
* FOR AP OPERATION 00275000
* 16. DISINIT-THIS IS THE SUBROUTINE USED TO INITIALIZE THE 00276000
* RANGE OF ADDRESSES FOR LOC,REGISTER, AND KEY REQUESTS. 00277000
* FIRST CHECK IF ANY ADDRESS HAS BEEN SPECIFIED. IF NOT, 00278000
* SET THE BEGINNING ADDRESS TO ZERO AND RETURN. IF HAVE AN 00279000
* ADDRESS, SCAN THRU THE ARGUMENT CHECKING FOR ':','_', OR 00280000
* BLANK. IF BLANK IS FOUND GO TO STEP 16A. IF ':' OR '-' 00281000
* AND THE ENDING FIELD IS IN THE SAME ARGUMENT, COMPUTE THE 00282000
* LENGTHS OF THE BEGINNING AND ENDING FIELDS AND GO TO 00283000
* STEP 16B. 00284000
* IF THE DELIMITER IS NOT : OR - THEN TEST FOR A DOT '.' 00285000
* IF IT IS A DOT CHECK NEXT ARGUMENT. IF IT IS BLANK 00286000
* THEN GO TO STEP 16C FOR DEFUALT END, ELSE CONVERT 00287000
* THE FIELD AS A HEX LENGTH AND SAVE TO CALCULATE 00288000
* THE END ADDRESS. 00289000
* 16A. - CALL DMKSCNFD TO SEE IF HAVE A ':' OR '-' AS THE NEXT 00290000
* ARGUMENT. IF THERE IS AND THE 'HEXLOC2' IS IN THE 00291000
* SAME ARGUMENT, GO TO STEP 16B. IF HAVE ':' OR'-' WITH 00292000
* NOTHING ELSE, CALL DMKSCNFD TO PICK UP NEXT ARGUMENT. 00293000
* IF NONE FOUND, GO TO STEP 16C. IF HAVE ONE, CONTINUE. 00294000
* IF THE DELIMITER WAS A DOT '.' THEN THE FIELD IS A 00295000
* LENGTH SPECIFICATION. CONVERT IT FROM HEX AND GIVE AN 00296000
* ERROR MESSAGE IF THAT FAILS. IF THE CONVERTION 00297000
* IS GOOD SAVE THE VALUE TO CALCULATE THE END ADDRESS. 00298000
* 16B. CHECK IF THE ENDING ADDRESS IS THE WORD 'END'. IF SO GO 00299000
* TO STEP 16C. IF A 'HEXLOC', CALL DMKCVTHB TO CONVERT 00300000
* TO BINARY. IF THE CONVERT FAILS, CALL DMKERMSG TO SEND 00301000
* ERROR MESSAGE DMKCDM004E. IF THE CONVERT IS OK, USE THE 00302000
* NUMBER TO INITIALIZE THE ENDING ADDRESS AND CONTINUE. 00303000
* 16C. CALL DMKCVTHB TO CONVERT THE BEGINNING ADDRESS TO BINARY. 00304000
* IF THE CONVERT FAILS, CALL DMKERMSG TO SEND ERROR 00305000
* MESSAGE DMKCDM004E. IF CONVERT IS GOOD, INITIALIZE THE 00306000
* BEGINNING ADDRESS WITH THIS NUMBER. THEN CHECK IF 00307000
* BEGINNING ADDRESS IS LARGER THAN THE ENDING NUMBER. IF 00308000
* IT IS , CALL DMKERMSG TO SEND ERROR MESSAGE DMKCDM009E. 00309000
* IF THE ADDRESS IS LARGER THAN THE MAXIMUM AND IT IS 00310000
* A HEXLOC, CALL DMKERM TO SEND ERROR MESSAGE DMKCDM160E. 00311000
* IF IT IS A REGISTER, SEND ERROR MESSAGE DMKCDM010E. IF 00312000
* ADDRESS IS OK - RETURN. 00313000
* 17. DISNEXTA-THIS IS THE SUBROUTINE TO GET THE NEXT ADDRESS. 00314000
* FIRST - ADD THE INCREMENT VALUE TO THE PRESENT ADDRESS. 00315000
* IF THE RESULT IS LARGER THAN THE ENDING ADDRESS,GO TO 00316000
* STEP 17A. IF NOT STORE THE NEW ADDRESS IN THE BUFFER AND 00317000
* RETURN. 00318000
* 17A. GO TO STEP 20 TO OUTPUT THE LINE. THEN 00319000
* IF IT IS 'DMCP', EXIT. IF IT IS DUMP VIRTUAL, LOAD THE 00320000
* INDEX VALUE FROM SAVEWRK2. BUMP IT AND STORE BACK FOR 00321000
* THE NEXT TIME. USE THE ORIGINAL VALUE TO INDEX INTO A 00322000
* BRANCH TABLE WHICH WILL GO TO THE NEXT PART 00323000
* OF THE DUMP FUNCTION. 00324000
* 18. DISDMPID-THIS SUBROUTINE IS USED TO OUTPUT THE DUMPID. 00325000
* FIRST SAVE THE 'BUFNXT' AND 'BUFCNT' OUT OF THE COMMAND 00326000
* LINE BUFFER. THEN VIA CALLS TO DMKSCNFD SCAN DOWN THE 00327000
* COMMAND LINE SEARCHING FOR A DUMPID. IF NONE IS FOUND, 00328000
* RESTORE THE 'BUFNXT' AND 'BUFCNT' IN THE COMMAND 00329000
* LINE AND RETURN. IF A DUMPID IS FOUND, PLACE IT IN THE 00330000
* OUTPUT BUFFER AND GO TO STEP 20 TO OUTPUT. THEN RESTORE 00331000
* THE 'BUFNXT' AND 'BUFCNT' AND RETURN. 00332000
* 19. DISHEAD-THIS SUBROUTINE FORMATS THE LINE HEADER AND 00333000
* TRAILER. FIRST CHECK IF THIS IS A LOCATION REQUEST. IF IT 00334000
* IS, GO TO STEP 19A. IF NOT, CALL DMKCVTBD TO CONVERT THE 00335000
* REGISTER NUMBER TO DECIMAL. SET REGISTER NUMBER IN THE 00336000
* BUFFER AND RETURN. 00337000
* 19A. IF THIS IS THE FIRST LINE, GO TO STEP 19C. IF LINES ARE 00338000
* ALREADY BEING SUPPRESSED, GO TO STEP 19D. IF NEITHER OF 00339000
* THESE, CHECK IF THIS LINE IS THE SAME AS THE LAST. IF NOT 00340000
* GO TO STEP 19C. IF IT IS, SET UP THE SUPPRESSED LINES 00341000
* MESSAGE. 00342000
* 19B. DUMP THE ADDRESS TO THE NEXT LINE. CALL DMKCVTBH 00343000
* TO CONVERT THIS ADDRESS TO HEX AND INSERT THIS ADDRESS 00344000
* INTO THE BUFFER. THEN GO TO STEP 17 TO CONTINUE. 00345000
* 19C. CALL DMKCVTBH TO CONVERT THE ADDRESS TO HEX. 00346000
* TRANSLATE THE LINE TO EBCDIC AND RETURN 00347000
* 19D. IF THIS LINE IS THE SAME AS THE LAST ONE, GO TO STEP 19B. 00348000
* IF NOT, GO TO STEP 20 TO OUTPUT THE SUPPRESSED LINES 00349000
* MESSAGE. THEN GO TO STEP 19C. 00350000
* 20. DISWRITE-THIS SUBROUTINE WILL OUTPUT A LINE OF DATA TO 00351000
* EITHER A TERMINAL(DISPLAY) OR THE PRINTER(DUMP). IF THE 00352000
* BYTE COUNT FOR THE DATA IN THE BUFFER IS ZERO, GO TO 00353000
* STEP 20B. IF THE OUTPUT IS FOR A PRINTER, GO TO STEP 00354000
* 20A. ELSE SET UP FOR A TERMINAL AND CALL DMKQCNWT TO SEND 00355000
* THE LINE OF DATA. THEN GO TO STEP 20B. 00356000
* 20A. SET UP FOR A PRINTER AND CALL DMKVSPRT TO OUTPUT THE 00357000
* LINE TO THE USERS VIRTUAL PRINTER. 00358000
* 20B. RESET THE BUFFER POINTER TO THE START OF THE BUFFER. 00359000
* BLANK OUT THE DATA PORTION OF THE BUFFER AND RETURN. 00360000
* 00361000
* RESPONSES - 00362000
* 00363000
* THE FOLLOWING ARE TYPICAL RESPONSES TO THE VARIOUS 00364000
* DUMP COMMANDS: 00365000
* 00366000
* HEXLOCS - 00367000
* XXXXXX = WORD1 WORD2 WORD3 WORD4 * EBCIDIC TRANSLATION * 00368000
* 00369000
* 00370000
* ERROR MESSAGES - 00371000
* DMKCDM004E INVALID HEXLOC - (HEXLOC) 00372000
* DMKCDM009E INVALID RANGE - (RANGE) 00373000
* DMKCDM010E INVALID REGISTER - (REGISTER) 00374000
* DMKCDM026E OPERAND MISSING OR INVALID 00375000
* DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00376000
*. 00377000
EJECT 00378000
*********************************************************************** 00379000
* * 00380000
* 'DMCP' * 00381000
* * 00382000
*********************************************************************** 00383000
*. 00384000
* SUBROUTINE NAME - 00385000
* DMKCDMDM 00386000
* 00387000
* FUNCTION - 00388000
* TO DUMP TO THE VIRTUAL SPOOL PRINTER THE CONTENTS OF 00389000
* THE REAL STORAGE LOCATIONS SPECIFIED. 00390000
* 00391000
* COMMAND FORMAT - 00392000
* +--------+------------------------------------------+ 00393000
* | DMCP | <M|N>LHEXLOC1 <<-> > | 00394000
* | DMCP | <M|N>LHEXLOC1 <<:> > <*DUMPID> | 00395000
* | | <M|N>HEXLOC1 <<-HEXLOC2> > | 00396000
* | | 0 <<:HEXLOC2> > | 00397000
* | | <<-END> > | 00398000
* | | <<:END> > | 00399000
* | | <<.> > | 00400000
* | | <<.BYTECOUNT>> | 00401000
* | | <<.END> > | 00402000
* +--------+------------------------------------------+ 00403000
* 00404000
* OPERATION - 00405000
* 1. SET A BIT IN SAVEWRK1 TO INDICATE THAT THIS IS A DUMP 00406000
* REAL STORAGE REQUEST.THEN A BRANCH IS MADE TO COMMON ROUTIN 00407000
* DESCRIBED IN THE PROLOGUE FOR DISPLAY. 00408000
* 00409000
* RESPONSES - 00410000
* 00411000
* COMMAND COMPLETE 00412000
* 00413000
* ERROR MESSAGES - 00414000
* DMKCDM003E INVALID OPTION - (OPTION) 00415000
* DMKCDM004E INVALID HEXLOC - (HEXLOC) 00416000
* DMKCDM009E INVALID RANGE - (RANGE) 00417000
* DMKCDM033E HEXLOC MISSING OR INVALID 00418000
* DMKCDM060E DUMP FAILED; VIRTUAL PRINTER UNAVAILABLE 00419000
* DMKCDM061E DUMP FAILED; VIRTUAL PRINTER ERROR 00420000
* DMKCDM160E HEXLOC (HEXLOC) EXCEEDS STORAGE 00421000
*. 00422000
SPACE 4 00423000
DMKCDMDM RELOC 00424000
MVI SAVEWRK1,DUMPC+REALC REMEMBER TO DUMP REAL STORAGE 00425000
B DISGETB 00426000
EJECT 00427000
DISGETB LA R0,BFRSIZE LOAD SIZE OF BUFFER 00428000
CALL DMKFREE GET OUTPUT BUFFER 00429000
STCM R1,7,SAVEWRK4+1 SAVE ADDRESS OF BUFFER 00430000
STC R0,SAVEWRK4 AND THE LENGTH IN DOUBLE WORDS 00431000
LR R10,R1 LOAD BASE REGISTER 00432000
MVI SAVEWRK1+1,X'00' CLEAR @V200930 00433000
MVI SAVEWRK1+2,X'00' CLEAR LAST REQ @V200930 00434000
XC BFRCNT(8),BFRCNT ZERO COUNT AND FLAGS 00435000
SPACE 00436000
DISGPRT OI BUFLAG,PRINTER INDICATE OUTPUT GOES TO THE PRINTER 00437000
MVC BUFMAX,=H'92' SET MAX BYTE COUNT 00438000
MVC BUFTRC,=H'32' SET TRANSLATE COUNT 00439000
SPACE 00440000
DISGETN BAL R4,DISWRITE WRITE OUT BUFFER & REINITIALIZE 00441000
CALL DMKSCNFD GET NEXT OPERAND @VM08515 00442000
BNZ DISEND NO MORE ARGUMENTS 00443000
OI SAVEWRK1,PROC1 FLAG AS PROCESS AT LEAST ONE 00444000
TM SAVEWRK1,BYPGPR TEST FOR NEXT DUMP ARG @V200930 00445000
BZ DISRSTFL NO, START FIELD @V200930 00446000
CLI 0(R1),C'*' IS THIS THE DUMP ID ?? @V200930 00447000
BE DISEND YES, ALL DONE @V200930 00448000
SPACE 00449000
DISRSTFL STM R0,R1,SAVEWRK8 SAVE ARG. LENGTH AND ADDRESS 00450000
MVC FLDLEN(4),F6 SET MAX FIELD LENGTH @VM08524 00451000
NI SAVEWRK1,X'FF'-HEXLOC RESET FLAG @V200930 00452000
LR R5,R1 STARTING ADDRESS TO R5 00453000
LR R6,R0 LENGTH TO R6 00454000
* 00455000
* GPR 5 CONTAINS THE ADDRESS OF THE FIRST BYTE OF THE FIELD. 00456000
* GPR 6 CONTAINS THE LENGTH (IN BYTES) OF THE FIELD. 00457000
* 00458000
TM VMRSTAT,VMLOGOFF GONE INTO LOGOFF WHILE OUT? 00459000
BO EXIT YES, GET OUT 00460000
NI BUFLAG,PRINTER RESET ALL BUT PRINTER FLAG 00461000
OI BUFLAG,TRANSLAT INDICATE TRANSLATE LINE TO EBCDIC 00462000
MVC BFRCNT,F1+2 SET BYTE COUNT = 1 @V4075A0 00463000
BAL R4,DISWRITE PRINT A BLANK LINE 00464000
DISGTYPE EQU * 00465000
CLI 0(R5),C'L' LOCATION REQUEST ? 00466000
BE DUMPTEST YES 00467000
CLI 0(R5),C'T' STORAGE LOCATION(S) + EBCDIC ? 00468000
BE DUMPTEST YES 00469000
CLI 0(R5),C'N' IF USER SPECIFIED M|N, @V4075A0 00470000
BE ITSN @V4075A0 00471000
CLI 0(R5),C'M' @V4075A0 00472000
BE ITSM CHECK VALIDITY AND SET FLAGS @V4075A0 00473000
CLI SAVEWRK1+2,X'00' PREVIOUS REQ VALID ?? @V200930 00474000
BNE SETR5 YES, DEFAULT TO LAST REQ @V200930 00475000
DEFAULTL EQU * @V4075A0 00476000
MVI SAVEWRK1+2,C'L' DEFAULT TO LOCATION @V200930 00477000
SETR5 BCTR R5,R0 BACKUP 1 POSITION @V200930 00478000
LA R6,1(R6) UP COUNT BY ONE @V200930 00479000
MVC 0(1,R5),SAVEWRK1+2 SET REQ CHARACTER @V200930 00480000
B DISGTYPE ANALYSE TYPE @V200930 00481000
SPACE 4 00482000
DISEND EQU * 00483000
TM SAVEWRK1,PROC1 ANY PROCESSING DONE ??? 00484000
BZ CDM033 NO - GO SEND ERR MSG @V4075A0 00485000
B CONFMSG YES, JUST EXIT @V4075A0 00486000
SPACE 4 00487000
ITSM L R15,=A(DMKSYSAP) CHECK USER SPEC @V4075A0 00488000
CLI 0(R15),C'Y' IF NOT GEN'D FOR AP, @V4075A0 00489000
BNE CDM026 M,N NOT ACCEPTABLE @V4075A0 00490000
OI SAVEWRK1+1,MPREF USER SPECIFIED 'M' @V4M0120 00491000
MNCOMM TM SAVEWRK1,VIRTC M,N ONLY FOR CP STORAGE @V4075A0 00492000
BO CDM026 ERROR IF VIRTUAL DIS/DUMP @V4075A0 00493000
LA R5,1(R5) POINT TO NEXT CHAR IN PARM @V4075A0 00494000
BCT R6,DISGTYPE REDUCE COUNT & RESCAN PARM @V4075A0 00495000
B DEFAULTL NO MORE CHARS, DEFAULT TO 'L'@V4075A0 00496000
SPACE 2 @V4075A0 00497000
ITSN TM APSTAT1,APUOPER 'N' IS NOT VALID WHEN THE @V4075A0 00498000
BNO CDM026 ATTACHED PROCESSOR NOT UP @V4075A0 00499000
OI SAVEWRK1+1,NPREF USER SPECIFIED 'N' @V4075A0 00500000
B MNCOMM @V4075A0 00501000
SPACE 2 @V4075A0 00502000
EJECT 00503000
* 00504000
* THE FOLLOWING POINT DUMPS THE PSW 00505000
* 00506000
DUMPPSW MVC BUFBUF(5),CPSWEQ PUT IN 'PSW =' @V4075A0 00507000
L R1,VMPSW LOAD 1ST HALF OF VIRTUAL PSW 00508000
TM VMESTAT,VMEXTCM IN EXTENDED-MODE? 00509000
BO *+8 YES - DISPLAY ENTIRE PSW 00510000
N R1,=XL4'FFFF0000' ZERO INTERUPTION CODE 00511000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00512000
STCM R0,B'1111',BUFBUF+6 STORE IN 1ST QUARTER PSW @V4075A0 00513000
STCM R1,B'1111',BUFBUF+10 THEN 2ND QUARTER @V4075A0 00514000
L R1,VMPSW+4 LOAD 2ND HALF OF VIRTUAL PSW 00515000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00516000
STCM R0,B'1111',BUFBUF+15 3RD QUARTER OF PSW @V4075A0 00517000
STCM R1,B'1111',BUFBUF+19 FINAL QUARTER @V4075A0 00518000
MVC BFRCNT,=H'23' SET LINE LENGTH 00519000
B DUMPCHEK GO PRINT LINE AND CONTINUE 00520000
EJECT 00521000
* 00522000
* DUMP THE GENERAL PURPOSE REGISTERS 00523000
* 00524000
DUMPGPR MVC IDCHAR,=C'GPR' SAVE IDENTIFICATION CHARACTERS 00525000
LA R1,15 SET DEFAULT END REGISTER @V4075A0 00526000
ST R1,ENDADD INTO ENDING CONTROL FIELD @V4075A0 00527000
ST R1,ENDMAX AND MAXIMUM END FIELD @V4075A0 00528000
MVC INCRMT(2),F1+2 SET ADDRESS INCREMENT 00529000
MVC FLDLEN(4),F2 SET MAX FIELD LENGTH @VM08524 00530000
SR R1,R1 SIMULATE DISINIT DEFAULT 00531000
ST R1,NXTADD SET NEXT ADDRESS TO ZERO @V4075A0 00532000
LA R7,GPRRET SET UP RETURN FOR OUTPUT LOOP 00533000
GPRRET SLA R1,2 CONVERT TO FULL WORD DISPLACEMENT 00534000
L R3,VMGPRS(R1) LOAD VALUE IN REGISTER 00535000
SPACE 2 00536000
DISCOMM CL R10,BUFPNT IS POINTER AT BEGINNING OF BUFFER ? 00537000
BNE DISCOMMC BRANCH IF NO 00538000
L R1,NXTADD LOAD DATA ADDRESS 00539000
BAL R8,DISHEAD YES - BUILD LINE HEADER 00540000
DISCOMMC LR R1,R3 LOAD DATA TO BE DISPLAYED 00541000
CALL DMKCVTBH CONVERT DATA TO PRINTABLE CHARACTERS 00542000
STM R0,R1,FIELD STORE IN WORK AREA 00543000
L R1,BUFPNT LOAD BUFFER POINTER 00544000
MVC 0(8,R1),FIELD MOVE DATA 00545000
LA R1,10(R1) BUMP POINTER BY 10 00546000
LH R14,BFRCNT GET BUFFER COUNT 00547000
LA R14,10(R14) UP THE COUNT 00548000
CH R14,=H'50' AT THE MID POINT ?? 00549000
BNE NOSHFT NO, CONT 00550000
LA R14,2(R14) TWO MORE 00551000
LA R1,2(R1) TWO MORE 00552000
NOSHFT ST R1,BUFPNT SET NEW POINTER 00553000
STH R14,BFRCNT SET NEW COUNT 00554000
CH R14,BUFMAX AT END OF BUFFER ?? 00555000
BL DISNEXTA NO - CONTINUE DISPLAY 00556000
SH R14,F2+2 ADJUST LENGTH 00557000
STH R14,BFRCNT SET COUNT 00558000
LA R4,DISNEXTA LOAD RETURN ADDRESS 00559000
B DISWRITE YES - OUTPUT LINE 00560000
EJECT 00561000
* 00562000
* ENTER HERE WHEN PROCESSING DUMP FUNCTION 00563000
* 00564000
DUMPFPR MVC IDCHAR,=C'FPR' SAVE IDENTIFICATION CHARACTERS 00565000
LA R1,6 BIGGEST FPR @V4075A0 00566000
ST R1,ENDADD SET DEFAULT END REGISTER @V4075A0 00567000
ST R1,ENDMAX SET MAXIMUM END REGISTER @V4075A0 00568000
MVC INCRMT(2),F2+2 SET ADDR INCREMENT 00569000
MVC FLDLEN(4),F1 SET MAX FIELD LENGTH @VM08524 00570000
SR R1,R1 SIMULATE DISINIT DEFAULT 00571000
ST R1,NXTADD SET NEXT ADDRESS TO ZERO @V4075A0 00572000
LA R7,FPRRET SET UP RETURN 00573000
FPRRET BAL R8,DISHEAD BUILD LINE HEADER 00574000
L R1,NXTADD RELOAD REGISTER NUMBER 00575000
SLA R1,2 CONVERT TO DOUBLE WORD BISPLACEMENT 00576000
LA R2,VMFPRS(R1) POINT TO VIRTUAL FPR 00577000
L R1,0(R2) LOAD 1ST HALF OF VIRTUAL REGISTER 00578000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00579000
STCM R0,B'1111',BUFBUF+10 @V4075A0 00580000
STCM R1,B'1111',BUFBUF+14 @V4075A0 00581000
L R1,4(R2) LOAD 2ND HALF OF VIRTUAL REGISTER 00582000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00583000
STCM R0,B'1111',BUFBUF+18 @V4075A0 00584000
STCM R1,B'1111',BUFBUF+22 @V4075A0 00585000
LA R1,BUFBUF+30 LOAD OUTPUT POINTER 00586000
CALL DMKCVTFP CONVERT TO PRINTABLE FLOATING OINT 00587000
MVC BFRCNT,=H'54' SET LINE LENGTH 00588000
LA R4,DISNEXTA LOAD RETURN ADDRESS 00589000
B DISWRITE OUTPUT LINE 00590000
EJECT 00591000
* 00592000
* ENTER HERE WHEN DUMPING CONTROL REGISTERS 00593000
* 00594000
DUMPECR MVC IDCHAR,=C'ECR' SAVE IDENTIFICATION CHARACTERS 00595000
MVC INCRMT,F1+2 SET BYTE COUNT = 1 @V4075A0 00596000
LA R1,15 DEFAULT END REG = 15 @VA07527 00597100
ST R1,ENDADD DEFAULT END REG @V4075A0 00598000
ST R1,ENDMAX SAVE MAXIMUM REG ADDRESS @V4075A0 00599000
MVC FLDLEN(4),F2 SET MAX FIELD LENGTH @VM08524 00600000
SR R1,R1 SIMULATE DISINIT DEFAULT 00601000
MVC NXTADD(4),ZEROES SET NEXT ADDRESS TO ZERO 00602000
LA R7,CRRET SET UP RETURN 00603000
CRRET EQU * 00604000
TM VMPSTAT,VMV370R IS THIS A VIRTUAL 370 ??? 00605000
BZ DISECR0 NO- DISPLAY CREG 0 ONLY 00606000
SLA R1,2 CONVERT TO FULL WORD DISPLACMENT 00607000
L R14,VMECEXT LOAD VMBLOK EXTENTION ADDRESS 00608000
USING ECBLOK,R14 00609000
L R3,EXTCR0(R1) LOAD VALUE IN REGISTER 00610000
DROP R14 00611000
B DISCOMM PUT IN BUFFER & DISPLAY 00612000
DISECR0 EQU * DISPLAY ONLY C-REG 0 00613000
SLR R1,R1 C-REG 0 00614000
ST R1,ENDADD ...ONLY 00615000
ST R1,NXTADD ... 00616000
LA R7,DUMPCHEK RETURN ADDRESS 00617000
L R3,VMVCR0 DATA TO BE DISPLAYED 00618000
B DISCOMM PUT IN BUFFER + DISPLAY 00619000
EJECT 00620000
* 00621000
* DUMP STORAGE 00622000
* 00623000
DUMPTEST OI SAVEWRK1,HEXLOC INDICATE A LOCATION REQUEST 00624000
MVI SAVEWRK1+2,C'L' DEFAULT TO LOC @V200930 00625000
DMPTST DS 0H @V200930 00626000
TM SAVEWRK1,VIRTC DISPLAY VIRTUAL STORAGE ? 00627000
BZ DISLOCR BRANCH IF NO - REAL STORAGE 00628000
L R2,VMSIZE LOAD VIRTUAL MACHINE SIZE 00629000
DISLOCS BCTR R2,0 -1 @VM08524 00630000
ST R2,TENDADD SAVE MAX ADDRESS @VM08524 00631000
ST R2,ENDMAX .. @VM08524 00632000
S R2,F3 SUBTRACT 3 @VA03720 00633000
ST R2,ENDADD SET DEFAULT ENDING ADDRESS 00634000
OI SAVEWRK1+1,CHEX HEX ADDRESS CONVERT @V200930 00635000
MVC INCRMT(2),F4+2 SET WORD INCREMENT @V200930 00636000
BAL R7,DISINIT INITIALIZE BEGINNING & ENDING ADDRESSES 00637000
NI SAVEWRK1+1,255-CHEX TURN OFF HEX CONVERSION SWITCH 00638000
BAL R7,DISDMPID GET AND PRINT DUMP ID IF ANY @V200930 00639000
L R0,ENDADD GET END ADDRESS @V200930 00640000
L R1,NXTADD GET NEXT ADDRESS @V200930 00641000
STM R0,R1,SAVEWRK8 SAVE FOR AFTER DUMP REGS @V200930 00642000
SR R2,R2 CLEAR FOR INDEX @V200930 00643000
ST R2,SAVEWRK2 INDEX THROUGH DUMP FUNCTIONS @V200930 00644000
TM SAVEWRK1,VIRTC DUMP VIRTUAL ?? @V200930 00645000
BO DUMPSTRT START DUMP OUTPUT @V200930 00646000
OI SAVEWRK1,BYPGPR INDICATE START FIELD FOUND @VM08525 00647000
DISLOC OI BUFLAG,TRANSLAT TRANSLATE HEX DATA FOR DUMP @V200930 00648000
LM R0,R1,SAVEWRK8 GET END AND START VALUES @V200930 00649000
ST R0,ENDADD SET END ADDRESS @V200930 00650000
ST R1,NXTADD SET START ADDRESS @V200930 00651000
DISLOCD MVC INCRMT(2),F4+2 SET WORD INCREMENT @V200930 00652000
OI BUFLAG,FIRSTL FLAG FIRST LINE @V200930 00653000
MVC IDCHAR,CLOC 'LOC' ID FOR DATA @V4075A0 00654000
L R1,ENDADD GET END ADDRESS 00655000
LH R0,BUFTRC GET TRANSLATE COUNT 00656000
BCTR R0,R0 DECREMENT BY 1 00657000
OR R1,R0 ALIGN TO END 00658000
ST R1,ENDADD SET NEW END 00659000
L R1,NXTADD GET START ADDRESS 00660000
LH R0,BUFTRC LOAD TRANSLATE COUNT 00661000
LCR R0,R0 LOAD ITS COMPLEMENT 00662000
NR R1,R0 TRUNCATE TO 16 OR 32 BYTE BOUNDARY 00663000
ST R1,NXTADD STORE NEW BEGINNING ADDRESS 00664000
DISLOCA LA R7,DISLOCA+4 RESET RETURN ADDRESS 00665000
LR R2,R1 LOAD ADDRESS TO BE DISPLAYED 00666000
TM SAVEWRK1,VIRTC DISPLAY VIRTUAL STORAGE ? 00667000
BZ PREFLOC NO, REAL, MAY HAVE TO RECOMP ADDR@V4075A0 00668000
TRANS 2,1,OPT=(BRING,DEFER) GET USER PAGE ADDRESS 00669000
DISLOCL L R3,0(R2) LOAD WORD TO BE DISPLAYED 00670000
BZ DISCOMM PUT DATA INTO BUFFER & DISPLAY @V304635 00671000
OI BUFLAG,INVLD INDICATE INVALID PAGE @V304635 00672000
BAL R4,DISWRITE OUTPUT LINE @V304635 00673000
L R1,NXTADD CONVERT ADDRESS TO PRINTABLE @V304635 00674000
CALL DMKCVTBH @V304635 00675000
STCM R0,B'0011',BUFBUF MOVE BEGINNING ADDRESS @V4075A0 00676000
STCM R1,B'1111',BUFBUF+2 TO OUTPUT BUFFER @V4075A0 00677000
MVC BUFBUF+7(2),=C'TO' @V304635 00678000
MVC BUFBUF+19(23),=C'NON-ADDRESSABLE STORAGE' @V304635 00679000
MVC BFRCNT,=AL2(19+23) SET BYTE COUNT @V304635 00680000
L R1,NXTADD RELOAD ADDRESS @V304635 00681000
NXTINVLD AL R1,F4096 BUMP TO NEXT PAGE ADDRESS @V304635 00682000
N R1,XPAGNUM DROP DISPLACEMENT @V304635 00683000
ST R1,NXTADD SAVE IT AS CURRENT ADDRESS @V304635 00684000
CALL DMKCVTBH CONVERT IT TO HEX PRINTABLE @V304635 00685000
STCM R0,B'1111',BUFBUF+10 PUT ENDING ADDRESS @V4075A0 00686000
STCM R1,B'1111',BUFBUF+12 INTO OUTPUT BUFFER @V4075A0 00687000
L R1,NXTADD RESTORE CURRENT ADDRESS @V304635 00688000
CL R1,VMSIZE STILL WITHIN VM STORAGE SIZE @V304635 00689000
BNL GETOUT IF NOT - GET OUT @V304635 00690000
LCTL C1,C1,VMSEG GET SEGMENT TABLE @V304635 00691000
LRA R0,0(,R1) EXAMINE NEXT PAGE @V304635 00692000
BC 8+2,NXTINV1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00693000
CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00694000
BC 2,NXTINVLD ADDRESSING ERROR @V408246 00695000
NXTINV1 DS 0H @V408246 00696000
CL R1,ENDADD AT END OF DISPLAY ? @V304635 00697000
BNL GETOUT IF YES - FINISH UP @V304635 00698000
BAL R4,DISWRITE NOW DISPLAY THIS LINE @V304635 00699000
BAL R7,DISNCOMM IF DUMPING DISPLAY RESPONSE @VA04637 00700000
B DISLOCA LOAD UP THE DATA @V304635 00701000
GETOUT BAL R4,DISWRITE DISPLAY THE LINE AND FRET THE @V304635 00702000
* BUFFER 00703000
B DUMPCHEK CHECK FOR DUMP FUNCTION @V304635 00704000
SPACE 00705000
DISLOCR L R2,=A(DMKSYSRM) GET REAL MACHINE SIZE 00706000
L R2,0(R2) .. 00707000
B DISLOCS 00708000
SPACE 3 00709000
PREFLOC EQU * 00710000
L R15,=A(DMKSYSAP) SEE WHAT USER PUT IN @V4075A0 00711000
CLI 0(R15),C'Y' THE SYSCOR MACRO @V4075A0 00712000
BNE FETCHRL AP OPTION, WE CHECK AND@V4075A0 00713000
L R0,XPAGNUM @V4075A0 00714000
TM SAVEWRK1+1,MPREF+NPREF PERHAPS RECOMPUTE THE @V4075A0 00715000
BZ ABSPEC EFFECTIVE ADDRESS @V4075A0 00716000
TM SAVEWRK1+1,NPREF DID USER SAY 'M' OR 'N' @V4075A0 00717000
BO RWEN GO FIX UP FOR 'N' SPECIFIED @V4075A0 00718000
RWEM TM APSTAT1,PROCIO HE SAID 'M', ARE WE 'M' ? @V4075A0 00719000
BO FETCHRL YES, DO NOT RECOMPUTE ADDRES@V4075A0 00720000
PFIXCOMP NR R0,R1 GET PAGE NUMBER @V4075A0 00721000
BZ ADDPREFB OTHER PROCESSOR'S PSA. POINT 2 IT@V4075A0 00722000
C R0,PREFIXB ABSOLUTE 0 IN OTHER PROCESSOR'S @V4075A0 00723000
BNE ISITPRFA NO. GO SEE IF IT IS OUR PSA! @V4075A0 00724000
GETABS0 S R1,PREFIXB YES, POINT TO ABSOLUTE 0 VIA OUR @V4075A0 00725000
ADDPREFA A R1,PREFIXA PREFIX REGISTER @V4075A0 00726000
B FETCHRL @V4075A0 00727000
SPACE 2 @V4075A0 00728000
ADDPREFB A R1,PREFIXB POINT TO OTHER PROCESSOR PSA @V4075A0 00729000
B FETCHRL @V4075A0 00730000
SPACE 2 @V4075A0 00731000
RWEN TM APSTAT1,PROCIO USER SAID 'N'. ARE WE 'N' ? @V4075A0 00732000
BNO FETCHRL YES @V4075A0 00733000
B PFIXCOMP NO. SEE ABOUT RECOMPUTING @V4075A0 00734000
SPACE 2 @V4075A0 00735000
ABSPEC NR R0,R1 ABSOLUTE 0 ? @V4075A0 00736000
BZ ADDPREFA YES, UNDO EFFECT OF PREFIX REG @V4075A0 00737000
ISITPRFA C R0,PREFIXA OUR PSA ? @V4075A0 00738000
BNE FETCHRL NO @V4075A0 00739000
SUBPREFA S R1,PREFIXA YES, UNDO OUR PREFIX REG @V4075A0 00740000
FETCHRL L R3,0(R1) FETCH THE DATA WORD ! @V4075A0 00741000
B DISCOMM PUT DATA INTO BUFFER & SHOW IT @V4075A0 00742000
EJECT 00743000
* 00744000
* DUMP STORAGE KEY 00745000
* 00746000
DUMPKEY OI SAVEWRK1+1,CHEX TURN ON HEX CONVERSION SWITCH 00747000
OI SAVEWRK1,HEXLOC FLAG AS BEING HEXLOC REQUEST 00748000
OI BUFLAG,FIRSTL TURN ON FIRST LINE SWITCH 00749000
MVC IDCHAR,KEYEQ SAVE IDENTIFICATION CHARACTERS 00750000
LA R15,2048 LOAD ADDRESS INCREMENT @VA03720 00751000
STH R15,INCRMT SET INCREMENT VALUE 00752000
L R2,VMSIZE LOAD VIRTUAL MACHINE SIZE 00753000
BCTR R2,0 MAKE IT LAST ADDRESS @VM08524 00754000
ST R2,TENDADD SAVE END ADDRESS @VM08524 00755000
ST R2,ENDMAX SET MAXIMUM ADDRESS @VM08524 00756000
S R2,=F'2047' BACK UP TO LAST PAGE ADDR @VM08854 00757000
ST R2,ENDADD SET DEFAULT ENDING ADDRESS 00758000
SR R1,R1 SIMULATE DISINIT DEFAULT 00759000
ST R1,NXTADD SET START ADDRESS TO ZERO 00760000
LA R7,KEYRET SET UP RETURN 00761000
KEYRET NI SAVEWRK1+1,255-CHEX TURN OFF HEX CONVERSION SWITCH 00762000
LA R15,HAVEKEY SET RETURN ADDRESS @VM08553 00763000
GETKEY EQU * HERE TO CALCULATE KEY VALUES @VM08553 00764000
ST R15,SAVEWRK5 SAVE RETURN ADDR @VM08553 00765000
LR R14,R1 LOAD CURRENT ADDRESS 00766000
L R3,VMSEG OBTAIN STO @V408246 00767000
SRDL R14,16 GET SEGMENT NUMBER 00768000
SLL R14,2 MULTIPLY BY 4 00769000
LA R3,0(R14,R3) INDEX TO STE FOR THIS SEGMENT @V408246 00770000
TM 3(R3),1 IS THE STE INVALID? @V408246 00771000
BZ VLDKEY NO, PNTR ALL RIGHT @V408246 00772000
LR R0,R15 SAVE 2ND PART @V408246 00773000
TRANS 2,1,OPT=(DEFER) LET PTR CHECK ON SEGMENT @V408246 00774000
LR R15,R0 RESTORE 2ND PART @V408246 00775000
TM 3(R3),1 DID PTR CLEAR UP PAGE TABLE @V408246 00776000
* POINTER? 00777000
BZ VLDKEY NO, RETURN ZERO KEY @V408246 00778000
L R1,FFS INDICATE MINUS IF NON-ADDRESSABLE@V304635 00779000
B NOKEY PROCESS NON-ADDRESSABLE KEY @V304635 00780000
VLDKEY EQU * HERE FOR ADDRESSABLE STORAGE @V304635 00781000
L R3,0(,R3) GET PAGE TABLE POINTER @V408246 00782000
LA R2,16*2+8(,R3) GET SWAPTABLE ORIGIN @V408246 00783000
SR R14,R14 ZERO WORK REGISTER 00784000
SLDL R14,4 GET PAGE NUMBER 00785000
SLL R14,2 MULTIPLY BY 8 AND 00786000
SLDL R14,1 ADD 1 IF 2ND HALF OF PAGE 00787000
SR R1,R1 ZERO REGISTER 00788000
IC R1,2(R14,R2) INSERT STORAGE KEY 00789000
SRDL R14,1 GET PAGE NUMBER X 2 00790000
SRL R14,1 .. 00791000
LA R3,0(R14,R3) LOAD PAGE TABLE ENTRY ADDRESS 00792000
SR R2,R2 CLEAR FOR ISK (OR LACK OF IT) @VM08553 00793000
TM 1(R3),X'08' IS THE PAGE IN STORAGE ? 00794000
BO GOTPART BRANCH IF NO @VM08553 00795000
LH R14,0(,R3) LOAD REAL PAGE ADDRESS 00796000
SRL R14,4 .. 00797000
SLDL R14,12 ADD DISPLACEMENT ADDRESS 00798000
ISK R2,R14 GET THE REAL STORAGE KEY 00799000
GOTPART TM VMOSTAT,VMSHR IS THIS A SHARED SYSTEM? @VA01666 00800000
BZ *+8 NOPE, SKIP @VA01666 00801000
N R2,=A(X'0E') SHUT OFF PHONEY KEY @VA01666 00802000
OR R1,R2 PUT REAL AND VIRT TOGETHER @VA01666 00803000
LA R3,X'FE' SET FOR ECMODE @VA01666 00804000
TM VMPSTAT,VMV370R DOES THIS MACHINE HAVE EC? @VA01666 00805000
BO *+8 YES, MASK OK @VA01666 00806000
LA R3,X'F8' SET MASK FOR BC TYPE MACHINE @VA01666 00807000
NR R1,R3 SHUT OFF WHATEVER IS NECESSARY. @VA01666 00808000
NOKEY L R15,SAVEWRK5 RESTORE RETURN ADDRESS @V304635 00809000
BR R15 RETURN @VM08553 00810000
HAVEKEY EQU * @VM08553 00811000
TM BUFLAG,FIRSTL IS THIS THE FIRST LINE ? 00812000
BO DISK1STL BRANCH IF YES 00813000
CL R1,LNSAVE SAME AS LAST KEY ? 00814000
BE DISKBUMP BRANCH IF YES 00815000
BAL R4,DISWRITE OUTPUT PREVIOUS LINE 00816000
DISK1STL NI BUFLAG,NFIRSTL TURN OFF IST LINE SWITCH 00817000
MVC BUFBUF+18(5),KEYEQ MOVE 'KEY =' TO BUFFER 00818000
ST R1,LNSAVE SAVE KEY 00819000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00820000
STH R1,BUFBUF+24 STORE KEY IN BUFFER 00821000
LA R1,26 STANDARD LINE LENGTH @V304635 00822000
CLI LNSAVE,X'FF' IS IT NON-ADDRESSABLE STORAGE ? @V304635 00823000
BNE SETBUFLG NO - SET UP BUFFER LENGTH @V304635 00824000
MVC BUFBUF+18(23),=C'NON-ADDRESSABLE STORAGE' @V304635 00825000
LA R1,15(,R1) LENGTH-EN MESSAGE LINE @V304635 00826000
SETBUFLG STH R1,BFRCNT SET LINE LENGTH. @V304635 00827000
L R1,NXTADD LOAD BEGINNING ADDRESS 00828000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00829000
STCM R0,B'0011',BUFBUF MOVE IT TO @V4075A0 00830000
STCM R1,B'1111',BUFBUF+2 OUTPUT BUFFER @V4075A0 00831000
MVC BUFBUF+7(2),=C'TO' 00832000
DISKBUMP L R1,NXTADD LOAD CURRENT ADDRESS 00833000
LA R1,2047(R1) ADD 2047 00834000
CALL DMKCVTBH CONVERT TO PRINTABLE CHARACTERS 00835000
STM R0,R1,FIELD STORE IN WORK AREA 00836000
MVC BUFBUF+10(6),FIELD+2 MOVE TO BUFFER 00837000
B DISNEXTA GET NEXT ADDRESS 00838000
EJECT 00839000
* THE FOLLOWING TWO SUBROUTINES ARE USED TO INITIALIZE AND 00840000
* CONTROL THE DUMPING OF A RANGE OF ADDRESSES. REGISTER 7 IS 00841000
* LOADED BY A BAL TO DISINIT FROM THE VARIOUS DUMP ROUTINES. 00842000
* IT IS LATER USED BY DISNEXTA TO RETURN TO THE ROUTINE THAT 00843000
* LAST CALLED DISINIT TO DISPLAY THE NEXT ADDRESS. 00844000
* 00845000
* INITIALIZE BEGINNING AND ENDING ADDRESSES SUBROUTINE 00846000
* 00847000
DISINIT EQU * 00848000
MVC TENDADD(4),ENDMAX SET UP TRUE END DEFAULT @VM08524 00849000
NI SAVEWRK1,X'FF'-RANGE-DISLEN RESET FLAGS @V200930 00850000
LA R1,1(,R5) BUMP PAST TYPE CODE 00851000
CH R6,F1+2 ANY ADDRESS SPECIFIED ???? 00852000
BH DISISCAN BRANCH IF YES 00853000
SPACE 00854000
OI SAVEWRK1,RANGE INDICATE RANGE OF OPERANDS @VM08515 00855000
B DISIBLNK GO SET DEFAULTS 00856000
SPACE 00857000
* NOW CHECK FOR A COLON OR HYPHEN 00858000
SPACE 00859000
DISISCAN EQU * 00860000
LR R14,R6 LENGTH TO R14 00861000
BCTR R14,0 MINUS ONE FOR TYPE CODE BYPASS 00862000
DISICOLN CLI 0(R1),C':' CHECK FOR A COLON 00863000
BE DISIHYPH BRANCH IF YES 00864000
CLI 0(R1),C'-' HYPHEN ???? 00865000
BE DISIHYPH YES --- 00866000
CLI 0(R1),C'.' IS IT A LENGTH ?? @V200930 00867000
BE DISDOT YES, FLAG AND CONTINUE @V200930 00868000
CLI 0(R1),C' ' BLANK ??? 00869000
BNH DISIBLNK BRANCH IF IT IS @VM08515 00870000
LA R1,1(,R1) BUMP TO NEXT CHAR. 00871000
BCT R14,DISICOLN LOOP BACK IF HAVE MORE CHARACTERS TO CHK. 00872000
B DISIBLNK NO MORE - TREAT AS BLANK @VM08515 00873000
SPACE 00874000
DISDOT OI SAVEWRK1,DISLEN FLAG LENGTH RANGE @V200930 00875000
DISIHYPH OI SAVEWRK1,RANGE SET RANGE SWITCH 00876000
BCTR R6,0 MINUS ONE FROM LENGTH FOR HYPHEN 00877000
LA R0,1(R5,R6) COMPUTE LENGTH OF ENDING FIELD 00878000
LA R1,1(,R1) . . . 00879000
SR R0,R1 . . . 00880000
BNP DISIBLNK NO ENDING FIELD - TREAT AS BLANK @VM08515 00881000
SR R6,R0 COMPUTE LENGTH OF BEGINNING FIELD 00882000
SPACE 00883000
CL R0,F3 THREE CHARACTERS ???? 00884000
BNE DISICNVT NOT 'END' - BRANCH @VM08515 00885000
LR R14,R0 COUNT TO GPR 14 00886000
BCTR R14,0 LESS ONE FOR 'EX' 00887000
EX R14,ENDCOMP IS IT 'END' ???? 00888000
BE DISIBLNK BRANCH IF IT IS 00889000
DISICNVT STM R0,R1,SAVEWRK8 SAVE FOR POSSIBLE ERROR MSG 00890000
NI SAVEWRK1+1,X'FF'-CONVLEN RESET FLAG @V200930 00891000
TM SAVEWRK1,RANGE+DISLEN LENGTH RANGE ?? @V200930 00892000
BNO *+8 NO, NOT LENGTH FIELD @V200930 00893000
OI SAVEWRK1+1,CONVLEN INDICATE CONVERT LENGTH @V200930 00894000
BAL R4,CNVTBIN CONVERT END ADDRESS TO BINARY 00895000
BNZ BADADDR BRANCH IF BAD CONVERT 00896000
ST R15,TENDADD SAVE TRUE END ADDRESS @VM08524 00897000
CLI SAVEWRK1+2,C'Y' FLOATING POINT FUNCTION @VM08524 00898000
BNE REMEND NO -- @VM08524 00899000
TM SAVEWRK1,DISLEN+RANGE REG COUNT @VM08524 00900000
BO YREGCNT YES - VALIDATE REG COUNT @VM08524 00901000
TM TENDADD+3,X'01' VALID Y REG NUMBER @VM08524 00902000
BO CDM010 NO - REG ODD ERROR @VA01634 00903000
CL R15,F6 Y REG 0 2 4 6 @VM08524 00904000
BH CDM010 NO - Y REG ERROR @VA01634 00905000
B REMEND CONT @VM08524 00906000
YREGCNT SLL R15,1 X 2 (0 2 4 6) @VA01634 00907000
BCTR R15,0 -1 FOR LENGTH COUNT @VM08524 00908000
ST R15,TENDADD UPDATE NEW LENGTH COUNT @VM08524 00909000
LR R1,R15 CORRECT LENGTH REG @VM08524 00910000
REMEND LR R2,R1 REMEMBER END ADDRESS @VM08524 00911000
NI SAVEWRK1+1,X'FF'-CONVLEN RESET LENGTH FLAG @V200930 00912000
DISTRT LR R0,R6 GET LENGTH OF START CODE @VM08524 00913000
BCT R0,DISIBGNA SUBTRACT 1 FROM LENGTH FOR TYPE CODE 00914000
SR R1,R1 SET DEFAULT BEGINNING ADDRESS TO ZERO 00915000
ST R1,NXTADD .. 00916000
ST R1,TBEGADD SAVE TRUE BEGIN ADDRESS @VM08524 00917000
B DISTDOT TEST FOR LENGTH RANGE @V200930 00918000
DISIBGNA LA R1,1(R5) LOAD ADDRESS OF BEGINNING FIELD 00919000
STM R0,R1,SAVEWRK6 SAVE FOR POSSIBLE ERROR @VM08524 00920000
BAL R4,CNVTBIN CONVERT BEGINNING ADDRESS 00921000
BNZ BADADDR1 BRANCH IF BAD CONVERSION @VM08524 00922000
ST R15,TBEGADD SAVE TRUE BEGIN ADDRESS @VM08524 00923000
CL R15,ENDMAX IS IT ABOVE MAXIMUM ? @VM08524 00924000
BNH RANGOK1 NO, CONTINUE... @VA01634 00925000
MVC SAVEWRK8(8),SAVEWRK6 FOR ERROR MESSAGE @VA03060 00926000
TM SAVEWRK1,HEXLOC WHICH KIND OF ERROR? @VA01634 00927000
BO CDM160 HEXADDR ERROR @VA01634 00928000
B CDM010 REG ERROR. @VA01634 00929000
RANGOK1 EQU * @VA01634 00930000
ST R1,NXTADD INITIALIZE BEGINNING ADDRESS 00931000
CLI SAVEWRK1+2,C'Y' YREG PROCESSING @VM08524 00932000
BNE DISTDOT NO -- @VM08524 00933000
TM TBEGADD+3,X'01' YREG 0 2 4 6 @VM08524 00934000
BO BADADDR1 NO - YREG ERROR @VM08524 00935000
DISTDOT TM SAVEWRK1,RANGE+DISLEN IS IT LENGTH RANGE ?? @V200930 00936000
BNO DISENDA NO, SAVE END ADDRESS @V200930 00937000
L R15,TENDADD GET BYTE OR REG COUNT VALUE @VM08524 00938000
A R15,TBEGADD UPDATE TRUE END ADDRESS @VM08524 00939000
BCTR R15,0 -1 @VM08524 00940000
ST R15,TENDADD .. @VM08524 00941000
AL R2,TBEGADD ADD TO THE TRUE BEGIN ADDR @VA03502 00942000
DISENDA ST R2,ENDADD SET END ADDRESS @VM08524 00943000
CLC TBEGADD(4),TENDADD START LARGER THAN END @VM08524 00944000
BH CKRANGE YES, ERROR @VM08524 00945000
CLC TENDADD(4),ENDMAX END ADDRESS ABOVE MAXIMUM @VM08524 00946000
BH CKRANGE YES, ERROR @VM08524 00947000
TM SAVEWRK1,RANGE DISPLAY A RANGE OF ADDRESSES ? 00948000
BCR 1,R7 YES - RETURN 00949000
MVC ENDADD,NXTADD MAKE ENDING ADDRESS SAME AS BEGINNING 00950000
BR R7 RETURN 00951000
SPACE 00952000
CKRANGE TM SAVEWRK1,RANGE RANGE OF ADDRESSES ??? 00953000
BO CDM009 SEND BAD RANGE MESSAGE 00954000
MVC SAVEWRK8(8),SAVEWRK6 FOR ERROR MESSAGE @VA03060 00955000
TM SAVEWRK1,HEXLOC LOCATION OR REGISTER ???? 00956000
BO CDM160 BRANCH IF LOCATION 00957000
B CDM010 MUST BE REGISTER 00958000
DISIBLNK L R2,ENDADD SET DEFAULT END ADDRESS @V200930 00959000
NI SAVEWRK1,X'FF'-DISLEN NO LENGTH ON DEFAULT @V200930 00960000
B DISTRT CONTINUE @V200930 00961000
EJECT 00962000
* 00963000
* GET NEXT ADDRESS SUBROUTINE 00964000
* 00965000
DISNEXTA TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF? @VA03502 00966000
BO EXIT YES--TERMINATE IT @VA03502 00967000
L R1,NXTADD LOAD CURRENT ADDRESS @VA03502 00968000
AH R1,INCRMT GET NEXT ADDRESS @VA03720 00969000
CL R1,ENDADD GREATER THAN ENDING ADDRESS? @VA03720 00970000
BH DUMPCHEK YES, GO OUTPUT IF DUMP FUNCTION @VA03720 00971000
ST R1,NXTADD STORE NEXT ADDR @VA03502 00972000
B CKDUMP @VA03502 00973000
DISNCOMM TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? 00974000
BO EXIT YES TERMINATE THE DUMP OR DISPLAY 00975000
CL R1,ENDADD GREATER THAN ENDING ADDRESS ? 00976000
BH DUMPCHEK YES-GO SEE IF DUMP FUNCTION 00977000
ST R1,NXTADD STORE NEXT ADDRESS 00978000
CKDUMP EQU * @VA03502 00979000
LH R4,INCRMT GET CURRENT INCREMENT @V200930 00980000
CH R4,F4+2 IS IT STORAGE INCREMENT ?? @V200930 00981000
BCR 7,R7 NO, CONT @V200930 00982000
LR R4,R1 GET NEXT ADDRESS .... ASSUME @V200930 00983000
* LOCATION 00984000
N R4,XRIGHT16 TEST FOR SEG BOUND START @V200930 00985000
BCR 7,R7 NO, CONT @V200930 00986000
CALL DMKCVTBH CONVERT ADDRESS @V200930 00987000
MVC FIELD(L'DUMPMSG),DUMPMSG SET IN MSG @V4075A0 00988000
STCM R0,B'0011',FIELD+L'DUMPMSG PUT INTO USER MSG @V4075A0 00989000
STCM R1,B'1111',FIELD+L'DUMPMSG+2 6 BYTES OF VAR INF @V4075A0 00990000
LA R0,L'DUMPMSG+6 SIZE @V4075A0 00991000
LA R1,FIELD MESSAGE FOR DUMPING @V4075A0 00992000
CALL DMKQCNWT,PARM=0 WIAT FOR WRITE @V200930 00993000
BNZ EXIT STOP THE DUMP @V200930 00994000
L R1,NXTADD SET NEXT ADDRESS FOR DISPLAY @V200930 00995000
BR R7 CONTINUE 00996000
DUMPCHEK EQU * 00997000
BAL R4,DISWRITE OUTPUT LINE 00998000
MVC BFRCNT(2),BUFMAX PUT SOMETHING IN BFRCNT 00999000
BAL R4,DISWRITE PRINT BLANK LINE 01000000
TM SAVEWRK1,DUMPC+VIRTC IS THIS A VIRTUAL DUMP ???? 01001000
BNO DISGETN GET NEXT FILED @V200930 01002000
TM SAVEWRK1,BYPGPR FINISHED NEXT DUMP FIELD ?? @V200930 01003000
BO DISGETN YES, GET NEXT FIELD @V200930 01004000
L R15,SAVEWRK2 LOAD INDEX 01005000
LA R15,4(,R15) BUMP INDEX COUNT 01006000
ST R15,SAVEWRK2 STORE NEW INDEX COUNT 01007000
B DUMPINDX(R15) DO NEXT DUMP FUNCTION @V200930 01008000
DUMPSTRT TM SAVEWRK1,BYPGPR DOING NEXT DUMP FILED ?? @V200930 01009000
BO DISLOC YES, LOCATIONS ONLY @V200930 01010000
DUMPINDX B DUMPGPR GO DUMP GENERAL REGISTERS @V200930 01011000
B DUMPECR GO DUMP CONTROL REGISTERS 01012000
B DUMPFPR GO DUMP FLOATING POINT REGISTERS 01013000
B DUMPKEY GO DUMP THE STORAGE KEYS 01014000
B DUMPPSW GO DUMP THE PSW 01015000
B DISLOC DUMP LOCATIONS 01016000
OI SAVEWRK1,BYPGPR DONE REGS,DONT DO AGAIN @V200930 01017000
B DISGETN GET NEXT FIELD @V200930 01018000
SPACE 01019000
DUMPMSG DC C'DUMPING LOC ' @V200930 01020000
EJECT 01021000
USING BUFFER,R9 01022000
SPACE 01023000
DISDMPID LM R0,R1,BUFNXT SAVE NEXT AND COUNT FOR COMMAND LINE 01024000
STM R0,R1,SAVEWRK8 . . . 01025000
GETDMPID CALL DMKSCNFD GET FIELD NEXT @V200930 01026000
BNZ DMPIDAD NONE, SET DUMP ADDRESSES @V200930 01027000
CLI 0(R1),C'*' IS IT THE DUMP ID ?? @V200930 01028000
BNE GETDMPID NO, LOOP TIL FOUND OR END @V200930 01029000
LR R3,R1 REMEMBER START OF FIELD @V200930 01030000
DMPID CALL DMKSCNFD GET MORE FILEDS OF ID @V200930 01031000
BZ DMPID LOOP TIL END @V200930 01032000
L R2,BUFNXT GET LAST POSITION ADDRESS @V200930 01033000
SR R2,R3 MINUS BEGGINING IS THE LENGTH @V200930 01034000
BNP DMPIDAD NONE SET DUMP ADDRESSES @V200930 01035000
CL R2,=F'100' ONLY 100 CHARACTERS ALLOWED @V200930 01036000
BL *+8 OK, CONT @V200930 01037000
LA R2,100 SET MAX @V200930 01038000
BCTR R2,R0 SET FOR EXECUTE @V200930 01039000
EX R2,MOVEID SET DUMP ID @V200930 01040000
DMPIDAD MVC BUFBUF(8),CDUMPLOC 'DUMP LOC' FOR HEADER @V4075A0 01041000
L R1,NXTADD GET DUMP START @V200930 01042000
CALL DMKCVTBH CONVERT @V200930 01043000
STCM R0,B'0011',BUFBUF+9 PUT START ADDRESS (6 @V4075A0 01044000
STCM R1,B'1111',BUFBUF+11 BYTES) INTO OUTPUT @V4075A0 01045000
MVI BUFBUF+15,C'-' EDIT @V200930 01046000
L R1,ENDADD GET END ADDRESS @V200930 01047000
CALL DMKCVTBH CONVERT @V200930 01048000
STCM R0,B'0011',BUFBUF+16 @V4075A0 01049000
STCM R1,B'1111',BUFBUF+18 PUT END ADDRESS INTO BUF@V4075A0 01050000
MVC BFRCNT(2),BUFMAX PUT COUNT IN BFRCNT FOR DISWRITE 01051000
BAL R4,DISWRITE GO OUTPUT LINE 01052000
MVC BFRCNT(2),BUFMAX PUT COUNT IN BFRCNT AGAIN 01053000
BAL R4,DISWRITE NOW PRINT BLANK LINE 01054000
SPACE 01055000
LM R0,R1,SAVEWRK8 RESTORE BUFNXT AND BUFCOUNT @VM08515 01056000
STM R0,R1,BUFNXT . . . 01057000
BR R7 RETURN 01058000
SPACE 01059000
ENDCOMP CLC 0(0,R1),=C'END ' EXECUTED COMPARE 01060000
EJECT 01061000
********************************************************************* 01062000
* 01063000
* SUBROUTINE TO FORMAT LINE HEADER & TRAILER 01064000
* 01065000
********************************************************************* 01066000
DISHEAD L R1,NXTADD GET NEXT ADDRESS 01067000
CLC IDCHAR,CLOC DISPLAY OR DUMP STORAGE COMMAND? @V4075A0 01068000
BE DISHCORE BRANCH IF YES 01069000
MVC BUFBUF(3),IDCHAR MOVE IDENTIFICATION TO BUFFER 01070000
CALL DMKCVTBD CONVERT REGISTER NUMBER TO DECIMAL 01071000
STH R1,BUFBUF+4 STORE IN BUFFER 01072000
CLI BUFBUF+4,C'0' LEADING ZERO ? 01073000
BNE DISHSETP BRANCH IF NO 01074000
MVI BUFBUF+4,C' ' YES - REPLACE WITH A BLANK 01075000
DISHSETP MVI BUFBUF+7,C'=' 01076000
DISHSETC LA R1,BUFBUF+10 SET ADDRESS 01077000
ST R1,BUFPNT STORE POINTER 01078000
MVC BFRCNT,F10+2 SET COUNT = 10 @V4075A0 01079000
BR R8 RETURN 01080000
SPACE 2 01081000
DISHCORE EQU * 01082000
TM BUFLAG,FIRSTL IS THIS THE 1ST LINE ? 01083000
BO DISH1STL BRANCH IF YES 01084000
TM BUFLAG,SAMEL LINES ALREADY SUPPRESSED ? 01085000
BO DISHSUPP BRANCH IF YES 01086000
BAL R15,SETR14 GO SET UP 'EX' REG. 01087000
L R1,NXTADD RELOAD NEXT ADDRESS 01088000
EX R14,DISHCLCL SAME AS LAST LINE ? 01089000
BNE DISHSAVE BRANCH IF NO 01090000
OI BUFLAG,SAMEL TURN ON SAME AS LAST LINE SWITCH 01091000
CALL DMKCVTBH CONVERT ADDRESS TO HEX 01092000
STCM R0,B'0011',BUFBUF @V4075A0 01093000
STCM R1,B'1111',BUFBUF+2 MOVE ADDR (6 BYTES) TO BUF@V4075A0 01094000
L R1,NXTADD RELOAD CURRENT ADDRESS 01095000
MVC BUFBUF+7(2),=C'TO' 01096000
MVC BUFBUF+19(L'SUPPLMSG),SUPPLMSG MOVE MESSAGE TEXT 01097000
MVC BFRCNT,=AL2(L'SUPPLMSG+19) SET BYTE COUNT 01098000
DISHBUMP AH R1,BUFTRC BUMP TO NEXT LINE ADDRESS 01099000
TM SAVEWRK1,VIRTC REAL OR VIRTUAL 01100000
BO DISHVIRT BRANCH AROUND IF IT'S VIRTUAL 01101000
L R14,=A(DMKSYSRM) GET ADDRESS OF TOP 01102000
L R14,0(,R14) LOAD THE ADDRESS 01103000
B DISHCKR1 GO SEE IF IT WILL FIT 01104000
DISHVIRT EQU * 01105000
L R14,VMSIZE LOAD VIRTUAL MACHINE SIZE 01106000
DISHCKR1 EQU * 01107000
CR R1,R14 ADDRESS IN R1 TOO HIGH 01108000
BNH DISHSTR1 BRANCH IF IT ISN'T 01109000
LR R1,R14 MAKE IT VALID 01110000
DISHSTR1 EQU * 01111000
ST R1,NXTADD SAVE NEW ADDRESS 01112000
CALL DMKCVTBH CONVERT ADDRESS TO HEX 01113000
STCM R0,B'0011',BUFBUF+10 AND STORE INTO OUTPUT @V4075A0 01114000
STCM R1,B'1111',BUFBUF+12 @V4075A0 01115000
L R1,NXTADD RELOAD NEXT ADDRESS 01116000
B DISNCOMM CHECK NEXT ADDRESS 01117000
EJECT 01118000
DISH1STL NI BUFLAG,NFIRSTL TURN OFF 1ST LINE SWITCH 01119000
DISHSAVE NI BUFLAG,NSAMEL TURN OFF SUPPRESSED LINES SWITCH 01120000
CALL DMKCVTBH CONVERT ADDRESS TO HEX @VM08515 01121000
STCM R0,B'0011',BUFBUF @V4075A0 01122000
STCM R1,B'1111',BUFBUF+2 PLACE INTO OUTPUT BUFFER @V4075A0 01123000
BAL R15,SETR14 GO SET UP 'EX' REG. 01124000
EX R14,DISHMVCL SAVE NEXT 16 OR 32 BYTES 01125000
LA R1,BUFBUF+92 POINT TO KEY AREA 01126000
CH R14,=H'31' LONG LINE ?? 01127000
BE *+8 YES 01128000
LA R1,BUFBUF+49 POINT TO KEY IN SHORT LINE @V200930 01129000
LR R4,R1 SAVE BUFFER ADDRESS 01130000
LR R1,R2 GET DATA ADDRESS 01131000
N R1,=F'2047' AT 2K BOUNDARY ?? 01132000
BNZ BUFUP NO .. 01133000
ST R14,REGSAVE SAVE ACROSS SUBROUTINE @VM08553 01134000
STM R2,R3,REGSAVE+4 ... @VM08553 01135000
L R1,NXTADD GET THE ADDRESS OF THIS PAGE @VM08854 01136000
TM SAVEWRK1,VIRTC IS THIS VIRT STORAGE? @VM08854 01137000
BO CDMK01 VIRT, LET SUBROUTINE DO IT @VM08854 01138000
SR R1,R1 CLEAR OUT FOR CVT ROUTINE @VM08854 01139000
ISK R1,R2 GET THE REAL STUFF @VM08854 01140000
B CDMK02 AND CONTINUE NORMALLY @VM08854 01141000
SPACE 01142000
CDMK01 BAL R15,GETKEY GO GET THE KEY @VM08854 01143000
CDMK02 CALL DMKCVTBH CONVERT @VM08854 01144000
L R14,REGSAVE RESTORE FOR RETURN 01145000
LM R2,R3,REGSAVE+4 RESTORE THE REGS @VM08553 01146000
STH R1,0(R4) PUT KEY IN LINE 01147000
BUFUP LR R1,R4 RESTORE BUFFER ADDRESS 01148000
LA R1,4(R1) POINT TO TRANSLATE AREA 01149000
MVI 0(R1),C'*' 01150000
EX R14,DISHMVCB MOVE LINE TO BUFFER 01151000
L R15,=A(DMKDMPTR) LOAD TRANSLATE TABLE ADDRESS 01152000
EX R14,DISHTRLN TRANSLATE TO PRINTABLE CHARACTERS 01153000
LA R1,2(R14,R1) BUMP POINTER TO NEXT BYTE 01154000
MVI 0(R1),C'*' 01155000
B DISHSETC SET POINTER AND COUNT 01156000
SPACE 2 01157000
DISHSUPP EQU * 01158000
BAL R15,SETR14 GO SET UP 'EX' REG. 01159000
L R1,NXTADD RELOAD NEXT ADDRESS 01160000
EX R14,DISHCLCL SAME AS LAST LINE ? 01161000
BE DISHBUMP BRANCH IF YES 01162000
BAL R4,DISWRITE OUTPUT SUPPRESSED LINES MESSAGE 01163000
TM SAVEWRK1,VIRTC VIRTUAL REQUEST ????? 01164000
BZ DISHSAVE NO -- NO NEED TO DO TRANS 01165000
TRANS 2,1,OPT=(BRING,DEFER) MAKE SURE ADDRESS STILL IN !! 01166000
B DISHSAVE SAVE THIS LINE 01167000
SPACE 2 01168000
********************************************************************* 01169000
* * 01170000
* THIS SUBROUTINE INSURES THAT R14 WHICH IS USED FOR EXECUTED * 01171000
* COMPARES AND MOVES DOES NOT CONTAIN A COUNT THAT WILL * 01172000
* GO PAST THE END OF REAL STORAGE * 01173000
* * 01174000
********************************************************************** 01175000
SPACE 2 01176000
SETR14 LH R14,BUFTRC LOAD NORMAL TRANSLAT COUNT 01177000
L R1,=A(DMKSYSRM) ADDRESS OF TOP OF STORAGE CONST. 01178000
L R0,0(,R1) TOP OF STORAGE TO R0 01179000
SR R0,R2 DIFFERENCE BETWEEN PRESENT AND TOP 01180000
CR R0,R14 COMPARE THE COUNTS 01181000
BH R14OK R14 IS VALID IF BRANCH 01182000
LR R14,R0 IF NOT - MAKE IT VALID 01183000
R14OK BCTR R14,0 MINUS ONE FOR THE EXECUTES 01184000
BR R15 GO BACK 01185000
SPACE 6 01186000
* EXECUTED INSTRUCTIONS 01187000
SPACE 01188000
DISHCLCL CLC LNSAVE(0),0(R2) 01189000
DISHMVCL MVC LNSAVE(0),0(R2) 01190000
DISHMVCB MVC 1(0,R1),0(R2) 01191000
DISHTRLN TR 1(0,R1),0(R15) 01192000
MOVEID MVC BUFBUF+25(*-*),0(R3) EXECUTED FOR DUMP ID @V200930 01193000
EJECT 01194000
* 01195000
* OUTPUT SUBROUTINE 01196000
* 01197000
DISWRITE TM VMRSTAT,VMLOGOFF IS USER LOGGING OFF ? 01198000
BO EXIT YES TERMINATE THE DUMP OR DISPLAY 01199000
TM VMOSTAT,VMKILL IS USER BEING FORCED OFF @VA05493 01200000
BO EXIT YES, TERMINATE DUMP OR DISPLAY @VA05493 01201000
STM R0,R3,REGSAVE SAVE REGISTERS 01202000
LH R0,BFRCNT LOAD BUFFER BYTE COUNT 01203000
LTR R0,R0 IS IT ZERO ? 01204000
BZ DISWRTOK YES - NOTHING TO OUTPUT 01205000
LR R1,R10 LOAD BUFFER ADDRESS 01206000
DISWPRT EQU * 01207000
TM LINECNT,X'FF' TEST IF LINECOUNT IS ZERO 01208000
BZ DISSKIP BRANCH IF IT IS 01209000
DISWPRTA LA R0,132 SIZE OF LINE 01210000
CALL DMKVSPRT OUTPUT LINE 01211000
LTR R2,R2 GOOD RETURN FROM VSPOOL @VA01024 01212000
BZ DISBMPLC YES - GO BUMP LINE COUNT @VA01024 01213000
CL R2,F4 PRINTER NOT AVAILABLE ????? @VA01024 01214000
BE CDM060 YEP - GO SEND MESSAGE @VA01024 01215000
B CDM061 MUST BE SPOOL PROBLEM @VA01024 01216000
DISBMPLC EQU * @VA01024 01217000
IC R2,LINECNT INSERT LINECOUNT 01218000
BCTR R2,0 SUBTRACT ONE 01219000
STC R2,LINECNT STORE DECREMENTED COUNT 01220000
DISWRTOK ST R10,BUFPNT RESET BUFFER POINTER 01221000
MVC BFRCNT(2),ZEROES ZERO THE BYTE COUNT 01222000
MVI BUFBUF,C' ' CLEAR BUFFER 01223000
MVC BUFBUF+1(131),BUFBUF 01224000
LM R0,R3,REGSAVE RESTORE REGISTERS 01225000
BR R4 RETURN 01226000
SPACE 01227000
DISSKIP SR R0,R0 ZERO GPR0 01228000
CALL DMKVSPRT SKIP TO NEXT PAGE 01229000
MVI LINECNT,60 SET NUMBER OF LINES TO 60/PAGE 01230000
B DISWPRTA NOW GO OUTPUT LINE 01231000
EJECT 01232000
********************************************************************* 01233000
* SUBROUTINE TO CONVERT AN ADDRESS TO BINARY 01234000
* 01235000
* ON ENTRY - R0 = LENGTH OF FIELD 01236000
* R1 = LOCATION OF FIELD 01237000
* ON EXIT - R1 = RESULT OF CONVERSION TRUNCATED 01238000
* TO INCREMENT BOUNDARY 01239000
* CC = 0 IF CONVERSION IS SUCCESSFUL 01240000
* CC = 1 IF CONVERSION ERROR 01241000
* 01242000
********************************************************************* 01243000
CNVTBIN CL R0,FLDLEN LENGTH GREATER THAN MAX ? @VM08524 01244000
BH CDM003 YES - ERROR DMKCDM003 @VM08524 01245000
STM R0,R1,REGSAVE SAVE INPUT CONDITIONS @VM08524 01246000
TM SAVEWRK1+1,CHEX HEXADECIMAL FIELD ? 01247000
BO CNVTHEX BRANCH IF YES 01248000
CALL DMKCVTDB CONVERT TO BINARY 01249000
BZ CNVTCOMM BRANCH IF CONVERSION OK 01250000
LM R0,R1,REGSAVE RESTORE INPUT CONDITIONS 01251000
CNVTHEX CALL DMKCVTHB CONVERT TO BINARY 01252000
BCR 7,R4 RETURN IF BAD CONVERSION 01253000
CNVTCOMM LH R0,INCRMT LOAD ADDRESS INCREMENT 01254000
LCR R0,R0 LOAD COMPLEMENT OF INCREMENT 01255000
LR R15,R1 SAVE TRUE ADDRESS @VM08524 01256000
TM SAVEWRK1+1,CONVLEN CONVERT LENGTH FIELD ?? @V200930 01257000
BZ TRUNC NO, TRUNC FOR ALIGN @V200930 01258000
LTR R1,R1 IS LENGTH ZERO ?? @V200930 01259000
BZ BADADDR YES, INVALID LENGTH @VM08524 01260000
BCTR R1,R0 ONE LESS IN R1 FOR RANGE @V200930 01261000
TRUNC DS 0H @V200930 01262000
NR R1,R0 TRUNCATE TO INCREMENT BOUNDARY 01263000
SR R0,R0 SET CC = 0 01264000
BR R4 RETURN TO CALLER 01265000
EJECT 01266000
CONFMSG MSG 'COMMAND COMPLETE' 01267000
CALL DMKQCNWT,PARM=NORET 01268000
B EXIT 01269000
BADADDR1 LM R0,R1,SAVEWRK6 LEN AND ADDRESS OF STARTING FIELD@VM08524 01270000
B *+8 CHECK WHICH ERROR @VM08524 01271000
BADADDR LM R0,R1,SAVEWRK8 LOAD LEN. AND ADDRESS OF BAD ARGUMENT 01272000
TM SAVEWRK1+1,CONVLEN CONVERT LENGTH ERROR? @VA03060 01273000
BO CDM003 BRANCH IF YES @VA03060 01274000
TM SAVEWRK1,HEXLOC LOCATION REQUEST 01275000
BO CDM004 BR. IF YES 01276000
CDM003 LA R2,3 ERROR CODE 01277000
B PARMLEN SET PARM LENGTH @VM08524 01278000
SPACE 01279000
CDM004 LA R2,4 ERROR CODE 01280000
B PARMLEN SET PARM LENGTH @VM08524 01281000
SPACE 01282000
CDM009 LA R2,009 ERROR CODE 01283000
L R1,TBEGADD GET TRUE BEGIN ADDRESS @VM08524 01284000
TM SAVEWRK1,HEXLOC HEX LOC OR REGISTER ?? @V200930 01285000
BO CVTH1 HEX @V200930 01286000
CALL DMKCVTBD CONVERT TO DEC @V200930 01287000
B STCM1 SAVE VALUES @V200930 01288000
CVTH1 CALL DMKCVTBH CONVERT TO HEX @V200930 01289000
STCM1 DS 0H @V200930 01290000
STCM R0,3,BUFBUF STORE HEXLOC 01291000
STCM R1,15,BUFBUF+2 . . . 01292000
MVI BUFBUF+6,C'-' INSERT HYPHEN 01293000
L R1,TENDADD LOAD TRUE END ADDRESS @VM08524 01294000
TM SAVEWRK1,HEXLOC HEX OR DEC CONVERT ?? @V200930 01295000
BO CVTH2 HEX @V200930 01296000
CALL DMKCVTBD CONVERT TO DEC @V200930 01297000
B STCM2 SAVE VALUES @V200930 01298000
CVTH2 CALL DMKCVTBH CONVERT TO HEX @V200930 01299000
STCM2 DS 0H @V200930 01300000
STCM R0,3,BUFBUF+7 STORE AWAY 01301000
STCM R1,15,BUFBUF+9 . . . 01302000
TM SAVEWRK1,HEXLOC HEX LOCATION ?? @V200930 01303000
BO STCM3 YES, CONT @V200930 01304000
STCM R1,3,BUFBUF+7 SET VALUE FOR REG @V200930 01305000
LA R0,5 SIZE @V200930 01306000
LA R1,BUFBUF+4 DATA ADDRESS @V200930 01307000
B CALLERM DO ERROR MESSAGE @V200930 01308000
STCM3 DS 0H @V200930 01309000
LA R0,13 LENGTH OF FIELD 01310000
LA R1,BUFBUF SET DATA ADDRESS @V200930 01311000
B CALLERM 01312000
SPACE 01313000
CDM010 LA R2,010 ERROR CODE - MESSAGE DMKCDM010 @VM08524 01314000
B ERRPARM GO SET UP ERROR PARM @VM08524 01315000
SPACE 01316000
CDM026 LA R2,26 ERROR CODE 01317000
B NOVAR . . . 01318000
SPACE 01319000
CDM033 LA R2,33 ERROR CODE 01320000
B NOVAR . . . 01321000
SPACE 01322000
CDM060 LA R2,60 ERROR CODE @VA01024 01323000
B NOVAR . . . @VA01024 01324000
SPACE 01325000
CDM061 LA R2,61 ERROR CODE @VA01024 01326000
B NOVAR . . . @VA01024 01327000
SPACE 01328000
CDM160 LA R2,160 ERROR CODE - MESSAGE DMKCDM160 @VM08524 01329000
ERRPARM LM R0,R1,SAVEWRK8 COUNT AND ADDRESS OF ERROR OPTION@VM08524 01330000
PARMLEN C R0,F24 COUNT OVER MAX @VM08524 01331000
BNH *+8 NO - @VM08524 01332000
LA R0,24 SET MAX COUNT @VM08524 01333000
B CALLERM . . . 01334000
SPACE 01335000
NOVAR SR R1,R1 ZERO PARM REG 01336000
SPACE 01337000
SPACE 01338000
CALLERM ICM R0,14,MODID+3 INSERT MODULE ID 01339000
ICM R2,B'1000',X40FFS FLAG TO FRET BUFFER, NOT RTN@V4075A0 01340000
L R3,SAVEWRK4 LOAD ADDRESS AND LENGTH OF BUFFER 01341000
CALL DMKERMSG . . . 01342000
* 01343000
* DMKERM MODULE WILL FRET THE BUFFER, SVC16 THE SAVEAREA OUT, 01344000
* AND RETURN DIRECTLY TO DMKCFM TO PROCESS THE NEXT COMMAND. 01345000
* 01346000
EJECT 01347000
EXIT EQU * 01348000
TM VMPSTAT,VMV370R EXTENDED-CONTROL MACHINE? 01349000
BZ EXITOUT NO - CONTINUE 01350000
TM VMESTAT,VMNEWCR0+VMINVSEG+VMINVPAG 01351000
BZ EXITOUT NOTHING NEEDS CLEANUP 01352000
CALL DMKVATAB CLEAN UP SHADOW TABLES 01353000
EXITOUT LA R0,BFRSIZE FRET OUTPUT BUFFER @VM08524 01354000
LR R1,R10 ADDRESS OF BUFFER @VM08524 01355000
CALL DMKFRET .. @VM08524 01356000
EXIT @VM08515 01357000
EJECT 01358000
*********************************************************************** 01359000
* 01360000
* CONSTANTS * 01361000
* * 01362000
KEYEQ DC C'KEY =' 01363000
SUPPLMSG DC C'SUPPRESSED LINE(S) SAME AS ABOVE .....' 01364000
CPSWEQ DC C'PSW =' @V4075A0 01365000
CDUMPLOC DC C'DUMP LOC' @V4075A0 01366000
CLOC EQU CDUMPLOC+5 @V4075A0 01367000
SPACE 01368000
LTORG 01369000
EJECT 01370000
* 01371000
* OUTPUT BUFFER DSECT 01372000
* 01373000
SPACE 3 01374000
DISPBFR DSECT 01375000
BUFBUF DS CL132 132 CHARACTER BUFFER 01376000
BUFPNT DS F POINTER TO NEXT AVAILABLE BYTE 01377000
BFRCNT DS H BYTE COUNT OF CHARACTERS IN BUFFER 01378000
BUFMAX DS H MAXIMUM VALUE OF BUFCNT 01379000
BUFTRC DS H NUMBER OF BYTES TO BE TRANSLATED 01380000
BUFLAG DS XL1 FLAG BYTE 01381000
* 01382000
* X'80' - THE OUTPUT IS TO BE PRINTED 01383000
* X'40' - THIS IS THE 1ST LINE OF OUTPUT 01384000
* X'20' - THIS DUMP LINE IS THE SAME AS THE LAST LINE 01385000
* X'10' - THIS LINE HAS BEEN TRANSLATED TO EBCDIC 01386000
* X'08' - INVALID VIRTUAL PAGE WITHIN ADDRESS RANGE 01387000
* 01388000
LINECNT DS XL1 COUNT OF LINES ON PAGE OF DUMP 01389000
INCRMT DS H ADDRESS INCREMENT 01390000
DS H 01391000
IDCHAR DS CL3 LINE IDENTIFICATION CHARACTERS 01392000
DS XL1 01393000
NXTADD DS F NEXT ADDRESS TO BE DISPLAYED 01394000
ENDADD DS F LAST ADDRESS TO BE DISPLAYED 01395000
TBEGADD DS F TRUE BEGIN ADDRESS @VM08524 01396000
TENDADD DS F TRUE END ADDRESS @VM08524 01397000
ENDMAX DS F MAXIMUM END ADDRESS @VM08524 01398000
FLDLEN DS F MAXIMUM ADDRESS LENGTH @VM08524 01399000
FIELD DS 3D WORK AREA 01400000
DUMPLOC EQU FIELD+L'DUMPMSG VARIABLE LOC ADDR GOES HERE @V4075A0 01401000
LNSAVE DS XL32 DUMP SAVE AREA 01402000
REGSAVE DS 4F TEMPORARY SAVE AREA FOR R0-R3 01403000
BFRSIZE EQU (*-BUFBUF+7)/8 BUFFER SIZE IN DOUBLE WORDS @VM08524 01404000
SPACE 3 01405000
* EQUATES FOR BUFLAG 01406000
PRINTER EQU X'80' 01407000
FIRSTL EQU X'40' 01408000
NFIRSTL EQU X'BF' 01409000
SAMEL EQU X'20' 01410000
NSAMEL EQU X'DF' 01411000
TRANSLAT EQU X'10' 01412000
INVLD EQU X'08' INVALID VIRTUAL PAGE WITHIN @V304635 01413000
* ADDRESS RANGE 01414000
EJECT 01415000
DMKCDM CSECT 01416000
EJECT 01417000
PSA , @V306638 01418000
COPY CONBUF @V306638 01419000
COPY EQU @V306638 01420000
COPY SAVE @V306638 01421000
COPY VMBLOK @V306638 01422000
END 01423000