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 | LHEXLOC1 <<-> > | 00155000 * | DU | THEXLOC1 <<:> > <*USERID> | 00156000 * | | 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 | LHEXLOC1 <<-> > | 00394000 * | DMCP | LHEXLOC1 <<:> > <*DUMPID> | 00395000 * | | 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