RPA TITLE 'DMKRPA (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF SOURCE 00002000
*. 00003000
* 00004000
* MODULE NAME - 00005000
* 00006000
* DMKRPA 00007000
* 00008000
* FUNCTION - 00009000
* 00010000
* TO TRANSFER SPECIFIC DASD PAGES BETWEEN THE CALLER'S VIRTUAL 00011000
* MEMORY SPACE AND THE BACKING STORE 00012000
* 00013000
* ATTRIBUTES - 00014000
* 00015000
* REENTRANT, RESIDENT, CALLED VIA SVC 00016000
* 00017000
* ENTRY POINTS - 00018000
* 00019000
* DMKRPAGT - MOVE THE SPECIFIED DASD PAGE FROM DASD TO THE SPEC- 00020000
* IFIED PAGE IN THE USER'S VIRTUAL MEMORY SPACE 00021000
* DMKRPAPT - MOVE THE PAGE FROM VIRTUAL MEMORY TO DASD 00022000
* 00023000
* ENTRY CONDITIONS - 00024000
* 00025000
* GPR0 = THE DASD ADDRESS OF THE PAGE, IN THE FORM (CCPD), 00026000
* WHERE CC IS THE CYLINDER, P IS THE PAGE ON THE CYL- 00027000
* INDER, AND D IS THE DEVICE CODE 00028000
* GPR1 = THE VIRTUAL MEMORY PAGE ADDRESS 00029000
* GPR2 = PARMS SUPPLIED TO DMKRPAGT TO BE PASSED TO DMKPTRAN - 00030000
* MAY BE BRING AND/OR CHANGE 00031000
* GPR11 = ADDRESS OF VMBLOK FOR OWNER OF VIRTUAL MEMORY 00032000
* GPR12 = ADDRESS OF DMKRPAGT OR DMKRPAPT 00033000
* GPR13 = ADDRESS OF SAVEAREA 00034000
* 00035000
* EXIT CONDITIONS - 00036000
* 00037000
* DMKRPAGT - NORMAL 00038000
* CC = 0 00039000
* GPR2 = REAL ADDRESS OF PAGE (PROVIDED THE BRING OPTION 00040000
* WAS SPECIFIED) 00041000
* 00042000
* DMKRPAGT - ERROR 00043000
* CC = 1 - DIAGNOSE 14 AND PAGE LOCKED FOR I/O 00043100
* CC = 2 - SPECIFIED ADDRESS IS A SHARED PAGE 00044000
* CC = 3 - FATAL IOERROR TRYING TO READ PAGE 00045000
* 00046000
* DMKRPAPT - NORMAL 00047000
* CC = 0 00048000
* 00049000
* DMKRPAPT - ERROR 00050000
* CC = 3 - FATAL IOERROR TRYING TO WRITE 00051000
* CC = 2 - FATAL PAGING ERROR TRYING TO RETRIEVE PAGE FROM BACK- 00052000
* ING STORE PRIOR TO WRITING 00053000
EJECT 00054000
* 00055000
* CALLS TO OTHER ROUTINES - 00056000
* 00057000
* DMKPTRAN - TO LOCATE INITIAL POSITION OF REFERENCED PAGE 00058000
* DMKPTRFT - CALLED TO RETURN RESIDENT PAGE TO FREELIST 00059000
* DMKPGTSP - CALL TO RETURN CURRENT DASD SYSTEM PAGE 00060000
* DMKPGTPR - CALLED TO RETURN CURRENT DASD PAGING PAGE SLOT 00061000
* DMKPTRUL - CALLED TO UNLOCK PAGE AFTER IT HAS BEEN WRITTEN 00062000
* DMKFREE - TO OBTAIN FREE STORAGE FOR A CPEXBLOK 00063000
* DMKPAGIO - TO MOVE THE REQUESTED FROM REAL MAIN STORAGE TO 00064000
* DASD 00065000
* DMKDSPCH - EXIT VIA GOTO TO WAIT FOR PAGE IO TO COMPLETE 00066000
* DMKSCHDL - CALLED TO DROP USER FROM RUNNABLE LIST 00067000
* DMKPGSPR RELEASE USER PAGES 00067100
* 00068000
* EXTERNAL REFERENCES - 00069000
* 00070000
* NONE 00071000
* 00072000
* TABLES / WORKAREAS - 00073000
* 00074000
* NONE 00075000
* 00076000
* REGISTER USAGE - 00077000
* 00078000
* GPR0 = CONTAINS DASD ADDRESS OF PAGE TO BE MOVED 00079000
* GPR1 = CONTAINS ADDRESS OF VIRTUAL PAGE 00080000
* GPR3 = INTERNAL SUBROUTINE LINKAGE 00081000
* GPR4 - NOT USED 00082000
* GPR5 = SWPTABLE ENTRY BASE 00083000
* GPR6 - NOT USED 00084000
* GPR7 = CORTABLE ENTRY BASE 00085000
* GPR8 - NOT USED 00086000
* GPR9 = PAGTABLE ENTRY BASE 00087000
* GPR10 - NOT USED 00088000
* GPR11 = VMBLOK BASE 00089000
* GPR12 = DMKRPA BASE 00090000
* GPR13 = SAVEAREA BASE 00091000
* GPR14 = EXTERNAL LINKAGE 00092000
* GPR15 = EXTERNAL LINKAGE 00093000
* 00094000
* NOTES - 00095000
* 00096000
* NONE 00097000
* 00098000
* OPERATION - 00099000
* 00100000
* THE OPERATION OF DMKRPAGT IS DESCIRBED IN SECTION A. BELOW, 00101000
* AND THE OPERATION OF DMKRPAPT IS DESCIRBED IN SECTION B. 00102000
* 00103000
*. 00104000
EJECT 00105000
COPY OPTIONS 00106000
COPY LOCAL OPTIONS 00107000
SPACE 2 00108000
DMKRPA CSECT 00109000
SPACE 3 00110000
EXTRN DMKPTRFT 00111000
EXTRN DMKPGTPR,DMKPGTSP @V304635 00112000
EXTRN DMKPTRUL 00113000
EXTRN DMKPAGIO 00114000
EXTRN DMKSCHDL 00115000
EXTRN DMKPTRWQ 00116000
EXTRN DMKPGSPR @V408246 00116100
EXTRN DMKVMI @VA04806 00116500
EXTRN DMKSYM @VA13364 00116700
SPACE 3 00117000
USING PSA,R0 00118000
USING CPEXBLOK,R1 00119000
USING SWPFLAG,R5 00120000
USING CORTABLE,R7 00121000
USING PAGCORE,R9 00122000
USING VMBLOK,R11 00123000
USING SAVEAREA,R13 00124000
EJECT 00125000
*. 00126000
* A. OPERATION OF DMKRPAGT - 00127000
* 1. ENQUEUE ON THE DESIRED PAGE VIA A CALL TO DMKPTRAN 00128000
* 2. IF THE PAGE IS RESIDENT, SKIP TO STEP 5, BELOW; OTHERWISE 00129000
* CONTINUE 00130000
* 3. USE THE ADDRESS OF THE PAGTABLE ENTRY RETURNED BY DMKPTRAN 00131000
* TO LOCATE THE SWPTABLE ENTRY FOR THE PAGE; IF THE CURRENT 00132000
* ADDRESS OF THE PAGE HAS BEEN DYNAMICALLY RECOMPUTED, RE- 00133000
* LEASE THE PAGE, AND IN ANY CASE STORE THE NEW DASD ADDRESS 00134000
* IN THE SWPTABLE ENTRY; THEN, GO TO STEP 5 00135000
* 4. LOCATE THE COTABLE, SWPTABLE AND PAGTABLE ENTRIES FOR THE 00136000
* RESIDENT PAGE AND RESET THE DASD ADDRESS AS IN STEP 00137000
* 3; THEN, CONTINUE 00138000
* 5. IF THE CALLER HAS NOT SPECIFIED,THE 'BRING' OPTION, EXIT; 00139000
* OTHERWISE CALL DMKPTRAN, PASSING THE BRING AND DEFER OPTION 00140000
* IN ADDITION TO CHANGE (IF SPECIFIED BY THE CALLER) 00141000
* 6. WHEN THE NEW PAGE IS RESIDENT, EXIT 00142000
*. 00143000
SPACE 00144000
DMKRPAGT RELOC 00145000
MVI SAVEWRK1,0 CLEAR DMKPTRAN ERROR SWITCH 00146000
MVI SAVEWRK2,0 CLEAR PUTRETURN SWITCH @VA08568 00146050
TRRETRY DS 0H @V408246 00146100
LA R2,DEFER+IOERETN SET OPTIONS FOR DMKPTRAN 00147000
TM SAVER2+3,SYSTEM USER REFERENCING SYSTEM V.M. 00148000
BZ *+8 NO -- 00149000
LA R2,SYSTEM(,R2) ADD THAT ALSO 00150000
CALL DMKPTRAN ENQUEUE ON PAGE 00151000
BZ RESIDENT PAGE IS RESIDENT -- 00152000
BC 2,DIE1 ADDRESSING ERROR 00153000
BC 1,SAVECODE IOERROR 00154000
NRESIDNT DS 0H @V408246 00155100
LR R9,R2 SAVE ADDRESS OF PAGTABLE ENTRY 00156000
N R1,=A(X'F000') CLEAR SEGMENT AND DISPLACEMENT FROM 00157000
SRL R1,11 ADDRESS, AND GET PAGE NUMBER TIMES 2 00158000
SR R2,R1 POINT TO START OF PAGE TABLE 00159000
S R2,F4 POINT TO SWPTABLE POINTER 00160000
L R5,0(,R2) POINT TO SWPTABLE 00161000
SLL R1,2 GET PAGE NUMBER TIMES 8 00162000
AR R5,R1 POINT TO SWPTABLE ENTRY 00163000
LA R3,CKBRING EXIT ADDRESS FOR SUBROUTINE 00164000
B CKRECMP AND GO TEST STATUS OF PAGE 00165000
EJECT 00166100
RESIDENT BAL R3,GETENTRY GO LOCATE CORTABLE, PAGTABLE AND SWPTABLE 00167000
* ENTRIES FOR PAGE, AND TEST RECOM STATUS 00168000
TM CORFLAG,CORCFLCK+CORRSV SPECIAL HANDLING? @V408246 00168100
BZ RESIDA NO, PROCESS NORMALLY @V408246 00168300
TM SAVER2+3,SYSTEM SYSTEM PAGE? @V408246 00168500
BO RESIDA YES, CONTINUE NORMALLY @V408246 00168700
AIF (NOT &VIRREAL).NOVR1X @V408246 00168900
C R11,AVMREAL VIRTUAL = REAL USER @V408246 00169100
BE RESIDA YES, BYPASS @V408246 00169300
.NOVR1X ANOP 00169500
LR R2,R1 BEGINNING AND ENDING ADDRESSES @V408246 00169700
* FOR REL. 00169900
CALL DMKPGSPR RELEASE PAGE @V408246 00170100
B TRRETRY START ALL OVER @V408246 00170300
RESIDA DS 0H @V408246 00170500
OI PAGCORE+1,PAGINVAL+PAGREF FLAG PAGE INVALID 00174000
OI VMESTAT,VMINVPAG SIGNAL PAGE TABLE ENTRY IS INVALID 00175000
OI APSTAT2,CPPTLBR SET PTLB REQUIRED FOR THIS @V407594 00175100
L R15,PREFIXB AND OTHER PROCESSOR @V407594 00175200
OI APSTAT2-PSA(R15),CPPTLBR (IF THERE IS ANOTHER) @V407594 00175300
AIF (NOT &VIRREAL).NOVR1 00176000
C R11,AVMREAL IS VIRT = REAL AREA IN USE ? @VA07519 00177000
BNE CLRTBL NO, CONTINUE 00178000
TM SAVER2+3,SYSTEM DOES THE SYSTEM OWN IT 00179000
BZ CKBRING NO, MUST BELONG TO A USER 00180000
.NOVR1 ANOP 00181000
CLRTBL SR R0,R0 ZERO OUT 00182000
ST R0,CORPGPNT OLD PAGTABLE POINTER 00183000
STH R0,PAGCORE AND ALSO THE PAGE ENTRY. 00184000
OI PAGCORE+1,PAGINVAL+PAGREF FLAG PAGE INVALID @V408246 00185100
L R15,CORFPNT PAGE'S OWNER @V408246 00186100
LH R0,VMPAGES-VMBLOK(,R15) OWNER'S PAGE COUNT @V408246 00187100
S R0,F1 DECREMENT @V408246 00188100
BM DIE3 SYSTEM PROBLEMS IF COUNT NEGATIVE@V408246 00189100
STH R0,VMPAGES-VMBLOK(,R15) @V408246 00190100
* 00191100
CALL DMKPTRFT PLACE PAGE ON FREE LIST @V408246 00192100
SPACE 00200100
TM VMMCR6,VMMVTMR IS TIMER ASSIST BEING USED ? @V3M5014 00200200
BZ CKBRING NO POTENTIAL PROBLEMS IF NOT @V3M5014 00200300
ICM R15,B'0111',VMMADDR VM ASSIST ON FOR USER ? @V3M5014 00200400
BZ CKBRING NO TIMER ASSIST IF NO VM ASSIST @V3M5014 00200500
USING MICBLOK,R15 ADDRESSABILITY TO POINTER LIST @V3M5014 00200600
L R1,XPAGNUM GET PAGE AND SEGMENT NUMBER MASK @V3M5014 00200700
N R1,SAVER1 GOING TO GET A NEW PAGE ZERO ? @V3M5014 00200800
BNZ CKBRING NO, TIMER ASSIST POINTER O.K. @V3M5014 00200900
LA R1,VMTIMER POINT TIMER ASSIST HERE... @V3M5014 00201000
ST R1,MICVTMR FOR UPDATING VIRTUAL TIMER VALUE @V3M5014 00201100
DROP R15 @V3M5014 00201200
SPACE 00201300
CKBRING TM SAVER2+3,BRING BRING NEW PAGE INTO CORE ?? 00202000
BZ EXIT NO -- FINISHED 00203000
LM R1,R2,SAVER1 RESTORE CALLER'S V.A. AND PARMS 00204000
LA R15,DEFER+IOERETN INSURE THESE OPTIONS ALSO @VA01234 00205000
OR R2,R15 ARE PASSED @VA01234 00206000
CALL DMKPTRAN CALL TO BRING IN PAGE 00207000
BZ SAVEADDR BRANCH IF IO SUCCESSFUL 00208000
BC 6,DIE1 BRANCH IF NOT RESIDENT OR ILLEGAL ADDR. 00209000
B EXIT IF IOERROR, RETURN CC3 TO CALLER 00210000
SPACE 2 00211000
SAVEADDR ST R2,SAVER2 PASS ADDRESS OF PAGE TO CALLER 00212000
SPACE 00213000
EXIT EXIT RETURN 00214000
SPACE 2 00215000
SAVECODE EQU * HERE OF I/O ERROR READING OLD PAGE 00216000
BALR R15,0 SAVE CONDITION CODE 00217000
ST R15,SAVEWRK1 IN SAVEAREA 00218000
B RESIDENT AND CONTINUE PROCESSING 00219000
EJECT 00220000
*. 00221000
* B. OPERATION OF DMKRPATP - 00222000
* 1. CALL DMKPTRAN VIA THE TRANS MACRO TO LOCATE THE PAGE TO 00223000
* BE MOVED, AND LOCK IT 00224000
* 2. LOCATE THE CORTABLE, SWPTABLE AND PAGTABLE ENTRIES FOR THE 00225000
* RESIDENT PAGE 00226000
* 3. SET UP A CPEXBLOK TO RETURN TO DMKRPATP, AND CALL DMKPAGIO 00227000
* TO WRITE THE PAGE; THEN, GO TO DMKDSPCH TO AWAIT THE 00228000
* INTERRUPT 00229000
* 4. AFTER THE PAGE HAS BEEN WRITTEN, CALL DMKPTRUL TO UNLOCK 00230000
* IT, PASS ANY IOERROR CODE BACK TO THE CALLER, AND EXIT 00231000
*. 00232000
SPACE 00233000
DMKRPAPT RELOC 00234000
MVI SAVEWRK1,0 CLEAR ERROR SWITCH 00235000
MVI SAVEWRK2,1 SET PUTRETURN SWITCH @VA08568 00235500
L R2,SAVER2 GET USER OPTIONS 00236000
LA R15,BRING+DEFER+LOCK ADD THESE OPTIONS ALSO @VA01234 00237000
OR R2,R15 TO WHAT IS PASSED @VA01234 00238000
CALL DMKPTRAN BRING IN PAGE 00239000
BC 2,DIE2 ADDRESSING ERROR 00240000
BC 1,SETCC2 IOERROR 00241000
BAL R3,GETENTRY 00242000
PUTRETRN DS 0H @V4M0167 00242010
OI SWPFLAG,SWPTRANS LOCK OUT UNTIL WRITE FINISHED @V408246 00242100
LA R0,CPEXSIZE GET CORE FOR A CPEXBLOK @V4M0167 00243100
CALL DMKFREE 00244000
LA R0,5 GET DASD READ DATA OP-CODE 00245000
STM R0,R15,CPEXR0 SAVE ALL REGS 00246000
LA R15,IORETN AND SET UP 00247000
ST R15,CPEXADD RETURN TO EXECUTION ADDRESS 00248000
LH R15,VMWCNT GET PAGE WAIT COUNT 00249000
LA R15,1(,R15) INCREMENT 00250000
STH R15,VMWCNT AND SAVE 00251000
OI VMRSTAT,VMPGWAIT SET USER IN PAGEWAIT 00252000
OI PAGCORE+1,PAGINVAL+PAGREF INVALIDATE ACROSS @V408246 00253100
* WRITE 00253200
TM VMRSTAT,VMNORUN-VMPGWAIT NOT RUNNABLE ALREADY? @V408246 00253300
BNZ NOSCHA YES, SCH ALREADY KNOWS @V408246 00253400
CALL DMKSCHDL HAVE SCH UPDATE RUNNING STATUS @V408246 00253500
NOSCHA DS 0H @V408246 00253600
L R15,=A(DMKPTRWQ) POINT TO PAGE WRITE REQUEST QUEUE 00254000
L R0,0(,R15) AND PUSH IT 00255000
ST R1,0(,R15) DOWN 00256000
ST R0,CPEXFPNT ... 00257000
GOTO DMKPAGIO GO GET THE I/O STARTED .. 00258000
SPACE 3 00259000
IORETN EQU * HERE AFTER PAGE HAS BEEN WRITTEN 00260000
NI SWPFLAG,X'FF'-SWPTRANS PAGE NO LONGER IN TRANSIT 00261000
ST R15,SAVEWRK1 SAVE ERROR FLAG 00262000
LH R15,VMWCNT GET PAGE WAIT COUNT 00263000
BCT R15,*+8 DECREMENT AND TEST COUNT @V408246 00264100
NI VMRSTAT,255-VMPGWAIT RESET PAGEWAIT (WHEN @V408246 00264600
* COUNT=0) 00265100
STH R15,VMWCNT @V408246 00265600
NI PAGCORE+1,255-PAGINVAL-PAGREF FINISHED, VALIDATE@V408246 00266100
TM VMRSTAT,VMNORUN STILL NON-RUNNABLE? @V408246 00266600
BNZ NOSCHB YES, SCH DOESN'T CARE @V408246 00267100
CALL DMKSCHDL INFORM SCH OF STATUS CHANGE @V408246 00267600
NOSCHB DS 0H @V408246 00268100
CALL DMKPTRUL AND UNLOCK THE CORTABLE ENTRY 00271000
TM SAVEWRK1,X'FF' ERROR RETURN FROM PAGEIO ?? 00272000
B EXIT EXIT, PASSING CODE TO CALLER 00273000
SPACE 2 00274000
SETCC2 CLI FFS,X'00' SET CONDITION CODE 2 00275000
B EXIT AND EXIT 00276000
SETCC1 CLI ZEROES,X'FF' SET CONDITION CODE 1 @VA07519 00276050
B EXIT AND EXIT @VA07519 00276150
* CONDITION CODE 1 WILL BE RETURNED TO: 00276200
* DMKHVD FOR DIAGNOSE 30 00276250
* AND TO DMKDRD FOR DIAGNOSE 14,34,AND 38 00276300
* IF THE PAGE IS LOCKED FOR I/O. 00276350
EJECT 00277000
GETENTRY EQU * HERE TO LOCATE TABLE ENTRIES, AND TEST FOR DASD PAGE 00278000
* TO RELEASE 00279000
LR R7,R2 SAVE REAL ADDRESS OF PAGE 00280000
SRL R7,8 GET PAGE ADDRESS/256 00281000
A R7,ACORETBL POINT TO CORTABLE ENTRY 00282000
L R9,CORPGPNT GET PAGTABLE POINTER 00283000
L R5,CORSWPNT AND SWPTABLE POINTER 00284000
CLI SAVEWRK2,0 RPAGT ? @VA08568 00284010
BNE CKRECMP NO, RPAPT @VA08568 00284020
TM SAVER2+3,SYSTEM WORKING WITH SYSTEM SPACE ? @VA08306 00284025
BO CKRECMP YES,BRANCH @VA08306 00284035
TM CORFLAG,CORIOLCK LOCKED FOR I/O ? @VA07519 00284050
BZ CKRECMP CONTINUE CHECKING @VA07519 00284150
C R11,AVMREAL IS IT THE V=R USER ?? @VA08925 00284155
BE CKRECMP YES, CONTINUE THE OLD WAY @VA08925 00284175
CLI VMINST,X'83' IS THIS A DIAGNOSE ? @VA07519 00284250
BNZ CKRECMP NOT DIAGNOSE,CONTINUE CHECKING @VA07519 00284350
CLI VMINST+3,DIAG38 DIAGNOSE X'38' ? @VA12172 00284375
BE CKRSTAT YES,NOW CHECK STATUS @VA12172 00284400
CLI VMINST+3,DIAG30 DIAGNOSE X'30' ? @VA12172 00284425
BE CKRSTAT YES,NOW CHECK STATUS @VA12172 00284450
CLI VMINST+3,DIAG34 DIAGNOSE X'34' ? @VA12172 00284475
BE CKRSTAT YES,NOW CHECK STATUS @VA12172 00284500
CLI VMINST+3,DIAG14 DIAGNOSE X'14' ? @VA12172 00284525
BNE CKRECMP NOT DIAGNOSE X'14' @VA12172 00284550
* NEITHER,CONTINUE CHECKING 00284575
TM CORFLAG,CORCFLCK LOCKED BY CONSOLE ? @VA12172 00284600
BZ CKRSTAT YES,NOW CHECK STATUS @VA12172 00284625
CLC CORLCNT,F1 IS CORE LOCK COUNT EXACTLY ONE ? @VA12172 00284650
BE CKRECMP YES,CONTINUE LOCKED BY CONSOLE @VA12172 00284675
CKRSTAT DS 0H @VA12172 00284700
TM VMRSTAT,VMEXWAIT IN INSTRUCTION WAIT ? @VA08568 00284750
BO SETCC1 YES, CURRENT INSTRUCTION @VA08568 00284850
SPACE 00285000
CKRECMP EQU * CHECK FOR SHARED PAGE, DASD RELEASE 00286000
TM SWPFLAG,SWPSHR IS THIS A SHARED SEGMENT PAGE ? 00287000
BO SETCC2 YES - WE CANNOT OVERLAY IT 00288000
TM SWPFLAG,SWPRECMP HAS DASD PAGE BEEN RE-ASSIGNED ? 00289000
BO STORDASD NO -- DO NOT RELEASE PAGE 00290000
TM SAVEWRK1,X'01' IOERROR READING OLD PAGE ?? 00291000
BO STORDASD YES -- DO NOT RELEASE ERROR PAGE 00292000
SPACE 00293000
L R15,=A(DMKPGTPR) ASSUME PAGE NOT FOR SYSTEM VMBL@V304635 00294000
TM SAVER2+3,SYSTEM IS IT FOR THE 'SYSTEM' ? @V304635 00295000
BZ *+8 IF NOT - RELEASE USER PAGE @V304635 00296000
L R15,=A(DMKPGTSP) OTHERWISE RELEASE SYSTEM PAGE @V304635 00297000
BALR R14,R15 NOW - RELEASE THE PAGE (DASD) @V304635 00298000
SPACE 00299000
STORDASD ST R0,SWPCYL INSERT NEW DASD ADDRESS IN SWPTABLE ENTRY 00300000
NI SWPFLAG,X'FF'-(SWPCHG1+SWPCHG2) @V4M0167 00300010
TM SAVEWRK2,1 ENTRY FROM DMKRPAPT ? @VA08568 00300140
BZR R3 NO, FROM DMKRPAGT @VA08568 00300240
TM SAVER2+3,SYSTEM WORKING WITH SYSTEM SPACE? @VA04806 00300400
BZR R3 NO @VA04806 00300500
L R15,=A(DMKVMI) AVOID WASTING EXTRA DASD PAGE @VA04806 00300600
CR R15,R1 FOR DMKVMI - R1 HAS VIR ADDRESS @VA04806 00300700
BZ RECMPOFF GOT DMKVMI GO TURN OFF RECMP @VA04806 00300800
L R15,=A(DMKSYM) GET ADDR OF SYMBOL TABLE @VA13364 00300900
CR R15,R1 FOR DMKSYM - R1 HAS VIR ADDRESS @VA13364 00301000
BZ RECMPOFF GOT DMKSYM GO TURN OFF RECMP @VA04806 00301100
BR R3 NOT SYM OR VMI, RETURN TO CALLER @VA13364 00301200
RECMPOFF DS 0H @VA13364 00301300
NI SWPFLAG,X'FF'-SWPRECMP @V4M0167 00301400
BR R3 AND RETURN TO CALLER 00301500
SPACE 3 00302000
DIE1 ABEND 1 DMKRPAGT - ADDRESS ERROR 00303000
SPACE 00304000
DIE2 ABEND 2 DMKRPAPT - ADDRESS ERROR 00305000
SPACE 00306000
DIE3 ABEND 3 DMKRPAGT - USER PAGE COUNT IS NEGATIVE 00307000
SPACE 00307050
DIAG14 EQU X'14' DIAGNOSE FOR DMKDRD @VA12172 00307150
DIAG30 EQU X'30' DIAGNOSE FOR DMKHVD @VA12172 00307250
DIAG34 EQU X'34' DIAGNOSE FOR DMKDRD @VA12172 00307350
DIAG38 EQU X'38' DIAGNOSE FOR DMKDRD @VA12172 00307450
EJECT 00308000
LTORG 00309000
EJECT 00310000
COPY VMBLOK 00311000
COPY CORE 00312000
PSA 00313000
COPY SAVE 00314000
COPY EQU 00315000
COPY MICBLOK @V3M5014 00315500
END 00316000