ibm:vm370-lib:cp:dmkvsi.assemble_src
Table of Contents
DMKVSI Source
References
- Fixes Applied : 21
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [R14370DK]
Source Listing
- DMKVSI.ASSEMBLE.txt
- VSI TITLE 'DMKVSI (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SERIALIZATION OF INPUT 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKVSI 00006000
- * 00007000
- * FUNCTION - 00008000
- * 00009000
- * TO SIMULATE THE OPERATION OF PRIVILEGED I/O INSTRUCTIONS 00010000
- * ISSUED BY VIRTUAL MACHINES 00011000
- * 00012000
- * ATTRIBUTES - 00013000
- * 00014000
- * REENTRANT, RESIDENT, ENTERED VIA GOTO FROM DMKPRVLG FOR THE 00015000
- * SIMULATION OF AN INSTRUCTION 00016000
- * 00017000
- * ENTRY POINTS - 00018000
- * 00019000
- * DMKVSIEX - SIMULATE A SIO, TIO, HIO, TCH, OR CLCH 00020000
- * (HIO AND CLCH ARE PROCESSED BY DMKVSJ) 00020200
- * 00020400
- * DMKVSICH - RE-ENTRY FROM DMKVSJ TO PROCESS CLCH AS A TCH 00020600
- * 00021000
- * ENTRY CONDITIONS - 00022000
- * 00023000
- * FOR DMKVSIEX - 00024000
- * GPR11 = ADDRESS OF USER'S VMBLOK 00025000
- * GPR12 = DMKVSIEX BASE 00026000
- * THE FIELD VMINST IN THE USER'S VMBLOK CONTAINS THE I/O 00027000
- * INSTRUCTION TO BE SIMULATED 00028000
- * 00029000
- * NOTE THAT GPR13 DOES NOT POINT TO A SAVEAREA 00030000
- * 00030100
- * FOR DMKVSICH - 00030200
- * GPR12 = DMKVSIEX BASE 00030300
- * ALL OTHER REGISTERS CONTAIN THE SAME VALUES THAT THEY 00030400
- * HAD IN DMKVSJ 00030500
- * 00031000
- * EXIT CONDITIONS - 00032000
- * 00033000
- * FOR DMKVSIEX - NORMAL 00034000
- * THE CORRECT STATUS AND CONDITION CODES ARE REFLECTED TO THE 00035000
- * VIRTUAL MACHINE, AND, IF APPROPRIATE, THE I/O IS STARTED 00036000
- * 00037000
- * DMKVSI BRANCHES TO DMKVSJ FOR SUBROUTINES AND FOR 00038000
- * EXIT PROCESSING AND HIO AND CLCH SIMULATION 00038200
- * 00038400
- * 00038600
- * 00039000
- * CALLS TO OTHER ROUTINES - 00040000
- * 00041000
- * DMKCCWTR - TO TRANSLATE THE USER'S CHANNEL PROGRAM 00043000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR IOBLOKS 00044000
- * DMKFRET - TO RETURN USED IOBLOKS TO FREE STORAGE 00045000
- * DMKIOSQV - TO SCHEDULE THE VIRTUAL OPERATION 00046000
- * DMKVCAST - TO SIMULATE A START I/O TO A VIRTUAL CTCA 00047000
- * DMKVCATS - TO SIMULATE A TEST I/O TO A VIRTUAL CTCA 00048000
- * DMKSTKIO - TO STACK AN INTERRUPT DUE TO THE COMPLETION OF A 00050000
- * VIRTUAL ENABLE CAUSED BY A HIO 00051000
- * DMKDSPCH - EXIT VIA GOTO AFTER I/O IS SCHEDULED BY DMKIOSQV 00052000
- * DMKVCNEX - EXIT VIA GOTO TO SIMULATE VIRTUAL 1052 CONSOLE 00056000
- * DMKVSCVR - TO VERIFY THAT THE NOTRANS OPTION IS VALID 00056100
- * DMKVSPTO - TO SIMULATE A TIO TO A UNIT RECORD INPUT DEVICE 00057000
- * DMKSCHDL - TO DROP A USER FROM Q 00058000
- * DMKVIOC1 - TO REFLECT CONDITION CODE 1 CSW STATUS 00059000
- * DMKVIOIN - IOB INTERRUPT RETURN ADDRESS (IOBIRA) 00060000
- * DMKVSJEX - TO HANDLE HIO AND CLCH AND SUBROUTINES 00061000
- * 00062000
- * EXTERNAL REFERENCES - 00063000
- * 00064000
- * NONE 00065000
- * 00066000
- * TABLES / WORKAREAS - 00067000
- * 00068000
- * VCHBLOK,VCUBLOK, AND VDEVBLOK ARE REFERENCED AND UPDATED 00069000
- * 00070000
- * REGISTER USAGE - 00071000
- * 00072000
- * GPR0 = CONDITION CODE RETURNED FROM DMKSCNVU 00073000
- * GPR1 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00074000
- * GPR2 = SCRATCH - OR USED FOR DEDICATED CHANNEL SUPPORT 00075000
- * GPR3 = ADDRESS OF VBLOK THAT CONTAINS SUBCHANNEL STATUS 00076000
- * GPR4 = CSW STATUS TO BE STORED 00077000
- * GPR5 = INTERNAL SUBROUTINE LINKAGE 00078000
- * GPR6 = VCHBLOK BASE 00079000
- * GPR7 = VCUBLOK BASE 00080000
- * GPR8 = VDEVBLOK BASE 00081000
- * GPR9 = VIRTUAL DEVICE ADDRESS 00082000
- * GPR10 = IOBLOK BASE 00083000
- * GPR11 = VMBLOK BASE 00084000
- * GPR12 = DMKVSI BASE 00085000
- * GPR13 NOT USED 00086000
- * GPR14 = EXTERNAL LINKAGE 00087000
- * GPR15 = EXTERNAL LINKAGE 00088000
- EJECT 00089000
- * 00090000
- * NOTES - 00091000
- * 00092000
- * OPERATION - 00093000
- * 1. SET CONDITION CODE IN VIRTUAL PSW TO ZERO 00094000
- * 2. CALCULATE VIRTUAL UNIT ADDRESS USING REGISTER AND DISPLACE- 00095000
- * MENT VALUES PASSED BY PRIVILEGED IN VMINST 00096000
- * 3. CALL DMKSCNVU TO LOCATE VCHBLOK, VCUBLOK, AND VDEVBLOK, 00097000
- * AND SAVE THE RESULTING CONDITION IN GPR0 00098000
- * 4. BRANCH TO HANDLE SIO, TIO, AND TCH, DESCRIBED 00099000
- * IN SECTIONS A-C RESPECTIVELY. 00099500
- * 5. BRANCH TO DMKVSJ FOR SUBROUTINES AND EXIT PROCESSING 00100000
- * AND TO SIMULATE HIO AND CLCH 00100500
- *. 00101000
- EJECT 00102000
- COPY OPTIONS 00103000
- COPY LOCAL OPTIONS 00104000
- SPACE 2 00105000
- DMKVSI CSECT 00106000
- ENTRY DMKVSIEX,DMKVSICT,DMKVSICW 00107000
- ENTRY DMKVSISI COUNT OF SIO (9C00) INSTRUCTIONS @V2B2638 00108000
- ENTRY DMKVSISF COUNT OF SIOF (9CX1) INSTRUCTIONS@V2B2638 00109000
- ENTRY DMKVSITI COUNT OF TIO (9DX0) INSTRUCTIONS @V2B2638 00110000
- ENTRY DMKVSICI COUNT OF CLRIO (9DX1) @V2B2638 00111000
- * INSTRUCTIONS 00112000
- ENTRY DMKVSITC COUNT OF TCH (9FXX) INSTRUCTIONS @V2B2638 00115000
- ENTRY DMKVSIVS INTERNAL SYM. 'VSIO'(FOR EVMA) @V386198 00116000
- ENTRY DMKVSICH FROM VSJ TO PROC CLCH AS A TCH @VA14370 00116100
- EXTRN DMKVIOMK @VA12128 00117000
- EXTRN DMKVIOIN 00118000
- EXTRN DMKVIOC1 00119000
- EXTRN DMKSCHDL 00120000
- EXTRN DMKCCWTR 00121000
- EXTRN DMKIOSQV 00122000
- EXTRN DMKSTKIO 00123000
- EXTRN DMKSCNVU 00124000
- EXTRN DMKVCAST,DMKVCATS @VA12128 00125000
- EXTRN DMKVSPEX,DMKVSPTO @VA03503 00126000
- EXTRN DMKVCNEX 00127000
- EXTRN DMKVSJEX @VA12128 00128000
- EXTRN DMKDSPCH @VA12128 00128500
- AIF (NOT &VIRREAL).NOVR1 **AIF** 00129100
- EXTRN DMKVSCVR @VA09586 00129200
- .NOVR1 ANOP 00129300
- AIF (NOT &TRACE(6)).TRA1 **AIF** 00130000
- EXTRN DMKTRDSI @V4M0240 00131000
- .TRA1 ANOP 00132000
- AIF (NOT &AP).LOKSY4 00133000
- EXTRN DMKLOKSY,DMKDSPRU @VA08305 00134000
- .LOKSY4 ANOP 00135000
- EXTRN DMKSTKDE,DMKSTKOP,DMKSTKMP @VA08305 00136000
- SPACE 2 00137000
- USING PSA,R0 00138000
- USING VCHBLOK,R6 00139000
- EXTRN DMKDSPA @V408246 00140000
- EXTRN DMKDSPRQ @V408246 00141000
- USING VCUBLOK,R7 00142000
- USING VDEVBLOK,R8 00143000
- USING IOBLOK,R10 00144000
- USING VMBLOK,R11 00145000
- USING DMKVSIEX,R12 00146000
- EJECT 00147000
- *. 00148000
- *********************************************************************** 00149000
- * 00150000
- * 00151000
- * EXPANDED VMA PARTIAL EMULATION FUNCTION FOR SIO AND SIOF: 00152000
- * 00153000
- * INVOKED BY THESE INSTRUCTIONS WHEN EXECUTED IN PROBLEM STATE 00154000
- * WITH CONTROL REGISTER 6 BYTE 0 SET TO B'10XXXX1X' (X = 0 OR 1) 00155000
- * AND BIT 3 OF THE ASSIST CONTROLS FULLWORD (OFFSET X'14' 00156000
- * INTO THE MICBLOK) SET TO 1. 00157000
- * 00158000
- * REGISTER INPUT: 00159000
- * CR 6 = BITS 0-7 ARE THE ASSIST FLAGS; BITS 8-28 ADDRESS 00160000
- * THE MICBLOK (THE VIRTUAL MACHINE POINTER LIST) 00161000
- * 00162000
- * SYSTEM DATA AREAS REFERENCED (BY MODULE WHERE APPLICABLE): 00163000
- * DMKPRV - 'DMKPRVMA' (EQUALS 'VMALIST') 00164000
- * DMKPSA - 'AVMALIST', 'PRNPSW', CPCREGS, TIMER FIELDS, 00165000
- * TRACING INFORMATION, 'CPSTATUS', 'PROPSW' 00166000
- * MICBLOK, VCHBLOK, VCUBLOK, VDEVBLOK, VMBLOK 00167000
- * 00168000
- * 00169000
- * 00170000
- * EXIT TO 'DMKVSIVS' (PATH AVAILABLE AND NO INTERRUPTS PENDING) 00171000
- * NOTE: THE CONTENT OF ANY UNSPECIFIED GPR IS UNPREDICTABLE 00172000
- * REGISTER OUTPUT: 00173000
- * CR 0 = VALUE FROM 'CPCREG0' 00174000
- * CR 8 = VALUE FROM 'CPCREG8' 00175000
- * GPR 3 = ADDRESS OF EITHER VCHBLOK, VCUBLOK, OR VDEVBLOK 00176000
- * GPR 4 = ZERO 00177000
- * GPR 6 = ADDRESS OF THE VCHBLOK 00178000
- * GPR 7 = ADDRESS OF THE VCUBLOK 00179000
- * GPR 8 = ADDRESS OF THE VDEVBLOK 00180000
- * GPR 11 = X'A8' LESS THAN 'MICVPSW' (ADDRESS OF VMBLOK) 00181000
- * GPR 12 = ADDRESS OF 'DMKVSIEX' 00182000
- * GPR 13 = VIRTUAL DEVICE ADDRESS (RIGHT JUSTIFIED) 00183000
- * 00184000
- * EXIT TO 'DMKVSIEX' (COULDN'T FIND AN AVAILABLE PATH TO DEVICE) 00185000
- * REGISTER OUTPUT: 00186000
- * CR 0,8 AND GPR 11,12 SAME AS FOR EXIT TO 'DMKVSIVS' 00187000
- * 00188000
- *********************************************************************** 00189000
- *. 00190000
- SPACE 00191000
- DMKVSIEX DS 0D %V386198 00192000
- NI VMPSW+2,X'FF'-X'30' SET CC = 0 %V386198 00193000
- NI VMPSW+4,X'FF'-X'30' SET CC = 0 %V386198 00194000
- NI VMDSTAT,X'FF'-VMTIO REMOVE TIO-BUSY FLAG %V386198 00195000
- SR R4,R4 SET CSW-STORE SW TO STATUS ONLY %V386198 00196000
- CLI VMINST,X'83' DIAG CONSOLE WRITE ?? %V200730 00197000
- BE DIAGDEV YES, GO FIND CNTROL BLOCKS %V2B2638 00198000
- L R1,VMINST I/O INSTRUCTION BEING EXECUTED %VA01382 00199000
- N R1,F4095 KEEP ONLY DISPLACEMENT %V386198 00200000
- IC R8,VMINST+2 PICK UP REGISTER NUMBER %V386198 00201000
- N R8,F240 KEEP ONLY REGISTER NUMBER %V386198 00202000
- BZ DIAGDEV NO REGISTER SPECIFIED %VA01382 00203000
- SRL R8,2 GET REGISTER NUMBER X 4 %V386198 00204000
- AH R1,VMGPRS+2(R8) COMPUTE DEVICE ADDRESS %V386198 00205000
- DIAGDEV LR R13,R1 SAVE DEV ADDRESS %V200730 00206000
- CALL DMKSCNVU GO GET VCH, VCU, AND VDEV BLOKS %V386198 00207000
- BALR R0,0 PRESERVE CONDITION CODE %V386198 00208000
- SPACE 2 00209000
- BAL R9,GETLOCK GET SYSTEM LOCK @VA09728 00209100
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00209200
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00209300
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00209400
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00209500
- LA R2,X'30' COND CODE IF DEVICE NOT FOUND %VA01527 00210000
- LA R1,1 INCREMENT VALUE %V2B2638 00211000
- AL R1,DMKVSICT ADD CALLS TO DMKVSIEX %V2B2638 00212000
- ST R1,DMKVSICT AND SAVE %V2B2638 00213000
- LA R1,1 INCREMENT VALUE FOR LATER %V2B2638 00214000
- SPACE 00215000
- CLI VMINST,X'9D' SIO OR TIO ? %V386198 00216000
- BL VIOSIO START I/O %V386198 00217000
- BE VIOTIO TEST I/O 00218000
- CLC VMINST(2),TCHOPER HIO OR TCH? @VMD0117 00219000
- BL VIOHIO HALT I/O 00220000
- BE VIOTCH TEST CHANNEL @VMD0117 00221000
- BH VIOCLCH CLEAR CHANNEL @VMD0117 00222000
- EJECT 00223000
- *. 00224000
- * A. VIRTUAL SIO SIMULATION - 00225000
- * 1. IF ALL BLOCKS WERE NOT FOUND, SET VIRTUAL CONDITION 00226000
- * CODE 3 AND EXIT. 00227000
- * 3. IF THE ADDRESSED SUBCHANNEL IS BUSY OR HAS CE PENDING, 00228000
- * SET VIRTUAL CONDITION CODE 2 AND EXIT. 00229000
- * 4. IF THE ADDRESSED CU OR DEVICE IS BUSY OR HAS STATUS 00230000
- * PENDING, OR, FOR MINIDISKS, IF THE DEVICE IS RESERVED 00231000
- * BY ANOTHER USER, STORE STATUS, SET VIRTUAL CC 1, AND EXIT. 00232000
- * 5. IF THE PATH TO THE DEVICE IS FREE, TRANS FOR USER'S 00233000
- * PAGE 0, AND LOAD HIS VIRTUAL CAW; THEN BASED ON THE 00234000
- * VIRTUAL DEVICE TYPE, PROCESS AS FOLLOWS- 00235000
- * 6. -IF THE DEVICE IS A TERMINAL, GOTO DMKVCNEX TO SIMULATE 00236000
- * THE OPERATION. 00237000
- * -IF THE DEVICE IS NON-DEDICATED U/R, GOTO DMKVSPEX 00238000
- * TO SIMULATE THE OPERATION. 00239000
- * -OTHERWISE, CONSTRUCT AN IOBLOK, STORE THE DEVICE 00240000
- * ADDRESS AND CAW, AND CALL DMKCCWTR. 00241000
- * 7. IF THE OPERATION IS AN ENABLE TO A VIRTUAL 270X LINE, 00242000
- * LET THE IOBLOK STAY ON THE VDEVBLOK FOR THE 'DIAL' CMD. 00243000
- * 8. IF THE OPERATION IS DIRECTED AT A VIRTUAL CTCA, CALL 00244000
- * DMKVCAST TO SIMULATE THE DEVICE OPERATIONS. 00245000
- * 9. OTHERWISE, PLACE THE USER IN IOWAIT AND CALL DMKIOSQV 00246000
- * TO SCHEDULE THE REAL I/O OPERATION. 00247000
- * 10. EXIT VIA GOTO DMKDSPCH. 00248000
- *. 00249000
- SPACE 00250000
- VIOSIO EQU * %V386198 00251000
- CLI VMINST,X'9C' IS IT AN SIO? %V2B2638 00252000
- BNE VIOSIO1 NOPE, MUST BE DIAG. %V2B2638 00253000
- TM VMINST+1,X'01' IS IT AN SIOF? %V2B2638 00254000
- BO SIOF YUP, BR. %V2B2638 00255000
- AL R1,DMKVSISI ADD SIO COUNT %V2B2638 00256000
- ST R1,DMKVSISI AND RE-STORE %V2B2638 00257000
- B VIOSIO1 CONTINUE %V2B2638 00258000
- SPACE 00259000
- SIOF AL R1,DMKVSISF ADD SIOF COUNT TO INCREMENT %V2B2638 00260000
- ST R1,DMKVSISF AND RE-STORE %V2B2638 00261000
- SPACE 00262000
- VIOSIO1 EQU * HERE WHEN COUNTS ARE BUMPED %V2B2638 00263000
- SPM R0 RESTORE COND. CODE FROM DMKSCNVU %V386198 00264000
- BNZ VIOEXIT EXIT WITH CC = 3 - DEV NOT FOUND %VA01527 00265000
- C R11,AVMREAL V=R USER? @VA08664 00266000
- BNE NEEDLOCK NO, MUST HAVE LOCK @VA09201 00266300
- CLC VMINST(2),=X'9C01' IS THIS SIOF ? @VA09201 00266600
- BNE NEEDLOCK NO, NEED LOCK @VA09201 00266900
- TM VDEVSTAT,VDEVDED DEDICATED DEVICE ? @VA09201 00267200
- BO VIOSIO2 YES, BYPASS LOCKING @VA09201 00267500
- NEEDLOCK EQU * @VA09201 00267800
- BAL R9,GETLOCK NO, GO GET THE SYSTEM LOCK @VA08664 00268000
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00268200
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00268400
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00268600
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00268800
- VIOSIO2 EQU * @VA08664 00269000
- LR R10,R5 SAVE CCW ADDRESS FROM HVC @VA08664 00270000
- BAL R9,CHSCAN IS CHANNEL BUSY OR CE PENDING ? %V386198 00272000
- LA R2,X'20' CC IF NOT BUSY, CE PENDING %V386198 00273000
- BNZ VIOEXIT CE PENDING - SET CC=2 AND EXIT %V386198 00274000
- SPACE 00275000
- BAL R9,CUSCAN CHECK IF CU BUSY OR CUE PENDING %V386198 00276000
- BO SIOCUE NOT BUSY, CUE PENDING %V386198 00277000
- SPACE 00278000
- BAL R9,DEVSCAN IS DEVICE BUSY OR INT PENDING ? %V386198 00279000
- EJECT 00283000
- * 00284000
- * RETURN IS HERE IF PATH TO DEVICE IS NOT BUSY AND 00285000
- * NO INTERRUPTS ARE PENDING 00286000
- * 00287000
- CLI VMINST,X'83' DIAG SIO TO CONSOLE ?? %V200730 00288000
- BNE VSIO NO, REGULAR SIO %V200730 00289000
- LR R2,R10 GET CCW ADDRESS @VA08305 00290000
- B TSTDED1 TEST FOR DED CHAN @V200730 00291000
- SPACE 00292000
- VSIO DS 0H @V200730 00293000
- DMKVSIVS EQU VSIO FOR USE AS ENTRY IN EVMA LIST @V386198 00294000
- LA R1,CAW LOGICAL ADDRESS OF USER'S CAW 00295000
- SL R6,VMCHSTRT CHAN. DISP. @VA01770 00296000
- SL R7,VMCUSTRT C.U. DISP. @VA01770 00297000
- SL R8,VMDVSTRT DEV. DISP @VA01770 00298000
- TRANS 2,1,OPT=(BRING,DEFER) GET USER'S PAGE 0 00299000
- AL R6,VMCHSTRT RESTORE VCHANBLOKADDR @VA01770 00300000
- AL R7,VMCUSTRT RESTORE CU ADDR @VA01770 00301000
- AL R8,VMDVSTRT RESTORE DEV. ADDR @VA01770 00302000
- BAL R9,LOADER3 GO RECALC ADDR IN R3 @VA13211 00302500
- L R2,0(,R2) GET LOGICAL ADDRESS OF USER'S 1ST 00303000
- * CCW 00304000
- TSTDED1 DS 0H @V200730 00305000
- TM VDEVSTAT,VDEVDED DO WE HAVE A DEDICATED DEVICE 00306000
- BO GETIOB YES, GO PERFORM REAL I/O 00307000
- SPACE 1 00309000
- TM VDEVTYPC,CLASTERM IS IT A TERMINAL DEVICE ? 00310000
- BZ TESTUR NO -- CHECK FOR UNIT RECORD 00311000
- CLI VDEVTYPE,TYP3210 IS IT A CONSOLE ?? 00312000
- BNE GETIOB NO - MUST BE ENABLE TO NON-DEDICATED LINE 00313000
- GOTO DMKVCNEX DMKVCNEX HANDLES USER CONSOLE IO 00314000
- SPACE 2 00315000
- TESTUR TM VDEVTYPC,CLASURI+CLASURO IS IT A UNIT RECORD DEVICE ?? 00316000
- BZ GETIOB NO -- IO DONE VIA DMKCCWTR 00317000
- GOTO DMKVSPEX DMKVSPEX HANDLES SPOOLED UNIT 00318000
- * RECORD IO 00319000
- EJECT 00320000
- GETIOB EQU * 00321000
- OI VDEVSTAT,VDEVBUSY+VDEVCHBS FLAG DEVICE AND CHANNEL 00322000
- OI VCHSTAT-VCHBLOK(R3),VCHBUSY MARK THE SUBCHANNEL BUSY 00323000
- OI VCUSTAT,VCUBUSY CONTROL UNIT IS BUSY @VA01700 00324000
- TM VCHTYPE,VCHBMX BMX CHANNEL ? @VA03150 00325000
- BNO IOBFREE NO - DON'T FLAG C U @VA03150 00326000
- OI VCUSTAT,VCUACTV FLAG CONTROL UNIT ACTIVE @VA03150 00327000
- TM VDEVTYPC,CLASTERM IS THIS A TERMINAL DEVICE? @VA03150 00328000
- BNO IOBFREE NO...CONTROL UNIT WILL BE ACTIVE @VA03150 00329000
- NI VCUSTAT,255-VCUACTV RESET ACTIVE FLAG @VA03150 00330000
- SPACE 00331000
- IOBFREE LA R0,IOBSIZE GET CORE 00332000
- CALL DMKFREE FOR AN IOBLOK 00333000
- LR R10,R1 USE GPR 10 FOR ADDRESSABILITY 00334000
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR THE IOBLOK 00335000
- ST R10,IOBLINK IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00336000
- * 00337000
- * 00338000
- OI IOBFLAG,IOBRELCU RELEASE CU @VA01700 00339000
- SPACE 00340000
- STH R13,IOBVADD SAVE VIRTUAL DEVICE ADDRESS 00341000
- L R1,=A(DMKVIOIN) 00342000
- ST R1,IOBIRA AND STORE IN IOBLOK 00343000
- ST R2,IOBCAW SAVE VIRTUAL ADDRESS OF FIRST CCW 00344000
- ST R10,VDEVIOB SAVE ADDRESS OF IOBLOK 00345000
- AIF (NOT &VIRREAL).NOVR3 **AIF** 00346000
- C R11,AVMREAL IS REQUEST FOR VIRT=REAL USER 00347000
- BNE CCWTR NO, TRANSLATE CCW'S @VA09201 00348100
- TM VMPSTAT,VMNOTRAN DOES USER WANT CCW TRANSLATION 00349000
- BZ CCWTR2 YES, CALL DMKCCW 00350000
- CALL DMKVSCVR SEE IF TRANSLATION IS NECESSARY @VA09586 00351000
- LTR R15,R15 CHECK RETURN CODE @VA09586 00352000
- BZ NOCCWTR2 NO TRANSLATION IS NECESSARY @VA09586 00353000
- .NOVR3 ANOP 00354000
- EJECT 00442000
- CCWTR2 BAL R9,GETLOCK MUST HAVE THE SYSTEM LOCK @VA08305 00443000
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00443100
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00443200
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00443300
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00443400
- CCWTR EQU * @VA09201 00443500
- ST R11,IOBMISC FLAG IOB AS PROCESSED BY CCWTRANS@VA08305 00444000
- LA R9,0(,R2) IOBCAW (LESS HIGH-ORDER BYTE) INTO R9, 00445000
- SL R6,VMCHSTRT MAKE R6 RELATIVE, CHAN. DISP @VA03811 00446000
- SL R7,VMCUSTRT MAKE R7 RELATIVE, C.U. DISP @VA03811 00447000
- SL R8,VMDVSTRT AND MAKE R8 "RELATIVE" FOR DMKCCW 00448000
- L R1,DMKVSICW GET TOTAL CCWTRANS CALL COUNT 00449000
- AL R1,F1 BUMP 00450000
- ST R1,DMKVSICW AND SAVE 00451000
- CALL DMKCCWTR GO TRANSLATE THE CHANNEL PROGRAM 00452000
- AL R6,VMCHSTRT RESTORE VCHANNEL BLOCK ADDRESS @VA03811 00453000
- AL R7,VMCUSTRT RESTORE VCONTROL UNIT ADDRESS @VA03811 00454000
- AL R8,VMDVSTRT NOW LET R8 = A(VDEVBLOK) AGAIN 00455000
- BAL R9,LOADER3 GO RECALC ADDR IN R3 @VA13211 00455500
- TM IOBSPEC2,IOBCLN CLEANUP JOB FOR CCWTR ?? @VA07728 00456000
- BZ NOCCWTR2 NOPE, GOOD, BR. @V407438 00457000
- * NOTE: R3 STILL POINTS TO AFFECTED SUBCHANNEL, R4 = 0 FOR STORECSW 00458000
- LA R0,IOBSIZE SIZE OF THE IOB @V407438 00459000
- LR R1,R10 IOB ADDRESS TO R1 @V407438 00460000
- CALL DMKFRET THROW IT AWAY @V407438 00461000
- SLR R10,R10 NO MORE IOB @V407438 00462000
- NI VDEVSTAT,X'FF'-(VDEVBUSY+VDEVCHBS) UNFLAG DEVICE@V407438 00463000
- NI VCHSTAT-VCHBLOK(R3),X'FF'-VCHBUSY UNFLAG SUBCHAN@V407438 00464000
- NI VCUSTAT,X'FF'-VCUBUSY UNFLAG CTL UNIT @V407438 00465000
- TM VCHTYPE,VCHBMX BMX CHANNEL? @V407438 00466000
- BZ REFBUSY NOPE, BR. @V407438 00467000
- NI VCUSTAT,X'FF'-VCUACTV UNFLAG CU @V407438 00468000
- B REFBUSY NOW GO REFLECT BUSY @V407438 00469000
- SPACE 00470000
- NOCCWTR2 DS 0H CONNECTOR 00471000
- TM IOBFLAG,IOBRELCU C.U. RELEASED AT INIT. ?? @VA06371 00472000
- BZ NORSTCUR NO, FLAGS ALL SET @VA06371 00473000
- NI IOBFLAG,X'FF'-IOBRELCU RESET C.U. REL. FLAG @VA06371 00474000
- NI VCUSTAT,255-VCUBUSY TURN OFF CU BUSY @VA08687 00475000
- NORSTCUR EQU * @VA06371 00476000
- LTR R1,R1 SHOULD DMKIOSQV BE CALLED?? 00477000
- BNZ VIOWAIT YES, GO START REAL I/O 00478000
- ST R11,IOBUSER OTHERWISE, SET UP OWNER OF I/O 00479000
- TM IOBSTAT,IOBCC3 CC = 0 ? @VA04501 00480000
- BNZ VIOGODSP NO..DO NOT RUN OR (TRACE) @VA04501 00481000
- B VIOEXITX AND LEAVE @VA08687 00482000
- EJECT 00483000
- VIOWAIT EQU * 00484000
- OI VMRSTAT,VMIOWAIT PLACE USER IN IOWAIT 00485000
- LA R15,1 * ADD 1 TO THE VIRTUAL START I/O COUNT 00486000
- AL R15,VMIOCNT * FOR ACCOUNTING. 00487000
- ST R15,VMIOCNT * 00488000
- TM VDEVSTAT,VDEVDED DEDICATE DEVICE? @VA11570 00488100
- BO VSIGTLOK YES, CHECK FOR ATTN INT. @VA11570 00488200
- CLI VDEVTYPC,CLASSPEC SPECIAL DEVICE? @VA04467 00489000
- BNE VIOQREAL NO... @VA04467 00490000
- VSIGTLOK DS 0H @VA11570 00490100
- BAL R9,GETLOCK MUST HAVE THE LOCK @VA08305 00491000
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00491020
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00491040
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00491060
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00491080
- TM VDEVSTAT,VDEVDED DEDICATE DEVICE? @VA11570 00491100
- BO VIOKNCP YES, CHECK FOR ATTN INT. @VA11570 00491200
- CLI VDEVTYPE,TYPCTCA IS IT A VIRTUAL CTCA? @VA04467 00492000
- BNE VIOKNCP NO...TEST FOR 3704/5 @VA04467 00493000
- TM VDEVSTAT,VDEVDED DEDICATED CHANNEL-TO-CHANNEL ? 00494000
- BO VIOQREAL YES - START REAL I/O OPERATION 00495000
- CALL DMKVCAST START I/O TO VIRTUAL CTCA @VA01092 00496000
- B VIOEXITY DO NOT SET CHANNEL ACTIVE @VA01092 00497000
- EJECT 00508000
- VIOKNCP EQU * @VA04467 00509000
- TM VDEVSTAT,VDEVDED DEDICATE DEVICE? @VA11570 00509100
- BO VSIATDED YES, GO AHEAD FOR CHECK ATTN. @VA11570 00509200
- CLI VDEVTYPE,TYP3705 IS THIS A 3704/5 CTLR? @VA04467 00510000
- BNE VIOQREAL NO...NOTHING SPECIAL @VA04467 00511000
- VSIATDED DS 0H @VA11570 00511100
- TM VDEVINTS,ATTN DID WE HIT THE TIMING WINDOW? @VA04467 00512000
- BZ VIOQREAL NO...CONTINUE AS PLANNED @VA04467 00513000
- MVI IOBCSW+4,BUSY+ATTN BUSY FROM THE START I/O @VA04467 00514000
- NI VDEVINTS,X'FF'-ATTN RESET PENDING INTERRUPT @VA04467 00515000
- GOTO DMKVIOC1 GO SET CC = 1 AND STORE CSW @VA05037 00516000
- SPACE 00517000
- VIOQREAL EQU * @VA08629 00517050
- TM IOBSPEC3,IOBSENSE SPECIAL 2250/3250 SITUATION @VA08629 00517100
- * OF STANDALONE SENSE WITHOUT EXECUTING SENSE ON REAL HARDWARE 00517150
- BZ VIOREAL2 @VA08629 00517200
- L R15,IOBCAW ADDRESS OF CHANNEL PROGRAM @VA08629 00517250
- LH R14,6(,R15) GET SENSE LENGTH @VA08629 00517300
- LH R1,IOBCSW+6 CALCULATE RIGHT RESIDUAL COUNT @VA08629 00517350
- SLR R14,R1 ... @VA08629 00517400
- STH R14,IOBCSW+6 STORE IN IOBLOK FOR LATER @VA08629 00517450
- LA R14,(256*(CE+DE)) PREPARE TO REFLECT CC=0 AND @VA08629 00517500
- * CE+DE TO 2250/3250 WITHOUT EXECUTING SENSE ON HARDWARE 00517550
- STH R14,IOBCSW+4 NOW DEVICE STATUS @VA08629 00517600
- LA R15,8(,R15) CSW POINTS TO 8 PAST SENSE @VA08629 00517650
- ST R15,IOBCSW ... @VA08629 00517700
- ST R11,IOBUSER STORE VMBLOK ADDRESS IN IOBLOK @VA08629 00517750
- CALL DMKSTKIO THIS IOBLOK BEFORE PENDING I/O @VA08629 00517800
- NI VMRSTAT,X'FF'-VMIOWAIT TAKE USER OUT OF IOWAIT @VA08629 00517850
- B SKIPIOS BYPASS CALLING DMKIOS @VA08629 00517900
- VIOREAL2 EQU * @VA08629 00517950
- TM VMINST+1,X'01' MAYBE START I/O FAST RELEASE@VA01382 00519000
- BZ IOSCALL NO -- JUST CALL DMKIOSQV @VA01382 00520000
- TM VMTRCTL,VMTRSIO TRACING START I/O ? @VA01382 00521000
- BO IOSCALL YES - USE NORMAL PATH @VA01382 00522000
- LA R1,VMVCR0 CHECK FOR BLKMPX ENABLED @VA01382 00523000
- TM VMPSTAT,VMV370R IS THERE AN ECBLOK ? @VA01382 00524000
- BZ *+8 NO -- ALREADY HAVE CR0 @VA01382 00525000
- L R1,VMECEXT POINT TO EXTENDED CR0 @VA01382 00526000
- TM 0(R1),BLKMPX BLOCK MULTIPLEXING ENABLED ? @VA01382 00527000
- BNZ NOWAIT YES,SIOF @VA08305 00528000
- BAL R9,GETLOCK NO,MUST HAVE THE SYSTEM LOCK @VA08305 00529000
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00529200
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00529400
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00529600
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00529800
- B IOSCALL NOW GO CALL IOS @VA08305 00530000
- NOWAIT EQU * @VA08305 00531000
- OI IOBSPEC,IOBSIOF START I/O FAST RELEASE @VA01382 00532000
- NI VMRSTAT,255-VMIOWAIT LET THE USER RUN @VA01382 00533000
- AIF (NOT &AP).APCHK4 00534000
- TM APSTAT1,APUOPER RUNNING IN AP MODE? @VA08305 00535000
- BNO IOSCALL NO,FOLLOW THE NORMAL PATH @VA08305 00536000
- TM APSTAT1,PROCIO IS THIS THE MAIN @VA08305 00537000
- BNO SWITCH NO,MUST EVENTUALLY SWITCH @VA08305 00538000
- L R15,=A(DMKLOKSY) POINT TO THE SYSTEM LOCK @VA08305 00539000
- L R15,0(R15) PICK UP THE LOCK WORD @VA08305 00540000
- LH R1,LPUADDR AND MY PROCESSOR ID @VA08305 00541000
- CR R1,R15 DO I HOLD IT? @VA08305 00542000
- BE IOSCALL YES,GO STRAIGHT TO IOS @VA08305 00543000
- LTR R15,R15 IS THE LOCK AVAILABLE? @VA08305 00544000
- BNZ SWITCH DON'T WASTE TIME TRYING @VA08305 00545000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO TRY FOR THE LOCK @VA08305 00546000
- BZ IOSCALL GOT IT, GO TO IOS @VA08305 00547000
- SWITCH STH R13,VMACTDEV SAVE VADDR FOR DMKTHI @VA08305 00548000
- LH R1,VCHADD GET CHANNEL ADDRESS @VA08305 00549000
- * NOTE,IF HERE MUST BE DASD OR TAPE 00550000
- SRL R1,7 TIMES 2 @VA08305 00551000
- L R15,=A(DMKVIOMK) GET ADDRESS OF MASK TABLE @VA08305 00552000
- LH R1,0(R1,R15) GET APPROPRIATE MASK @VA08305 00553000
- O R1,VMIOACTV-2 ADD TO PRESENT ACTIVE MASK @VA08305 00554000
- STH R1,VMIOACTV ... @VA08305 00555000
- LA R0,CPEXSIZE SIZE OF CPEXBLOK @VA08305 00556000
- CALL DMKFREE GO GET ONE @VA08305 00557000
- USING CPEXBLOK,R1 @VA08305 00558000
- LR R2,R11 SAVE VMBLOK POINTER @VA08305 00559000
- L R11,ASYSVM POINT TO SYSTEM VMBLOK @VA08305 00560000
- STM R0,R14,CPEXREGS SAVE ALL THE REGISTERS @VA08305 00561000
- LA R15,CALLIOS RETURN ADDRESS AFTER UNSTACK @VA08305 00562000
- ST R15,CPEXADD ..... @VA08305 00563000
- DROP R1 @VA08305 00564000
- LR R11,R2 RESTORE R11 @VA08305 00565000
- TM APSTAT1,PROCIO IS THIS THE MAIN PROCESSOR? @VA08305 00566000
- BNO STACKOP NO, STACK FOR THE MAIN @VA08305 00567000
- CALL DMKSTKMP YES, STACK FOR THIS PROCESSOR @VA08305 00568000
- B VIOEXITY NOW EXIT, CC=0 IS ALREADY SET @VA08305 00569000
- STACKOP CALL DMKSTKOP STACK FOR OTHER PROCESSOR @VA08305 00570000
- B VIOEXITY AND EXIT @VA08305 00571000
- CALLIOS CHARGE SWITCH,(R2) START CHARGING ORIGINAL USER @VA08305 00572000
- CALL DMKIOSQV NOW CALL IOS @VA08305 00573000
- CHARGE SWITCH,ASYSVM EXIT POINTING TO THE SYSTEM @VA08305 00574000
- SPACE 00574500
- GOTO DMKDSPCH ALL DONE @VA08305 00575000
- SPACE 00576000
- .APCHK4 ANOP 00577000
- IOSCALL EQU * SCHEDULE VIRTUAL MACHINE I/O @VA01382 00578000
- CALL DMKIOSQV CALL TO EXECUTE I/O @VA01092 00579000
- SKIPIOS STH R13,VMACTDEV SAVE VADDR FOR DMKTHI @VA08629 00580000
- TM VDEVTYPC,CLASDASD+CLASTAPE DISK OR TAPE? @VA08776 00581500
- BZ VIOEXITY IF NEITHER, BRANCH @VA05377 00582000
- LH R1,VCHADD GET CHANNEL ADDRESS 00583000
- SRL R1,7 TIMES 2 00584000
- L R15,=A(DMKVIOMK) GET ADDRESS OF MASK TABLE @VA05037 00585000
- LH R1,0(R1,R15) GET APPROPRIATE MASK @VA05037 00586000
- O R1,VMIOACTV-2 ADD TO PRESENT ACTIVE MASK 00587000
- STH R1,VMIOACTV ... 00588000
- B VIOEXITY AND LEAVE (NO V.M. TRACING DONE HERE). 00589000
- SPACE 00590000
- SIOCUE EQU * HERE IF A CONTROL UNIT END INTERRUPT IS PENDING 00591000
- L R5,=A(256*(SM+BUSY)) SET INTERRUPT STATUS FOR CSW 00592000
- NI VCUINTS,X'FF'-CUE CUE FOR ADDRESSED DEVICE - CLEAR CUE 00593000
- NI VDEVSTAT,X'FF'-VDEVCUE FROM CU AND DEVICE BLOKS 00594000
- L R5,=A(256*(CUE+BUSY)) SET CUE + BUSY INSTEAD 00595000
- B STTOTCSW AND GO STORE TOTAL CSW @VA05104 00596000
- EJECT 00597000
- *---------------------------------------------------------------------* 00597025
- * * 00597050
- * LOADER3: * 00597075
- *---------------------------------------------------------------------* 00597100
- * * 00597125
- * HERE TO RECALCULATE THE VBLOK ADDRESS EXPECTED IN R3 * 00597150
- * AFTER CALLS TO DMKPTRAN AND DMKCCWTR. * 00597175
- * * 00597200
- * THIS RECALCULATION IS NECESSARY, BECAUSE UPON RETURN * 00597225
- * THE CONTENTS OF R3 MAY HAVE BEEN ALTERED (DUE TO RE- * 00597250
- * ENTRANCY). * 00597275
- *---------------------------------------------------------------------* 00597300
- LOADER3 DS 0H HERE TO RECALC VBLOK ADDR IN R3 @VA13211 00597325
- LR R3,R6 LOAD ADDR OF VCHBLOK @VA13211 00597350
- TM VCHTYPE,VCHSEL IS IT FOR SELECTOR CHANNEL? @VA13211 00597375
- BOR R9 YES...RETURN TO CALLER @VA13211 00597400
- LR R3,R7 ELSE; LOAD ADDRESS OF VCUBLOK @VA13211 00597425
- TM VCUTYPE,VCUSHRD+VCUCTCA SHARED SUB-CHANNEL ? @VA13211 00597450
- BNZR R9 YES...RETUNR TO CALLER @VA13211 00597475
- LR R3,R8 CHANNEL STATUS IN DEVICE BLOK @VA13211 00597500
- BR R9 RETURN TO CALLER @VA13211 00597525
- EJECT 00597550
- *. 00598000
- * B. VIRTUAL TIO SIMULATION - 00599000
- * 1. IF ALL VBLOKS WERE NOT FOUND, SET VIRTUAL CONDITION 00600000
- * CODE 3 AND EXIT. 00601000
- * 3. IF THE VIRTUAL SUBCHANNEL IS BUSY OR HAS AN INTERRUPT 00602000
- * PENDING FOR A DEVICE OTHER THAN THE ONE ADDRESSED, SET 00603000
- * VIRTUAL CONDITION CODE 2 AND EXIT. 00604000
- * 4. IF A CHANNEL END OR CUE IS PENDING FOR THE ADDRESSED 00605000
- * DEVICE, SET THE VIRTUAL CC = 1, CLEAR THE INTERRUPT, 00606000
- * AND STORE THE CSW. 00607000
- * 5. IF THE CUE IS PENDING FOR A DEVICE OTHER THAN THE ONE 00608000
- * ADDRESSED, RETURN STATUS OF SM+BUSY, AND DO NOT CLEAR 00609000
- * THE INTERRUPT; SET CC= 1, AND EXIT. 00610000
- * 6. IF THERE ARE DEVICE CLASS INTERRUPTS PENDING, OR IF 00611000
- * THE DEVICE IS "RESERVED" BY ANOTHER USER, STORE THE 00612000
- * STATUS AND CLEAR THE INTERRUPTS; SET VIRTUAL CC = 1, 00613000
- * AND EXIT. 00614000
- * 7. IF NO STATUS IS PENDING ON THE ADDRESSED PATH, 00615000
- * AND THE DEVICE IS NOT VIRL SPOOL RDR, EXIT WITH CC=0 00616000
- * 8. IF THE DEVICE IS A VIRTUAL CTCA, CALL DMKVCATS FOR 00617000
- * SIMULATION OF THE TEST I/O TO AN IDLE DEVICE. 00618000
- * 9. IF THE DEVICE IS A DEDICATED CTCA, BUILD AN IOBLOK 00619000
- * TO SCHEDULE A REAL TEST I/O AND CALL DMKIOSQV TO PERFORM 00620000
- * THE NECESSARY INSTRUCTION. 00621000
- * 10. FOR A VIRT READER DEVICE, SET CC=0 IF THE READER HAS 00622000
- * ACTIVE FILE. SET CC=1 IF THE RDR IS EMPTY ( DMKVSPTO IS 00623000
- * CALLED TO DECIDE IF THE READER IS EMPTY) 00624000
- * (A CHANNEL-TO-CHANNEL ADAPTER MAY PRESENT CSW STATUS TO A 00625000
- * TEST I/O EVEN THOUGH THE DEVICE HAS NO ACTIVE COMMAND.) 00626000
- *. 00627000
- SPACE 00628000
- VIOTIO EQU * 00629000
- BAL R9,GETLOCK GO GET THE SYSTEM LOCK @VA08305 00630000
- USING *,R9 NEW ADDRESSABILITY TO HERE @VA12128 00630200
- L R12,ADMKVSI RESTORE BASE REG @VA12128 00630400
- DROP R9 IT WAS ONLY TEMPORARY @VA12128 00630600
- USING DMKVSI,R12 STANDARD ADDRESSABILITY @VA12128 00630800
- TM VMINST+1,X'01' IS IT CLRIO? @V2B2638 00631000
- BO CLRIO YUP, BR @V2B2638 00632000
- AL R1,DMKVSITI ADD TIO COUNT TO INCREMENT @V2B2638 00633000
- ST R1,DMKVSITI AND RE-STORE @V2B2638 00634000
- B VIOTIO1 CONTINUE @V2B2638 00635000
- SPACE 00636000
- CLRIO AL R1,DMKVSICI ADD CLRIO COUNT TO INCREMENT @V2B2638 00637000
- ST R1,DMKVSICI AND RE-STORE @V2B2638 00638000
- SPACE 00639000
- VIOTIO1 EQU * HERE WHEN COUNTS ARE BUMPED @V2B2638 00640000
- SPM R0 RESTORE COND. CODE FROM DMKSCNVU 00641000
- BNZ VIOEXIT EXIT CC = 3 -- DEVICE NOT FOUND @VA01527 00642000
- BAL R9,CHSCAN TEST FOR CHANNEL BUSY OR CE PENDING 00644000
- BO TIOCE CHANNEL END PENDING -- REFLECT IT 00645000
- BAL R9,CUSCAN TEST FOR C.U. BUSY OR CUE PENDING 00647000
- BO TIOCUE CONTROL UNIT END PENDING 00648000
- BAL R9,DEVSCAN TEST FOR DEVICE BUSY OR INTRPT PENDING 00650000
- SPACE 2 00651000
- * 00652000
- * HERE IF PATH TO DEVICE IS NOT BUSY AND NO 00653000
- * INTERRUPTS ARE PENDING 00654000
- * 00655000
- SPACE 00656000
- TM VDEVSTAT,VDEVNRDY IS DEVICE READY ? 00657000
- BZ TIOCTCA NO -- CHECK FOR VIRTUAL CHAN-TO-CHAN 00658000
- LA R5,UC*256 SET UNIT CHECK STATUS, 00659000
- B STORECSW AND GO STORE THE CSW BYTES 4 AND 5 00660000
- SPACE 2 00661000
- TIOCTCA EQU * TEST FOR DEDICATED DEVICES @VA00398 00662000
- LA R3,IOBTIO INDICATE A TIO @VA00398 00663000
- TM VDEVSTAT,VDEVDED DEDICATED CHANNEL-TO-CHANNEL ? 00664000
- BO CTCAIOB YES - BUILD IOBLOK TO SCHEDULE THE 'TIO' 00665000
- TM VCUTYPE,VCUCTCA MIGHT THIS BE VIRTUAL CTCA ? @VA00398 00666000
- BZ TIORDR NO- GO CHECK SEE IF IT IS READER @VA03503 00667000
- CALL DMKVCATS TIO TO VIRTUAL CTCA 00668000
- BNZ STORECSW CC NON-ZERO => CSW STORED 00669000
- B VIOEXITX EXIT, CC = 0 00670000
- TIORDR EQU * @VA03503 00671000
- CLI VDEVTYPC,CLASURI IS IT RDR DEVICE? @VA03503 00672000
- BNE VIOEXITX NO- EXIT WITH CC=0 @VA03503 00673000
- TM VDEVTYPE,TYPRDR CARD READER TYPE UR INPUT? @VA04204 00674000
- BZ VIOEXITX NOPE, EXIT FORTHWITH @VA04204 00675000
- L R9,VDEVSPL GET SPOOL CONTROL BLOK @VA03503 00676000
- LTR R9,R9 ANY ACTIVE FILE? @VA03503 00677000
- BNZ VIOEXITX YES--EXIT WITH CC =0 @VA03503 00678000
- CALL DMKVSPTO VSP WILL DO THE FILE SEARCH @VA03503 00679000
- BNZ VIOEXITX FILE FOUND--EXIT WITH CC=0 @VA03503 00680000
- LA R5,UC*256 EMPTY RDR--SET UC STATUS @VA03503 00681000
- B STORECSW GO STORE CSW @VA03503 00682000
- TIOCE EQU * HERE IF CE IS PENDING 00683000
- TM VDEVSTAT,VDEVCHAN CE PENDING FOR ADDRESSED DEVICE? 00684000
- BO TIOCEPND YES... 00685000
- LA R2,X'20' NO -- EXIT WITH CC OF 2 00686000
- B VIOEXIT 00687000
- SPACE 2 00688000
- TIOCEPND EQU * 00689000
- NI VCHSTAT-VCHBLOK(R3),X'FF'-VCHCEPND CLEAR PENDING 00690000
- NI VDEVSTAT,X'FF'-VDEVCHAN AND FROM DEVICE 00691000
- LM R4,R5,VDEVCSW PICK UP THE CSW FROM THE DEVICE 00692000
- NI VDEVCSW+5,X'FF'-PCI REMOVE PCI 00693000
- B STORECSW AND GO STORE CSW 00694000
- SPACE 3 00695000
- TIOCUE EQU * HERE IF A CUE IS PENDING 00696000
- TM VDEVSTAT,VDEVCUE IS CUE PENDING FOR ADDRESSED DEVICE? 00697000
- BZ SETSM NO -- 00698000
- NI VCUINTS,X'FF'-CUE CLEAR INTERRUPT FROM CU 00699000
- NI VDEVSTAT,X'FF'-VDEVCUE AND DEVICE 00700000
- L R5,=A(CUE*256) SET CSW STATUS 00701000
- B STTOTCSW AND GO STORE TOTAL CSW @VA05104 00702000
- SPACE 2 00703000
- SETSM L R5,=A(256*(SM+BUSY)) SET CSW STATUS 00704000
- B STTOTCSW AND GO STORE TOTAL CSW @VA05104 00705000
- EJECT 00706000
- *. 00707000
- * C. VIRTUAL TCH SIMULATION - 00708000
- * 1. IF A VIRTUAL CHANNEL BLOK WAS NOT FOUND, RETURN VIRTUAL 00709000
- * CONDITION CODE 3. 00710000
- * 3. IF THE ADDRESSED CHANNEL IS NOT A SELECTOR, RETURN 00711000
- * VIRTUAL CONDITION CODE 0; MPX AND BMPX ARE NEVER BUSY. 00712000
- * 4. IF THE ADDRESSED CHANNEL IS BUSY, SET VIRTUAL CONDITION 00713000
- * CODE 2 AND EXIT. 00714000
- * 5. IF THE ADDRESSED CHANNEL HAS A CHANNEL CLASS INTERRUPT 00715000
- * PENDING, SET CC = 1 AND EXIT. 00716000
- * 6. IF THE CHANNEL IS FREE, EXIT. 00717000
- *. 00718000
- SPACE 00719000
- VIOTCH EQU * 00720000
- AL R1,DMKVSITC ADD TCH COUNT TO INCREMENT @V2B2638 00721000
- ST R1,DMKVSITC AND RE-STORE @V2B2638 00722000
- SPM R0 RESTORE COND. CODE FROM DMKSCNVU 00723000
- BC 4,VIOEXIT EXIT CC = 3 IF VCHBLOK NOT FOUND @VA01527 00724000
- SPACE 00725000
- VIOTCH2 DS 0H @VA10311 00726010
- TM VCHTYPE,VCHSEL THIS A SELECTOR CHANNEL??? @VA12875 00726011
- BNO CKPEND01 NO, CHECK FOR I/O PENDING @VA12875 00726012
- TM VCHSTAT,VCHBUSY IS THE CHANNEL BUSY???? @VA12875 00726013
- BNO CKPEND01 NO - SEE IF ANY I/O PENDING @VA12875 00726014
- LA R2,CC2 SET CC=2: CHANNEL IN BURST MODE @VA12875 00726015
- B VIOEXIT EXIT @VA12875 00726016
- CKPEND01 DS 0H CHECK FOR INTERRUPT PENDING @VA12875 00726017
- TM VMPEND,VMIOPND ANYTHING PENDING? @VA10311 00726020
- BNO VIOEXITX NO...GET OUT WITH CC=0 @VA10311 00726030
- SR R3,R3 ZERO REGISTER 3 @VA12875 00726033
- SR R4,R4 ZERO REGISTER 4 @VA12875 00726036
- LH R9,VCHADD GET CHANNEL ADDRESS @VA10311 00726040
- SRL R9,7 MAKE IT AN INDEX @VA10311 00726050
- AL R9,=A(DMKVIOMK) AND POINT TO INTERRUPT MASK @VA12875 00726060
- ICM R4,B'0011',0(R9) FOR THIS CHANNEL @VA12875 00726960
- ICM R3,B'0011',VMIOINT LOAD CURRENT PENDING CE @VA12875 00727860
- NR R4,R3 IS THERE AN INTERRUPT PENDING?? @VA12875 00728760
- BZ VIOEXITX NO ACTY ON CHAN..LEAVE CC=0 @VA12875 00729660
- LA R2,X'10' CE IS PENDING - SET CC = 1 00731000
- B VIOEXIT AND EXIT 00732000
- SPACE 00733000
- * 00753000
- * RE-ENTRY POINT FROM DMKVSJ TO PROCESS CLCH AS A TCH 00773000
- * 00793000
- DMKVSICH DS 0D @VA12128 00813000
- USING *,R15 ESTABLISH ADDRESSABILITY @VA12128 00833000
- L R12,=A(DMKVSI) RESTORE BASE REG @VA12128 00853000
- DROP R15 DON'T WANT R15 ANYMORE @VA12128 00873000
- USING DMKVSI,R12 RESTORE ADDRESSABILITY @VA12128 00893000
- B VIOTCH2 GO PROCESS AS TCH @VA12128 00913000
- EJECT 00990000
- * COMMON SUBROUTINES USED BY VIOSIO, VIOTIO, VIOTCH 00991000
- SPACE 2 00992000
- CHSCAN EQU * HERE TO TEST FOR CHANNEL BUSY OR CE PENDING %V386198 00993000
- LR R3,R6 SAVE POINTER TO CHANNEL BLOK %V386198 00994000
- TM VCHTYPE,VCHSEL SELECTOR CHANNEL ? %VA01771 00995000
- BO CHTEST YES %VA01771 00996000
- LR R3,R7 SAVE ADDRESS OF VCUBLOK %V386198 00997000
- TM VCUTYPE,VCUSHRD+VCUCTCA SHARED SUB-CHANNEL ? %V386198 00998000
- BNZ CHTEST YES.. %V386198 00999000
- LR R3,R8 CHANNEL STATUS IN DEVICE BLOK %V386198 01000000
- SPACE 01001000
- CHTEST TM VCHSTAT-VCHBLOK(R3),VCHBUSY IS SUBCHANNEL BUSY? %V386198 01002000
- BZ TESTCE NO -- %V386198 01003000
- LA R2,X'20' SET CONDITION CODE 2 01004000
- CLI VMINST,X'9D' PREVENT TIO BUSY LOOPS 01005000
- BNE VIOEXIT NOT A TIO - EXIT 01006000
- TM VDEVSTAT,VDEVBUSY DEVICE BUSY ?? 01007000
- BZ VIOEXIT NO -- RETURN 01008000
- LA R3,CLASSPEC*256+TYPCTCA VIRTUAL CTCA @VM01091 01009000
- CH R3,VDEVTYPC IS THIS A CHAN-CHAN ADAPT. @VM01091 01010000
- BE CALLSCH YES - CALL SCHEDULAR @VM01091 01011000
- CLI VDEVTYPC,CLASTERM TERMINAL CLASS ? @VM01091 01012000
- BNE IDLETIO NO - IN IDLE TIO LOOP @VM01091 01013000
- TM VDEVSTAT,VDEVDED DEDICATED DEVICE ? @VM01091 01014000
- BO CALLSCH YES - CALL SCHEDULAR @VM01091 01015000
- TM VDEVFLAG,VDEVENAB VIRTUAL 2702 LINE ? @VM01091 01016000
- BZ IDLETIO NO - IN IDLE TIO LOOP @VM01091 01017000
- BAL R3,DROPUSER PUT USER IN IDLE STATUS @VM01091 01018000
- B SETSM SET UP CSW @VM01091 01019000
- CALLSCH BAL R3,DROPUSER PUT USER IN IDLE STATUS @VM01091 01020000
- B VIOEXIT AND EXIT @VM01091 01021000
- IDLETIO OI VMDSTAT,VMTIO FLAG USER IN TIO BUSY LOOP @VM01091 01022000
- B VIOEXIT AND EXIT @VM01091 01023000
- DROPUSER OI VMRSTAT,VMIDLE INDICATE IDLE STATUS @VM01091 01024000
- CALL DMKSCHDL ALTER USER DISPATCHING STATUS @VM01091 01025000
- BR R3 RETURN TO CALLER @VM01091 01026000
- SPACE 01027000
- TESTCE TM VCHSTAT-VCHBLOK(R3),VCHCEPND CE PENDING ?? %V386198 01028000
- BR R9 RETURN TO CALLER WITH CC INTACT %V386198 01029000
- SPACE 3 01030000
- CUSCAN EQU * HERE TO TEST FOR CU BUSY OR CUE PENDING %V386198 01031000
- TM VCUSTAT,VCUBUSY IS THE CONTROL UNIT BUSY? %V386198 01032000
- BZ CUFREE NO -- %V386198 01033000
- OI VCUSTAT,VCUCUEPN FLAG CUE REQUESTED 01034000
- L R5,=A(256*(SM+BUSY)) SET CSW STATUS 01035000
- B STTOTCSW STORE AND EXIT @VA05104 01036000
- SPACE 2 01037000
- CUFREE TM VCUINTS,CUE TEST FOR CUE PENDING %V386198 01038000
- BR R9 RETURN WITH CONDITION CODE SET %V386198 01039000
- EJECT 01040000
- DEVSCAN EQU * HERE TO TEST FOR DEVICE BUSY OR INTS PENDING %V386198 01041000
- TM VDEVSTAT,VDEVBUSY IS THE DEVICE BUSY ?? %V386198 01042000
- BZ CKINTS NO -- %V386198 01043000
- L R5,=A(256*BUSY) SET BUSY STATUS 01044000
- B STTOTCSW AND EXIT @VA05104 01045000
- SPACE 01046000
- CKINTS LH R5,VDEVINTS GET DEVICE INTERRUPTS %V386198 01047000
- LTR R5,R5 ANYTHING PENDING ?? %V386198 01048000
- BNZ PNDINT PENDING INTERRUPT, BR. %V407438 01049000
- TM VDEVFLG2,VDEVRRF MDISK WITH RES/REL FEATURE? %V407438 01050000
- BZR R9 NOPE, NO VIRT RES/REL TODAY %V407438 01051000
- L R2,VDEVRRB GET THE VRRBLOK ADDRESS @V407438 01052000
- USING VRRBLOK,R2 ADDRESS THE VRRBLOK @V407438 01053000
- TM VRRSTAT,VRRRES IS THE MDISK RESERVED NOW? @V407438 01054000
- BZR R9 NOPE, FREE PATH, BR. @V407438 01055000
- TM VDEVFLG2,VDEVRES RESERVED BY THIS GUY? @V407438 01056000
- BOR R9 YUP, FREE PATH, BR. @V407438 01057000
- REFBUSY OI VDEVFLG2,VDEVODE WE OWE THIS GUY DE WHEN FREE @V407438 01058000
- L R5,=A(256*BUSY) DEVICE IS BUSY RIGHT NOW @V407438 01059000
- B STORECSW SORRY. @V407438 01060000
- SPACE 01061000
- PNDINT EQU * @V407438 01062000
- SPACE 01063000
- CLI VMINST,X'9C' IS IT A SIO 01064000
- BNE VIOATTN NO -- 01065000
- O R5,=A(256*BUSY) ADD BUSY TO STATUS @VA01803 01066000
- VIOATTN EQU * 01067000
- SLR R0,R0 ZERO CONSTANT 01068000
- TM VDEVINTS,ATTN ATTENTION PENDING ?? 01069000
- BZ CLEARDEV NO -- REFLECT A SINGLE INTERRUPT 01070000
- TM VDEVFLAG,VDEVPOST PRESENT ALL TO-GETHER ? @VA01653 01071000
- BO POSTOFF YES @VA04343 01072000
- TM VDEVINTS,X'FF'-(ATTN+UC) ANYTHING ELSE ?? 01073000
- BNZ ATTNPLUS YES -- SEPARATE INTERRUPTS, PLEASE 01074000
- CLI VDEVTYPC,CLASSPEC MIGHT THIS BE CHAN-TO-CHAN ADAPTER 01075000
- BNE CLEARDEV NO -- PRESENT STATUS 01076000
- CLI VDEVTYPE,TYPCTCA BETTER BE SURE ABOUT IT 01077000
- BNE CLEARDEV NO -- PRESENT STATUS 01078000
- TM VDEVINTS,UC IS THERE A UNIT CHECK INCLUDED ? 01079000
- BO CLEARDEV YES - GIVE IT TO HIM 01080000
- STH R0,VDEVINTS CLEAR DEVICE INTERRUPT STATUS 01081000
- NI VDEVSTAT,X'FF'-VDEVPEND ... 01082000
- TM VDEVSTAT,VDEVDED DEDICATED CHANNEL-TO-CHANNEL ? 01083000
- BCR 1,R9 YES - LET THE 'SIO' GO THROUGH 01084000
- L R1,VDEVREAL ACCESS THE CHXBLOK FOR VIRTUAL 01085000
- USING CHXBLOK,R1 ... 01086000
- TM CHXFLAG,CHBM370 RUNNING IN COMPATIBILITY MODE ? 01087000
- BCR 8,R9 YES - LET THE 'SIO' GO THROUGH 01088000
- DROP R1 PRESENT INTERRUPT STATUS TO START I/O 01089000
- B CLEARDEV PRESENT STATUS @VA04343 01090000
- SPACE 01091000
- * HERE IF ATTN ALONE, OR NO ATTN 01092000
- POSTOFF NI VDEVFLAG,X'FF'-VDEVPOST TURN OFF VDEVPOST @VA04343 01093000
- CLEARDEV EQU * CLEAR DEVICE INTERRUPT STATUS 01094000
- STH R0,VDEVINTS CLEAR OUT STATUS BYTES 01095000
- NI VDEVSTAT,X'FF'-VDEVPEND CLEAR OUT PENDING FLAG 01096000
- B STTOTCSW AND GO FINISH REFLECTING @VA05104 01097000
- SPACE 01098000
- ATTNPLUS EQU * HERE FOR SEPARATE INTERRUPTS 01099000
- N R5,=A(X'FFFF'-256*(ATTN+UC)) CLEAR ATTN AND UC 01100000
- NI VDEVINTS,ATTN+UC AND LEAVE IN DEVICE 01101000
- B STTOTCSW TO STORE CSW @VA12128 01102000
- SPACE 3 01111000
- CC2 EQU X'20' CONDITION CODE 2 @VA12875 01120000
- SPACE 2 01129000
- VIOGODSP EQU * @VA12128 01138000
- GOTO DMKDSPCH ALL DONE @VA12128 01147000
- EJECT 01156000
- *** SET UP THE INDEX REGISTER (R14) FOR THE BRANCH TO 01165000
- * DMKVSJ TO CONTINUE PROCESSING 01174000
- SPACE 2 01183000
- VIOCLCH EQU * @VA12128 01192000
- LA R14,INDEXA VIOCLCH @VA12128 01201000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01210000
- VIOHIO EQU * @VA12128 01219000
- LA R14,INDEXB VIOHIO @VA12128 01228000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01237000
- STTOTCSW EQU * @VA12128 01246000
- LA R14,INDEXC STTOTCSW @VA12128 01255000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01264000
- STORECSW EQU * @VA12128 01273000
- LA R14,INDEXD STORECSW @VA12128 01282000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01291000
- VIOEXIT EQU * @VA12128 01300000
- LA R14,INDEXF VIOEXIT @VA12128 01309000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01318000
- VIOEXITX EQU * @VA12128 01327000
- LA R14,INDEXG VIOEXITX @VA12128 01336000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01345000
- VIOEXITY EQU * @VA12128 01354000
- LA R14,INDEXH VIOEXITY @VA12128 01363000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01372000
- GETLOCK EQU * @VA12128 01381000
- LA R14,INDEXJ GETLOCK @VA12128 01390000
- B EXITVSJ SET UP BASE AND GO TO DMKVSJ @VA12128 01399000
- CTCAIOB EQU * @VA12128 01408000
- LA R14,INDEXK CTCAIOB @VA12128 01417000
- SPACE 01426000
- EXITVSJ EQU * EXIT TO DMKVSJ @VA12128 01435000
- GOTO DMKVSJEX @VA12128 01444000
- EJECT 01453000
- * 01462000
- * DMKVSJ INDEX TABLE 01471000
- * 01480000
- INDEXA EQU 0 BRANCH TABLE INDEX-VIOCLCH @VA12128 01489000
- INDEXB EQU 4 BRANCH TABLE INDEX-VIOHIO @VA12128 01498000
- INDEXC EQU 8 BRANCH TABLE INDEX-STTOTCSW @VA12128 01507000
- INDEXD EQU 12 BRANCH TABLE INDEX-STORECSW @VA12128 01516000
- INDEXE EQU 16 *** UNUSED @VA12128 01525000
- INDEXF EQU 20 BRANCH TABLE INDEX-VIOEXIT @VA12128 01534000
- INDEXG EQU 24 BRANCH TABLE INDEX-VIOEXITX @VA12128 01543000
- INDEXH EQU 28 BRANCH TABLE INDEX-VIOEXITY @VA12128 01552000
- INDEXI EQU 32 *** UNUSED @VA12128 01561000
- INDEXJ EQU 36 BRANCH TABLE INDEX-GETLOCK @VA12128 01570000
- INDEXK EQU 40 BRANCH TABLE INDEX-CTCSIOB @VA12128 01579000
- EJECT 01610000
- DMKVSICT DC F'0' COUNT OF TOTAL I/O INSTRUCTIONS 01611000
- DMKVSICW DC F'0' COUNT OF CALLS TO DMKCCWTR 01612000
- DMKVSISI DC F'0' COUNT OF VIRT. SIO'S @V2B2638 01613000
- DMKVSISF DC F'0' COUNT OF VIRT. SIOF'S @V2B2638 01614000
- DMKVSITI DC F'0' COUNT OF VIRT. TIO'S @V2B2638 01615000
- DMKVSICI DC F'0' COUNT OF VIRT. CLRIO'S @V2B2638 01616000
- DMKVSITC DC F'0' COUNT OF VIRT. TCH'S @V2B2638 01619000
- ADMKVSI DC A(DMKVSI) FOR BASE REG ADDRESSABILITY @VA12128 01620000
- TCHOPER DC X'9F00' OPERAND FOR TEST CHANNEL (TCH) @VMD0117 01621000
- SPACE 01622000
- LTORG 01623000
- EJECT 01624000
- COPY VBLOKS @VA04320 01625000
- OSVSCOM MSSCOM @V60B6B8 01626000
- COPY VCTCA @VA04320 01627000
- COPY RBLOKS @VA04320 01628000
- COPY VMBLOK @VA04320 01629000
- COPY TREXT @VA04320 01630000
- COPY IOBLOKS @VA04320 01631000
- COPY IOER @VA04320 01632000
- PSA @VA04320 01633000
- COPY DEVTYPES @VA04320 01634000
- COPY EQU @VA04320 01635000
- COPY SAVE @VA08305 01636000
- END DMKVSI @VA04320 01637000
ibm/vm370-lib/cp/dmkvsi.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator