RGB TITLE 'DMKRGB (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
COPY OPTIONS @V305731 00003000
COPY LOCAL @V305731 00004000
EJECT 00005000
************************************************************* 00006000
* 00007000
* MODULE NAME - 00008000
* 00009000
* DMKRGB 00010000
* 00011000
* CONTENTS - 00012000
* 00013000
* DMKRGBIC - CONTASK INITIALIZATION AND SCHEDULING 00014000
* DMKRGBEN - ENABLE OR DISABLE OF BISYNC LINES & REMOTE STATIONS 00015000
* 00016000
* FUNCTION - 00017000
* 00018000
* THIS MODULE PROVIDES SUPPORT FOR THE 3270 REMOTE DISPLAY 00019000
* AND PRINTER STATIONS. THE MODULE HANDLES INTERRUPTS AND CCW 00020000
* PROCESSING FOR THE REMOTE STATIONS INCLUDING MESSAGE HANDLING 00021000
* AND SCREEN MANAGEMENT. 00022000
SPACE 2 00023000
DMKRGB START , @V305731 00024000
SPACE 1 00025000
USING PSA,R0 @V305731 00026000
USING TRQBLOK,R4 @V305731 00027000
USING CONTASK,R6 @V305731 00028000
USING BSCBLOK,R5 @V305731 00029000
USING RDEVBLOK,R8 @V305731 00030000
USING IOBLOK,R10 @V305731 00031000
USING VMBLOK,R11 @V305731 00032000
USING NICBLOK,R9 @V305731 00033000
SPACE 1 00034000
EXTRN DMKIOSQR,DMKSTKCP,DMKSCHRT,DMKTBLGR @V305731 00035000
EXTRN DMKTBLRG @VA06170 00035100
EXTRN DMKQCNET,DMKRGAIN,DMKBOXBX,DMKIOSHA @V346931 00036100
EXTRN DMKTBMZO @VM03172 00037000
EXTRN DMKTBMTO @V387398 00037100
SPACE 1 00038000
ENTRY DMKRGBIC,DMKRGBEN,DMKRGBSN,DMKRGBMT @V305731 00039000
EXTRN DMKPTRAN @VA07391 00039100
EJECT 00040000
************************************************************* 00041000
* 00042000
* SUBROUTINE NAME - 00043000
* 00044000
* DMKRGBIC 00045000
* 00046000
* FUNCTION - 00047000
* TO INITIALIZE THE CONTASK FIELDS WHICH COMPRISE THE 00048000
* BINARY SYNCHRONOUS TRANSMISSION PROTOCOL HEADER AND 00049000
* ENDING CHARACTER FOR THE 3270 REMOTE SUPPORT. 00050000
* 00051000
* ATTRIBUTES - 00052000
* 00053000
* SERIALLY REUSEABLE, RESIDENT, ENTERED VIA GOTO 00054000
* 00055000
* ENTRY CONDITIONS - 00056000
* 00057000
* GR 12 = ADDRESS OF DMKRGBIC 00058000
* GR 11 = ADDRESS OF A VALID VMBLOK 00059000
* GR 8 = ADDRESS OF THE LINE RDEVBLOK 00060000
* 00061000
* EXIT CONDITIONS - 00062000
* 00063000
* EXIT IS MADE VIA GOTO DMKDSPCH AFTER STARTING ANY QUEUED 00064000
* CONTASK REQUESTS FOR STATIONS AND PERFORMING OTHER 00065000
* MESSAGE PROCESSING. 00066000
* 00067000
* CALL TO OTHER ROUTINES - 00068000
* 00069000
* DMKFREE - TO ALLOCATE FREE STORAGE FOR CONTASK'S 00070000
* DMKFRET - TO RETURN ALLOCATED STORAGE 00071000
* DMKIOSQR - TO START I/O OPERATION TO BISYNC LINE 00072000
* DMKQCNET - TO RETURN CONTASK AT COMPLETION 00073000
* DMKRGAIN - TO SECONDARY INTERRUPT HANDLER 00074000
* DMKQCNET - RETURN CONTASK 00074200
* DMKRGAIN - TO SECOND LEVEL INTERRUPT HANDLER 00074400
* DMKIOSHA - HALT THE SWITCHED LINE 00074600
* 00075000
* EXTERNAL REFERENCES - 00076000
* 00077000
* DMKBOXBX - GET BUFFER ADDRESSES FOR VM LOGO 00078000
* DMKTBMZO - APL 3270 COMPOUND CHARACTER TABLE 00078100
* DMKTBMTO - TEXT 3270 COMPOUND CHARACTER TABLE 00078200
* 00079000
* TABLES / WORK AREAS - 00080000
* 00081000
* NONE 00082000
* 00083000
* NOTES - 00084000
* 00085000
* DMKRGBIC IS ENTERED VIA CPEXBLOK OR GOTO WHENEVER 00086000
* DMKQCN HAS STACKED A CONTASK ON THE LINE RDEVBLOK, 00087000
* AND THE CONTASK CHAIN WAS PREVIOUSLY EMPTY, OR IF 00088000
* THE CONTASK HAD THE 'PRIORITY' FLAG SET. 00089000
* 00090000
* REGISTER USAGE - 00091000
* 00092000
* GR14,15 LINKAGE REGISTERS 00093000
* GR12,13 MODULE BASE REGISTERS 00094000
* GR11 = VMBLOK ADDRESSABILITY 00095000
* GR10 = IOBLOK ADDRESSABILITY 00096000
* GR 9 = NICBLOK ADDRESSABILITY 00097000
* GR 8 = RDEVBLOK ADDRESSABILITY 00098000
* GR 7 = INTERNAL LINKAGE REGISTER 00099000
* GR 6 = CONTASK ADDRESSABILITY 00100000
* GR 5 = BSCBLOK ADDRESSABILITY 00101000
* GR0-4= WORK REGISTERS 00102000
* 00103000
* OPERATION - 00104000
* 00105000
* I. HANDLE CONTASKS QUEUED OFF RDEVBLOK (RDEVCON) 00106000
* 00107000
* 1. IF THE LINE IS NOT AVAILABLE, EXIT. 00108000
* 00109000
* 2. IF THERE ARE NO MORE CONTASKS TO BE PROCESSED, 00110000
* ATTEMPT TO START OUTPUT TO THE LINE VIA RGSTART. 00111000
* 00112000
* 3. IF THE RESOURCE SPECIFIED BY THE VMTRMID FIELD IN 00113000
* THE VMBLOK (FROM 'CONUSER') IS NOT AVAILABLE, SET 00114000
* RETURN CODE 12 IN THE RESPONSE SAVEAREA (IF ANY), 00115000
* AND RETURN THE CONTASK VIA CALL DMKQCNET. 00116000
* 00117000
* 4. CONTASKS ARE QUEUED OFF THE RESOURCES (NICBLOKS) THAT HAVE 00118000
* THE SAME VMBLOK ADDRESS CONTAINED IN EACH CONTASK. 00119000
* 00120000
* II. HANDLE THE CONTASKS FOR OUTPUT AND INPUT REQUEST (RGSTART) 00121000
* 00122000
* 1. ATTEMPT TO START OUTPUT TO THE BISYNC LINE. IF THE BISYNC 00123000
* LINE IS EITHER NOT READY OR ALREADY BUSY, EXIT. 00124000
* 00125000
* 2. DETERMINE IF THERE IS AN AVAILABLE STATION ON THE 00126000
* CONTROL UNIT BY SCANNING THE ENTIRE NICBLOK LIST LOOKING 00127000
* FOR THE FOLLOWING CONDITIONS: 00128000
* 00129000
* A. THE RESOURCE HAS AT LEAST ONE CONTASK QUEUED OFF THE 00130000
* NICBLOK AND THE STATION IS NOT IN CONTROL MODE. 00131000
* 00132000
* B. IF NO STATIONS ARE AVAILABLE ON THE CONTROL UNIT, 00133000
* THE CCWS ARE SET UP TO DO A GENERAL POLL OPERATION 00134000
* TO THE REMOTE CONTROL UNIT TO READ DATA FROM A 00135000
* STATION VIA A CALL TO DMKIOSQR. 00136000
* 00137000
* 3. THE SYNCHRONIZATION CONTASK IS RETURNED TO THE SYSTEM AND 00138000
* THE NEXT CONTASK (IF ANY) IS PROCESSED FOR THIS STATION. 00139000
* 00140000
* 4. THE DIAGNOSE CONSOLE OUTPUT CONTASK IS PROCESSED IN THE 00141000
* FOLLOWING WAY: 00142000
* 00143000
* A. GET LINE COORDINATE FROM THE CONTASK, SET DIAGNOSE 00144000
* WRITE FLAG IN NICBLOK (NICDIAG), AND STORE THE LINE 00145000
* COORDINATE IN THE NICBLOK (NICCORD). 00146000
* 00147000
* B. BUILD THE CONTROL CONTASK TO WRITE DATA TO THE REMOTE 00148000
* DISPLAY STATION AND GO TO STEP 8. 00149000
* 00150000
* 5. WHEN THE CONTASK IS JUST AN OUTPUT CONTASK AND THE DISPLAY 00151000
* SCREEN IS FULL, RESET TIMER REQUEST (IF PRESENT), BUILD 00152000
* A CONTROL CONTASK TO WRITE THE STATUS MESSAGE (MORE), 00153000
* AND GO TO STEP 8. 00154000
* 00155000
* 6. AN OUTPUT CONTASK AND THE DISPLAY SCREEN IS NOT FULL, 00156000
* SETUP CCWS TO WRITE DATA TO THE DISPLAY STATION AND 00157000
* GO TO STEP 8. 00158000
* 00159000
* 7. ON AN INPUT CONTASK, BUILD THE CCWS TO WRITE THE STATUS 00160000
* (READ) TO THE DISPLAY SCREEN, SET THE STATION IN 00161000
* CONTROL MODE, AND GO TO STEP 8. 00162000
* 00163000
* 8. GET STORAGE NECCESARY TO BUILD AN IOBLOK. THE IOBLOK IS 00164000
* USED TO PERFORM THE PROCESSING OF ALL I/O REQUESTS TO 00165000
* THE STATION AND BISYNC LINE. THE FOLLOWING FUNCTIONS ARE 00166000
* HANDLED: 00167000
* 00168000
* A. SELECTION OF STATIONS 00169000
* B. GENERAL POLLING OF 3270 CONTROL UNIT 00170000
* C. SPECIFIC POLLING OF STATIONS 00171000
* D. WRITING OF DATA TO THE STATIONS 00172000
* 00173000
* 9. DATA CHAINING OF WRITE OPERATIONS ONLY TAKES PLACE IF 00174000
* THE FOLLOWING CONDITIONS DO NOT EXIST: 00175000
* 00176000
* A. A CONTROL TASK 00177000
* B. A DIAGNOSE CONSOLE WRITE REQUEST 00178000
* C. ONLY ONE CONTASK IS QUEUED OFF THE RESOURCE (NICBLOK) 00179000
* D. THE CONTASK REPRESENTS A HIGH PRIORITY MESSAGE 00180000
* E. NON-OUTPUT CONTASKS 00181000
* 00182000
* 10. SET UP CCWS TO WRITE THE STATUS WORD RUNNING (IF NEEDED) 00183000
* AND THE READ CCW TO READ REPLY FROM REMOTE STATION. 00184000
* 00185000
* 11. SET UP IOBLOK BEFORE CALLING DMKIOSQR TO WRITE THE DATA 00186000
* ACROSS BISYNC LINE. 00187000
* 00188000
* NOTES: 00188100
* 00188200
* 3275 SWITCHED OPERATION 00188300
* . INSTEAD OF DOING A POLLING OPERATION AS ON A LEASED LINE 00188400
* THE SUPPORT MUST ALWAYS HAVE A READ UP ON THE SWITCHED LINE. 00188500
* 00188600
* . INSTEAD OF DOING A SELECTION OPERATION AS ON A LEASED LINE 00188700
* THE SUPPORT MUST BID FOR THE LINE BY SENDING AN ENQ 00188800
* CHARACTER TO THE STATION. 00188900
*************************************************************** 00189000
EJECT 00190000
USING DMKRGBIC,R12 @V305731 00191000
DMKRGBIC DS 0D @V305731 00192000
LM R12,R13,RGBBASE SETUP MODULE ADDRESSABILITY @V305731 00193000
USING DMKRGB,R12,R13 @V305731 00194000
SPACE 00195000
SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00195100
TM RDEVSTAT,RDEVDISA+RDEVDED+RDEVNRDY IS LINE AVAIL@V305731 00196000
BNZ GODSPCH NO, GO BACK TO DISPATCHER @V305731 00197000
L R5,RDEVBSC GET ADDRESS OF BSCBLOK @V305731 00198000
SLR R10,R10 CLEAR IOBLOK REGISTER @V305731 00199000
NEXTASK EQU * @V305731 00200000
LA R7,GODSPCH RETURN ADDRESS WHEN DEVICE START @V305731 00201000
L R6,RDEVCON PICK UP POINTER TO CONTASK @V305731 00202000
LTR R6,R6 IS THERE A CONTASK PTR. ? @V305731 00203000
BZ RGSTART TRY TO DO A START I/O TO THE LINE@V305731 00204000
L R1,CONUSER LOAD ADDR OF NEW VMBLOK @V407511 00204100
CR R1,R11 SAME USER @VA07454 00204200
BE NONEED YES, NO NEED TO SWITCH @VA07454 00204300
SWTCHVM OPT=STAY SWITCH VMBLOK LOCKING & CHARGING @V407511 00204600
B NEXTASK MAKE SURE ENVIRON HASN'T CHANGED @VA07454 00204700
NONEED DS 0H @VA07454 00204800
L R1,CONPNT REMOVE FIRST CONTASK FROM CHAIN @V305731 00205000
ST R1,RDEVCON SAVE NEXT CONTASK POINTER @V305731 00206000
LA R7,NEXTASK RETURN ADDR. IF RESOURCE INVALID @V305731 00210000
LH R9,VMTRMID GET RESOURCE ID OF USER @V305731 00211000
N R9,F4095 CLEAR THE LINE CODE PORTION @V305731 00212000
CH R9,RDEVMAX VALIDATE THE RESOURCE ID @V305731 00213000
BH LINEFAL INVALID RESOURCE FOR THIS USER @V305731 00214000
MH R9,=AL2(NICSIZE*8) COMPUTE NICBLOK LIST INDEX @V305731 00215000
AL R9,RDEVNICL INDEX TO THE ACTUAL NICBLOK @V305731 00216000
TM NICSTAT,NICDISA IS RESOURCE AVAILABLE ? @V305731 00217000
BNZ LINEFAL NO, RETURN CONTASK @V305731 00218000
BAL R7,QUEUE QUEUE CONTASK OFF NICBLOK @V305731 00219000
BAL R7,NEXTASK GET NEXT CONTASK FROM RDEVBLOK @V305731 00220000
SPACE 00221000
LINEFAL EQU * @V305731 00222000
LA R2,12(0) SET RETURN CODE FOR USER @V305731 00223000
BAL R3,SETRETN SET RETURN CODE (IF POSSIBLE) @V305731 00224000
L R0,CONPNT GET THE NEXT CONTASK IF ANY @V305731 00225000
ST R0,RDEVCON SET NEXT CONTASK FOR PROCESSING @V305731 00226000
SR R0,R0 CLEAR @V305731 00227000
ST R0,CONPNT CLEAR CONTASK POINTER @V305731 00228000
CALL DMKQCNET RETURN CONTASK @V305731 00229000
BR R7 RETURN @V305731 00230000
SPACE 1 00231000
RGIGNORE EQU * RELEASE IOBLOK & IOERBLOK @V305731 00232000
BAL R7,FRETIOB GO RELEASE STORAGE FOR IOBLOK @V305731 00233000
GODSPCH EQU * EXIT TO THE DISPATCHER @V305731 00234000
GOTO DMKDSPCH @V305731 00235000
SPACE 3 00236000
QUEUE EQU * @V305731 00237000
LA R1,NICQPNT-(CONPNT-CONTASK) INITIAL BACK PTR @V305731 00238000
QUEUECHN EQU * @V305731 00239000
LR R2,R1 SAVE THE BACK POINTER @V305731 00240000
L R1,CONPNT-CONTASK(,R2) GET NEXT CONTASK, IF ANY @V305731 00241000
LTR R1,R1 IS THIS THE END OF THE CHAIN @V305731 00242000
BP QUEUECHN NO, CAN NOT INSERT HERE @V305731 00243000
ST R6,CONPNT-CONTASK(,R2) PUT CONTASK IN CHAIN @V305731 00244000
ST R1,CONPNT SAVE POINTER TO NEXT CONTASK @V305731 00245000
BR R7 RETURN @V305731 00246000
SPACE 2 00247000
SETRETN EQU * @V305731 00248000
TM CONSTAT,CONRESP RESPONSE EXPECTED ? @V305731 00249000
BZR R3 NO, RETURN @V305731 00250000
L R1,CONRETN GET RETURN SAVEAREA ADDRESS @V305731 00251000
ST R2,SAVER2-SAVEAREA(R1) SET RETURN CODE @V305731 00252000
BR R3 RETURN @V305731 00253000
EJECT 00254000
************************************************************* 00255000
* 00256000
* SUBROUTINE NAME - 00257000
* 00258000
* DMKRGBEN 00259000
* 00260000
* FUNCTION - 00261000
* 00262000
* TO EXECUTE ENABLE OR DISABLE OF BISYNC LINES AND 3270 00263000
* REMOTE STATIONS. 00264000
* 00265000
* ATTRIBUTES - 00266000
* 00267000
* SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00268000
* 00269000
* ENTRY CONDITIONS - 00270000
* 00271000
* GR13 = ADDRESS OF A STANDARD SAVEAREA 00272000
* GR12 = ADDRESS OF DMKRGBEN 00273000
* GR11 = ADDRESS OF USER VMBLOK 00274000
* GR 9 = ADDRESS OF THE NICBLOK ON SVC ENTRY 00275000
* GR 8 = ADDRESS OF THE LINE RDEVBLOK 00276000
* GR 2 = PARAMETER FIELD 00277000
* GR 0 = INDICATE BISYNC LINE OR REMOTE STATION 00278000
* 00279000
* EXIT CONDITIONS - 00280000
* 00281000
* EXIT IS MADE VIA A GOTO DMKDSPCH 00282000
* CC = 0 -> REQUEST WAS SUCCESSFUL 00283000
* CC = 2 -> EITHER THE SPECIFIED RESOURCE WAS INVALID, 00284000
* THE LINE WAS NOT AVAILABLE, THE RESOURCE WAS 00285000
* NOT AVAILABLE, OR A LINE FAILURE OCCURRED. 00286000
* 00287000
* CALLS TO OTHER ROUTINES - 00288000
* 00289000
* DMKSTKCP - TO STACK A CPEXBLOK FOR A LATER EXIT. 00290000
* DMKFREE - TO ALLOCATE STORAGE FOR THE CONTASK. 00291000
* DMKRGBIC - TO INITIATE I/O TO THE LINE. 00292000
* 00293000
* EXTERNAL REFERENCES - 00294000
* 00295000
* DMKBOXBX - GET BUFFER ADDRESSES FOR VM LOGO 00296000
* 00297000
* TABLES / WORK AREAS - 00298000
* 00299000
* NONE 00300000
* 00301000
* NOTES - 00302000
* 00303000
* NONE 00304000
* 00305000
* REGISTER USAGE - 00306000
* 00307000
* GR14,15 LINKAGE REGISTERS 00308000
* GR13 = SAVEAREA ADDRESSABILITY 00309000
* GR12 = DMKRGB BASE REGISTER 00310000
* GR11 = VMBLOK ADDRESSABILITY 00311000
* GR10 = IOBLOK ADDRESSABILITY (NOT USED) 00312000
* GR 9 = NICBLOK ADDRESSABILITY (SVC ONLY) 00313000
* GR 8 = RDEVBLOK ADDRESSABILITY 00314000
* GR 7 = INTERNAL LINKAGE REGISTER 00315000
* GR 6 = CONTASK ADDRESSABILITY 00316000
* GR 5 = BSCBLOK ADDRESSABILITY 00317000
* GR0-4= WORK REGISTERS 00318000
* 00319000
* OPERATION - 00320000
* 00321000
* 1. IF THE BISYNC LINE IS NOT AVAILABLE, SET RETURN REGISTER 00322000
* TO 12, CONDITION CODE TO 2 AND RETURN TO CALLER. 00323000
* 00324000
* 2. IF THE REQUEST IS FOR ENABLING OR DISABLING THE BISYNC 00325000
* LINE (REGISTER 0 = X'FF' IN LOW ORDER BYTE), THE FOLLOWING 00326000
* FUNCTIONS ARE PERFORMED: 00327000
* 00328000
* A. GET A CONTROL CONTASK, BUILD THE CCWS FOR ENABLE OR 00329000
* DISABLE FUNCTION AND QUEUE IT OFF THE CONTROL UNIT 00330000
* NICBLOK. 00331000
* 00332000
* B. FOR ENABLE FUNCTION, GET STORAGE FOR THE BINARY 00333000
* SYNCHRONOUS COMMUNICATION CONTROL BLOCK, SAVE 00334000
* POINTER TO CONTROL BLOCK IN RDEVBLOK (RDEVBSC) AND 00335000
* GO TO STEP 4. 00336000
* 00337000
* C. FOR DISABLING THE BISYNC LINE, SET UP THE DISABLE CCW 00338100
* AND GO TO STEP 4. IF THIS IS A SWITCHED LINE AND 00338600
* THERE IS AN ACTIVE I/O OPERATION ON THE LINE, CALL 00339100
* DMKIOSHA TO TERMINATE THE I/O OPERATION AND RETURN TO 00339600
* CALLER. 00340100
* 3. FOR ENABLING OR DISABLING THE REMOTE STATIONS 00341000
* (REGISTER 0 = X'00' IN LOW ORDER BYTE), THE FOLLOWING 00342000
* FUNTIONS WILL BE PERFORMED. 00343000
* 00344000
* A. FOR ENABLING THE REMOTE STATION, SET UP THE VM LOGO 00345000
* FOR THE DISPLAY STATION, FORMAT THE REMOTE STATION 00346000
* DISPLAY SCREEN, SET THE RETURN INDEX (X'30') AFTER 00347000
* FORMATTING THE SCREEN TO BUILD A VMBLOK FOR THE VIRTUAL 00348000
* MACHINE USER AND GO TO STEP 4. 00349000
* IF THE STATION IS CONNECTED TO A SWITCHED LINE, ALONG 00349100
* WITH THE ABOVE FUNCTIONS, SET THE INITIAL BIDDING 00349200
* SEQUENCE FLAG. 00349300
* 00350000
* B. FOR DISABLING THE REMOTE STATION, SET UP CCWS TO 00351000
* CLEAR THE REMOTE DISPLAY SCREEN, SET RETURN INDEX 00352000
* (X'1C') AFTER CLEARING THE SCREEN, LOGOFF USER AND 00353000
* GO TO STEP 4. 00354000
* IF THE STATION IS CONNECTED TO A SWITCHED LINE, SET 00354100
* THE RETURN CODE TO ZERO, HALT THE SWITCHED LINE 00354200
* (IF NECESSARY), AND RETURN TO CALLER. 00354300
* 00355000
* 4. IF THE BISYNC LINE IS ALREADY ACTIVE, THEN RETURN 00356000
* TO CALLER. IF THE BISYNC LINE IS NOT ACTIVE, 00357000
* BUILD AND STACK A CPEXBLOK TO RETURN TO CALLER AS SOON 00358000
* AS POSSIBLE, AND THEN GOTO DMKRGBIC TO START UP THE 00359000
* BISYNC LINE. 00360000
* 00361000
************************************************************** 00362000
EJECT 00363000
USING SAVEAREA,R13 @V305731 00364000
USING DMKRGBEN,R12 @V305731 00365000
DMKRGBEN DS 0D SCHEDULE ENABLE-DISABLE TASK @V305731 00366000
ENTER , @V305731 00367000
L R12,RGBBASE GET THE BASE ADDRESS @V305731 00368000
USING DMKRGB,R12 @V305731 00369000
USING RDEVBLOK,R8 @V305731 00370000
SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00370100
LA R2,12(0) SET THE INVALID RETURN CODE @V305731 00371000
TM RDEVSTAT,RDEVDISA+RDEVDED+RDEVNRDY IS LINE AVAIL@V305731 00372000
BNZ RGFEXIT NO, GO SET CC= 2 @V305731 00373000
OI RDEVSTAT,RDEVRSVD LINE IN USE BY THE SYSTEM @V305731 00374000
L R5,RDEVBSC GET PTR TO BSCBLOK (IF POSSIBLE) @V305731 00375000
SLR R10,R10 CLEAR IOBLOK POINTER @V305731 00376000
LTR R0,R0 IS THIS A LINE REQUEST @V305731 00377000
BNZ LINESUP YES, GO TO LINE SECTION @V305731 00378000
TM NICFLAG,NICDISB DID OPERATOR 'DISABLE' RESOURCE @V305731 00379000
BZ ENTFMT NO, TEST FOR SCREEN FORMATTED @V305731 00380000
BAL R3,GRFCLRT CLEAR SCREEN FOR DISABLE @V305731 00381000
MVI CONLABEL,RTNLOGOF INDICATOR FOR LOGOFF @V305731 00382000
BAL R7,RGFTASK GO SETUP FOR START I/O TO LINE @V305731 00383000
SPACE 00384000
ENTFMT EQU * @V305731 00385000
TM NICFLAG,NICFMT IS SCREEN FORMATTED ? @V305731 00386000
BZ FMTENA NO, GO FORMAT SCREEN @V305731 00387000
BAL R3,GRFCLRT CLEAR VM LOGO FROM SCREEN @V305731 00388000
MVI CONLABEL,RTNBLDVM INDICATOR FOR VMBLOK BUILD @V305731 00389000
BAL R7,RGFTASK GO SETUP FOR START I/O TO LINE @V305731 00390000
FMTENA EQU * @V305731 00391000
BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00392000
BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00393000
TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 00394100
BNO RGFTASK NO, START I/O OPERATION @V346931 00394200
OI BSCFLAG1,BSCINBID INITIAL BID NEEDED @V346931 00394300
XC BSCRESP(RESPLEN),BSCRESP CLEAR RESPONSE BUFFER @V346931 00394400
BAL R7,RGFTASK GO START I/O ON LINE @V346931 00394500
SPACE 1 @V346931 00394600
SPACE 1 00395000
LINESUP EQU * @V305731 00396000
L R9,RDEVNICL GET THE FIRST NICBLOK POINTER @V305731 00397000
BAL R7,CTLTASKB GET A CONTROL CONTASK @V305731 00398000
TM RDEVFLAG,RDEVDISB DID OPERATOR 'DISABLE' LINE @V305731 00399000
BO LINEDIS YES, GO ATTEMPT TO DISABLE LINE @V305731 00400000
BAL R3,BULDBSC GET STORAGE FOR THE BSCBLOK @V305731 00401000
MVC CONCCW1(3*8),DISABLE GET CCWS TO ENABLE LINE @V305731 00402000
MVI CONCCW1+4,SILI+CC INDICATE COMMAND CHAINING @V305731 00403000
BAL R7,RGFTASK GO START I/O OPERATION TO LINE @V305731 00404000
SPACE 00405000
LINEDIS EQU * @V305731 00406000
OI BSCFLAG1,BSCSHUT SYNCRONIZE SHUTDOWN @VA11623 00406050
TM RDEVSTAT,RDEVWAII IS DEVICE BUSY? @V346931 00406100
BZ LINEDIS2 NO, DON'T DO HALT DEVICE @V346931 00406200
ICM R10,B'1111',RDEVAIOB GET ACTIVE IOB IF ANY @V346931 00406300
BZ LINEDIS2 NO ACTIVE IOB, DON'T HALT LINE @V346931 00406400
OI BSCFLAG1,BSCHALT INDICATE HALT I/O DONE @V346931 00406500
CALL DMKIOSHA GO DO HALT DEVICE OPERATION @V346931 00406600
SR R2,R2 SET CC = 0 @V346931 00406700
BAL R7,RGFEXIT GO SET CC = 0 AND EXIT @V346931 00406800
LINEDIS2 EQU * BYPASS HALT I/O @V346931 00406900
MVC CONCCW1(8),DISABLE SETUP CCW TO DISABLE LINE @V305731 00407000
MVI CONPARM,RDEVDISB INDICATE DISABLE FOR HANDLER @V305731 00408000
RGFTASK EQU * @V305731 00409000
SR R2,R2 SET RETURN CODE TO ZERO @V305731 00410000
OI NICFLAG,NICPROCN PROCESS THIS NICBLOK NOW @V305731 00411000
TM RDEVSTAT,RDEVWAII IS THE LINE BUSY @V305731 00412000
BNZ RGFEXIT YES, EXIT @V305731 00413000
LA R4,RGFEXIT1 GET THE EXECUTION ADDRESS @VA11623 00414100
BAL R7,STKCPEX STACK A CPEXBLOK TO DO THE EXIT @V305731 00415000
GOTO DMKRGBIC GO START I/O OPERATION TO LINE @V305731 00416000
SPACE 1 00417000
RGFEXIT1 DS 0H @VA11623 00418100
TM BSCFLAG1,BSCSHUT SHUTDOWN FINISHED? @VA11623 00418200
BNO RGFEXIT YES, TELL DMKNES @VA11623 00418300
LA R4,RGFEXIT1 GET RETURN ADDRESS @VA11623 00418400
BAL R7,STKCPEX WAIT FOR SHUTDOWN TO FINISH @VA11623 00418500
B GODSPCH ... @VA11623 00418600
RGFEXIT DS 0H @VA11623 00418700
ST R2,SAVER2 SAVE RETURN CODE @V305731 00419000
LTR R2,R2 SET CONDITION CODE 2 @V305731 00420000
EXIT , @V305731 00421000
DROP R13 DROP R13 AS SAVEAREA BASE @V305731 00422000
EJECT 00423000
****************************************************************** 00424000
* THE FOLLOWING SUBROUTINES MUST NOT ADDRESS ANY FIELDS IN 00425000
* THE SECOND 4096 BYTES OF DMKRGB. THESE ARE USED BY 'DMKRGBEN' 00426000
* WHICH HAS LIMITED ADDRESSABILITY RANGE DUE TO THE SAVEAREA 00427000
* REGISTER (GR13). 00428000
* SUBROUTINES 00429000
* CTLTASKB : INITIAL 00430000
* STKCPEX : GRFCLRT 00431000
* DATAMOVE : BULDBSC 00432000
* SETUPCCW : RGFFMT 00433000
* 00434000
* THE SUBROUTINES ABOVE ARE IN BOTH DMKRGB AND DMKRGA. 00435000
* ANY CHANGES MADE TO THESE SUBROUTINES SHOULD ALSO BE MADE 00436000
* TO THE DUPLICATE IN DMKRGA. 00437000
**************************************************************** 00438000
SPACE 2 00439000
CTLTASKB EQU * SET UP BASIC SIZE FOR CONTASK @V305731 00440000
LA R0,CONTSIZE SIZE OF BASIC CONTASK @V305731 00441000
B CTLTASK1 GET STORAGE FOR CONTASK @V305731 00442000
CTLTASK EQU * ALLOCATE AND QUEUE CONTROL TASK @V305731 00443000
LA R0,CONTSIZE+6 ...SIZE OF CONTASK @VA08129 00444100
CTLTASK1 EQU * @V305731 00445000
CALL DMKFREE GET STORAGE FOR CONTASK @V305731 00446000
XC 0(CONTSIZE*8,R1),0(R1) CLEAR THE HEADER @V305731 00447000
LR R6,R1 PUT CONTASK ADDRESS IN REGISTER 6@V305731 00448000
STH R0,CONTSKSZ SAVE THE CONTASK SIZE @V305731 00449000
L R1,NICUSER VMBLOK OF RESOURCE OWNER @V305731 00450000
ST R1,CONUSER SAVE VMBLOK PTR IN CONTASK @V305731 00451000
MVI CONSTAT,CONCNTL INDICATE CONTROL TASK @V305731 00452000
L R1,NICQPNT GET CURRENT CONTASK FROM CHAIN @V305731 00453000
ST R6,NICQPNT PUT THIS TASK FIRST ON CHAIN @V305731 00454000
ST R1,CONPNT PUT CURRENT TASK ON CHAIN @V305731 00455000
BR R7 RETURN @V305731 00456000
SPACE 2 00457000
STKCPEX EQU * @V305731 00458000
LA R0,CPEXSIZE GET SIZE OF CPEXBLOK @V305731 00459000
CALL DMKFREE GET STORAGE FOR CPEXBLOK @V305731 00460000
USING CPEXBLOK,R1 ADDRESSABILITY FOR CPEXBLOK @V305731 00461000
XC CPEXBLOK(16),CPEXBLOK CLEAR THE HEADER @V305731 00462000
LR R15,R4 GET THE EXECUTION ADDRESS @V305731 00463000
STM R15,R14,CPEXADD SAVE ALL REGISTERS @V305731 00464000
CALL DMKSTKCP STACK BLOCK FOR LATER PROCESSING @V305731 00465000
DROP R1 DROP BASE REGISTER FOR CPEXBLOK @V305731 00466000
BR R7 RETURN @V305731 00467000
SPACE 2 00468000
DATAMOVE EQU * MOVE DATA INTO CONTASK @V305731 00469000
LA R14,CONCCW4+4 GET BEGINNING ADDRESS @V305731 00470000
AR R14,R1 UPDATE TO END OF DATA @V305731 00471000
MVI 0(R14),ETX PUT ENDING BISYNC CHAR IN BUFFER @V305731 00472000
DATMOVE EQU * MOVE DATA INTO CONTASK @V305731 00473000
MVC CONCCW4+1(3),SYNCP MOVE BISYNC HEADER INTO DATA @V305731 00474000
BCTR R1,R0 SUBTRACT - EX INSTRUCTION @V305731 00475000
EX R1,DATA MOVE DATA INTO BUFFER AREA @V305731 00476000
BR R7 RETURN @V305731 00477000
SPACE 2 00478000
BULDBSC EQU * @V305731 00479000
L R5,RDEVBSC GET POINTER TO BSCBLOK @V305731 00480000
LTR R5,R5 IS BSCBLOK POINTER ZERO ? @V305731 00481000
BNZR R3 NO, RETURN @V305731 00482000
LA R0,BSCSIZE GET THE SIZE OF THE BSCBLOK @V305731 00483000
CALL DMKFREE GET STORAGE FOR BSCBLOK @V305731 00484000
ST R1,RDEVBSC SAVE BSCBLOK PTR IN RDEVBLOK @V305731 00485000
LR R5,R1 GET BSCBLOK POINTER @V305731 00486000
XC BSCBLOK(BSCSIZE2),BSCBLOK CLEAR HEADER FIELD @V305731 00487000
BR R3 RETURN @V305731 00488000
SPACE 2 00489000
INITIAL EQU * @V305731 00490000
MVI NICCORD,X'01' SET THE Y COORDINATE TO LINE 1 @V305731 00491000
L R1,LOGO GET VM LOGO POINTER @V305731 00492000
LTR R1,R1 IS THERE A POINTER FOR VM LOGO @V305731 00493000
BNZR R3 YES, GO SET UP CCW FOR FORMAT @V305731 00494000
LA R0,99 GET THE SIZE OF THE LOGO @V305731 00495000
CALL DMKFREE GET STORAGE FOR THE LOGO @V305731 00496000
ST R1,LOGO SAVE VM LOGO POINTER @V305731 00497000
STCM R1,7,FMTLOGO+1 SET UP CCW WITH LOGO ADDRESS @V305731 00498000
LR R7,R1 GET VM LOGO POINTER @V305731 00499000
L R1,=A(DMKBOXBX) GET VM LOGO ADDRESS @V305731 00500000
TRANS 2,1,OPT=(BRING,DEFER,SYSTEM),AFFINITY @VA07391 00501100
LA R1,FMTBUF BUFFER ADDRESS TABLE @V305731 00502000
LA R0,16 LOOP COUNT @V305731 00503000
NXTFMT EQU * @V305731 00504000
MVI 0(R7),SBA SET SBA ORDER @V305731 00505000
MVC 1(2,R7),0(R1) MOVE BUFFER ADDRESS @V305731 00506000
MVC 3(46,R7),0(R2) MOVE LOGO LINE TO BUFFER @V305731 00507000
LA R1,2(R1) NEXT BUFFER ADDRESS @V305731 00508000
LA R2,46(R2) NEXT LOGO LINE ADDRESS @V305731 00509000
LA R7,49(R7) NEXT DATA ADDRESS @V305731 00510000
BCT R0,NXTFMT LOOP FOR 16 LINES @V305731 00511000
MVI 0(R7),ETX PUT BSC ENDING CHAR IN BUFFER @V305731 00512000
BR R3 RETURN @V305731 00513000
SPACE 2 00514000
RGFFMT EQU * @V305731 00515000
LA R0,CONTSIZE+7 GET SIZE OF CONTASK @V305731 00516000
BAL R7,CTLTASK1 GET STORAGE FOR CONTROL CONTASK @V305731 00517000
MVI NICSTAT,NICRUNN+NICNTRL SET STATUS IN NICBLOK @V305731 00518000
MVI CONLABEL,RTNFMTDN INDICATOR FOR FORMAT DONE @V305731 00519000
MVC CONCCW1(8*2),FMT77CCW MOVE FORMAT CCWS @V305731 00520000
LA R1,CONCCW4+1 GET BEGINNING ADDRESS OF DATA @V305731 00521000
STCM R1,7,CONCCW1+1 SAVE BEGINNING ADDRESS @V305731 00522000
MVC CONCCW3(8),READCCW1 MOVE IN READ RESPONSE CCW @V305731 00523000
LA R1,BSCRESP GET THE RESPONSE BUFFER ADDRESS @V305731 00524000
STCM R1,7,CONCCW3+1 SAVE ADDRESS OF RESPONSE BUFFER @V305731 00525000
LA R1,FMT77L GET THE LENGTH OF FORMAT DATA @V305731 00526000
LA R2,FMT3277 GET ADDRESS OF FORMAT DATA @V305731 00527000
BAL R7,DATMOVE MOVE DATA INTO BUFFER AREA @V305731 00528000
MVI CONCCW4+3,EWRTCMD SET ERASE/WRITE GRAPHIC CMD @V305731 00529000
BR R3 RETURN @V305731 00530000
SPACE 2 00531000
GRFCLRT EQU * @V305731 00532000
BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 00533000
NI NICFLAG,X'FF'-(NICDIAG+NICALRM) CLEAR FLAGS @V305731 00534000
MVI NICCORD,X'00' SET COORDINATE Y TO ZERO @V305731 00535000
MVI NICSTAT,NICRUNN+NICNTRL SET STATUS IN NICBLOK @V305731 00536000
LA R1,WRT77CCW SET UP CCWS FOR CLEAR FUNCTION @V305731 00537000
BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 00538000
MVI CONCCW1+7,CLR77L+4 SET CCW COUNT FOR CLEAR FUNC.@V305731 00539000
LA R1,CLR77L GET THE LENGTH OF CLEAR DATA @V305731 00540000
LA R2,CLR3277 GET ADDRESS OF CLEAR DATA @V305731 00541000
BAL R7,DATAMOVE MOVE DATA INTO BUFFER AREA @V305731 00542000
BR R3 RETURN @V305731 00543000
SPACE 2 00544000
SETUPCCW EQU * SET UP CCWS FOR BISYNC RESPONSE @V305731 00545000
MVC CONCCW1(8),0(R1) MOVE CCW INTO CONTASK @V305731 00546000
MVI CONCCW1+4,SILI+CC MAKE SURE CMD CHAIN FLAG IS ON@V305731 00547000
LA R1,CONCCW4+1 GET BEGINNING ADDRESS OF DATA @V305731 00548000
STCM R1,7,CONCCW1+1 SAVE BEGINNING ADDRESS @V305731 00549000
MVC CONCCW2(8),READCCW1 GET READ RESPONSE CCW @V305731 00550000
LA R1,BSCRESP GET RESPONSE BUFFER @V305731 00551000
STCM R1,7,CONCCW2+1 SAVE RESPONSE BUFFER ADDRESS @V305731 00552000
BR R7 RETURN @V305731 00553000
SPACE 2 00554000
DS 0D @V305731 00555000
DISABLE DC X'2F',AL3(0),AL1(SILI,X'01'),AL2(1) DISABLE CCW @V305731 00556000
ENABLE1 DC X'23',AL3(SETMODE),AL1(SILI+CC,X'01'),AL2(1) @V305731 00557000
DC X'27',AL3(0),AL1(SILI,X'01'),AL2(1) @V305731 00558000
SPACE 2 00558100
* THESE CCWS ARE USER FOR INITIAL DIAL CONNECTION OPERATION @V346931 00558200
INITBID DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V346931 00558300
DC X'01',AL3(RGFENQ),AL1(SILI+CC,X'03'),AL2(1) @V346931 00558400
DC X'02',AL3(0),AL1(SILI,X'05'),AL2(RESPLEN) @V346931 00558500
RESPLEN EQU 6 LENGTH OF READ FOR SELECTION @V346931 00558600
THREECCW EQU (8*3) LENGTH OF THREE CHAINED CCWS @V346931 00558700
SPACE 1 00558800
READCCW1 DC X'02',AL3(0),AL1(SILI,X'0B'),AL2(2) @V305731 00559000
WRT77CCW DC X'01',AL3(0),AL1(SILI+CC,X'10'),AL2(0) @VA13944 00560000
FMT77CCW DC X'01',AL3(0),AL1(SILI+CD,X'10'),AL2(FMT77L+3) @VA13944 00560500
FMTLOGO DC X'01',AL3(0),AL1(SILI+CC,X'10'),AL2(785) @VA13944 00561000
FMT3277 DC AL1(WCC56,SBA,X'40',X'40') @V305731 00564000
FMTON DC CL20'VM/370 ONLINE' @V305731 00565000
DC AL1(SBA,X'5B',X'5F',SF,ATTR7,IC) @V305731 00566000
DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 00567000
DC CL20'RUNNING' @V305731 00568000
FMT77L EQU *-FMT3277 @V305731 00569000
SPACE 00570000
FMTBUF DC X'C5D1C661C7F1C9C1' @V305731 00571000
DC X'4AD14B614CF14EC1' @V305731 00572000
DC X'4FD15061D1F1D3C1' @V305731 00573000
DC X'D4D1D561D6F1D8C1' @V305731 00574000
SPACE 00575000
CLR3277 DC AL1(WCC6,SBA,X'40',X'40') @V305731 00576000
DC AL1(RA,X'C7',X'5F',X'00') @VA08129 00577100
DC AL1(RA,X'4E',X'7F',X'00') @VA08129 00577200
DC AL1(RA,X'D6',X'5F',X'00') @VA08129 00577300
DC AL1(RA,X'5B',X'5F',X'00') @VA08129 00577400
DC AL1(SF,ATTR7,IC) @V305731 00578000
DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 00579000
DC CL20'RUNNING' @V305731 00580000
CLR77L EQU *-CLR3277 @V305731 00581000
SPACE 00582000
LOGO DC A(0) ADDRESS OF VM LOGO @V305731 00583000
SETMODE DC X'00' MODE SET FOR 270X TCU @V346931 00584100
RGFINDEQ DC AL1(ENQ,X'05',EOT) ENQ, INDEX & EOT - POLL ENTRY@VA03474 00585100
SYNCP DC AL1(STX,ESC,WRTCMD) BISYNC HEADER @V305731 00586000
DATA MVC CONCCW4+4(*-*),0(R2) MOVE DATA INTO CONTASK @V305731 00587000
EJECT 00588000
LTORG @V305731 00589000
EJECT 00590000
***************************************************************** 00591000
* NEW ENTRY LABEL USE BY DMKRGA TO RESTART THE I/O 00592000
* OPERATION TO A BISYNC LINE. THIS ENTRY POINT WAS CREATED 00593000
* WHEN DMKRGB WAS SPLIT INTO TWO MODULES. 00594000
****************************************************************** 00595000
SPACE 2 00596000
USING DMKRGB,R12 ADDRESSABILITY FOR SCAN SECTION @V305731 00597000
DMKRGBSN DS 0D @V305731 00598000
LR R12,R7 GET BASE ADDRESS FOR DMKRGB @V305731 00599000
LM R12,R13,RGBBASE GET BASE ADDRESSES @V305731 00600000
USING DMKRGB,R12,R13 SET UP ADDRESSABILITY @V305731 00601000
SPACE 1 00602000
SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00602100
RGSTART EQU * @V305731 00603000
TM RDEVSTAT,RDEVNRDY+RDEVWAII IS BISYNC LINE AVAIL @V305731 00604000
BNZ GODSPCH NO, GO TO DISPATCHER @V305731 00605000
BAL R7,FRETIOB RELEASE THE IOBLOK & IOERBLOK @V305731 00606000
BAL R3,BULDBSC GET POINTER TO BSCBLOK @VA07175 00607500
L R9,RDEVNICL GET BEGINNING OF NICBLOK LIST @V305731 00608000
LA R2,NICSIZE*8 GET SIZE OF NICBLOK @V305731 00609000
LH R3,RDEVMAX GET HIGHEST RESOURCE ID. @V305731 00610000
MH R3,=AL2(NICSIZE*8) GET THE HIGHEST INDEX VALUE @V305731 00611000
ALR R3,R9 GET THE ENDING ADDRESS @V305731 00612000
TM NICFLAG,NICPROCN IS PROCESS NOW ACTIVE @V305731 00613000
BNZ RNICLST YES, SCAN FOR ACTIVE TASK @V305731 00614000
CL R3,BSCRROBN LAST = CURRENT ? @V305731 00615000
BE RNICLST YES....START WITH FIRST... @V305731 00616000
ICM R9,15,BSCRROBN GET LAST ACTIVE USER @V305731 00617000
BNZ RNEXLST AND SKIP OVER... @V305731 00618000
L R9,RDEVNICL RESTORE NICBLOK START @V305731 00619000
RNICLST EQU * GET ACTIVE CONTASK @V305731 00620000
L R6,NICQPNT POINTER TO CONTASK @V305731 00621000
LTR R6,R6 IS THE POINTER ZERO @V305731 00622000
BNP RNEXLST YES, GET NEXT RESOURCE @V305731 00623000
TM NICFLAG,NICPROCN IS PROCESS FLAG ON ? @V305731 00624000
BO RGFCHAN YES, GO PROCESS CONTASK @V305731 00625000
TM NICSTAT,NICNTRL IS THE RESOURCE IN CONTROL MODE @V305731 00626000
BZ RNCHAIN NO, GO CHECK SCREEN STATUS @V305731 00627000
RNEXLST EQU * @V305731 00628000
BXLE R9,R2,RNICLST GET NEXT NICBLOK @V305731 00629000
SR R9,R9 CLEAR NICBLOK POINTER REGISTER @V305731 00630000
CL R3,BSCRROBN END OF NICBLOK SCAN @V305731 00631000
BE POLLSECT YES, CHECK FOR READS @V305731 00632000
ICM R3,15,BSCRROBN END OF SCAN @V305731 00633000
BZ POLLSECT YES, ALREADY THERE @V305731 00634000
L R9,RDEVNICL GET FIRST NICBLOK POINTER @V305731 00635000
BAL R7,RNICLST SCAN NICBLOKS FOR ACTIVE TASK @V305731 00636000
RGFIOS EQU * @V305731 00637000
LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 00638000
BZ POLLSECT NO, GO POLL THE LINE @V305731 00639000
BAL R3,SELECTCW GET SELECTION CCWS @V305731 00640000
RESTART EQU * @V305731 00641000
NI BSCFLAG,X'FF'-BSCSCAN CLEAR SECOND SCAN FLAG @V305731 00642000
XC IOBRCNT(2),IOBRCNT CLEAR RETRY COUNT FOR I/O @V305731 00643000
BAL R3,FRETIOER RELEASE THE IOERBLOK @V305731 00644000
L R2,=A(DMKRGAIN) INTERRUPT RETURN ADDRESS @V305731 00645000
ST R2,IOBIRA SAVE INTERRUPT RETURN ADDRESS @V305731 00646000
MVC IOBUSER,NICUSER ASSIGN VMBLOK FOR I/O @VA07391 00647200
ST R9,BSCAUSER SAVE ADDR OF ACTIVE RESOURCE @V305731 00651000
CL R9,RDEVNICL IS THIS THE FIRST NICBLOK @V305731 00652000
BE BYPNICB YES, SKIP SAVING NICBLOK @VM03134 00653000
ST R9,BSCRROBN SAVE ACTIVE NICBLOK @V305731 00654000
BYPNICB EQU * SETUP TO DO START I/O @VM03134 00655000
MVI IOBSTAT,X'00' CLEAR THE STATUS BYTE @V305731 00656000
MVI IOBSPEC,X'00' CLEAR SPECIAL REQUEST @V305731 00657000
NI IOBFLAG,IOBCP+IOBRSTRT LEAVE ON THESE FLAGS @V305731 00658000
OI RDEVSTAT,RDEVWAII LINE IS NOW ACTIVE @V305731 00659000
L R1,NICUSER LOAD ADDR OF NEW VMBLOK @VA07391 00659100
SWTCHVM OPT=STAY SWITCH VMBLOK LOCKING & CHARGINE @VA07391 00659200
CALL DMKIOSQR QUEUE REAL I/O FOR SYSTEM @V305731 00660000
BAL R7,GODSPCH GO TO DISPATCHER @V305731 00661000
SPACE 1 00662000
POLLSECT EQU * @V305731 00663000
TM BSCFLAG,BSCSCAN IS THIS SECOND SCAN OF NICBLOK @V305731 00664000
BZ POLLIOB NO, GO DO POLL OPERATION @V305731 00665000
NI BSCFLAG,X'FF'-BSCSCAN CLEAR SECOND SCAN FLAG @V305731 00666000
BAL R7,GODSPCH GO TO DISPATCHER @V305731 00667000
POLLIOB EQU * @V305731 00668000
BAL R3,BLDIOB GO GET STORAGE FOR IOBLOK @V305731 00669000
BAL R3,GPOLLCW SET UP GENERAL POLLING CCWS @V305731 00670000
BAL R7,SETCAW GO RESTART I/O OPERATION TO LINE @V305731 00671000
SPACE 2 00672000
RNCHAIN EQU * GET THE ACTIVE CONTASK @V305731 00673000
TM NICFLAG,NICFMT IS THE SCREEN FORMATTED @V305731 00674000
BZ RGFMT NO, GO FORMAT SCREEN @V305731 00675000
CLI NICSTAT,NICRUNN IS RUNNING STATE INDICATED ? @V305731 00676000
BE BLDCONT YES, START UP THIS TASK @V305731 00677000
TM NICSTAT,NICREAD IS THERE A READ ACTIVE ? @V305731 00678000
BO READPRI YES, CHECK FOR PRIORITY WRITE @V305731 00679000
TM NICSTAT,NICHOLD IS HOLD ACTIVE ? @V305731 00680000
BZ RNEXLST NO, GO GET NEXT NICBLOK @V305731 00681000
L R1,NICUSER GET USER VMBLOK POINTER @V305731 00682000
TM VMRSTAT-VMBLOK(R1),VMLOGOFF IS LOGOFF ACTIVE @V305731 00683000
BZ RNEXLST NO, GET NEXT NICBLOK @V305731 00684000
BAL R7,PRIOWRIT GO CLEAR DISPLAY SCREEN @V305731 00685000
SPACE 2 00686000
READPRI EQU * HANDLE PRIORITY WRITE REQUEST @V305731 00687000
L R1,CONPNT GET NEXT CONTASK POINTER @V305731 00688000
LTR R1,R1 IS THE POINTER ZERO ? @V305731 00689000
BNP RNEXLST YES, GET NEXT NICBLOK @V305731 00690000
TM CONPARM-CONTASK(R1),PRIORITY BREAK-IN SITUATION @V305731 00691000
BZ RNEXLST NO, GO GET NEXT NICBLOK @V305731 00692000
ST R1,NICQPNT REMOVE THE READ TASK FROM CHAIN @V305731 00693000
NI CONSTAT,X'FF'-CONESCP CONTASK IS NOT ACTIVE @V305731 00694000
READBK EQU * RE-INSERT THE READ CONTASK @V305731 00695000
L R2,CONPNT-CONTASK(,R1) ADDRESS OF NEXT TASK @V305731 00696000
LTR R2,R2 IS THE POINTER ZERO ? @V305731 00697000
BNP READINS YES, INSERT THE READ HERE @V305731 00698000
TM CONPARM-CONTASK(R2),PRIORITY BREAK-IN SITUATION @V305731 00699000
BZ READINS NO, INSERT THE READ HERE @V305731 00700000
LR R1,R2 SAVE THE BACK POINTER @V305731 00701000
BAL R7,READBK TRY AGAIN @V305731 00702000
SPACE 00703000
READINS EQU * RE-CHAIN THE READ CONTASK @V305731 00704000
ST R2,CONPNT POINTER TO NEXT CONTASK @V305731 00705000
ST R6,CONPNT-CONTASK(,R1) PATCH THE FORWARD CHAIN @V305731 00706000
L R6,NICQPNT GET ADDRESS OF FIRST CONTASK @V305731 00707000
SPACE 1 00708000
BLDCONT EQU * START UP CONSOLE REQUEST @V305731 00709000
TM CONSTAT,CONSYNC SYNCHRONIZATION CONTASK @V305731 00710000
BZ OUTCONT NO, GO CHECK OUTPUT CONTASK @V305731 00711000
L R0,CONPNT GET NEXT CONTASK POINTER @V305731 00712000
ST R0,NICQPNT PUT NEXT TASK FIRST @V305731 00713000
SR R0,R0 CLEAR REGISTER 0 @V305731 00714000
ST R0,CONPNT ZERO OUT NEXT POINTER FIELD @V305731 00715000
CALL DMKQCNET RETURN CONTASK @V305731 00716000
LA R2,NICSIZE*8 GET THE SIZE OF THE NICBLOK @V305731 00717000
BAL R7,RNICLST GET NEXT CONTASK FROM RESOURCE @V305731 00718000
SPACE 1 00719000
OUTCONT EQU * @V305731 00720000
TM CONSTAT,CONOUTPT IS THIS AN OUTPUT CONTASK @V305731 00721000
BZ STRTREAD NO, GO CHECK FOR READ CONTASK @V305731 00722000
TM CONDWC,X'40' DIAGNOSE CONSOLE WRITE ?? @VA07542 00723100
BZ CORD NO, CONTINUE NORMALLY @V305731 00724000
TM NICFLAG,NICALRM SCREEN HAVE ALARM MESSAGE ? @V305731 00725000
BO CRTHOLD1 YES, FORCE SCREEN TO HOLD STATUS @V305731 00726000
TM CONDWC,X'80' ERASE BEFORE WRITE ?? @VA07542 00727100
BZ DIAGRUN NO, CLEAR THE INDICATORS @V305731 00728000
DIAGCLR EQU * DIAGNOSE CLEAR SECTION @V305731 00729000
CLI CONDWC,X'FF' ERASE CLEAR DIAGNOSE REQUEST ? @VA07542 00730100
BE CNCLDIAG YES, NO OUTPUT TO DO @V305731 00731000
NI CONDWC,X'7F' TURN OFF ERASE INDICATOR @VA07542 00732100
BAL R7,CRTMORE1 WRITE MORE STATUS BEFORE WRITE @V305731 00733000
SPACE 1 00734000
DIAGRUN EQU * DIAGNOSE RUNNING SECTION @V305731 00735000
NI CONDWC,X'3F' CLEAR DIAGNOSE FLAGS @VA07542 00736100
IC R0,CONDWC GET LINE COORDINATOR @VA07542 00737100
CLI CONDWC,22 DIAGNOSE ISSUED TO THE @VA07542 00738100
BE DIAGSIO INPUT AREA? @VM03094 00739000
CLI CONDWC,23 ...... @VA07542 00740100
BE DIAGSIO IF YES, TAKE SPECIAL PATH @VM03094 00741000
STC R0,NICCORD SET LINE COORDINATE @V305731 00742000
OI NICFLAG,NICDIAG SET DIAGNOSE WRITE FLAG @V305731 00743000
B SETCORD GO GET THE NEXT LINE @V305731 00744000
DIAGSIO EQU * HANDLE WRITING TO INPUT AREA @VM03094 00745000
STC R0,BSCLINE SET LINE COORDINATE @VM03094 00746000
OI NICTMCD,NICSIO SET WRITING TO INPUT FLAG @VM03094 00747000
LA R0,BUFINLTH GET BUFFER SIZE @VM03116 00748000
CH R0,CONCNT IS THIS GREATER THAN COUNT @VM03116 00749000
BNL SETCORD YES, GET NEXT LINE @VM03134 00750000
STH R0,CONCNT SAVE MAX. SIZE OF BUFFER @VM03116 00751000
B SETCORD GO GET THE NEXT LINE @VM03094 00752000
CNCLDIAG EQU * RETURN CONTASK TO SYSTEM @V305731 00753000
SR R2,R2 SET RETURN CODE TO ZERO @V305731 00754000
BAL R3,SETRETN GO SET RETURN CODE (IF POSSIBLE) @V305731 00755000
BAL R3,CONRET RETURN CONTASK @V305731 00756000
PRIOWRIT EQU * CLEAR DISPLAY SCREEN @V305731 00757000
BAL R3,GRFCLRT SET UP THE CLEAR SCREEN CCWS @V305731 00758000
MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 00759000
BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00760000
SPACE 1 00761000
CORD EQU * DETERMINE STATUS OF THE SCREEN @V305731 00762000
TM NICFLAG,NICDIAG WAS DIAGNOSE USED BEFORE ? @V305731 00763000
BO CRTFULL YES, FORCE TO MORE STATUS @V305731 00764000
LH R1,CONCNT GET BYTE COUNT @V305731 00765000
SR R4,R4 CLEAR REGISTER @V305731 00766000
IC R4,NICCORD GET CURRENT OUTPUT LINE @V305731 00767000
MH R4,=H'80' CONVERT TO BYTE COORDINATES @V305731 00768000
ALR R4,R1 TOTAL BYTES ON SCREEN @V305731 00769000
LA R2,1760 SIZE OF 3270 SCREEN @V305731 00770000
CLR R4,R2 WILL THIS LINE FIT ON SCREEN @V305731 00771000
BH CRTFULL NO, SCREEN FULL @V305731 00772000
SETCORD EQU * SET UP NEXT LINE VALUE @V305731 00773000
SR R0,R0 CLEAR REGISTER FOR DIVIDE @V305731 00774000
AL R1,=F'79' ROUND UP TO NEXT LINE @V305731 00775000
D R0,=F'80' DIVIDE TO GET NUMBER OF LINES @V305731 00776000
LR R4,R1 SAVE NUMBER OF LINES @V305731 00777000
RUNCTL EQU * SET UP CCWS FOR WRITE @V305731 00778000
MVI NICSTAT,NICRUNN+NICNTRL SET RUNNING & CONTROL @V305731 00779000
LH R1,CONCNT LOAD DATA COUNT @VM03040 00780000
LTR R1,R1 IS COUNT VALUE ZERO @VM03040 00781000
BZ NOAPLW YES, BYPASS APL TRANSLATION @VM03040 00782000
L R7,=A(DMKTBLGR) GRAF DEVICE TRANSLATION TABLE @VM03040 00783000
TM NICTMCD,NICTEXT+NICAPL TEXT OR APL TRANSLATION @VA08981 00783050
BNZ USEGRTAB YES, USE DMKTBLGR @VA08981 00783150
L R7,=A(DMKTBLRG) NO - USE TABLE DMKTBLRG @VA06170 00783300
USEGRTAB DS 0H @VA06170 00783400
L R2,NICUSER GET USER VMBLOK POINTER @VM03040 00784000
IC R0,VMTLEND-VMBLOK(R2) GET LOGICAL LINE END @VM03040 00785000
TM NICTMCD,NICSIO IS WRITING TO INPUT FLAG ON ? @VM03094 00786000
BZ BYPINSET NO, BYPASS INSERTING CHARACTER @VM03134 00787000
MVI X'13'(R7),IC INSERT CURSOR CHAR IN TABLE @VM03094 00788000
BYPINSET EQU * SAVE LOGICAL LINE END CHAR. @VM03134 00789000
STC R0,21(,R7) SAVE LCR CHAR IN TRANSLATE TABLE @VM03040 00790000
BCTR R1,R0 SUBSTRACT ONE - EX INSTR. @VM03094 00791000
L R2,CONADDR GET DATA ADDRESS @VM03040 00792000
APLTRT EQU * TRANSLATE DATA TO GRAPHIC CHARS. @VM03040 00793000
CL R1,F256 LESS THAN 256 ? @VM03040 00794000
BL APLTRAN YES, DO LAST PART @V305798 00795000
TR 0(256,R2),0(R7) TRANSLATE DATA @V305798 00796000
LA R2,256(,R2) NEXT DATA POSITION @V305798 00797000
S R1,F256 DECREMENT COUNT @VM03040 00798000
B APLTRT TEST FOR MORE TO DO @V305798 00799000
APLTRAN EQU * TRANSLATE DATA @V305798 00800000
EX R1,TROPUT TRANSLATE LAST PART OF OUTPUT @VM03040 00801000
MVI 21(R7),X'15' STORE LCR CHAR IN TRANS TABLE @V305798 00802000
MVI X'13'(R7),X'40' INSERT BLANK BACK IN TABLE @VM03094 00803000
TM NICTMCD,NICAPL+NICTEXT TRANS ON? @V387398 00804000
BZ NOAPLW NO, BYPASS TRANSLATION @V387398 00804100
L R1,=A(DMKTBMZO) COMPOUND CHARACTERS TABLE @VM03235 00807000
TM NICTMCD,NICTEXT 3270 TEXT CHARACTER SET? @V387398 00807100
BZ WRTRANS NO -> TRANSLATE TABLE ALL SET @V387398 00807200
L R1,=A(DMKTBMTO) TEXT COMPOUND CHARACTER TABLE @V387398 00807300
WRTRANS EQU * @V387398 00807400
TRANS 7,1,OPT=(BRING,DEFER,SYSTEM),AFFINITY @VA07391 00808100
STM R1,R10,BALRSAVE SAVE CURRENT REGISTERS @VA07391 00810100
LH R0,CONTSKSZ GET SIZE OF CURRENT CONTASK @V305798 00811000
AR R0,R0 DOUBLE CONTASK SIZE @V305798 00812000
CALL DMKFREE GET STORAGE FOR NEW CONTASK @V305798 00813000
MVC 0(CONDATA-CONTASK,R1),0(R6) GET HEADER DATA @V305798 00814000
LA R5,CONDATA-CONTASK(,R1) GET POINTER TO DATA AREA@VM03040 00815000
ST R5,CONADDR-CONTASK(,R1) SAVE DATA AREA POINTER @VM03040 00816000
STH R0,CONTSKSZ-CONTASK(,R1) SAVE SIZE OF CONTASK @VM03040 00817000
L R4,CONADDR POINTER TO CURRENT DATA AREA @VM03040 00818000
LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA08680 00818500
ST R1,BALRSAVE SAVE NEW CONTASK POINTER @VA07391 00819100
LH R3,CONCNT LOAD DATA COUNT @VM03040 00820000
SR R8,R8 CLEAR COUNT REGISTER @V305798 00821000
BAL R10,TRANSTST TRANSLATE & TEST FOR COMP. CHAR. @V305798 00822000
B FRETNEW RELEASE NEW CONTASK STORAGE @V305798 00823000
APLCOMP EQU * PUT FAKE CHAR. BEFORE COMP. CHAR @V305798 00824000
MVI 0(R5),X'1D' PUT FAKE ATTRIBUTE IN AREA @V305798 00825000
STC R2,1(,R5) PUT COMPOUND CHAR. INTO BUFFER @V305798 00826000
LA R5,2(,R5) UPDATE PASS COMPOUND CHARACTER @V305798 00827000
LA R4,1(,R4) UPDATE PASS COMPOUND CHARACTER @V305798 00828000
LA R8,1(,R8) KEEP COUNT OF FAKE ATTR. CHARS @V305798 00829000
SR R3,R1 DECREMENT BYTE COUNT @V305798 00830000
S R3,F1 SUBTRACT ONE - COMPUND CHAR. @V305798 00831000
BNP FRETOLD GET OUT - FINISH @V305798 00832000
BAL R10,TRANSTST TRANSLATE & TEST FOR COMP. CHAR. @V305798 00833000
B FRETOLD RELEASE OLD CONTASK STORAGE @V305798 00834000
B APLCOMP PUT FAKE ATTR. CHAR IN BUFFER @V305798 00835000
FRETNEW EQU * RELEASE NEW CONTASK STORAGE @V305798 00836000
L R1,BALRSAVE GET NEW CONTASK POINTER @VA07391 00837100
LH R0,CONTSKSZ-CONTASK(,R1) GET SIZE OF CONTASK @VM03040 00838000
ST R6,BALRSAVE SAVE OLD/CURRENT CONTASK PTR @VA07391 00839100
B FRETCONT RELEASE NEW CONTASK @V305798 00840000
FRETOLD EQU * RELEASE CURRENT CONTASK STORAGE @V305798 00841000
LR R1,R6 GET CURRENT CONTASK POINTER @V305798 00842000
LH R0,CONTSKSZ GET SIZE OF OLD CONTASK @V305798 00843000
AH R8,CONCNT ADD NUMBER OF FAKE CHAR TO COUNT @V305798 00844000
L R6,BALRSAVE GET POINTER TO NEW CONTASK @VA07391 00845100
STH R8,CONCNT UPDATE DATA COUNT @V305798 00846000
FRETCONT EQU * RELEASE CONTASK @V305798 00847000
CALL DMKFRET RELEASE CONTASK @V305798 00848000
LM R1,R10,BALRSAVE RESTORE REGISTERS @VA07391 00849100
LTR R10,R10 IS THERE AN IOBLOK POINTER @VM03040 00850000
BNZ APLFIRST YES, SAVE PTR. IN PREVIOUS TASK @VM03040 00851000
ST R1,NICQPNT SAVE CONTASK POINTER @VM03040 00852000
LR R6,R1 SET UP CONTASK REGISTER @VM03040 00853000
B APLCONT CONTINUE PROCESSING @V387398 00854000
APLFIRST EQU * SAVE PTR. IN PREVIOUS CONTASK @VM03040 00855000
ST R1,CONPNT-CONTASK(,R3) SAVE CURRENT PTR. @VM03040 00856000
LR R6,R1 SET UP CONTASK REGISTER @VM03040 00857000
APLCONT TM NICTMCD,NICTEXT 3270 TEXT? @V387398 00857010
BZ NOAPLW BR IF NOT @V387398 00857020
LH R0,CONCNT DATA LENGTH @V387398 00857030
L R1,CONADDR POINT TO DATA @V387398 00857040
TXTLP LR R3,R0 REMAINING BYTE COUNT @V387398 00857050
BCTR R3,0 - 1 FOR EXECUTE @V387398 00857060
N R3,F255 MASK @V387398 00857070
EX R3,TXTTRAN TRANSLATE TEXT OUTPUT @V387398 00857080
LA R3,1(,R3) BYTE COUNT JUST TRANSLATED @V387398 00857090
AR R1,R3 POINT TO NEXT BYTE TO TRANSLATE @V387398 00857100
SR R0,R3 BYTES REMAINING @V387398 00857110
BP TXTLP LOOP IF MORE TO TRANSLATE @V387398 00857120
NOAPLW EQU * BYPASS APL TRANSLATION @VM03040 00858000
MVI CONLABEL,RTNRETBF AFTER FINISHING WRITES @VM03040 00859000
BAL R3,WRITSECT GO SET UP WRITE CCWS FOR BISYNC @V305731 00860000
BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00861000
SPACE 1 00862000
STRTREAD EQU * READ CONTASK SECTION @V305731 00863000
BAL R3,READSUB SET UP CCW FOR READ STATUS @V305731 00864000
BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00865000
SPACE 1 00866000
RGFMT EQU * @V305731 00867000
BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00868000
BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00869000
BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00870000
SPACE 1 00871000
CRTHOLD1 EQU * SET UP HOLD STATUS CCWS @V305731 00872000
BAL R3,CRTHOLD SET UP CCWS FOR HOLD STATUS @V305731 00873000
BAL R7,RGFCHAN GO GET POINTER TO IOBLOK @V305731 00874000
SPACE 1 00875000
CRTFULL EQU * COME HERE WHEN SCREEN IS FULL @V305731 00876000
LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 00877000
BZ ALARMSG NO, CHECK FOR ALARM MESSAGE @VM03134 00878000
LR R6,R3 GET ORIGINAL CONTASK POINTER @V305731 00879000
BAL R7,SETWRIT GO SETUP CCWS FOR RUNNING STATUS @V305731 00880000
SPACE 1 00881000
ALARMSG EQU * CHECK FOR ALARM MESSAGE @VM03134 00882000
TM CONPARM,LOGDROP+LOGHOLD LOGOFF REQUEST ACTIVE @V305731 00883000
BNZ CRTMORE1 YES, PUT SCREEN IN MORE STATUS @V305731 00884000
TM NICFLAG,NICALRM ALARM MESSAGE DISPLAYED ? @V305731 00885000
BO CRTHOLD1 YES, GO FORCE HOLD STATUS @V305731 00886000
CRTMORE1 EQU * SET UP MORE STATUS CCWS @V305731 00887000
BAL R7,RSTTMR RESET ANY ACTIVE TIMER REQUEST @V305731 00888000
BAL R3,CRTMORE SET UP CCWS FOR MORE STATUS @V305731 00889000
* B RGFCHAN GO GET IOBLOK POINTER 00890000
RGFCHAN EQU * GET STORAGE FOR IOBLOK @V305731 00891000
NI NICFLAG,X'FF'-NICPROCN CLEAR PROCESS NOW FLAG @V305731 00892000
BAL R3,BLDIOB GO GET STORAGE FOR IOBLOK @V305731 00893000
RGFCHAN1 EQU * @V305731 00894000
LA R1,CONCCW1 START OF CCW STRING @V305731 00895000
OI CONSTAT,CONESCP CONTASK PROCESSED @V305731 00896000
L R4,IOBMISC GET POINTER TO LAST CONTASK @V305731 00897000
LTR R4,R4 IS THE POINTER ZERO ? @V305731 00898000
BP RGFCHN4 YES, ADD TO THE STRING @V305731 00899000
XC BSCRESP(L'BSCRESP),BSCRESP CLEAR RESPONSE AREA @V305731 00900000
ST R1,IOBCAW SET UP THE CAW @V305731 00901000
BAL R7,RGFCHN5 CONTINUE WITH THIS NICBLOK @V305731 00902000
SPACE 1 00903000
RGFCHN4 EQU * ADD TO EXITING CCW STRING @V305731 00904000
MVC CONCCW2-CONTASK(8,R4),TICCCW MOVE TIC CCW @V305731 00905000
MVI CONCCW1+4-CONTASK(R4),SILI+CD SET DATA CHAINING @V305731 00906000
ST R1,CONCCW2-CONTASK(,R4) SAVE PTR TO CCW STRING @V305731 00907000
MVI CONCCW2-CONTASK(R4),X'08' MAKE IT A TIC COMMAND @V305731 00908000
LA R1,CONCCW4+5 BYPASS WCC CHARACTER FOR CHAINING@V305731 00909000
STCM R1,7,CONCCW1+1 SAVE POINTER TO DATA IN CCW @V305731 00910000
LH R1,CONCCW1+6 GET CCW COUNT @V305731 00911000
S R1,F4 SUBTRACT BISYNC HEADER & WCC @V305731 00912000
STH R1,CONCCW1+6 SAVE COUNT VALUE @V305731 00913000
RGFCHN5 EQU * CHECK STATUS OF CONTASK @V305731 00914000
ST R6,IOBMISC SAVE THE LAST CONTASK PTR @V305731 00915000
TM CONSTAT,CONCNTL IS THIS A CONTROL TASK ? @V305731 00916000
BZ NOCONTAK NO, BYPASS CONTROL TEST @V305731 00917000
CLI CONCCW1,X'2F' IS THE DISABLE COMMAND CCW FIRST @V305731 00918000
BE RESTART YES, GO START I/O TO BISYNC LINE @V305731 00919000
BAL R7,RGFIOS GO QUEUE I/O OPERATION OFF IOBLOK@V305731 00920000
SPACE 1 00921000
NOCONTAK EQU * PROCESS NON-CONTROL CONTASK @V305731 00922000
L R4,CONPNT GET NEXT CONTASK POINTER @V305731 00923000
LTR R4,R4 IS THE POINTER ZERO ? @V305731 00924000
BZ SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00925000
TM NICFLAG,NICDIAG IS THIS A DIAGNOSE WRITE @V305731 00926000
BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00927000
TM NICTMCD,NICSIO WAS DIAGNOSE ISSUE TO INPUT AREA @VM03094 00928000
BO SETWRIT YES, GO SET UP CCWS FOR STATUS @VM03094 00929000
TM CONSTAT-CONTASK(R4),CONOUTPT A OUTPUT CONTASK @V305731 00930000
BZ SETWRIT NO, GO SET UP CCWS FOR STATUS @V305731 00931000
TM CONPARM-CONTASK(R4),ALARM IS THIS AN ALARM MSG @V305731 00932000
BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00933000
TM CONDWC-CONTASK(R4),X'40' IS THIS A DIAGNOSE? @VA07542 00934100
BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00935000
LR R3,R6 SAVE CURRENT CONTASK POINTER @V305731 00936000
LR R6,R4 PROCESS NEXT OUTPUT CONTASK @V305731 00937000
BAL R7,CORD GO PROCESS THIS OUTPUT CONTASK @V305731 00938000
SPACE 1 00939000
SETWRIT EQU * SET UP CCWS FOR RUNNING STATUS @V305731 00940000
MVC CONCCW2(8),WRT77RUN GET RUNNING STATUS CCW @V305731 00941000
MVI CONCCW1+4,SILI+CD SET DATA CHAINING @V305731 00942000
MVC CONCCW3(8),READCCW1 GET CCW FOR BISYNC RESPONSE @V305731 00943000
LA R1,BSCRESP GET ADDRESS OF RESPONSE BUFFER @V305731 00944000
STCM R1,7,CONCCW3+1 SAVE ADDRESS OF RESPONSE BUFFER @V305731 00945000
BAL R7,RGFIOS GO QUEUE I/O OPERATION OFF IOBLOK@V305731 00946000
SPACE 2 00947000
****************************************************************** 00948000
* NEW ENTRY LABEL USE BY DMKRGA TO FORMAT THE 3270 DISPLAY 00949000
* SCREEN. THIS NEW ENTRY POINT WAS CREATED WHEN DMKRGB WAS 00950000
* SPLIT INTO TWO MODULES. 00951000
****************************************************************** 00952000
SPACE 2 00953000
USING DMKRGB,R12 SETUP ADDRESSABILITY FOR FORMAT @V305731 00954000
DMKRGBMT DS 0D @V305731 00955000
LR R12,R7 GET BASE ADDRESS FOR DMKRGB @V305731 00956000
LM R12,R13,RGBBASE GET BASE ADDRESSES @V305731 00957000
USING DMKRGB,R12,R13 SET UP ADDRESSABILITY @V305731 00958000
BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00959000
BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00960000
MVI IOBMISC2,IBBWRITE SET UP FOR WRITE OPERATION @V305731 00961000
LA R1,CONCCW1 PICK UP CHANNEL PROGRAM ADDRESS @V305731 00962000
ST R1,BSCSPTR .... AND SAVE ADDRESS @V305731 00963000
BAL R7,SETCAWA GO RESTART I/O OPERATION TO LINE @V305731 00964000
EJECT 00965000
RGBBASE DS 0F REMOTE 3270 BASE REGISTER VALUE @V305731 00966000
DC A(DMKRGB,DMKRGB+4096) @V305731 00967000
SPACE 2 00968000
******************************************************************* 00969000
* SUBROUTINES FOR 3270 REMOTE SUPPORT 00970000
* 00971000
* THE SUBROUTINES ARE DUPLICATES OF SOME IN DMKRGA. 00972000
* ANY CHANGES MADE TO THESE SUBROUTINES SHOULD ALSO BE MADE 00973000
* IN DMKRGA. 00974000
******************************************************************* 00975000
SPACE 2 00976000
SETCAWA EQU * GET START OF CCW STRING @V305731 00977000
LA R1,CONCCW1 GET BEGINNING ADDR OF CCW STRING @V305731 00978000
SETCAW EQU * I/O RESTART SECTION @V305731 00979000
ST R1,IOBCAW SET UP CAW @V305731 00980000
XC BSCRESP(L'BSCRESP),BSCRESP CLEAR RESPONSE BUFFER@V305731 00981000
TM IOBMISC2,IBBSPOLL DOING A SPECIFIC POLL? @VA08730 00981100
BO RESTART YES, GO RESTART THE LINE @VA08730 00981200
NI IOBMISC2,X'FF'-IBBWRITE TURN OFF WRITE FLAG @VA08730 00981300
CLI 5(R1),X'10' IS THIS A WRITE TEXT CCW @VA13944 00981400
BNE RESTART NO, GO RESTART THE LINE @VA08730 00981500
ST R1,BSCSPTR SAVE WRITE CCW ADDRESS @VA08730 00981600
MVI IOBMISC2,IBBWRITE INDICATE THIS IS A WRITE @VA08730 00981700
BAL R7,RESTART GO RESTART I/O OPERATION TO LINE @V305731 00982000
SPACE 1 00983000
CONRET EQU * RETURN CONTASK TO SYSTEM @V305731 00984000
L R0,CONPNT GET NEXT CONTASK (IF ANY) @V305731 00985000
ST R0,NICQPNT SET NEXT CONTASK FOR PROCESSING @V305731 00986000
SR R0,R0 CLEAR REGISTER 0 @V305731 00987000
ST R0,CONPNT CLEAR NEXT POINTER @V305731 00988000
CALL DMKQCNET RETURN CONTASK @V305731 00989000
BR R3 RETURN TO IN LINE CODE @V305731 00990000
SPACE 1 00991000
RSTTMR EQU * RESET TIMER VALUE @V305731 00992000
TM NICSTAT,NICTRQ IS A TIMER REQUEST QUEUED @V305731 00993000
BZR R7 NO, RETURN TO IN LINE CODE @V305731 00994000
NI NICSTAT,X'FF'-NICTRQ RESET TIMER REQUEST FLAG @V305731 00995000
L R1,NICATRB GET ADDRESS OF TRQBLOK @V305731 00996000
CALL DMKSCHRT RESET ACTIVE TIMER REQUEST @V305731 00997000
BR R7 RETURN TO IN LINE CODE @V305731 00998000
SPACE 1 00999000
BLDIOB EQU * GET STORAGE FOR IOBLOK @V305731 01000000
LTR R10,R10 IS THERE AN IOBLOK POINTER ? @V305731 01001000
BNZR R3 YES, RETURN @V305731 01002000
LA R0,IOBSIZE GET IOBLOK SIZES @V305731 01003000
CALL DMKFREE GET STORAGE FOR IOBLOK @V305731 01004000
LR R10,R1 SET UP ADDRESSABILITY FOR IOBLOK @V305731 01005000
XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK @V305731 01006000
BR R3 RETURN TO IN LINE CODE @V305731 01007000
SPACE 1 01008000
FRETIOB EQU * RELEASE IOBLOK & IOERBLOK @V305731 01009000
LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 01010000
BZR R7 NO, RETURN @V305731 01011000
BAL R3,FRETIOER RELEASE IOERBLOK @V305731 01012000
LR R1,R10 GET IOBLOK POINTER @V305731 01013000
LA R0,IOBSIZE GET SIZE OF IOBLOK @V305731 01014000
CALL DMKFRET RELEASE STORAGE FOR IOBLOK @V305731 01015000
SR R10,R10 CLEAR IOBLOK POINTER @V305731 01016000
BR R7 RETURN TO IN LINE CODE @V305731 01017000
SPACE 1 01018000
FRETIOER EQU * RELEASE IOERBLOK STORAGE @V305731 01019000
L R1,IOBIOER GET POINTER TO IOERBLOK @V305731 01020000
LTR R1,R1 IS POINTER ZERO ? @V305731 01021000
BZR R3 YES, RETURN @V305731 01022000
LA R0,IOERSIZE GET SIZE OF IOERBLOK @V305731 01023000
AH R0,IOEREXT-IOERBLOK(,R1) EXTENSION TO IOERBLOK @V305731 01024000
CALL DMKFRET RELEASE STORAGE FOR IOERBLOK @V305731 01025000
SR R0,R0 CLEAR REGISTER 0 @V305731 01026000
ST R0,IOBIOER CLEAR POINTER TO IOERBLOK @V305731 01027000
BR R3 RETURN @V305731 01028000
SPACE 1 01029000
CRTMORE EQU * SET UP CCWS FOR MORE STATE @V305731 01030000
BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01031000
MVI NICSTAT,NICMORE+NICNTRL INDICATE MORE & CONTROL @V305731 01032000
MVI CONLABEL,RTNSTMOR SET RETURN TO MORE SECTION @V305731 01033000
LA R1,WRT77CCW GET ADDRESS OF MORE CCWS @V305731 01034000
BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01035000
MVI CONCCW1+7,MOR77L+4 SET MORE CCW COUNT @V305731 01036000
LA R1,MOR77L GET LENGTH OF MORE DATA @V305731 01037000
LA R2,MOR3277 GET ADDRESS OF MORE DATA @V305731 01038000
BAL R7,DATAMOVE MOVE DATA INTO CONTASK BUFFER @V305731 01039000
BR R3 RETURN @V305731 01040000
SPACE 1 01041000
CRTHOLD EQU * SET UP CCWS FOR HOLD STATE @V305731 01042000
BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01043000
MVI NICSTAT,NICHOLD+NICNTRL INDICATE HOLD & CONTROL @V305731 01044000
MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 01045000
LA R1,WRT77CCW GET ADDRESS OF HOLD CCWS @V305731 01046000
BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01047000
MVI CONCCW1+7,HLD77L+4 SET HOLD CCW COUNT @V305731 01048000
LA R1,HLD77L GET LENGTH OF HOLD DATA @V305731 01049000
LA R2,HLD3277 GET ADDRESS OF HOLD DATA @V305731 01050000
BAL R7,DATAMOVE MOVE DATA INTO CONTASK BUFFER @V305731 01051000
BR R3 RETURN @V305731 01052000
SPACE 1 01053000
WRITSECT EQU * HANDLE WRITE REQUEST @V305731 01054000
ST R3,TEMPR3 SAVE RETURN ADDRESS @V305731 01055000
LH R3,CONCNT GET DATA COUNT @V305731 01056000
LA R1,WRT77CCW GET ADDRESS OF WRITE CCW @V305731 01057000
BAL R7,SETUPCCW SET UP CCWS FOR BISYNC LINE @V305731 01058000
MVC CONCCW4+1(3),SYNCP MOVE BISYNC HEADER INTO DATA @V305731 01059000
MVC CONCCW4+4(4),WRT77D SET DATA @V305731 01060000
LA R3,WRT77DL+3(R3) TOTAL DATA COUNT @V305731 01061000
STH R3,CONCCW1+6 SAVE COUNT OF WRITE DATA @V305731 01062000
SR R3,R3 CLEAR @V305731 01063000
TM NICTMCD,NICSIO IS WRITING TO INPUT AREA FLAG ON @VM03094 01064000
BZ WRITAPL NO, BYPASS LINE COORDINATE @VM03094 01065000
IC R3,BSCLINE GET LINE COORDINATE @VM03094 01066000
B WRITDIAG GET BUFFER ADDRESS FOR LINE @VM03094 01067000
WRITAPL EQU * ... @VM03094 01068000
IC R3,NICCORD GET LINE POSITION @V305731 01069000
ALR R4,R3 UPDATE LINE COORDINATE @V305731 01070000
STC R4,NICCORD SAVE NEXT LINE POSITION @V305731 01071000
WRITDIAG EQU * GET BUFFER ADDRESS FOR LINE @VM03094 01072000
SLL R3,1 TIMES 2 @V305731 01073000
LH R3,TBL3277(R3) GET BUFFER ADDRESS @V305731 01074000
STH R3,CONCCW4+6 SET BUFFER ADDRESS @V305731 01075000
TM CONPARM,ALARM ALARM WITH MESSAGE ?? @V305731 01076000
BZ LOADR3 NO, RETURN TO IN LINE CODE @V305731 01077000
OI NICFLAG,NICALRM SET ALARM MESSAGE INDICATOR @V305731 01078000
OI CONCCW4+4,WCC5 SET ALARM BIT @V305731 01079000
LOADR3 EQU * SET UP FOR RETURN @V305731 01080000
MVI CONLABEL,RTNRETBF SET RETURN TO WRITE FINISH @V305731 01081000
L R3,TEMPR3 RESTORE RETURN ADDRESS @V305731 01082000
BR R3 RETURN @V305731 01083000
SPACE 01084000
READSUB EQU * SET UP CCWS FOR READ STATE @V305731 01085000
LR R2,R6 SAVE CONTASK POINTER @V305731 01086000
BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01087000
LA R1,WRT77CCW GET CCWS FOR READ STATE @V305731 01088000
BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01089000
LR R15,R2 GET ORIGINAL CONTASK POINTER @V305731 01090000
MVI CONCCW1+7,CPR77L+4 SET READ CCW COUNT @V305731 01091000
LA R1,CPR77L GET LENGTH OF READ DATA @V305731 01092000
LA R2,CPR3277 GET ADDRESS OF READ DATA @V305731 01093000
BAL R7,DATAMOVE MOVE DATA INTO BUFFER AREA @V305731 01094000
TM CONPARM-CONTASK(R15),INHIBIT NON-DISPLAY DATA @V305731 01095000
BZ BYPATTR NO, BYPASS SETTING ATTRIBUTE BYTE@VM03134 01096000
MVI CONDATA+1,ATTR457 SET NON-DISPLAY ATTRIBUTE BYTE@V305731 01097000
BYPATTR EQU * CHECK FOR VIRTUAL MACHINE @VM03134 01098000
TM CONPARM-CONTASK(R15),VMGENIO A VIRTUAL MACH READ@V305731 01099000
BZ BYPVMRD NO, BYPASS VM READ DATA @VM03134 01100000
MVC CONDATA+7(7),VMREADS MOVE VM READ INTO BUFFER @V305731 01101000
BYPVMRD EQU * SETUP SCREEN STATUS @VM03134 01102000
MVI NICSTAT,NICREAD+NICNTRL INDICATE READ & CONTROL @V305731 01103000
OI CONSTAT-CONTASK(R15),CONESCP CONTASK PROCESSED @V305731 01104000
MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 01105000
BR R3 RETURN @V305731 01106000
SPACE 2 01107000
TRANSTST EQU * TRANSLATE & TEST FOR COMP. CHAR. @V305798 01108000
CL R3,F256 LESS THAN 256 ? @V305798 01109000
BNH APLTST YES, ONLY TRANSLATE & TEST ONCE @V305798 01110000
TRT 0(256,R4),0(R7) TRANSLATE & TEST DATA @V305798 01111000
BNZ APLMOVE FOUND COMP. CHAR. - MOVE DATA @V305798 01112000
MVC 0(256,R5),0(R4) MOVE DATA TO NEW BUFFER @V305798 01113000
LA R4,256(,R4) UPDATE CURRENT CONTASK BUFFER PTR@V305798 01114000
LA R5,256(,R5) UPDATE NEW CONTASK BUFFER PTR @V305798 01115000
S R3,F256 DECREMENT DATA COUNT @V305798 01116000
BNPR R10 IF ZERO, RETURN TO IN LINE CODE @VM03040 01117000
B TRANSTST CONTINUE TRANSLATING DATA @V305798 01118000
APLMOVE EQU * MOVE DATA INTO NEW CONTASK BUFFER@V305798 01119000
SR R1,R4 GET LENGTH OF DATA @V305798 01120000
EX R1,MOVEAPL MOVE DATA INTO NEW BUFFER @VM03040 01121000
AR R5,R1 UPDATE NEW BUFFER POINTER @V305798 01122000
AR R4,R1 UPDATE CURRENT BUFFER POINTER @V305798 01123000
B 4(R10) MOVE FAKE ATTR CHAR. INTO BUFFER @V305798 01124000
SPACE 01125000
APLTST EQU * TRANSLATE & TEST FOR COMP. CHAR. @V305798 01126000
BCTR R3,R0 SUBSTRACT ONE - EX INSTR. @VM03040 01127000
EX R3,TRTTST TRANSLATE & TEST DATA @VM03040 01128000
LA R3,1(,R3) UPDATE COUNTER - EX INSTR. @VM03040 01129000
BNZ APLMOVE FOUND COMPOUND CHARACTER @V305798 01130000
BCTR R3,0 SUBTRACT ONE FOR EXECUTE @VA09182 01131100
EX R3,MOVEAPL MOVE DATA TO BUFFER @VA09182 01131200
LA R3,1(,R3) RESET BYTE COUNT @VA09182 01131300
BR R10 RETURN TO IN LINE CODE @V305798 01132000
SPACE 1 01133000
SELECTCW EQU * SET UP CCWS TO SELECT A STATION @V305731 01134000
TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 01135100
BNO NONSW NO, DO SELECTION OPERATION @V346931 01135200
MVC BSCSCCW1(THREECCW),INITBID INITIAL LINE BID CCWS@V346931 01135300
B JOINSEL GO SET UP RESPONSE BUFFER @V346931 01135400
NONSW EQU * NEXT DO SELECTION OPERATION @V346931 01135500
MVC BSCSCCW1(THREECCW),WRITSEL ADDRESSING CCW STRING@V346931 01135600
ICM R1,10,NICSELT GET ADDRESSING CHARACTERS @V305731 01138000
ICM R1,5,NICSELT SET UP DOUBLE ADDRESSING CHARS. @V305731 01139000
STCM R1,15,BSCSEL SAVE ADDRESS OF REMOTE STATION @V305731 01140000
MVI BSCSEL+4,ENQ SET UP ADDRESSING ENTRY @V305731 01141000
LA R1,BSCSEL GET ADDR OF SELECTION ENTRY @V346931 01141100
STCM R1,B'0111',BSCSCCW2+1 INTO CCW @V346931 01141200
JOINSEL EQU * SET UP READ RESPONSE BUFFER @V346931 01141300
LA R1,BSCRESP GET RESPONSE BUFFER POINTER @V305731 01142000
STCM R1,7,BSCSCCW3+1 SAVE ADDRESS IN CCW @V305731 01143000
XC BSCRESP(2),BSCRESP CLEAR RESPONSE BUFFER @V305731 01144000
MVC BSCRCVD(4),RGFACK0 EXPECTED RECVD & SEND RESP. @V305731 01145000
MVC BSCSPTR(4),IOBCAW SAVE PTR. TO WRITE CCW STRING @V305731 01146000
MVI IOBMISC2,IBBSELA SET SELECTION INDICATOR @V305731 01147000
LA R1,BSCSCCW1 GET START OF SELECTION CCW STRING@V305731 01148000
ST R1,IOBCAW SET UP CAW FIELD @V305731 01149000
BR R3 RETURN @V305731 01150000
SPACE 1 01151000
GPOLLCW EQU * SET UP CCWS FOR GENERAL POLLING @V305731 01152000
L R9,RDEVNICL GET ADDR OF CONTROL UNIT NICBLOK @V305731 01153000
TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 01153100
BNO POLLCONT NO, DO GENERAL POLLING OPERATION @V346931 01153200
MVC BSCPCCW1(TWOCCW),S3275EOT WRITE EOT / READ @V346931 01153300
LA R1,BSCRESP ADDRESS OF RESPONSE BUFFER @V346931 01153400
STCM R1,B'0111',BSCPCCW2+1 INTO CCW @V346931 01153500
B JOINPOLL @V346931 01153600
POLLCONT EQU * SET UP READ BUFFER @V346931 01153700
MVI IOBMISC2,IBBREAD SET FLAG FOR GENERAL POLLING @V305731 01154000
MVC BSCPCCW1(8*4),POLCCW GENERAL POLLING CCW STRING @V305731 01155000
LA R1,BSCREAD GET READ BUFFER ADDRESS @V305731 01156000
STCM R1,7,BSCPCCW4+1 SAVE ADDRESS OF READ BUFFER @V305731 01157000
LA R1,BSCSEL GET ADDRESS OF POLLING ENTRY @V305731 01158000
STCM R1,7,BSCPCCW2+1 SAVE ADDRESS OF POLL ENTRY @V305731 01159000
ICM R1,10,NICPOLL GET POLLING CHARACTERS @V305731 01160000
ICM R1,5,NICPOLL SET UP DOUBLE POLLING CHARACTERS @V305731 01161000
STCM R1,15,BSCSEL SAVE ADDRESS OF REMOTE STATION @V305731 01162000
MVC BSCSEL+4(3),RGFINDEQ SET UP ENQ, INDEX VAL & EOT@VA03474 01163100
JOINPOLL EQU * CLEAR READ BUFFER @V346931 01163150
XC BSCRESP(256),BSCRESP CLEAR READ BUFFER @V346931 01164000
XC BSCRESP+256(L'BSCRESP+L'BSCREAD-256),BSCRESP+256 X01165000
THIS SUPPORT CODE APPLIES TO LINE ABOVE @V346931 01165500
MVC BSCRCVD(4),RGFACK0 SET RECEIVING & SENDING RESP @V305731 01166000
LA R1,BSCPCCW1 GET START OF POLLING CCW STRING @V305731 01167000
BR R3 RETURN @V305731 01168000
EJECT 01169000
* THE EXECUTE INSTRUCTION USED THE FOLLOWING INSTRUCTIONS 01170000
TROPUT TR 0(*-*,R2),0(R7) EXECUTED TRANSLATE OUTPUT @V305731 01171000
TRTTST TRT 0(*-*,R4),0(R7) TRANSLATE THE COMPOUND CHARACTER@V305798 01172000
MOVEAPL MVC 0(*-*,R5),0(R4) GET REMAINING CHARACTERS @V305798 01173000
SNGLCHAR EQU 256 OFFSET TO SINGLE CHARACTER XLATE TABLE @V387398 01173100
TXTTRAN TR 0(*-*,R1),SNGLCHAR(R7) TRANSLATE TEXT OUTPUT @V387398 01173200
SPACE 1 01174000
* STORAGE FOR DATA LINK CONTROL CHARACTERS 01175000
RGFEOT DC AL1(EOT) END OF TRANSMISSION CHARACTER @V305731 01176000
RGFNAK DC AL1(NAK) NEGATIVE RESPONSE CHARACTER @V305731 01177000
RGFENQ DC AL1(ENQ) INQUIRY CHARACTER @V305731 01178000
RGFSONL DC AL1(SOH,X'6C') HEADER FOR NON-TEXT MSG. (SOH %) @V305731 01179000
RGFWACK DC AL2(WACK) WAIT ACKNOWLEDGE CHARACTER @V305731 01180000
RGFRVI DC AL2(RVI) REVERSE INTERRUPT CHARACTER @V305731 01181000
RGFACK0 DC AL2(ACK0) POSITIVE ACKNOWLEDGE 0 CHARACTER @V305731 01182000
RGFACK1 DC AL2(ACK1) POSITIVE ACKNOWLEDGE 1 CHARACTER @V305731 01183000
SPACE 1 01184000
* CCWS FOR POLLING AND SELECTING REMOTE STATIONS 01185000
DS 0D @V305731 01186000
WRITSEL DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V305731 01187000
DC X'01',AL3(0),AL1(SILI+CC,X'03'),AL2(5) @V305731 01188000
DC X'02',AL3(0),AL1(SILI,X'05'),AL2(2) @V305731 01189000
SPACE 01190000
POLCCW DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V305731 01191000
DC X'09',AL3(0),AL1(SILI+CC,X'03'),AL2(7) @VA03474 01192100
DC X'03',AL3(0),AL1(SILI,X'07'),AL2(1) @V305731 01193000
DC X'02',AL3(0),AL1(SILI,X'0A'),AL2(BSCSIZE1) @V305731 01194000
SPACE 01195000
SPACE 2 01195100
* PSUEDO POLLING CCWS FOR 3275 DIAL OPERATION @V346931 01195200
S3275EOT DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V346931 01195300
DC X'02',AL3(0),AL1(SILI,X'0D'),AL2(2) @V346931 01195400
TWOCCW EQU (8*2) LENGTH OF TWO CCWS @V346931 01195500
SPACE 1 01195600
TICCCW DC X'08',AL3(0),AL1(SILI,X'00'),AL2(1) @V305731 01196000
WRT77RUN DC X'00',AL3(RUN3277+1),AL1(SILI+CC,X'10') @VA13944 01197100
DC AL2(RUN77L-1) @VA08995 01197200
SPACE 1 01198000
* 3270 REMOTE DATA AND STATUS MESSAGES 01199000
WRT77D DC AL1(WCC6,SBA,0,0) @V305731 01200000
WRT77DL EQU *-WRT77D @V305731 01201000
SPACE 01202000
HLD3277 DC AL1(WCC3,SBA,X'5D',X'6B',SF,ATTR2) @VA07171 01203100
HLDSTAT DC CL20'HOLDING' @V305731 01204000
HLD77L EQU *-HLD3277 @V305731 01205000
SPACE 01206000
MOR3277 DC AL1(WCC3,SBA,X'5D',X'6B',SF,ATTR2) @VA07171 01207100
MORSTAT DC CL20'MORE...' @V305731 01208000
MOR77L EQU *-MOR3277 @V305731 01209000
SPACE 01210000
RUN3277 DC AL1(WCC6,SBA,X'5B',X'5F',SF,ATTR7) @V305731 01211000
DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 01212000
RUNSTAT DC CL20'RUNNING',AL1(ETX) @V305731 01213000
RUN77L EQU *-RUN3277 @V305731 01214000
SPACE 01215000
CPR3277 DC AL1(WCC6,SBA,X'5B',X'5F',SF,ATTR7) @V305731 01216000
DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 01217000
DC CL20'CP READ' @V305731 01218000
CPR77L EQU *-CPR3277 @V305731 01219000
SPACE 01220000
VMREADS DC CL7'VM READ' @V305731 01221000
EJECT 01222000
SPACE 01223000
* RETURN INDEX VALUE FOR 3270 REMOTE SUPPORT 01224000
RTNNOCTL EQU X'00' RETURN TO GET NEXT CONTASK @V305731 01225000
RTNSRTRD EQU X'04' RETURN TO READ SECTION @V305731 01226000
RTNLGTST EQU X'08' RETURN TO LOGOFF USER @V305731 01227000
RTNRFCFM EQU X'0C' RETURN TO CONS. FUNCTION PROCESS @V305731 01228000
RTNSTMOR EQU X'10' RETURN TO MORE SECTION @V305731 01229000
RTNSETRJ EQU X'14' RETURN TO REJECT SECTION @V305731 01230000
RTNCPNAT EQU X'18' RETURN TO WRITE STATUS SECTION @V305731 01231000
RTNLOGOF EQU X'1C' RETURN TO LOGOFF USER SECTION @V305731 01232000
RTNBLDVM EQU X'20' RETURN TO BUILD VMBLOK SECTION @V305731 01233000
RTNFMTDN EQU X'24' RETURN TO FORMATS FINISH SECTION @V305731 01234000
RTNRETBF EQU X'28' RETURN TO WRITE COMPLETED SECTION@V305731 01235000
RTNRDEXT EQU X'2C' RETURN TO RELEASE READ BUFFER @V305731 01236000
RTNRVIRP EQU X'30' RETURN TO RVI RESPONSE SECTION @V305731 01237000
SPACE 1 01238000
* READ/WRITE OPERATION TYPES 01239000
IBBSELA EQU X'80' ADDRESSING/SELECTING A STATION @V305731 01240000
IBBWRITE EQU X'40' WRITE DATA TO A REMOTE STATION @V305731 01241000
IBBREAD EQU X'20' GENERAL POLLING OF STATIONS @V305731 01242000
IBBSPOLL EQU X'10' SPECIFIC POLLING TO A STATION @V305731 01243000
SPACE 1 01244000
* DATA-LINK CONTROL CHARACTERS FOR 3270 REMOTE SYSTEM 01245000
SOH EQU X'01' START OF HEADING @V305731 01246000
STX EQU X'02' START OF TEXT @V305731 01247000
ETX EQU X'03' END OF TEXT @V305731 01248000
ETB EQU X'26' END OF BLOCK @V305731 01249000
ESC EQU X'27' ESCAPE @V305731 01250000
EOT EQU X'37' END OF TRANSMISSION @V305731 01251000
ENQ EQU X'2D' ENQUIRY @V305731 01252000
NAK EQU X'3D' NEGATIVE ACKNOWLEDGMENT @V305731 01253000
WACK EQU X'106B' WAIT BEFORE TRANSMIT @V305731 01254000
RVI EQU X'107C' REVERSE INTERRUPT @V305731 01255000
ACK0 EQU X'1070' EVEN ACKNOWLEDGE @V305731 01256000
ACK1 EQU X'1061' ODD ACKNOWLEDGE @V305731 01257000
SPACE 01258000
* 3270 REMOTE SYSTEM COMMAND CODES 01259000
WRTCMD EQU X'F1' WRITE COMMAND CODE @V305731 01260000
EWRTCMD EQU X'F5' ERASE/WRITE COMMAND CODE @V305731 01261000
COPYCMD EQU X'F7' COPY COMMAND CODE @V305731 01262000
SPACE 1 01263000
* 3270 DISPLAY STATION ORDERS 01264000
SF EQU X'1D' START OF FIELD CONTROL @V305731 01265000
SBA EQU X'11' SET BUFFER ADDRESS @V305731 01266000
IC EQU X'13' INSERT CURSOR @V305731 01267000
RA EQU X'3C' REPEAT TO ADDRESS (CHAR) @V305731 01268000
EUA EQU X'12' ERASE UNPROTECTED TO ADDRESS @V305731 01269000
SPACE 1 01270000
* 3270 WRITE CONTROL CHARACTERS 01271000
WCC3 EQU X'C2' RESTORE KEYBOARD @VA07171 01271400
WCC4 EQU X'C6' RESTORE KEYBOARD, ALARM @VA07171 01271800
WCC5 EQU X'C5' WRITE CONTROL CHAR TO SOUND ALARM@VM03116 01272000
WCC6 EQU X'C3' W.C.C. TO RESTORE KEYBOARD @VM03116 01273000
WCC56 EQU X'C7' W.C.C. TO SOUND ALARM & RES. KEY.@VM03116 01274000
WCC8 EQU X'F8' W.C.C. TO PTR FOR 80-CHAR LINE @VM03116 01275000
ATTR2 EQU X'60' PROTECTED ATTRIBUTE CHARACTER @VM03116 01276000
ATTR7 EQU X'C1' MODIFIED DATA TAG ATTRIBUTE CHAR @VM03116 01277000
ATTR457 EQU X'4D' PROTECTED, NONDISPLAY & MOD. DATA@VM03116 01278000
SPACE 01279000
* TABLE OF LINE ADDRESS FOR 3277 DISPLAY STATION 01280000
TBL3277 DS 0D @V305731 01281000
DC X'4040C150C260C3F0C540C650C760' @V305731 01282000
DC X'C8F04A404B504C604DF04F405050' @V305731 01283000
DC X'D160D2F0D440D550D660D7F0D940' @V305731 01284000
DC X'5A505B605CF0' @V305731 01285000
SPACE 01286000
* MAINTENANCE AREA 01287000
RGFMAINT DC 8CL6'DMKRGB' THIS AREA IS USED FOR UPDATES @VA06170 01288000
EJECT 01289000
LTORG @V305731 01290000
EJECT 01291000
COPY NETWORK @V305731 01292000
EJECT 01293000
COPY BSCBLOKS @V305731 01294000
EJECT 01295000
COPY TIMER @V305731 01296000
SPACE 2 01297000
EJECT 01303000
COPY DEVTYPES @V305731 01304000
EJECT 01305000
COPY EQU @V305731 01306000
EJECT 01307000
COPY VBLOKS @V305731 01308000
EJECT 01309000
COPY RBLOKS @V305731 01310000
EJECT 01311000
COPY CONBUF @V305731 01312000
EJECT 01313000
COPY IOBLOKS @V305731 01314000
EJECT 01315000
COPY IOER @V305731 01316000
EJECT 01317000
COPY VMBLOK @V305731 01318000
EJECT 01319000
COPY SAVE @V305731 01320000
EJECT 01321000
PSA @V305731 01322000
EJECT 01323000
END 01324000