SSP TITLE 'DMKSSP (CP) VM/370 - RELEASE 6' 00001000 *. 00002000 * MODULE NAME - 00003000 * DMKSSP 00004000 * 00005000 * FUNCTION - 00006000 * STARTER SYSTEM MODULE. THIS MODULE WILL BUILD RCHBOLKS,RCUBLOK 00007000 * AND RDEVBLOKS NECESSARY TO CONFIGURATE A MIMNIMUM CP SYSTEM. 00008000 * FROM THE STARTER SYSTEM A REAL CP SYSTEM WILL BE CONFIGURATED 00009000 * BASED ON THE INSTALLATION'S REALIO DECK. 00010000 * 00011000 * ATTRIBUTES - 00012000 * 00013000 * NON-REENTRANT,NON-RESIDENT 00014000 * DMKSSP01 ENTERED AS A RESULT OF AN IPL OPERATION. 00015000 * 00016000 * ENTRY POINTS - 00017000 * DMKSSP01 - TO CONSTRUCT THE I/O BLOCKS FOR DMKIOS AND OTHER 00018000 * SYSTEM MODULES FOR A MINIMUM SYSTEM'S CONFIGURATION 00019000 * 00020000 * ENTRY CONDITIONS - 00021000 * 00022000 * DMKSAV - GIVES CONTROL TO DMKSSP01 00023000 * IPL DEVICE ADDRESS MUST BE STORED AT LOC X'002' 00024000 * 00025000 * 00026000 * EXIT CONDITIONS - 00027000 * 00028000 * DMKCPINT - TO INITALIZE THE REMAINDER OF THE SYSTEM. 00029000 * REGISTER 10 - MUST HAVE THE IPL DEVICE ADDRESS 00030000 * 00031000 * 00032000 * CALLS TO OTHER ROUTINES - 00033000 * 00034000 * DMKCVTHB - TO CONVERT THE DEVICE ADDRESS TO BINARY. 00035000 * DMKCVTBH - TO CONVERT THE DEVICE ADDRESS TO PRINTABLE HEX 00036000 * CHARACTERS. 00037000 * DMKCPINT - TO CONTINUE SYSTEMS INITALIZATION. 00038000 * 00039000 * 00040000 * ENTERNAL REFERENCES - 00041000 * 00042000 * DMKRIODV - ANCHOR TO THE FIRST REAL DEVICE BLOCK. 00043000 * DMKRIOCU - ANCHOR TO THE FIRST REAL CONTROL UNIT BLOCK. 00044000 * DMKRIOCH - ANCHOR TO THE FIRST REAL CHANNEL BLOCK. 00045000 * DMKRIOCN - ADDRESS OF THE SYSTEMS CONSOLE DEVICE. 00046000 * DMKRIOPR - ADDRESS OF THE SYSTEMS PRINTER DEVICE. 00047000 * DMKRIOPU - ADDRESS OF THE SYSTEMS PUNCH DEVICE. 00048000 * DMKRIORD - ADDRESS OF SYSTEMS READER DEVICE. 00049000 * DMKSYSNU - DISK ADDRESS ON NUCELUS. 00050000 * DMKRIO - ADDRESS OF REAL I/O CONTROL BLOCKS. 00051000 * 00052000 * 00053000 * TABLES / WORK AREAS - 00054000 * 00055000 * NONE - 00056000 * 00057000 * 00058000 * REGISTER USAGE - 00059000 * 00060000 * GPR1 = PARAMETER REGISTER. 00061000 * GPR2 = PARAMETER REGISTER. 00062000 * GPR5 = GENERAL BAL REGISTER. 00063000 * GPR6 = ADDRESS OF RCHBLOK. 00064000 * GPR7 = ADDRESS OF RCUBLOK. 00065000 * GPR8 = ADDRESS OF RDEVBLOK. 00066000 * GPR11 = ADDRESS OF DMKSSP (SECOND BASE REGISTER) 00067000 * GPR12 = ADDRESS OF DMKSSP (BASE REGISTER). 00068000 * 00069000 * 00070000 * OPERATION - 00071000 * 00072000 * THE PURPOSE OF THIS ROUTINE IS TO BUILD THE I/O BLOCKS 00073000 * SO THAT A SYSTEMS GENERATION CAN BE PERFORMED DESCRIBING 00074000 * THE INSTALLATIONS REQUIREMENTS. DMKSSP IS A BOOT STRAP 00075000 * MODULE TO ALLOW ANY SYSTEM TO BE BUILT. REAL I/O BLOCKS 00076000 * ARE BUILT, BUT NOT IN THE STANDARD MANNER. RATHER THEY ARE 00077000 * BUILT DYNAMICLLY OVERLAYING THE REALIO MODULE THAT 00078000 * WERE SHIPPED WITH THE STARTER SYSTEM. HOWEVER, THE SYSTEM WILL 00079000 * FUNCTION THE SAME WAY AS IF THEY WERE BUILT FROM A REALIO 00080000 * MACRO ASSEMBLY. 00081000 * 00082000 * 00083000 * MESSAGES - 00084000 * 00085000 * MESSAGES ARE IN THE FORM OF QUESTAINS PROMPTING THE OPERATOR 00086000 * TO ENTER THE DEVICE ADDRESS AND TYPE OF DEVICE. AT THE 00087000 * COMPLETION OF THE PROMPTING ROUTINE A MESSAGE WILL BE 00088000 * ISSUED STATING THAT " SYSTEMS DEFINITION IS COMPLETE ". 00089000 * 00090000 * 00091000 * THE FOLLOWING MESSAGES ARE ISSUED: 00092000 * 00093000 * ENTER PRINTER ADDRESS (CUU): 00094000 * ENTER DEVICE TYPE (1403,1443,3211,3203) : 00095000 * ENTER PUNCH ADDRESS (CUU): 00096000 * ENTER DEVICE TYPE (2540P,3525): 00097000 * ENTER READER ADDRESS (CUU): 00098000 * ENTER DEVICE TYPE (2501,2540R,3505): 00099000 * ENTER ADDRESS WHERE PID TAPE IS MOUNTED (CUU): 00100000 * ENTER DEVICE TYPE (CUU): 00101000 * ENTER ADDRESS WHERE SCRATCH TAPE IS MOUNTED (CUU): 00102000 * ENTER DEVICE TYPE (2401,2415,2420,3420): 00103000 * ENTER DEVICE ADDRESS WHERE SYSTEM'S RESIDENCE WILL BE BUILT 00104000 * ENTER DEVICE TYPE (2319,2314,3330,3340,3350,3375,3380,2305): 00105100 * *** DO YOU WISH TO RE-DEFINE YOU SYSTEM***(YES,NO): 00106000 * ***ERROR*** DEVICE HAS BEEN ALREADY ALLOCATED 00107000 * *** SYSTEM DEFINITION COMPLETE *** 00108000 * ARE THE ABOVE ENTRIES CORRECT (YES,NO): 00109000 * 00110000 *. 00111000 ********************************************************************* 00112000 EJECT 00113000 DMKSSP CSECT 00114000 EXTRN DMKCVTHB,DMKCPINT,DMKCVTBH 00115000 EXTRN DMKRIODV,DMKRIOCU,DMKRIOCH,DMKRIOCN,DMKRIOPR,DMKRIOPU 00116000 EXTRN DMKRIO,DMKSYSNU 00117000 EXTRN DMKRIORD 00118000 EXTRN DMKSYSTP @V407466 00118100 ENTRY DMKSSP01 @V200731 00119000 USING DMKSSP01+2,R12 SET UP ADDRESSABILITY FOR DMKSSP @V200731 00120000 USING DMKSSP01+4096,R11 SET UP SECOND BASE REGISTER @V200731 00121000 DMKSSP01 EQU * @V200731 00122000 BALR R12,R0 BASE OF DMKSSP @V200731 00123000 LA R12,0(,R12) CLEAR HIGH ORDER BYTE @V200731 00124000 LA R11,4094(,R12) GET THE SECOND BASE ADDRESS @V200731 00125000 USING SAVEAREA,R13 00126000 USING PSA,R0 00127000 SSM DISABLE DISABLE ALL INTERRUPTS @V56BDA8 00127500 MVC IONPSW,IOPSW SET UP NEW I/O PSW @VM08630 00128000 MVC MCNPSW,MCPSW SET UP NEW MACHINE CHECK PSW @VM08630 00129000 MVC PRNPSW,PCPSW SET UP NEW PROGRAM CHECK PSW @VM08630 00130000 LH R3,2 SYSRES DEVICE ADDRESS @V407466 00131100 STH R3,RESTBL SAVE FOR LATER @V407466 00131200 MVI RESTBL+2,CLASDASD MOVE DASD CLASS TO TABLE @V407466 00131300 L R3,=A(DMKSYSTP) PREPARE TO OBTAIN DEVICE @V407466 00131400 MVC RESTBL+3(1),1(R3) TYPE CODE FOR TABLE @V407466 00131500 STIDP CPUID GET CPU MODEL NUMBER @VA03010 00132000 CLI CPUVERSN,X'FF' IS THIS A VIRTUAL MACHINE ? @VA03010 00133000 BNE REALCPU NO, GO SET UP ASSUMED CONSOLE @VA03010 00134000 MVI CONTBL+1,X'09' SET CONSOLE ADDRESS TO (009) @VM08630 00135000 MVI CONTBL+2,CLASTERM SET CLASS TO TERMINAL @VM08630 00136000 MVI CONTBL+3,TYP3210 SET TYPE TO 3210/3215 @VM08630 00137000 B MSGHAND ALL SET FOR VIRTUAL MACHINE @VA03010 00138000 REALCPU MVI CONTBL+2,CLASGRAF SET CLASS TO GRAPHICS @VA03010 00139000 MVI CONTBL+3,TYP3066 SET TYPE TO 3066 @VA03010 00140000 MVI PARM,PARMGRP+PARMCLE SET IND. FOR GRAPHICS @VA03010 00141000 MSGHAND EQU * @VM08936 00142000 LA R9,LNGMSG GET ADDRESS OF SYSTEM HEADER @VM08936 00143000 LA R5,CONINT SPECIAL I/O ERROR ROUTINE FOR @V56BDA8 00143200 * 1ST I/O TO CONSOLE. IT HAS TO DETERMINE 00143400 * THE UNIT ADDRESS OF THE CONSOLE. 00143600 ST R5,IOBERROR PUT ERROR ROUTINE ADDR IN IOB. @V56BDA8 00143800 BAL R5,TYPEMSG GO PRINT THE MESSAGE @VM08936 00144000 LA R5,ERRHAND SWITCH TO NORMAL ERROR HANDLER. @V56BDA8 00145000 ST R5,IOBERROR SAVE ADDRESS OF ERROR HANDLER. @V56BDA8 00146000 L R9,=A(DMKRIOCN) GET POINTER TO CONSOLE ADDRESS @VM08936 00147000 L R9,0(,R9) GET CONSOLE ADDRESS @VM08936 00148000 N R9,XRIGHT16 IS THERE A CONSOLE ADDRESS @VM08936 00149000 BZ MAINLINE NO, GO BUILD REAL I/O DECK @VM08936 00150000 REDEFINE EQU * @VM08630 00151000 LA R9,LNGDEF GET ADDRESS OF SYSTEM DEFINITION @VM08630 00152000 BAL R5,TYPEMSG GO PRINT THE MESSAGE @VM08630 00153000 CLC INPUT(3),=C'NO ' DOES USER WANT A COMPLETE @V200731 00154000 * SYSTEM DEFINITION 00155000 BE XFRINIT NO, GO TO DMKCPI @V200731 00156000 CLC INPUT(4),=C'YES ' DOES USER WANT A COMPLETE @VM08630 00157000 * SYSTEM DEFINITION 00158000 BNE REDEFINE NO, GO ISSUE MESSAGE AGAIN @V200731 00159000 SPACE 1 00160000 MAINLINE LM R6,R8,DEVBLKS LOAD R6-8 WITH ADDR. OF I/O BLOCKS. 00161000 USING RCHBLOK,R6 RCHBLOK IN R6 00162000 USING RCUBLOK,R7 RCUBLOK IN R7 00163000 USING RDEVBLOK,R8 RDEVBLOK IN R8 00164000 ST R7,ALLOCU SAVE STARTING ADDR. OF FIRST RCUBLOK. 00165000 ST R8,ALLODEV SAVE STARTING ADDR. OF FIRST RDEVBLOK. 00166000 CLRCU CR R7,R6 ALL C.U.'S CLEARED YET ? 00167000 BE CLRCHAN YES., BRANCH 00168000 MVC RCUDVTBL(16*2),FFS32 CLEAR DEVICE INDEX TABLE @V200731 00169000 MVC RCUADD,FFS32 OVERLAY CONTROL UNIT ADDRESS @V200731 00170000 MVI RCUTYPE,00 ZERO OUT C.U. TYPE 00171000 SR R0,R0 00172000 LA R1,16 LOAD R1 TO CLEAR 16 CHANNELS @V200735 00173000 ST R0,RCUCHA ZERO CHANNEL PATH FOR C.U. "A" . 00174000 ST R0,RCUCHB ZERO CHANNEL PATH FOR C.U. "B" . 00175000 ST R0,RCUCHC FOR ALTERNATE PATH @V407466 00175100 ST R0,RCUCHD FOR ALTERNATE PATH @V407466 00175200 LA R7,RCUSIZE*8(,R7) BUMP TO GET NEXT C.U. 00176000 B CLRCU CLEAR REMAINING C.U. 00177000 SPACE 1 00178000 CLRCHAN EQU * @V200731 00179000 MVC RCHCUTBL(32*2),FFS32 CLEAR ALL CONTROL UNIT PTRS@V200731 00180000 LA R6,RCHSIZE*8(,R6) INCREMENT TO NEXT RCHBLOK. 00181000 BCT R1,CLRCHAN CONTINUE TO CLEAR ALL RCHBLOKS. 00182000 SPACE 1 00187000 SETCONS LH R1,CONTBL LOAD R1 W/ CONS. ADDR. @V200735 00188000 SR R2,R2 CLEAR REGISTER 2 @VM08630 00189000 ICM R2,3,CONTBL+2 GET CLASS AND TYPE FOR CONS. @VM08630 00190000 BAL R5,SCAN BUILD RCHBLOK,RCUBLOK & RDEVBLOK @VM08630 00191000 B DIEHERE BAD RETURN - LOAD WAIT STATE @VM08630 00192000 LH R1,RESTBL GET SYSTEM RESID. DEVICE ADDR. @VM08630 00193000 ICM R2,3,RESTBL+2 GET CLASS AND TYPE FOR DEVICE @VM08630 00194000 BAL R5,SCAN BUILD RCHBLOK,RCUBLOK & RDEVBLOK @VM08630 00195000 B DIEHERE BAD RETURN - LOAD WAIT STATE @VM08630 00196000 * 00197000 SPACE 1 00198000 * BEGINNING OF PROMPTING ROUTINE********* 00199000 PRTLAB LA R9,PRINTER OPERATOR MUST RESPOND TO @V200735 00200000 * PRINTER QUEST. 00201000 BAL R5,READADDR GO GET PRINTER ADDRESS AND TYPE. 00202000 BAL R5,SCAN LET SCAN BUILD THE BLOCKS. 00203000 B PRTLAB ERROR IF SCAN RETURNS HERE. 00204000 CALL DMKCVTBH 00205000 STCM R1,7,PRTLINE SAVE PRINTER ADDRESS. 00206000 PCHLAB LA R9,PUNCH OPERATOR MUST RESPOND TO PUNCH @V200735 00207000 * QUEST. 00208000 BAL R5,READADDR GO GET PUNCH ADDRESS AND TYPE. 00209000 BAL R5,SCAN LET SCAN BUILD THE BLOCKS. 00210000 B PCHLAB ERROR IF SCAN RETURNS HERE. 00211000 CALL DMKCVTBH 00212000 STCM R1,7,PCHLINE SAVE PUNCH ADDRESS. 00213000 RDRLAB LA R9,READER OPERATOR MUST RESPOND TO READER @V200735 00214000 * QUEST. 00215000 BAL R5,READADDR GET READER ADDRESS AND TYPE. 00216000 BAL R5,SCAN LET SCAN BUILD THE BLOCKS 00217000 B RDRLAB ERROR IF SCAN RETURNS HERE. 00218000 CALL DMKCVTBH 00219000 STCM R1,7,RDRLINE SAVE READER ADDRESS. 00220000 PIDLAB LA R9,PIDTAPE OPERATOR MUST MAKE REPLY. @V200735 00221000 BAL R5,READADDR GO GET ADDRESS AND TYPE OF TAPE DR. 00222000 BAL R5,SCAN GO TO SCAN TO BUILD BLOCKS. 00223000 B PIDLAB ERROR IF SCAN RETURNS HERE. 00224000 CALL DMKCVTBH 00225000 STCM R1,7,PIDLINE SAVE PID TAPE ADDRESS. 00226000 BKUPLAB LA R9,BKUPTAPE OPERATOR MUST MAKE REPLY @V200735 00227000 BAL R5,READADDR GET ADDR. AND TYPE OF SCRATCH TAPE. 00228000 BAL R5,SCAN LET SCAN BUILD THE BLOCKS. 00229000 B BKUPLAB ERROR IF SCAN RETURNS HERE. 00230000 CALL DMKCVTBH 00231000 STCM R1,7,TAPLINE SAVE ADDRESS OF BACKUP TAPE. 00232000 SYSLAB LA R9,SYSRES INFO. FOR NEW SYSTEM RESIDENCE @V200735 00233000 BAL R5,READADDR GET ADDRESS AND TYPE OF NEW SYS-RES.. 00234000 BAL R5,SCAN GO TO SCAN TO BUILD THE BLOCKS. 00235000 B SYSLAB ERROR IF SCAN RETURNS HERE. 00236000 CALL DMKCVTBH 00237000 STCM R1,7,RESLINE SAVE ADDRESS OF NEW SYS-RES. 00238000 *WORKLAB LA R9,WORKPACK TABLE FOR A SCRATCH PACK 00239000 * BAL R5,READADDR GET ADDRESS AND TYPE OF SCRATCH PACK. 00240000 * BAL R5,SCAN LET SCAN BUILD BLOCKS. 00241000 * B WORKLAB ERROR IF SCAN RETURNS HERE. 00242000 * CALL DMKCVTBH 00243000 * STCM R1,7,PACKLINE SAVE ADDRESS OF SCRATCH PACK. 00244000 WORKLAB EQU * **MAY REMOVE LATER ** 00245000 LA R9,BLKLEN GET ADDR. OF BLANK LINE. @V200735 00246000 BAL R5,TYPEMSG PRINT IT. 00247000 LA R9,COMPLEN GET ADDR. OF DEFINATION COMPLETED@V200735 00248000 BAL R5,TYPEMSG PRINT IT. 00249000 LA R9,BLKLEN GET ADDR. OF BLANK LINE @V200735 00250000 BAL R5,TYPEMSG PRINT IT. 00251000 LA R9,PRTLEN GET ADDR. OF PRINTER. @V200735 00252000 BAL R5,TYPEMSG PRINT IT. 00253000 LA R9,PCHLEN GET ADDR. OF PUNCH. @V200735 00254000 BAL R5,TYPEMSG PRINT IT. 00255000 LA R9,RDRLEN GET ADDR. OF READER. @V200735 00256000 BAL R5,TYPEMSG PRINT IT. 00257000 LA R9,PIDLEN GET ADDR. OF PID TAPE. @V200735 00258000 BAL R5,TYPEMSG PRINT IT. 00259000 LA R9,TAPLEN GET ADDR. OF BACKUP TAPE. @V200735 00260000 BAL R5,TYPEMSG PRINT IT. 00261000 LA R9,RESLEN GET ADDR. OF NEW SYS-RES. @V200735 00262000 BAL R5,TYPEMSG PRINT IT. 00263000 LA R9,PACKLEN GET ADDR. OF WORK PACK. @V200735 00264000 * BAL R5,TYPEMSG PRINT IT. 00265000 SPACE 1 00266000 DEFLAB LA R9,LASTLEN ASK OPERATOR IF ANY CHANGES @V200735 00267000 * NECESSARY 00268000 BAL R5,TYPEMSG 00269000 CLC INPUT(4),=C'YES ' DID HE REPLY YES ? 00270000 BE XFRINIT 00271000 CLC INPUT(3),=C'NO ' HE MAY WANT TO REDIFINE AGAIN. 00272000 BE MAINLINE YES., HE DOES. 00273000 B DEFLAB NO, ANSWERED WRONG @VM08630 00274000 SPACE 2 00275000 ********************************************************************** 00276000 * INTERRUPT HANDLER TO DETERMINE THE CONSOLE DEVICE 00277000 * ADDRESS ON THIS SYSTEM. 00278000 ********************************************************************** 00279000 SPACE 1 00280000 CONINT EQU * @VM08630 00281000 NI IOBFLAGS,255-IOBFERP ERR ROUTINE IS RESPONSIBLE@V56BDA8 00281500 * FOR TURNING THIS OFF. 00282000 TM IOBFLAGS,IOBFCC3 IS THE UNIT NOT OPERATIONAL? @V56BDA8 00282500 BO CONPARM YES, GO TEST FOR CORRECT DEVICE @VM08630 00283000 TM IOBCSW+4,UC IS THIS A UNIT CHECK? @V56BDA8 00284000 BZ ERRHAND NO, GO TO ERROR HANDLER @VM08630 00285000 CONPARM EQU * @VM08630 00286000 TM PARM,PARM321 IS THIS A 3215/3210/1052 @VM08630 00288000 BO TESTGRAP NOT 3210, TRY GRAPHICS @VA03010 00289000 CLI CONTBL+3,TYP3278 TRIED 3278 YET? @V60A6B6 00290000 BE TEST3210 TRY IT AS A 3210 NOW @V60A6B6 00290300 CLI CONTBL+3,TYP3277 TRIED 3277 YET? @VA03010 00290600 BE TEST3278 YES, TRY IT AS 3278 @V60A6B6 00291000 MVI CONTBL+3,TYP3277 SET TYPE TO 3277 @V60A6B6 00291080 OI PARM,PARM327 INDICATE 3277 @V60A6B6 00291160 ********************************************************************** 00291240 * THE FOLLOWING WILL ENSURE THAT THE LINE DISPLACEMENT FOR THE DATA * 00291320 * STREAMS FOR THE 3277 WILL BE CORRECT. THIS IS A 24 LINE SCREEN. * 00291400 ********************************************************************** 00291480 MVC LAB3270A+2(2),ADDR1 @V60A6B6 00291560 MVC LAB3270A+8(2),ADDR2 @V60A6B6 00291640 MVC LAB3270B+2(2),ADDR1 @V60A6B6 00291720 MVC LAB3270B+8(2),ADDR2 @V60A6B6 00291800 MVC LAB3270C+2(2),ADDR2 @V60A6B6 00291880 MVC LAB3270D+2(2),ADDR1 @V60A6B6 00291960 MVC LAB3270E+5(2),ADDR1 @V60A6B6 00292040 MVC LAB3270E+12(2),ADDR2 @V60A6B6 00292120 MVC ADDR5,ADDR6 ADDR TO CHECK FOR CURSOR MOVE @V60A6B6 00292200 MVC MAXLEN,LEN3270 @V60A6B6 00292280 B MSGHAND @V60A6B6 00292360 TEST3278 EQU * @V60A6B6 00292440 CLC LAB3270A+2(2),ADDR3 HAVE WE BEEN HERE YET? @V60A6B6 00292520 BE TEST3210 YES NOW TRY IT AS 3210 @V60A6B6 00292600 MVI CONTBL+3,TYP3278 THIS IS THE 3278 @V60A6B6 00292640 ********************************************************************** 00292680 * THE FOLLOWING WILL ENSURE THAT THE LINE DISPLACEMENT FOR THE DATA * 00292760 * STREAMS FOR THE 3278 WILL BE CORRECT. THIS IS A 20 LINE SCREEN. * 00292840 ********************************************************************** 00292920 MVC LAB3270A+2(2),ADDR3 @V60A6B6 00293000 MVC LAB3270A+8(2),ADDR4 @V60A6B6 00293080 MVC LAB3270B+2(2),ADDR3 @V60A6B6 00293160 MVC LAB3270B+8(2),ADDR4 @V60A6B6 00293240 MVC LAB3270C+2(2),ADDR4 @V60A6B6 00293320 MVC LAB3270D+2(2),ADDR3 @V60A6B6 00293400 MVC LAB3270E+5(2),ADDR3 @V60A6B6 00293480 MVC LAB3270E+12(2),ADDR4 @V60A6B6 00293560 MVC ADDR5,ADDR7 ADDR TO CHECK FOR CURSOR MOVE @V60A6B6 00293640 MVC MAXLEN,LEN3278 @V60A6B6 00293720 B MSGHAND TRY THIS COMBO @VA03010 00294000 TESTGRAP EQU * @VA03010 00295000 CLI CONTBL+1,X'1F' TRIED X'01F' YET? @VA03010 00296000 BE SSPLPSW YES, GO WAIT FOR INTERRUPT @VA03010 00297000 MVI CONTBL+1,X'1F' SET ADDRESS TO X'01F' @VA03010 00298000 MVI CONTBL+2,CLASGRAF SET CLASS TO GRAPHICS @VA03010 00299000 MVI CONTBL+3,TYP3066 SET TYPE TO 3066 @VA03010 00300000 MVI PARM,PARMGRP+PARMCLE RESET IND. FOR GRAPHICS @VA03010 00301000 B MSGHAND TRY IT THIS WAY @VA03010 00302000 TEST3210 EQU * @VA03010 00303000 MVI CONTBL+2,CLASTERM SET CLASS TO TERM @VA03010 00304000 MVI CONTBL+3,TYP3210 SET TYPE TO 3210/3215 @VA03010 00305000 MVI PARM,PARM321 RESET IND. FOR TERM @VA03010 00306000 B MSGHAND TRY THIS COMBO @VA03010 00307000 SSPLPSW EQU * @VA03010 00308000 MVI CONTBL+2,CLASGRAF SET CLASS FOR GRAPHICS @VA03010 00309000 MVI CONTBL+3,TYP3066 SET TYPE FOR 3066 @VA03010 00310000 MVI PARM,PARMGRP+PARMCLE RESET IND. FOR GRAPHICS @VA03010 00311000 L R0,IOBERROR SAVE ERROR ROUTINE ADDR IN R0. @V56BDA8 00311800 SR R1,R1 ZERO... @V56BDA8 00312600 ST R1,IOBERROR INDICATES NO ERROR ROUTINE. @V56BDA8 00313400 BAL R14,WAITANY WAIT FOR INTERRUPT (TO IDENTIFY @V56BDA8 00314200 * CONSOLE), THEN RETURN HERE. 00315000 ST R0,IOBERROR RESTORE ADDR OF ERROR ROUTINE. @V56BDA8 00315800 MVC CONTBL(2),IOOPSW+2 GET THE DEVICE ADDRESS @VM08630 00317000 B MSGHAND GO TRY THIS ADDRESS @VM08936 00318000 SPACE 2 00319000 ********************************************************************** 00320000 * ON ENTRY REGISTER 9 CONTAINS ADDRESS OF ARGURMENT LIST 00321000 ********************************************************************** 00322000 SPACE 1 00323000 READADDR EQU * @VM08630 00324000 SLR R2,R2 CLEAR LENGTH REGISTER @V200731 00325000 IC R2,0(,R9) GET LENGTH OF LINE TO OUTPUT @V200731 00326000 LA R4,1(,R9) GET THE DATA ADDRESS @V200731 00327000 OI PARM,PARMNAUT INDICATE NO CARRIAGE RETURN @V200731 00328000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00329000 MVC INPUT,SPACES CLEAR INPUT AREA TO BLANKS @V200735 00330000 LA R4,INPUT ADDRESS OF INPUT DATA FIELD @V200731 00331000 LA R2,L'INPUT NUMBER OF BYTES ALLOWED TO READ @V200731 00332000 OI PARM,PARMREA SET THE READ INDICATOR @VM08630 00333000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00334000 OC INPUT,SPACES TRANSLATE TO UPPERCASE @V200731 00335000 CLI INPUT+3,X'40' DID OPERATOR TYPE MORE THAN 3 CHAR'S. 00336000 BNE READADDR YES., RE-ISSUE PRINT LINE. 00337000 LA R0,3 ONLY CHECK FOR 3 CHAR. 00338000 LTR R0,R0 FORCE CONDITION CODE TO NON-ZERO. 00339000 LA R1,INPUT SET R1 TO POINT TO INPUT LINE. 00340000 CALL DMKCVTHB CALL CONVERT TO TRANS THIS DATA. 00341000 BC 7,READADDR IF CONVERT HAS ERROR RE-ISSUE LINE. 00342000 C R1,F4096 ADDR. > THAN X'FFF' @V200735 00343000 BH READADDR YES., BRANCH 00344000 LR R13,R1 SAVE DEVICE ADDRESS IN GPR-13 @V200735 00345000 READTYPE SLR R3,R3 CLEAR @V200735 00346000 IC R3,0(,R9) GET LEMGTH OF 2'ND OUTPUT LINE @V200735 00347000 ALR R3,R9 ADD TO IT THE BEGINNING OF PERM @V200735 00348000 * LIST 00349000 LA R3,1(,R3) BYPASS BYTE THAT REPRESENTS @V200735 00350000 * LENGTH 00351000 LR R9,R3 NOW SAVE NEWLY DEVELOPED ADDRESS @V200735 00352000 SLR R2,R2 CLEAR LENGTH REGISTER @V200731 00353000 SIO2 EQU * @V200731 00354000 IC R2,0(,R9) GET LENGTH OF 2'ND LINE OF OUTPUT@V200731 00355000 LA R4,1(,R9) ADDRESS OF OUTPUT LINE @V200731 00356000 OI PARM,PARMNAUT INDICATE NO CARRIAGE RETURN @V200731 00357000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00358000 MVC INPUT,SPACES CLEAR INPUT AREA TO BLANKS @V200735 00359000 LA R2,L'INPUT LENGTH OF MAXIMUM BYTE COUNT @V200731 00360000 LA R4,INPUT GET DATA ADDRESS OF INPUT LINE @V200731 00361000 OI PARM,PARMREA SET THE READ INDICATOR @VM08630 00362000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00363000 SPACE 2 00364000 *********************************************************************** 00365000 ** CHECK FOR PROPER DEVICE TYPE BEFORE RETURNING TO MAIN LINE 00366000 ** CODE. 00367000 *********************************************************************** 00368000 SPACE 1 00369000 SR R3,R3 CLEAR REGISTER 3 @VM08630 00370000 IC R3,0(,R9) FIND END OF PRINTED DATA @VM08630 00371000 ALR R3,R9 MUST ADD BASE ADDRESS TO LENGTH @VM08630 00372000 LA R3,1(,R3) BYPASS LENGTH FIELD @VM08630 00373000 OC INPUT,SPACES TRANSLATE TO UPPERCASE @VM08630 00374000 TRYTYPE EQU * @VM08630 00375000 CLC 0(5,R3),INPUT DOES RESPONE MATCH LIST ARGURMENT@VM08630 00376000 BNE CHKTYPE NO, GO CHECK FOR END OF LIST @VM08630 00377000 CLI 4(R3),X'40' IS THIS A BLANK FIELD ? @VM08630 00378000 BE GOTYPE YES, GO GET DEV. TYPE AND CLASS @VM08630 00379000 CLI INPUT+5,X'40' IS THIS A BLANK FIELD ? @VM08630 00380000 BNE CHKTYPE NO, GO CHECK FOR END OF LIST @VM08630 00381000 GOTYPE EQU * @VM08630 00382000 LH R2,5(,R3) GET DEVICE TYPE AND CLASS @VM08630 00383000 LR R1,R13 GET THE DEVICE ADDRESS @VM08630 00384000 BR R5 RETURN TO INLINE CODE @VM08630 00385000 CHKTYPE EQU * @VM08630 00386000 CLC 0(5,R3),FFS32 END OF LIST FOR DEVICE TYPE @VM08630 00387000 BE SIO2 YES, GO PRINT MESSAGE AGAIN @VM08630 00388000 LA R3,7(,R3) GET ADDR. OF NEXT DEVICE TYPE @VM08630 00389000 B TRYTYPE GO CHECK NEXT DEVICE TYPE @VM08630 00390000 EJECT 00391000 * THE SCAN ROUTINE IS USED TO FIND OR BUILD CONTROL BLOCKS 00392000 * NECESSARY FOR "IOS" TO OPERATE ON THE STARTER SYSTEM. 00393000 * THE FOLLOWING APPLIES TO THIS ROUTINE. 00394000 * 00395000 * 1. LOCATE A RCHBLOK. 00396000 * 2. IF A RCUBLOK IS ALREADY ALLOCATED FIND THE INDEX POINTER 00397000 * TO THE RDEVBLOK. IF A RDEVBLOK ALREADY EXIST'S ISSUE AN 00398000 * ERROR MESSAGE TO THE OPERATOR THAT HE HAS GIVEN US 00399000 * THIS ADDRESS BEFORE. OTHERWISE GET THE NEXT AVAILABLE 00400000 * RDEVBLOK AND STORE ITS ADDRESS DISPLACEMENT INTO 00401000 * RCUBLOK. 00402000 * 3. IF A RCUBLOK IS NOT ALLOCATED IN THE RCHBLOK GET 00403000 * THE NEXT AVAILABLE RCUBLOK AND CHAIN IT TO A RCHBLOK, 00404000 * ALSO LOCATE THE NEXT RDEVBLOK AND CHAIN IT INTO THE 00405000 * RCUBLOK THAT WAS JUST ALLOCATED. 00406000 * 00407000 * 00408000 SCAN EQU * @V200731 00409000 LM R7,R8,FFS32 NULL R7 - R8 BEFORE SCAN TEST @V200731 00410000 LA R6,X'F00' ISOLATE THE CHANNEL BITS 00411000 NR R6,R1 FROM THE DEVICE-ADDRESS 00412000 SRL R6,7 CHANNEL ADDRESS * 2 00413000 A R6,ARIOCT ADD CHANNEL TABLE ADDRESS 00414000 LH R6,0(,R6) LOAD RCHBLOK INDEX 00415000 LTR R6,R6 DOES CHANNEL EXIST ? 00416000 BM DIEHERE DIE IF CHANNEL NOT FOUND @V200735 00417000 A R6,ARIOCH COMPUTE RCHBLOK ADDRESS 00418000 LA R7,X'0F8' ISOLATE THE CONTROL-UNIT BITS 00419000 NR R7,R1 FROM THE DEVICE-ADDRESS 00420000 SRL R7,2 CU ADDRESS * 2 00421000 LH R7,RCHCUTBL(R7) LOAD CONTROL UNIT INDEX 00422000 LTR R7,R7 DOES CONTROL UNIT EXIST ? 00423000 BM TESTRTN NO - ONE WILL BE BUILD 00424000 A R7,ARIOCU COMPUTE RCUBLOK ADDRESS 00425000 LA R8,X'00F' ISOLATE THE DEVICE BITS 00426000 NR R8,R1 FROM THE DEVICE-ADDRESS 00427000 AR R8,R8 DEVICE ADDRESS * 2 00428000 LH R8,RCUDVTBL(R8) LOAD RDEVBLOK INDEX 00429000 LTR R8,R8 DOES DEVICE EXIST ? 00430000 BM TESTRTN NO - ONE WILL BE BUILD 00431000 SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00432000 A R8,ARIODV COMPUTE RDEVBLOK ADDRESS 00433000 SPACE 00434000 TESTRTN LTR R8,R8 SHOULDN'T HAVE FOUND A RDEVBLOK 00435000 BNM WNGDEV ERROR IF ONE FOUND. 00436000 LTR R7,R7 WAS A RCUBLOK FOUND ? 00437000 BNM GETDEV YES., NO NEED TO BUILD ONE. 00438000 L R7,ALLOCU GET NEXT AVAILABLE RCUBLOK. 00439000 LR R3,R7 SAVE ADDRESS IN R3. 00440000 LA R3,RCUSIZE*8(,R3) MAKE R3 POINT TO NEXT AVAIL. C.U. 00441000 ST R3,ALLOCU SAVE ADDRESS FOR NEXT ENTRY INTO SCAN. 00442000 SPACE 1 00443000 GETDEV L R8,ALLODEV LOAD R8 W/ NEXT AVAILABLE RDEVBLOK ADDR. 00444000 LR R3,R8 SAVE ADDR IN R3 00445000 LA R3,RDEVSIZE*8(,R3) BUMP R3 TO NEXT AVAIL. RDEVBLOK. 00446000 ST R3,ALLODEV SAVE ADDR. FOR NEXT ENTRY INTO SCAN. 00447000 STH R1,RCUADD STORE DEVICE ADDR. IN REAL C.U. BLOCK. 00448000 NC RCUADD,=X'00F8' REMOVE CHAN. AND DEV. BIT PORTION. 00449000 ST R6,RCUCHA STORE ADDRESS OF REAL CHANNEL BLOCK. 00450000 STH R1,RDEVADD STORE DEV. ADDR. IN REAL DEVICE BLOCK. 00451000 NC RDEVADD,=X'000F' REMOVE CHAN. AND C.U. BIT'S. 00452000 ST R7,RDEVCUA STORE ADDRESS OF REAL C.U. BLOCK. 00453000 STH R2,RDEVTYPC PUT IN CLASS/TYPE. 00454000 CLI RDEVTYPC,CLASGRAF GRAPHICS DEVICE? @V60A6B6 00454030 BNE NOTGRAF NO, CAN'T BE A 327X @V60A6B6 00454060 MVI RDEVMDL,X'02' ASSUME MODEL2 3277 @V60A6B6 00454100 L R4,=V(DMKGRTB) ASSUME 3277 TYPE @V60A6B6 00454200 CLI RDEVTYPE,X01 IS THIS A 3278 ?? @V60A6B6 00454300 BNE NON3278 NO MUST BE 3277 TYPE @V60A6B6 00454400 MVI RDEVMDL,X2A NEED A MODEL NUMBER 2A @V60A6B6 00454500 MVI RDEVGRTY,X0C NEED DISPLACEMENT FOR 3278 @V60A6B6 00454600 L R4,=V(DMKGRWTB) GET THE CORRECT GRTBLOK @V60A6B6 00454700 NON3278 EQU * @V60A6B6 00454800 ST R4,RDEVGRTB STORE GRTBLOK IN RDEVBOLK @V60A6B6 00454900 NOTGRAF DS 0H @V60A6B6 00454930 LR R3,R8 LOAD R3 W/ADDR. OF RDEVBLOK. 00455000 S R3,=A(DMKRIODV) FIND THE DISPLACEMENT VALUE. 00456000 SRL R3,3(0) CONVERT TO DOUBLE-WORD INDEX @V200820 00457000 * 00458000 SR R4,R4 00459000 IC R4,RDEVADD+1 PICK UP ONLY DEVICE PORTION OF DEV. ADDR 00460000 SLL R4,1 DOUBLE IT 00461000 STH R3,RCUDVTBL(R4) SAVE DISP. OF RDEVBLOK IN RCUBLOK 00462000 LR R3,R7 LOAD R3 W/ADDR OF RCUBLOK. 00463000 S R3,=A(DMKRIOCU) FIND DISPLACEMENT OF REAL C.U.BLOK 00464000 SR R4,R4 ZERO R4. 00465000 IC R4,RCUADD+1 GET C.U. ADDRESS. 00466000 SRL R4,2 DOUBLE IT. 00467000 STH R3,RCHCUTBL(R4) STORE ADDR. OF RCUBLOK IN RCHBLOK. 00468000 LR R3,R8 LOAD R3 W/ADDR. OF RDEVBLOK. 00469000 S R3,=A(DMKRIODV) CALC DISP. OF RDEVBLOK. 00470000 SRL R3,3(0) CONVERT TO DOUBLE-WORD INDEX @V200820 00471000 CLI RDEVTYPC,CLASTERM CONSOLE A 3210/3215 / @V200735 00472000 BE SAVCON YES - @V200735 00473000 CLI RDEVTYPC,CLASGRAF CONSOLE A 3277/3066 / @V200735 00474000 BE SAVCON YES., BRANCH. 00475000 CLI RDEVTYPC,CLASURO IS IT A UNIT RECORD OUTPUT DEV ?? 00476000 BNE NOTURO NO., BRANCH. 00477000 MVI RDEVCLAS,C'A' MAKE CLASS = A 00478000 TM RDEVTYPE,TYPPUN DEVICE A PUNCH ?? 00479000 BO SAVPCH YES., BRANCH. 00480000 TM RDEVTYPE,TYPPRT DEVICE A PRINTER ? 00481000 BO SAVPRT YES., BRANCH. 00482000 NOTURO CLI RDEVTYPC,CLASURI CLASS EQUAL UNIT RECORD INPUT 00483000 BNE 4(,R5) NO, RETURN 00484000 L R4,=A(DMKRIORD) ADDRESS OF SPOOL PRINTER 00485000 STH R3,4(,R4) 00486000 STH R1,6(,R4) 00487000 BC 15,4(R5) RETURN. 00488000 SAVCON L R4,=A(DMKRIOCN) STORE RE-COMPUTED CONSOLE ADDRESS. 00489000 STH R3,0(,R4) 00490000 STH R1,2(,R4) 00491000 B 4(,R5) RETURN. 00492000 SAVPCH L R4,=A(DMKRIOPU) STORE RE-COMPUTED PUNCH ADDRESS. 00493000 STH R3,4(,R4) 00494000 STH R1,6(,R4) 00495000 B 4(,R5) RETURN. 00496000 SAVPRT L R4,=A(DMKRIOPR) STORE RE-COMPUTED PRINTER ADDRESS. 00497000 STH R3,4(,R4) 00498000 STH R1,6(,R4) 00499000 CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER? @V60B9BA 00499100 BNE SAVPRT1 XFER IF NOT @V60B9BA 00499200 MVC RDEVIMAG,=C'IMAG3800' DEFAULT IMAGE LIBRARY @V60B9BA 00499300 MVC RDEVXSEP,=C'GF10' DEFAULT XLATE FOR SEP @V60B9BA 00499400 XC RDEVDELP,RDEVDELP ZERO THE DEL PURGE ANCHOR @VMI0092 00499425 XC RDEVEXTN,RDEVEXTN ZERO THE RSPXBLOK POINTER @VMI0092 00499450 MVC RDEVOVLY,BLANKS BLANK OUT THE OVERLAY @VMI0092 00499475 MVI RDEVFSEP,6 DEFAULT FOR SEP FCB @V60B9BA 00499500 MVI RDEVMAXP,1 DEFAULT SIZE OF DEL PURGE Q@V60B9BA 00499600 MVI RDEVFTR,FTREXTSN EXTENDED SENSE INFO HERE @V60B9BA 00499700 MVI RDEVCURP,22 ASSUME 11-INCH PAPER @VMI0091 00499750 B 4(,R5) RETURN @V60B9BA 00499800 SAVPRT1 DS 0H @V60B9BA 00499900 MVI RDEVFTR,FTRUCS ASSUME IT HAS UCS FEATURE. 00500000 B 4(,R5) RETURN 00501000 * 00502000 * 00503000 TYPEMSG EQU * @V200731 00504000 SLR R2,R2 CLEAR LENGTH REGISTER @V200731 00505000 IC R2,0(,R9) GET LENGTH OF OUTPUT LINE @V200731 00506000 N R2,=F'127' CLEAR HIGH ORDER BIT FOR NO READ @V200731 00507000 LA R4,1(,R9) GET ADDRESS OF OUTPUT DATA @V200731 00508000 TM 0(R9),X'80' IS A READ ALSO REQUESTED @V200731 00509000 BO *+8 NO @V200731 00510000 OI PARM,PARMNAUT SET NO CARRIAGE RETURN @V200731 00511000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00512000 TM 0(R9),X'80' IS A READ NECESSARY @V200735 00513000 BCR 1,R5 NO - RETURN TO CALLER @V200735 00514000 MVC INPUT,SPACES CLEAR INPUT AREA TO BLANKS @V200731 00515000 LA R2,L'INPUT GET THE LENGTH OF THE INPUT DATA @V200731 00516000 LA R4,INPUT ADDRESS OF DATA INPUT AREA @V200731 00517000 OI PARM,PARMREA SET THE READ INDICATOR @VM08630 00518000 BAL R14,REAWRITE GO TO THE READ/WRITE SECTION @V200731 00519000 OC INPUT,SPACES TRANSLATE TO UPPERCASE BEFORE RETURNING 00520000 BR R5 TO CALLER. 00521000 * 00522000 * 00523000 WNGDEV CLI RDEVTYPC,CLASTAPE IS DEVICE A TAPE DRIVE ? 00524000 BE 4(,R5) IF YES, DON'T PROVIDE ERROR MSG 00525000 LA R9,LNGDEV TELL OPERATOR DEVICE HAS BEEN @V200735 00526000 * ALLOCATED 00527000 B TYPEMSG RETURN FROM "TYPEMSG" WILL CAUSE THE 00528000 * ORIGINAL LINE TO BE RE-ISSUED. 00529000 XFRINIT EQU * @V200731 00530000 L R9,=A(DMKSYSNU) DMKSYSNU IS ADDR. OF NUCELUS @V200731 00536000 * CONSTANT 00537000 LH R9,0(,R9) PICK UP WHERE NUCELUS IS ON 00538000 STH R9,CYL DISK AND PREPARE TO WRITE OUT 00539000 L R2,=A(DMKRIO) GET ADDRESS OF REAL I0O BLOKS 00540000 SRL R2,12 SHIFT 11 FOR INDEX FACTOR, +1... @V56BDA8 00540600 ALR R2,R2 NOW SHIFT BACK TO 11 & BIT31 IS 0@V56BDA8 00541200 LH R3,PAGE2314(R2) HEAD AND RECORD FOR 2314 @V2A2029 00542000 CLI RESTBL+3,TYP2314 DEVICE TYPE 2314 ? @V2A2029 00543000 BE RESHEAD YES, GO SAVE HEAD ID @V2A2029 00544000 LH R3,PAGE3340(R2) HEAD AND RECORD FOR 3340 @V2A2029 00545000 CLI RESTBL+3,TYP3340 DEVICE TYPE 3340 ? @V2A2029 00546000 BE RESHEAD YES, SAVE HEAD ID @V2A2029 00547000 LH R3,PAGE3350(R2) HEAD AND RECORD FOR 3350 @V304498 00548000 CLI RESTBL+3,TYP3350 DEVICE TYPE 3350 ? @V304498 00549000 BE RESHEAD YES, SAVE HEAD ID @V304498 00550000 LH R3,PAGE3375(R2) Head and record for 3375 HRC106DK 00550100 CLI RESTBL+3,TYP3375 device type 3375 ? HRC106DK 00550200 BE RESHEAD Yes, save head id HRC106DK 00550300 LH R3,PAGE3380(R2) Head and record for 3380 HRC106DK 00550400 CLI RESTBL+3,TYP3380 device type 3380 ? HRC106DK 00550500 BE RESHEAD Yes, save head id HRC106DK 00550600 LH R3,PAGE3330(R2) HEAD AND RECORD FOR 3330 @V2A2029 00551000 RESHEAD EQU * @V200731 00552000 STCM R3,3,HEAD+1 STORE IT IN CHANNEL PROGRAM @V200731 00553000 SPACE 00554000 PAGESIO EQU * @V200731 00555000 LA R1,DSKPROG GET THE PAGE THAT CONTAINS @V200731 00556000 * THE REAL I/O DESCRIPTION 00557000 LH R3,2 GET THE DEVICE ADDRESS @V200731 00558000 LA R14,ERRDASD ADDR OF DASD ERR RECOVERY ROUTINE@V56BDA8 00558300 ST R14,IOBERROR PUT IT IN THE IOB. @V56BDA8 00558600 BAL R14,STARTIO GO ISSUE SIO @V200731 00559000 TM IOBFLAGS,IOBFATAL NON-RECOVERABLE ERR ON DASD? @V56BDA8 00559200 BO DIEHERE YES. TERMINATE. @V56BDA8 00559400 LA R14,ERRHAND NORMAL ERROR RECOVERY ROUTINE. @V56BDA8 00559600 ST R14,IOBERROR PUT BACK IN IOB. @V56BDA8 00559800 LR R10,R3 GET THE IPL DEVICE ADDRESS FOR @V200731 00560000 * DMKCPI - IT MUST BE IN REGISTER 10 00561000 L R12,=A(DMKCPINT) GET ADDRESS OF DMKCPI @V200731 00562000 BR R12 GO INITIALIZE VM/370 @V200731 00563000 ******************************************************************** 00564000 EJECT 00565000 ********************************************************************* 00566000 REAWRITE EQU * @V200731 00567000 STM R14,R5,GRAPHSAV SAVE THE REGISTERS @V200731 00568000 LA R14,RETWORD RETURN ADDRESS FROM SIO @VM08630 00569000 LH R3,CONTBL GET THE CONSOLE ADDRESS @VM08630 00570000 CLI CPUVERSN,X'FF' IS THIS A VIRTUAL MACHINE ? @VM08630 00571000 BNE TESTCNS NO, GO TEST CONSOLE ADDRESS @VM08630 00572000 L R3,FFS32 GET ALL FFS @VM08630 00573000 DC X'83350024' GET CONSOLE ADDRESS (VIRTUAL) @VM08630 00574000 BO DIEHERE CONSOLE ADDRESS DOESN'T EXIST @VM08630 00575000 LA R3,0(R3) STRIP HIGH ORDER BYTE @VA10009 00575500 STH R3,CONTBL SAVE VIRTUAL CONSOLE ADDRESS @VM08630 00576000 B CNS3210 GO TO 3210/3215 SUPPORT @VM08630 00577000 TESTCNS EQU * @VM08630 00578000 TM PARM,PARMGRP IS SYSTEM CONSOLE A 3270/3066 @VM08630 00579000 BO GRAPHID YES, GO TO GRAPHIC SUPPORT @VM08630 00580000 CNS3210 EQU * @VM08540 00581000 TM PARM,PARMREA IS THIS A READ REQUEST @V200731 00582000 BZ WRT10 NO, GO TO WRITE SECTION @V200731 00583000 STCM R4,B'0111',RD3210+1 RESOLVE CCW DATA ADDRESS @V200731 00584000 STH R2,RD3210+6 STORE THE CCW COUNT @V200731 00585000 LA R1,RD3210 ADDRESS OF CHANNEL PROGRAM @V200731 00586000 B STARTIO GO DO I/O OPERATION @V200731 00587000 SPACE 00588000 WRT10 EQU * @V200731 00589000 TM PARM,PARMNAUT IS A CARRIAGE RETURN NECESSARY @V200731 00590000 BZ WRT10CR YES, GO GET CCWS @V200731 00591000 STCM R4,B'0111',WRT3210+1 RESOLVE CCW DATA ADDRESS @V200731 00592000 STH R2,WRT3210+6 STORE CCW COUNT @V200731 00593000 LA R1,WRT3210 ADDRESS OF CHANNEL PROGRAM @V200731 00594000 B STARTIO GO TO THE I/O HANDLER @V200731 00595000 WRT10CR EQU * @V200731 00596000 STCM R4,B'0111',WRT3210A+1 RESOLVE CCW DATA ADDRESS @V200731 00597000 STH R2,WRT3210A+6 STORE CCW COUNT @V200731 00598000 LA R1,WRT3210A ADDRESS OF CHANNEL PROGRAM @V200731 00599000 B STARTIO GO TO THE I/O HANDLER @V200731 00600000 GRAPHID EQU * @VM08630 00601000 TM PARM,PARMREA IS THIS A READ REQUEST @V200731 00602000 BZ WRT66 NO, GO TO WRITE SECTION @V200731 00603000 READGRF EQU * @V200731 00604000 LA R14,GRAPHIC0 RETURN ADDRESS FROM I/O HANDLER @V200731 00605000 OI PARM,PARMATT SET THE ATTENTION REQUEST @VM08630 00606000 XC BLNKLINE(140),BLNKLINE CLEAR READ AREA @VM08630 00607000 XC RDMIDATA(3),RDMIDATA CLEAR THE READ DATA FIELD @V200731 00608000 MVC CPXYSTAT(20),REALABEL @V200731 00609000 LA R1,REQREAD GET THE ADDRESS OF THE CHANNEL @V200731 00610000 * PROGRAM 00611000 TM PARM,PARM327 IS THIS A 3270 DEVICE ? @VM08630 00612000 BZ STARTIO NO, GO TO I/O HANDLER @VM08630 00613000 LA R1,REQREAD1 GET THE ADDRESS OF THE CHANNEL @V200731 00614000 * PROGRAM 00615000 B STARTIO GO TO THE I/O HANDLER @V200731 00616000 SPACE 2 00617000 WRT66 EQU * @V200731 00618000 MVC CPXYSTAT(20),RUNLABEL @V200731 00619000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00620000 BO GRF3270 NO, GO TO 3270 SUPPORT @VM08630 00621000 STCM R4,B'0111',WRT3066+1 GET THE MESSAGE ADDRESS @V200731 00622000 STH R2,WRT3066+6 SAVE THE DATA COUNT IN THE CCW @V200731 00623000 LA R1,WRTCRTXY GET THE ADDRESS OF THE CHANNEL @V200731 00624000 * PROGRAM 00625000 TM PARM,PARMCLE IS THE ERASE INDICATOR ON ? @V200731 00626000 BZ GRAPWRT NO, GO TO SIO SECTION @V200731 00627000 LA R1,ERSE3066 GET THE ADDRESS OF THE CHANNEL @V200731 00628000 * PROGRAM 00629000 MVI SBADDR,X'00' CLEAR LINE POINTER @V200731 00630000 B GRAPWRT GO GET RETURN ADDRESS @V200731 00631000 GRF3270 EQU * @V200731 00632000 SR R14,R14 CLEAR REGISTER 14 @V200731 00633000 LA R1,WRTCRT70 GET THE ADDRESS OF THE CHANNEL @V200731 00634000 * PROGRAM 00635000 TM PARM,PARMCLE IS THE ERASE INDICATOR ON ? @V200731 00636000 BZ NOCL3270 NO, DON'T CLEAR SCREEN @V200731 00637000 MVI SBADDR,X'00' CLEAR LINE POINTER @V200731 00638000 LA R1,ERSE3270 GET THE ADDRESS OF THE CHANNEL @V200731 00639000 * PROGRAM 00640000 NOCL3270 EQU * @V200731 00641000 IC R14,SBADDR GET THE CURRENT LINE POINTER @V200731 00642000 SLL R14,1 SETUP THE INDEX INTO THE TABLE @V200731 00643000 LH R14,TABLE70(R14) GET THE LINE ADDRESS @V200731 00644000 STCM R14,3,LAB3270+2 SAVE THE CURRENT LINE POINTER @V200731 00645000 STCM R4,B'0111',WRTCR70+1 GET THE MESSAGE ADDRESS @V200731 00646000 STH R2,WRTCR70+6 SAVE THE BYTE COUNT IN THE CSW @V200731 00647000 GRAPWRT EQU * @V200731 00648000 LA R14,GRAPHIC1 RETURN ADDRESS FROM I/O HANDLER @V200731 00649000 B STARTIO GO TO THE I/O HANDLER @V200731 00650000 SPACE 2 00651000 GRAPHIC1 EQU * @V200731 00652000 NI PARM,X'FF'-PARMCLE CLEAR THE ERASE INDICATOR @V200731 00653000 SR R5,R5 CLEAR REGISTER 5 @V200731 00654000 IC R5,SBADDR GET THE Y COORDINATE @V200731 00655000 LA R5,1(R5) UPDATE THE Y COORDINATE @V200731 00656000 CH R2,=H'80' IS DATA COUNT LONGER THAN 1 LINE @V200731 00657000 BNH *+8 NO, GO SAVE Y COORDINATE @V200731 00658000 LA R5,1(R5) UPDATE THE Y COORDINATE AGAIN @V200731 00659000 STC R5,SBADDR SAVE THE Y COORDINATE @V200731 00660000 MH R5,=H'80' GET THE BYTE LENGTH @V200731 00661000 L R1,=F'2640' GET THE MAX. LENGTH @V200731 00662000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00663000 BZ TEST3066 YES, GO TEST FOR END OF CRT @VM08630 00664000 L R1,MAXLEN GET THE MAX. LENGTH FOR 3270/3278@V60A6B6 00665000 TEST3066 EQU * @V200731 00666000 CR R5,R1 IS THE Y COORDINATE AT THE END @V200731 00667000 * OF THE CRT 00668000 BL RETWORD NO, CHECK FOR CMD CHAINING @VA08599 00669000 OI PARM,PARMATT SET THE ATTENTION REQUEST @VM08630 00670000 MVC CPXYSTAT(20),HOLLABEL @V200731 00671000 LA R14,GRAPHIC3 RETURN ADDRESS FROM I/O HANDLER @V200731 00672000 LA R1,CRTWORD GET THE ADDRESS OF THE CHANNEL @V200731 00673000 * PROGRAM 00674000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00675000 BZ STARTIO YES, GO TO I/O HANDLER @VM08630 00676000 LA R1,HOLDCCW1 GET THE ADDRESS OF THE CHANNEL @V200731 00677000 * PROGRAM 00678000 B STARTIO GO ISSUE SIO @V200731 00679000 GRAPHIC3 EQU * @V200731 00680000 BAL R5,ATTNHAND GO CHECK FOR ATTENTION INTERRUPT @V200731 00681000 NI PARM,X'FF'-PARMATT CLEAR THE ATTENTION REQUEST @VM08630 00682000 CANCEL1 EQU * @V200731 00683000 MVI SBADDR,X'00' SET THE Y COORDINATE TO ZERO @V200731 00684000 MVC CPXYSTAT(20),RUNLABEL CRT DISPLAY RUN STATUS @V200731 00685000 LA R1,CNCL3066 GET THE ADDRESS OF THE CHANNEL @V200731 00686000 * PROGRAM 00687000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00688000 BZ RETURNCN YES, GO GET RETURN ADDRESS @VM08630 00689000 LA R1,CNCL3270 GET THE ADDRESS OF THE CHANNEL @V200731 00690000 * PROGRAM 00691000 RETURNCN EQU * @V200731 00692000 LA R14,READGRF GET THE ADDRESS OF THE READ @V200731 00693000 * SECTION 00694000 TM PARM,PARMREA IS THIS A READ REQUEST ? @V200731 00695000 BO STARTIO YES, GO TO THE I/O HANDLER @V200731 00696000 LA R14,RETWORD RETURN ADDRESS FROM I/O HANDLER @V200731 00697000 B STARTIO GO TO THE I/O HANDLER @V200731 00698000 SPACE 1 00699000 GRAPHIC0 EQU * @V200731 00700000 BAL R5,ATTNHAND GO CHECK FOR ATTENTION INTERRUPT @V200731 00701000 SPACE 1 00702000 NI PARM,X'FF'-PARMATT CLEAR THE ATTENTION REQUEST @VM08630 00703000 LA R14,RET66MI RETURN ADDRESS FROM I/O HANDLER @V200731 00704000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00705000 BO GRF3270A NO, GO TO 3270 SUPPORT @VM08630 00706000 STH R2,RD3066DA+6 STORE THE COUNT IN THE CCW @V200731 00707000 STCM R4,B'0111',RD3066DA+1 GET ADDRESS OF READ BUFFER@V200731 00708000 LA R1,RDMI3066 GET ADDRESS OF CHANNEL PROGRAM @V200731 00709000 B STARTIO GO TO THE I/O HANDLER @V200731 00710000 GRF3270A EQU * @V200731 00711000 LR R1,R2 GET THE BYTE COUNT @V200731 00712000 LA R1,6(R1) ADD 6 T0 THE TOTAL COUNT @V200731 00713000 STH R1,RD3270DA+6 STORE THE COUNT IN THE CCW @V200731 00714000 LA R1,BLNKLINE GET THE ADDRESS OF THE BUFFER @V200731 00715000 STCM R1,7,RD3270DA+1 MOVE THE ADDRESS OF THE READ @V200731 00716000 * BUFFER INTO THE CCW 00717000 LA R1,RDMI3270 GET THE ADDRESS OF THE CHANNEL @V200731 00718000 * PROGRAM 00719000 B STARTIO GO TO I/I HANDLER @V200731 00720000 SPACE 2 00721000 RET66MI EQU * @V200731 00722000 MVC CPXYSTAT(20),RUNLABEL CRT DISPLAY RUN STATUS @V200731 00723000 LA R1,CRTWORD GET THE ADDRESS OF THE CHANNEL @V200731 00724000 * PROGRAM 00725000 LA R14,RETINPUT RETURN ADDRESS FROM I/O HANDLER @V200731 00726000 TM PARM,PARM327 IS THIS A 3066 DEVICE ? @VM08630 00727000 BO GRF3270B NO, GO TO 3270 SUPPORT @VM08630 00728000 TM RDMIDATA+2,X'40' DID THE OPERATOR HIT THE @V200731 00729000 * CANCEL KEY 00730000 BO CANCEL1 YES, GO CLEAR SCREEN @V200731 00731000 CLC RDMIDATA(2),SBAREAD DID THE CURSOR MOVE ? @V200731 00732000 BNE STARTIO YES, GO WRITE STATUS @V200731 00733000 OI PARM2,PARMNDA SET INDICATOR FOR NO DATA @VM08630 00734000 B STARTIO GO WRITE OUT STATUS @V200731 00735000 GRF3270B EQU * @V200731 00736000 CLI BLNKLINE,X'6E' DID THE OPERATOR HIT THE CANCEL @V200731 00737000 * KEY 00738000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 00739000 CLI BLNKLINE,X'6D' DID THE OPERATOR HIT THE CLEAR @V200731 00740000 * KEY 00741000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 00742000 CLI BLNKLINE,X'6C' DID OPERATOR HIT PA1 KEY @V200731 00743000 BE CANCEL1 YES, GO CLEAR SCREEN @V200731 00744000 OI PARM2,PARMNDA SET INDICATOR FOR NO DATA @VM08630 00745000 CLI BLNKLINE,X'01' DID OPERATOR HIT TEST REQ. ? @VM08630 00746000 BE ENT3270 YES, GO DISPLAY STATUS @VM08630 00747000 CLI BLNKLINE,X'E6' IS THE CARD READER ACTIVE ? @VM08630 00748000 BE ENT3270 YES, GO WRITE STATUS @VM08630 00749000 CLI BLNKLINE+6,X'00' IS DATA IN THE INPUT AREA ? @VM08630 00750000 BNE DATA3270 YES, GO DISPLAY DATA @VM08630 00751000 CLC BLNKLINE+1(2),ADDR5 DID THE CURSOR MOVE ? @V60A6B6 00752000 BE ENT3270 NO, GO WRITE STATUS @VM08630 00753000 DATA3270 EQU * @VM08630 00754000 NI PARM2,X'FF'-PARMNDA CLEAR NO DATA INDICATOR @VM08630 00755000 LR R5,R2 GET THE BYTE COUNT @V200731 00756000 BCTR R5,R0 SUBTRACT ONE FROM COUNT (EX @V200731 00757000 * INSTR.) 00758000 EX R5,MOV3270 MOVE DATA INTO USER'S BUFFER @V200731 00759000 ENT3270 EQU * @V200731 00760000 LA R1,CRTWORD1 GET THE ADDRESS OF THE CHANNEL @V200731 00761000 * PROGRAM 00762000 B STARTIO GO ISSUE SIO @V200731 00763000 SPACE 2 00764000 ********************************************************************* 00765000 MOV3270 MVC 0(0,R4),BLNKLINE+6 MOVE THE DATA INTO THE @V200731 00766000 * USER'S BUFFER 00767000 ********************************************************************* 00768000 SPACE 2 00769000 RETINPUT EQU * @V200731 00770000 TM PARM2,PARMNDA IS NO DATA INDICATED ? @VM08630 00771000 BZ WRT66 NO, GO DISPLAY INPUT DATA ON CRT @V200731 00772000 RETWORD EQU * @V200731 00773000 NI PARM,X'FF'-(PARMREA+PARMCLE+PARMNAUT+PARMATT) @VM08630 00774000 * CLEAR INDICATORS 00775000 NI PARM2,X'FF'-PARMNDA CLEAR NO DATA INDICATOR @VM08630 00776000 LM R14,R5,GRAPHSAV RETURN TO ORIGINAL @V200731 00777000 BR R14 CALLER @V200731 00778000 ********************************************************************* 00779000 EJECT 00779070 *********************************************************************** 00779140 * 00779210 * WAITANY: ROUTINE WAITS FOR THE NEXT I/O INTERRUPT. ANY I/O 00779280 * INTERRUPT, REGARDLESS OF WHICH DEVICE IT IS FROM, SATISFIES 00779350 * THIS ROUTINE. 00779420 * 00779490 *********************************************************************** 00779560 * 00779630 * INPUTS: 00779700 * R15 = ADDRESS OF AN IOB. (ANY IOB ASSOCIATED WITH ANY 00779770 * DEVICE WILL DO; THIS ROUTINE MERELY WANTS SOME IOB 00779840 * FLAGS TO MANIPULATE.) 00779910 * R14 = ADDRESS TO BE RETURNED TO AFTER I/O INTERRUPT OCCURS. 00779980 * IOBERROR = SHOULD NORMALLY CONTAIN 0. IF IT CONTAINS THE 00780050 * ADDRESS OF AN ERROR ROUTINE, THE ERROR ROUTINE WILL 00780120 * ALWAYS BE BRANCHED TO, EVEN WHEN THERE IS NO ERROR 00780190 * STATUS IN THE CSW STORED BY THE INTERRUPT. 00780260 * 00780330 * OUTPUTS: 00780400 * IOOPSW+2 = THE INTERRUPTION CODE (A HALFWORD) IN THE OLD I/O 00780470 * PSW CONTAINS THE UNIT ADDRESS OF THE INTERRUPTING DVC. 00780540 * IOBCSW = CONTENTS OF CSW STORED BY INTERRUPT. 00780610 * SENSE = SENSE BYTES ARE ALWAYS READ INTO THIS AREA, EVEN WHEN 00780680 * THE INTERRUPT DOES NOT SHOW ERROR STATUS IN THE CSW. 00780750 * SENSECNT = HALFWORD CONTAINS NUMBER OF SENSE BYTES THAT WERE 00780820 * ACTUALLY READ INTO 'SENSE' AREA. MAY NOT BE VALID IN 00780890 * THE EVENT OF A CHANNEL ERROR. OTHERWISE, NUMBER IS 00780960 * DETERMINED BY THE PARTICULAR DEVICE, UP TO THE LIMIT 00781030 * IMPOSED BY THE LENGTH OF THE 'SENSE' AREA. 00781100 * IOB = VARIOUS FIELDS OF THE IOB MAY BE MODIFIED. 00781170 * R1 = CONTENTS DESTROYED. 00781240 * R0, R2-R4, R14-R15 = PRESERVED. 00781310 * R5-R13 = PRESERVED UNLESS ROUTINE DESIGNATED BY 'IOBERROR' 00781380 * DESTROYS THEM. 00781450 *********************************************************************** 00781520 SPACE 00781590 **CMNT** USING IOB,R15 00781660 WAITANY OI IOBFLAGS,IOBFWANY INDICATES WAIT FOR ANY INT. @V56BDA8 00781730 SPACE 3 00781800 *********************************************************************** 00781870 * 00781940 * WAITDVC: ROUTINE WAITS FOR AN UNSOLICITED I/O INTERRUPT FROM A 00782010 * PARTICULAR DEVICE. 00782080 * 00782150 *********************************************************************** 00782220 * 00782290 * INPUTS: 00782360 * R15 = ADDRESS OF IOB. 00782430 * R14 = ADDRESS TO BE RETURNED TO AFTER INTERRUPT IS RECEIVED 00782500 * FROM SPECIFIED DEVICE. 00782570 * R3 = LOW ORDER TWO BYTES CONTAIN UNIT ADDRESS OF DEVICE 00782640 * THAT IS TO BE WAITED ON. 00782710 * IOBERROR = SHOULD NORMALLY CONTAIN 0. BUT IT MAY CONTAIN THE 00782780 * ADDRESS OF AN ERROR ROUTINE. IF IT CONTAINS THE 00782850 * ADDRESS OF AN ERROR ROUTINE, THE ERROR ROUTINE IS 00782920 * ONLY GIVEN CONTROL IF THE CSW FROM THE INTERRUPT 00782990 * CONTAINS UC, UE, ATTN, OR ANYTHING IN THE CHANNEL 00783060 * STATUS BYTE OTHER THAN 'INCORRECT LENGTH'. 00783130 * (NOTE: THE INTERFACE WITH THE ERROR ROUTINE HERE IS 00783200 * THE SAME AS DESCRIBED AT THE END OF THE STARTIO RTN.) 00783270 * 00783340 * OUTPUTS: 00783410 * IOBCSW = CONTENTS OF CSW STORED BY THE INTERRUPT. 00783480 * SENSE = SENSE BYTES ARE READ INTO THIS AREA IF IOBCSW SHOWS 00783550 * UC, UE, ATTN, OR ANYTHING IN CHANNEL STATUS BYTE OTHER 00783620 * THAN 'INCORRECT LENGTH'. 00783690 * SENSECNT = HALFWORD CONTAINS NUMBER OF SENSE BYTES THAT WERE 00783760 * ACTUALLY READ INTO 'SENSE' AREA. WILL BE 0 IF NO 00783830 * ERROR. MAY NOT BE VALID AFTER CHANNEL ERROR. 00783900 * OTHERWISE, NUMBER IS DETERMINED BY THE PARTICULAR 00783970 * DEVICE TYPE, UP TO THE LIMIT IMPOSED BY THE LENGTH OF 00784040 * THE 'SENSE' AREA. 00784110 * IOB = VARIOUS FIELDS IN THE IOB MAY BE MODIFIED. 00784180 * R1 = CONTENTS DESTROYED. 00784250 * R0, R2-R4, R14-R15 = PRESERVED. 00784320 * R5-R13 = PRESERVED UNLESS ROUTINE DESIGNATED BY 'IOBERROR' 00784390 * DESTROYS THEM. 00784460 * 00784530 * NOTES: 00784600 * (1) IN ORDER TO BE RECOGNIZED AS AN INTERRUPT THAT IS TO 00784670 * BRING US OUT OF THE WAIT, THE INTERRUPT MUST BE FROM THE 00784740 * SPECIFIED DEVICE AND MUST PROVIDE ONE OR MORE OF THE 00784810 * FOLLOWING STATUS INDICATIONS IN THE CSW: DE, UC, UE, 00784880 * ATTN, OR ANY CHANNEL STATUS EXCEPT INCORRECT LENGTH. 00784950 * 00785020 *********************************************************************** 00785090 SPACE 00785160 WAITDVC SR R1,R1 SIGNAL NO CHNL PROG TO START. @V56BDA8 00785230 SPACE 3 00785300 *********************************************************************** 00785370 * 00785440 * STARTIO: ROUTINE DOES SIO TO SPECIFIED CHANNEL PROGRAM, THEN WAITS 00785510 * FOR COMPLETION BEFORE RETURNING. 00785580 * 00785650 *********************************************************************** 00785720 * 00785790 * INPUTS: 00785860 * R15 = ADDRESS OF IOB. 00785930 * R14 = ADDRESS TO BE RETURNED TO WHEN REQUESTED I/O OPERATION 00786000 * IS COMPLETE. 00786070 * R1 = POINTER TO CHANNEL PROGRAM TO BE EXECUTED. ACTUALLY, 00786140 * THIS WILL USED AS THE CAW; H.O. BYTE IS PROTECT KEY. 00786210 * R3 = LOW ORDER TWO BYTES CONTAIN UNIT ADDRESS OF DEVICE 00786280 * TO BE STARTED. 00786350 * IOBFDEW = BIT FLAG SPECIFYING WHETHER MUST WAIT FOR DE OR CAN 00786420 * ACCEPT CE AS INDICATING COMPLETION OF THE OPERATION. 00786490 * COMMONLY, CE IS USED. NOTE: ERROR CONDITIONS ALWAYS 00786560 * SIGNAL COMPLETION, WITH OR WITHOUT CE OR DE. 00786630 * IOBERROR = ADDRESS OF AN ERROR ROUTINE, OR ZERO. IF ZERO, 00786700 * CONTROL IS ALWAYS RETURNED IMMEDIATELY UPON 00786770 * COMPLETION TO THE LOCATION GIVEN BY R14. IF IOBERROR 00786840 * HAS THE ADDRESS OF AN ERROR ROUTINE AND AN ERROR IS 00786910 * DETECTED AT COMPLETION OF THE I/O OPERATION, THEN THE 00786980 * ERROR ROUTINE IS GIVEN CONTROL. THE ERROR ROUTINE IS 00787050 * ALSO GIVEN CONTROL (WITH INDICATORS SET) IF SIO FINDS 00787120 * THE DEVICE 'NOT OPERATIONAL' (CC=3) OR 'NOT READY'. 00787190 * (NOTE: THE ERROR ROUTINE INTERFACE IS DESCRIBED 00787260 * FOLLOWING THE STARTIO ROUTINE CODE BELOW.) 00787330 * 00787400 * OUTPUTS (WITH ERROR ROUTINE AVAILABLE): 00787470 * IOBFATAL = FLAG INDICATES SUCCESS OR FAILURE. IN THE EVENT 00787540 * OF A NON-RECOVERABLE ERROR, THE ERROR ROUTINE SETS 00787610 * THIS BEFORE EXITING. 00787680 * IOB = VARIOUS FIELDS IN THE IOB MAY BE MODIFIED. 00787750 * R0-R4, R14-R15 = PRESERVED. 00787820 * R5-R13 = PRESERVED UNLESS ROUTINE DESIGNATED BY 'IOBERROR' 00787890 * DESTROYS THEM. 00787960 * 00788030 * OUTPUTS (WITHOUT ERROR ROUTINE AVAILABLE): 00788100 * IOBFCC3 = FLAG INDICATES SIO FOUND DEVICE 'NOT OPERATIONAL'; 00788170 * THE I/O REQUEST WAS NOT EXECUTED. 00788240 * IOBFNRDY = FLAG INDICATES SIO WAS REJECTED BY THE DEVICE 00788310 * BECAUSE OF A 'NOT READY' CONDITION OR SOME OTHER 00788380 * CONDITION SUCH AS 'EQUIPMT CHECK'. I/O NEVER STARTED. 00788450 * IOBCSW = CONTENTS OF CSWS STORED BY THE REQUESTED I/O 00788520 * OPERATION UP TO THE TIME OF COMPLETION (WHICH, RECALL, 00788590 * IS NOT NECESSARILY DE). IF MORE THAN ONE CSW WAS 00788660 * STORED PRIOR TO COMPLETION, THEY ARE 'OR'ED TOGETHER 00788730 * IN IOBCSW. 00788800 * SENSE = SENSE BYTES ARE READ INTO THIS AREA IF IOBCSW SHOWS 00788870 * UC, UE, ATTN, OR ANYTHING IN CHANNEL STATUS BYTE OTHER 00788940 * THAN 'INCORRECT LENGTH'. 00789010 * SENSECNT = HALFWORD CONTAINS NUMBER OF SENSE BYTES THAT WERE 00789080 * ACTUALLY READ INTO 'SENSE' AREA. WILL BE 0 IF NO 00789150 * ERROR. MAY NOT BE VALID AFTER CHANNEL ERROR. 00789220 * OTHERWISE, NUMBER IS DETERMINED BY THE PARTICULAR 00789290 * DEVICE TYPE, UP TO THE LIMIT IMPOSED BY LENGTH OF 00789360 * THE 'SENSE' AREA. 00789430 * IOB = VARIOUS FIELDS OF THE IOB MAY BE MODIFIED. 00789500 * R0-R15 = PRESERVED. 00789570 * 00789640 *********************************************************************** 00789710 SPACE 00789780 **CMNT** USING IOB,R15 00789850 STARTIO STM R14,R4,SIOSAVE SAVE USERREGS, RESTORE WHEN RETRN@V56BDA8 00789920 RETRYIO DS 0H ENTRY FOR RESTART, POSSIBLY WITH RCVRY CCWS.@V56BDA8 00789990 NI IOBFLAGS,255-IOBFSTRT-IOBFCC3-IOBFATAL-IOBFNRDY @V56BDA8 00790060 RESTART DS 0H ENTRY FOR RETRY IF SIO FAILS TO TAKE. @V56BDA8 00790130 ST R1,IOBRCAW KEEP ADDR OF LAST CHL PRG STARTD.@V56BDA8 00790200 ST R1,CAW SET UP CAW. @V56BDA8 00790270 XC CSW,CSW CLEAR CSW. @V56BDA8 00790340 XC IOBCSW,IOBCSW CLEAR IOB COPY OF CSW. @V56BDA8 00790410 LTR R1,R1 HAVE CHNL PRG TO START? @V56BDA8 00790480 BZ SIOCC0 MAKE BELIEVE WE STARTD SOMETHING,@V56BDA8 00790550 * THEN WAIT FOR UNSOLICITED INTERRUPT ON 00790620 * THIS DEVICE. 00790690 SIO 0(R3) @V56BDA8 00790760 BC 4,CSWSTORE CC=1; SIO STORED A CSW. @V56BDA8 00790830 BC 2,IOWAIT CC=2; CHNL BUSY, WAIT THEN RETRY.@V56BDA8 00790900 BC 1,NOTOPER CC=3; DVC OR CHNL NOT OPERATIONAL@V56BDA8 00790970 SIOCC0 OI IOBFLAGS,IOBFSTRT CC=0; INDICATE SIO 'TOOK'. @V56BDA8 00791040 IOWAIT LPSW ENABLAB WAIT WITH I/O INTERRUPTS ENABLED.@V56BDA8 00791110 SPACE 00791180 CSWSTORE STH R3,IOOPSW+2 MAKE LIKE INTERRUPT OF THIS DVC. @V56BDA8 00791250 TM CSW+4,BUSY DVC/CU BUSY OR INT. WAS PENDING? @V56BDA8 00791320 BZ CSWCE NEITHER. GO TEST FOR CE. @V56BDA8 00791390 TM CSW+4,255-BUSY-SM ANYTHING BESIDES BUSY+SM? @V56BDA8 00791460 BZ IOWAIT NO. DVC/CU BUSY. WAIT & RETRY. @V56BDA8 00791530 * 00791600 * FALL THRU INDICATES SIO CLEARED A PENDING INTERRUPT FROM THIS 00791670 * DEVICE; THE REQUESTED I/O OPERATION DID NOT GET STARTED. 00791740 * 00791810 B IOINT LOOK AT CLRD INT.; RESTART LATER.@V56BDA8 00791880 SPACE 00791950 CSWCE TM CSW+4,CE CE INDICATING IMMED. OPERATION? @V56BDA8 00792020 BZ NOTRDY NO. PERHAPS HAVE UC (DVC NOT @V56BDA8 00792090 * READY, ETC); TREAT AS ERROR. 00792160 * 00792230 * FALL THRU INDICATES AN IMMEDIATE OPERATION WAS STARTED. 00792300 * 00792370 OI IOBFLAGS,IOBFSTRT REQUESTED I/O WAS STARTED. @V56BDA8 00792440 LA R4,8(0,R1) POINT TO IMMEDIATE CCW + 8. @V56BDA8 00792510 ST R4,CSW MAKE CSW LOOK LIKE I/O INTERRUPT.@V56BDA8 00792580 SPACE 00792650 IOINT DS 0H THIS IS THE I/O INTERRUPT HANDLER@V56BDA8 00792720 TM IOBFLAGS,IOBFWANY WANT INT. FROM ANY OLD DVC? @V56BDA8 00792790 BO IOERRORA YES, TAKE WHATEVER COMES ALONG. @V56BDA8 00792860 TM CSW+5,X'BF' ANY CHANNEL ERROR? @V56BDA8 00792930 BNZ IOERROR YES, CHANNEL ERROR. @V56BDA8 00793000 TM CSW+4,UC+UE+ATTN UNUSUAL UNIT STATUS? @V56BDA8 00793070 BNZ IOERROR YES. ERROR ROUTINE MUST HANDLE. @V56BDA8 00793140 TM IOBFLAGS,IOBFSTRT INT. IS RESPONSE TO OUR SIO? @V56BDA8 00793210 BZ RESTART NO, SIO FAILED TO START. BUT AN @V56BDA8 00793280 * INTERRUPT HAS CLEARED, SO MAYBE CHNL, CU, 00793350 * & DVC ARE AVAILABLE NOW; TRY SIO AGAIN. 00793420 CH R3,IOOPSW+2 SIO 'TOOK'. IS THIS INT FROM IT?@V56BDA8 00793490 BNE IOWAIT NO, INT. IS FROM ANOTHER DVC. @V56BDA8 00793560 ORCSW OC IOBCSW,CSW COPY (MERGE) CSW INTO IOBCSW. @V56BDA8 00793630 TM CSW+4,CE+DE ANY ENDING STATUS? @V56BDA8 00793700 BZ IOWAIT NO,WAIT FOR END. (MAYBE GOT CUE?)@V56BDA8 00793770 **CMNT** TM IOBFLAGS,IOBFDEW REQUESTOR SAID WAIT UNTIL DE? @V56BDA8 00793840 **CMNT** BZ SIORET NO, EITHER CE OR DE WILL DO. @V56BDA8 00793910 **CMNT** TM CSW+4,DE HAVE DE YET? @V56BDA8 00793980 **CMNT** BZ IOWAIT NOT YET. WAIT FOR DE. @V56BDA8 00794050 SIORET TM IOBFLAGS,IOBFERP ERROR RTN WANTS CONTROL BACK? @V56BDA8 00794120 BO IOERROR YES. @V56BDA8 00794190 LM R14,R4,SIOSAVE RESTORE USER REGS. @V56BDA8 00794260 BR R14 RETURN TO CALLER OF 'STARTIO'. @V56BDA8 00794330 SPACE 00794400 IOERRORA LH R3,IOOPSW+2 MAKE LIKE WE WANTED THIS DVC ALL @V56BDA8 00794470 * ALONG. 00794540 NI IOBFLAGS,255-IOBFWANY RESET. ONLY WANT 1 INT. @V56BDA8 00794610 B IOERROR @V56BDA8 00794680 SPACE 00794750 NOTOPER OI IOBFLAGS,IOBFCC3+IOBFNRDY SET 'NOT OPER' AND @V56BDA8 00794820 * (TEMPORARILY) 'NOT READY'. 00794890 NOTRDY XI IOBFLAGS,IOBFNRDY IF FALL THRU FROM ABOVE, THIS@V56BDA8 00794960 * RESETS IOBFNRDY TO 0. IF ENTER HERE, 00795030 * IT SETS IOBFNRDY TO 1. 00795100 STH R3,IOOPSW+2 @V56BDA8 00795170 SPACE 00795240 IOERROR DS 0H ERROR (OR UNUSUAL) STATUS PRESENT@V56BDA8 00795310 CH R3,IOOPSW+2 IS INTERRUPT FROM OUR DVC? @V56BDA8 00795380 BNE WRONGDVC NO, DO NOT SAVE CSW. @V56BDA8 00795450 EX 0,ORCSW COPY (MERGE) CSW INTO IOBCSW @V56BDA8 00795520 * BEFORE SENSE READ DESTROYS CSW. 00795590 WRONGDVC DS 0H @V56BDA8 00795660 * 00795730 * IN EVERY CASE WE ATTEMPT TO READ SENSE DATA, EVEN IF UC WAS 00795800 * NOT PRESENTED. READING SENSE WON'T HURT AND MAY HELP: IN THE 00795870 * CASE OF CHANNEL CHECK, SIMULTANEOUS UC MIGHT HAVE BEEN LOST; 00795940 * IN CASE OF ATTN OR UE, RECOVERY ROUTINE MIGHT WANT TO EXAMINE 00796010 * SENSE. EVEN IF IT IS NOT OUR INTERRUPT, WE HAVE TO READ SENSE 00796080 * TO CLEAR 'CONTINGENT CONNECTION' THAT MIGHT OTHERWISE BLOCK 00796150 * US AT THE CONTROL UNIT. 00796220 * 00796290 XC SENSE,SENSE ZERO AREA FOR SENSE DATA. @V56BDA8 00796360 LA R4,SENSECCW CCW FOR READING SENSE DATA. @V56BDA8 00796430 ST R4,CAW SET UP CAW. @V56BDA8 00796500 LH R4,IOOPSW+2 ADDR OF INTERRUPTING DEVICE. @V56BDA8 00796570 **CMNT** STCM R4,12,SENSCNT USE HIGH ORDER 0'S TO 0 SENSE CNT@V56BDA8 00796640 SENSESIO SIO 0(R4) START SENSE READ. @V56BDA8 00796710 BC 4+2,SENSESIO RETRY WHEN CC=2 OR CC=1. 2 MEANS@V56BDA8 00796780 * MPX CHNL IS WORKING MOMENTARILY WITH 00796850 * ANOTHER SUBCHNL (WE KNOW THERE CAN BE NO 00796920 * ACTIVITY OR INTERRUPT PENDING IN OUR 00796990 * SUBCHNL). 1 MEANS PENDING DE OR OTHER 00797060 * INTERRUPT WAS CLEARED FROM THE DVC BY 00797130 * SIO, SO SENSE READ NEVER STARTED; RETRY. 00797200 **CMNT** BC 1,ENDSENSE CC=3; SENSE NOT READ, KEEP 0 CNT.@V56BDA8 00797270 TIO TIO 0(R4) CLEAR ENDING INTERRUPT FROM SENSE@V56BDA8 00797340 BC 2,TIO LOOP IF CHANNEL STILL BUSY. @V56BDA8 00797410 **CMNT** LH R4,SENSECCW+6 CALCULATE NUMBER OF SENSE BYTES. @V56BDA8 00797480 **CMNT** SH R4,CSW+6 @V56BDA8 00797550 **CMNT** STH R4,SENSCNT @V56BDA8 00797620 ENDSENSE DS 0H @V56BDA8 00797690 CH R3,IOOPSW+2 WE MAY HAVE GOTTEN AN UNSOLICITED@V56BDA8 00797760 * ERROR FROM ANOTHER DVC. 00797830 BNE IOWAIT IT'S NOT OUR DEVICE. @V56BDA8 00797900 TM IOBFLAGS,IOBFSTRT+IOBFCC3+IOBFNRDY IF NONE OF @V56BDA8 00797970 * THESE FLAGS IS SET, THEN SIO WAS BLOCKED 00798040 * BY A PENDING INTERRUPT. 00798110 BZ RESTART AN UNKNOWN INTERRUPT WAS CLEARED @V56BDA8 00798180 * FROM OUR DEVICE BY SIO. WE DISREGARD IT 00798250 * AND TRY AGAIN TO START. 00798320 * 00798390 * FALL THRU MEANS SIO WAS NOT BLOCKED BY PENDING INTERRUPT. SO 00798460 * I/O WAS EITHER STARTED AND ENDED IN AN ERROR OR WAS BLOCKED 00798530 * BY DVC 'NOT OPERATIONAL' OR 'NOT READY'. ONE OF THE 3 FLAGS 00798600 * IOBFSTRT, IOBFCC3, AND IOBFNRDY IS SET AND TELLS WHICH IT WAS. 00798670 * 00798740 ICM R4,15,IOBERROR HAVE ERROR RTN FOR THIS REQUEST? @V56BDA8 00798810 BZ SIORET NO. RETURN IOBCSW, SENSE, ETC. @V56BDA8 00798880 LH R14,IOBERCNT COUNT OF ERROR RETRIES. @V56BDA8 00798950 LA R14,1(0,R14) INCREMENT COUNT. @V56BDA8 00799020 TM IOBFLAGS,IOBFERP IS THIS AN INITIAL ERROR? @V56BDA8 00799090 BO HADERP NO, THIS WAS A RETRY. @V56BDA8 00799160 OI IOBFLAGS,IOBFERP ERROR RCVRY IN PROGRESS NOW. @V56BDA8 00799230 SR R14,R14 RETRY COUNT IS 0 FOR 1ST TIME. @V56BDA8 00799300 HADERP STH R14,IOBERCNT INCREMENTED (OR 0'ED) RETRY CNT. @V56BDA8 00799370 BR R4 GO TO ERROR RECOVERY ROUTINE. @V56BDA8 00799440 **CMNT** DROP R15 @V56BDA8 00799510 SPACE 3 00799580 *********************************************************************** 00799650 * 00799720 * ERROR ROUTINE INTERFACE: 00799790 * 00799860 *********************************************************************** 00799930 * 00800000 * THE ADDRESS OF AN ERROR ROUTINE MAY BE SPECIFIED IN 'IOBERROR' 00800070 * WHEN STARTIO IS CALLED. USUALLY THE ERROR ROUTINE WILL 00800140 * PROVIDE DEVICE DEPENDENT ERROR RECOVERY. WHEN THE ERROR 00800210 * ROUTINE GETS CONTROL THE IOBFCC3 AND IOBFNRDY FLAGS MAY 00800280 * BE TESTED FIRST. IF NEITHER OF THESE TWO FLAGS IS SET, 00800350 * THEN THE I/O REQUEST DEFINITELY DID GET STARTED. 00800420 * AFTER THE ERROR ROUTINE ANALYZES THE ERROR, IT RETURNS 00800490 * CONTROL TO THE STARTIO ROUTINE IN ONE OF TWO WAYS: 00800560 * (1) IT BRANCHES TO THE 'RETRYIO' LABEL OF STARTIO TO RETRY 00800630 * EITHER THE SAME CHANNEL PROGRAM OR A RECOVERY CHNL PROG. 00800700 * (2) IT BRANCHES TO THE 'SIORET' LABEL OF STARTIO TO RETURN 00800770 * TO THE CALLER OF STARTIO AFTER THE FINAL DISPOSITION OF 00800840 * THE ERROR HAS BEEN DECIDED (ERROR CORRECTED OR ERROR 00800910 * IS PERMANENT). 00800980 * WHEN THE ERROR ROUTINE RECEIVES CONTROL THE IOBFERP FLAG IS 00801050 * ALREADY SET, AND UNLESS THE ERROR ROUTINE UNSETS IT, THE ERROR 00801120 * ROUTINE WILL KEEP GETTING CONTROL BACK AFTER EACH BRANCH TO 00801190 * 'RETRYIO'. (AT COMPLETION OF THE RETRY CHANNEL PROGRAM.) 00801260 * WHEN THE ERROR ROUTINE RECEIVES CONTROL INITIALLY, THE RETRY 00801330 * COUNTER (IOBERCNT) IS ZERO AND AFTER EACH RETRY IT IS 00801400 * AUTOMATICALLY INCREMENTED BY ONE. 00801470 * 00801540 * IF THE ERROR ROUTINE UNSETS THE IOBFERP FLAG, THEN THE 00801610 * ERROR ROUTINE GETS CONTROL BACK AFTER A RETRY ONLY IF THE 00801680 * RETRY CHANNEL PROGRAM ENDS WITH ANOTHER ERROR. AND IOBERCNT 00801750 * AUTOMATICALLY STARTS AT ZERO AGAIN. IF THE RETRY CHANNEL 00801820 * PROGRAM RUNS SUCCESSFULLY (AFTER THE ERROR ROUTINE HAS 00801890 * UNSET IOBFERP), CONTROL WILL RETURN TO THE CALLER 00801960 * OF STARTIO. (NOTE: SOONER OR LATER THE ERROR ROUTINE MUST 00802030 * UNSET THE IOBFERP FLAG; IT IS NOT PERMITTED TO BRANCH TO 00802100 * SIORET WITH THE FLAG STILL SET.) 00802170 * 00802240 * WHEN BRANCHING TO 'RETRYIO', R15 AND R3 MUST CONTAIN THE 00802310 * SAME VALUES AS WHEN STARTIO WAS ENTERED AND R1 CONTAINS THE 00802380 * ADDRESS (CAW) OF THE NEW CHANNEL PROGRAM. OR, TO WAIT FOR 00802450 * AN UNSOLICITED INTERRUPT FROM THIS DEVICE (FOR EXAMPLE, AFTER 00802520 * THE ERROR ROUTINE DETECTED 'INTERVENTION REQUIRED'), THE ERROR 00802590 * ROUTINE CAN BRANCH TO 'RETRYIO' WITH 0 IN R1, INDICATING NO 00802660 * CHANNEL PROGRAM. SUBSEQUENTLY THE UNSOLICITED DE INTERRUPT 00802730 * WILL CAUSE CONTROL TO RETURN TO THE ERROR ROUTINE (ASSUMING 00802800 * THE IOBFERP FLAG IS STILL SET). 00802870 * 00802940 * WHEN CONTROL RETURNS TO THE ERROR ROUTINE FROM 'RETRYIO', 00803010 * THE DATA CONCERNING THE ORIGINAL ERROR HAS BEEN LOST. 00803080 * IOBCSW, IOBRCAW, AND SENSE DATA AND COUNT REFLECT THE 00803150 * EXECUTION OF THE LAST CHANNEL PROGRAM. 00803220 * 00803290 * STARTIO IS RECURSIVE IN A LIMITED WAY AND CAN BE CALLED BY 00803360 * THE ERROR ROUTINE TO WRITE ERROR MESSAGES (AS LONG AS THE IOB 00803430 * THAT IS USED IS NOT THE ONE THAT HAD THE ERROR). BUT CERTAIN 00803500 * FIELDS AND REGISTERS MUST BE SAVED AND RESTORED IF STARTIO 00803570 * IS TO BE CALLED RECURSIVELY, SO THE FOLLOWING CALLING 00803640 * SEQUENCE IS SUGGESTED: 00803710 * MVC SIOSAVE2,SIOSAVE KEEP CONTENT OF STARTIO SAVEAREA 00803780 * LA R15,BBBBBB IOB OF DVC WHERE MSG IS TO GO. 00803850 * LA R3,AAAAAA UNIT ADDR OF DVC. 00803920 * LA R1,CCCCCC ADDR OF CHNL PROG. 00803990 * BAL R14,STARTIO GO WRITE MSG, THEN RETURN HERE. 00804060 * LM R14,R4,SIOSAVE2 RESTORE REGISTERS. 00804130 * STM R14,R4,SIOSAVE AND RESTORE STARTIO SAVE AREA. 00804200 * IN ADDITION, THE SENSE DATA AND SENSE COUNT WILL HAVE TO BE 00804270 * SAVED AND RESTORED IF THE ERROR ROUTINE WILL WANT TO LOOK AT 00804340 * THEM AGAIN AFTER PRINTING THE ERROR MESSAGE. 00804410 * 00804480 * INPUTS: 00804550 * IOBFERP = ALWAYS 1, INDICATING ERROR RECOVERY NOW IN PROGRESS. 00804620 * IOBFCC3 = IF SET, THEN SIO FOUND THE DVC 'NOT OPERATIONAL', 00804690 * I.E., SIO GAVE CC=3. 00804760 * IOBFNRDY = IF SET, SIO WAS REJECTED BY THE DEVICE. PROBABLY 00804830 * THE DVC WAS 'NOT READY', BUT COULD BE OTHER REASONS 00804900 * SUCH AS 'EQUIPMT CHK'. IOBCSW & SENSE GIVE DETAILS. 00804970 * (NOTE: CHNL PROG DID START IF IOBFNRDY & IOBFCC3 =0) 00805040 * IOBERCNT = RETRY COUNT. CONTAINS 0 WHEN CONTROL IS RECEIVED 00805110 * HERE ON AN INITIAL ERROR. INCREMENTED BY ONE 00805180 * AUTOMATICALLY WITH EACH RETRY THEREAFTER. BUT RESET 00805250 * TO 0 AUTOMATICALLY AFTER A RETRY WITH THE IOBFERP 00805320 * FLAG TURNED OFF. 00805390 * IOBCSW = CONTENTS OF CSWS STORED BY THE REQUESTED I/O 00805460 * OPERATION UP TO THE TIME OF COMPLETION. IF MORE 00805530 * THAN ONE CSW WAS STORED, THEY ARE 'OR'ED TOGETHER. 00805600 * SENSE = CONTAINS SENSE DATA. SENSE DATA IS ALWAYS READ JUST 00805670 * BEFORE AN ERROR ROUTINE IS CALLED, EVEN WHEN THERE 00805740 * IS NO ERROR STATUS IN THE CSW. 00805810 * SENSCNT = HALFWORD CONTAINS NUMBER OF SENSE BYTES THAT WERE 00805880 * ACTUALLY READ INTO 'SENSE' AREA. MAY NOT BE VALID 00805950 * IN THE EVENT OF A CHANNEL ERROR. OTHERWISE, NUMBER 00806020 * IS DETERMINED BY THE PARTICULAR DEVICE TYPE, UP TO 00806090 * THE LIMIT IMPOSED BY LENGTH OF THE 'SENSE' AREA. 00806160 * IOBRCAW = ADDRESS (CAW) OF THE CHANNEL PROGRAM OF THE LAST 00806230 * I/O REQUEST OR RETRY. 00806300 * R3 = UNIT ADDRESS OF THE DEVICE. 00806370 * R15 = IOB ADDRESS. 00806440 * R4 = WORK REGISTER. INITIALLY CONTAINS ADDRESS OF THE 00806510 * ERROR ROUTINE AND COULD SERVE AS A BASE REGISTER 00806580 * INSTEAD OF A WORK REGISTER. 00806650 * R0-R2,R14 = WORK REGISTERS. CONTENTS ARE UNDEFINED. 00806720 * R5-R13 = MUST BE PRESERVED FOR CALLER OF STARTIO. 00806790 * 00806860 * OUTPUTS: 00806930 * IOBFATAL = SET TO 1 MEANS ERROR WAS PERMANENT, RECOVERY WAS 00807000 * NOT POSSIBLE. 0 MEANS REQUESTED I/O OPERATION WAS 00807070 * COMPLETED SUCCESSFULLY. 00807140 * IOBFERP = SET TO 1 MEANS ERROR RECOVERY STILL IN PROGRESS; 00807210 * ERROR ROUTINE IS TO GET CONTROL BACK AFTER RETRY 00807280 * EVEN IF SUCCESSFUL. 0 MEANS ERROR ROUTINE GETS 00807350 * CONTROL ONLY IF THE RETRY FAILS. MUST BE ZEROED IF 00807420 * BRANCHING TO 'SIORET'. 00807490 * R1 = IF BRANCHING TO 'RETRYIO', THEN R1 CONTAINS ADDRESS 00807560 * (CAW) OF A RETRY CHANNEL PROGRAM. OR R1 CAN CONTAIN 00807630 * 0 TO WAIT FOR AN UNSOLICITED INTERRUPT. 00807700 * R3 = UNCHANGED. (UNIT ADDRESS OF DEVICE.) 00807770 * R15 = UNCHANGED. (ADDRESS OF IOB.) 00807840 * R0,R2,R4,R14 = GARBAGE. (WORK REGISTERS.) 00807910 * R5-R13 = UNCHANGED. (SHOULD BE PRESERVED FOR THE BENEFIT OF 00807980 * THE CALLER OF STARTIO.) 00808050 * IOB = CONTENTS, EXCEPT FOR IOBFATAL AND IOBFERP, CAN BE 00808120 * REGARDED AS UNDEFINED. 00808190 * 00808260 *********************************************************************** 00808330 EJECT 00808400 *********************************************************************** 00808470 * 00808540 * ERRDASD: DASD I/O ERROR RECOVERY ROUTINE 00808610 * (ITS INTERFACE IS AS DESCRIBED ABOVE.) 00808680 * 00808750 *********************************************************************** 00808820 ERRDASD OI IOBFLAGS,IOBFATAL LOCAL USE: ASSUME RETRY FAILED@V56BDA8 00808890 LH R4,IOBERCNT RETRY COUNT. @V56BDA8 00808960 LTR R4,R4 IS IT INITIAL ERROR (0 RETRIES)? @V56BDA8 00809030 BZ DASINIT YES, INITIAL ERROR. @V56BDA8 00809100 TM IOBCSW+5,X'FF' RETRY COMPLETED SUCCESSFULLY? @V56BDA8 00809170 BNZ DASRFAIL NO. CHANNEL ERROR ON RETRY. @V56BDA8 00809240 TM IOBCSW+4,255-CE-CUE-DE RETRY WAS SUCCESSFUL? @V56BDA8 00809310 BNZ DASRFAIL NO. UNUSUAL UNIT STATUS? @V56BDA8 00809380 NI IOBFLAGS,255-IOBFATAL LOCAL USE: RETRY SUCCEEDED@V56BDA8 00809450 DASRFAIL DS 0H @V56BDA8 00809520 ICM R4,15,CONTINAD HAVE A CONTINUATION POINT TO @V56BDA8 00809590 * PICK UP AT FROM PREVIOUS RETRY? @V56BDA8 00809660 BCR 7,R4 IF SO, GO THERE NOW. @V56BDA8 00809730 TM IOBFLAGS,IOBFATAL DID WE DECIDE RETRY SUCCEEDED?@V56BDA8 00809800 BZ DASXGOOD YES, WE HAVE RECOVERED. @V56BDA8 00809870 DASINIT XC CONTINAD,CONTINAD ASSUME WE WILL HAVE NO @V56BDA8 00809940 * CONTINUATION POINT TO PICK UP AT ON 00810010 * NEXT RETRY. 00810080 SPACE 00810150 * DETERMINE IF THE ERROR WAS ONE THAT WE HAVE SPECIAL CODE 00810220 * TO HANDLE. 00810290 TM IOBCSW+4,UC IS IT UNIT CHECK? @V56BDA8 00810360 BZ DASXSAME NO. RETRY SAME CHNL PROGRAM. @V56BDA8 00810430 TM SENSE,X'40' IS IT INTERVENTION REQUIRED? @V56BDA8 00810500 BO DASINTQ YES, GO HANDLE. @V56BDA8 00810570 TM SENSE,X'01' SEEK CHECK? @V56BDA8 00810640 BO DASEEKCH YES, GO HANDLE. @V56BDA8 00810710 TM SENSE,X'02' TRACK CONDITION CHECK? @V56BDA8 00810780 BO DASTRK YES, GO HANDLE. @V56BDA8 00810850 * 00810920 * FALL THRU MEANS WE HAVE NO SPECIAL CODE FOR THIS PARTICULAR 00810990 * ERROR TYPE. SO JUST RETRY THE CHANNEL PROGRAM AS IS. 00811060 * 00811130 DASXSAME L R1,IOBRCAW RETRY SAME CHANNEL PROGRAM AGAIN.@V56BDA8 00811200 DASRETRY CLC IOBERCNT,=H'20' RETRY LIMIT EXCEEDED? @V56BDA8 00811270 BH DASXBAD YES. TREAT ERROR AS PERMANENT. @V56BDA8 00811340 B RETRYIO GO RETRY. @V56BDA8 00811410 SPACE 3 00811480 DASXGOOD NI IOBFLAGS,255-IOBFATAL INDICATE WE RECOVERED. @V56BDA8 00811550 DASXBAD NI IOBFLAGS,255-IOBFERP INDICATE END OF ERP. @V56BDA8 00811620 B SIORET RETURN TO 'STARTIO' ROUTINE. @V56BDA8 00811690 SPACE 3 00811760 DASTRK DS 0H HANDLES TRACK CONDITION CHECKS. @V56BDA8 00811830 * 00811900 * MUST FIRST DETERMINE CCHH OF LAST SEEK. 00811970 * 00812040 L R4,IOBRCAW ADDR OF LAST CHNL PROGRAM. @V56BDA8 00812110 LA R1,2 COUNT FOR BCT INSTRUCTION. @V56BDA8 00812180 DASEEKLP CLI 0(R4),X'07' IS FIRST CCW THE SEEK? @V56BDA8 00812250 BE DASFNDSK YES. IT POINTS TO CCHH. @V56BDA8 00812320 CLI 0(R4),RCAL MAYBE RECALIBRATE WAS APPENDED? @V56BDA8 00812390 BNE DASXBAD STRANGE CHNL PROG. GIVE UP. @V56BDA8 00812460 CLI 8(R4),TIC RECALIBRATE FOLLOWED BY TIC? @V56BDA8 00812530 BNE DASXBAD STRANGE CHNL PROG. GIVE UP. @V56BDA8 00812600 L R4,8(0,R4) TIC SHOULD POINT TO SEEK. @V56BDA8 00812670 BCT R1,DASEEKLP @V56BDA8 00812740 B DASXBAD STRANGE CHNL PROG. GIVE UP. @V56BDA8 00812810 SPACE 00812880 DASFNDSK L R4,0(0,R4) ADDR IN SEEK PTS TO BBCCHH. @V56BDA8 00812950 MVC DASCCHH1,2(R4) SAVE CCHH OF BAD TRACK. @V56BDA8 00813020 STCM R4,7,DASHAR0+1 MAKE RCVRY SEEK POINT TO BBCCHH.V56BDA8 00813090 LA R1,DASHAR0 ADDR OF RCVRY CCWS TO READ HA & @V56BDA8 00813160 * R0 OF THE DEFECTIVE TRACK. 00813230 LA R4,DASTRK2 LOCATION TO GET CONTROL... @V56BDA8 00813300 ST R4,CONTINAD ...AFTER RETRY COMPLETES. @V56BDA8 00813370 MVC DASFCCW,IOBCSW SAVE ADDR FIELD OF CSW (POINTS @V56BDA8 00813440 * TO FAILED CCW + 8). 00813510 B RETRYIO GO RUN RECOVERY CCWS. @V56BDA8 00813580 SPACE 00813650 DASTRK2 TM IOBFLAGS,IOBFATAL RECOVERY CCWS RAN OKAY? @V56BDA8 00813720 BO DASXBAD NO. TREAT AS FATAL. @V56BDA8 00813790 NI DASHAFLG,X'03' VALIDITY CHECK HA FLAG BYTE. @V56BDA8 00813860 CLI DASHAFLG,X'02' SHOULD BE 'DEFECTIVE' BIT ONLY. @V56BDA8 00813930 BNE DASXBAD INVALID. GIVE UP. @V56BDA8 00814000 CLC DASCCHH1,DASCCHH2 R0 SHOULD NOT POINT TO SELF. @V56BDA8 00814070 BE DASXBAD INVALID. (NO ALT.) GIVE UP. @V56BDA8 00814140 L R4,DASFCCW ADDR OF FAILED CCW + 8 (OF THE @V56BDA8 00814210 * ORIGINAL CHANNEL PROGRAM). 00814280 SH R4,=H'8' BACK UP TO FAILED CCW. @V56BDA8 00814350 STCM R4,7,DASALTIC+1 RESTART TIC PTS TO FAILED CCW. @V56BDA8 00814420 LA R1,DASALTSK RESTART CCWS SEEK TO ALT TRK, @V56BDA8 00814490 * THEN TIC TO FAILED CCW. 00814560 NI IOBFLAGS,255-IOBFERP RESTART AS IF THIS IS A @V56BDA8 00814630 * TOTALLY NEW CHNL PROG; RETRY COUNT 00814700 * WILL START FROM 0 AGAIN. 00814770 B RETRYIO GO RESTART. @V56BDA8 00814840 SPACE 00814910 DASEEKCH DS 0H HANDLES SEEK CHECKS. @V56BDA8 00814980 LA R1,DASRECAL WE'LL CHAIN A RECALIB. IN FRONT. @V56BDA8 00815050 C R1,IOBRCAW ...PROVIDED WE DIDN'T LAST TIME. @V56BDA8 00815120 BE DASXSAME IT'S THERE ALREADY (AND CHAINING @V56BDA8 00815190 * IT IN AGAIN WOULD CAUSE A CHNL PRG LOOP). 00815260 MVC DASRETIC+1(3),IOBRCAW+1 TIC TO FAILED CHNL PRG.@V56BDA8 00815330 B DASRETRY GO RETRY. @V56BDA8 00815400 SPACE 00815470 DASINTQ DS 0H HANDLES INTERVENTION REQUIRED. @V56BDA8 00815540 MVC DASINTSV,IOBRCAW SAVE ADDR OF FAILED CHNL PRG. @V56BDA8 00815610 * 00815680 * SHOULD ISSUE ERROR MSG AT THIS POINT, BUT IT'S TOO MUCH 00815750 * TROUBLE. JUST HOPE THE USER NOTICES THE RESIDENCE DASD DEVICE 00815820 * IS 'NOT READY'. IF HE READIES IT, WE WILL WAKE UP FROM THE 00815890 * WAIT (BELOW) AND RECOVER SUCCESSFULLY. 00815960 * 00816030 * NOW WAIT FOR DE INTERRUPT INDICATING DEVICE HAS BEEN READIED. 00816100 SR R1,R1 INDICATE NO CHNL PRG, JUST WAIT. @V56BDA8 00816170 LA R4,DASINTQ2 LOCATION TO GET CONTROL... @V56BDA8 00816240 ST R4,CONTINAD ...AFTER INTERRUPT ARRIVES. @V56BDA8 00816310 B RETRYIO WAIT FOR INTERRUPT FROM THE @V56BDA8 00816380 * DEVICE DESIGNATED BY R3. @V56BDA8 00816450 SPACE 00816520 DASINTQ2 L R1,DASINTSV ADDR OF ORIG CHNL PRG; RETRY IT. @V56BDA8 00816590 NI IOBFLAGS,255-IOBFERP RESTART AS IF IT'S A @V56BDA8 00816660 * TOTALLY NEW CHNL PROG. (0 RETRIES) 00816730 B RETRYIO GO RESTART. @V56BDA8 00816800 SPACE 3 00816870 **************** DATA AREA FOR DASD ERROR RECOVERY RTN **************** 00816940 DASHAR0 CCW X'07',*-*,CC,6 SEEK TO DEFECTIVE TRACK.@V56BDA8 00817010 CCW X'1A',DASHAFLG,CC+SILI,1 READ FLAG BYTE OF HA. @V56BDA8 00817080 CCW X'16',DASCCHH2,SILI,4 READ COUNT OF R0. @V56BDA8 00817150 DASALTSK CCW X'07',DASBB2,CC,6 SEEK TO ALTERNATE TRACK.@V56BDA8 00817220 DASALTIC CCW TIC,*-*,0,0 TO INTERRUPTED CHNL PROG@V56BDA8 00817290 DASRECAL CCW RCAL,0,CC+SILI,1 RCVRY CCWS FOR SEEK CHK.@V56BDA8 00817360 DASRETIC CCW TIC,*-*,0,0 TIC TO FAILING CHNL PRG.@V56BDA8 00817430 DASCCHH1 DS F SAVES CCHH ADDR OF DEF. TRACK. @V56BDA8 00817500 DASBB2 DC X'0000' @V56BDA8 00817570 DASCCHH2 DS XL4 @V56BDA8 00817640 DASHAFLG DS XL1 @V56BDA8 00817710 DASFCCW DS A ADDR OF FAILED CCW+8 (FROM CSW). @V56BDA8 00817780 ORG DASFCCW DOUBLE UP & SAVE 4 BYTES. @V56BDA8 00817850 DASINTSV DS A ADDR OF ORIGINAL CHNL PROG. @V56BDA8 00817920 CONTINAD DS A CONTAINS EITHER 0 OR THE ADDR OF @V56BDA8 00817990 * A POINT IN THIS ERROR RECOVERY ROUTINE 00818060 * WHERE WE WANT PROCESSING TO RESUME AFTER 00818130 * A RETRY. 00818200 RCAL EQU X'13' SYMBOL FOR RECALIBRATE CCW OPCODE@V56BDA8 00818270 TIC EQU X'08' SYMBOL FOR TIC CCW OPCODE. @V56BDA8 00818340 EJECT 00818410 ********************************************************************** 00819000 * 00819500 * ERRHAND: ERROR HANDLER FOR NON-DASD I/O ERROR. 00820000 * 00820500 ********************************************************************** 00821000 SPACE 1 00822000 ERRHAND EQU * @VM08630 00823000 NI IOBFLAGS,255-IOBFERP ERROR RTN IS RESPONSIBLE @V56BDA8 00823500 * FOR TURNING THIS OFF. 00824000 TM IOBCSW+4,ATTN IS THIS AN ATTENTION INTERRUPT? @V56BDA8 00824500 BZ CONUNCK NO, GO CHECK FOR UNIT CHECK @VM08630 00825000 TM PARM,PARMGRP IS THIS A GRAPHIC DEVICE ? @VM08630 00826000 BZ CONUNCK NO, GO CHECK FOR UNIT EXECPTION @VM08630 00827000 TM PARM,PARMATT IS THIS AN ATTENTION REQUEST ? @VM08630 00828000 BO SIORET YES, RETURN TO IN LINE CODE. @V56BDA8 00829000 CONUNCK EQU * @VM08630 00830000 L R1,IOBRCAW RETRY SAME CHANNEL PROGRAM. @V56BDA8 00830700 TM IOBCSW+4,UE IS THIS A UNIT EXCEPTION? @V56BDA8 00831400 BO RETRYIO YES, RESTART DEVICE. @V56BDA8 00832100 DIEHERE EQU * @VM08630 00833000 LPSW BADINPUT INPUT TO SYSTEM INCORRECT @VM08630 00834000 ********************************************************************* 00835000 ******************************************************************** 00836000 SPACE 2 00837000 ********************************************************************* 00838000 ATTNHAND EQU * @V200731 00839000 L R4,GRAPHSAV+24 RESTORE REGISTER 4 @VM08630 00840000 TM IOBCSW+4,ATTN IS THIS AN ATTENTION INTERRUPT? @V56BDA8 00841000 BCR 1,R5 YES, RETURN TO IN LINE CODE @VM08630 00842000 B WAITANY WAITS FOR ANY INTERRUPT. RETURN @V56BDA8 00842200 * ADDR (TO GRAPHIC0 OR GRAPHIC3) IS STILL 00842400 * IN R14. GRAPHIC0 OR GRAPHIC3 THEN COMES 00842600 * HERE AGAIN TO ATTNHAND IMMEDIATELY AND 00842800 * TESTS DID INTERRUPT HAVE ATTN. IF IT 00843000 * DIDN'T, WE WAIT AGAIN. NOTE THAT WAITANY 00843200 * WILL HAVE AN ERROR ROUTINE LOOK AT THE 00843400 * ATTENTION INTERRUPT BEFORE RETURNING 00843600 * ON R14. 00843800 ******************************************************************** 00844000 EJECT 00844250 ****************** DATA AREA FOR STARTIO ROUTINE ********************** 00844500 SENSECNT DS H COUNT OF BYTES IN 'SENSE' FIELD. @V56BDA8 00844750 SENSECCW CCW X'04',SENSE,SILI,L'SENSE @V56BDA8 00845000 SENSE DS XL24 SENSE DATA IS READ INTO THIS. @V56BDA8 00845250 SIOSAVE DS 7F SAVES USER REGS FOR STARTIO. @V56BDA8 00845500 SPACE 3 00845750 **CMNT** IOB DSECT @V56BDA8 00846000 IOBFLAGS DC X'00' BIT FLAGS, EQUATED BELOW, MUST @V56BDA8 00846250 * BE ZEROES INITIALLY. 00846500 *------------------ START OF IOBFLAGS BIT EQUATES --------------------- 00846750 IOBFSTRT EQU X'80' SET TO 1 MEANS REQUESTED I/O @V56BDA8 00847000 * WAS STARTED. 00847250 IOBFNRDY EQU X'40' SET TO 1 MEANS SIO WAS BLOCKED BY@V56BDA8 00847500 * THE DEVICE (DVC NOT READY, ETC). 00847750 IOBFCC3 EQU X'20' SET TO 1 MEANS DVC 'NOT @V56BDA8 00848000 * OPERATIONAL' (SIO GAVE CC=3). 00848250 IOBFERP EQU X'10' SET TO 1 MEANS ERROR RECOVERY IS @V56BDA8 00848500 * IN PROGRESS. ERROR ROUTINE GETS CONTROL 00848750 * BACK AFTER EACH I/O RETRY, EVEN IF NO 00849000 * ERROR. ONLY 'STARTIO' CAN TURN THIS ON. 00849250 * BUT ERROR ROUTINE MUST EVENTUALLY TURN 00849500 * IT OFF. 00849750 IOBFWANY EQU X'08' SET TO 1 MEANS 'WAITANY' WAS @V56BDA8 00850000 * CALLED AND WE ARE WAITING FOR AN 00850250 * INTERRUPT FROM ANY DEVICE. 00850500 IOBFDEW EQU X'04' SET TO 1 MEANS USER WANTS I/O @V56BDA8 00850750 * OPERATION TO BE REGARDED AS HAVING 00851000 * COMPLETED WHEN DE STATUS IS PRESENTED 00851250 * (NORMALLY CE IS REGARDED AS COMPLETION). 00851500 IOBFATAL EQU X'02' MAY BE SET BY ERROR ROUTINE AND @V56BDA8 00851750 * RETURNED TO USER TO INDICATE 00852000 * NON-RECOVERABLE ERROR. 00852250 *---------------------- END OF BIT EQUATES ---------------------------- 00852500 IOBRCAW DS F RESTART CAW; PROTECT KEY AND CHNL@V56BDA8 00852750 * PROGRAM ADDR USED THE LAST TIME EITHER 00853000 * STARTIO OR RETRYIO WAS GIVEN CONTROL. 00853250 IOBERROR DS A ADDR OF ERROR RECOVERY RTN OR 0. @V56BDA8 00853500 DS 0F FOR ALIGNMENT OF IOBCSW. @V56BDA8 00853750 IOBCSW DS XL8 CSW FROM REQUESTED I/O. RETURNED@V56BDA8 00854000 * TO CALLER OR PASSED TO ERROR ROUTINE. 00854250 IOBERCNT DS H ERROR RETRY COUNT. AUTOMATICALLY@V56BDA8 00854500 * ZEROED WHEN AN INITIAL ERROR CONDITION 00854750 * IS PASSED TO AN ERROR ROUTINE. IF THE 00855000 * ERROR ROUTINE GOES TO 'RETRYIO' WITH 00855250 * THE IOBFERP FLAG SET, THEN THIS COUNTER 00855500 * IS AUTOMATICALLY INCREMENTED BY ONE EACH 00855750 * TIME CONTROL IS GIVEN BACK TO THE ERROR 00856000 * ROUTINE. IF THE ERROR ROUTINE TURNS OFF 00856250 * THE IOBFERP FLAG THEN THIS COUNT IS 00856500 * AUTOMATICALLY RESET TO 0 BEFORE THE 00856750 * ERROR ROUTINE RECEIVES CONTROL AGAIN. 00857000 SPACE 3 00857250 ********************************************************************** 00860000 DISABLE DC X'00' DISABLE ALL INTERRUPTS @VM08630 00861000 SPACES DC CL6' ' WORK AREA @VM08630 00862000 INPUT DC CL6' ' WORK AREA @VM08630 00863000 DS 0D @VM08630 00864000 BADINPUT DC X'00020000',X'00000027' SYSTEM INPUT INCORRECT @VM08630 00865000 ENABLAB DC X'FE060000',A(0) ENABLED WAIT STATE. @V56BDA8 00866000 IOPSW DC X'00040000',A(IOINT) I/O INTERRUPT HANDLER. @V56BDA8 00867000 MCPSW DC X'00020000',C' MCH' @VM08630 00868000 PCPSW DC X'00020000',C' PRG' @VM08630 00869000 SIOERROR DC A(CONINT) FIELD FOR ERROR HANDLER ADDRESS @VM08630 00870000 CONTBL DC X'00090000' SET UP FOR THE CONSOLE @VM08630 00871000 RESTBL DC F'00' SET UP FOR THE DASD DEVICE @VM08630 00872000 DEVBLKS DC V(DMKRIOCH,DMKRIOCU,DMKRIODV) 00873000 ALLODEV DC A(DMKRIODV) 00874000 ALLOCU DC A(DMKRIOCU) 00875000 FFS32 DC 32X'FFFF' CLEAR CONTROL BLOCKS @V200731 00876000 SPACE 3 00877000 PRINTER DC AL1(L'PRTADDR) 00878000 PRTADDR DC C'ENTER PRINTER ADDRESS (CUU):' 00879000 DC AL1(L'PRTCLS) 00880000 PRTCLS DC C'ENTER DEVICE TYPE (1403,1443,3211,3203,3800):' @V60B9BA 00881000 DC C'1403 ',AL1(CLASURO,TYP1403) 00882000 DC C'1443 ',AL1(CLASURO,TYP1443) 00883000 DC C'3211 ',AL1(CLASURO,TYP3211) 00884000 DC C'3203 ',AL1(CLASURO,TYP3203) @V386298 00884100 DC C'3800 ',AL1(CLASURO,TYP3800) @V60B9BA 00884550 DC 7X'FF' 00885000 SPACE 1 00886000 PUNCH DC AL1(L'PCHADDR) 00887000 PCHADDR DC C'ENTER PUNCH ADDRESS (CUU):' 00888000 DC AL1(L'PCHCLS) 00889000 PCHCLS DC C'ENTER DEVICE TYPE (2540P,3525):' 00890000 DC C'2540P',AL1(CLASURO,TYP2540P) 00891000 DC C'3525 ',AL1(CLASURO,TYP3525) 00892000 DC 7X'FF' 00893000 SPACE 1 00894000 READER DC AL1(L'RDRADDR) 00895000 RDRADDR DC C'ENTER READER ADDRESS (CUU):' 00896000 DC AL1(L'RDRCLS) 00897000 RDRCLS DC C'ENTER DEVICE TYPE (2501,2540R,3505):' 00898000 DC C'2501 ',AL1(CLASURI,TYP2501) 00899000 DC C'2540R',AL1(CLASURI,TYP2540R) 00900000 DC C'3505 ',AL1(CLASURI,TYP3505) 00901000 DC 7X'FF' 00902000 SPACE 1 00903000 PIDTAPE DC AL1(L'PIDADDR) 00904000 PIDADDR DC C'ENTER ADDRESS WHERE PID TAPE IS MOUNTED (CUU):' 00905000 DC AL1(L'PIDCLS) 00906000 PIDCLS DC C'ENTER DEVICE TYPE (2401,2415,2420,3420):' 00907000 DC C'2401 ',AL1(CLASTAPE,TYP2401) 00908000 DC C'2415 ',AL1(CLASTAPE,TYP2415) 00909000 DC C'2420 ',AL1(CLASTAPE,TYP2420) 00910000 DC C'3420 ',AL1(CLASTAPE,TYP3420) 00911000 DC 7X'FF' 00912000 SPACE 1 00913000 BKUPTAPE DC AL1(L'BKUPADDR) 00914000 BKUPADDR DC C'ENTER ADDRESS WHERE SCRATCH TAPE IS MOUNTED (CUU):' 00915000 DC AL1(L'BKUPCLS) 00916000 BKUPCLS DC C'ENTER DEVICE TYPE (2401,2415,2420,3420):' 00917000 DC C'2401 ',AL1(CLASTAPE,TYP2401) 00918000 DC C'2415 ',AL1(CLASTAPE,TYP2415) 00919000 DC C'2420 ',AL1(CLASTAPE,TYP2420) 00920000 DC C'3420 ',AL1(CLASTAPE,TYP3420) 00921000 DC 7X'FF' 00922000 SPACE 1 00923000 SYSRES DC AL1(L'SYSADDR) 00924000 SYSADDR DC C'ENTER DEVICE ADDRESS WHERE SYSTEM RESIDENCE WILL BE BUX00925000 ILT (CUU):' 00926000 DC AL1(L'SYSCLS+L'SYSDEV) @V2A2029 00927000 SYSCLS DC C'ENTER DEVICE TYPE ' @V2A2029 00928000 SYSDEV DC C'(2319,2314,3330,3340,3350,3375,3380,2305):' HRC106DK 00929100 DC C'2319 ',AL1(CLASDASD,TYP2319) 00930000 DC C'2314 ',AL1(CLASDASD,TYP2314) 00931000 DC C'3340 ',AL1(CLASDASD,TYP3340) @V2A2029 00932000 DC C'3330 ',AL1(CLASDASD,TYP3330) 00933000 DC C'3350 ',AL1(CLASDASD,TYP3350) @V304498 00934000 DC C'3375 ',AL1(CLASDASD,TYP3375) HRC106DK 00934100 DC C'3380 ',AL1(CLASDASD,TYP3380) HRC106DK 00934200 DC C'2305 ',AL1(CLASDASD,TYP2305) 00935000 DC 7X'FF' 00936000 SPACE 1 00937000 WORKPACK DC AL1(L'WORKADDR) 00938000 WORKADDR DC C'ENTER ADDRESS WHERE A SCRATCH PACK IS MOUNTED (CUU):' 00939000 DC AL1(L'WORKCLS) 00940000 WORKCLS DC C'ENTER DEVICE TYPE (2319,2314,3340,3330):' @V2A2029 00941000 DC C'2319 ',AL1(CLASDASD,TYP2319) 00942000 DC C'2314 ',AL1(CLASDASD,TYP2314) 00943000 DC C'3340 ',AL1(CLASDASD,TYP3340) @V2A2029 00944000 DC C'3330 ',AL1(CLASDASD,TYP3330) 00945000 DC 7X'FF' 00946000 LNGMSG DC AL1(L'STRTMSG+128) @VM08936 00947000 STRTMSG DC C'VM/370 STARTER SYSTEM RELEASE 6.0' 00948000 SPACE 2 00949000 LNGDEF DC AL1(L'DEFINE) 00950000 DEFINE DC C'***DO YOU WISH TO RE-DEFINE YOUR SYSTEM***(YES,NO):' 00951000 SPACE 1 00952000 LNGDEV DC AL1(L'DEVUSED+128) 00953000 DEVUSED DC C'**ERROR** DEVICE HAS BEEN ALREADY ALLOCATED' 00954000 SPACE 1 00955000 COMPLEN DC AL1(L'COMPLINE+128) 00956000 COMPLINE DC C'***SYSTEM DEFINITION COMPLETED***' 00957000 SPACE 1 00958000 LASTLEN DC AL1(L'LASTLINE) 00959000 LASTLINE DC C'ARE THE ABOVE ENTRIES CORRECT (YES,NO):' 00960000 SPACE 1 00961000 BLKLEN DC AL1(L'BLKLINE+128) 00962000 BLKLINE DC C' ' 00963000 SPACE 1 00964000 PRTLEN DC AL1(L'PRTLINE+128) 00965000 PRTLINE DC C' PRINTER' 00966000 SPACE 1 00967000 PCHLEN DC AL1(L'PCHLINE+128) 00968000 PCHLINE DC C' PUNCH' 00969000 SPACE 1 00970000 RDRLEN DC AL1(L'RDRLINE+128) 00971000 RDRLINE DC C' READER' 00972000 SPACE 1 00973000 PIDLEN DC AL1(L'PIDLINE+128) 00974000 PIDLINE DC C' PID TAPE' 00975000 SPACE 1 00976000 TAPLEN DC AL1(L'TAPLINE+128) 00977000 TAPLINE DC C' SCRATCH TAPE' 00978000 SPACE 1 00979000 RESLEN DC AL1(L'RESLINE+128) 00980000 RESLINE DC C' NEW SYSTEM RESIDENCE' 00981000 SPACE 1 00982000 PACKLEN DC AL1(L'PACKLINE+128) 00983000 PACKLINE DC C' SCRATCH PACK' 00984000 SPACE 00985000 SNSAREA DC XL24'00' @V2A2029 00986000 SPACE 1 00987000 SPACE 1 00988000 SKADR DS 0H @V304498 00989000 BIN DC X'0000' 00990000 CYL DC X'0000' 00991000 HEAD DC X'0000' 00992000 REC DC X'00' 00993000 SPACE 00994000 * THE DMKRIO MODULE MUST BE BETWEEN ADDRESS X'3000' AND X'F000' 00995000 * AND MUST START ON A PAGE BOUNDARY 00996000 DS 0F 00997000 * HEAD AND RECORD NUMBER FOR 2314 DEVICE 00998000 PAGE2314 DC AL1(00,01,00,02,01,03,01,04,02,05) 00999000 DC AL1(03,06,03,07,04,08,05,09,05,10) 01000000 DC AL1(06,11,06,12,07,13,08,14,08,15,09,16) 01001000 SPACE 01002000 DS 0F @V2A2029 01003000 * HEAD AND RECORD NUMBER FOR 3340 DEVICE 01004000 PAGE3340 DC AL1(00,01,00,02,01,03,01,04,02,05) @V2A2029 01005000 DC AL1(02,06,03,07,03,08,04,09,04,10) @V2A2029 01006000 DC AL1(05,11,05,12,06,13,06,14,07,15,07,16) @V2A2029 01007000 SPACE 01008000 DS 0F 01009000 * HEAD AND RECORD NUMBER FOR 3330 DEVICE 01010000 PAGE3330 DC AL1(00,01,00,02,00,03,01,04,01,05) 01011000 DC AL1(01,06,02,07,02,08,02,09,03,10) 01012000 DC AL1(03,11,03,12,04,13,04,14,04,15,05,16) @V200731 01013000 DS 0F @V304498 01014000 * HEAD AND RECORD NUMBER FOR 3350 DEVICE 01015000 PAGE3350 DC AL1(00,01,00,02,00,03,00,04,01,05,01,06) @V304498 01016000 DC AL1(01,07,01,08,02,09,02,10,02,11,02,12) @V304498 01017000 DC AL1(03,13,03,14,03,15,03,16) @V304498 01018000 * Head and record number for 3375 device HRC106DK 01018100 PAGE3375 DC AL1(00,01,00,02,00,03,00,04) HRC106DK 01018150 DC AL1(00,05,00,06,00,07,00,08) HRC106DK 01018200 DC AL1(01,09,01,10,01,11,01,12) HRC106DK 01018250 DC AL1(01,13,01,14,01,15,01,16) HRC106DK 01018300 * Head and record number for 3380 device HRC106DK 01018350 PAGE3380 DC AL1(00,01,00,02,00,03,00,04) HRC106DK 01018400 DC AL1(00,05,00,06,00,07,00,08) HRC106DK 01018450 DC AL1(00,09,00,10,01,11,01,12) HRC106DK 01018500 DC AL1(01,13,01,14,01,15,01,16) HRC106DK 01018550 ******************************************************************** 01019000 EJECT 01020000 DS 0H @V60A6B6 01020080 ADDR1 DC X'5B5F' LOCATION LINE 22, COL 80 @V60A6B6 01020160 ADDR2 DC X'5D6B' LOCATION LINE 24, COL 60 @V60A6B6 01020240 ADDR3 DC X'D65F' LOCATION LINE 18, COL 80 @V60A6B6 01020320 ADDR4 DC X'D86B' LOCATION LINE 20, COL 60 @V60A6B6 01020400 ADDR5 DC X'4040' INITIALIZED FOR CURSOR CHECK @V60A6B6 01020480 ADDR6 DC X'5B60' LOCATION LINE 23 COL 01 @V60A6B6 01020560 ADDR7 DC X'D660' LOCATION LINE 19 COL 01 @V60A6B6 01020640 MAXLEN DC F'0000' @V60A6B6 01020720 LEN3270 DC F'1760' SCREEN FOR 3270 = 1760 @V60A6B6 01020800 LEN3278 DC F'1440' SCREEN FOR 3278 MOD2A = 1440 @V60A6B6 01020880 ********************************************************************* 01021000 * CCWS FOR 3215/3210 AND DASD DEVICES 01022000 ********************************************************************* 01023000 DS 0D @V200731 01024000 SPACE 2 01026000 DSKPROG CCW X'07',SKADR,CC+SILI,6 @V200731 01027000 CCW X'31',SKADR+2,CC+SILI,5 @V200731 01028000 CCW X'08',*-8,CC+SILI,1 @V200731 01029000 CCW X'05',DMKRIO,SILI,4096 @V200731 01030000 SPACE 2 01031000 RD3210 CCW X'0A',*-*,SILI+CC,140 READ WITH CARRIAGE RETN. @V200731 01032000 CCW X'03',*-*,SILI,1 @V200731 01033000 SPACE 2 01034000 WRT3210 CCW X'01',*-*,SILI+CC,140 WRITE WITH NO CARRIAGE @V200731 01035000 * RETN 01036000 CCW X'03',*-*,SILI,1 @V200731 01037000 SPACE 2 01038000 WRT3210A CCW X'09',*-*,SILI+CC,140 WRITE WITH CARRIAGE RETN @V200731 01039000 CCW X'03',*-*,SILI,1 @V200731 01040000 SPACE 2 01041000 ********************************************************************* 01042000 SPACE 2 01043000 ********************************************************************** 01044000 * GRAPHIC SUPPORT CCWS 01045000 ********************************************************************** 01046000 CRTWORD CCW X'27',SBACP,SILI+CC,2 SET BAR TO (STATUS WORD) @V200731 01047000 CCW X'01',CPXYSTAT,SILI+CC,20 WRITE 'RUNNING' ON @V200731 01048000 * SCREEN 01049000 CCW X'27',SBAREAD,SILI+CC,2 SET BUFFER ADDR FOR @V200731 01050000 * WRITE 01051000 CCW X'01',BLNKZERO,SILI+CC,140 CLEAR INPUT AREA @VM08630 01052000 CURS3066 CCW X'0F',SBAREAD,SILI+CC,2 REPOSITION CURSOR @V200731 01053000 CCW X'03',*-*,SILI,3 END OF READ CCW STRING @V200731 01054000 SPACE 2 01055000 CRTWORD1 CCW X'01',LAB3270A,SILI+CC,LEN THE CONTROL DATA @VM08630 01056000 CCW X'03',*-*,SILI,2 @V200731 01057000 SPACE 2 01058000 REQREAD CCW X'27',SBACP,SILI+CC,2 SET BUFFER ADDR TO CP X-Y @V200731 01059000 CCW X'01',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 01060000 CCW X'08',CURS3066,SILI,1 RESET CURSOR POSITION @V200731 01061000 SPACE 2 01062000 REQREAD1 CCW X'01',LAB3270B,SILI+CC,LEN1 THE CONTROL DATA @VM08630 01063000 CCW X'03',*-*,SILI,2 @V200731 01064000 SPACE 2 01065000 ERSE3066 CCW X'07',*-*,SILI+CC,1 ERASE ENTIRE SCREEN @V200731 01066000 WRTCRTXY CCW X'27',SBADDR,SILI+CC,2 SET CORRECT LINE @V200731 01067000 WRT3066 CCW X'01',*-*,SILI+CC,140 WRITE OUT USER DATA @V200731 01068000 CCW X'08',CRTWORD,SILI,1 NOW DISPLAY STATUS @V200731 01069000 SPACE 2 01070000 ERSE3270 CCW X'05',LAB3270E,SILI+CD,LEN3 ERASE THE SCREEN @VM08936 01071000 CCW X'00',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 01072000 WRTCRT70 CCW X'01',LAB3270,SILI+CD,4 THE CONTROL DATA @V200731 01073000 WRTCR70 CCW X'00',*-*,SILI+CD,0 THE WRITE CCW @V200731 01074000 CCW X'00',LAB3270A+1,SILI+CC,LEN-1 WRITE STATUS @V200731 01075000 CCW X'03',*-*,SILI,2 @V200731 01076000 SPACE 2 01077000 RDMI3066 CCW X'0E',RDMIDATA,SILI+CC,3 READ CCW FOR MI COMMAND@V200731 01078000 RD3066 CCW X'27',SBAREAD,SILI+CC,2 SET BUFFER ADDR FOR READ@V200731 01079000 RD3066DA CCW X'06',*-*,SILI+CC,140 READ INPUT DATA @V200731 01080000 CCW X'08',CURS3066,SILI,1 REPOSITION CURSOR @V200731 01081000 SPACE 2 01082000 RDMI3270 CCW X'01',LAB3270D,SILI+CC,4 @V200731 01083000 RD3270DA CCW X'06',*-*,SILI+CC,0 THE CCW FOR READ @V200731 01084000 CCW X'03',*-*,SILI,2 @V200731 01085000 SPACE 2 01086000 CNCL3270 CCW X'01',LAB3270E,SILI+CD,LEN3 THE CONTROL DATA @V200731 01087000 CCW X'00',CPXYSTAT,SILI+CC,20 WRITE SCREEN STATUS @V200731 01088000 CCW X'03',*-*,SILI,2 @V200731 01089000 SPACE 2 01090000 CNCL3066 CCW X'07',*-*,SILI+CC,1 ERASE SCREEN @V200731 01091000 CCW X'08',CRTWORD,SILI,1 NOW DISPLAY STATUS @V200731 01092000 SPACE 2 01093000 HOLDCCW1 CCW X'01',LAB3270C,SILI+CC,LEN2 THE CONTROL DATA @V200731 01094000 CCW X'03',*-*,SILI,2 @V200731 01095000 SPACE 2 01096000 ********************************************************************** 01097000 ********************************************************************* 01098000 * FIRST DC ARE ADDRESSES FOR LINES 1 -6 01099000 * SECOND DC ARE ADDRESSES FOR LINES 7 - 12 01100000 * THIRD DC ARE ADDRESSES FOR LINES 13 - 18 01101000 * FOURTH DC ARE ADDRESSES FOR LINES 19 - 24 01102000 ********************************************************************* 01103000 SPACE 2 01104000 TABLE70 DS 0D @V200731 01105000 DC X'4040C150C260C3F0C540C650' @V200731 01106000 DC X'C760C8F04A404B504C604DF0' @V200731 01107000 DC X'4F405050D160D2F0D440D550' @V200731 01108000 DC X'D660D7F0D9405A505B605CF0' @V200731 01109000 SPACE 1 01110000 * X'5B60' - LINE 23, COL. 1 01111000 * X'5D6A' - LINE 24, COL. 59 01112000 SPACE 2 01113000 ********************************************************************** 01114000 WC6 EQU X'C2' WRITE CONTROL BIT 6 @V200731 01115000 AT7 EQU X'C1' ATTRIBUTE BIT 7 @V200731 01116000 AT2 EQU X'E0' ATTRIBUTE BIT 2 @V200731 01117000 LAC EQU X'C0' @V200731 01118000 SF EQU X'1D' START OF FIELD CONTROL @V200731 01119000 SBA EQU X'11' SET BUFFER ADDRESS @V200731 01120000 IC EQU X'13' INSERT CURSOR @V200731 01121000 EUA EQU X'12' ERASE UNPROTECTED @V200731 01122000 RA EQU X'3C' REPEAT TO ADDRESS @V200731 01123000 *********************************************************************** 01123100 SPACE 3 01123200 X01 EQU X'01' INDICATE DEVICE TYPE 3278 @V60A6B6 01123300 X0C EQU X'0C' DISPLACEMENT FOR 3278 @V60A6B6 01123400 X2A EQU X'2A' MODEL NUMBER FOR 3278 @V60A6B6 01123500 SPACE 2 01124000 LAB3270A DC AL1(WC6),AL1(SBA),X'5B60',AL1(SF),AL1(AT7) @V200731 01125000 DC AL1(IC),AL1(EUA),X'5D6B',AL1(SF),AL1(AT2) @V200731 01126000 RUNLABEL DC CL20'RUNNING' @V200731 01127000 LEN EQU *-LAB3270A @V200731 01128000 LAB3270B DC AL1(WC6),AL1(SBA),X'5B60',AL1(SF),AL1(AT7) @V200731 01129000 DC AL1(IC),AL1(SBA),X'5D6B',AL1(SF),AL1(AT2) @V200731 01130000 REALABEL DC CL20'CP READ' @V200731 01131000 LEN1 EQU *-LAB3270B @V200731 01132000 LAB3270C DC AL1(WC6),AL1(SBA),X'5D6B',AL1(SF),AL1(AT2) @V200731 01133000 HOLLABEL DC CL20'HOLDING' @V200731 01134000 LEN2 EQU *-LAB3270C @V200731 01135000 LAB3270D DC AL1(LAC),AL1(SBA),X'5B60' @V200731 01136000 LAB3270 DC AL1(WC6),AL1(SBA),X'0000' @V200731 01137000 LAB3270E DC AL1(WC6),AL1(SBA),X'4040',AL1(RA),X'5B60',X'00' @V200731 01138000 DC AL1(SF),AL1(AT7),AL1(IC),AL1(SBA) @V200731 01139000 DC X'5D6B',AL1(SF),AL1(AT2) @V200731 01140000 LEN3 EQU *-LAB3270E @V200731 01141000 SPACE 2 01142000 ********************************************************************* 01143000 PARM DC X'00' THE GRAPHIC FLAG BYTE @V200731 01144000 PARMATT EQU X'80' ATTENTION REQUEST @VM08630 01145000 PARMGRP EQU X'40' GRAPHIC SUPPORT @VM08630 01146000 PARMREA EQU X'20' READ REQUEST @VM08630 01147000 PARMCLE EQU X'10' CLEAR/ERASE REQUEST @VM08630 01148000 PARM327 EQU X'08' 3270 GRAPHIC DEVICE @VM08630 01149000 PARMNAUT EQU X'04' NO CARRIAGE RETURN @VM08630 01150000 PARM01F EQU X'02' 01F REQUEST @VM08630 01151000 PARM321 EQU X'01' 3215/3210/1052 @VM08630 01152000 PARM2 DC X'00' SIO SWITCHES @VM08630 01153000 PARMNDA EQU X'40' NO DATA INDICATED @VM08630 01155000 ********************************************************************** 01156000 SPACE 2 01157000 ********************************************************************* 01158000 SBADDR DC AL1(00,00) CURRENT OUTPUT LINE COORDINATES @V200731 01159000 SBACP DC AL1(34,60) COORDINATES FOR SCREEN 'STATUS' @V200731 01160000 SBAREAD DC AL1(33,00) COORDINATES FOR CURSOR POSITION @V200731 01161000 RDMIDATA DC XL3'00' READ DATA FROM 'MI' COMMAND @V200731 01162000 CPXYSTAT DC CL20' ' SCREEN 'STATUS' WORD @V200731 01163000 BLNKLINE DC XL140'00' CLEAR INPUT AREA @VM08630 01164000 BLNKZERO DC CL140' ' BLANKS FOR READ AREA @VM08630 01165000 GRAPHSAV DC 8F'00' SAVE AREA FOR GRAPHIC SUPPORT @V200731 01166000 ********************************************************************* 01167000 EJECT 01168000 LTORG @V200731 01169000 EJECT 01170000 COPY RBLOKS @V200731 01171000 COPY DEVTYPES 01172000 COPY EQU 01173000 COPY SAVE 01174000 PSA 01175000 END 01176000