SIX TITLE 'DMKSIX (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE INPUT SEQUENCE FIELDS @V200820 00002000
DMKSIX CSECT 00003000
MODULEID DC CL8'DMKSIX' @VA01068 00004000
********************************************************************** 00005000
* 00006000
* MODULE NAME - DMKSIX 00007000
* 00008000
* FUNCTION 00009000
* THIS ROUTINE WILL ANALYZE THE 2860 CHANNEL LOGOUT AND 00010000
* SET APPROPRIATE BITS IN THE ECSW FIELD ACCORDING TO THE 00011000
* RESULTS OF THIS ANALYSIS. IT WILL ALSO MOVE THE CHANNEL 00012000
* LOGOUT TO THE CHANNEL CHECK RECORD. 00013000
* 00014000
* ENTRY POINTS 00015000
* DMKSIX - FROM THE CHANNEL CONTROL ROUTINE 00016000
* 00017000
* INPUT 00018000
* 1. CHANNEL LOGOUT DATA 00019000
* 2. POINTER TO THE CHANNEL CHECK RECORD 00020000
* 3. POINTER TO THE CCH SWITCH FIELD (ENTSW) 00021000
* 00022000
* OUTPUT 00023000
* 1. APPROPRIATE BITS ARE SET IN THE CCH RECORD 00024000
* FIELD (FAILECSW). 00025000
* 2. THE CHANNEL LOGOUT IS MOVE TO THE CCH RECORD. 00026000
* 00027000
* EXTERNAL REFERENCES 00028000
* CHANNEL LOGOUT (LOCATION X'130') 00029000
* 00030000
* EXIT - NORMAL 00031000
* RETURN TO THE CCH CONTROL ROUTINE VIA REGISTER 14. 00032000
* 00033000
* EXIT - ERROR 00034000
* NONE 00035000
* 00036000
* TABLES / WORK AREA 00037000
* THE CHANNEL CHECK RECORD 00038000
* 00039000
* ATTRIBUTES 00040000
* DMKSIX IS PRIVILEGED AND REUSABLE 00041000
* 00042000
* CHARACTER CODE DEPENDENCIES 00043000
* NONE 00044000
* 00045000
* NOTE 00046000
* NONE 00047000
* 00048000
********************************************************************** 00049000
EJECT 00050000
********************************************************************** 00051000
********************************************************************** 00052000
LOGWD1A EQU 304 1ST HALF OF LOGOUT WORD 1 00053000
LOGWD1B EQU 308 2ND HALF OF LOGOUT WORD 1 00054000
LOGWD2A EQU 312 1ST HALF OF LOGOUT WORD 2 00055000
LOGWD2B EQU 316 12ND HALF OF LOGOUT WORD 2 00056000
LOGWD3A EQU 320 1ST HALF OF LOGOUT WORD 3 00057000
LOGWD3B EQU 324 2ND HALF OF LOGOUT WORD 3 00058000
CCHOPIN EQU X'80' TEST FOR OPERATION IN 00059000
CCHPIT EQU X'02' POLLING INTERRUPT BIT 00060000
CCHSIOLH EQU X'02' SIO LATCH 00061000
CCHSTGCK EQU X'04' STORAGE CHECK BIT 00062000
CCHSETUP EQU X'10' SET UP BIT IN LOG 00063000
CCHCMDRG EQU X'20' COMMAND REGISTER PARITY VALID @VA01068 00064000
********************************************************************** 00065000
EJECT 00066000
********************************************************************** 00067000
ENTRY DMKSIX60 00068000
DMKSIX60 EQU * 00069000
USING PSA,R0 SETUP ADDRESSABILITY FOR LOWCORE 00070000
USING SAVEAREA,R13 SETUP ADDRESSABILITY FOR SAVE AREA 00071000
USING *,R12 SETUP ADDRESSABILITY FOR MODULE 00072000
USING CCHREC,R9 SETUP ADDRESSABILITY FOR CCH RECORD 00073000
USING IOERBLOK,R4 SETUP ADDRESSABILITY FO I/O ERROR 00074000
* BLOCK 00075000
LR R1,R12 SAVE THE BASE REG. TO AVIOD DESTROYING 00076000
LR R12,R15 SETUP BASE ADDRESS 00077000
STM R2,R0,CCHSAVE SAVE ALL REGS. EXECPT REGISTER 1 00078000
ST R1,CCHSAVE+40 SAVE THE CONTENT OF REGISTER 12 00079000
LA R2,6 SETUP COUNT VALUE FOR LOOP 00080000
LA R1,X'130' GET THE ADDRESS OF THE I/O EXTENDED 00081000
* LOGOUT 00082000
CCHLOGU EQU * 00083000
CLC 0(4,R1),FFS HAS CHANNEL LOGOUT ? 00084000
BE CLEANUP NO, GO SET SYSTEM TERMINATION 00085000
LA R1,4(R1) UPDATE THE I/O EXTENDED LOGOUT POINTER 00086000
BCT R2,CCHLOGU GO TEST NEXT LOCATION 00087000
IC R2,LOGWD3B+3 GET UNIT ADDRESS PARITY BIT 00088000
SRL R2,7 ISOLATE PARITY BIT 00089000
STC R2,PARIT SETUP PARITY TEST PARAMETER 00090000
BAL R14,LOGPAR GO TEST PARITY BYTE 00091000
DC AL2(LOGWD2A+3) LOCATION OF BYTE TO BE TESTED 00092000
DC X'01' NUMBER OF BYTES TO BE TESTED 00093000
PARIT DS X PARITY BYTE 00094000
BNE CCH109A BAD PARITY IS INDICATED 00095000
TM ENTSW,TIOCCH IS THIS AN ERROR ON A TIO ? 00096000
BZ VALIDCCH NO, GO SET UNIT ADDRESS VALID 00097000
CLC SIOADDR+1(1),LOGWD2A+3 IS THE UNIT ADDRESS EQUAL THE 00098000
* UNIT ADDRESS IN THE LOGOUT 00099000
BNE CCH109A NO, GO TEST PARITY BYTE 00100000
VALIDCCH EQU * 00101000
OI IGVALIDB,CCHDAV SET UNIT ADDRESS VALID FLAG 00102000
CCH109A EQU * 00103000
IC R2,LOGWD3B+3 GET PARITY BYTE FOR COMMAND REG 00104000
SRL R2,2 ISOLATE PARITY BIT 00105000
STC R2,PARIT1 SETUP PARITY TEST PARAMETER 00106000
BAL R14,LOGPAR GO TEST PARITY BYTE 00107000
DC AL2(LOGWD2A+1) LOCATION OF BYTE TO BE TESTED 00108000
DC X'01' NUMBER OF BYTES TO BE TESTED 00109000
PARIT1 DS X PARITY BYTE 00110000
BNE CCH109D BAD PARITY IS INDICATED 00111000
OI ENTSW,CCHCMDRG SET COMMAND REG VALID FLAG 00112000
CCH109D EQU * 00113000
TM CSW+5,IFCC IS THIS AN INTERFACE CONTROL CHECK ? 00114000
BO CCH110 YES, GO INDICATE TERMINATION CODE 00115000
OI IGTERMSQ,COMPFES SET FES TERMINATION CODE 00116000
TM LOGWD3B,X'80' IS OP-IN UP ? 00117000
BZ CCH109B NO, GET PARITY BYTE FOR COMMAND ADDR. 00118000
OI IGVALIDB,CCHUSV SET VALID UNIT STATUS FLAG 00119000
CCH109B EQU * 00120000
IC R2,LOGWD3B+2 GET PARITY BYTE FOR COMMAND ADDRESS 00121000
SRL R2,4 ISOLATE PARITY BIT 00122000
STC R2,PARIT2 SETUP PARITY TEST PARAMETER 00123000
BAL R14,LOGPAR GO TEST PARITY BYTE 00124000
DC AL2(LOGWD1A+1) LOCATION OF BYTE TO BE TESTED 00125000
DC X'03' NUMBER OF BYTES TO BE TESTED 00126000
PARIT2 DS X PARITY BYTE 00127000
BNE CCH112 BAD PARITY IS INDICATED 00128000
CLC LOGWD1A+1(3),CSW+1 IS THE CSW ADDRESS THE SAME AS 00129000
* IN THE LOGOUT 00130000
BL CCH112 NO, COMMAND ADDRESS IS INVALID 00131000
OI IGVALIDB,CCHCMDV SET COMMAND ADDRESS VALID FLAG 00132000
CCH112 EQU * 00133000
TM ENTSW,TIOCCH+HIOCCH IS THIS AN ERROR ON A TIO OR HIO ? 00134000
BNZ CCH128 YES, GO CHECK COMMAND CHAIN 00135000
CCH112G EQU * 00136000
TM LOGWD3A+1,CCHSETUP IS SET UP ON IN LOGOUT ? 00137000
BO CCH113 YES, GO SET RETRY CODE 00138000
TM ENTSW,CCHCMDRG IS COMMAND REG PARITY VALID ? 00139000
BZ CCH113 NO, GO SET RETRY CODE 00140000
TM LOGWD3B,CCHOPIN IS OP-IN UP ? 00141000
BO CCH112H YES, GO TEST LOGOUT 00142000
NI IGTERMSQ,X'FF'-COMPFES SET TERMINATION CODE TO (00) 00143000
CCH112H EQU * 00144000
TM ENTSW,TIOCCH IS THIS AN ERROR ON A TIO ? 00145000
BO CCH114 YES, GO CHECK SEQ. TRIGER 00146000
TM LOGWD3A,X'08' IS SEQ TWO TRIGER ON ? 00147000
BO CCH115 YES, GO CHECK DATA TRANFER 00148000
TM LOGWD3B+1,CCHSTGCK IS THIS A STORAGE ERROR ? 00149000
BO CCH112D YES, GO TEST COMMAND ADDRESS FLAG 00150000
CCH112A EQU * 00151000
OI IGBLAME,CCHCHNL INTERNAL CHANNEL ERROR 00152000
CCH112B EQU * 00153000
OI IGTERMSQ,RTCODE4 SET RETRY CODE TO (01) 00154000
TM LOGWD3B,CCHSIOLH IS SIO LATCH ON ? 00155000
BZ CCHRETRN NO, GO INITIALIZE THE LOGOUT AREA 00156000
CCH112C EQU * 00157000
OI IGVALIDB,CCHUSV SET UNIT STATUS VALID FLAG 00158000
B CCHRETRN GO INITIALIZE THE LOGOUT AREA 00159000
CCH112D EQU * 00160000
TM IGVALIDB,CCHCMDV IS THE COMMAND ADDRESS VALID F? 00161000
BZ CCH112A NO, GO INDICATE CHANNEL ERROR 00162000
OI IGBLAME,CCHSTG INDICATE STORAGE IS THE SOURCE OF THE 00163000
* ERROR 00164000
B CCH112B GO SET THE RETRY CODE 00165000
CCH110 EQU * 00166000
OI IGTERMSQ,COMPSEL SET THE TERMINATION CODE FOR THE 00167000
* SELECTOR RESET 00168000
OI IGVALIDB,CCHCMDV SET THE COMMAND ADDRESS VALID FLAG 00169000
TM LOGWD3B+1,X'20' IS DISCONNECT SET ? 00170000
BZ CCH110D NO, GO TEST FOR POLLING INTERUPT 00171000
OI IGTERMSQ,CCHDI SET THE DISCONNECT FLAG 00172000
CCH110D EQU * 00173000
TM LOGWD3A+1,CCHPIT IS POLLING INTERUPT FLAG SET ? 00174000
BZ CCH110A NO, GO TEST INDICATOR IN LOGUT 00175000
OI IGBLAME,CCHINTFC INDICATE INTERFACE IS THE SOURCE 00176000
* OF THE ERROR 00177000
OI IGTERMSQ,RTCODE3 SET THE RETRY CODE TO (011) 00178000
B CCHRETRN GO INITIALIZE THE LOGOUT AREA 00179000
CCH110A EQU * 00180000
TM ENTSW,TIOCCH+HIOCCH IS THIS AN ERROR ON A TIO OR HIO ? 00181000
BNZ CCH123 YES, GO CHECK COMMAND CHAIN 00182000
CCH110B EQU * 00183000
TM LOGWD3A+1,CCHSETUP IS SET UP BIT ON IN LOGOUT 00184000
BO CCH116 YES, GO SET THE RETRY CODE 00185000
TM ENTSW,CCHCMDRG DOES THE COMMAND REG HAVE VALID 00186000
* PARITY ? 00187000
BZ CCH116 NO, GO SET RETRY CODE 00188000
TM LOGWD3A,X'20' IS COMMAND CHAINING INDICATED ? 00189000
BO CCH110C YES, GO SET INTERFACE ERROR 00190000
TM LOGWD3B,CCHSIOLH IS THE SIO LATCH ON ? 00191000
BO CCH110C YES, GO SET INTERFACE ERROR 00192000
TM LOGWD3A,X'08' IS SEQ TWO TRIGER ON ? 00193000
BO CCH115 YES, GO CHECK FOR DATA TRANSFER 00194000
CCH110C EQU * 00195000
OI IGBLAME,CCHINTFC INDICATE INTERFACE IS THE SOURCE OF 00196000
* THE ERROR 00197000
OI IGTERMSQ,RTCODE1 SET RETRY CODE TO (001) 00198000
B CCHRETRN GO INITIALIZE LOGOUT AREA 00199000
CCH113 EQU * 00200000
OI IGTERMSQ,RTCODE4 SET THE RETRY CODE TO (100) 00201000
TM IGVALIDB,CCHDAV IS THE UNIT ADDRESS VALID ? 00202000
BO CCH113A YES, GO TEST FOR STORAGE CHECK 00203000
TM LOGWD3B,CCHSIOLH IS SIO LATCH ON ? 00204000
BZ CCH113B NO, GO SET INTERNAL CHANNEL ERRO FLAG 00205000
OI IGBLAME,CCHCPU INDICATE THAT CPU WAS THE SOURCE OF THE 00206000
* ERROR 00207000
B CCH113C GO TEST THE LOGOUT AREA 00208000
CCH113A EQU * 00209000
TM LOGWD3B+1,CCHSTGCK IS STORAGE ERROR INDICATED IN 00210000
* LOGOUT ? 00211000
BZ CCH113B NO, INDICATE CHANNEL ERROR IN ECSW 00212000
OI IGBLAME,CCHSTG INDICATE SOURCE OF ERROR IS STORAGE 00213000
B CCH113C GO TO STORAGE ERROR SECTION 00214000
CCH113B EQU * 00215000
OI IGBLAME,CCHCHNL CHANNEL IS THE SOURCE OF THE ERROR 00216000
CCH113C EQU * 00217000
TM LOGWD3B,CCHSIOLH IS SIO LATCH ON ? 00218000
BZ CCHRETRN NO, GO INITIALIZE LOGOUT AREA 00219000
NI IGVALIDB,X'FF'-CCHCMDV TURN OFF COMMAND ADDRESS VALID 00220000
* FLAG 00221000
B CCHRETRN GO INITIALIZE LOGOUT AREA 00222000
CCH114 EQU * 00223000
TM LOGWD3A,X'0E' ANY SEQ. TRIGERS ? 00224000
BNZ CCH115 YES, GO CHECK DATA TRANFER 00225000
TM LOGWD3A,X'20' IS THE COMMAND CHAINING BIT ON ? 00226000
BZ CCH114B NO, GO SET THE RETRY CODE 00227000
TM LOGWD3B,CCHOPIN IS OP-IN UP ? 00228000
BO CCH115 YES, GO CHECK FOR DATA TRANFER 00229000
OI IGBLAME,CCHCHNL INDICATE CHANNEL IS THE SOURCE OF 00230000
* ERROR 00231000
OI IGTERMSQ,RTCODE1 SET RETRY CODE TO (001) 00232000
B CCHRETRN GO INITIALIZE LOGOUT 00233000
CCH114B EQU * 00234000
OI IGTERMSQ,RTCODE4 SET THE RETRY CODE TO (100) 00235000
OI IGBLAME,CCHCHNL INDICATE CHANNEL IS THE SOURCE 00236000
* OF THE ERROR 00237000
B CCH117 GO CHECK FOR ICC ERROR 00238000
CCH115 EQU * 00239000
TM LOGWD3B,X'80' IS OP-IN UP ? 00240000
BO CCH115B NO, GO TEST FOR INTERFACE CONTROL CHECK 00241000
TM CSW+5,IFCC IS THIS AN INTERFACE CONTROL @VA01068 00242000
* CHECK 00243000
BZ CCH115C NO, SET CHANNEL ERROR FLAG @VA01068 00244000
CCH115A EQU * 00245000
OI IGBLAME,CCHINTFC ERROR WAS DUE TO INTERFACE 00246000
B CCH118 GO SET RETRY CODE 00247000
CCH115B EQU * 00248000
TM CSW+5,IFCC IS THIS AN INTERFACE CONTROL CHECK ? 00249000
BO CCH115A YES, GO SET INTERFACE AS BEING THE 00250000
* SOURCE OF THE ERROR 00251000
TM LOGWD3B+1,CCHSTGCK IS THIS A STORAGE CHECK ? 00252000
BO CCH115D YES, GO INDICATE STORAGE ERROR 00253000
CCH115C EQU * 00254000
OI IGBLAME,CCHCHNL INDICATE CHANNEL ERROR AS SOURCE 00255000
* OF ERROR 00256000
B CCH115E GO CHECK THE COMMAND VALID FLAG 00257000
CCH115D EQU * 00258000
OI IGBLAME,CCHSTG INDICATE THAT STORAGE WAS THE SOURCE OF 00259000
* THE ERROR 00260000
CCH115E EQU * 00261000
TM IGVALIDB,CCHCMDV IS THE COMMAND VALID BIT ON IN LOGOUT 00262000
BZ CCH118 NO, GO SET RETRY CODE 00263000
MVC PARIT3(1),LOGWD3B+2 MOVE PARITY BYTE INTO PARAMETER 00264000
BAL R14,LOGPAR GO TEST PARITY BYTE 00265000
DC AL2(LOGWD1B+2) LOCATION OF BYTE TO BE TESTED IN LOGOUT 00266000
DC X'02' NUMBER OF BYTES TO BE TESTED 00267000
PARIT3 DS X PARITY BYTE 00268000
BNE CCH118 BAD PARITY WAS INDICATED 00269000
NI LOGWD3A+2,X'0F' CLEAR UNWANTED BITS 00270000
BAL R14,LOGPAR GO TEST PARITY BYTE 00271000
DC AL2(LOGWD3A+2) LOCATION OF BYTE TO BE TESTED IN LOGOUT 00272000
DC X'01' NUMBER OF BYTES TO BE TESTED 00273000
DC X'00' PARITY BYTE 00274000
BE CCH120 GOOD PARITY INDICATED 00275000
CCH118 EQU * 00276000
OI IGTERMSQ,RTCODE5 SET THE RETRY CODE TO (101) 00277000
B CCHRETRN GO INITIALIZE LOGOUT AREA 00278000
CCH120 EQU * 00279000
L R2,CSW GET THE CSW ADDRESS 00280000
LA R2,0(R2) CLEAR THE HIGH ORDER BYTE 00281000
S R2,F8 GET THE ADDRESS OF THE LAST CCW 00282000
BM CCH118 NEGATIVE VALUE , GO INDICATE THAT 00283000
* IT IS INVALID 00284000
LH R3,6(R2) GET COUNT FROM CCW 00285000
N R3,XRIGHT16 CLEAR LOW ORDER BITS 00286000
IC R2,3(R2) GET LOW ORDER BYTE OF DATA ADDRESS 00287000
N R2,F7 CLEAR LOW ORDER BITS 00288000
CH R3,CSW+6 IS CCW COUNT LOWER THAN CSW COUNT ? 00289000
BL CCH122 YES, GO GET COUNT 00290000
CCH120A EQU * 00291000
AR R3,R2 ADD THE COUNTS TOGETHER 00292000
CH R3,LOGWD1B+2 DOES COUNT EQUAL LOGOUT COUNT ? 00293000
BNE CCH121 NO, GO SET RETRY CODE 00294000
IC R3,LOGWD3A+2 GET BYTE COUNT REGISTER 00295000
N R3,F7 CLEAR UNWANTED BITS 00296000
CR R2,R3 ARE THE COUNTS EQUAL ? 00297000
BNE CCH121 NO, GO SET CONDITION CODE 00298000
OI IGTERMSQ,RTCODE2 SET RETRY CODE TO (010) 00299000
B CCH117 GO SET COUNT VALID BIT 00300000
CCH121 EQU * 00301000
OI IGTERMSQ,RTCODE3 SET RETRY CODE TO (011) 00302000
CCH117 EQU * 00303000
TM CSW+5,IFCC IS THIS AN INTERFACE CONTROL CHECK ? 00304000
BO CCHRETRN YES, GO INITIALIZE LOGOUT AREA 00305000
OI IGPRGFLG,CCHCNTB SET COUNT VALID FLAG 00306000
B CCHRETRN GO INITIALIZE LOGOUT AREA 00307000
CCH122 EQU * 00308000
LH R1,CSW+6 GET CSW BYTE COUNT 00309000
N R1,XRIGHT16 CLEAR UNWANTED BITS 00310000
SR R1,R2 SUBTRACT DAB FROM COUNT 00311000
CR R1,R3 IS CSW COUNT HIGHER THAN CCW COUNT 00312000
BH CCH118 YES, GO SET THE RETRY CODE 00313000
B CCH120A GO CHECK FOR DATA TRANFER 00314000
CCH123 EQU * 00315000
TM LOGWD3A,X'2E' IS COMMAND CHAIN OR SEQ. TRIGERS ON ? 00316000
BNZ CCH110B YES, GO CHECK FOR SETUP BIT 00317000
TM LOGWD3A+1,CCHSETUP IS SETUP ON IN LOGOUT ? 00318000
BO CCH125 YES, GO CHECK FOR SELECT OUT 00319000
TM ENTSW,HIOCCH IS THIS AN ERROR ON A HIO ? 00320000
BO CCH126 YES, GO INDICATE TYPE OF ERROR 00321000
CCH116 EQU * 00322000
OI IGTERMSQ,RTCODE4 SET THE RETRY CODE TO (100) 00323000
OI IGBLAME,CCHINTFC INDICATE THAT INTERFACE IS THE 00324000
* SOURCE OF THE ERROR 00325000
B CCHRETRN GO INITIALIZE THE LOGOUT AREA 00326000
CCH125 EQU * 00327000
TM LOGWD3B,X'10' IS SELECT OUT ON ? 00328000
BO CCH116 YES, GO SET RETRY CODE 00329000
CCH126 EQU * 00330000
OI IGBLAME,CCHCHNL INDICATE CHANNEL IS THE SOURCE OF 00331000
* THE ERROR 00332000
CCH130 EQU * 00333000
OI IGTERMSQ,RTCODE4 SET RETRY CODE TO (100) 00334000
B CCHRETRN GO INITIALIZE THE LOGOUT 00335000
CCH128 EQU * 00336000
TM LOGWD3A,X'2E' IS COMMAND CHAIN OR SEQ. TRIGGERS ON 00337000
BNZ CCH112G YES, GO TEST FOR SETUP 00338000
TM ENTSW,TIOCCH IS THIS AN ERROR ON A TIO ? 00339000
BO CCH114B YES, GO SET RETRY CODE 00340000
TM IGVALIDB,CCHDAV IS THE UNIT ADDRESS VALID ? 00341000
BO CCH126 YES, GO SET RETRY CODE 00342000
OI IGBLAME,CCHCPU SET CPU AS SOURCE OF ERROR 00343000
B CCH130 GO INDICATE THE RETRY CODE 00344000
CLEANUP EQU * 00345000
OI ENTSW,TERMSYS SET SYSTEM TERMINATION 00346000
B CCHEXIT4 GO RESTORE REGISTERS 00347000
CCHRETRN EQU * 00348000
LA R1,X'130' GET THE ADDRESS OF THE I/O EXTENDED 00349000
* LOGOUT 00350000
MVC CCHLOG60(24),0(R1) SAVE THE I/O EXTENDED LOGOUT 00351000
MVI 0(R1),X'FF' INITIALIZE THE I/O EXTENDED LOGOUT 00352000
MVC 1(23,R1),0(R1) TO ALL ONES 00353000
MVI CCHSAVE+59,X'0D' CHANGE THE LENGTH OF THE CCH @VA00881 00354000
* RECORD 00355000
CCHEXIT4 EQU * 00356000
LM R2,R0,CCHSAVE RESTORE THE REGISTERS 00357000
BR R14 RETURN TO CCH CONTROL ROUTINE 00358000
********************************************************************** 00359000
SPACE 2 00360000
********************************************************************** 00361000
LOGPAR EQU * 00362000
LH R1,0(R14) GET ADDRESS OF BYTE TO BE CHECKED 00363000
SR R2,R2 CLEAR REGISTER 2 00364000
IC R2,2(R14) GET COUNT OF NUMBER OF BYTES 00365000
CCH202 EQU * 00366000
MVI CCHPARBT,X'01' CLEAR PARITY BYTE 00367000
SR R3,R3 CLEAR REGISTER 00368000
IC R3,0(R1) GET BYTE TO BE CHECKED 00369000
CCH201 EQU * 00370000
LTR R3,R3 IS CONTENT OF REGISTER 3 ZERO ? 00371000
BZ CCH200 YES, GO COMPARE PARITY BIT 00372000
EX R3,CCHXOR CALCULATE PARITY 00373000
SRL R3,1 GET NEXT BIT 00374000
B CCH201 GO TEST NEXT BIT 00375000
CCH200 EQU * 00376000
NI CCHPARBT,X'01' REMOVE UNWANTED BITS 00377000
IC R3,3(R14) GET PARITY BITS 00378000
BCTR R2,R0 REDUCE THE NUMBER OF BYTES 00379000
SRL R3,0(R2) ISOLATE PARITY BIT TO BE CHECKED 00380000
N R3,F1 REMOVE UNWANTED BITS 00381000
EX R3,CCHCLI TEST FOR PARITY BIT 00382000
BNE 4(R14) RETURN TO IN LINE CODE - BAD PARITY 00383000
LTR R2,R2 IS THIS LAST TEST ? 00384000
BE 4(R14) YES, RETURN TO IN LINE CODE - GOOD 00385000
* PARITY 00386000
LA R1,1(R1) UPDATE ADDRESS POINTER BY ONE 00387000
B CCH202 GO TEST FOR PARITY AGAIN 00388000
********************************************************************** 00389000
EJECT 00390000
********************************************************************** 00391000
CCHSAVE DS 16F 00392000
CCHPARBT DC X'00' PARITY CHECK BYTE 00393000
******************************************************************** 00394000
CCHXOR XI CCHPARBT,X'00' 00395000
CCHCLI CLI CCHPARBT,X'00' 00396000
********************************************************************** 00397000
********************************************************************** 00398000
EJECT 00399000
********************************************************************** 00400000
PSA 00401000
COPY EQU 00402000
COPY DEVTYPES 00403000
COPY SAVE 00404000
ENTSW EQU SAVEWRK1 @VA01638 00405000
SIOADDR EQU SAVEWRK9 SAVE THE DEVICE ADDRESS 00406000
EJECT 00407000
COPY IOER 00408000
COPY CCHREC 00409000
END 00410000