TITLE 'ICATS OWN SIO ROUTINE' MYI00010 *********************************************************************** MYI00020 * * MYI00030 * MODULE NAME = MYIORTN = MY OWN I/O ROUTINE * MYI00040 * * MYI00050 * FUNCTION = DO MY OWN SIO'S AS A SUBSTITUTE FOR DIAGNOSE X'0020'. * MYI00060 * * MYI00070 * ENTRY POINTS = MYIORTN * MYI00080 * * MYI00090 * LINKAGE = BALR R14,R15 FROM THE ICATS I/O ROUTINE (READUTS). * MYI00100 * LH R8,CBUTSVAD <------- NOTE THESE TWO * MYI00110 * LA R9,CCW <------- IRREGULARITIES * MYI00120 * L R15,=V(MYIORTN) * MYI00130 * BALR R14,R15 * MYI00140 * * MYI00150 * REGISTER CONTENTS UPON ENTRY = * MYI00160 * R8 = CONTAINS THE DEVICE ADDRESS TO DO THE SIO TO. * MYI00170 * R9 = CONTAINS THE ADDRESS OF THE CCW TO EXECUTE. * MYI00180 * R2 = POINTS TO THE ICATS COMMON DATA AREA AS ALWAYS. * MYI00190 * R14 = RETURN ADDRESS BACK TO CALLER. * MYI00200 * R15 = ADDRESS OF THIS SUBROUTINE (USED FOR BASE REG). * MYI00210 * * MYI00220 * REGISTER CONTENTS UPON EXIT = * MYI00230 * R15 = 0 * MYI00240 * * MYI00250 * REGISTER USAGE: * MYI00260 * R0 = FREE * MYI00270 * R14 = RETURN ADDRESS FOR WHEN I CALL SUBROUTINES * MYI00280 * R15 = SUBROUTINE ADDRESS * MYI00290 * * MYI00300 * MODULE LOGIC = * MYI00310 * I) XXXXXX * MYI00320 * 1) XXXXXX * MYI00330 * A) XXXXXX * MYI00340 * B) XXXXXX * MYI00350 * C) XXXXXX * MYI00360 * * MYI00370 * NORMAL EXIT = * MYI00380 * R15 = 0 * MYI00390 * * MYI00400 * EXTERNAL REFERENCES = NONE * MYI00410 * * MYI00420 * CONTROL BLOCKS = ICDATA (ICATS COMMON DATA AREA) * MYI00430 * * MYI00440 * NON-STANDARD MACROS (FOUND IN ICATS MACLIB) * MYI00450 * ICDATA = ICATS COMMON DATA AREA DSECT. * MYI00460 * * MYI00470 * CHANGE ACTIVITY * MYI00480 * DATE NAME REASON FOR CHANGE * MYI00490 * 04/27/83 RICK JASPER INITIAL PROGRAM CREATION * MYI00500 * * MYI00510 *********************************************************************** MYI00520 EJECT MYI00530 PRINT GEN,NODATA MYI00540 MYIORTN CSECT MYI00550 USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA MYI00560 USING MYIORTN,R15 USE R15 FOR NEXT INSTRUCTION ONLY MYI00570 STM R2,R14,HEXREGS SAVE CALLERS REGISTERS MYI00580 DROP R15 MYI00590 USING MYIORTN,R11 USE R11 FOR THIS ROUTINE'S BASE REG MYI00600 LR R11,R15 SWITCH BASE REGISTER TO R11 MYI00610 * MYI00620 MVI MYFLAG,X'00' RESET FLAGS MYI00630 SSM DISABSSM DISABLE INTERRUPTS MYI00640 SR R10,R10 INITIALIZE RETURN CODE MYI00650 REDOTIO1 TIO 0(R8) MYI00660 BC 8,REDOSIO DEVICE IS FREE MYI00670 BC 4,TIO1CSW CSW STORED MYI00680 BC 2,REDOTIO BUSY MYI00690 NODEVICE LA R10,1 DEVICE NOT THERE - RETURN CODE = 16 MYI00700 B SIOBYE MYI00710 TIO1CSW TM 68,X'02' SEE IF UNIT CHECK IS POSTED IN CSW MYI00720 BNO REDOTIO1 CONTINUE LOOPING IF NOT MYI00730 LA R10,SENSE0 PUT SENSE BYTE IN SENSE0 MYI00740 STCM R10,B'0111',MYSNSCCW+1 MYI00750 MVC 72(4),=A(MYSNSCCW) SET UP CAW TO DO A SENSE MYI00760 SIO 0(R8) MYI00770 SNSWAIT1 TIO 0(R8) WAIT AROUND UNTIL IT'S DONE MYI00780 BC 7,SNSWAIT1 MYI00790 TM MYFLAG,UNITCHCK ONLY GO THROUGH THIS CODE ONCE MYI00800 BO CON100 MYI00810 LA R10,13 RETURN CODE = 4 = UNIT CHECK MYI00820 LA R10,13 RETURN CODE = 4 = UNIT CHECK MYI00830 B SIOBYE SENSE0 CONTAINS THE SENSE BYTE MYI00840 CON100 OI MYFLAG,UNITCHCK DON'T COME THIS WAY AGAIN MYI00850 MVI SENSE0,X'00' CLEAR SENSE BYTE & RETRY SIO MYI00860 B REDOTIO1 MYI00870 * MYI00880 SPKA 0(0) PSW KEY MUST BE 0 TO PUT CAW IN PLACE MYI00890 ST R9,72(R0) STORE CHANNEL ADDRESS WORD MYI00900 REDOSIO SIO 0(R8) MYI00910 BC 8,WAIT4END SIO TOOK O.K. MYI00920 BC 2,REDOTIO1 BUSY - WAIT FOR FREE AGAIN MYI00930 BC 1,NODEVICE DEVICE NOT THERE MYI00940 * CSW STORED ON THE SIO INSTRUCTION. WHAT DOES IT SAY ?? MYI00950 TM 68,X'02' UNIT CHECK ON ?? MYI00960 BNO CON200 MYI00970 LA R10,SENSE0 PUT SENSE BYTE IN SENSE0 MYI00980 STCM R10,B'0111',MYSNSCCW+1 MYI00990 MVC 72(4),=A(MYSNSCCW) SET UP CAW TO DO A SENSE MYI01000 SIO 0(R8) MYI01010 SNSWAIT2 TIO 0(R8) WAIT AROUND UNTIL IT'S DONE MYI01020 BC 7,SNSWAIT2 MYI01030 LA R10,4 MYI01040 B SIOBYE MYI01050 CON200 DS 0H MYI01060 TM 69,X'40' INCORRECT LENGTH ?? MYI01070 BNO CON210 MYI01080 LA R10,8 MYI01090 B SIOBYE MYI01100 CON210 DS 0H MYI01110 LA R10,12 MISCELLANEOUS ERRORS. MYI01120 B SIOBYE MYI01130 * MYI01140 WAIT4END TIO 0(R8) MYI01150 BC 8,IOFINIS SIO TOOK O.K. MYI01160 BC 2,WAIT4END BUSY - WAIT FOR END MYI01170 BC 1,NODEVICE DEVICE NOT THERE MYI01180 * CSW STORED ON THE TIO INSTRUCTION. STACK STATUS UNLESS BUSY OR MYI01190 MYI01200 MYI01210 MYI01220 MYI01230 MYI01240 MYI01250 MYI01260 MYIOEND DS 0H MYI01270 MVC 120(8,R0),CMSIONEW MYI01280 LM R2,R14,HEXREGS MYI01290 SPKA X'E0' SET PSW KEY BACK TO NORMAL MYI01300 BR R14 BYE MYI01310 DS 0D MYI01320 MYSNSCCW DC X'0400000020000001' ADDRESS WILL BE FILLED IN LATER MYI01330 MYNEWPSW DC X'0004000000' ENABLED WAIT STATE PSW POINTING MYI01340 DC AL3(IOBACK) BACK TO THIS ROUTINE MYI01350 MYWAITPS DC X'FF06000000' ENABLED WAIT STATE PSW POINTING MYI01360 DC AL3(IOBACK) BACK TO THIS ROUTINE MYI01370 HEXREGS DS 13F MYI01380 DISABSSM DC X'00' MYI01390 ENABSSM DC X'FF' MYI01400 MYFLAG DC X'FF' MYI01410 UNITCHCK EQU X'80' MYI01420 LTORG MYI01430 ICDATA MYI01440 END MYI01450