SAV TITLE 'DMKSAV (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V200820 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKSAV 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * TO SAVE AND RESTORE A PAGE IMAGE COPY OF THE CP NUCLEUS ON 00010000 * THE SYSTEM RESIDENCE DISK. 00011000 * 00012000 * ATTRIBUTES - 00013000 * 00014000 * NON-REENTRANT, NON-RESIDENT, STAND ALONE PROGRAM, 00015000 * DMKSAVNC ENTERED VIA LDT CARD FROM DMKLDR, 00016000 * DMKSAVRS ENTERED VIA BALR FROM DMKCKP 00017000 * 00018000 * ENTRY POINTS - 00019000 * 00020000 * DMKSAVNC - TO WRITE A PAGE IMAGE COPY OF THE CP NUCLEUS 00021000 * DMKSAVRS - TO RESTORE A PAGE IMAGE COPY OF THE CP NUCLEUS 00022000 * 00023000 * ENTRY CONDITIONS - 00024000 * 00025000 * NONE 00026000 * 00027000 * EXIT CONDITIONS - 00028000 * 00029000 * NORMAL - DMKSAVNC - A MESSAGE INDICATING SUCCESSFULL 00030000 * COMPLETION IS WRITTEN TO THE OPERATOR'S CONSOLE 00031000 * DMKSAVRS - CP NUCLEUS HAS BEEN LOADED INTO MAIN 00032000 * STORAGE 00033000 * 00034000 * ERROR - AN ERROR MESSAGE IS WRITTEN TO THE OPERATOR'S 00035000 * CONSOLE 00036000 * 00037000 * CALLS TO OTHER ROUTINES - 00038000 * 00039000 * DMKOPRWT - EMERGENCY OPERATOR COMMUNICATION ROUTINE 00040000 * 00041000 * EXTERNAL REFERENCES - 00042000 * 00043000 * DMKSYSVL - SYSTEM RESIDENCE VOLUME SERIAL 00044000 * DMKSYSRS - SYSTEM RESIDENCE DEVICE ADDRESS 00045000 * DMKSYSTP - SYSTEM RESIDENCE DEVICE CLASS AND TYPE 00046000 * DMKSYSNU - NUCLEUS STARTING AND ENDING CYLINDER NUMBERHRC102DK 00047290 * ON SYSTEM RESIDENCE VOLUME HRC102DK 00047580 * DMKCKPST - STARTING AND ENDING DASD ADD OF THE NUCLEUS 00048000 * DMKCPICD - SYSTEM CREATION DATE AND TIME. 00049000 * DMKSYSTZ - SYSTEM TIME ZONE CORRECTION 00050000 * 00051000 * TABLES / WORK AREAS - NONE 00052000 * 00053000 * REGISTER USAGE - 00054000 * 00055000 * GPR10 = IPL DEVICE ADDRESS 00056000 * GPR11 = POINTER TO WAIT STATE PSW'S LOADED AFTER CONSOLE I/O 00057000 * GPR12 = BASE REGISTER 00058000 * 00059000 * NOTES - NONE 00060000 * 00061000 * OPERATION - 00062000 * 00063000 * DMKSAVNC - 00064000 * 00065000 * 1. TEST SYSRES TYPE. IF NOT 2314,2319,3330,3340,3350 OR 2305, 00066000 * ISSUE THE DMKSAV353W MESSAGE AND LOAD A WAIT PSW WITH A 00067000 * WAIT STATE CODE OF X'011'. ELSE, SET UP DEVICE 00068000 * CHARACTERISTICS ACCORDING TO THE DEVICE TYPE. 00069000 * 2. ISSUE A SENSE COMMAND TO THE DEVICE. IF THE DEVICE IS NOT 00070000 * READY, WRITE OUT THE DMKSAV351W ERROR MESSAGE AND LOAD A 00071000 * WAIT PSW WITH A WAIT STATE CODE OF X'010'. 00072000 * 3. READ THE VOLUME LABEL. IF NOT THE CORRECT LABEL, WRITE 00073000 * OUT THE DMKSAV350W ERROR MESSAGE AND LOAD A WAIT STATE PSW 00074000 * WITH A WAIT STATE CODE OF X'010'. 00075000 * 4A. THE PSW LOADED BY STEPS 3 AND 4 IS ENABLED FOR EXTERNAL 00076000 * INTERRUPTS. ONCE THE PROBLEM INDICATED BY THE MESSAGE IS 00077000 * REMEDIED, THE USER SHOULD HIT THE INTERRUPT BUTTON, AT 00078000 * WHICH TIME THE OPERATION RESUMES AT STEP 1. 00079000 * 4. IF THE TIME OF DAY CLOCK IS NOT SET GO TO STEP 5. 00080000 * COMPUTE THE TIME AND DATE FROM THE TIME OF DAY CLOCK 00081000 * INTO THE SYSTEM ID MESSAGE IN DMKCPICD. 00082000 * 5. WRITE THE NUCLEUS OUT TO THE DISK, SAVE THE DASD ADDRESS 00083000 * FOR DMKSAV FOR CHECKPOINT, AND WRITE OUT THE IPL CCW 00084000 * SEQUENCE. THEN WRITE MESSAGE 'NUCLEUS LOAD ON 'LABEL'' 00085000 * AND LOAD WAIT STATE CODE OF X'012'. 00086000 * 00087000 * DMKSAVRS - 00088000 * 00089000 * 1. SET UP TO READ THE NUCLEUS INTO STORAGE FROM THE NUCLEUS 00090000 * CYLINDER. 00091000 * 2. SET UP CAW AND IO NEW PSW FOR THE READ AND ISSUE THE SIO. 00092000 * 3. WHEN GET AN INTERRUPT,CHECK IF IT FOR THE SIO IN STEP 2. 00093000 * IF NOT GO BACK INTO A WAIT STATE. IF HAD AN ERROR ON THE 00094000 * READ, GO BACK TO STEP 2 AND TRY AGAIN. 00095000 * 4. IF AT THE END OF A CYLINDER, BUMP TO THE NEXT CYLINDER. 00096000 * 5. IF MORE IS TO BE READ, SET UP THE CCW'S AND GO BACK TO 00097000 * STEP 2. IF FINISHED READING, GO TO DMKCPINT VIA A BRANCH. 00098000 * 00099000 * RESPONSES - WAIT STATE CODE 00100000 * 00101000 * NUCLEUS LOAD ON 'LABEL' 012 00102000 * 00103000 * ERROR MESSAGES - 00104000 * 00105000 * DMKSAV350W DASD 'RADDR' VOLID NOT 'LABEL' 010 00106000 * DMKSAV351W DASD 'RADDR' NOT READY 010 00107000 * DMKSAV352W FATAL DASD I/O ERROR 011 00108000 * GPR0 CONTAINS ADDDRESS OF DEVICE IN ERROR 00109000 * GPR1-GPR2 CONTAINS ERROR CSW 00110000 * GPR3 CONTAINS CURRENT ROUTINE ADDRESS 00111000 * GPR4 CONTAINS ADDRESS OF FIRST CCW 00112000 * GPR5 TO GPR10 CONTAINS UP TO 24 SENSE BYTES 00113000 * GPR11 CONTAINS MODULE BASE ADDRESS 00114000 * GPR13 ADDRESS OF SEEK BBCCHHR 00115000 * GPR14-GPR15 CONTAINS BBCC HHR 00116000 * DMKSAV353W SYSRES DEVICE TYPE INVALID 011 00117000 * 00118000 * WAIT STATE - NO ERROR MESSAGE 00119000 * 00120000 * MACHINE CHECK 00A 00121000 * 00122000 *. 00123000 EJECT 00124000 ISEQ 73,80 00125000 COPY OPTIONS 00126000 COPY LOCAL 00127000 PUNCH 'SPB' START AT NEXT PAGE BOUNDARY @V200820 00128000 DMKSAV CSECT 00129000 SPACE 3 00130000 ENTRY DMKSAVNC,DMKSAVRS 00131000 EXTRN DMKCPINT,DMKCKPT,DMKSYSTP,DMKSYSRS,DMKSYSNU,DMKSYSVL 00132000 EXTRN DMKCPICD,DMKSYSTZ 00133000 EXTRN DMKCKPRS 00134000 EXTRN DMKCKP 00135000 EXTRN DMKCKPST 00136000 EXTRN DMKOPRWT @V200820 00137000 EXTRN DMKCVTBH,DMKCVTBD HRC027DK 00138040 EXTRN DMKCKPLD @V407429 00138100 SPACE 3 00139000 USING PSA,R0 00140000 SPACE 3 00141000 ID DC CL8'DMKSAV' MODULE NAME 00142000 EJECT 00143000 USING DMKSAV,R3 00144000 STCAW ST 14,CAW .. 00145000 MVC IONPSW(8),IONP SET IO NEW PSW 00146000 MVC MCNPSW(8),MCNP SET MACHINE CHECK PSW 00147000 L R10,DISK GET DISK ADDRESS 00148000 SIO SIO 0(R10) @V56BDA8 00149100 BC 7,*-4 00150000 WAITX LPSW XWAIT 00151000 * 00152000 * 00153000 * 00154000 IOINT CH 10,IOOPSW+2 00155000 BNE WAITX IGNORE OTHER INTERRUPTS 00156000 CLC CSW+4(2),=AL2((CE+DE)*256) CHANNEL/DEVICE END ONLY ? 00157000 BE PROCINT YES, GOOD STATUS 00158000 MVC ERRCSW(12),CSW SAVE CSW AND CAW DATA @V2B3729 00159000 LA R10,SNS ADDRESS OF SNS CCW @V2B3729 00160000 ST R10,CAW SET UP FOR SIO @V2B3729 00161000 L R10,DISK GET ADDRESS OF DISK @V2B3729 00162000 SIO 0(R10) START SENSE IO @V2B3729 00163000 BNZ *-4 .. @V2B3729 00164000 TIO 0(R10) CLEAR IO @V2B3729 00165000 BNZ *-4 .. @V2B3729 00166000 TM SNSIN,TRKCONCK TRACK CONDITION CHECK? @V56BDA8 00166010 BZ COUNTERR NO, COUNT THE ERROR @V56BDA8 00166020 LA R9,READHAR0 READ HOME ADDRESS, R0 CCWS @V56BDA8 00166030 ST R9,CAW SET FOR SIO @V56BDA8 00166040 TIO 0(R10) DRAIN ANY INTERRUPTS @V56BDA8 00166050 BC 7,*-4 @V56BDA8 00166060 SIO 0(R10) START IT UP @V56BDA8 00166070 BC 7,*-4 UNTIL FREE @V56BDA8 00166080 TIO 0(R10) TEST FOR COMPLETION @V56BDA8 00166090 BC 7,*-4 TRY AGAIN @V56BDA8 00166100 CLC CSW+4(2),=AL2((CE+DE)*256) CLEAN END? @V56BDA8 00166110 BNE COUNTERR NO, ERROR @V56BDA8 00166120 LA R9,ALTSEEK ALTERNATE CHANNEL PROGRAM @V56BDA8 00166130 ST R9,CAW SET FOR SIO @V56BDA8 00166140 B SIO RESTART ON ALTERNATE TRACK @V56BDA8 00166150 SPACE 1 00166160 COUNTERR EQU * @V56BDA8 00166170 LA R8,1(,R8) INCREASE ERROR COUNT BY ONE 00167000 CH R8,=H'10' ERROR COUNT REACH 10 YET ? 00168000 BNH STCAW IF NOT, RETRY THE OPERATION 00169000 LA R1,ERR352 ERROR MSG DMKSAV352W @V200735 00171000 LA R0,ERR352L LENGTH OF MESSAGE @V200735 00172000 SPACE , HRC102DK 00172300 WRITERR DS 0H HRC102DK 00172600 LA R2,ALARM PARM'S @V200735 00173000 OI SAVEFLAG,MSG352 SET SWITCH TO LOAD REGS HRC102DK 00173500 LA R11,WSC11 POINT TO WHICH PSW TO LOAD @VA00867 00174000 B CNIO NOW ISSUE ERROR MESSAGE HRC102DK 00175090 SPACE , HRC102DK 00175180 BNDRYERR DS 0H HRC102DK 00175270 LA R1,ERR354 ERROR MSG DMKSAV354E HRC102DK 00175360 LA R0,ERR354L LENGTH OF MESSAGE HRC102DK 00175450 B WRITERR HRC102DK 00175540 SPACE , HRC102DK 00175630 PROCINT SR R8,R8 RESET THE ERROR COUNT 00176000 MVC 0(4),DISK SAVE ADDR FOR BRANCH TO CPINIT! 00177000 SPACE 3 00178000 BXLE R2,R4,NXTPAGE INDEX UP HEAD -> RECORD TABLE 00179000 SPACE 00180000 LH R2,CYL IF END OF CYL REACHED, GET NEXT 00181000 LA R2,1(,R2) -- 00182000 CH R2,ENDCYL GREATER THAN MAX CYL HRC102DK 00182300 BH BNDRYERR TOO LARGE OF NUCLEUS HRC102DK 00182600 STH R2,CYL AND SAVE 00183000 L R2,HRTBLADR RE-INITIALIZE TO START OF TABLE 00184000 SPACE 00185000 NXTPAGE DS 0H READ/WRITE NEXT PAGE 00186000 ALR R0,R6 BUMP DATA ADDRESS IN CCW 00187000 LR R12,R0 GET DATA ADDRESS AND OPCODE 00188000 LA R12,0(,R12) STRIP OPCODE 00189000 SKSAVB CR R12,R7 SAVE/RESTORE ONLY UP TO HERE 00190000 BL SETCCW LOW - KEEP GOING 00191000 BCR 2,R15 HIGH - RETURN TO SAVE PROGRAM 00192000 C R12,=A(DMKCKP+4096) IS THIS DMKCKP PAGE 2 ? @V407429 00193200 BNE CKTYPE NO, CHECK SAVING OR RESTORING @V407429 00193300 MVC SEEKC(5),SEEKA SAVE DISK ADDRESS OF CKP PAGE 2 @V407429 00193400 MVC SEEKC+5(2),0(R2) SAVE HEAD AND RECORD 00193500 CKTYPE L R12,=A(DMKCPINT) EXIT ADDRESS FOR RESTORE @V407429 00193600 TM RW1,1 SAVING OR RESTORING ?? 00194000 BCR 8,R12 RESTORING - EXIT TO CPINIT 00195000 SPACE 00196000 SETCCW STM R0,R1,RW1 SET UP CCW 00197000 SETHHR MVC HHR+1(2),0(R2) SET UP SEARCH ID 00198000 LA R14,CCWPAG GET ADDRESS OF CHANNEL PROGRAM 00199000 C R12,=A(DMKSAV) UP TO THIS ADDRESS YET 00200000 BNE STCAW NO - 00201000 MVC SEEKB(7),SEEKA SAVE DISK ADDRESS OF DMKSAV FOR DMKCKP 00202000 B STCAW GO DO THE I/O 00203000 SPACE 3 00204000 DMKSAVRS BALR R3,0 00205000 USING *,R3 00206000 ST 10,DISK 00208000 SR R8,R8 RESET ERROR COUNTER 00209000 LA R11,DISAWT0 RESET POINTER TO DISABLED PSW @VA00867 00210000 MVI GPRS,6 SET UP READ OP-CODE IN PROTOTYPE 00211000 MVC RW1,RW1R SET UP READ CCW FOR SHORT 1ST PAGE 00212000 MVC CYL(5),START GET STARTING CYLINDER AND PAGE 00213000 LM R0,R6,GPRS SET REGS FOR BUILDING CHANNEL PROG 00214000 USING DMKSAV,R3 00215000 L R7,=A(DMKSAV) RESTORE ONLY TO THIS ADDRESS 00216000 LA R14,CCWPAG POINT TO CHANNEL PROGRAM 00217000 B STCAW AND GO RESTORE SYSTEM 00218000 EJECT 00219000 CCWPAG CCW 7,SEEKA,CC,6 SEEK TO NUCLEUS CYLINDER 00220000 ALTSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00220100 CCW 49,CYL,CC,5 SERACH FOR PAGE 00221000 CCW 8,*-8,0,0 TIC 00222000 RW1 CCW 5,PSTARTSV-PSA,CC+SILI,X'1000'-(PSTARTSV-PSA) 00223000 CCW 3,*,SILI,1 00224000 RW1R CCW 6,PSTARTSV-PSA,CC+SILI,X'1000'-(PSTARTSV-PSA) 00225000 SPACE 00226000 SEEKA DC 4H'0' SEEK/SERACH ARGUMENT 00227000 ORG SEEKA BREAKDOWN OF ARG 00228000 BB DS 2X BIN 00229000 CYL DS 2X CYLINDER 00230000 HHR DS 3X HEAD AND RECORD 00231000 DS X UNUSED 00232000 SEEKB DC D'0' SAVE DISK ADDR. OF DMKSAV 00233000 SEEKC DC D'0' SAVE DISK ADDR. FOR DMKCKP @V407429 00233100 * (PAGE 2) 00233200 SPACE 1 00233210 READHAR0 CCW 07,SEEKA,CC,6 @V56BDA8 00233220 CCW 26,0,CC+SILI+SKIP,5 @V56BDA8 00233230 CCW 22,ALTR0ADD,SILI,4 @V56BDA8 00233240 ALTSEEK CCW 07,ALTSKADD,CC+SILI,6 @V56BDA8 00233250 CCW 08,ALTSRCH,0,0 @V56BDA8 00233260 ALTSKADD DC XL2'0' BB @V56BDA8 00233270 ALTR0ADD DS XL4 CCHH FROM RECORD 0 COUNT @V56BDA8 00233280 EJECT 00234000 DS 0D 00235000 XWAIT DC X'7E06' WAIT STATE PSW 00236000 DC A(IOINT) 00237000 DS 0D 00238000 IONP DC X'00040000' 00239000 DC A(IOINT) 00240000 MCNP DC X'00020000' 00241000 DC X'0000000A' @VA00867 00242000 SPACE 00243000 GPRS DS 0D REGISTER SETS FOR SAVE/RESTORE LOOP 00244000 CCW 5,0,CC,4096 PROTOTYPE PAGE WRITE CCW 00245000 HRTBLADR DC A(TBL2314) HEAD -> RECORD TABLE FOR PAGES 00246000 DC A(DMKSAV) BASE REGISTER 00247000 DC A(2) TABLE INCREMENT 00248000 INDEXEND DC A(TBL2314E) LAST ENTRY IN TABLE 00249000 DC A(4096) PAGE SIZE INCREMENT 00250000 SPACE 00251000 PRINT DATA 00252000 TBL2314 EQU * HEAD-> RECORD TABLE FOR 2314 00253000 DC AL1(00,01,00,02,01,03,01,04,02,05,03,06,03,07,04,08) 00254000 DC AL1(05,09,05,10,06,11,06,12,07,13,08,14,08,15,09,16) 00255000 DC AL1(10,17,10,18,11,19,11,20,12,21,13,22,13,23,14,24) 00256000 DC AL1(15,25,15,26,16,27,16,28,17,29,18,30,18,31,19,32) 00257000 TBL2314E EQU TBL2314+31*2 ADDRESS OF LAST TABLE ENTRY 00258000 SPACE 1 00259000 TBL3350 EQU * HEAD-> RECORD TABLE FOR 3350 @V304498 00260000 DC AL1(00,01,00,02,00,03,00,04,01,05,01,06,01,07) @V304498 00261000 DC AL1(01,08,02,09,02,10,02,11,02,12,03,13,03,14) @V304498 00262000 DC AL1(03,15,03,16,04,17,04,18,04,19,04,20,05,21) @V304498 00263000 DC AL1(05,22,05,23,05,24,06,25,06,26,06,27,06,28) @V304498 00264000 DC AL1(07,29,07,30,07,31,07,32,08,33,08,34,08,35) @V304498 00265000 DC AL1(08,36,09,37,09,38,09,39,09,40,10,41,10,42) @V304498 00266000 DC AL1(10,43,10,44,11,45,11,46,11,47,11,48,12,49) @V304498 00267000 DC AL1(12,50,12,51,12,52,13,53,13,54,13,55,13,56) @V304498 00268000 DC AL1(14,57,14,58,14,59,14,60,15,61,15,62,15,63) @V304498 00269000 DC AL1(15,64,16,65,16,66,16,67,16,68,17,69,17,70) @V304498 00270000 DC AL1(17,71,17,72,18,73,18,74,18,75,18,76,19,77) @V304498 00271000 DC AL1(19,78,19,79,19,80,20,81,20,82,20,83,20,84) @V304498 00272000 DC AL1(21,85,21,86,21,87,21,88,22,89,22,90,22,91) @V304498 00273000 DC AL1(22,92,23,93,23,94,23,95,23,96,24,97,24,98) @V304498 00274000 DC AL1(24,099,24,100,25,101,25,102,25,103,25,104) @V304498 00275000 DC AL1(26,105,26,106,26,107,26,108,27,109,27,110) @V304498 00276000 DC AL1(27,111,27,112,28,113,28,114,28,115,28,116) @V304498 00277000 DC AL1(29,117,29,118,29,119,29,120) @V304498 00278000 TBL3350E EQU TBL3350+119*2 ADDRESS OF LAST 3350 TABLE ENTRY@V304498 00279000 SPACE 00280000 TBL3330 EQU * HEAD-> RECORD TABLE FOR 3330/2305 00281000 DC AL1(00,01,00,02,00,03,01,04,01,05,01,06) 00282000 DC AL1(02,07,02,08,02,09,03,10,03,11,03,12) 00283000 DC AL1(04,13,04,14,04,15,05,16,05,17,05,18) 00284000 DC AL1(06,19,06,20,06,21,07,22,07,23,07,24) 00285000 DC AL1(08,25,08,26,08,27,09,28,09,29,09,30) 00286000 DC AL1(10,31,10,32,10,33,11,34,11,35,11,36) 00287000 DC AL1(12,37,12,38,12,39,13,40,13,41,13,42) 00288000 DC AL1(14,43,14,44,14,45,15,46,15,47,15,48) 00289000 DC AL1(16,49,16,50,16,51,17,52,17,53,17,54) 00290000 DC AL1(18,55,18,56,18,57) 00291000 TBL3330E EQU TBL3330+56*2 ADDRESS OF LAST 3330 TABLE ENTRY 00292000 SPACE 00293000 TBL2305E EQU TBL3330+23*2 ADDRESS OF LAST 2305 TABLE ENTRY 00294000 TBL3340 EQU * HEAD-> RECORD TABLE FOR 3340 @V2A2029 00295000 * (35MB AND 70MB) 00296000 DC AL1(00,01,00,02,01,03,01,04,02,05,02,06) @V2A2029 00297000 DC AL1(03,07,03,08,04,09,04,10,05,11,05,12) @V2A2029 00298000 DC AL1(06,13,06,14,07,15,07,16,08,17,08,18) @V2A2029 00299000 DC AL1(09,19,09,20,10,21,10,22,11,23,11,24) @V2A2029 00300000 TBL3340E EQU TBL3340+23*2 ADDRESS OF LAST 3340 TABLE ENTRY @V2A2029 00301000 SPACE 1 HRC106DK 00301100 TBL3375 EQU * Head-> record table for 3375 HRC106DK 00301110 DC AL1(00,01,00,02,00,03,00,04) HRC106DK 00301120 DC AL1(00,05,00,06,00,07,00,08) HRC106DK 00301130 DC AL1(01,09,01,10,01,11,01,12) HRC106DK 00301140 DC AL1(01,13,01,14,01,15,01,16) HRC106DK 00301150 DC AL1(02,17,02,18,02,19,02,20) HRC106DK 00301160 DC AL1(02,21,02,22,02,23,02,24) HRC106DK 00301170 DC AL1(03,25,03,26,03,27,03,28) HRC106DK 00301180 DC AL1(03,29,03,30,03,31,03,32) HRC106DK 00301190 DC AL1(04,33,04,34,04,35,04,36) HRC106DK 00301200 DC AL1(04,37,03,38,03,39,03,40) HRC106DK 00301210 DC AL1(05,41,05,42,05,43,05,44) HRC106DK 00301220 DC AL1(05,45,05,46,05,47,05,48) HRC106DK 00301230 DC AL1(06,49,06,50,06,51,06,52) HRC106DK 00301240 DC AL1(06,53,06,54,06,55,06,56) HRC106DK 00301250 DC AL1(07,57,07,58,07,59,07,60) HRC106DK 00301260 DC AL1(07,61,07,62,07,63,07,64) HRC106DK 00301270 DC AL1(08,65,08,66,08,67,08,68) HRC106DK 00301280 DC AL1(08,69,08,70,08,71,08,72) HRC106DK 00301290 DC AL1(09,73,09,74,09,75,09,76) HRC106DK 00301300 DC AL1(09,77,09,78,09,79,09,80) HRC106DK 00301310 DC AL1(10,81,10,82,10,83,10,84) HRC106DK 00301320 DC AL1(10,85,10,86,10,87,10,88) HRC106DK 00301330 DC AL1(11,89,11,90,11,91,11,92) HRC106DK 00301340 DC AL1(11,93,11,94,11,95,11,96) HRC106DK 00301350 TBL3375E EQU TBL3375+95*2 Address of last table entry HRC106DK 00301360 SPACE 1 HRC106DK 00301370 TBL3380 EQU * Head-> record table for 3380 HRC106DK 00301380 DC AL1(00,001,00,002,00,003,00,004,00,005) HRC106DK 00301390 DC AL1(00,006,00,007,00,008,00,009,00,010) HRC106DK 00301400 DC AL1(01,011,01,012,01,013,01,014,01,015) HRC106DK 00301410 DC AL1(01,016,01,017,01,018,01,019,01,020) HRC106DK 00301420 DC AL1(02,021,02,022,02,023,02,024,02,025) HRC106DK 00301430 DC AL1(02,026,02,027,02,028,02,029,02,030) HRC106DK 00301440 DC AL1(03,031,03,032,03,033,03,034,03,035) HRC106DK 00301450 DC AL1(03,036,03,037,03,038,03,039,03,040) HRC106DK 00301460 DC AL1(04,041,04,042,04,043,04,044,04,045) HRC106DK 00301470 DC AL1(04,046,04,047,04,048,04,049,04,050) HRC106DK 00301480 DC AL1(05,051,05,052,05,053,05,054,05,055) HRC106DK 00301490 DC AL1(05,056,05,057,05,058,05,059,05,060) HRC106DK 00301500 DC AL1(06,061,06,062,06,063,06,064,06,065) HRC106DK 00301510 DC AL1(06,066,06,067,06,068,06,069,06,070) HRC106DK 00301520 DC AL1(07,071,07,072,07,073,07,074,07,075) HRC106DK 00301530 DC AL1(07,076,07,077,07,078,07,079,07,080) HRC106DK 00301540 DC AL1(08,081,08,082,08,083,08,084,08,085) HRC106DK 00301550 DC AL1(08,086,08,087,08,088,08,089,08,090) HRC106DK 00301560 DC AL1(09,091,09,092,09,093,09,094,09,095) HRC106DK 00301570 DC AL1(09,096,09,097,09,098,09,099,09,100) HRC106DK 00301580 DC AL1(10,101,10,102,10,103,10,104,10,105) HRC106DK 00301590 DC AL1(10,106,10,107,10,108,10,109,10,110) HRC106DK 00301600 DC AL1(11,111,11,112,11,113,11,114,11,115) HRC106DK 00301610 DC AL1(11,116,11,117,11,118,11,119,11,120) HRC106DK 00301620 DC AL1(12,121,12,122,12,123,12,124,12,125) HRC106DK 00301630 DC AL1(12,126,12,127,12,128,12,129,12,130) HRC106DK 00301640 DC AL1(13,131,13,132,13,133,13,134,13,135) HRC106DK 00301650 DC AL1(13,136,13,137,13,138,13,139,13,140) HRC106DK 00301660 DC AL1(14,141,14,142,14,143,14,144,14,145) HRC106DK 00301670 DC AL1(14,146,14,147,14,148,14,149,14,150) HRC106DK 00301680 TBL3380E EQU TBL3380+149*2 Address of last table entry HRC106DK 00301690 SPACE 3 00302000 PRINT NODATA 00303000 SPACE 2 00304000 ENDCYL DC H'0' ENDING CYLINDER HRC102DK 00304500 DISK DC F'0' SYSRES ADDRESS 00305000 START DC H'0' STARTING CYLINDER 00306000 DC H'0' STARTING HEAD 00307000 DC X'01' STARTING PAGE 00308000 SPACE 00309000 SAVEFLAG DC X'00' FLAG BYTE @V2B3729 00310000 MSG352 EQU X'80' INDICATE GPRS TO BE LOADED @V2B3729 00311000 * BEFORE WAIT 11 00312000 SNS CCW 4,SNSIN,SILI,24 SENSE CCW @V2B3729 00313000 SNSIN DC 6F'0' AREA FOR SENSE DATA @V2B3729 00314000 ERRCSW DC 2F'0' AREA FOR ERROR CSW @V2B3729 00315000 CCWADD DC F'0' AREA FOR CCW ADDRESS @V2B3729 00316000 DEVT DC C' ' 00317000 DS 0D 00318000 ENDMSG CCW 9,LDMSG,0,LDMSGL 00319000 LDMSG DC C'Nucleus loaded on ' HRC202DK 00320490 LDVOL DC CL6' ' 00321000 DC C' --- ' @VA11884 00321100 DC C'Starting CYL=' HRC202DK 00321260 NUCSTRT DC CL4' ' HRC027DK 00321340 DC C',' @VA11884 00321400 DC C' last CYL used=' HRC202DK 00321590 NUCSTOP DC CL4' ' HRC027DK 00321790 LDMSGL EQU *-LDMSG 00322000 * 00323000 LTORG 00324000 * 00325000 EJECT 00326000 DS 0D 00327000 WSC10 DC X'01060000' @VA00867 00328000 DC X'00000010' @VA00867 00329000 WSC11 DC X'00020000' @VA00867 00330000 DC X'00000011' @VA00867 00331000 DISAWT0 DC X'00020000' @VA00867 00332000 DC X'00000012' WAIT STATE CODE 012 @VM08532 00333000 EXTINT DC X'00040000' @VA00867 00334000 DC A(DMKSAVNC) RESTART LOCATION 00335000 * 00336000 * 00337000 DS 0H 00338000 VOLID DC C'VOL1CPDSK1' 00339000 EJECT 00340000 CNIO EQU * CONSOLE COMMUNICATION SUBROUTINE @V200820 00341000 SR R14,R14 SET NEW PROGRAM CHECK IN @V2B3729 00342000 LA R15,SAVPROG CASE OF PROGRAM CHECK IN @V2B3729 00343000 STM R14,R15,PRNPSW DMKOPRWT @V2B3729 00344000 ST R3,SAVR3 SAVE BASE ADDRESS @V2B3729 00345000 ST R11,SAVR11 SAVE ADDRESS OF LPSW @V2B3729 00346000 CALL DMKOPRWT WRITE MESSAGE TO SYSTEM OPERATOR @V200820 00347000 B WROPRET CONT- @V2B3729 00348000 DS 0D @V2B3729 00349000 SAVPROG L R4,PRNPSW+4 GET TEMP BASE ADDRESS @V2B3729 00350000 DROP R3 @V2B3729 00351000 USING SAVPROG,R4 @V2B3729 00352000 L R3,SAVR3 RESTORE GPR3 @V2B3729 00353000 L R11,SAVR11 RESTORE GPR11 @V2B3729 00354000 DROP R4 @V2B3729 00355000 USING DMKSAV,R3 @V2B3729 00356000 WROPRET TM SAVEFLAG,MSG352 ERROR MSG 352 ? @V2B3729 00357000 BZ SAVLPSW NO - @V2B3729 00358000 L R0,DISK ADDRESS OF DEVICE IN ERROR @V2B3729 00359000 LM R1,R2,ERRCSW ERROR CSW @V2B3729 00360000 L R4,CCWADD ADDRESS OF 1ST CCW @V2B3729 00361000 LM R5,R10,SNSIN GPR5-GPR10 - 24 SENSE BYTES @V2B3729 00362000 SR R13,R13 .. @V2B3729 00363000 ICM R13,B'0111',1(R4) ADDRESS OF BBCCHHR @V2B3729 00364000 LM R14,R15,0(R13) GPR14-GPR15 BBCC HHR @V2B3729 00365000 SAVLPSW LPSW 0(R11) LOAD THE SPECIFIED PSW. @V2B3729 00366000 * 00367000 NDISK L R1,DISK GET SYSRES ADDRESS @VA01730 00368000 CALL DMKCVTBH CONVERT ADDRESS TO EBCDIC @VA01730 00369000 STCM R1,B'0111',NREADY1 PUT ADDRESS INTO MSG @VA01730 00370000 LA R1,NREADY ERROR MSG. DMKSAV351 @VA01730 00371000 LA R0,NREADYL LENGTH OF MESSAGE @VA01730 00372000 LA R2,ALARM PARM'S @VA01730 00373000 MVI NREADY1+3,C' ' 00374000 LA R11,WSC10 POINT TO THE WSC X'10' PSW @VA00867 00375000 B CNIO 00376000 SPACE 3 00377000 * 00378000 * 00379000 DMKSAVNC DS 0H 00380000 BALR R3,0 00381000 USING *,R3 00382000 S R3,=A(*-DMKSAV) 00383000 USING DMKSAV,R3 00384000 SR R8,R8 RESET ERROR COUNTER 00385000 LA R11,DISAWT0 SET PSW POINTER TO DEFAULT @VA00867 00386000 OI RW1+4,SKIP SET SKIP FOR FIRST WRITE/READ 00387000 MVC EXNPSW(8),EXTINT SET RESTART PSW 00388000 L R9,=A(DMKSYSTP) DEVICE TYPE FOR SYSRES 00389000 CLI 1(R9),TYP2314 2314 ?? 00390000 BE GETDSK YES -- REGISTER SET IS OK 00391000 LA R4,TBL3340 SET UP FOR 3340 @V2A2029 00392000 LA R5,TBL3340E .. @V2A2029 00393000 CLI 1(R9),TYP3340 IS IT 3340 ? @V2A2029 00394000 BE SETGPRS YES -- PROCESS @V2A2029 00395000 LA R4,TBL3350 SET UP FOR 3350 @V304498 00396000 LA R5,TBL3350E .. @V304498 00397000 CLI 1(R9),TYP3350 IS IT 3350 ? @V304498 00398000 BE SETGPRS YES -- PROCESS @V304498 00399000 LA R4,TBL3375 Set up for 3375 HRC106DK 00399100 LA R5,TBL3375E .. HRC106DK 00399200 CLI 1(R9),TYP3375 Is it 3375 ? HRC106DK 00399300 BE SETGPRS Yes -- process HRC106DK 00399400 LA R4,TBL3380 Set up for 3380 HRC106DK 00399500 LA R5,TBL3380E .. HRC106DK 00399600 CLI 1(R9),TYP3380 Is it 3380 ? HRC106DK 00399700 BE SETGPRS Yes -- process HRC106DK 00399800 LA R4,TBL3330 MUST BE 3330 OR 2305 00400000 LA R5,TBL3330E 00401000 CLI 1(R9),TYP3330 IS IT 3330 00402000 BE SETGPRS YES -- 00403000 LA R5,TBL2305E MUST BE 2305 00404000 CLI 1(R9),TYP2305 00405000 BE SETGPRS 00406000 LA R1,ERR353 ADDRESS OF ERROR MSG. DMKSAV353 @V2A2029 00407000 LA R0,ERR353L LENGTH OF MESSAGE @VA02884 00408000 LA R2,ALARM PARM'S (ALARM) @V2A2029 00409000 LA R11,WSC11 POINT TO WAIT PSW TO LOAD LATER @VA00867 00410000 B CNIO GO TELL HIM THE BAD NEWS @VA00867 00411000 SPACE 2 00412000 SETGPRS ST R4,HRTBLADR SET UP TABLE START 00413000 ST R5,INDEXEND AND END ADDRESSES 00414000 GETDSK DS 0H 00415000 L R10,=A(DMKSYSRS) 00416000 LH R10,0(R10) ... 00417000 ST R10,DISK SAVE 00418000 ST R8,SAVE @VA11715 00418050 SRL R10,8 @VA11715 00418100 LA R8,1 @VA11715 00418150 SR R9,R9 @VA11715 00418200 AR R10,R8 @VA11715 00418250 LUPE SRDL R8,1 @VA11715 00418300 BCT R10,LUPE @VA11715 00418350 ST R9,CREG2 @VA11715 00418400 N R9,MASK @VA11715 00418450 LTR R9,R9 @VA11715 00418500 BZ NEXT @VA11715 00418550 LCTL C2,C2,CREG2 @VA11715 00418600 NEXT L R8,SAVE @VA11715 00418650 L R9,=A(DMKSYSNU) 00419000 L R9,0(,R9) CYLS START,END TWO HALF WORDS HRC102DK 00420590 STCM R9,B'1100',CYL SAVE STARTING CYLINDER ADDRESS HRC102DK 00421180 STCM R9,B'1100',START FOR RESTORE HRC102DK 00421770 STCM R9,B'0011',ENDCYL UPPER BOUNDARY HRC102DK 00422360 LA 14,SNS 00423000 ST 14,CAW 00424000 L R10,DISK GET ADDR. 00425000 QDISK SIO 0(10) 00426000 BC 1,NDISK NOT THERE 00427000 BC 6,QDISK TRY AGAIN 00428000 TIO 0(10) 00429000 BC 7,*-4 00430000 TM SNSIN,INTREQ NOT READY ? @VA02814 00431000 BO NDISK TELL THE OPERATOR @VA02814 00432000 SPACE 2 00433000 LA R14,LABCCW SET CCW 00434000 BAL R15,SCPZCAW DO IO 00435000 SPACE 3 00436000 CLUACT L R10,=A(DMKSYSVL) GET SYSRES VOLID 00437000 CLC VOLID+4(6),0(R10) COMPARE 00438000 BNE SCPBADLB NO GOOD 00439000 SPACE 3 00440000 LR R12,R3 SET UP NEW BASE REG 00441000 USING DMKSAV,R12 00442000 SPACE 00443000 STCK TEMPR4 STORE TIME OF DAY CLOCK 00444000 BNE WRITENUC IF THE CLOCK IS NOT SET DO NOT SET UP THE*00445000 SYSTEM CREATION DATE AND TIME 00446000 LM R0,R1,TEMPR4 GET TOD CLOCK VALUE 00447000 SRDL R0,12 CONVERT TO MICROSECONDS 00448000 D R0,=F'8000000' GET NUMBER OF SECONDS BY THE FOLLOWING 00449000 LR R3,R0 DOUBLE PRECISION DIVISION: 00450000 SLR R2,R2 X/Y=8*(X/(8*Y))+MOD(X,8*Y)/Y 00451000 D R2,=F'1000000' WHERE X = NUMBER OF MICROSECONDS SINCE 00452000 SLR R0,R0 EPOCH 00453000 SLDL R0,3 Y = 1000000 00454000 ALR R1,R3 ... 00455000 BC 12,*+8 ... 00456000 A R0,F1 R0 - R1 = NUMBER OF SECONDS SINCE EPOCH 00457000 D R0,=F'86400' R1 = NUMBER OF DAYS SINCE EPOCH *00458000 R0 = NUMBER OF SECONDS PAST MIDNIGHT 00459000 L R15,=A(DMKSYSTZ) GET PTR TO TIME ZONE CORRECTION 00460000 A R0,0(,R15) ADJUST SEC TO INCLUDE GMT DIFFERENCE 00461000 BNM *+10 BRANCH IF RESULT .GE. ZERO 00462000 A R0,=F'86400' ADD A DAYS WORTH OF SECONDS 00463000 BCTR R1,0 AND SUBTRACT A DAY 00464000 C R0,=F'86400' SEC .LT. 1 DAY ? 00465000 BL *+12 YES 00466000 S R0,=F'86400' SUBTRACT A DAYS WORTH OF SECONDS 00467000 A R1,F1 AND ADD A DAY 00468000 LR R5,R0 00469000 M R4,=F'1000000' MULTIPLY CORRECTED SECONDS BY 1000000 00470000 ALR R5,R2 ADD REMAINDER FROM FIRST DIVISION 00471000 BC 12,*+8 ... 00472000 A R4,F1 ... 00473000 SLDL R4,12 00474000 LM R14,R15,TEMPR4 GET INITIAL TOD CLOCK VALUE 00475000 SLR R15,R5 - NUMBER OF SECONDS INTO THE DAY 00476000 BC 11,*+8 ... 00477000 SL R14,F1 ... 00478000 SLR R14,R4 ... 00479000 STM R14,R15,TEMPR2 RESULT IS TOD CLOCK VALUE AT MIDNIGHT *00480000 TODAY LOCAL TIME 00481000 SPACE 00482000 LA R3,365 00483000 CR R1,R3 IS DAYS .LT. 365 ? 00484000 BNL NOT1900 NO 00485000 LR R6,R1 GET NUMBER OF DAYS HERE 00486000 SLR R1,R1 INDICATE YEAR = 00 00487000 B YEARSET 00488000 SPACE 00489000 NOT1900 EQU * HERE IF YEAR IS GREATER THAN 1900 00490000 SR R1,R3 SUBTRACT THE YEAR 1900 OUT 00491000 SLR R0,R0 CLEAR FOR DIVIDE 00492000 D R0,=A(4*365+1) DIVIDE BY THE NUMBER OF DAYS IN 4 YEARS 00493000 LR R7,R0 R7 = NUMBER OF DAYS SINCE LAST LEAP 00494000 SLR R6,R6 00495000 DR R6,R3 00496000 A R6,F1 R6 = NUMBER OF DAYS SINCE START OF YEAR 00497000 C R7,F4 MULTIPLE OF 4 YEARS ? 00498000 BNE NOTQUAD NO 00499000 AR R6,R3 SET DAY = 366 00500000 L R7,F3 ... 00501000 NOTQUAD EQU * 00502000 ALR R1,R1 00503000 ALR R1,R1 00504000 A R1,F1 00505000 AR R1,R7 00506000 SPACE 00507000 YEARSET EQU * HERE WHEN YEAR HAS BEEN DETERMINED 00508000 L R13,=A(DMKCPICD) POINT TO THE SYSTEM CREATION DATE *00509000 AND TIME DATE AREA IN THE SYSTEM ID MSG 00510000 SPACE 00511000 CVD R1,TEMPSAVE CONVERT DATE TO DECIMAL 00512000 UNPK 6(2,R13),TEMPSAVE+6(2) UNPACK AND 00513000 OI 7(R13),X'F0' FORMAT IT 00514000 SPACE 00515000 * HERE TO CONVERT JULIAN DATE TO GREGORIAN 00516000 SPACE 1 00517000 * THE FOLLOWING ALGORITHM TO CONVERT A JULIAN DATE TO GREGORIAN WAS 00518000 * ADOPTED FROM AN ALGORITHM ENTITLED "TABLELESS DATE CONVERSION" 00519000 * APPEARING IN "COMMUNICATIONS OF THE ACM", VOLUME 13, NUMBER 10, 00520000 * OCTOBER 1970, P. 621, BY RICHARD A. STONE, WESTERN ELECTRIC COMPANY, 00521000 * P.O. BOX 900, PRINCETON, NJ 08540. 00522000 SLR R2,R2 CLEAR REG 2 00523000 N R1,F3 YEAR MOD 4 00524000 BNZ *+8 BRANCH IF NOT A LEAP YEAR 00525000 LA R2,1 GET GREGORIAN DATE FROM JULIAN 00526000 LA R1,59(,R2) ... 00527000 CR R6,R1 ... 00528000 BNH *+10 ... 00529000 A R6,F2 ... 00530000 SR R6,R2 ... 00531000 A R6,=F'91' ... 00532000 LR R9,R6 ... 00533000 M R8,=F'100' ... 00534000 D R8,=F'3055' ... 00535000 LR R15,R9 ... 00536000 M R14,=F'3055' ... 00537000 D R14,=F'100' ... 00538000 SR R6,R15 ... 00539000 BCTR R9,0 ... 00540000 BCTR R9,0 ... 00541000 CVD R6,TEMPSAVE CONVERT DAY TO DECIMAL 00542000 UNPK 3(2,R13),TEMPSAVE+6(2) UNPACK AND 00543000 OI 4(R13),X'F0' FORMAT IT 00544000 MVI 5(R13),C'/' 00545000 CVD R9,TEMPSAVE CONVERT MONTH TO DECIMAL 00546000 UNPK 0(2,R13),TEMPSAVE+6(2) UNPACK AND 00547000 OI 1(R13),X'F0' FORMAT IT 00548000 MVI 2(R13),C'/' 00549000 SPACE 1 00550000 * SET UP TIME 00551000 LA R13,9(0,R13) POINT TO THE TIME IN MSG 00552000 LM R0,R1,TEMPR4 GET TOD CLOCK VALUE IN R0 AND R1 00553000 SL R1,TEMPR2+4 SUBTRACT CORRECT TIME AT MIDNIGHT 00554000 BC 11,*+8 ... 00555000 SL R0,=F'1' ... 00556000 SL R0,TEMPR2 ... 00557000 SRDL R0,12 GET NUMBER OF MICROSECONDS PAST MIDNIGHT 00558000 D R0,=F'1000000' GET NUMBER OF SECONDS PAST MIDNIGHT 00559000 SR R0,R0 IGNORE REMAINDER 00560000 D R0,=F'3600' GET NUMBER OF HOURS PAST MIDNIGHT 00561000 CVD R1,TEMPSAVE CONVERT NUMBER OF HOURS TO DECIMAL 00562000 UNPK 0(4,R13),TEMPSAVE+6(3) UNPACK 00563000 MVI 2(R13),C':' NEATEN UP 00564000 LR R1,R0 GET REMAINDER FROM LAST DEVIDE 00565000 SR R0,R0 CLEAR 00566000 D R0,=F'60' GET NUMBER OF MINUTES PAST THIS HOUR 00567000 CVD R1,TEMPSAVE CONVERT NUMBER OF MINUTES TO DECIMAL 00568000 UNPK 3(4,R13),TEMPSAVE+6(3) UNPACK 00569000 MVI 5(R13),C':' NEATEN UP 00570000 CVD R0,TEMPSAVE CONVERT NUMBER OF SECONDS TO DECIMAL 00571000 UNPK 6(2,R13),TEMPSAVE+6(2) UNPACK 00572000 OI 7(R13),X'F0' MAKE UP FOR HARDWARE DEFICIENCIES 00573000 SPACE 00574000 WRITENUC LA R14,CCWPAG GET CHANNEL PROGRAM TO WRITE NUCLEUS 00575000 LM R0,R6,GPRS RESTORE THE REGISTER SET 00576000 DROP R12 00577000 USING DMKSAV,R3 00578000 L R7,=A(DMKCKP+4096) WRITE ALL OF CP CODE @V407429 00579100 BAL R15,SETHHR GO WRITE NUCLEUS TO DISK 00580000 SPACE 00580100 L R9,=A(DMKCKPLD) GET DASD ADDRESS SLOT IN DMKCKP @V407429 00580200 MVC 0(7,R9),SEEKC SAVE ADDRESS OF DMKCKP PAGE 2 @V407429 00580300 SPACE 00581000 L R9,=A(DMKCKPRS) GET DASD ADDRESS SLOT IN CHECKPOINT 00582000 MVC 0(7,R9),SEEKB SAVE ADDRESS OF DMKSAV FOR DMKCPI 00583000 L R9,=A(DMKCKPST) POINT TO THE START OF THE NUCLEUS 00584000 MVC 0(2,R9),START AND MOVE IN THE FIRST CYL ADD FOR DMKDDR 00585000 MVC 2(2,R9),CYL MOVE IN THE LAST NUCLEUS CYLINDER ADD 00586000 LH R1,START GET NUC START @VA11884 00586100 CALL DMKCVTBD CONVERT TO EBCDIC HRC027DK 00586250 STCM R1,B'1111',NUCSTRT SAVE RESULT HRC027DK 00586300 LH R1,CYL GET NUC END @VA11884 00586400 CALL DMKCVTBD CONVERT TO EBCDIC HRC027DK 00586590 STCM R1,B'1111',NUCSTOP SAVE THE RESULT HRC027DK 00586680 SPACE 00587000 LA R14,CCWIPL WRITE OUT IPL SEQUENCE 00588000 BAL R15,SCPZCAW DO IO 00589000 SPACE 00590000 MVC LDVOL(6),VOLID+4 VOLUME SERIAL TO MESSAGE 00591000 LA R1,LDMSG MSG. 'NUCLEUS LOADED ON XXXX' @V200735 00592000 LA R0,LDMSGL LENGTH OF MESSAGE @V200735 00593000 LA R2,0 PARM'S @V200735 00594000 B CNIO OUTPUT THIS MESSAGE @V200735 00595000 SPACE 3 00596000 * 00597000 SCPZCAW ST R14,CAW SET FOR IO 00598000 MVC IONPSW(8),LBIOPN SET INT RETURN 00599000 L R10,DISK GET DISK ADDRESS 00600000 SIO 0(R10) START 00601000 BC 7,*-4 LOOP 00602000 WAITL LPSW XWAIT WAIT FOR INT 00603000 LBIOINT CH R10,IOOPSW+2 TEST FOR DEVICE STARTED 00604000 BNE WAITL NO, WAIT 00605000 CLC CSW+4(2),=AL2((CE+DE)*256) CHANNEL/DEVICE END ONLY ? 00606000 BNE SNSRT IF NOT, ERROR CONDITION RESULTED @V2B3729 00607000 SR R8,R8 RESET ERROR COUNTER 00608000 BR R15 RETURN ON GPR-15 00609000 SNSRT MVC ERRCSW(12),CSW SAVE ERROR CSW AND CAW @V2B3729 00610000 LA R10,SNS ADDRESS OF SENSE CCW @V2B3729 00611000 ST R10,CAW SET UP CAW @V2B3729 00612000 L R10,DISK RELOAD DISK ADDRESS @V2B3729 00613000 SNSRTSIO SIO 0(R10) START SENSE @VA09882 00613100 BNZ SNSRTSIO LOOP UNTIL FINISHED @VA09882 00613200 SNSRTTIO TIO 0(R10) TIO TO CLEAR STATUS @VA09882 00613300 BNZ SNSRTTIO @VA09882 00613400 LA R8,1(,R8) INCREASE ERROR COUNTER BY ONE 00614000 CH R8,=H'10' ERROR COUNTER REACH 10 YET ? 00615000 BNH SCPZCAW NO, TRY CHANNEL PROGRAM AGAIN 00616000 OI SAVEFLAG,MSG352 INDICATE REG LOAD BEFORE LPSW @V2B3729 00617000 LA R1,ERR352 ERROR MSG DMKSAV352W @V200735 00618000 LA R0,ERR352L LENGTH OF ERROR MESSAGE @V200735 00619000 LA R2,ALARM PARM'S @V200735 00620000 LA R11,WSC11 POINT TO WAIT PSW FOR LATER @VA00867 00621000 B CNIO NOW ISSUE MESSAGE DMKSAV352W 00622000 EJECT 00623000 * 00624000 DS 0F @V2B3729 00625000 SAVR3 DC F'0' GPR3 SAVE AREA @V2B3729 00626000 SAVR11 DC F'0' GPR11 SAVE AREA @V2B3729 00627000 SAVE DS F'0' @VA11715 00627100 MASK DC XL4'03FF0000' @VA11715 00627200 CREG2 DS F'0' @VA11715 00627300 * 00628000 LBIOPN DS 0D ALIGN 00629000 DC X'00040000' 00630000 DC A(LBIOINT) 00631000 * 00632000 IPLDATA DC X'000C000000000800' EXTENDED PSW FOR IPL 00633000 CCW 6,X'800',0,4096 CCW TO READ IN DMKCKPT 00634000 DC A(0,0) UNUSED 00635000 *** 00636000 * 00637000 LABCCW CCW X'07',SKLAB,CC,6 00638000 CCW X'31',SCHLB,CC,5 00639000 CCW X'08',*-8,0,0 00640000 CCW 6,VOLID,CC+SILI,10 READ VOLUME LABEL 00641000 CCW X'03',0,SILI,1 00642000 * 00643000 CCWIPL CCW X'07',SKLAB,CC+SILI,6 SEEK TO CYL 0, HEAD 0. 00644000 CCW X'31',RECORD1,CC,5 00645000 CCW X'08',*-8,0,0 00646000 CCW X'05',IPLDATA,CC+SILI,24 WRITE IPL RECORD 00647000 CCW X'31',RECORD2,CC,5 00648000 CCW X'08',*-8,0,0 00649000 CCW 5,DMKCKPT,SILI,4096 WRITE OUT DMKCKPT 00650000 SKLAB DC X'00000000000003' 00651000 SCHLB EQU SKLAB+2 00652000 SPACE 2 00653000 RECORD1 DC X'0000000001' 00654000 RECORD2 DC X'0000000002' 00655000 SCPBADLB L R1,DISK GET SYSRES ADDRESS @VA10206 00656010 CALL DMKCVTBH CONVERT ADDRESS TO EBCDIC @VA10206 00656020 STCM R1,B'0111',NRADDR PUT ADDRESS INTO MSG @VA10206 00656030 LA R0,VOLMSGL LENGTH OF ERROR MESSAGE @V200735 00657000 LA R2,ALARM PARM'S @V200735 00658000 MVC VOLMSG1,0(R10) SET VOLID 00659000 MVI NRADDR+3,C' ' @VA00867 00661000 LA R11,WSC10 POINT TO PROPER PSW @VA00867 00662000 B CNIO OUTPUT MSG 00663000 * 00664000 VOLMSG DC C'DMKSAV350W DASD ' @VA00867 00665000 NRADDR DC CL4' ' @VA00867 00666000 DC C'Volid not ' HRC202DK 00667490 VOLMSG1 DC CL6' ' @VA11387 00668100 VOLMSGL EQU *-VOLMSG 00669000 * 00670000 NREADY DC C'DMKSAV351W DASD ' @VA00867 00671000 NREADY1 DC CL4' ' 00672000 DC C' not Ready' HRC202DK 00673490 NREADYL EQU *-NREADY 00674000 * 00675000 ERR352 DC C'DMKSAV352W Fatal DASD I/O error' HRC202DK 00676490 ERR352L EQU *-ERR352 00677000 ERR353 DC C'DMKSAV353W SYSRES device type invalid' HRC202DK 00678490 ERR353L EQU *-ERR353 @VA00867 00679000 ERR354 DC C'DMKSAV354E Nucleus cylinders exceed allocation; Reload*00679020 Nucleus from BACKUP.' 00679040 ERR354L EQU *-ERR354 HRC102DK 00679060 SPACE 1 00679100 TRKCONCK EQU X'02' 3340/44 TRACK CONDITION CHECK @V56BDA8 00679200 SPACE 2 00680000 LTORG @V200820 00681000 EJECT 00682000 COPY DEVTYPES 00683000 COPY EQU 00684000 PSA 00685000 END DMKSAV @V200820 00686000