********************************************************************** 00010000 * CARD80 00020000 * 00030000 * PUNCH OUT A CARD DECK THAT WILL IPL AND THEN READ REMAINDING CARD 00040000 * IN CARD READER AND LIST THEM TO A PRINTER 00050000 * 00060000 ********************************************************************** 00070000 CARD80 CSECT , 00080000 STM R14,R12,12(R13) SAVE CALLERS REGISTERS 00090000 LR R12,R15 R12 IS PROGRAM BASE 00100000 USING CARD80,R12 00110000 * 00120000 LA R1,SAVEA POINT TO NEW SAVE AREA 00130000 ST R1,8(,R13) CHAIN 00140000 ST R13,4(,R1) ON 00150000 LR R13,R1 SAVEAREA 00160000 * 00170000 * 00180000 OPEN (PUNCH,OUTPUT) OPEN OUTPUT FILE 00190000 ********************************************************************** 00200000 * WRITE FIRST IPL CARD WITH 24 BYTES OF DATA (PSW,CCW,CCW) 00210000 ********************************************************************** 00220000 PUT PUNCH,CARD0 WRITE INITIAL IPL RECORD 00230000 ********************************************************************** 00240000 * WRITE SECOND IPL CARD WITH ADDITIONAL READ CCW'S 00250000 ********************************************************************** 00260000 PUT PUNCH,CARD1 WRITE SECOND IPL RECORD 00270000 ********************************************************************** 00280000 * WRITE 3 CARDS CONTAINING EXECUTABLE CODE 00290000 ********************************************************************** 00300000 PUT PUNCH,CARD2 WRITE DATA 00310000 PUT PUNCH,CARD2+80 WRITE DATA 00320000 PUT PUNCH,CARD2+160 WRITE DATA 00330000 ********************************************************************** 00340000 * 00350000 * NOW WRITE SOME TEST DATA CARDS BECHIND IPL PROGRAM 00360000 * 00370000 ********************************************************************** 00380000 LA R3,10 TIMES TO REPEAT LOOP 00390000 LA R4,=C'01020304050607080910' 00400000 LA R5,=C'*+@#$%-()!' 00410000 LOOP DS 0H 00420000 MVC BUF(1),0(R5) CHAR TO REPEAT 00430000 MVC BUF+1(79),BUF FILL BUFFER 00440000 MVC BUF(2),0(R4) CARD NUMBER 00450000 MVI BUF+2,C' ' AND A SPACE 00460000 PUT PUNCH,BUF 00470000 LA R4,2(,R4) INCREMENT 00480000 LA R5,1(,R5) 00490000 BCT R3,LOOP LOOP BACK 00500000 * 00510000 CLOSE (PUNCH) 00520000 * 00530000 * 00540000 L R13,4(,R13) PREV SAVE AREA 00550000 LM R14,R12,12(R13) RESTORE CALLERS REGISTERS 00560000 SLR R15,R15 RC=0 00570000 BR R14 00580000 * 00590000 LTORG , 00600000 * 00610000 BUF DS CL80 CARD BUFFER 00620000 * 00630000 SAVEA DS 18F SAVEA AREA 00640000 * 00650000 * 00660000 PRINT NOGEN 00670000 PUNCH DCB DSORG=PS,MACRF=PM,BLKSIZE=80,LRECL=80,RECFM=F, +00680000 DDNAME=PUNCH 00690000 PRINT GEN 00700000 * 00710000 * 00720000 DROP R12 00730000 ********************************************************************** 00740000 ********************************************************************** 00750000 ** FRIST CARD OF OUR IPL DECK 00760000 ** IT CONTAINS 24 BYTES - PSW AND TWO CCW'S 00770000 ********************************************************************** 00780000 ********************************************************************** 00790000 * 00800000 DS 0D 00810000 CARD0 DC 80XL1'00' INITIAL IPL CARD 00820000 ORG CARD0 00830000 * 00840000 ********************************************************************** 00850000 * PSW 00860000 ********************************************************************** 00870000 * 00880000 IPLPSW DC X'00' I/O & EXT INTERRUPTS DISABLED 00890000 DC X'00' KEY=0; BC; EXT INT DISABLED; SUP 00900000 DC X'0000' 00910000 DC X'00' PROG INT DISABLED 00920000 DC AL3(1024) INITIAL EXECUTION ADDRESS 00930000 * 00940000 ********************************************************************** 00950000 * CCW 00960000 ********************************************************************** 00970000 * 00980000 CCW1 DC X'02' READ 00990000 DC AL3(512) ADDRESS FOR DATA 01000000 DC X'60' CC + SLI 01010000 DC X'00' 01020000 DC AL2(80) LENGTH 01030000 * 01040000 ********************************************************************** 01050000 * CCW 01060000 ********************************************************************** 01070000 * 01080000 CCW2 DC X'08' TIC 01090000 DC AL3(512) NEXT CCW ADDRESS 01100000 DC X'00' CC + SLI 01110000 DC X'00' 01120000 DC AL2(0) LENGTH 01130000 * 01140000 * 01150000 ORG , RESTORE LOC TO HIGHEST 01160000 * 01170000 ********************************************************************** 01180000 ********************************************************************** 01190000 ** SECOND CARD OF OUR IPL DECK 01200000 ** IT CONTAINS THREE CCW'S 01210000 ** THESE CCW'S READ THE THREE CARDS CONTAINING EXECUTABLE CODE 01220000 ********************************************************************** 01230000 ********************************************************************** 01240000 DS 0D 01250000 CARD1 DC 80XL1'00' SECOND IPL CARD 01260000 ORG CARD1 01270000 * 01280000 ********************************************************************** 01290000 * CCW 01300000 ********************************************************************** 01310000 * 01320000 CCW3 DC X'02' READ 01330000 DC AL3(1024) ADDRESS FOR DATA 01340000 DC X'60' CC + SLI 01350000 DC X'00' 01360000 DC AL2(80) LENGTH 01370000 * 01380000 ********************************************************************** 01390000 * CCW 01400000 ********************************************************************** 01410000 * 01420000 CCW4 DC X'02' READ 01430000 DC AL3(1024+80) ADDRESS FOR DATA 01440000 DC X'60' CC + SLI 01450000 DC X'00' 01460000 DC AL2(80) LENGTH 01470000 * 01480000 ********************************************************************** 01490000 * CCW 01500000 ********************************************************************** 01510000 * 01520000 CCW5 DC X'02' READ 01530000 DC AL3(1024+160) ADDRESS FOR DATA 01540000 DC X'20' SLI 01550000 DC X'00' 01560000 DC AL2(80) LENGTH 01570000 * 01580000 * 01590000 * 01600000 * 01610000 ORG , RESTORE LOC TO HIGHEST 01620000 * 01630000 ********************************************************************** 01640000 ********************************************************************** 01650000 ** THIRD, FOURTH AND FIFTH CARDS OF IPL DECK 01660000 ** IT CONTAINS THE EXECUTABLE PROGRAM 01670000 ********************************************************************** 01680000 ********************************************************************** 01690000 DS 0D 01700000 CARD2 DS 0X SECOND IPL CARD 01710000 ********************************************************************** 01720000 * EXECUTABLE PROGRAM BEINGS HERE 01730000 ********************************************************************** 01740000 BEGIN DS 0H 01750000 BALR R10,0 ESTABLISH BASE REG 01760000 USING *,R10 01770000 * 01780000 ********************************************************************** 01790000 * GET DEVICE PHYSICAL ADDRESSES R3=RDR R4=PRT 01800000 ********************************************************************** 01810000 * 01820000 SLR R3,R3 CLEAR R3 01830000 ICM R3,B'0011',2 GET IPL DEVICE (CARD RDR) 01840000 LA R4,X'E' ASSUME PRINTER AT 00E 01850000 * 01860000 ********************************************************************** 01870000 * PUT THE I/O BUFFER ADDRESS INTO THE CCW'S 01880000 ********************************************************************** 01890000 * 01900000 LA R1,RDBUF READ BUFFER 01910000 STCM R1,B'0111',RDCCW+1 ADDRESS TO READ CCW 01920000 STCM R1,B'0111',PRCCW+1 ADDRESS TO PRINT CCW 01930000 * 01940000 ********************************************************************** 01950000 * PROGRAM MAIN LOOP 01960000 ********************************************************************** 01970000 * 01980000 RDLP DS 0H 01990000 LA R1,RDCCW GET ADDR OF READ CCW 02000000 ST R1,72 PUT INTO CAW 02010000 * 02020000 SIO 0(R3) ISSUE READ 02030000 BNZ ERR1 BRANCH IF ERROR 02040000 * 02050000 ********************************************************************** 02060000 * WAIT FOR READ I/O TO COMPLETE 02070000 ********************************************************************** 02080000 * 02090000 RDTIO DS 0H 02100000 TIO 0(R3) CHECK FOR I/O COMPLETION 02110000 BZ PRT GO PRINT IF GOOD 02120000 BC 1,ERR2 BRAHCH IF ERR 02130000 B RDTIO WAIT AGAIN 02140000 * 02150000 ********************************************************************** 02160000 * CHECK FOR SUCCESSFUL COMPLETION OF I/O 02170000 * 02180000 * EXPECT ONLY CHANNEL END + DEVICE END 02190000 * 02200000 * ANYTHING ELSE WE QUIT 02210000 * 02220000 ********************************************************************** 02230000 * 02240000 PRT DS 0H 02250000 CLC CEDE,68 CE+DE 02260000 BNE ERR0 NO - QUIT 02270000 * 02280000 ********************************************************************** 02290000 * SET UP CAW FOR PRINT 02300000 ********************************************************************** 02310000 * 02320000 LA R1,PRCCW POINT TO PRINT CCW 02330000 ST R1,72 SAVE ADDRESS IN CAW 02340000 * 02350000 SIO 0(R4) PRINT LINE 02360000 BNZ ERR3 BRANCH IF ERROR 02370000 * 02380000 ********************************************************************** 02390000 * WAIT FOR I/O TO COMPLETE 02400000 ********************************************************************** 02410000 * 02420000 PRTTIO DS 0H 02430000 TIO 0(R4) CHECK FOR I/O COMPLETE 02440000 BZ RDLP DONE - GO READ NEXT CARD 02450000 BC 1,ERR4 BRANCH IF ERROR 02460000 * 02470000 ********************************************************************** 02480000 * LOOP BACK AND READ NEXT CARD 02490000 ********************************************************************** 02500000 * 02510000 B PRTTIO WAIT AGAIN 02520000 * 02530000 * 02540000 ********************************************************************** 02550000 * CCW'S TO READ AND PRINT 02560000 ********************************************************************** 02570000 * 02580000 * 02590000 DS 0D 02600000 RDCCW DC X'02',AL3(0),X'0000',AL2(80) 02610000 PRCCW DC X'09',AL3(0),X'0000',AL2(80) 02620000 * 02630000 * 02640000 ********************************************************************** 02650000 * ERROR ROUTINES 02660000 * LOAD PSW WITH WAIT BIT SET TO ONE 02670000 ********************************************************************** 02680000 * 02690000 * 02700000 ERR0 MVC PSWERR0+6(2),68 02710000 LPSW PSWERR0 02720000 ERR1 LPSW PSWERR1 02730000 ERR2 LPSW PSWERR2 02740000 ERR3 LPSW PSWERR3 02750000 ERR4 LPSW PSWERR4 02760000 * 02770000 * 02780000 ********************************************************************** 02790000 * WAIT PSW'S 02800000 ********************************************************************** 02810000 * 02820000 * 02830000 DS 0D 02840000 PSWERR0 DC X'00',X'02',X'0000',X'00',X'000000' 02850000 PSWERR1 DC X'00',X'02',X'0000',X'00',X'EE0001' 02860000 PSWERR2 DC X'00',X'02',X'0000',X'00',X'EE0002' 02870000 PSWERR3 DC X'00',X'02',X'0000',X'00',X'EE0003' 02880000 PSWERR4 DC X'00',X'02',X'0000',X'00',X'EE0004' 02890000 * 02900000 * 02910000 ********************************************************************** 02920000 * CHANNEL END + DEVICE END 02930000 ********************************************************************** 02940000 * 02950000 * 02960000 CEDE DC X'0C00' CHANNEL END + DEVICE END 02970000 * 02980000 * 02990000 ********************************************************************** 03000000 * I/O BUFFER AREA 03010000 ********************************************************************** 03020000 * 03030000 * 03040000 CARD2LEN EQU *-CARD2 03050000 RDBUF DS 0C I/O BUFFER 03060000 ORG , 03070000 * 03080000 * 03090000 ********************************************************************** 03100000 * BUFFER AREA TO MAKE SURE WE HAVE AT LEAST 80 BYTES FOR THE 03110000 * LAST CARD WE WRINTE 03120000 ********************************************************************** 03130000 * 03140000 * 03150000 DS CL80 *** EXTRA BUFFER AREA *** 03160000 * 03170000 * 03180000 ********************************************************************** 03190000 * REGISTER EQUATES 03200000 ********************************************************************** 03210000 * 03220000 * 03230000 R0 EQU 0 03240000 R1 EQU 1 03250000 R2 EQU 2 03260000 R3 EQU 3 03270000 R4 EQU 4 03280000 R5 EQU 5 03290000 R6 EQU 6 03300000 R7 EQU 7 03310000 R8 EQU 8 03320000 R9 EQU 9 03330000 R10 EQU 10 03340000 R11 EQU 11 03350000 R12 EQU 12 03360000 R13 EQU 13 03370000 R14 EQU 14 03380000 R15 EQU 15 03390000 * 03400000 * 03410000 END , 03420000