ibm:vm370-lib:cp:dmkvcn.assemble_src
Table of Contents
DMKVCN Source
References
- Fixes Applied : 12
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC064DK]
Source Listing
- DMKVCN.ASSEMBLE.txt
- VCN TITLE 'DMKVCN (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKVCN 00006000
- * 00007000
- * FUNCTION - 00008000
- * 00009000
- * TO HANDLE THE SIMULATION OF ALL USER SIO'S TO A VIRTUAL 00010000
- * CONSOLE 00011000
- * 00012000
- * ATTRIBUTES - 00013000
- * 00014000
- * REENTRANT, RESIDENT, ENTERED VIA GOTO FROM DMKVIOEX 00015000
- * 00016000
- * ENTRY POINTS - 00017000
- * 00018000
- * DMKVCNEX - TO SIMULATE A SIO TO A VIRTUAL CONSOLE 00019000
- * 00020000
- * ENTRY CONDITIONS - 00021000
- * 00022000
- * GPR2 = CONTENTS OF THE USER'S CAW (VIRTUAL ADDRESS) 00023000
- * GPR6 = ADDRESS OF THE VCHBLOK FOR ADDRESSED VIRTUAL CHANNEL 00024000
- * GPR7 = ADDRESS OF THE VCUBLOK FOR ADDRESSED VIRTUAL 00025000
- * CONTROL UNIT 00026000
- * GPR8 = ADDRESS OF THE VDEVBLOK FOR ADDRESSED VIRTUAL DEVICE 00027000
- * GPR11 = ADDRESS OF THE USER'S VMBLOK 00028000
- * GPR12 = ADDRESS OF DMKVCN 00029000
- * 00030000
- * NOTE THAT WHEN DMKVCNEX IS ENTERED ROM DMKVIO, GPR13 DOES 00031000
- * NOT POINT TO A SAVEAREA, AND THE ENTER AND EXIT MACROS MAY NOT 00032000
- * BE USED. INSTEAD, EXIT IS MADE DIRECTLY TO DMKDSPCH VIA A 00033000
- * GOTO. 00034000
- * 00035000
- * EXIT CONDITIONS - 00036000
- * 00037000
- * NORMAL - 00038000
- * EXIT IS MADE DIRECTLY TO DMKDSPCH, WITH THE CORRECT PENDING 00039000
- * STATUS PLACED IN ALL VIRTUAL IO BLOKS AND THE USER'S 00040000
- * CHANNEL PROGRAM COMPLETELY INTERPRETED. NOTE THAT THE USER IS 00041000
- * REMOVED FROM EXECUTION WAIT BEFORE THE FIRST CCW IS 00042000
- * INTERPRETED. 00043000
- * 00044000
- * ERROR - 00045000
- * NONE 00046000
- * 00047000
- EJECT 00048000
- * 00049000
- * CALLS TO OTHER ROUTINES - 00050000
- * 00051000
- * DMKFREE, DMKFRET - TO GET AND RETURN A DATA BUFFER FROM FREE 00052000
- * STORAGE 00053000
- * DMKQCNWT - TO WRITE DATA TO THE USER IN RESPONSE TO A 00054000
- * WRITE CCW, AND TO WRITE THE VIRTUAL BELL MESSAGE 00055000
- * IN RESPONSE TO AN ALARM CCW 00056000
- * DMKQCNRD - TO READ DATA FROM THE USER IN RESPONSE TO A VIRTUAL 00057000
- * READ CCW 00058000
- * DMKCFMBK - TO PLACE THE USER IN CONSOLE FUNCTION MODE IF 2 00059000
- * OR MORE ATTENTIONS ARE HIT 00060000
- * DMKSCNVU - TO SCAN FOR VIRTUAL CONSOLE DEVICE AFTER 00061000
- * READ OR WRITE RETURN - IT MAY HAVE MOVED. 00062000
- * DMKDSPCH - TO AWAIT COMPLETION OF CONSOLE I/O 00063000
- * DMKCFMAT - TO SET AN ATTN INT PENDING 00064000
- * DMKPSASC - TO CHECK STORAGE PROTECTION KEY 00065000
- * DMKPSACC - TO CHECK IF SHARED PAGE HAS BEEN CHANGED 00066000
- * DMKVMAPS - TO UNSHARE A NAMED SHARED SYSTEM FROM RUNUSER 00067000
- * HDKD58EN - TO HANDLE DIAGNOSE X'58' FULL SCREEN I/O HRC058DK 00067100
- * 00068000
- * EXTERNAL REFERENCES - 00069000
- * 00070000
- * DMKVIOMK - A TABLE OF BIT FLAGS INDEXABLE BY DEVICE ADDRESS, 00071000
- * USED TO SET AND CLEAR PENDING FLAGS IN VIRTUAL 00072000
- * DEVICE, CONTROL UNIT, AND CHANNEL BLOKS 00073000
- * 00074000
- * TABLES / WORK AREAS - 00075000
- * 00076000
- * THE VIRTUAL DEVICE, CONTROL UNIT, AND CHANNEL BLOKS ARE 00077000
- * UPDATED WITH THE PROPER INTERRUPT AND STATUS INFORMATION 00078000
- * SO THAT UNSTIO MAY UNSTACK A VIRTUAL INTERRUPT TO THE 00079000
- * USER WHEN HE IS ENABLED 00080000
- * 00081000
- * REGISTER USAGE - 00082000
- * 00083000
- * GPR6 = ADDRESS OF THE VCHBLOK FOR ADDRESSED DEVICE 00084000
- * GPR7 = ADDRESS OF THE VCUBLOK FOR ADDRESSED DEVICE 00085000
- * GPR8 = ADDRESS OF THE VDEVBLOK FOR ADDRESSED DEVICE 00086000
- * GPR9 = SUBROUTINE LINKAGE RETURN REGISTER 00087000
- * GPR10 = DATA BUFFER PTR 00088000
- * GPR11 = ADDRESS OF USER'S VMBLOK 00089000
- * GPR12 = DMKVCN BASE ADDRESS 00090000
- * GPR13 = ADDRESS OF THE VCONCTL BLOK 00091000
- * GPR14,GPR15 = BALR LINKAGE FOR CALLS TO DMKFREE AND DMKFRET 00092000
- * 00093000
- * ALL OTHER REGISTERS ARE WORK REGISTERS 00094000
- * 00095000
- * NOTES - 00096000
- * 00097000
- * VIRTUAL CONSOLE READ OR WRITE OPERATIONS ARE LIMITED TO 00098000
- * A MAXIMUM OF 2032 BYTES ON A CCW SEQUENCE. A CCW SEQUENCE 00099000
- * IS DEFINED AS A READ OR WRITE CCW THAT IS DATA CHAINED. 00100000
- * A CCW THAT IS UNCHAINED OR COMMAND CHAINED COMPLETES 00101000
- * A SEQUENCE. IF AN OPERATION IS ATTEMPTED FOR MORE THAN 00102000
- * 2032 BYTES THE CCW CHANNEL PROGRAM IS TERMINATED WITH 00103000
- * INCORRECT LENGTH AND CHANNEL PROGRAM CHECK. 00104000
- * 00105000
- EJECT 00106000
- * 00107000
- * OPERATION - 00108000
- * 00109000
- * 1. MARK THE VIRTUAL DEVICE AND SUBCHANNEL BUSY, CLEAR THE 00110000
- * CSW AND SAVE THE STORAGE KEY. 00111000
- * 00112000
- * 2. VERIFY THAT THE DEVICE IS READY; IF NOT SET INTERVENTION 00113000
- * REQUIRED IN THE VIRTUAL SENSE BYTE AND INDICATE UNIT 00114000
- * CHECK. 00115000
- * 00116000
- * 3. IF THE CCW OP-CODE IS LEGAL CONTINUE PROCESSING FOR THE 00117000
- * GIVEN CCW OP-CODE TYPE; OTHERWISE SET COMMAND REJECT IN 00118000
- * THE VIRTUAL SENSE BYTE AND INDICATE UNIT CHECK. 00119000
- * 00120000
- *. 00121000
- EJECT 00122000
- COPY OPTIONS 00123000
- SPACE 2 00124000
- COPY LOCAL OPTIONS 00125000
- EJECT 00126000
- DMKVCN CSECT 00127000
- SPACE 3 00128000
- USING PSA,R0 00129000
- USING VCHBLOK,R6 00130000
- USING VCUBLOK,R7 00131000
- USING VDEVBLOK,R8 00132000
- USING VMBLOK,R11 00133000
- SPACE 00134000
- EXTRN DMKCFMEN,DMKTBLUP @V200930 00135000
- EXTRN DMKQCNRD,DMKCFMBK,DMKVIOMK 00136000
- EXTRN DMKSCNVU,DMKCFMAT @V200930 00137000
- EXTRN DMKFRET @V200730 00138000
- EXTRN DMKGRTDS,DMKGRTIN @V60A6B6 00138100
- EXTRN DMKPSASC,DMKPSACC @V60BC11 00139000
- EXTRN DMKVMASH @VA07351 00139100
- EXTRN HDKD58EN HRC058DK 00139150
- EJECT 00140000
- ENTRY DMKVCNEX 00141000
- USING *,R12 00142000
- SPACE 00143000
- DMKVCNEX DS 0H 00144000
- L R1,VDEVIOCT GET IOCOUNT FOR DEVICE 00145000
- AL R1,F1 BUMP IO COUNT 00146000
- ST R1,VDEVIOCT AND STORE 00147000
- OI VDEVSTAT,VDEVBUSY+VDEVCHBS INDICATE DEVICE BUSY 00148000
- NI VMRSTAT,X'FF'-VMEXWAIT REMOVE FROM EXECUTION WAIT 00149000
- LA R1,0(,R2) CLEAR STORAGE KEY FROM CAW 00150000
- OI VDEVFLAG,VDEVCCW1 INDICATE 1ST CCW 00151000
- XC VDEVCSW+4(2),VDEVCSW+4 SET STATUS PORTION OF INITIAL *00152000
- CSW TO ZERO 00153000
- STCM R2,B'1000',VDEVKEY SAVE STORAGE KEY IN VDEVBLOK 00154000
- L R13,VDEVCON GET VCONCTL BLOCK 00155000
- USING VCONCTL,R13 00156000
- ST R1,VCONCAW SET FIRST VIRTUAL CAW 00157000
- NI VDEVCFLG,X'FF'-(VDEVATTN+VDEVTRAN+VDEVVCF) RESET@V200930 00158000
- MVI VCONFLAG,0 CLEAR FLAG 00159000
- TM VDEVKEY,X'0F' CHECK FOR INVALID KEY BITS IN CAW 00160000
- BNZ PROGCHK BRANCH IF ANY ON 00161000
- SPACE 1 00162000
- VCNGTNXT EQU * HERE TO GET AND PROCESS NEXT CCW 00163000
- BAL R9,GETCCW GET CCW 00164000
- SPACE 00165000
- VCNNEXT EQU * HERE TO INTERPRET CCW 00166000
- TM VCONCOMD,X'0F' CHECK FOR A VALID OPCODE BIT 00167000
- BZ PROGCHK ERROR IF NONE ON 00168000
- CLI VCONCOMD,X'03' NOP? 00169000
- BE VCNF1 YES 00170000
- CLI VCONCOMD,X'04' SENSE? 00171000
- BE VCNSNSCN YES 00172000
- MVI VDEVSNSE,0 RESET VIRTUAL SENSE BYTE 00173000
- CLI VCONCOMD,X'0B' ALARM? 00174000
- BE VCNF1 YES 00175000
- TM VDEVSTAT,VDEVNRDY IS DEVICE NOT READY? 00176000
- BNO VCNDTACW NO 00177000
- MVI VDEVSNSE,INTREQ SET INTERVENTION REQUIRED 00178000
- B UNITCHK 00179000
- SPACE 1 00180000
- VCNDTACW CLI VCONCOMD,X'0A' READ INQUIRY? 00181000
- BE VCNRD YES 00182000
- CLI VCONCOMD,X'0E' CMS READ WITH INHIBIT ? @V60C3BE 00182100
- BE VCNRD BR YES @V60C3BE 00182200
- CLI VCONCOMD,X'02' READ READER 2? 00183000
- BE VCNRD YES 00184000
- CLI VCONCOMD,X'09' WRITE WITH AUTO CARRIAGE RETURN 00185000
- BE VCNWRT YES 00186000
- CLI VCONCOMD,X'01' WRITE WITH NO AUTO CARRIAGE RETURN 00187000
- BE VCNWRT YES 00188000
- CLI VCONCOMD,X'19' DIAG SCREEN WRITE ?? @V200730 00189000
- BE VCNWRT YES, CONT AND CHECK LATER @V200730 00190000
- CLI VCONCOMD,X'29' DIAG 58 FULL SCR WRITE? HRC058DK 00190100
- BE HD58SPCL Y, SPECIAL HANDLING HRC058DK 00190110
- CLI VCONCOMD,X'2A' DIAG 58 FULL SCR READ? HRC058DK 00190120
- BE HD58SPCL Y, SPECIAL HANDLING HRC058DK 00190130
- CLI VCONCOMD,X'63' DIAG 58 control query? HRC064DK 00190200
- BE HD58SPCL Y, special handling HRC064DK 00190210
- VDEVREJ MVI VDEVSNSE,CMDREJ SET COMMAND REJECT @V200730 00191000
- B UNITCHK 00192000
- HD58SPCL EQU * HRC058DK 00192100
- CALL HDKD58EN CALL DIAG 58 SUPPORT RTN HRC058DK 00192110
- B LASTCCW POST STATUS AND EXIT HRC058DK 00192120
- EJECT 00193000
- *. 00194000
- * OPERATION OF SENSE COMMAND - 00195000
- * 00196000
- * 1. TURN ON PCI BIT IN VIRTUAL CSW IF ON IN CCW. 00197000
- * 00198000
- * 2. SET CHANNEL END AND DEVICE END IN VIRTUAL CSW. 00199000
- * 00200000
- * 3. IF THE CCW COUNT IS 1 PROCEED; OTHERWISE IF DATA CHAINING 00201000
- * IS ON OR SILI IS NOT ON SET INCORRECT LENGTH IN VIRTUAL 00202000
- * CSW AND SUPPRESS ALL CHAINING. 00203000
- * 00204000
- * 4. IF SKIP IS ON GOTO STEP 5; OTHERWISE CHECK FOR PROTECTION 00205000
- * AND ADDRESSING VIOLATIONS AND MOVE SENSE DATA TO VIRTUAL 00206000
- * MEMORY. 00207000
- * 00208000
- * 5. TEST FOR POSSIBLE COMMAND CHAINING; IF CHAINING, LOCATE AND 00209000
- * VERIFY NEXT CCW AND RESTART INTERPRETAION PROCESS; 00210000
- * OTHERWISE EXIT AFTER POSTING PROPER ENDING STATUS. 00211000
- * 00212000
- *. 00213000
- SPACE 3 00214000
- VCNSNSCN EQU * HERE TO SIMULATE A SENSE OPERATION 00215000
- OI VDEVCSW+4,CE+DE SET BOTH CHANNEL & DEVICE END 00216000
- LH R4,VCONCNT GET COUNT 00217000
- N R4,XRIGHT16 ... 00218000
- BCTR R4,0 DECREMENT BY 1 00219000
- STH R4,VDEVCSW+6 SET RESIDUAL COUNT 00220000
- LTR R4,R4 NOW ZERO? 00221000
- BZ SENSMOVE YES, COUNT WAS OK 00222000
- TM VCONFLAG,CD DATA CHAINED? 00223000
- BO SENSWLR YES, GIVE WLR 00224000
- TM VCONFLAG,SILI SILI SPECIFIED? 00225000
- BO SENSMOVE YES 00226000
- SENSWLR OI VDEVCSW+5,IL SET INCORRECT LENGTH 00227000
- NI VCONFLAG,X'FF'-(CD+CC) SUPPRESS CHAINING 00228000
- SENSMOVE TM VCONFLAG,SKIP SKIP SPECIFIED? 00229000
- BO FLAGTEST YES 00230000
- L R1,VCONADDR GET VIRTUAL DATA ADDRESS 00231000
- LA R1,0(,R1) ... 00232000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00233000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00234000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00235000
- TRANS 2,1,OPT=(BRING,DEFER),ADEX=PROGCHK1 00236000
- AL R6,VMCHSTRT RESTORE ADDRESS @VA01770 00237000
- AL R7,VMCUSTRT RESTORE ADDRESSS @VA01770 00238000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00239000
- TM VCONFLAG,IDA INDIRECT DATA ADDRESS ? 00240000
- BNO SENSPROT NO 00241000
- TM VCONADDR+3,X'03' IDA LIST MUST BE ON A WORD *00242000
- BOUNDRY 00243000
- BNZ PROGCHK ERROR IF NOT 00244000
- L R1,0(,R2) GET FIRST INDIRECT DATA ADDRESS WORD 00245000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00246000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00247000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00248000
- ALTER1 TRANS 2,1,OPT=(BRING,DEFER),ADEX=PROGCHK1 @V304735 00249000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00250000
- BZ NOTCHG1 IF NOT - CONTINUE @V304735 00251000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00251100
- B ALTER1 RE-ISSUE THE TRANS CALL @V304735 00254000
- NOTCHG1 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00255000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00256000
- AL R8,VMDVSTRT RESTORE ADDRESS @V304735 00257000
- SENSPROT IC R0,VDEVKEY GET VIRTUAL CAW KEY @V304735 00258000
- CALL DMKPSASC CHECK FOR PROTECTION VIOLATION @V304735 00259000
- BNE PROTCHK ERROR 00260000
- MVC 0(1,R2),VDEVSNSE MOVE SENSE BYTE TO VIRTUAL CORE 00261000
- B FLAGTEST 00262000
- EJECT 00263000
- *. 00264000
- * OPERATION OF ALARM AND NOP COMMANDS - 00265000
- * 00266000
- * 1. TURN ON PCI BIT IN VIRTUAL CSW IF ON IN CCW. 00267000
- * 00268000
- * 2. SET CHANNEL END AND DEVICE END IN VIRTUAL CSW. 00269000
- * 00270000
- * 3. IF ALARM COMMAND SEND VIRTUAL BELL MESSAGE TO USER; 00271000
- * OTHERWISE CONTINUE. 00272000
- * 00273000
- * 4. TEST FOR POSSIBLE COMMAND CHAINING; IF CHAINING, LOCATE 00274000
- * AND VERIFY NEXT CCW AND RESTART INTERPRETATION PROCESS; 00275000
- * OTHERWISE EXIT AFTER POSTING PROPER ENDING STATUS. 00276000
- * 00277000
- *. 00278000
- SPACE 3 00279000
- VCNF1 EQU * HERE FOR A CONTROL IMMEDIATE CCW 00280000
- OI VDEVCSW+4,CE+DE SET BOTH CHANNEL & DEVICE END 00281000
- CLI VCONCOMD,X'0B' ALARM? 00282000
- BNE FLAGTEST NO 00283000
- TM VDEVFLAG,VDEVCCW1 FIRST CCW? @VA03330 00284000
- BZ VCNALRM NO - CONTINUE @VA03330 00285000
- TM VCONFLAG,CD DATA CHAINED CONTROL? @VA03330 00286000
- BNZ VCNALRW YES - CC=1 @VA03330 00287000
- TM VCONFLAG,CC POSSIBLE CC=0? @VA03330 00288000
- BNZ VCNALRM YES - LET HIM RUN @VA03330 00289000
- VCNALRW OI VMRSTAT,VMEXWAIT MAKE HIM WAIT @VA03330 00290000
- VCNALRM EQU * @VA03330 00291000
- BAL R9,VCNQM000 Clear queued messages HRC063DK 00291500
- LA R0,L'ALARMMSG GET LENGTH OF MESSAGE 00292000
- LA R1,ALARMMSG GET MESSAGE PTR 00293000
- LA R2,VMGENIO+ALARM+NOTIME PARMS FOR DMKQCNWT @VM01022 00294000
- SL R6,VMCHSTRT CHANNEL DISPLACEMENT @VA09479 00294100
- SL R7,VMCUSTRT CTRL UNIT DISPLACEMENT @VA09479 00294200
- SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA09479 00294300
- CALL DMKQCNWT WRITE WITH DELAYED RETURN @VA04067 00295000
- AL R6,VMCHSTRT RESTORE ADDRESS @VA09479 00295100
- AL R7,VMCUSTRT RESTORE ADDRESS @VA09479 00295200
- AL R8,VMDVSTRT RESTORE ADDRESS @VA09479 00295300
- SLR R15,R15 ZERO REG 15 @VA04067 00296000
- STC R15,VMRBSC ZERO CONTASK CNT FOR REMOTE 3270 @VA04067 00297000
- SPACE 00298000
- FLAGTEST TM VCONFLAG,CD DATA CHAINED? 00299000
- BO CKALARM VMEXWAIT ON FOR ALARM CCW @VA04067 00300000
- TM VCONFLAG,CC COMMAND CHAINED? 00301000
- BNO CKALARM VMEXWAIT ON FOR ALARM CCW @VA04067 00302000
- NI VDEVFLAG,X'FF'-VDEVCCW1 TURN OFF FIRST CCW FLAG 00303000
- B VCNGTNXT PROCESS NEXT CCW 00304000
- CKALARM CLI VCONCOMD,X'0B' ALARM CCW? @VA04067 00305000
- BNE LASTCCW NO - VMEXWAIT NOT ON BEFORE QCN @VA04067 00306000
- TM VDEVFLAG,VDEVCCW1 FIRST CCW? @VA04067 00307000
- BZ LASTCCW NO - VMEXWAIT NOT ON BEFORE QCN @VA04067 00308000
- NI VMRSTAT,X'FF'-VMEXWAIT TURN OFF VMEXWAIT @VA04067 00309000
- B LASTCCW GO FINISH UP @VA04067 00310000
- EJECT 00311000
- *. 00312000
- * OPERATION OF READ COMMAND - 00313000
- * 00314000
- * 1. CALCULATE SIZE OF FREE STORAGE DATA BUFFER. 00315000
- * 00316000
- * 1A. LOOK FOR SPECIAL CASE WHERE A READ IS TO BE INTERCEPTED 00317000
- * AND A CARRIAGE RETURN IS TO BE SIMULATED. THIS FUNCTION 00318000
- * IS PART OF THE SYSLOAD DRIVER AND CAUSES THE AUTOLOGGED 00319000
- * ON USER TO EXECUTE HIS PROFILE EXEC WHEN THE FIRST READ 00320000
- * IS ISSUED AFTER IPLING CMS. 00321000
- SPACE 1 00322000
- * 2. CALL DMKQCNRD TO OBTAIN TERMINAL INPUT. 00323000
- * 00324000
- * 3. SET CHANNEL END IN VIRTUAL CSW. 00325000
- * 00326000
- * 4. IF A LINE BREAK HAS OCCURED DURING THE READ CALL DMKFRET 00327000
- * TO RETURN THE DATA BUFFER TO FREE STORAGE AND THEN EXIT; 00328000
- * IF A SINGLE ATTENTION IS HIT AND IF THE VIRTUAL CONSOLE IS 00329000
- * STILL BUSY SET UNIT EXCEPTION IN THE VIRTUAL CSW AND POST 00330000
- * PROPER ENDING STATUS; IF 2 OR MORE ATTENTIONS ARE HIT TURN 00331000
- * ON THE MULTIPLE ATTENTION FLAG FOR LATER INTERROGATION; 00332000
- * OTHERWISE IF THE VIRTUAL CONSOLE IS STILL BUSY TURN 00333000
- * ON PCI IN THE VIRTUAL CSW IF ON IN CCW AND VALIDITY CHECK 00334000
- * FOR PROTECTION AND ADDRESSING VIOLATIONS AND IF THE SKIP 00335000
- * FLAG IS NOT ON CCW MOVE DATA TO VIRTUAL MEMORY 00336000
- * REEXECUTING THE MOVE WITH AN UPDATED ADDRESS WHEN DATA 00337000
- * CHAINING IS SPECIFIED. 00338000
- * 00339000
- * 5. TEST FOR POSSIBLE COMMAND CHAINING; IF CHAINING LOCATE 00340000
- * AND VERIFY NEXT CCW AND RESTART INTERPRETATION PROCESS; 00341000
- * OTHERWISE EXIT AFTER POSTING PROPER ENDING STATUS. 00342000
- * 00343000
- * 6. THE DATA ENTERED BY A VIRTUAL MACHINE READ IS EXAMINED 00344000
- * TO CHECK FOR EXECUTION OF CP CONSOLE FUNCTIONS . 00345000
- * THE DATA IS EXANINED ONLY IF THE VIRTUAL MACHINE IS 00346000
- * USING LINEDIT AND IF NO ATTN INDICATORS ARE SET. 00347000
- * THE DATA MUST START AT THE FIRST DATA POSITION AND 00348000
- * MUST BE OF THE FOLLOWING FORMAT: 00349000
- * #CP ( OPTIONAL DATA ) 00350000
- * WHERE THE # IS THE LOGICAL LINEND CHARACTER 00351000
- * IF THE OPTIONAL DATA IS NOT ENTERED THE CP ENVIR 00352000
- * IS ENTERED OTHERWISE THE DATA IS A CONSOLE FUNCTION TO BE 00353000
- * EXECUTED . CONTROL IS RETURNED TO THE VIRTUAL MACHINE 00354000
- * AND THE READ IS CANCELLD BY A UE STATUS. 00355000
- * THIS FEATURE ALLOWS ANY MACHINE TO EXECUTE A CONSOLE 00356000
- * FUNCTION FROM A VIRTUAL MACHINE READ. 00357000
- * NIFTY .... !!!! 00358000
- * 00359000
- *. 00360000
- SPACE 3 00361000
- VCNRD EQU * HERE TO SIMULATE A READ OPERATION 00362000
- OI VDEVCSW+4,CE SET CHANNEL END 00363000
- BAL R9,VCNSCALC CALCULATE SIZE NEEDED FOR BUFFER 00364000
- LA R0,9(,R4) GET COUNT ROUNDED TO NEAREST DOUBLE WORD 00365000
- SRL R0,3 ALLOWING FOR A 2 BYTE SLOP AREA 00366000
- CALL DMKFREE 00367000
- ST R1,VCONBUF SAVE BUFFER ADDRESS @V200730 00368000
- STH R0,VCONBFSZ SET DATA BUFFER SIZE HRC101DK 00369490
- L R10,VCONRBUF TEST IF A VIRTUAL BUFFER EXISTS @V200730 00370000
- LTR R10,R10 IS THERE ONE ?? @V200730 00371000
- BZ TSTWBUF NO, TEST FOR WRITE BUFFER @V200730 00372000
- CH R4,VCONRCNT IS COUNT LESS THAN BUFFER COUNT ?@V200730 00373000
- BL *+8 YES - @V200730 00374000
- LH R4,VCONRCNT NO - USE BUFFER BYTE COUNT @V200730 00375000
- S R4,F1 DECREMENT FOR EXECUTED MOVE @V305535 00377000
- BM *+8 BYPASS MOVE, NOTHING THERE @V305535 00378000
- EX R4,MVCBUFF MOVE DATA FROM VIRTUAL BUFFER @V200730 00379000
- L R1,VCONRBUF LOAD ADDRESS OF VIRTUAL BUFFER @V200730 00380000
- SLR R0,R0 CLEAR @V200730 00381000
- ST R0,VCONRBUF CLEAR BUFFER ADDRESS @V200730 00382000
- LH R0,VCONRBSZ SIZE IN DW'S OF VIRTUAL BUFFER HRC101DK 00383490
- CALL DMKFRET FRET IT. @V200730 00384000
- LA R0,1 INCREMENT . . @V305535 00385000
- AR R0,R4 . . DECREMENTED COUNT @V305535 00386000
- SLR R2,R2 CLEAR @V200730 00387000
- LH R4,VDEVADD FORM DEVICE ADDR IN R4 @V200730 00388000
- LH R5,VCUADD ... @V200730 00389000
- OR R4,R5 ... @V200730 00390000
- AH R4,VCHADD ... @V200730 00391000
- L R1,VCONBUF GET BUFFER ADDRESS @V200730 00392000
- B VCNRDRET CONTINUE AS IF READ WAS DONE @V200730 00393000
- SPACE 00394000
- TSTWBUF TM VDEVFLAG,VDEVCSPL CONSOLE SPOOLING ?? @V200730 00395000
- BZ WFRET NO, FRET ANY BUFFER @V200730 00396000
- TM VDEVSFLG,VDEVTERM TERM OUTPUT WITH SPOOLING ?? @V200730 00397000
- BO WFRET YES, FRET ANY BUFFER @V200730 00398000
- L R1,VCONWBUF GET LAST OUTPUT FROM VIRT WRITE @V200730 00399000
- LTR R1,R1 IS THERE ANY ?? @V200730 00400000
- BZ QCNRD NO, CONT WITH READ @V200730 00401000
- LH R0,VCONWCNT GET DATA COUNT @V200730 00402000
- CALL DMKQCNWT,PARM=NORET+PRIORITY FORCE MSG TO TERMI @V200730 00403000
- WFRET L R1,VCONWBUF GET BUFFER ADDRESS @V200730 00404000
- LTR R1,R1 IS THERE ONE ?? @V200730 00405000
- BZ QCNRD NO, CONT WITH THE READ @V200730 00406000
- SR R0,R0 CLEAR @V200730 00407000
- ST R0,VCONWBUF CLEAR BUFFER ADDRESS @V200730 00408000
- IC R0,VCONWBSZ GET BUFFER SIZE @V200730 00409000
- CALL DMKFRET FRET BUFFER @V200730 00410000
- QCNRD EQU * @V200820 00411000
- TM VMMLEVEL,VMMSTMP TIME-STAMPING OUTPUT ? @V200820 00412000
- BZ QCNRDR NO -- O.K. AS IS @V200820 00413000
- SLR R0,R0 ZERO-LENGTH WRITE FOR TIME STAMP @V200820 00414000
- LA R1,BLANKS LET GR1 BE VALID @V200820 00415000
- CALL DMKQCNWT,PARM=NORET+NOAUTO FORCE TIME STAMP @V200820 00416000
- QCNRDR EQU * @V200820 00417000
- LA R2,VMGENIO PARM FOR READ @V200730 00418000
- TM VMMLEVEL,VMMLINED EDIT INPUT ?? @V200730 00419000
- BZ *+8 NO, CONT @V200730 00420000
- LA R2,EDIT+VMGENIO EDIT AND VM IO @V200730 00421000
- LR R0,R4 SET DATA COUNT TO READ @V200730 00422000
- LH R4,VDEVADD FORM DEV ADDRESS IN R4 @V200730 00423000
- LH R5,VCUADD .. @V200730 00424000
- OR R4,R5 .. @V200730 00425000
- AH R4,VCHADD .. @V200730 00426000
- L R1,VCONBUF SET BUFFER ADDRESS @V200730 00427000
- SPACE 00427010
- CLI VCONCOMD,X'0E' CMS READ WITH INHIBIT ? @V60C3BE 00427020
- BNE VCNRDY BR NO @V60C3BE 00427030
- MVI VCONCOMD,X'0A' YES. CHANGE TO REAL READ @V60C3BE 00427040
- LA R2,INHIBIT(R2) AND ADD INHIBIT TO QCN PARMS @V60C3BE 00427050
- VCNRDY EQU * @V60C3BE 00427060
- SPACE 00427070
- CALL DMKQCNRD READ DATA FROM TERMINAL @V200730 00428000
- SPACE 1 00429000
- VCNRDRET EQU * HERE AT COMPLETION OF READ 00430000
- TM VMRSTAT,VMLOGOFF USER IN LOGOFF NOW ? @VM08939 00431000
- BO VCNEXITY YES - JUST BAIL OUT FAST @VM08939 00432000
- LR R10,R1 SAVE BUFFER ADDRESS @V200730 00433000
- L R1,VCONRBUF IS THERE A WAITING BUFFER @VA11787 00433100
- LTR R1,R1 ... @VA11787 00433150
- BZ VCNRDCNT NO,CONTINUE AS BEFORE @VA11787 00433200
- ST R10,VCONRBUF EXCHANGE PREVIOUS BUFFER AND @VA11787 00433250
- ST R1,VCONBUF CURRENT BUFFER @VA11787 00433300
- LR R10,R1 CURRENT BUFFER FOR VCN @VA11787 00433350
- SR R0,R0 CLEAR WORK REGISTER @VA11787 00433400
- LH R0,VCONRBSZ GET CURRENT BUFFER SIZE HRC101DK 00433480
- LH R1,VCONBFSZ GET PREVIOUS BUFFER SIZE HRC101DK 00433510
- STH R1,VCONRBSZ AND EXCHANGE THEM HRC101DK 00433540
- STH R0,VCONBFSZ ... HRC101DK 00433570
- LH R0,VCONRCNT GET CURRENT DATA COUNT @VA11787 00433650
- LH R1,VCONCNT GET PREVIOUS DATA COUNT @VA11787 00433700
- STH R0,VCONCNT AND EXCHANGE THEM @VA11787 00433750
- STH R1,VCONRCNT ... @VA11787 00433800
- VCNRDCNT DS 0H @VA11787 00433850
- LR R1,R4 SET DEVICE ADDRESS 00434000
- CALL DMKSCNVU FIND DEVICE BLOKS AGAIN 00435000
- BNZ VCNEXITY DEVICE GONE, GET OUT 00436000
- LR R1,R10 SET BUFFER ADDRESS 00437000
- TM VDEVTYPC,CLASTERM STILL A TERMINAL ?? 00438000
- BZ VCNEXITY NO, GET OUT 00439000
- CLI VDEVTYPE,TYP3210 STILL A VIRTUAL CONSOLE ?? 00440000
- BNE VCNEXITY NO, GET OUT 00441000
- B *+4(R2) 00442000
- B VCNRDNAT NO ATTENTION HIT 00443000
- B VCNRDSAT SINGLE ATTENTION HIT 00444000
- B VCNRDDAT 2 OR MORE ATTENTIONS HIT 00445000
- B VCNUE LINE BREAK - CANCEL THE READ @VM08939 00446000
- SPACE 00447000
- VCNRDSAT EQU * HERE WHEN A SINGLE ATTENTION IS HIT DURING A READ 00448000
- LTR R0,R0 TEST FOR ATTN WITH NO CHARS TYPED 00449000
- BNZ VCNUE NO, SET UE 00450000
- CALL DMKCFMAT SET ATTN INT PENDING @V200930 00451000
- BZ VCNRDNAT ATTN SET OK, CONT @V200930 00452000
- TM VDEVCFLG,VDEVATTN FLAGGED FOR CP, ATTN NOT SET @V200930 00453000
- BO LASTCCW YES, TERMINATE CCW STRING @V200930 00454000
- SPACE 00455000
- VCNRDDAT EQU * HERE WHEN 2 OR MORE ATTENTIONS ARE HIT FOR A READ 00456000
- OI VDEVCFLG,VDEVATTN INDICATE BREAK IS TO BE CALLED LATER 00457000
- LTR R0,R0 ANY CHARACTERS TYPED ?? 00458000
- BNZ VCNRDNAT YES, CONT 00459000
- VCNUE OI VDEVCSW+4,UE FLAG UE FOR CANCEL, MACHINE @V200930 00460000
- * RE-READ 00461000
- SPACE 00462000
- VCNRDNAT EQU * HERE AT COMPLETION OF READ 00463000
- ALR R0,R10 GET END OF BUFFER 00464000
- TM VDEVSTAT,VDEVBUSY+VDEVCHBS IS DEVICE STILL BUSY? 00465000
- BO VCNRDCD YES - O.K. @VM08939 00466000
- BAL R9,VCNRELSE FRET THE READ BUFFERS @VM08939 00467000
- B VCNEXITY EXIT FORTHWITH @VM08939 00468000
- VCNRDCD EQU * HERE TO MOVE READ DATA 00469000
- CLR R0,R10 ANY CHARS ENTERED ?? @V200930 00470000
- BE NOCP NO, CONT @V200930 00471000
- TM VDEVCSW+4,UE LINE CANCELED ?? @V200930 00472000
- BO NOCP YES, CONT @V200930 00473000
- TM VDEVCFLG,VDEVATTN ATTN TO CP ?? @V200930 00474000
- BNO NOATT NO, CONTINUE @VA11228 00475100
- OI VCONFLAG,SKIP YES,DON'T PASS DATA TO USER @VA11228 00475200
- B NOCP PROCESS READ DATA @VA11228 00475300
- NOATT DS 0H @VA11228 00475400
- TM VMMLEVEL,VMMLINED LINEDIT ON ?? @V200930 00476000
- BZ NOCP NO, IGNORE DATA @V200930 00477000
- L R15,0(R10) GET CHARS TYPED .. FIRST FOUR @V200930 00478000
- O R15,=X'00404040' UPPER CASE FOR COMPARE @V200930 00479000
- CLM R15,14,=X'15C3D7' IS IT 'LINEND'CP'? @VA03041 00480000
- BNE NOCP NO, CONTINUE @VA03041 00481000
- SLR R0,R10 COMPUTE INPUT COUNT @VA03041 00482000
- CL R0,F3 MORE THAN THREE? @VA03041 00483000
- BNH SETCP NO, MUST BE CP ONLY @VA03041 00484000
- CLI 3(R10),X'40' FOLLOWED BY A BLANK? @VA03041 00485000
- BNE SETBUFL NO, CANNOT EXECUTE CP @VA03041 00486000
- CL R0,F4 MORE THAN FOUR? @VA03041 00487000
- BNH SETCP NO, MUST BE CP ONLY @VA03041 00488000
- OI VDEVCFLG,VDEVVCF FLAG FOR VIRT CONSOLE FUNCTION @V200930 00489000
- LR R3,R0 GET SIZE @V200930 00490000
- LA R0,18 SIZE FOR BUFFER @V200930 00491000
- CALL DMKFREE GET CONSOLE FUNCTION BUFFER @V200930 00492000
- MVC 0(8,R1),BLANKS CLEAR BUFFER @V200930 00493000
- MVC 8(17*8,R1),0(R1) .. @V200930 00494000
- CL R3,=F'132' IS IT BIGGER THAN ALLOWED .. @V200930 00495000
- BL *+8 NO, CONT @V200930 00496000
- LA R3,132 SET TO MAXIMUM @V200930 00497000
- BCTR R3,R0 SET FOR EXECUTE @V200930 00498000
- EX R3,MVCP MOVE DATA TO BUFFER @V200930 00499000
- L R15,=A(DMKTBLUP) GET UPPER CASE TRANSLATE TABLE @V200930 00500000
- EX R3,TRCP TRANSLATE TO UPPER CASE DATA @V200930 00501000
- LA R0,1(R3) RESTORE R0 COUNT @V200930 00502000
- USING BUFIN,R1 @V200930 00503000
- ST R1,BUFNXT SET DATA ADDRESS @V200930 00504000
- ST R0,BUFCNT SET DATA COUNT @V200930 00505000
- DROP R1 @V200930 00506000
- ST R1,VCONRBUF SAVE BUFFER ADDRESS @V200930 00507000
- B SETUE SET CANCEL TO MACHINE @V200930 00508000
- SETCP OI VDEVCFLG,VDEVATTN FLAG TO GO TO CP MODE @V200930 00509000
- SETUE OI VDEVCSW+4,UE FLAG CANCEL TO MACHINE @V200930 00510000
- SETBUFL ALR R0,R10 SET R0 TO END OF BUFFER @VA03041 00511000
- NOCP DS 0H @V200930 00512000
- BAL R9,VCNMVDAT MOVE DATA 00513000
- TM VDEVCSW+4,UE UNIT EXCEPTION ? 00514000
- BO LASTCCW YES 00515000
- TM VCONFLAG,CD+CC CHAINING? 00516000
- BZ LASTCCW 00517000
- NI VDEVFLAG,X'FF'-VDEVCCW1 TURN OFF FIRST CCW FLAG 00518000
- BAL R9,GETCCW GET NEXT CCW 00519000
- B VCNRDRL RETURN HERE IF COMMAND CHAINING 00520000
- B VCNRDCD RETURN HERE IF DATA CHAINING 00521000
- VCNRDRL EQU * ... 00522000
- BAL R9,VCNRELSE RELEASE BUFFER 00523000
- B VCNNEXT 00524000
- SPACE 2 00525000
- MVCP MVC 0(*-*,R1),0(R10) MOVE DATA TO BUFFER @V200930 00526000
- TRCP TR 0(*-*,R1),0(R15) TRANSLATE TO UPPER CASE @V200930 00527000
- EJECT 00528000
- *. 00529000
- * OPERATION OF WRITE COMMAND - 00530000
- * 00531000
- * 1. CALCULATE SIZE OF FREE STORAGE DATA BUFFER. 00532000
- * 00533000
- * 2. TURN PCI ON IN THE VIRTUAL CSW IF ON IN THE CCW AND 00534000
- * VALIDITY CHECK FOR ADDRESSING VIOLATION AND MOVE DATA FROM 00535000
- * VIRTUAL MEMORY. 00536000
- * 00537000
- * 3. IF DATA CHAINING IS ON LOCATE AND VERIFY NEXT CCW AND THEN 00538000
- * REPEAT STEP 2. 00539000
- * 00540000
- * 4. IF SILI IS NOT SPECIFIED, SET INCORRECT LENGTH IN THE 00541000
- * VIRTUAL CSW. 00542000
- * 00543000
- * 5. IF THE VIRTUAL CONSOLE IS STILL BUSY, CALL DMKQCNWT TO 00544000
- * WRITE THE MESSAGE ON THE REAL TERMINAL. 00545000
- * 00546000
- * 6. IF A LINE BREAK HAS OCCURED DURING THE WRITE CALL DMKFRET 00547000
- * TO RETURN THE DATA BUFFER TO FREE STORAGE AND THEN EXIT; 00548000
- * IF A SINGLE ATTENTION IS HIT SET THE ATTN FLAG IN VDEVINTS 00549000
- * TO REFLECT AN ATTENTION INTERRUPT AFTER THE PRESANT I/O 00550000
- * OPERATION IS REFLECTED; IF 2 OR MORE ATTENTIONS ARE HIT, 00551000
- * TURN ON THE MULTIPLE ATTENTION FLAG FOR LATER 00552000
- * INTERROGATION. 00553000
- * 00554000
- * 7. TEST FOR POSSIBLE COMMAND CHAINING; IF CHAINING LOCATE AND 00555000
- * VERIFY NEXT CCW AND RESTART INTERPRETATION PROCESS; 00556000
- * OTHERWISE EXIT AFTER POSTING PROPER ENDING STATUS. 00557000
- * 00558000
- *. 00559000
- SPACE 3 00560000
- VCNWRT EQU * HERE TO SIMULATE A WRITE OPERATION 00561000
- BAL R9,VCNQM000 Clear queued messages HRC063DK 00561500
- OI VDEVCSW+4,CE SET CHANNEL END 00562000
- BAL R9,VCNSCALC CALCULATE SIZE NEEDED FOR BUFFER 00563000
- LA R0,7(,R4) GET COUNT ROUNDED TO NEAREST DOUBLE WORD 00564000
- SRL R0,3 ... 00565000
- CALL DMKFREE 00566000
- LR R10,R1 SAVE PTR 00567000
- ST R10,VCONBUF REMEBER HERE 00568000
- STH R0,VCONBFSZ SET DATA BUFFER SIZE HRC101DK 00569490
- VCNCNCDW LH R0,VCONCNT GET CCW COUNT 00570000
- N R0,XRIGHT16 ... 00571000
- ALR R0,R10 RO POINTS TO CURRENT END OF BUFFER 00572000
- BAL R9,VCNMVDAT CALL SUBROUTINE TO MOVE DATA 00573000
- TM VCONCCW+4,CD DATA CHAINING? 00574000
- BO VCNCNCHN YES 00575000
- TM VCONCCW+4,SILI SILI? 00576000
- BO VCNCWRT YES 00577000
- OI VDEVCSW+5,IL SET INCORRECT LENGTH 00578000
- NI VCONCCW+4,X'FF'-(CD+CC) SUPPRESS CHAINING 00579000
- VCNCWRT L R1,VCONBUF GET CONSOLE WORK BUFFER 00580000
- SR R2,R2 CLEAR PARAMETER REGISTER 00581000
- SLR R10,R1 GET LENGTH 00582000
- LTR R0,R10 LENGTH .EQ. 0 00583000
- BZ VCNWTNAT YES -- NOTHING MORE TO WRITE 00584000
- TM VCONCOMD,X'08' AUTO CARRIAGE RETURN? 00585000
- BO VCNCNF5 YES 00586000
- LA R2,VMGENIO+NOAUTO @V200820 00587000
- B VCNCN 00588000
- VCNCNF5 EQU * NORMAL VIRTUAL MACHINE WRITE @V200820 00589000
- LA R2,VMGENIO @V200820 00590000
- VCNCN LH R4,VDEVADD GET DEVICE ADDRESS @V200730 00591000
- LH R5,VCUADD .. 00592000
- OR R4,R5 .. 00593000
- AH R4,VCHADD .. 00594000
- LR R10,R1 BUFFER ADDRESS IN R10 @V200930 00595000
- ICM R2,8,VCONDWC GET DIAGNOSE CORD OR ZERO @VA07542 00596100
- TM VCONFLAG,X'01' HIGH INTENSITY? HRC310DK 00596110
- BZ *+8 NOPE, LEAVE R2 ALONE HRC310DK 00596120
- O R2,=A(HILIGHT) YES, SET HILIGHT FLAG HRC310DK 00596130
- TM VCONDWC,X'40' DIAGNOSE GRAPHICS WRITE ?? @VA07542 00597100
- BNZ CONWAIT YES..WAIT FOR MESSAGE @VM01023 00598000
- ICM R15,B'1111',VMTERM GET TERM RDEVBLOK.. @VM01023 00599000
- BNP CONWAIT NOT THERE..SAD... @VM01023 00600000
- USING RDEVBLOK,R15 @VM01023 00601000
- CLI RDEVTYPC,CLASTERM TERM CLASS ? @VM01023 00602000
- BNE CONWAIT NO..3270L @VM01023 00603000
- CLI RDEVTYPE,TYPBSC REMOTE 3270 ? @VM01023 00604000
- BNE CONWAIT NO..SORRY... @VM01023 00605000
- DROP R15 @VM01023 00606000
- SLR R15,R15 CLEAR COUNT REG @VM01023 00607000
- CH R0,=H'80' MORE THAN A LINE ? @VM01023 00608000
- BH CONWAIT SKIP FOR NOW... @VM01023 00609000
- IC R15,VMRBSC PICK UP CONTASK COUNT (MAYBE) @VM01023 00610000
- LA R15,1(,R15) ADD ONE @VM01023 00611000
- STC R15,VMRBSC REPLACE @VM01023 00612000
- CH R15,=H'22' REACHED THE LIMIT ? @VM01023 00613000
- BNL CONWAIT YES..STOP RIGHT HERE... @VM01023 00614000
- O R2,=A(NORET) RETURN IMMEDIATELY @VM01023 00615000
- CALL DMKQCNWT AND GO SEND MSG @VM01023 00616000
- SLR R2,R2 CLEAR RETURN CODE @VM01023 00617000
- B VCNNMVI CONTINUE... @VM01023 00618000
- CONWAIT EQU * @VM01023 00619000
- CALL DMKQCNWT WAIT FOR COMPLETION @VM01023 00620000
- SLR R15,R15 CLEAR CONTASK @VM01023 00621000
- STC R15,VMRBSC COUNT... @VM01023 00622000
- SPACE 1 00623000
- VCNNMVI EQU * HERE AT COMPLETION OF WRITE 00624000
- TM VMRSTAT,VMLOGOFF VIRTUAL MACHINE IN LOGOFF ? @VM08939 00625000
- BO VCNEXITY YES - BAIL OUT RAPIDLY @VM08939 00626000
- LR R1,R4 GET DEVICE ADDRESS 00627000
- CALL DMKSCNVU FIND DEVICE BLOKS AGAIN 00628000
- BNZ VCNEXITY DEVICE GONE, GET OUT 00629000
- TM VDEVTYPC,CLASTERM IS IT A TERMINAL DEVICE ? 00630000
- BZ VCNEXITY NO - EXIT 00631000
- CLI VDEVTYPE,TYP3210 IS IT A CONSOLE ?? 00632000
- BNE VCNEXITY NO -- EXIT 00633000
- LR R4,R0 SAVE DATA COUNT @V200730 00634000
- L R1,VCONWBUF GET OLD BUFFER ADDRESS @V200730 00635000
- LTR R1,R1 IS THERE ONE ?? @V200730 00636000
- BZ TSTSAVE NO, TEST TO SAVE THIS DATA @V200730 00637000
- SR R0,R0 CLEAR @V200730 00638000
- ST R0,VCONWBUF CLEAR BUFFER ADDRESS 00639000
- IC R0,VCONWBSZ GET OLD BUFFER SIZE @V200730 00640000
- CALL DMKFRET FRET OLD BUFFER @V200730 00641000
- TSTSAVE TM VDEVFLAG,VDEVCSPL CONSOLE SPOOLING ?? @V200730 00642000
- BZ TSTR2 NO, CONT @V200730 00643000
- TM VDEVSFLG,VDEVTERM TERM OUTPUT WITH SPOOLING ?? @V200730 00644000
- BO TSTR2 YES, CONT @V200730 00645000
- CLI VCONCOMD,X'19' DIAGNOSE WRITE ? @VM01022 00646000
- BE TSTR2 YES, DO NOT SAVE DIAGNOSE DATA @VM01022 00647000
- LA R0,7(R4) ROUND UP DATA COUNT @V200730 00648000
- SRL R0,3 GET DOUBLE WORD COUNT @V200730 00649000
- CALL DMKFREE GET A BUFFER @V200730 00650000
- STC R0,VCONWBSZ SAVE BUFFER SZIE @V200730 00651000
- STH R4,VCONWCNT SAVE DATA COUNT @V200730 00652000
- ST R1,VCONWBUF SAVE BUFFER ADDRESS @V200730 00653000
- BCTR R4,R0 DECREMENT FOR EXECUTE @V200730 00654000
- EX R4,SAVEBUF SAVE DATA IN BUFFER @V200730 00655000
- TSTR2 B *+4(R2) BRANCH ON R2 RETURN CODE @V200730 00656000
- B VCNWTNAT NO ATTENTION HIT 00657000
- B VCNWTSAT SINGLE ATTENTION HIT 00658000
- B VCNWTDAT 2 OR MORE ATTENTIONS HIT 00659000
- B LASTCCW LINE BREAK - STOP CHAINING NOW @VM08939 00660000
- SPACE 00661000
- VCNWTSAT CALL DMKCFMAT CALL TO SET ATTN INT PENDING @V200930 00662000
- BZ VCNWTNAT ATTN SET OK, CONT @V200930 00663000
- TM VDEVCFLG,VDEVATTN FLAGGED FOR CP, ATTN NOT SET @V200930 00664000
- BO LASTCCW YES, TERMINATE CCW STRING @V200930 00665000
- SPACE 00666000
- VCNWTDAT EQU * HERE WHEN 2 OR MORE ATTENTIONS ARE HIT DURING A WRITE 00667000
- OI VDEVCFLG,VDEVATTN INDICATE BREAK IS TO BE CALLED LATER 00668000
- SPACE 00669000
- VCNWTNAT EQU * HERE AT COMPLETION OF WRITE 00670000
- BAL R9,VCNRELSE RELEASE BUFFER 00671000
- TM VDEVSTAT,VDEVBUSY+VDEVCHBS DEVICE STILL BUSY? 00672000
- BNO VCNEXITY NO 00673000
- TM VCONFLAG,CD+CC CHAINING? 00674000
- BZ LASTCCW NO 00675000
- VCNCNCHN NI VDEVFLAG,X'FF'-VDEVCCW1 TURN OFF FIRST CCW FLAG 00676000
- BAL R9,GETCCW GET NEXT CCW 00677000
- B VCNNEXT RETURN HERE IF COMMAND CHAINING 00678000
- B VCNCNCDW RETURN HERE IF DATA CHAINING 00679000
- EJECT 00680000
- GETCCW EQU * HERE TO FIND AND VALIDATE THE NEXT NON-TIC CCW IN *00681000
- CHANNEL PROGRAM 00682000
- NC VDEVCSW+4(2),=AL1(CE,PCI) CLEAR VIRTUAL CSW STATUS 00683000
- L R1,VCONCAW POINT TO NEXT CCW TO PROCESS 00684000
- ADDRTEST TM VCONCAW+3,7 CHECK DOUBLE-WORD ALIGNMENT 00685000
- BNZ PROGCHK ALIGNMENT ERROR 00686000
- LA R15,8(,R1) GET CCW ADDRESS+8 00687000
- ST R15,VDEVCSW AND SAVE IN CSW 00688000
- ST R15,VCONCAW AND IN CAW FOR NEXT TIME 00689000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00690000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00691000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00692000
- ALTER2 TRANS 2,1,OPT=(BRING,DEFER),ADEX=PROGCHK1 GET CCW @V304735 00693000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00694000
- BZ NOTCHG2 IF NOT - CONTINUE @V304735 00695000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00695100
- B ALTER2 RE-ISSUE THE TRANS CALL @V304735 00697000
- NOTCHG2 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00698000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00699000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00700000
- TM 0(R2),X'07' COULD IT BE A TIC ? 00701000
- BNZ NOTTIC NO 00702000
- TM 0(R2),X'08' IS IT A TIC ? 00703000
- BO TIC YES 00704000
- SPACE 1 00705000
- NOTTIC EQU * 00706000
- LA R15,4 SET TENTATIVE EXIT INDEX 00707000
- TM VCONFLAG,CD DATA CHAINING ?? @V200730 00708000
- BO GETCD YES, GET ADDRESS @V200730 00709000
- MVC VCONCCW,0(R2) MOVE CCW TO VCONCTL @V200730 00710000
- SLR R15,R15 SET EXIT INDEX FOR CMD CHHRC058DK 00710100
- CLI VCONCCW,X'29' DIAG 58 FULL SCR WRITE? HRC058DK 00710110
- BE SETRETN Y, BYTE 5 HAS OPT FLAGS HRC058DK 00710120
- CLI VCONCCW,X'2A' DIAG 58 FULL SCR READ? HRC058DK 00710130
- BE SETRETN Y, BYTE 5 HAS OPT FLAGS HRC058DK 00710140
- CLI VCONCCW,X'63' DIAG 58 control query? HRC064DK 00710200
- BE SETRETN Y, pass it through HRC064DK 00710210
- OI VCONDWC,X'40' ASSUME DIAGNOSE GRAPHICS WRITE @VA07542 00711100
- CLI VCONCCW,X'19' DIAG WRITE CCW ?? @V200730 00713000
- BE SETRETN YES, BYTE 5 HAS LINE CORD @V200730 00714000
- MVI VCONDWC,X'00' CLEAR FOR OTHER WRITES @VA07542 00715100
- B SETRETN SET RETURN INDEX @V200730 00716000
- GETCD L R1,0(R2) GET ADDRESS PORTION @V200730 00717000
- STCM R1,7,VCONCCW+1 SET DATA ADDRESS @V200730 00718000
- L R1,4(R2) GET REST OF CCW @V200730 00719000
- STCM R1,8,VCONFLAG SET CCW FLAGS @V200730 00720000
- STH R1,VCONCNT SET NEW CCW COUNT @V200730 00721000
- SETRETN ALR R9,R15 SET CORRECT EXIT ADDRESS 00722000
- TM VCONFLAG,PCIF PCI FLAG ON ? 00723000
- BNO *+8 NO 00724000
- OI VDEVCSW+5,PCI SET PCI IN VIRTUAL CSW 00725000
- LH R1,VCONCNT GET CCW COUNT 00726000
- N R1,XRIGHT16 COUNT ZERO? 00727000
- BZ PROGCHK YES 00728000
- STH R1,VDEVCSW+6 SET RESIDUAL COUNT 00729000
- CLI VCONCCW,X'19' DIAGNOSE WRITE? HRC310DK 00729100
- BE *+12 YES, ALLOW 38-39 NON-ZERO HRC310DK 00729200
- TM VCONFLAG,3 BITS 38-39 OF THE CCW MUST BE 0 00730000
- BNZ PROGCHK IF NOT -- 00731000
- TM VCONFLAG,IDA INDIRECT DATA ADDRESS ? 00732000
- BNO VCNDTTS NO 00733000
- TM VCONADDR+3,X'03' IDA MUST BE ON A WORD *00734000
- BOUNDRY 00735000
- BNZ PROGCHK ERROR IF NOT 00736000
- SL R6,VMCHSTRT GET DISPLACEMENT; BLOCKS @VA03177 00737000
- SL R7,VMCUSTRT MAY MOVE @VA03177 00738000
- SL R8,VMDVSTRT ... @VA03177 00739000
- L R1,VCONCCW GET VIRT ADD OF IDA LIST @VA03177 00740000
- TRANS 2,1,OPT=(BRING,DEFER),ADEX=PROGCHK1 PULL IDA IN @VA03177 00741000
- AL R6,VMCHSTRT FIX DISPLACEMENT; BLOCKS @VA03177 00742000
- AL R7,VMCUSTRT MAY HAVE MOVED @VA03177 00743000
- AL R8,VMDVSTRT ... @VA03177 00744000
- TM 0(R2),X'FF' IS FIRST IDA ENTRY VALID ? @VA03177 00745000
- BNZ PROGCHK NO- BRANCH; ERROR @VA03177 00746000
- VCNDTTS NI VDEVCFLG,X'FF'-VDEVTIC TURN TIC FLAG OFF 00747000
- BR R9 RETURN 00748000
- SPACE 1 00749000
- TIC EQU * HERE TO FOLLOW THE TIC 00750000
- TM VDEVFLAG,VDEVCCW1 IS IT THE FIRST CCW? 00751000
- BO PROGCHK YES, GO SET PROGRAM CHECK 00752000
- TM VDEVCFLG,VDEVTIC TIC TO TIC ? 00753000
- BO PROGCHK YES, GO SET PROGRAM CHECK 00754000
- OI VDEVCFLG,VDEVTIC INDICATE LAST CCW WAS A TIC 00755000
- L R1,0(,R2) GET TIC ADDRESS 00756000
- LA R1,0(,R1) STRIP OP-CODE 00757000
- ST R1,VCONCAW SAVE ADDRESS 00758000
- B ADDRTEST GO VALIDATE NEW CCW 00759000
- EJECT 00760000
- VCNSCALC EQU * HERE TO CALCUATE THE SIZE OF THE DATA BUFFER *00761000
- NEEDED FOR READ AND WRITE SIMULATION 00762000
- SLR R4,R4 CLEAR 00763000
- L R1,VCONCAW GET CURRENT CAW 00764000
- S R1,F8 AND BACKUP TO GET CURRENT CCW 00765000
- VCNSCLP LR R3,R1 CHECK FOR NON DOUBLE WORD ALIGNMENT 00766000
- N R3,F7 ... 00767000
- BNZ PROGCHK MUST BE ZERO 00768000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00769000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00770000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00771000
- ALTER3 TRANS 2,1,OPT=(BRING,DEFER),ADEX=PROGCHK1 GET CCW @V304735 00772000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00773000
- BZ NOTCHG3 NOT CHANGED - CONTINUE @V304735 00774000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00774100
- B ALTER3 RE-ISSUE THE TRANS CALL @V304735 00776000
- NOTCHG3 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00777000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00778000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00779000
- TM VCONCOMD-VCONCCW(R2),X'07' IS CCW A TIC ? 00780000
- BNZ VCNSCCT NO 00781000
- TM VCONCOMD-VCONCCW(R2),X'08' IS CCW A TIC ? 00782000
- BNO VCNSCCT NO 00783000
- TM VDEVCFLG,VDEVTIC HAD A TIC BEFORE ?? 00784000
- BO PROGCHK YES, PROGRAM CHECK FOR CHANNEL 00785000
- OI VDEVCFLG,VDEVTIC FLAG AS TIC ENCOUNTERED 00786000
- L R1,VCONADDR-VCONCCW(,R2) GET NEW CCW ADDRESS 00787000
- LA R1,0(,R1) CLEAR OP-CODE 00788000
- B VCNSCLP 00789000
- SPACE 1 00790000
- VCNSCCT EQU * 00791000
- NI VDEVCFLG,X'FF'-VDEVTIC UNFLAG TIC ENCOUNTERED 00792000
- LH R3,VCONCNT-VCONCCW(,R2) GET CCW COUNT 00793000
- N R3,XRIGHT16 ... 00794000
- ALR R4,R3 ACCUMULATE COUNT 00795000
- TM VCONDWC,X'40' IS THIS DIAG 58 ? HRC101DK 00795100
- BZ CKSIOSIZ NO, USE NORMAL SIZE HRC101DK 00795200
- CL R4,=F'4064' LARGER THAN MAX ALLOWED ?? HRC101DK 00795300
- BNH NEXT OK IF LESS THAN OR EQUAL TO MAX HRC101DK 00795400
- B PRGIL ELSE PROG CHECK HRC101DK 00795500
- CKSIOSIZ EQU * HRC101DK 00795600
- CL R4,=F'2032' LARGER THAN MAX ALLOWED ?? 00796000
- BL NEXT NO, CONT 00797000
- PRGIL OI VDEVCSW+5,IL SET INCORRECT LENGTH @V200730 00798000
- B PROGCHK SET CHAN PROG CHECK 00799000
- NEXT DS 0H 00800000
- TM VCONFLAG-VCONCCW(R2),CD DATA CHAINED ? 00801000
- BZ TSTGRF NO, TEST FOR DIAG WRITE @V200730 00802000
- LA R1,8(,R1) GET NEXT CCW 00803000
- B VCNSCLP 00804000
- TSTGRF TM VCONDWC,X'40' DIAGNOSE GRAPHICS WRITE ?? @VA07542 00805100
- BCR 8,R9 NO, RETURN @V200730 00806000
- L R3,VMTERM GET USER TERM RDEVBLOK @V200730 00807000
- LTR R3,R3 IS THERE ONE NOW ?? @V200730 00808000
- BNP 0(R9) NO, RETURN @V200730 00809000
- USING RDEVBLOK,R3 ADDRESSING @V200730 00810000
- CLI RDEVTYPC,CLASGRAF IS IT A GRAF DEVICE @V200730 00811000
- BE *+20 YES, CHECK FOR ERASE SCREEN @V2D3931 00812000
- CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00813000
- BNE VDEVREJ NO, REJECT - CANN'T HACK IT @V2D3931 00814000
- CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE FOR 3270 @V2D3931 00815000
- BNE VDEVREJ NO, REJECT - SET UNIT CHECK FLAG @V2D3931 00816000
- CLI VCONDWC,X'FF' ERASE SCREEN, CLEAR DIAGNOSE ?? @VA07542 00818100
- BCR 8,R9 YES, LET IT GO 00819000
- SLR R0,R0 CLEAR A WORK REGISTER @V60A6B6 00819100
- IC R0,VCONDWC GET LINE COORDINATE NO @V60A6B6 00819200
- N R0,=XL4'0000003F' AND OUT ERASE BIT @V60A6B6 00819300
- SLR R1,R1 CLEAR DISPLAY INDEX REGISTER @V60A6B6 00820000
- CLI RDEVTYPE,TYPBSC DISPLAY ON A REMOTE LINE ? @V60A6B6 00821100
- BE CHKSIZE YES. @V60A6B6 00822100
- CHKGRAF EQU * @V60A6B6 00822200
- IC R1,RDEVGRTY GET LOCAL DISPLAY'S SCREEN INDEX @V60A6B6 00822300
- DROP R3 FINISHED USING RDEVBLOK... @V60A6B6 00822400
- CHKSIZE EQU * @V60A6B6 00822500
- L R2,=A(DMKGRTIN) ADDRESS INPUT COORDINATE TABLE @V60A6B6 00822600
- LA R2,0(R1,R2) AND GET THE RIGHT ONE FOR DEVICE @V60A6B6 00823000
- CLM R0,B'0001',0(R2) THIS WRITE TO THE INPUT AREA? @V60A6B6 00823100
- BE TSTINPT YES, CHECK THAT @V200730 00824000
- MH R0,=H'80' GET BUFFER POSITION START @V60A6B6 00825100
- ALR R0,R4 ADD THIS DATA COUNT @V60A6B6 00825200
- L R2,=A(DMKGRTDS) ADDRESS TABLE OF DISPLAY SIZES @V60A6B6 00825300
- L R2,0(R1,R2) GET RIGHT SIZE FOR THIS DEVICE @V60A6B6 00825400
- LA R2,6(,R2) PLUS 6 FOR HI INTENSITY HRC310DK 00825410
- CLR R0,R2 CAN'T BE MORE THAN THIS @V60A6B6 00825500
- BNHR R9 OK, CONTINUE @V60A6B6 00825600
- B PRGIL SORRY CHUM, THAT'S A NO-NO @V200730 00829000
- TSTINPT CL R4,=F'136' CANT WRITE MORE THAN THIS @V200730 00830000
- BNH 0(R9) OK, CONT @V200730 00831000
- B PRGIL WELL, I WARNED YOU @V200730 00832000
- EJECT 00833000
- VCNMVDAT EQU * HERE TO MOVE DATA BETWEEN USER AND DATA BUFFER 00834000
- OI VDEVCFLG,VDEVTRAN INDICATE A DATA TRANSFER 00835000
- VCNCUPCR CLR R0,R10 IF FIELD IS ALREADY EMPTY 00836000
- BE CCWWLRCN GIVE STATUS 00837000
- L R1,VCONADDR GET DATA ADDRESS 00838000
- LA R1,0(,R1) CLEAR OP-CODE 00839000
- LH R4,VCONCNT GET COUNT 00840000
- N R4,XRIGHT16 ... 00841000
- TM VCONFLAG,IDA INDIRECT DATA ADDRESS ? 00842000
- BNO VCNCTADR NO 00843000
- ST R1,VCONIDAP SAVE FIRST IDAW PTR 00844000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00845000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00846000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00847000
- ALTER4 TRANS 2,1,OPT=(BRING,DEFER),ADEX=VCNCHAD FETCH IDAW @V304735 00848000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00849000
- BZ NOTCHG4 NOT CHANGED - CONTINUE @V304735 00850000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00850100
- B ALTER4 RE-ISSUE THE TRANS CALL @V304735 00852000
- NOTCHG4 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00853000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00854000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00855000
- L R1,0(,R2) GET FIRST IDA 00856000
- VCNCTADR LR R5,R0 GET CURRENT CHARACTER PTR @V304635 00857000
- SLR R5,R10 GET FIELD LENGTH COUNT 00858000
- LA R14,2048(,R1) 00859000
- N R14,=A(X'FFF800') 00860000
- SLR R14,R1 GET COUNT TO END OF 2K PROTECTION AREA 00861000
- CLR R4,R5 LESS THAN FULL RECORD REQUESTED? 00862000
- BNL VCNCTPG NO 00863000
- LR R5,R4 COUNT TO BE MOVED IS CCW COUNT 00864000
- TM VCONFLAG,CD+SILI DATA CHAINING OR SILI? 00865000
- BNZ VCNCTPG YES 00866000
- OI VDEVCSW+5,IL SET INCORRECT LENGTH 00867000
- NI VCONFLAG,X'FF'-(CD+CC) SUPPRESS CHAINING 00868000
- VCNCTPG CLR R14,R5 00869000
- BNL VCNMVDCN MUST STOP AT END OF 2K 00870000
- LR R5,R14 COUNT TO BE MOVED IS TO 2K BOUNDRY 00871000
- VCNMVDCN C R5,F256 IS COUNT > 256 BYTES? 00872000
- BNH VCNMVDCO NO 00873000
- L R5,F256 COUNT TO BE MOVED IS 256 BYTES 00874000
- VCNMVDCO BCTR R5,0 DECREMENT COUNT FOR MVC 00875000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00876000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00877000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00878000
- ALTER5 TRANS 2,1,OPT=(BRING,DEFER),ADEX=VCNCHAD GET DATA PAGE@V304735 00879000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00880000
- BZ NOTCHG5 NOT CHANGED - CONTINUE @V304735 00881000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00881100
- B ALTER5 NOW RE-ISSUE THE TRANS CALL @V304735 00883000
- NOTCHG5 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00884000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00885000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00886000
- TM VCONCOMD,X'01' WRITE COMMAND? 00887000
- BNO VCNMVRD NO 00888000
- EX R5,MVCFCORE MOVE DATA FROM VIRTUAL CORE 00889000
- B VCNMVDC 00890000
- VCNMVRD TM VCONFLAG,SKIP SUPPRESS DATA TRANSFER? 00891000
- BO VCNMVDC YES 00892000
- LR R3,R0 SAVE BUFFER LENGTH REGISTER @V304735 00893000
- IC R0,VDEVKEY GET VIRTUAL CAW KEY @V304735 00894000
- CALL DMKPSASC CHECK FOR PROTECTION VIOLATION @V304735 00895000
- BNZ VCNCPRTV BRANCH ON PROTECTION ERROR @V304735 00896000
- LR R0,R3 RESTORE BUFFER LENGTH @V304735 00897000
- EX R5,MVCTCORE MOVE DATA INTO VIRTUAL CORE 00898000
- VCNMVDC LA R5,1(,R5) DATA MOVE COMPLETE, RESTORE COUNT 00899000
- ALR R10,R5 POINT TO NEW START OF FIELD 00900000
- SLR R4,R5 REDUCE CCW COUNT 00901000
- STH R4,VDEVCSW+6 SAVE RESIDUAL COUNT 00902000
- BCR 10,R9 CCW COUNT SATISFIED, EXIT 00903000
- CLR R0,R10 BUFFER EXHAUSTED? 00904000
- BE CCWWLRCN YES, TEST FOR WRL 00905000
- ALR R1,R5 POINT TO NEW VIRTUAL DATA AREA 00906000
- TM VCONFLAG,IDA INDIRECT DATA ADDRESS ? 00907000
- BNO VCNCTADR NO 00908000
- LR R3,R1 GET IDA 00909000
- N R3,=X'FF0007FF' VALID IDA ON 2K BOUNDRY? @VA03177 00910000
- BNZ VCNCTADR NO 00911000
- L R1,VCONIDAP GET CURRENT IDAW PTR 00912000
- LA R1,4(,R1) BUMP BY 4 00913000
- ST R1,VCONIDAP REPLACE 00914000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 00915000
- SL R7,VMCUSTRT CONT. UNIT DISP @VA01770 00916000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 00917000
- ALTER6 TRANS 2,1,OPT=(BRING,DEFER),ADEX=VCNCHAD FETCH IDAW @V304735 00918000
- CALL DMKPSACC CHECK IF SHARED PAGE WAS CHANGED @V304735 00919000
- BZ NOTCHG6 NOT CHANGED - CONTINUE @V304735 00920000
- CALL DMKVMASH FLAG ALL CHANGED SHARED PAGES @VA07351 00920100
- B ALTER6 NOW - REISSUE THE TRANS CALL @V304735 00922000
- NOTCHG6 AL R6,VMCHSTRT RESTORE ADDRESS @V304735 00923000
- AL R7,VMCUSTRT RESTORE ADDRESS @V304735 00924000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00925000
- L R1,0(,R2) GET IDA 00926000
- LR R3,R1 GET IDA 00927000
- N R3,=X'FF0007FF' VALID IDA ON 2K BOUNDRY? @VA03177 00928000
- BNZ VCNCCHAD NO -- GIVE CHANNEL PROGRAM CHECK 00929000
- B VCNCTADR 00930000
- SPACE 00931000
- VCNCHAD EQU * HERE WHEN A CHANNEL PROGRAM CHECK OCCURS DURING 00932000
- * EXECUTION OF THE MOVE SUBROUTINE (BRANCH FROM TRANS) 00933000
- AL R6,VMCHSTRT ADDRESS OF VCHBLOK @VA01770 00934000
- AL R7,VMCUSTRT ADDRESS OF VCUBLOK @VA01770 00935000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00936000
- VCNCCHAD EQU * HERE IF CHANNEL PROGRAM CHECK DURING MOVE ROUTINE 00937000
- OI VDEVCSW+5,PRGC INDICATE PROGRAM CHECK 00938000
- B *+8 00939000
- SPACE 00940000
- VCNCPRTV EQU * HERE WHEN A PROTECTION VIOLATION OCCURS DURING *00941000
- EXECUTION OF THE MOVE SUBROUTINE 00942000
- OI VDEVCSW+5,PRTC INDICATE PROTECTION CHECK 00943000
- TM VCONCCW+4,CD DATA CHAINING? 00944000
- BO WLRBRKCN YES -- GIVE WLR 00945000
- TM VCONCCW+4,SILI SILI? 00946000
- BO WLRBRKSP YES -- JUST BREAK CHAIN 00947000
- B WLRBRKCN GIVE INCORRECT LENGTH AND BREAK CHAIN 00948000
- SPACE 00949000
- CCWWLRCN EQU * HERE WHEN FIELD COUNT EMPTIED BEFORE CCW COUNT 00950000
- TM VCONFLAG,CD DATA CHAINING? 00951000
- BO WLRBRKCN DATA CHAINING MUST BE BROKEN 00952000
- TM VCONFLAG,SILI WLR IS OK WITH SILI SET 00953000
- BCR 1,R9 00954000
- WLRBRKCN OI VDEVCSW+5,IL SET INCORRECT LENGTH RECORD 00955000
- WLRBRKSP NI VCONFLAG,X'FF'-(CD+CC) SUPPRESS CHAINING 00956000
- BR R9 EXIT 00957000
- SPACE 00958000
- MVCTCORE MVC 0(0,R2),0(R10) EXECUTED MOVE TO VIRTUAL CORE 00959000
- MVCFCORE MVC 0(0,R10),0(R2) EXECUTED MOVE FROM VIRTUAL CORE 00960000
- MVCBUFF MVC 0(0,R1),0(R10) EXCUTED MOVE FROM VIRTUAL BUFFER @V200730 00961000
- SAVEBUF MVC 0(0,R1),0(R10) EXECUTED TO SAVE WRITE DATA @V200730 00962000
- EJECT 00963000
- VCNRELSE EQU * HERE TO RETURN THE DATA BUFFER TO FREE STORAGE 00964000
- L R13,VDEVCON POINT TO VCONCTL BLOK @VA14366 00964100
- SLR R0,R0 CLEAR FOR IC 00965000
- LH R0,VCONBFSZ GET NUMBER OF DOUBLE WORDS TO FREHRC101DK 00966490
- L R1,VCONBUF GET PTR TO DATA BUFFER 00967000
- LTR R1,R1 BLOCK ALREADY RETURNED ? 00968000
- BCR 8,R9 (BZR) YES 00969000
- CALL DMKFRET 00970000
- ENTRY DMKVCNFT ENTRY POINT TO TELL DMKFRE ... @VA05235 00970100
- DMKVCNFT EQU * ADDRESS OF ABOVE DMKFRET CALL. @VA05235 00970200
- XC VCONBUF,VCONBUF CLEAR PTR 00971000
- BR R9 00972000
- * 00972200
- VCNQM000 EQU * HRC063DK 00972220
- L R5,VDEVQMB -> QMBLOK chain anchor HRC063DK 00972240
- XC VDEVQMB,VDEVQMB Clear queued msg chain HRC063DK 00972260
- USING QMBLOK,R5 QMBLOK is def in VBLOKS HRC063DK 00972280
- * HRC063DK 00972300
- VCNQM010 EQU * HRC063DK 00972320
- LTR R5,R5 Do we have queued msgs? HRC063DK 00972340
- BZR R9 No, just exit HRC063DK 00972360
- L R0,QMQCNR0 Load message length HRC063DK 00972380
- LA R1,QMMSGTXT -> message text HRC063DK 00972400
- L R2,QMQCNR2 Load msg option flags HRC063DK 00972420
- O R2,=A(NOQUEUE) Set 'do not queue' flag HRC063DK 00972440
- CALL DMKQCNWT Issue msgs HRC063DK 00972460
- L R0,QMSIZE Size of QMBLOK+msg txt HRC063DK 00972480
- LR R1,R5 QMBLOK ptr to R1 HRC063DK 00972500
- L R5,QMNEXT -> next QMBLOK HRC063DK 00972520
- CALL DMKFRET Release prev QMBLOK HRC063DK 00972540
- B VCNQM010 Go prcoess next QMBLOK HRC063DK 00972560
- DROP R5 QMBLOK HRC063DK 00972580
- * HRC063DK 00972600
- EJECT 00973000
- * 00974000
- * HERE FOR SUBROUTINES TO HANDLE EXIT FROM DMKVCNEX 00975000
- * 00976000
- SPACE 00977000
- UNITCHK EQU * HERE TO INDICATE UNIT CHECK - SENSE BYTE IS ALREADY 00978000
- * SET 00979000
- OI VDEVCSW+4,CE+DE+UC SET UNIT CHECK 00980000
- B VCNEXIT 00981000
- SPACE 00982000
- PROTCHK EQU * HERE ON A PROTECTION VIOLATION 00983000
- OI VDEVCSW+5,PRTC SET PROTECTION CHECK 00984000
- B LASTCCWX 00985000
- SPACE 00986000
- PROGCHK1 EQU * HERE ON A CHANNEL PROGRAM CHECK FROM TRANS MACRO 00987000
- AL R6,VMCHSTRT ADDRESS OF VCHBLOK @VA01770 00988000
- AL R7,VMCUSTRT ADDRESS OF VCUBLOK @VA01770 00989000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 00990000
- PROGCHK EQU * HERE ON A PROGRAM CHECK 00991000
- OI VDEVCSW+5,PRGC SET CHANNEL PROGRAM CHECK 00992000
- SPACE 1 00993000
- LASTCCWX EQU * 00994000
- TM VDEVCSW+4,CE IS CE IN CSW ? 00995000
- BNO VCNEXIT NO 00996000
- OI VDEVCSW+4,DE PUT DE IN CSW FOR EXCEPTION CONDITIONS 00997000
- B VCNEXIT 00998000
- SPACE 00999000
- LASTCCW EQU * HERE TO FINISH PROCESSING THE LAST CCW 01000000
- TM VDEVCSW+4,DE IS DE IN CSW? 01001000
- BO VCNEXIT YES, NO DE STATUS IN DEVICE 01002000
- OI VDEVSTAT,VDEVPEND DE MUST BE PENDING IN DEVICE 01003000
- OI VDEVINTS,DE ... 01004000
- SPACE 01005000
- VCNEXIT EQU * HERE FOR GENERAL EXIT 01006000
- IC R0,VDEVKEY GET CAW PROTECT KEY @VA13617 01006100
- STC R0,VDEVCSW PUT IT IN CSW @VA13617 01006200
- NI VDEVCSW,X'F0' CLEAN UP LOW NIBBLE @VA13617 01006300
- BAL R9,VCNRELSE RELEASE BUFFER - IF ANY 01007000
- TM VCUTYPE,VCUSHRD SHARED SUBCHANNEL? @VA01709 01008000
- BZ *+8 NO, NO STATUS FOR CU @VA01709 01009000
- OI VCUSTAT,VCUCEPND INTERRUPT PENDING IN CU @VA02998 01010000
- OI VDEVSTAT,VDEVCHAN SET CHANNEL INTERRUPT PENDING 01011000
- CLI VCONCOMD,X'29' DIAG 58 FULL SCR WRITE? HRC058DK 01011100
- BE VCND58 Y, SPECIAL HANDLING HRC058DK 01011110
- CLI VCONCOMD,X'2A' DIAG 58 FULL SCR READ? HRC058DK 01011120
- BE VCND58 Y, SPECIAL HANDLING HRC058DK 01011130
- CLI VCONCOMD,X'63' DIAG 58 control query? HRC064DK 01011200
- BE VCND58 Y, exit w/ CC from HDKD58HRC064DK 01011210
- TM VDEVFLAG,VDEVCCW1 STILL ON 1ST CCW? 01012000
- BNO VCNEXITX NO, NO CHANCE FOR CC1 TO SIO 01013000
- TM VDEVCSW+4,CE+DE ANY CHANNEL OR DEVICE STATUS PENDING 01014000
- BZ VCNCC1 NO, MUST BE AN UNUSUAL CONDITION 01015000
- TM VCONCOMD,X'03' IS IT AN IMMEDIATE COMMAND? 01016000
- BNO VCNEXITX NO 01017000
- B VCNCC1 GO SET CC1 HRC058DK 01017100
- VCND58 EQU * HRC058DK 01017110
- CLI VDEVCSW+4,CE+DE NORMAL COMPLETION? HRC058DK 01017120
- BE VCNEXITX Y, HANDLE PENDING INTRPT HRC058DK 01017130
- SPACE 01018000
- VCNCC1 EQU * HERE FOR CC1 TO SIO 01019000
- TM VMESTAT,VMEXTCM IS V.M. IN EXTENDED CONTROL MODE ? 01020000
- BNO VCN004 NO 01021000
- OI VMPSW+2,X'10' SET CC1 IN EXTENDED PSW 01022000
- B VCN005 01023000
- VCN004 OI VMPSW+4,X'10' SET CC1 IN STANDARD PSW 01024000
- VCN005 EQU * 01025000
- LA R1,CSW ADDRESS OF CSW 01026000
- SL R6,VMCHSTRT CHANNEL DISP @VA01770 01027000
- SL R7,VMCUSTRT CONTR. UNIT DISP @VA01770 01028000
- SL R8,VMDVSTRT GET VDEVBLOK DISPLACEMENT 01029000
- TRANS 2,1,OPT=(BRING,DEFER) BRING IN USER'S PAGE 0 01030000
- AL R6,VMCHSTRT RESTORE ADDRESS @VA01770 01031000
- AL R7,VMCUSTRT RESTORE ADDRESS @VA01770 01032000
- AL R8,VMDVSTRT ADDRESS OF VDEVBLOK 01033000
- MVC 4(2,R2),VDEVCSW+4 STORE STATUS ONLY 01034000
- NI VDEVSTAT,X'FF'-VDEVCHAN NO CHANNEL CLASS INTERRUPT PEND 01035000
- CLI VDEVCSW+4,X'8E' DIAG 58 CP interruption? HRC062DK 01035100
- BNE VCNEXITX No HRC062DK 01035150
- MVC 0(8,R2),VDEVCSW Provide full CSW on X'8E'HRC062DK 01035200
- SPACE 01036000
- VCNEXITX EQU * HERE TO TEST FOR AND POST PENDING INTERRUPTS 01037000
- TM VDEVSTAT,VDEVCHAN+VDEVPEND ANY INTERRUPTS PENDING? 01038000
- BZ VCNNOINT NO, EXIT 01039000
- L R2,=A(DMKVIOMK) POINT TO INTERRUPT PENDING MASK *01040000
- TABLE 01041000
- LH R3,VDEVADD GET DEVICE ADDRESS 01042000
- AR R3,R3 *2 01043000
- LA R3,0(R3,R2) POINT TO CORRECT PENDING MASK 01044000
- OC VCUDVINT,0(R3) SET PENDING FLAGS IN VCUBLOK 01045000
- LH R3,VCUADD GET ADDRESS OF CONTROL UNIT 01046000
- SRL R3,3 *2 01047000
- LA R3,0(R3,R2) POINT TO CORRECT PENDING MASK 01048000
- OC VCHCUINT,0(R3) AND SET PENDING FLAG 01049000
- LH R3,VCHADD GET CHANNEL ADDRESS 01050000
- SRL R3,7 *2 01051000
- ALR R3,R2 POINT TO MASK BYTES 01052000
- OC VMIOINT,0(R3) FLAG CHANNEL PENDING IN VMBLOK 01053000
- OI VMPEND,VMIOPND FLAG SUMMARY PENDING BYTE 01054000
- TM VDEVCFLG,VDEVTRAN DID DATA TRANSFER OCCUR ? 01055000
- BNO VCNNOINT NO 01056000
- TM VMOSTAT,VMDISC DISCONNECTED USER ? 01057000
- BO *+8 YES -- FORGET ABOUT Q1 01058000
- OI VMQSTAT,VMPRIDSP FLAG USER TO ENTER DISPATCHER Q1 01059000
- SPACE 01060000
- VCNNOINT EQU * HERE DIRECTLY IF NO INTERRUPTS ARE PENDING 01061000
- NI VDEVSTAT,X'FF'-(VDEVBUSY+VDEVCHBS) MARK DEVICE & *01062000
- SUBCHANNEL AS NO LONGER BUSY 01063000
- TM VDEVCFLG,VDEVATTN WAS A DOUBLE ATTN HIT ? 01064000
- BO VCNBK YES, GO TO CP MODE @V200930 01065000
- TM VDEVCFLG,VDEVVCF FLAGGED TO DO VIRT CONS FUNC ??@V200930 01066000
- BZ VCNEXITY NO, CONT @V200930 01067000
- L R1,VCONRBUF GET BUFFER ADDRESS @V200930 01068000
- USING BUFIN,R1 @V200930 01069000
- SR R0,R0 CLEAR @V200930 01070000
- ST R0,VCONRBUF CLEAR BUFFER ADDRESS @V200930 01071000
- L R0,BUFCNT GET DATA COUNT @V200930 01072000
- DROP R1 @V200930 01073000
- TM VMOSTAT,VMCF AVOID OVERLAPPING TASKS @VA02350 01074000
- BO VCNEXITY @VA02350 01075000
- CALL DMKCFMEN DO VIRT CONSOLE FUNCTION @V200930 01076000
- B VCNEXITY RETURN @V200930 01077000
- VCNBK DS 0H @V200930 01078000
- CALL DMKCFMBK PLACE USER IN CONSOLE FUNCTION MODE 01079000
- SPACE 1 01080000
- VCNEXITY TM VMDSTAT,VMTIO USER IN TIO BUSY LOOP ?? @V200730 01081000
- BZ *+8 NO, SKIP @V200730 01082000
- NI VMRSTAT,X'FF'-VMEXWAIT-VMIDLE REMOVE FROM WAIT @V200730 01083000
- GOTO DMKDSPCH LEAVE HERE @V200730 01084000
- SPACE 01085000
- ALARMMSG DC C'RRRR....RING....GGGG' VIRTUAL BELL 01086000
- EJECT 01087000
- LTORG 01088000
- COPY DEVTYPES 01089000
- COPY EQU 01090000
- COPY VBLOKS 01091000
- COPY RBLOKS @V200730 01092000
- COPY VMBLOK 01093000
- PSA 01094000
- COPY IOBLOKS 01095000
- COPY CONBUF @V200930 01096000
- END 01097000
ibm/vm370-lib/cp/dmkvcn.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator