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