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