SVC TITLE 'DMKSVC (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKSVC 00006000 * 00007000 * CONTENTS - 00008000 * 00009000 * DMKSVCIN - SVC INTERRUPT HANDLER 00010000 * 00011000 * FUNCTION - 00012000 * 00013000 * TO PERFORM THE APPROPRIATE ACTIONS FOR VARIOUS 00014000 * TYPES OF SVC INTERRUPT CODES. 00015000 * 00016000 * ATTRIBUTES - 00017000 * 00018000 * SERIALLY REUSABLE, RESIDENT 00019000 * 00020000 * ENTRY POINTS - 00021000 * 00022000 * DMKSVCIN - SVC INTERRUPT HANDLER 00023000 * 00024000 * ENTRY POINTS - NON-EXECUTABLE 00025000 * 00026000 * DMKSVCNS - ADDRESS OF NEXT AVAILABLE SAVE-AREA 00027000 * DMKSVCLO - "DMKFRELO" MINUS LENGTH OF ONE SAVE-AREA 00028000 * DMKSVCHI - "DMKFREHI" 00029000 * 00030000 * ENTRY CONDITIONS - 00031000 * 00032000 * NONE, OTHER THAN THE INFORMATION IN THE 00033000 * OLD PSW AND INTERRUPT CODE. 00034000 * 00035000 * EXIT CONDITIONS - 00036000 * 00037000 * (SEE "OPERATION"). 00038000 * 00039000 * SYSTEM ABEND CODES - 00040000 * 00041000 * SVC001 - SAVE-AREA SCRATCHPAD EXHAUSTED ON LINK REQUEST 00042000 * SVC002 - SUPERVISOR STATE SVC WITHOUT SYSTEM LOCK 00043000 * SVC003 - PAGING I/O ERROR ON LINK TO CP PAGEABLE ROUTINE 00044000 EJECT 00045000 * CALLS TO OTHER ROUTINES - 00046000 * 00047000 * DMKDSPCH - TO DISPATCH A VIRTUAL MACHINE 00048000 * DMKDSPB - TO CHECK OUT A WAIT-STATE PSW 00049000 * DMKDSPRU - TO UNRUN THE CURRENT USER AND DISPATCH ANOTHER 00050000 * DMKSTKDE - TO STACK A DEFERRED RETURN WITH SYSTEM LOCK 00051000 * DMKSTKSW - TO STACK PRIORITY BLOK FOR OTHER PROCESSOR 00052000 * DMKPRGRF - TO REFLECT AN SVC INTERRUPT TO A VIRTUAL MACHINE 00053000 * DMKDMPDK - TO DUMP THE MACHINE IN CASE OF A FATAL ERROR 00054000 * DMKPTRUL - TO UNLOCK A PAGE ON RETURN FROM PAGEABLE PROGRAM 00055000 * DMKFREE - TO OBTAIN FREE STORAGE FOR CALL LINKAGE 00056000 * DMKTRCSV - TO HANDLE A USER SVC WHEN VM TRACING IS ON 00057000 * DMKCFMBK - PLACE USER IN CF MODE ADSTOP 00058000 * DMKQCNWT - WRITE ADSTOP MESSAGE 00059000 * DMKFRET - TO RELEASE ADSTOP BUFFER 00060000 * DMKTRCIT - TO RE-INITIALIZE INSTRUCTION TRACING FOR ADSTOP 00061000 * DMKTRCPB - TO RESET OLD INSTRUCTION TRACING IF NECESSARY 00062000 * DMKVERO - TO PROCESS AN SVC76 REQUEST FROM OS 00063000 * DMKVERD - TO PROCESS AN SVC76 REQUEST FROM DOS 00064000 * DMKCVTBH - TO CONVERT ADSTOP ADDRESS TO PRINTABLE CHARS 00065000 * DMKPSACG - TO END CURRENT SUPERVISOR STATE CHARGES TO USER 00066000 * DMKLOKDF - TO TEST STATE OF GLOBAL SYSTEM LOCK 00067000 SPACE 00068000 * EXTERNAL REFERENCES - 00069000 * 00070000 * DMKSLC - END OF V=R STORAGE FOR FREE SAVE-AREA MGMT. 00071000 * DMKLOKSY - GLOBAL SYSTEM LOCK (FOR AP SUPPORT) 00072000 * 00073000 * TABLES / WORK AREAS - 00074000 * 00075000 * SVCREGS - REGISTER SAVE AREA IN PAGE 0 00076000 * DUMPSAVE - REGISTER CONTENTS AT TIME OF ABEND (IN PAGE 0) 00077000 * DMKSYSVM - VMBLOK OF CP370 SYSTEM 00078000 * DMKSYSOP - SYSTEM OPERATOR'S VMBLOK 00079000 * REGISTER USAGE - 00080000 * 00081000 * GPR 12 = BASE REGISTER FOR CALLED ROUTINE 00082000 * GPR 13 = ADDRESS OF STANDARD SAVE AREA FOR CALLED ROUTINE 00083000 * 00084000 * GPRS 0-11 AND 14-15 NOT USED (OR ARE PRESERVED) 00085000 * 00086000 * SYSTEM LOCK REQUIREMENTS - 00087000 * 00088000 * FROM PROBLEM STATE: 00089000 * THE SYSTEM LOCK IS NEVER HELD ON ENTRY. 00090000 * FOR SVC 76 OR X'B3' THE LOCK IS ACQUIRED IF THE SVC 00091000 * IS NOT TO BE REFLECTED TO THE VIRTUAL MACHINE. 00092000 * FOR SVC S FAST REFLECTED TO THE VIRTUAL MACHINE THE 00093000 * LOCK IS NOT ACQUIRED. 00094000 * FOR SVC S SLOW REFLECTED, THE LOCK IS ACQUIRED BEFORE 00095000 * CONTROL IS PASSED TO DMKPRGRF. 00096000 * FROM SUPERVISOR STATE: 00097000 * SVC 0 - THE STATE OF THE SYSTEM LOCK IS UNPREDICTABLE. 00098000 * ALL OTHER SVC S - THE SYSTEM LOCK IS HELD ON ENTRY. 00099000 EJECT 00100000 * OPERATION - 00101000 * 00102000 * SVC-INTERRUPTIONS ARE HANDLED AS FOLLOWS: 00103000 * 00104000 * 1. IF THE MACHINE WAS IN PROBLEM STATE, DMKSVCIN TAKES 00105000 * THE FOLLOWING ACTION: 00106000 * 00107000 * A. THE SVC INTERRUPT CODE IS EXAMINED TO DETERMINE IF 00108000 * THE INTERRUPT CODE IS FOR 'ADSTOP' (SVC CODE X'B3') 00109000 * OR FOR ERROR RECORDING (SVC CODE X'4C'). IF NOT, 00110000 * CONTROL IS GIVEN TO STEP B. 00111000 * FOR AN 'ADSTOP' SVC, THE SYSTEM LOCK IS ACQUIRED, THE 00112000 * MESSAGE 'ADSTOP AT XXXXX' IS SENT TO THE USER, THE 00113000 * OVERLAYED INSTRUCTION IS REPLACED, AND IF THE USER 00114000 * WANTS VM ASSIST TO HANDLE SVCS, VM ASSIST SVC HANDLING 00115000 * IS TURNED BACK ON. FINALLY THE USER IS 00116000 * PLACED IN CONSOLE FUNCTION MODE VIA A CALL TO 00117000 * DMKCFMBK. 00118000 * FOR AN SVC 76, GENERAL REGISTERS 0 AND 1 ARE CHECKED 00119000 * FOR VALID OS OR DOS ERROR RECORDING PARAMETERS. 00120000 * IF INVALID, CONTROL IS GIVEN TO STEP B. OTHERWISE 00121000 * THE SYSTEM LOCK IS ACQUIRED, AND DMKVER IS CALLED TO 00122000 * FURTHER PROCESS THE RECORDING REQUEST. IF CONTROL IS 00123000 * RETURNED FROM DMKVER, THE REQUEST WAS INVALID, THUS THE 00124000 * SVC 76 MUST BE REFECTED TO THE USER. IN THIS CASE 00125000 * CONTROL IS GIVEN TO STEP C. 00126000 * 00127000 * B. IF THE VIRTUAL MACHINE'S REAL PAGE ZERO IS IN STORAGE 00128000 * AN APPROPRIATE SVC OLD PSW IS STORED, AND NEW PSW 00129000 * FETCHED IN ORDER TO "FAST REFLECT" THE INTERRUPT TO THE 00130000 * VIRTUAL MACHINE WITHOUT UNNECESSARY REGISTER SAVING OR 00131000 * DISPATCHING OVERHEAD. THE NEW PSW IS CHECKED FOR MODE 00132000 * OR ENABLEMENT CHANGES WHICH PRECLUDE "FAST REFLECT", 00133000 * AND IF FOUND, THE SYSTEM LOCK IS ACQUIRED BEFORE 00134000 * CONTROL IS PASSED TO DMKDSPB FOR PSW VALIDATION; FOR 00135000 * SUCCESSFUL "FAST REFLECT" CONTROL IS PASSED DIRECTLY 00136000 * BACK TO THE VIRTUAL MACHINE WITHOUT FURTHER PROCESSING. 00137000 * 00138000 * C. FOR NORMAL REFLECTION OF AN INTERRUPT TO A VIRTUAL 00139000 * MACHINE, ITS GENERAL AND FLOATING POINT REGISTERS ARE 00140000 * SAVED, ITS VMBLOK IS MARKED IN INSTRUCTION-WAIT, THE 00141000 * ACTIVE INTERRUPT STATUS INFORMATION IS LOADED INTO 00142000 * INTO REGISTERS, THE SYSTEM LOCK IS ACQUIRED, AND 00143000 * CONTROL IS PASSED VIA 'GOTO' TO DMKPRGRF. 00144000 EJECT 00145000 * OPERATION (CONTINUED) - 00146000 * 00147000 * 2. IF THE MACHINE WAS IN SUPERVISOR STATE, DMKSVCIN VALIDATES 00148000 * THAT THE SYSTEM LOCK IS HELD FOR ALL CASES EXCEPT SVC 0, 00149000 * ABENDING IF NOT, AND THEN TAKES ONE OF THE FOLLOWING STEPS, 00150000 * DEPENDING ON THE INTERRUPT CODE: 00151000 * 00152000 * SVC 0: THIS INDICATES AN "IMPOSSIBLE" CONDITION, OR FATAL 00153000 * ERROR; THE GENERAL REGISTERS ARE SAVED IN THE 00154000 * DUMPSAVE AREA, AND DMKDMPDK IS INVOKED TO DUMP THE 00155000 * MACHINE. THE SYSTEM THEN DOES A SOFTWARE RE-IPL. 00156000 * 00157000 * SVC 4: RESERVED FOR FUTURE USE. AT PRESENT, THIS IS 00158000 * HANDLED LIKE SVC 0. 00159000 * 00160000 * SVC 8: THIS INDICATES A "CALL" TO A VM/370 ROUTINE WHOSE 00161000 * ADDRESS IS SPECIFIED IN BITS 8-31 OF REGISTER 15. THE 00162000 * AFFINITY FLAG (BIT 0 OF REG 15), IF ON, SPECIFIES THAT 00163000 * WHEN CONTROL IS RETURNED TO THE CALLER, IT SHOULD 00164000 * BE ON THE PROCESSOR INITIATING THE CALL. A NEW SAVE 00165000 * AREA IS OBTAINED (DMKFREE BEING CALLED IF NECESSARY), 00166000 * AND THE CALLER'S ADDRESSABILITY (GPR 12), SAVE-AREA 00167000 * ADDRESS (GPR 13) AND THE RETURN ADDRESS (FROM THE 00168000 * SVC OLD PSW) ARE PRESERVED IN THE NEW SAVE-AREA. 00169000 * (IF AFFINITY WAS SPECIFIED, THE CURRENT PROCESSOR ID 00170000 * IS PLACED IN A SAVE-AREA FIELD WHICH IS OTHERWISE 0.) 00171000 * THEN, IF THE CALLED ROUTINE (SPECIFIED BY GPR 15) IS 00172000 * WITHIN THE CP370 NUCLEUS, ITS ADDRESS IS PLACED IN GPR 00173000 * 12, AND CONTROL IS TRANSFERRED TO THE CALLED ROUTINE. 00174000 * 00175000 * IF, ON THE OTHER HAND, THE CALLED ROUTINE IS NOT 00176000 * WITHIN THE CP370 NUCLEUS, BUT IS IN A PAGEABLE 00177000 * MODULE, THEN ALL NEEDED REGISTERS AND CONTROL 00178000 * INFORMATION IS PRESERVED IN THE NEW SAVE-AREA, AND 00179000 * A "TRANS" IS ISSUED TO HAVE THE PAGING ROUTINES 00180000 * BRING IN THE PAGE CONTAINING THE NEEDED MODULE. 00181000 * WHEN RETURN FROM THE "TRANS" OCCURS, THE REAL 00182000 * ADDRESS OF THE PAGEABLE ROUTINE IS PLACED IN GPR 12, 00183000 * AND CONTROL IS THEN TRANSFERRED TO THE CALLED ROUTINE. 00184000 * 00185000 * SVC 12: THIS INDICATES A "RETURN" FROM A CALLED ROUTINE TO 00186000 * THE CALLING ROUTINE. THE SAVE-AREA IS EXAMINED FOR 00187000 * PROCESSOR AFFINITY, WHICH, IF SPECIFIED AND 00188000 * NON-MATCHING, CAUSES STACKING TO THE SPECIFIED 00189000 * PROCESSOR BEFORE RETURN PROCEEDS. IF THE RETURNING 00190000 * ROUTINE IS A PAGEABLE MODULE, DMKPTRUL IS CALLED 00191000 * RETURN IS A PAGEABLE CP370 MODULE, DMKPTRUL IS CALLED 00192000 * TO UNLOCK THE PAGE; IN ANY EVENT, THE ADDRESSABILITY 00193000 * (GPR 12) AND SAVE-AREA ADDRESS (GPR 13) OF THE CALLER 00194000 * ARE THEN RESTORED, THE RETURN ADDRESS IS PLACED IN THE 00195000 * SVC OLD PSW, AND CONTROL IS RETURNED TO THE CALLING 00196000 * PROGRAM BY LOADING THE SVC OLD PSW. 00197000 EJECT 00198000 * OPERATION (CONTINUED ) - 00199000 * 00200000 * SVC 16: THIS CODE INDICATES THAT THE "CURRENT" SAVE AREA IS 00201000 * TO BE RELEASED, WITHOUT ANY TRANSFER OF CONTROL. THE 00202000 * CHAIN OF SAVE-AREAS USED BY SVC 8 & SVC 12 IS REVISED 00203000 * TO INCLUDE THE SAVE-AREA BEING RETURNED, AND CONTROL 00204000 * IS RETURNED TO THE PROGRAM WHICH ISSUED THE SVC 16. 00205000 * 00206000 * SVC 20: THIS CODE INDICATES THAT A NEW SAVE-AREA IS TO BE 00207000 * GIVEN TO THE CALLER, WITHOUT ANY TRANSFER OF CONTROL. 00208000 * THE NEXT AVAILABLE SAVE-AREA IN THE CHAIN USED BY 00209000 * SVC 8 & SVC 12 IS DETACHED FROM THE CHAIN, AND 00210000 * RETURNED TO THE CALLER IN GPR 13. NO CONTROL TRANSFER 00211000 * TAKES PLACE - CONTROL BEING RETURNED TO THE CALLER 00212000 * OF THE SVC 20. 00213000 * 00214000 * SVC 24: THIS CODE CAUSES CONTROL TO BE PASSED TO THE MAIN 00215000 * PROCESSOR AT THE INSTRUCTION FOLLOWING THE SVC. 00216000 * ALL GENERAL REGISTERS ARE PRESERVED, BUT PSW FIELDS 00217000 * OTHER THAN THE INSTRUCTION COUNTER ARE NOT. 00218000 * 00219000 * 00220000 * 00221000 * SVC 76: THIS CODE IS IGNORED, CAUSING NO OPERATION. 00222000 * IF THIS SYSTEM IS RUNNING ON A VIRTUAL MACHINE, 00223000 * DMKIOF ISSUES AN 'SVC 76' WHICH SHOULD CAUSE THE 00224000 * NATIVE HYPERVISOR TO RECORD AN I/O ERROR AND NO-OP 00225000 * THE SVC; HOWEVER, IF THE NATIVE HYPERVISOR DOES NOT 00226000 * RECOGNIZE VALID ERROR RECORDING REGISTERS AT THE TIME 00227000 * OF THE SVC, IT WILL REFLECT IT TO THIS SYSTEM, IN 00228000 * WHICH CASE IT SHOULD BE IGNORED. 00229000 *. 00230000 EJECT 00231000 COPY OPTIONS 00232000 COPY LOCAL 00233000 DMKSVC START 0 -LOADER CONTROL- @V407579 00234000 SPACE 00235000 ENTRY DMKSVCIN @V407579 00236000 ENTRY DMKSVCNS = INTERNAL SYMBOL "NEXTSAVE" @V407579 00237000 ENTRY DMKSVCLO CONTAINS (DMKFRELO -L'SAVEAREA) @V407579 00238000 ENTRY DMKSVCHI CONTAINS (DMKFREHI) @V407579 00239000 SPACE 00240000 EXTRN DMKPRGRF 00241000 AIF (NOT &TRACE(6)).TRA1 ***AIF*** 00242000 EXTRN DMKTRCSV TO HANDLE USER SVC WHEN VM TRACING IS ON 00243000 EXTRN DMKTRCIT TO RE-INITIALIZE INSTRUCTION TRACING 00244000 EXTRN DMKTRCPB TO RESET OLD INSTRUCTION TRACING (IF ANY) 00245000 .TRA1 ANOP 00246000 EXTRN DMKDMPDK @V407579 00247000 EXTRN DMKCVTBH 00248000 AIF (NOT &VIRREAL).NOVR1 00249000 EXTRN DMKSLC HIGH END OF V=R AREA (IF ANY) - OR 0 00250000 .NOVR1 ANOP 00251000 EXTRN DMKPTRUL @V200820 00252000 EXTRN DMKCFMBK 00253000 EXTRN DMKDSPB 00254000 AIF (NOT &AP).DSPRU4 00254900 EXTRN DMKDSPRU DISPATCH UNLOCKED PARALLEL PATH @V407579 00255000 EXTRN DMKSTKDE STACK OF DEFERRED LOCKED RETURN @V407579 00256000 EXTRN DMKSTKSW STACK BLOK FOR OTHER PROCESSOR @V4M0141 00257000 EXTRN DMKLOKSY GLOBAL SYSTEM LOCK @V407579 00258000 .DSPRU4 ANOP 00258100 EXTRN DMKVERO,DMKVERD @V200226 00259000 SPACE 2 00260000 USING PSA,0 @V407579 00261000 SPACE 1 00262000 OPCODEEX EQU X'44' S/370 OP CODE FOR 'EXECUTE' INST.@V407579 00263000 * 00264000 SVCCRETN EQU 12 VM/370 SVC CODE FOR 'RETURN' @V407579 00265000 SVCCIOER EQU 76 OS/DOS/370 SVC CODE FOR I/O ERROR@V407579 00266000 SVCCSTOP EQU X'B3' VM/370 ADSTOP PLANTED 'SVC' CODE @V407579 00267000 * 00268000 D2MASK EQU X'00000FFF' MASK FOR S/370 INST. DISPLACEMENT@V407579 00269000 * 00270000 INCRBY1 EQU 1 USED TO INCREMENT COUNTERS BY 1 @V407579 00271000 * 00272000 EQUAL EQU B'1000' CONDITION CODE MASK @V407579 00273000 EJECT 00274000 **** SVC ROUTINES **** 00275000 SPACE 00276000 DMKSVCIN DS 0H SVC FLIH %V4M0144 00277000 OI CPSTATUS,CPSUPER INDICATE SUPERVISOR STATE %V4M0144 00278000 STM R12,R15,SVCREGS SAVE REGISTERS %V4M0144 00279000 L R12,SVCNPSW+4 OBTAIN ADDRESSABILITY %V407579 00280000 USING DMKSVCIN,R12 %V407579 00281000 TM SVCOPSW+1,PROBMODE CHECK FOR PROBLEM MODE %V3M4038 00282000 BO REFSVC YES - REFLECT IT. %V3M4038 00283000 AIF (NOT &TRACE(9)).TR1 00284000 TM TRACFLG1,TRAC02 TRACING ACTIVE? %V3M4038 00285000 BZ NOTRAC1 BRANCH IF NOT %V3M4038 00286000 TRACE CODE=TRCSVC,R14,R13,R15 TRACE SUPERVISOR SVC %V407579 00287000 USING TRACETBL,R14 %V407579 00288000 L R13,SVCR13 REFRESH R13 %V407579 00289000 L R15,SVCR15 REFRESH R15 %V407579 00290000 STCM R15,B'0111',TRACEADR TRACE R15 ON ENTRY %V407579 00291000 CLI INTSVC+1,SVCCRETN TEST FOR 'RETURN' SVC %V407579 00292000 BNE NOT0C NO... LEAVE R15 IN ENTRY %V3M4038 00293000 MVC TRACEADR,SAVERTN-SAVEAREA(R13) TRACE CALLER %V407579 00294000 NOT0C MVC TRACECOD,INTSVCL SAVE INTERRUPT ILC AND CODE %V407579 00295000 MVC TRACEPSW,SVCOPSW SAVE SVC OLD PSW %V407579 00296000 DROP R14 %V407579 00297000 NOTRAC1 EQU * %V3M4038 00298000 .TR1 ANOP 00299000 CLI INTSVC+1,SVCCIOER TEST FOR VM/370 ERROR RECORD%V407579 00300000 BE SVCIGNOR IGNORE SVC 76 FROM DMKIOF %V407579 00301000 LH R14,INTSVC GET SVC INTERRUPT-CODE %V407579 00302000 AIF ('&AP' EQ '1').APON4 00302600 B SVCODES(R14) HANDLE SVC VIA BRANCH TABLE %V407579 00302700 AGO .APOFF4 00302800 .APON4 ANOP 00302900 TM APSTAT1,APUOPER TEST FOR AP SYSTEM %V407579 00303000 BZ SVCODES(R14) HANDLE SVC VIA BRANCH TABLE %V407579 00304000 L R15,=A(DMKLOKSY+2) ACCESS THE SYSTEM LOCK %V407579 00305100 CLC LPUADDR,0(R15) TEST FOR CURRENTLY HELD %V407579 00305600 L R15,SVCR15 REFRESH R15 %V407579 00306100 BE SVCODES(R14) HANDLE SVC VIA BRANCH TABLE %V407579 00306600 LTR R14,R14 TEST FOR SVC 0 EXPLICITLY @V407579 00309000 BZ SVCODES(R14) IF SO, VALID DIE @V407579 00310000 ABSVC MVC CPABEND,SVC002 SET ABEND FOR LACK OF LOCK @V407579 00311000 B SVCDIE2 @V407579 00312000 SVC002 DC C'SVC',AL1(2) ABEND CODE FOR SVC W/O SYS LOCK @V407579 00313000 .APOFF4 ANOP 00313100 SPACE 00314000 SVCODES DS 0F BRANCH-TABLE FOR SVC-CODES: 00315000 CODE0 B SVCDIE FATAL CONDITION - INTO HARD WAIT STATE. 00316000 CODE4 B SVCDIE SVC 4 NOT VALID 00317000 CODE8 B SVCLINK LINK REQUEST. %V3M4038 00318000 CODE12 B SVCRET RETURN REQUEST. %V3M4038 00319000 CODE16 B SVCRLSE RELEASE CURRENT SAVE AREA. 00320000 CODE20 B SVCGET GET NEXT SAVE AREA 00321000 CODE24 B SVCSWIT SWITCH CONTROL TO MAIN PROC. @V407579 00322000 NSVCODES EQU *-SVCODES COUNT OF SVC CODES. 00323000 EJECT 00324000 REFSVC DS 0D DO FAST REFLECT OF USER SVC IF POSSIBLE: 00325000 LCTL C8,C8,CPCREG8 RESET HOST SYSTEM'S MC MASK @V3M4026 00326000 LA R15,INCRBY1 COUNT USER SVCS (BY PROCESSOR) @V407579 00327000 AL R15,PSASVCCT @V407579 00328000 ST R15,PSASVCCT AND SAVE 00329000 L R14,RUNUSER ACCESS VMBLOK OF RUNNING USER @V4M0203 00330000 USING VMBLOK,R14 @V4M0203 00331000 STPT VMTMOUTQ STOP CHARGING FOR PROBLEM TIME 00332000 CHARGE START START CHARGING SUPERVISOR TIME @V407579 00333000 DROP R14 @V4M0203 00334000 MVC QUANTUMR,TIMER SAVE INTERVAL TIMER @VA01775 00335000 AIF (NOT &TRACE(9)).TR3 00336000 TM TRACFLG1,TRAC02 TRACING ACTIVE? 00337000 BZ NOTRAC3 BRANCH IF NOT 00338000 TRACE CODE=TRCSVC,R15,R13,R14 TRACE USER SVC REFLECT @V407579 00339000 USING TRACETBL,R15 @V407579 00340000 MVC TRACEADR,SVCR15+1 SHOW R15 AT ENTRY @V407579 00341000 MVC TRACECOD,INTSVCL SAVE INTERRUPT ILC AND CODE @V407579 00342000 MVC TRACEPSW,SVCOPSW SAVE SVC OLD PSW @V407579 00343000 NOTRAC3 EQU * 00344000 .TR3 ANOP 00345000 L R15,RUNUSER ACCESS VMBLOK OF RUNNING USER @V4M0203 00346000 USING VMBLOK,R15 @V4M0203 00347000 CLI INTSVC+1,SVCCIOER TEST FOR ERROR RECORDING @V407579 00348000 BE SVCVER YES - GO VERIFY PARAMETER REGS. @V200226 00349000 CLI INTSVC+1,SVCCSTOP TEST FOR VM/370 ADSTOP @V407579 00350000 BE SVCADSTP YES, CHECK IT OUT @VA05407 00351000 TSTRACE LCTL C0,C0,CPCREG0 SET TO CP ARCHITECTURE @VA05407 00352000 AIF (NOT &TRACE(6)).TRA2 ***AIF*** 00353000 TM VMTRCTL,VMTRSVC+VMTRBRIN VM TRACING IN EFFECT ? 00354000 BNZ REFSVCB TRF IF YES. 00355000 .TRA2 ANOP 00356000 TM VMESTAT,VMEXTCM IS VM IN EXTENDED CONTROL MODE? 00357000 BO REFECMOD DO EC-MODE FAST REFLECT, IF SO @V407579 00358000 LRA R13,PSA TRY ADDRESSABILITY TO USER'S PSA @V407579 00359000 BNZ REFSVCB IF NOT IN, MAKE DMKPRGRF DO THE WORK 00360000 L R14,SVCOPSW+4 GET ADDRESS FROM SVC-OLD-PSW 00361000 ST R14,SVCOPSW+4-PSA(,R13) USER'S OLD IC @V407579 00362000 L R14,INTSVCL GET ILC (BITS 13-14) AND CODE @V407579 00363000 SRL R14,3 MOVE ILC TO BITS 16-17 @V407579 00364000 O R14,SVCOPSW COMBINE WITH CC, PGM MASK @V407579 00365000 STCM R14,B'0010',SVCOPSW+4-PSA(R13) USER'S ILC,CC@V407579 00366000 L R14,INTSVCL GET SVC INTERRUPT CODE @V407579 00367000 REFMASK ICM R14,B'1100',VMPSW GET VIRTUAL MASK, KEY, MODE @V407579 00368000 ST R14,SVCOPSW-PSA(,R13) USER'S MASK, KEY, MODE @V407579 00369000 L R14,SVCNPSW-PSA(,R13) GET USER'S NEW MASK,ETC@V407579 00370000 L R13,SVCNPSW+4-PSA(,R13) GET USER'S NEW IC @V407579 00371000 ST R13,VMPSW+4 00372000 LA R13,0(,R13) STRIP ALL BUT IC @V407579 00373000 ST R13,RUNPSW+4 SET NEW IC FOR RE-ENTRY TO USER @V407579 00374000 L R13,VMPSW KEEP TRACK OF FORMER MASK/MODE @V407579 00375000 ST R14,VMPSW ESTABLISH NEW USER MASK/MODE @V407579 00376000 XR R13,R14 IDENTIFY CHANGING PSW STATES @V407579 00377000 NR R13,R14 GOING FROM ZERO TO ONE @V407579 00378000 N R13,BCBADBIT X'FF0A0000' BITS OF INTEREST @V407579 00379000 BNZ REFSVCA IF NOT, MAKE "DISPATCH" DO THE WORK. 00380000 TM VMPEND,VMPERPND PER INTERRUPT PENDING? PER001 00380100 BO REFSVCA YES. GO TO DMKDSPB TO PROCESS IT. PER001 00380200 ICM R14,B'0010',VMPSW+4 GET USER'S NEW CC, PGM MASK @V407579 00381000 N R14,MODEBUSR X'00F03F00' PSW BITS SET BY USER @V407579 00382000 TM VMPSTAT,VMV370R EXTENTED MACHINE ? @VA08573 00382100 BO REFRUN1 YES,GO RELOAD CTL REGS @VA08573 00382200 REFRUN O R14,MODEBSYS X'070D0000' PSW BITS SET BY CP @V407579 00383000 ST R14,RUNPSW PROPER RE-ENTRY PSW (FIRST HALF) @V407579 00384000 TM VMTRCTL,VMTRPER IS "PER" IN USE? PER001 00384100 BNO *+8 NO, SKIP TURNING IT ON PER001 00384200 OI RUNPSW,PERMODE TURN ON PER BIT PER001 00384300 LR R13,R11 PRESERVE USER'S R11 @V407579 00385000 LR R11,R15 STANDARD ADDRESSABILITY @V407579 00386000 DROP R15 @V407579 00387000 USING VMBLOK,R11 @V407579 00388000 CHARGE STOP END OF SUPERVISOR CHARGES @V407579 00389000 SPT VMTMOUTQ START CHARGING PROBLEM TIME 00390000 DROP R11 @V407579 00391000 LR R11,R13 RESTORE USER'S R11 @V407579 00392000 L R12,QUANTUMR CHECKPOINT TIMER @V4M0167 00393000 S R12,TIMER - (CURRENT TIMER) -> SUPERVISOR @V4M0167 00394000 L R13,QUANTUM ORIGINAL TIME @V4M0167 00395000 SR R13,R12 - SUPERVISOR @V4M0167 00396000 ST R13,QUANTUM . . WILL EVENTUALLY GIVE PROBLEM @V4M0167 00397000 MVI CPSTATUS,CPRUN INDICATE RUNNING USER STATUS @V4M0156 00398000 LM R12,R15,SVCREGS NOW RESTORE THE REG'S WE USED 00399000 LPSW RUNPSW AND AWAY WE GO. 00400000 * 00401000 USING VMBLOK,R15 @V407579 00402000 REFECMOD LCTL C1,C1,VMSEG REVERT TO USER'S REAL SPACE @V407579 00403000 LRA R13,PSA TRY ADDRESSABILITY TO USER'S PSA @V407579 00404000 BNZ REFSVCB IF NOT AVAILABLE, SLOW REFLECT @V407579 00405000 L R14,SVCOPSW+4 GET ADDRESS FROM SVC-OLD-PSW @V407579 00406000 ST R14,SVCOPSW+4-PSA(,R13) USER'S OLD IC @V407579 00407000 L R14,INTSVCL GET ILC (BITS 13-14) AND CODE @V407579 00408000 ST R14,INTSVCL-PSA(,R13) USER'S EC-MODE CODE @V407579 00409000 L R14,SVCOPSW GET CC, PGM MASK @V407579 00410000 ICM R14,B'1100',VMPSW GET VIRTUAL MASK, KEY, MODE @V407579 00411000 ST R14,SVCOPSW-PSA(,R13) USER'S MASK, KEY, MODE @V407579 00412000 L R14,SVCNPSW-PSA(,R13) GET USER'S NEW MASK,ETC@V407579 00413000 L R13,SVCNPSW+4-PSA(,R13) GET USER'S NEW IC @V407579 00414000 ST R13,VMPSW+4 SET NEW IC @V407579 00415000 ST R13,RUNPSW+4 SET NEW IC FOR RE-ENTRY TO USER @V407579 00416000 L R13,VMPSW KEEP TRACK OF FORMER MASK/MODE @V407579 00417000 ST R14,VMPSW ESTABLISH NEW USER MASK/MODE @V407579 00418000 CLI VMPSW+4,0 CHECK MUST-BE-ZERO BITS OF EC PSW@V407579 00419000 BNE REFSVCA IF NOT, MAKE DISPATCH CHECK IT @V407579 00420000 XR R13,R14 IDENTIFY CHANGING PSW STATES @V407579 00421000 N R13,ECBADBIT X'FF0AC0FF' BITS OF INTEREST @V407579 00422000 BNZ REFSVCA USE DISPATCH CHECK-OUT, IF ANY @V407579 00423000 REFRUN1 DS 0H @VA08573 00423100 LCTL C0,C1,RUNCR0 RESTORE RUNNING ADDRESS SPACE @V407579 00424000 L R13,VMECEXT ACCESS EC-MODE VMBLOK EXTENSION @V407579 00425000 LCTL C8,C8,EXTCR8-ECBLOK(R13) TO REFRESH MONITOR MASK@V407579 00426000 B REFRUN CONTINUE INTERRUPT REFLECTION @V407579 00427000 DROP R15 @V407579 00428000 * 00429000 CNOP 0,4 ALIGNMENT FOR FOLLOWING FIELDS @V407579 00430000 BCBADBIT DC AL1(X'FF',EXTMODE+WAIT,0,0) MUST NOT COME ON @V407579 00431000 ECBADBIT DC AL1(X'FF',EXTMODE+WAIT,X'C0',X'FF') NO FLIPS@V407579 00432000 MODEBUSR DC AL1(0,X'F0',X'3F',0) USER BITS: KEY, CC, PGM@V407579 00433000 MODEBSYS DC AL1(TRANMODE+IOMASK+EXTMASK,EXTMODE+MCHEK+PROBMODE,0,0) 00434000 SPACE 3 00435000 REFSVCA DS 0H LET 'DISPATCH' TAKE CARE OF IT: 00436000 STM R0,R11,VMGPRS-VMBLOK(R15) SAVE VM REGS 0-11 @V407579 00437000 LR R11,R15 SWITCH VMBLOK ADDRESSABILITY 00438000 USING VMBLOK,R11 @V407579 00439000 AIF (NOT &FLOATPT).NOFP1 00440000 STD Y0,VMFPRS STORE 00441000 STD Y2,VMFPRS+8 FLOATING 00442000 STD Y4,VMFPRS+16 POINT 00443000 STD Y6,VMFPRS+24 REGISTERS 00444000 .NOFP1 ANOP 00445000 MVC VMGPRS+R12*4(4*4),SVCREGS SAVE REGS 12-15 @V407579 00446000 OI VMRSTAT,VMEXWAIT USER IN SIMULATION WAIT @V407579 00447000 BAL R10,OBSLOCK SYSTEM LOCK NEEDED BEFORE DMKDSP @V407579 00448000 * ********************************* 00449000 NI VMRSTAT,X'FF'-VMEXWAIT SIMULATION WAIT ENDED @V407579 00450000 GOTODSPB GOTO DMKDSPB AND LET "DISPATCH" CARRY THE BALL. 00451000 * 00452000 SPACE 3 00453000 REFSVCB DS 0H LET "REFLECT" TAKE CARE OF IT: 00454000 STM R0,R11,VMGPRS-VMBLOK(R15) SAVE REGISTERS 0-11 00455000 LR R11,R15 SWITCH VMBLOK ADDRESSABILITY 00456000 MVC VMGPRS+R12*4(4*4),SVCREGS AND SAVE REGISTERS 12-15 00457000 AIF (NOT &FLOATPT).NOFP2 00458000 STD Y0,VMFPRS SAVE FLOATING POINT REGISTERS 00459000 STD Y2,VMFPRS+8 ... 00460000 STD Y4,VMFPRS+16 ... 00461000 STD Y6,VMFPRS+24 ... 00462000 .NOFP2 ANOP 00463000 LM R4,R5,SVCOPSW PRESERVE PAGE 0 INTERRUPT PSW @V407579 00464000 L R6,INTSVCL AND INTERRUPT ILC/CODE @V407579 00465000 BAL R10,OBSLOCK SYSTEM LOCKED CODE BEYOND HERE **@V407579 00466000 * ********************************* 00467000 REFSVCC EQU * HERE TO REFLECT AN SVC 76 THAT @VA01775 00468000 * CP ISN'T HANDLING 00469000 AIF (NOT &TRACE(6)).TRA3 ***AIF*** 00470000 TM VMTRCTL,VMTRSVC+VMTRBRIN VM TRACING IN EFFECT ? 00471000 BNZ REFTRACE TRF IF YES. 00472000 .TRA3 ANOP 00473000 OI VMRSTAT,VMEXWAIT USER IN SIMULATION WAIT @V4M0108 00474000 LA R1,SVCOPSW LET R1 POINT TO SVC OLD-PSW, AND 00475000 LA R3,INTSVCL LET R3 POINT TO SVC ILC & INT-CODE; 00476000 GOTO DMKPRGRF GO "REFLECT" IT. 00477000 SPACE 1 00478000 AIF (NOT &TRACE(6)).TRA4 ***AIF*** 00479000 REFTRACE DS 0H TRACING ON, LET DMKTRCSV DO THE WORK: 00480000 LR R0,R4 ARGUMENTS IN REGS FOR TRACE @V407579 00481000 LR R1,R5 SVCOLD PSW @V407579 00482000 LR R2,R6 @V407579 00483000 SRL R2,16 SVC ILC IN BITS 16-31 @V407579 00484000 LR R4,R6 SVC ILC/CODE @V407579 00485000 LR R10,R1 SVC OLD PSW ADDRESS INTO R10, 00486000 SLR R10,R2 MINUS LENGTH = ADDRESS OF SVC (OR EX-SVC) 00487000 CALL DMKTRCSV CALL DMKTRCSV TO HANDLE EVERYTHING ELSE 00488000 BNZ GOTODSPB CC NONZERO - MUST GO TO "DMKDSPB" 00489000 GOTO DMKDSPCH CC 0 - GO TO REGULAR DISPATCH ENTRY POINT 00490000 .TRA4 ANOP 00491000 SPACE 3 00492000 OBSLOCK DC 0H'0' SUBROUTINE TO OBTAIN SYSTEM LOCK @V407579 00493000 AIF (NOT &AP).APCHK6 00493900 LOCK OBTAIN,TYPE=SYS,SPIN=NO TRY TO OBTAIN SYSLOCK @V407579 00494000 BCR EQUAL,R10 RETURN IF LOCK OBTAINED @V407579 00495000 L R15,VMDFTPNT DEFER BLOCK FOR SYNC EVENTS @V407579 00496000 USING CPEXBLOK,R15 @V407579 00497000 STM R0,R15,CPEXREGS PRESERVE REGS OF CALLER @V407579 00498000 LA R0,DEFERETN @V407579 00499000 ST R0,CPEXADD SET KNOWN RETURN POINT @V407579 00500000 DROP R15 @V407579 00501000 LR R1,R15 @V407579 00502000 CALL DMKSTKDE STACK THE LOCK DEFERRAL @V407579 00503000 GOTO DMKDSPRU AND RUN ANOTHER WHILE WAITING.. @V407579 00504000 * 00505000 .APCHK6 ANOP 00505100 DEFERETN BR R10 RETURN TO THE ORIGINAL CALLER @V407579 00506000 EJECT 00507000 *********************************************************************** 00508000 * * 00509000 * 'SVCDIE' IS REACHED VIA AN SVC 0 FROM WITHIN THE CONTROL * 00510000 * PROGRAM INDICATING AN IMPOSSIBLE CONDITION OR FATAL ERROR. * 00511000 * * 00512000 *********************************************************************** 00513000 * 00514000 SVCDIE L R13,SVCOPSW+4 POINT TO THE SVC ZERO ABEND CODE 00515000 MVC CPABEND(4),0(R13) AND MOVE IT INTO PSA 00516000 SVCDIE2 STM R0,R11,DUMPSAVE SAVE REGS FOR DUMP ROUTINE @V407579 00517000 MVC DUMPSAVE+4*R12(4*4),SVCREGS .. @V407579 00518000 GOTO DMKDMPDK GO TO DUMP ROUTINE VIA R12. 00519000 EJECT 00520000 *********************************************************************** 00521000 * * 00522000 * SVC 8 - 'SVCLINK' PASSES CONTROL FROM ONE CP MODULE TO ANOTHER, * 00523000 * OBTAINING A NEW SAVE AREA. GR12,15 = ADR OF CALLED MODULE* 00524000 * GR13 = ADR OF SAVE AREA. * 00525000 * * 00526000 *********************************************************************** 00527000 SPACE 00528000 *. 00529000 *********************************************************************** 00530000 * 00531000 * 00532000 * CP ASSIST INSTRUCTION "LINK" - SVC 8 IN SUPERVISOR STATE 00533000 * 00534000 * 00535000 * REGISTER INPUT: 00536000 * GPR 15 = ADDRESS OF THE MODULE BEING CALLED 00537000 * 00538000 * SYSTEM DATA AREAS REFERENCED (BY MODULE WHERE APPLICABLE): 00539000 * DMKPSA - 'APAGCP', 'ASVCLIST', 'SVCLIST', TRACE FIELDS 00540000 * SAVEAREA,ALOKSY 00541010 * 00542000 * 00543000 * EXITS: 00544000 * 00545000 * 1. ADDRESS IN GPR 15 (NORMAL COMPLETION) 00546000 * 00547000 * REGISTER OUTPUT: 00548000 * GPR 12 = SAME AS GPR 15 00549000 * GPR 13 = ADDRESS OF SAVEAREA 00550000 * GPR 14 = ADDRESS OF THE NEXT SEQUENTIAL INSTRUCTION 00551000 * AFTER THE SVC 8 (RETURN ADDRESS OF CALLER) 00552000 * 00553000 * 2. ADDRESS IN SVC NEW PSW - AT X'65' (ABNORMAL COMPLETION) 00554000 * 00555000 * NOTE: THIS EXIT WILL GENERATE AN SVC INTERRUPT 00556000 * 00557000 *********************************************************************** 00558000 *. 00559000 SPACE 00560000 SVCLINK DS 0D SVC 8 - CALL A CP ROUTINE: %V3M4038 00561000 L R15,SVCOPSW+ADDR PICK UP RETURN ADDRESS %V4M0126 00562000 L R13,NEXTSAVE GET POINTER TO SAVE-AREA(IF ANY) %V3M4038 00563000 LTR R13,R13 ANY? %V3M4038 00564000 BZ GETFREE8 NO, GO GET A 12 DBLWD SAVE AREA %V3M4038 00565000 USING SAVEAREA,R13 USE THE SAVEAREA DSECT %V3M4038 00566000 SVCLINKC L R14,SAVENEXT GET NEXT SAVE-AREA PTR (IF ANY) %V407579 00567000 ST R14,NEXTSAVE DE-QUEUE THIS ELEMENT %V407579 00568000 MVC SAVER12(2*4),SVCR12 SAVE CALLER'S R12-R13 %V407579 00569000 ST R15,SAVERETN SET RETURN ADDRESS (FROM PSW) %V4M0126 00570000 L R15,SVCR15 REFRESH REG 15 %V4M0126 00571000 DROP R12 %V407579 00572000 SVCLINKR LR R12,R15 ESTABLISH BASE FOR CALLEE %V407579 00573000 CL R12,APAGCP IS HE IN NUCLEUS OR PAGEABLE CP? %V3M4038 00574000 BCR 4,R12 'BL' IF IN NUCLEUS - BRANCH NOW. %V3M4038 00575000 * 00576000 L R12,SVCNPSW+4 RE-ESTABLISH CURRENT BASE @V407579 00577000 USING DMKSVCIN,R12 @V407579 00578000 LTR R15,R15 TEST FOR AFFINITY REQUEST @V407579 00579000 BM SVCLINKA IF SO, HANDLE AS SPECIAL CASE @V407579 00580000 * 00581000 * CALL A PAGEABLE CP ROUTINE: 00582000 * 00583000 STM R1,R2,SAVEWRK2 IF PAGEABLE, SAVE R1-R2 IN WORK-AREA 00584000 LR R1,R15 REQUESTED CALLEE ADDRESS IN R1 @V407579 00585000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM),IOER=ABEND3 GO GET IT 00586000 LCTL C1,C1,VMSEG RESTORE USERS SEGMENT TABLE @V304635 00587000 DROP R12 @V407579 00588000 LR R12,R2 REAL ADDRESS INTO R12 00589000 LM R1,R2,SAVEWRK2 RESTORE R1-R2 FROM WORK-AREA, 00590000 BR R12 NOW GO TO CALLEE. 00591000 SPACE 00592000 ABEND3 ABEND 3 PERMANENT I/O PAGING ERROR 00593000 SPACE 1 00594000 USING DMKSVCIN,R12 @V407579 00595000 SVCLINKA MVC SAVEPROC,LPUADDR+1 SAVE THE ID OF PROCESSOR @V407579 00596000 LA R15,0(,R15) REMOVE THE AFFINITY FLAG @V407579 00597000 B SVCLINKR NOW COMPLETE THE LINK @V407579 00598000 EJECT 00599000 *********************************************************************** 00600000 * * 00601000 * SVC 12- 'SVCRET' RETURNS CONTROL TO CALLING CP MODULE, RELEASING * 00602000 * THE SAVE AREA AND RESTORING CALLER'S R12 AND R13. * 00603000 * * 00604000 *********************************************************************** 00605000 SPACE 1 00606000 *. 00607000 *********************************************************************** 00608000 * 00609000 * 00610000 * CP ASSIST INSTRUCTION "RETURN" - SVC 12 IN SUPERVISOR STATE 00611000 * 00612000 * 00613000 * REGISTER INPUT: 00614000 * GPR 12 = BASE ADDRESS OF MODULE ISSUING THE 'RETURN' SVC 00615000 * GPR 13 = ADDRESS OF SAVEAREA 00616000 * 00617000 * SYSTEM DATA AREAS REFERENCED (BY MODULE WHERE APPLICABLE): 00618000 * DMKPSA - 'APAGCP', 'ASVCLIST', 'SVCLIST', TRACE FIELDS 00619000 * SAVEAREA,ALOKSY 00620010 * 00621000 * 00622000 * EXITS: 00623000 * 00624000 * 1. ADDRESS IN FIRST WORD OF SAVEAREA (NORMAL COMPLETION) 00625000 * 00626000 * REGISTER OUTPUT: 00627000 * GPR 12-13 = RESTORED FROM SAVEAREA 00628000 * 00629000 * 2. ADDRESS IN SVC NEW PSW - AT X'65' (ABNORMAL COMPLETION) 00630000 * 00631000 * NOTE: THIS EXIT WILL GENERATE AN SVC INTERRUPT 00632000 * 00633000 *********************************************************************** 00634000 *. 00635000 SPACE 00636000 SVCRET DS 0D SVC 12 - RETURN TO CALLER: %V3M4038 00637000 L R14,SAVERETN GET RETURN-ADDRESS %V407579 00638000 CLI SAVEPROC,0 TEST FOR SPECIFIC PROC. RETURN %V407579 00639000 BNE SVCRETAF SPECIAL HANDLING FOR AFFINITY %V407579 00640000 SVCRETC ST R14,SVCOPSW+4 SET UP SVCOLD PSW FOR RETURN %V407579 00641000 L R14,SVCR12 GET CALLEE'S BASE ADDRESS %V407579 00642000 CL R14,APAGCP WAS CALLEE A PAGEABLE MODULE ? %V407579 00643000 BNL RELPAGE YES - GO UNLOCK HIM. %V3M4038 00644000 AIF (NOT &VIRREAL).NOVR2 %V407579 00645000 CL R14,SLCADDR MAYBE - EXIT FROM V=R STORAGE ? %V407579 00646000 BL RELPAGE YES - RELEASE THE PAGE %V407579 00647000 * (NO EXITS FROM ANY MODULE IN PAGE 0) 00648000 .NOVR2 ANOP 00649000 SVCRETJ CL R13,DMKSVCHI SAVE-AREA ABOVE DYN. PAGING AREA %V407579 00650000 BNL SVCRETJ1 YES - GOOD. %V3M4038 00651000 CL R13,DMKSVCLO CHECK IF IN DYNAMIC PAGING AREA %V407579 00652000 BH SVCRETJ2 IF SO, FRET SAVE-AREA %V3M4038 00653000 AIF (NOT &VIRREAL).SVCRET1 00654000 CL R13,SLCADDR ONE MORE CHECK < END OF V=R ? %V3M4038 00655000 BL SVCRETJ2 IF YES THAT'S IN PAGING AREA TOO %V3M4038 00656000 .SVCRET1 ANOP 00657000 SVCRETJ1 L R14,NEXTSAVE R13 OK, GET OLD TOP-OF-LIST, %V407579 00658000 ST R14,SAVENEXT CHAIN ONTO THIS ELEMENT, %V407579 00659000 ST R13,NEXTSAVE PUSH DOWN LIST %V3M4038 00660000 LM R12,R13,SAVER12 RESTORE CALLER'S R12-R13 %V3M4038 00661000 LPSW SVCOPSW AND RETURN TO CALLER. %V3M4038 00662000 * 00663000 RELPAGE LR R13,R2 PRESERVE CALLER'S R2 @V407579 00664000 LR R2,R14 PASS UNLOCK ADDR TO UNLOCK @V407579 00665000 CALL DMKPTRUL UNLOCK PAGE (WITHOUT CTL. LOSS) @V407579 00666000 LR R2,R13 REFRESH CALLER'S R2 @V407579 00667000 L R13,SVCR13 AND R13 OF ISSUER @V407579 00668000 B SVCRETJ BACK TO MAIN PATH @V407579 00669000 * 00670000 SVCRETAF LA R14,0(,R14) CLEAR SPECIFIED PROCESSOR ID @V407579 00671000 LA R15,INCRBY1 COUNT OCCURANCES @V407579 00672000 AL R15,SVCRAFCT @V407579 00673000 ST R15,SVCRAFCT @V407579 00674000 AIF (NOT &AP).APCHK7 00674900 CLC SAVEPROC,LPUADDR+1 TEST FOR SAME PROCESSOR @V407579 00675000 BE SVCRETC CONTINUE NORMAL EXIT @V407579 00676000 LA R15,INCRBY1 COUNT OCCURANCES OF REQ'D SWITCH @V407579 00677000 AL R15,SVCRAFSS @V407579 00678000 ST R15,SVCRAFSS @V407579 00679000 STM R0,R8,SAVER0 SAVE REGS IN A KNOWN PATTERN @V407579 00680000 LR R3,R14 SAVE R14 ACROSS CALLS @V407510 00681000 LM R4,R7,SVCREGS PRESERVE SVCREGS THRU CTL PASS @V407579 00682000 L R2,SVCOPSW AND SUPERVISOR STATE PSW @V407579 00683000 LA R0,CPEXSIZE OBTAIN A BLOCK TO STACK CTL XFER @V407579 00684000 CALL DMKFREE (FREE WILL RETURN ON SAME PROC.) @V407579 00685000 USING CPEXBLOK,R1 @V407579 00686000 LA R0,SVCRETUS SET RETURN CONTROL POINT @V407579 00687000 ST R0,CPEXADD @V407579 00688000 LR R14,R3 REFRESH R14 TO ENTRY STATE @V407579 00689000 STM R0,R15,CPEXREGS SET REGS FOR RETURN @V407579 00690000 DROP R1 @V407579 00691000 CALL DMKSTKSW STACK FOR OTHER PROCESSOR @V4M0141 00692000 TSTDSP L R15,PREFIXB ACCESS OTHER PSA @VA09257 00692100 TM XCPEND-PSA(R15),XCDISP DISPATCH PENDING @VA09257 00692200 BZ GOTODSP NO @VA09257 00692300 LOCK RELEASE,TYPE=SYS YES, RELEASE LOCK @VA09257 00692400 GOTO DMKDSPRU UNLOCKED ENTRY TO DSP @VA09257 00692500 GOTODSP DS 0H @VA09257 00692600 GOTO DMKDSPCH RELINQUISH CONTROL HERE. @V407579 00693000 SVCRETUS ST R2,SVCOPSW RESTORE RETURN EXIT PSW @V407579 00694000 STM R4,R7,SVCREGS RESTORE SVCREGS TO ENTRY STATE @V407579 00695000 LM R0,R8,SAVER0 RESTORE REGS TO CALLEE'S VALUES @V407579 00696000 .APCHK7 ANOP 00696100 B SVCRETC NOW COMPLETE THE RETURN @V407579 00697000 SPACE 00698000 * SAVE-AREA IN R13 WAS IN DYNAMIC PAGING AREA: 00699000 SVCRETJ2 LM R14,R15,SVCOPSW REMEMBER SVC OLD PSW (TO BE SAFE) 00700000 STM R14,R1,FRTSAV SAVE SVC-OLD-PSW AND CALLER'S R0-R1 00701000 LR R1,R13 ADDRESS OF SAVE-AREA INTO R1 00702000 MVC FRTSAV+4*4(2*4),SAVER12 COPY CALLER'S R12-13 @V407579 00703000 LA R0,SAVESIZE SAVE-AREA SIZE IN DOUBLE WORDS 00704000 CALL DMKFRET GIVE BACK AREA IN DYNAMIC PAGING AREA 00705000 LA R15,INCRBY1 COUNT HOW MANY TIMES WE DID IT @V407579 00706000 AL R15,DYNFRET ... 00707000 ST R15,DYNFRET ... 00708000 LM R14,R1,FRTSAV PICK UP PSW AND R0-1 @V407579 00709000 STM R14,R15,SVCOPSW RETURNING PSW @V407579 00710000 LM R12,R13,FRTSAV+16 RESTORE CALLERS R12-13 @V407579 00711000 LPSW SVCOPSW BACK TO ORIGINAL CALLER @V407579 00712000 EJECT 00713000 *********************************************************************** 00714000 * * 00715000 * SVC 16- 'SVCRLSE' RELEASES CURRENT SAVE AREA, UNLOCKS BYPASSED * 00716000 * MODULE(IF PAGEABLE), AND POINTS R13 AT FORMER SAVE AREA. * 00717000 * SVC 20- 'SVCGET' GET NEXT SAVE AREA * 00718000 * * 00719000 *********************************************************************** 00720000 SPACE 1 00721000 SVCRLSE DS 0D SVC 16 - RELEASE CURRENT SAVE AREA: 00722000 L R14,SAVER12 GET BASE OF BYPASSED MODULE @V407579 00723000 CL R14,APAGCP WAS CALLEE A PAGEABLE MODULE ? @V407579 00724000 BNL RELPAGE1 YES - GO UNLOCK HIM. 00725000 AIF (NOT &VIRREAL).NOVR3 @V407579 00726000 CL R14,SLCADDR ARE WE RELEASING V=R STORAGE? @V407579 00727000 BNL SVCRLSEX NO - NORMAL RELEASE. 00728000 CL R14,F4095 RELEASING FROM PAGE 0 ? @V407579 00729000 BH RELPAGE1 NO--UNLOCK THE PAGE @V407579 00730000 .NOVR3 ANOP 00731000 SVCRLSEX L R15,SAVER13 GET CALLER'S SAVE AREA @V407579 00732000 L R14,NEXTSAVE TAKE CURRENT CHAIN @V407579 00733000 ST R14,SAVENEXT APPEND IT TO RETURNING SAVE-AREA @V407579 00734000 ST R13,NEXTSAVE RESET ANCHOR @V407579 00735000 LR R13,R15 PASS PREDECESSOR'S SAVE-AREA @V407579 00736000 B SVCSEXIT BACK TO ISSUER(WITHOUT CTL XFER) @V407579 00737000 * 00738000 RELPAGE1 LR R13,R2 PRESERVE CALLER'S R2 @V407579 00739000 LR R2,R14 PASS UNLOCK ADDR TO UNLOCK @V407579 00740000 CALL DMKPTRUL UNLOCK THE PAGE @V407579 00741000 LR R2,R13 REFRESH CALLER'S R2 @V407579 00742000 L R13,SVCR13 AND R13 OF ISSUER @V407579 00743000 B SVCRLSEX BACK TO MAIN PATH @V407579 00744000 SPACE 3 00745000 SVCGET DS 0D SVC 20 - GET NEXT SAVE AREA: 00746000 L R13,NEXTSAVE GET NEXT SAVE AREA 00747000 LTR R13,R13 ANY SAVE AREA? 00748000 BNZ *+8 YES 00749000 BAL R14,SVCFR NO, GET ONE FROM FREE @V407579 00750000 L R14,SAVENEXT GET SUCCESSOR POINTER @V407579 00751000 ST R14,NEXTSAVE DEQUEUE CURRENT ELEMENT @V407579 00752000 MVC SAVER12(2*4),SVCR12 SAVE R12 AND R13 @V407579 00753000 SVCSEXIT L R12,SVCR12 RESTORE R12 @V407579 00754000 LM R14,R15,SVCR14 AND R14-15. (R13 ALREADY SET) @V407579 00755000 LPSW SVCOPSW AND RETURN. 00756000 * 00757000 DROP R13 @V407579 00758000 EJECT 00759000 *********************************************************************** 00760000 * * 00761000 * SVC 24- 'SVCSWIT' SWITCH CONTROL TO MAIN PROCESSOR * 00762000 * SVC 76- 'SVCIGNOR' IGNORE DMKIOF ERROR RECORD IN VIRTUAL MACHINE * 00763000 * * 00764000 *********************************************************************** 00765000 SPACE 1 00766000 SVCSWIT DS 0D SVC 24 - SWITCH TO MAIN PROCESSOR@V407579 00767000 AIF (NOT &AP).APCHK8 00767900 LA R15,INCRBY1 COUNT OCCURANCES REQUIRING SWITCH@V407579 00768000 AL R15,SVCSWTSS @V407579 00769000 ST R15,SVCSWTSS @V407579 00770000 L R13,PREFIXA ADDRESS THE ABSOLUTE PREFIX @V407579 00771000 L R15,PSACPXBP-PSA(,R13) CPEXBLOK FOR SWITCH @V407579 00772000 USING CPEXBLOK,R15 @V407579 00773000 LTR R15,R15 CHECK FOR NON-RECURSIVE USE @V407579 00774000 BZ ABSVC ABEND HERE FOR ANALYSIS @V407579 00775000 SLR R14,R14 @V407579 00776000 ST R14,PSACPXBP-PSA(,R13) CATCH FUTURE RECURSION @V407579 00777000 STM R0,R11,CPEXREGS SAVE REGS FOR RETURN @V407579 00778000 MVC CPEXR12(4*4),SVCREGS @V407579 00779000 MVC CPEXADD,SVCOPSW+4 ADDR TO RETURN TO SWITCHER @V407579 00780000 DROP R15 @V407579 00781000 LR R3,R15 RETAIN THE STACK BLOCK @V407579 00782000 LA R0,CPEXSIZE OBTAIN REPLACEMENT BLOCK @V407579 00783000 CALL DMKFREE (FREE WILL RETURN ON SAME PROC.) @V407579 00784000 ST R1,PSACPXBP-PSA(,R13) REPLENISH USED BLOCK @V407579 00785000 LR R1,R3 STACK THE SWITCHING REQUEST @V407579 00786000 CALL DMKSTKSW STACK FOR OTHER PROCESSOR @V4M0141 00787000 USING CPEXBLOK,R1 SET UP ADDRESSABILITY @V407510 00788000 OI CPEXTYPE,CPEXLPSW INDICATE CONTROL VIA LPSW @V407510 00789000 DROP R1 @V407510 00790000 B TSTDSP EXIT TO DMKDSPCH/RU @VA09257 00791100 SPACE 1 00792000 .APCHK8 ANOP 00792100 SVCIGNOR LM R12,R15,SVCREGS REFRESH REGS ON ENTRY @V407579 00793000 LPSW SVCOPSW RETURN, AS IF SVC = NO-OP @V407579 00794000 EJECT 00795000 GETFREE8 DS 0H GET SAVE AREA FOR SVC 8 (LINK) 00796000 LA R14,SVCLINKC ESTABLISH RETURN ADDR @V407579 00797000 * 00798000 SVCFR DS 0H GET SAVE AREA FROM FREE STORAGE: 00799000 L R13,ASCRATCH GET ADDRESS OF SCRATCH-AREA 00800000 CL R13,SAVARLIM BEWARE GOING OVER THE LIMIT WE CAN HANDLE 00801000 BNH SVCFR2 WE'RE OK - SAVE GOODIES & CALL DMKFREE. 00802000 *>>>>>>>> 00803000 ABEND 1 WELL, ANYWAY, WE TRIED HARD 00804000 *>>>>>>>> 00805000 SPACE 00806000 * GET A 12-WORD SAVE-AREA FROM REGULAR 'DMKFREE' ENTRY-POINT: 00807000 * (DEPENDENT ON SUCCESSFUL FREE CALL, RETURNING ON SAME PROCESSOR) 00808000 SVCFR2 MVC 0(4*4,R13),SVCREGS SAVE 'SVCREGS' @V407579 00809000 STM R14,R1,16(R13) SAVE R14 THRU R1 00810000 A R13,SAVARLEN INCREMENT POINTER FOR NEXT TIME 00811000 ST R13,ASCRATCH AND STORE 00812000 LA R0,SAVESIZE SAVE AREA SIZE IN DBL WORDS INTO R0 00813000 CALL DMKFREE GET SAVE-AREA FROM FREE STG. @V407579 00814000 LA R14,INCRBY1 COUNT THIS EVENT @V407579 00815000 AL R14,FRECKLES ... @V407579 00816000 ST R14,FRECKLES ... 00817000 * 00818000 SVCFR3 XC 0(SAVESIZE*8,R1),0(R1) CLEAR THE NEW SAVE AREA 00819000 LR R13,R1 SAVE AREA ADDR. 00820000 L R14,ASCRATCH GET ADDRESS OF SCRATCH-AREA 00821000 S R14,SAVARLEN DECREMENT THE POINTER 00822000 ST R14,ASCRATCH AND REPLACE 00823000 MVC SVCREGS(4*4),0(R14) RESTORE 'SVCREGS' @V407579 00824000 LM R14,R1,16(R14) RELOAD R14 THRU R1, AND ... 00825000 BR R14 RETURN TO SVC 8 OR 20 PROCESSING @V407579 00826000 EJECT 00827000 USING VMBLOK,R15 @V202232 00828000 SVCADSTP DC 0H'0' HANDLE SVC X'B3', POSSIBLE ADSTOP@V407579 00829000 STM R0,R11,VMGPRS SAVE USER'S REGISTERS 00830000 MVC VMGPRS+R12*4(4*4),SVCREGS SAVE REGS 12-15 @V407579 00831000 L R13,SVCOPSW+4 GET OLD PSW ADDRESS 00832000 SH R13,INTSVCL AND SUBTRACT LENGTH OF INTERRUPTING INST 00833000 LRA R14,0(,R13) FIND INSTRUCTION IMAGE @V407579 00834000 BNZ TSTRACE NOT A PROPER ADSTOP, REFLECT SVC @V407579 00835000 CLI 0(R14),OPCODEEX DID 'EXECUTE' CAUSE ADSTOP? @V407579 00836000 BNE CKADDR NO .. GO VALIDATE ADSTOP ADDRESS 00837000 MVC VMINST(2),0(R14) SAVE IMAGE OF FIRST HALF @V407579 00838000 LRA R14,2(,R13) @V407579 00839000 BNZ TSTRACE NOT A PROPER ADSTOP, REFLECT SVC @V407579 00840000 MVC VMINST+2(2),0(R14) SAVE IMAGE OF SECOND HALF @V407579 00841000 LA R13,D2MASK GET DISPLACEMENT OF 'EX' OPERAND @V407579 00842000 N R13,VMINST @V407579 00843000 IC R14,VMINST+2 GET BASE .. @V407579 00844000 SRL R14,2 @V407579 00845000 N R14,F60 (F60=X'3C') BASE*4 @V407579 00846000 BZ NOBASE BASE IS ZERO 00847000 L R14,VMGPRS(R14) GET VALUE OF BASE @V407579 00848000 LA R13,0(R14,R13) ADD BASE TO DISPLACEMENT @V407579 00849000 NOBASE IC R14,VMINST+1 GET INDEX .. @V407579 00850000 SLL R14,2 @V407579 00851000 N R14,F60 (F60=X'3C') INDEX*4 @V407579 00852000 BZ CKADDR INDEX IS ZERO @V407579 00853000 L R14,VMGPRS(R14) GET VALUE OF INDEX @V407579 00854000 LA R13,0(R14,R13) ADD INDEX TO BASE+DISPLACEMENT @V407579 00855000 SPACE 00856000 CKADDR L R14,VMADSTOP ADDRESS THE ADSTOP BUFFER @V407579 00857000 LTR R14,R14 IF PRESENT @V407579 00858000 BZ TSTRACE REFLECT, IF NOT @V407579 00859000 USING ADSTBLOK,R14 @V407579 00860000 TM VMESTAT,VMEXTCM TEST FOR EC MODE EXECUTION @V407579 00861000 BZ CKREAL NO, TEST GUEST REAL @VA05407 00862000 TM VMPSW,TRANMODE TRANSLATE MODE? @VA05407 00863000 BZ CKREAL NO, TEST GUEST REAL @VA05407 00864000 LRA R13,0(,R13) FIND REAL ADDR OF SVC X'B3' @V407579 00865000 BNZ TSTRACE REFLECT, IF NOT PRESENT @V407579 00866000 LCTL C0,C0,CPCREG0 RESTORE VIRTUAL MACHINE'S @V407579 00867000 LCTL C1,C1,VMSEG FIRST LEVEL ADDRESS SPACE @V407579 00868000 L R14,ADSTINAD ADSTOP W.R.T. FIRST LEVEL SPACE @V407579 00869000 LRA R14,0(,R14) FIND REAL ADDR OF REQUESTED STOP @V407579 00870000 BNZ TSTRACE REFLECT, IF NOT PRESENT @V407579 00871000 CLR R14,R13 TEST FOR MATCH @V407579 00872000 BNE TSTRACE REFLECT, IF NOT @V407579 00873000 L R14,VMADSTOP REFRESH ADDRESSABILITY @V407579 00874000 B REPLINST REFRESH THE INSTRUCTION IMAGE @V407579 00875000 * 00876000 CKREAL CL R13,ADSTINAD IS THIS THE ADSTOP? @VA05407 00877000 BNE TSTRACE REFLECT, IF NOT @V407579 00878000 LRA R13,0(,R13) FIND REAL ADDR OF SVC X'B3' @V407579 00879000 BNZ TSTRACE REFLECT, IF NOT PRESENT @V407579 00880000 REPLINST MVC 0(2,R13),ADSTINST RESTORE INSTRUCTION IMAGE @V407579 00881000 DROP R14 @V407579 00882000 LR R2,R14 RETAIN ADSTOP BUFFER ADDRESS @V407579 00883000 SLR R14,R14 @V407579 00884000 ST R14,VMADSTOP CLEAR ADSTOP BUFFER POINTER @V407579 00885000 L R13,SVCOPSW+4 BACK UP THE PSW @V407579 00886000 SH R13,INTSVCL @V407579 00887000 AIF (NOT &FLOATPT).NOFP3 00888000 STD Y0,VMFPRS STORE 00889000 STD Y2,VMFPRS+8 FLOATING 00890000 STD Y4,VMFPRS+16 POINT 00891000 STD Y6,VMFPRS+24 REGISTERS 00892000 .NOFP3 ANOP 00893000 ST R13,VMPSW+4 SET VM PSW TO CONTINUE @V407579 00894000 IC R0,SVCOPSW+2 GET CC AND MASK 00895000 TM VMESTAT,VMEXTCM EXTENDED CONTROL MACHINE ?? 00896000 BZ SVCABC NO -- SAVE PSW IN BC MODE FORMAT 00897000 STC R0,VMPSW+2 SAVE EXTENDED SPW 00898000 B *+8 .. 00899000 SVCABC STC R0,VMPSW+4 SAVE CC AND PGM MASK 00900000 OI VMRSTAT,VMEXWAIT MAKE SURE CAN'T GET DISPATCHED 00901000 LR R11,R15 VMBLOK ADDRESS TO R11 00902000 DROP R15 00903000 USING VMBLOK,R11 00904000 BAL R10,OBSLOCK SYSTEM LOCKED CODE BEYOND HERE **@V407579 00905000 * ********************************* 00906000 TM VMESTAT,VMMICSVC USER RQST MICRO HANDLE SVCS?@V201537 00907000 BZ NOMICRO NO, LEAVE SVC BIT SET TO 1 @V201537 00908000 NI VMMCR6,X'FF'-VMMSVC YES, INDICATE MICRO DO SVCS @V201537 00909000 NOMICRO DS 0H @V201537 00910000 LR R1,R2 ADDRESS OF OLD ADSTOP BUFFER @V407579 00911000 LA R0,ADSTBFSZ BUFFER SIZE 00912000 CALL DMKFRET FRET BUFFER 00913000 LA R0,3 GET BUFFER 00914000 CALL DMKFREE ... 00915000 LR R4,R1 SAVE BUFFER ADDRESS 00916000 LR R1,R13 INSTRUCTION ADDRESS TO R1 00917000 N R1,XRIGHT24 AND OFF HIGH BYTE 00918000 CALL DMKCVTBH CONVERT TO HEX 00919000 MVC 0(16,R4),STOPMSG TEXT OF ADSTOP MSG 00920000 STH R0,10(R4) ADDRESS 00921000 ST R1,12(R4) .. 00922000 LA R0,16 SIZE 00923000 LR R1,R4 MSG ADDRESS 00924000 LA R3,3 BUFFER SIZE FOR DFRET 00925000 CALL DMKQCNWT,PARM=NORET+DFRET 00926000 AIF (NOT &TRACE(6)).TRA5 ***AIF*** 00927000 TM VMTRCTL,VMTRBRIN INSTRUCTION TRACING TODAY ? 00928000 BZ SVCACON NOPE - CONTINUE ... 00929000 L R1,VMPSW+4 YES - ADDRESS OF THIS INSTRUCTION 00930000 L R15,VMTREXT REFERENCE TRACE-CONTROL BLOCK 00931000 USING TREXT,R15 00932000 CLC TREXIN1(8),FFS ANYTHING ALREADY SET ? 00933000 BE CALTRCIT NOPE - OK TO CALL DMKTRCIT FORTHWITH. 00934000 DROP R15 AHA - IF SOMETHING THERE, WE MUST... 00935000 CALL DMKTRCPB RESET THE OLD INSTRUCTION(S) FIRST, THEN: 00936000 CALTRCIT CALL DMKTRCIT NOW SET INSTRUCTION TRACING AGAIN 00937000 SVCACON DS 0H 00938000 .TRA5 NI VMRSTAT,255-VMEXWAIT TURN OFF INSTRUCTION-WAIT FLAG 00939000 NI VMPEND,255-VMPERPND IF PER PENDING, IT WILL RECUR LATER 00940000 CALL DMKCFMBK GO TO BREAK ENTRY OF CFM 00941000 GOTO DMKDSPCH GET OUT 00942000 DROP R11 @V407579 00943000 SPACE 2 00944000 STOPMSG DC CL16'ADSTOP AT ......' 00945000 EJECT 00946000 USING VMBLOK,R15 @V200226 00947000 SPACE 00948000 SVCVER EQU * @V200226 00949000 * 00950000 * DO BASIC CHECKS ON PARM REGS FOR VALID SVC 76. 00951000 LTR R1,R1 TEST FOR DOS PARM @V407579 00952000 BM CKDOSR0 BRANCH IF DOS POSSIBILITY @V407579 00953000 BZ TSTRACE IF ZERO, MUST NOT BE RECORDING @V407579 00954000 LTR R0,R0 IF R0 = NEG, MIGHT BE OS,VS, VM @V407579 00955000 BNM TSTRACE IF NOT, GO REFLECT THE SVC @V407579 00956000 LA R13,AVEROS O.WISE POINT TO OS ERROR CAPTURE @V407579 00957000 B SVCVERVM AND SAVE VIRTUAL MACHINE STATE @V407579 00958000 CKDOSR0 LTR R0,R0 IF POSITIVE - MIGHT BE DOS @V407579 00959000 BNP TSTRACE ELSE REFLECT SVC @V407579 00960000 LA R13,AVERDOS POINT TO DOS ERROR CAPTURE @V407579 00961000 * 00962000 SVCVERVM STM R0,R11,VMGPRS SAVE USER REGS @V407579 00963000 MVC VMGPRS+R12*4(4*4),SVCREGS SAVE REGS 12-15 @V407579 00964000 AIF (NOT &FLOATPT).NOFP5 @V200226 00965000 STD Y0,VMFPRS SAVE @V200226 00966000 STD Y2,VMFPRS+8 FLOATING @V200226 00967000 STD Y4,VMFPRS+16 POINT @V200226 00968000 STD Y6,VMFPRS+24 REGS. @V200226 00969000 .NOFP5 ANOP 00970000 LM R4,R5,SVCOPSW PRESERVE PAGE 0 INTERRUPT PSW @V407579 00971000 L R6,INTSVCL AND INTERRUPT ILC/CODE @V407579 00972000 LR R11,R15 USE STANDARD VMBLOK ADDRESSING @V407579 00973000 DROP R15 @V407579 00974000 USING VMBLOK,R11 @V407579 00975000 ST R5,VMPSW+4 UPDATE VIRTUAL PSW @V407579 00976000 TM VMESTAT,VMEXTCM ECMODE? @VA01775 00977000 BZ BCMODE NO, GO CHANGE PSW TO BC @VA01775 00978000 STH R4,VMPSW+2 VIRT. PSW FORMAT = REAL PSW @V407579 00979000 LCTL C0,C0,CPCREG0 RE-ESTABLISH STD. TRANSLATE ARCH.@V407579 00980000 B AX @VA01775 00981000 BCMODE EQU * CHANGE PSW TO BC MODE BEFORE @VA01775 00982000 LR R3,R6 OPERATE ON ILC @V407579 00983000 SRL R3,3 MOVE TO BITS 16-17 @V407579 00984000 OR R3,R4 ADD CC AND PGM MASK @V407579 00985000 STCM R3,B'0010',VMPSW+4 PROPER PLACE FOR BC DATA @V407579 00986000 AX EQU * @VA01775 00987000 OI VMRSTAT,VMEXWAIT PUT IN WAIT @V200226 00988000 LR R3,R1 SAVE ADDRESS OF RECORD @V4M0012 00989000 LR R7,R0 2'S COMPLEMENT OF REC LENGTH @V4M0012 00990000 BAL R10,OBSLOCK SYSTEM LOCKED CODE BEYOND HERE **@V407579 00991000 * ********************************* 00992000 LR R1,R3 RESTORE R1 @V4M0012 00993000 LR R0,R7 RESTORE R0 @V4M0012 00994000 VERCALL L R15,0(,R13) ADDRESS THE PROPER RECORDING CODE@V407579 00995000 CALL (15) GO TO DMKVER TO PROCESS FURTHER @V200226 00996000 * 00997000 * A RETURN FROM DMKVER MEANS THAT SOMETHING INVALID WAS 00998000 * FOUND SO MUST REFLECT THE SVC TO THE USER 00999000 * 01000000 LCTL C1,C1,VMSEG INSURE CONTROL REG IS CORRECT @V200226 01001000 B REFSVCC GO REFLECT IT @VA01775 01002000 EJECT 01003000 AVEROS DC A(DMKVERO) ENTRY TO OS ERROR RECORD CAPTURE@V407579 01004000 AVERDOS DC A(DMKVERD) ENTRY TO DOS ERROR RECORD CAPTURE@V407579 01005000 * 01006000 ASCRATCH DC A(SVCRFRST) POINTER TO SCRATCH-AREA (VARIES) 01007000 SAVARLIM DC A(SVCRLAST) LIMIT = POINTER TO LAST SCRATCH-AREA 01008000 * 01009000 * AT LEAST TWO "SCRATCH" SAVE-AREAS TO SAVE SVCREGS & R14 THRU R1 01010000 * (NEEDED FOR CALLING DMKFREE FOR SAVE-AREA FOR SVC 8 & SVC 20) 01011000 * NOTE: ADD MORE BETWEEN "SVCRFRST" & "SVCRLAST" AS NEEDED 01012000 SVCRFRST DS 4D FIRST SAVE-AREA FOR SVCREGS & R14 THRU R1 01013000 DS 4D ANOTHER 01014000 SVCRLAST DS 4D LAST SAVE-AREA FOR SVCREGS & R14 THRU R1 01015000 SPACE 01016000 FRTSAV DS 3D SAVE PSW, R14-1 OVER FRET CALL @V407579 01017000 FRECKLES DC F'0' NO. OF CALLS TO DMKFREE FOR SAVE-AREAS 01018000 DYNFRET DC F'0' NO OF CALLS TO DMKFRET FOR SAVE-AREAS 01019000 SVCSWTSS DC F'0' COUNT OF ACTUAL SWITCHES OCCURRED@V407579 01020000 * 01021000 SVCRAFCT DC F'0' COUNT OF AFFINITY RETURNS ISSUED @V407579 01022000 SVCRAFSS DC F'0' COUNT OF AFFINITY RETURNS SWITCHD@V407579 01023000 * (IN DYNAMIC PAGING AREA ON AN EXIT) 01024000 SPACE 01025000 SAVARLEN DC F'32' LENGTH OF ONE SCRATCH-AREA 01026000 SPACE 3 01027000 * THE FOLLOWING 16-BYTE DATA LIST MUST BE KEPT CONTIGUOUS AND IN ORDER 01028000 * BECAUSE IT IS USED BY THE CP ASSIST INSTRUCTIONS "LINK" AND "RETURN". 01029000 SPACE 01030000 SVCLIST DS 0F @V3M4026 01031000 NEXTSAVE DC A(0) +0 PTR TO NEXT AVAIL. SAVE AREA @V3M4026 01032000 AIF (NOT &VIRREAL).NOVR4 @VA05876 01033000 SLCADDR DC A(DMKSLC) +4 A(END OF V=R STORAGE OR ZERO) @V3M4026 01034000 AIF (&VIRREAL).VR4 @VA05876 01035000 .NOVR4 ANOP 01036000 SLCADDR DC A(0) +4 (ZERO FOR NON-VIRTUAL=REAL) @VA05876 01037000 .VR4 ANOP 01038000 DMKSVCHI DC A(0) +8 "DMKFREHI" @V407579 01039000 DMKSVCLO DC A(0) +12 "DMKFRELO" MINUS L'SAVEAREA @V407579 01040000 DMKSVCNS EQU NEXTSAVE (EXTERNALLY-REFERENCED NAME) @V407579 01041000 ADDR EQU 4 DISPLACEMENT OF ADDRESS IN PSW @V4M0126 01042000 EJECT 01043000 LTORG 01044000 SPACE 3 01045000 ADSTBLOK DSECT 01046000 ADSTINAD DS 1F ANSTRUCTION ADDRESS 01047000 ADSTINST DS 1F INSTRUCTION 01048000 ADSTFLAG DS 1H FLAG AREA 01049000 DS 0D 01050000 ADSTBFSZ EQU (*-ADSTBLOK)/8 BUFFER SIZE IN DOUBLE WORDS 01051000 SPACE 3 01052000 TRACETBL DSECT , LAYOUT OF SYSTEM TRACE ENTRIES @V407579 01053000 TRACETYP DS X TRACE TYPE (INCL. PROCESSOR) @V407579 01054000 TRACEADR DS AL3 ADDRESS POINTER @V407579 01055000 TRACECOD DS F INTERRUPT CODE @V407579 01056000 TRACEPSW DS D OLD PSW @V407579 01057000 TRACELNG EQU *-TRACETBL ENTRY LENGTH @V407579 01058000 EJECT 01059000 COPY EQU 01060000 PSA , @V407579 01061000 ORG SVCREGS DEFINE REGS FOR EASE OF REFERENCE@V407579 01062000 SVCR12 DS F @V407579 01063000 SVCR13 DS F @V407579 01064000 SVCR14 DS F @V407579 01065000 SVCR15 DS F @V407579 01066000 ORG , @V407579 01067000 COPY SAVE 01068000 COPY VMBLOK 01069000 COPY TREXT 01070000 END DMKSVC @V407579 01071000