CKP TITLE 'DMKCKP (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
*. 00003000
* REMEMBER TO RE-ASSEMBLE THIS MODULE. ACO COPY FILE HAS BEEN CHANGED 00004000
* 00005000
* MODULE NAME - 00006000
* 00007000
* DMKCKP 00008000
* 00009000
* FUNCTION - 00010000
* 00011000
* DMKCKP RETRIEVES ACCOUNTING DATA FROM VMBLOK, VDEVBLOK AND 00012000
* UNPUNCHED ACCOUNTING CARDS, ACCOUNTING INFORMATION FOR 00013000
* DEDICATED DEVICES, SAVE THE SYSTEM LOG MESSAGES, SAVE ALL 00014000
* CONTROL BLOCKS FOR SPOOL FILES FOR ACTIVE AND CLOSED. THE 00015000
* DATA IS WRITTEN ON THE SYSWARM CYLINDER OF THE I.P.L. PACK 00016000
* 00017000
* ATTRIBUTES - 00018000
* 00019000
* NON-REENTRANT, NON-RESIDENT, LOADED AND EXECUTED BY 00020000
* MODULE DMKDMP OR BY INIT PROGRAM LOAD 00021000
* 00022000
* ENTRY POINT - 00023000
* 00024000
* DMKCKPT - CHECK POINT 00025000
* 00026000
* ENTRY CONDITIONS - 00027000
* 00028000
* CPID = 'CPCP' OR 'WARM' OR 'XXXX' 00029000
* 00030000
* CPCP = WARM MACHINE AND SHUTDOWN ASSUMED 00031000
* WARM = WARM MACHINE AND AUTOMATIC RESTART REQUESTED 00032000
* XXXX = COLD MACHINE; NO CHECK POINT TAKEN 00033000
* 00034000
* EXIT CONDITIONS - 00035000
* 00036000
* CPID = 'SHUT' OR 'WRM' 00037000
* 00038000
* SHUT = CHECK POINT TAKEN AND SHUTDOWN COMPLETE 00039000
* WRM = CHECK POINT TAKEN AND AUTOMATIC RESTART REQUESTED 00040000
* 00041000
* CALLS TO OTHER ROUTINES - 00042000
* 00043000
* DMKSAVRS - RESTORE PROGRAM 00044000
* 00045000
EJECT 00046000
* EXTERNAL REFERENCES - 00047000
* 00048000
* DMKRSPAC - ACCOUNTING CHAIN ANCHOR 00049000
* DMKRSPHQ - SPOOL HOLD QUEUE CHAIN ANCHOR 00050000
* DMKRSPRD - READER FILE CHAIN ANCHOR 00051000
* DMKRSPPU - PUNCH FILE CHAIN ANCHOR 00052000
* DMKRSPPR - PRINTER FILE CHAIN ANCHOR 00053000
* DMKRSPID - SYSTEM SPOOL ID COUNTER 00054000
* DMKRSPDL - SYSTEM DELETE CHAIN ANCHOR 00055000
* DMKGRAWT - ADDRESS OF CONSOLE WRITE ROUTINE 00056000
* DMKSYSOW - ADDRESS OF SYSTEM OWNLIST 00057000
* DMKSYSOC - POINTER TO NUMBER OF ENTRIES 00058000
* DMKSYSTP - POINTER TO SYSRES DEVICE TYPE 00059000
* DMKSYSWM - ADDRESS OF WARMSTART CYLINDER 00060000
* DMKTMRPT - ADDRESS OF VMVTIME CONVERT ROUTINE 00061000
* DMKRSPCV - CHECK POINT-WARMSTART CYLINDER ID 00062000
* DMKSYSRM - ADDRESS OF REAL STORAGE SIZE 00063000
* 00064000
* TABLES / WORKAREAS - 00065000
* 00066000
* 00067000
* REGISTER USAGE - 00068000
* 00069000
* GPR5 = DMKRSPAC BASE 00070000
* GPR6 = RCHBLOK BASE 00071000
* GPR7 = RCUBLOK BASE 00072000
* GPR8 = RDEVBLOK BASE 00073000
* GPR11 = VMBLOK BASE 00074000
* GPR12 = BASE REGISTER 00075000
* GPR13 = BASE REGISTER FOR CKPBUFF DSECT 00076000
* 00077000
* NOTES - 00078000
* 00079000
* NONE 00080000
* 00081000
* OPERATION - 00082000
* 00083000
* 1. IF CPID = 'CPCP' OR 'WARM', GO TO STEP 2; 00084000
* OTHERWISE, MOVE 'COLD' TO CPID, GO TO STEP 10 00085000
* 2. HALT AND DRAIN ALL REAL DEVICES, SAVE THE REAL DEVICE 00086000
* ADDRESS OF ALL ENABLED TERMINALS. 00087000
* 2A.READ RECORD ONE OF WARMSTART CYLINDER AND 00088000
* COMPARE THE CLOCK VALUE WRITTEN BY DMKWRM 00089000
* (COLD OR WARM START) TO THE IN STORAGE VALUE 00090000
* SAVE BY DMKWRM AT DMKRSPCV; IF EQUAL GO TO STEP 00091000
* 3. OTHERWISE, GIVE MSG904W AND ENTER WAIT STATE 00092000
* CODE 007. 00093000
* 2B.WRITE OUT THE SAVED REAL DEVICE ADDRESSES OF ENABLED 00094000
* TERMINALS. 00095000
* 3. CALULATE AND SAVE ACCOUNTING INFORMATION FOR ALL 00096000
* CURRENT LOGGED ON USERS. SAVE CURRENT UNPUNCHED 00097000
* ACCOUNTING CARDS. (STARTING WITH DISK RECORD NUMBER TWO) 00098000
* 4. SAVE SYSTEM LOG MESSAGES, DATE AND TIME 00099000
* 5. SAVE SPOOL FILES CONTROL BLOCKS, ACTIVE AND CLOSED. 00100000
* SAVE THE FOLLOWING STATUS OF SPOOL DEVICES; (A) OFFLINE 00101000
* STATUS. (B) SEPARATOR OR NO-SEPARATOR STATUS. 00102000
* (C) DRAINED STATUS. SAVE THE CURRENT SYSTEM 00103000
* SPOOL ID COUNTER. 00104000
* IF THE SPOOL DEVICE HAPPENS TO BE A 3800 PRINTER, 00105000
* WRITE A SPECIAL DUMMY BLOCK ON THE WARM START CYLINDER 00106000
* WHICH CONTAINS THE CURRENT VALUE OF THE IMAGE LIBRARY 00107000
* TO USE AND THE CONTROL TABLES TO USE FOR THE 00108000
* SEPARATOR PAGE. IN ADDITION, IF TRANSFER ALL SPOOL 00109000
* FILES FROM THE 3800'S DELAYED PURGE QUEUE ONTO THE 00110000
* SPOOL FILE DELETE QUEUE WHICH GETS CHECKPOINTED LATER. 00111000
* 6. SAVE SPOOL RECORD ALLOCATION BLOCKS 00112000
* 7. SAVE SPOOL HOLD QUEUE BLOCKS AND WRITE DISK RECORD 00113000
* NUMBER ONE - CONTAINING A DELIMITER RECORD FOLLOWED 00114000
* BY A 'FE' RECORD 00115000
* 8. IF CPID = 'CPCP', ISSUE MESSAGES DMKCKP960I AND 00116000
* DMKCKP961W TO THE SYSTEM OPERATOR AND ENTER DISABLED 00117000
* WAIT STATE. CODE 008 00118000
EJECT 00119000
* 9. MOVE 'WRM' TO CPID 00120000
* 10. LOAD DMKSAVRS AND EXIT TO DMKSAVRS. 00121000
* 11. IF PROGRAM CHECK OR MACHINE CHECK OR FATAL I/O ERROR OR 00122000
* INVALID WARM START DATA OR INVALID WARM START CYL OR 00123000
* WARM START AREA FULL, SEND MESSAGE DMKCKP900W OR 00124000
* DMKCKP901W OR DMKCKP902W OR DMKCKP904 OR DMKCKP910W OR 00125000
* DMKCKP911W RESPECTIVELY AND ENTER DISABLE WAIT STATE. 00126000
* (WAIT STATE CODE 009) 00127000
* 12. CHECK POINT RECORDS ARE 4K IN LENGTH AND CONTAIN 00128000
* VARIABLE LENGTH LOGICAL RECORDS. A DELIMITER 00129000
* RECORD SEPARATES RECORD TYPES AND SIZES. 00130000
* A DELIMITER RECORD IS THE SAME SIZE AS DATA RECORDS 00131000
* AND CONTAINS ALL X'FF' EXCEPT FOR BYTES 9 TO 16. 00132000
* THESE 8 BYTES CONTAIN A UNIQUE NUMBER AND RECORD COUNT. 00133000
* THE FIRST CKECK POINT LOGICAL RECORD IS A DELIMITER 00134000
* RECORD. THE LAST LOGICAL RECORD IN A BUFFER 00135000
* IS A 8 BYTE RECORD (X'FE'). THE FIRST LOGICAL 00136000
* OF EACH BUFFER EXCEPT THE FIRST IS A DELIMITER RECORD 00137000
* WITH THE FIRST 8 BYTES X'EE'. 00138000
* 00139000
* RESPONSE - 00140000
* 00141000
* DMKCKP960I SYSTEM WARM START DATA SAVED 00142000
* DMKCKP961W SYSTEM SHUTDOWN COMPLETE 00143000
* 00144000
* DISABLE WAIT STATE (CODE 008) 00145000
* 00146000
* ERROR MESSAGES - 00147000
* 00148000
* DMKCKP900W SYSTEM RECOVERY FAILURE; PROGRAM CHECK 00149000
* DMKCKP901W SYSTEM RECOVERY FAILURE; MACHINE CHECK, RUN SEREP 00150000
* DMKCKP902W SYSTEM RECOVERY FAILURE; FATAL I/O ERROR-NUCL CYL 00151000
* DMKCKP902W SYSTEM RECOVERY FAILURE; FATAL I/O ERROR-WARM CYL 00152000
* DMKCKP922W SYSTEM RECOVERY FAILURE; INVALID SPOOLING DATA 00153000
* DMKCKP910W SYSTEM RECOVERY FAILURE; INVALID WARM START CYL 00154000
* DMKCKP911W SYSTEM RECOVERY FAILURE; WARM START AREA FULL 00155000
* 00156000
* DISABLE WAIT STATE (CODE 007) 00157000
* 00158000
*. 00159000
SPACE 3 00160000
EJECT 00161000
COPY OPTIONS 00162000
SPACE 3 00163000
COPY LOCAL OPTIONS 00164000
SPACE 2 00165000
PUNCH 'SPB' TELL LOADER TO START AT NEXT PAGE 00166000
* BOUNDARY 00167000
DMKCKP CSECT 00168000
SPACE 00169000
ENTRY DMKCKPT,DMKCKPST,DMKCKPRS @V200820 00170000
ENTRY DMKCKPLD @V407429 00171000
SPACE 00172000
EXTRN DMKSAV,DMKSAVRS 00173000
SPACE 3 00174000
USING PSA,R0 00175000
USING ACNTBLOK,R4 00176000
USING RCHBLOK,R6 00177000
USING RCUBLOK,R7 00178000
USING RDEVBLOK,R8 00179000
USING SYSLOCS,R10 00180000
USING VMBLOK,R11 00181000
USING DMKCKPT,R12,R13 @V407429 00182000
SPACE 3 00183000
EJECT 00184000
DMKCKPT DS 0H 00185000
LM R12,R13,CKPBASE LOAD BASE REGS @V407429 00186000
B CKP001 00187000
ERRORMSG DC A(MSG900-DMKCKP+X'800') ERROR MESSAGE ADDRESS @V2A2029 00188000
ORG DMKCKPT+14 ORIGIN NAME ADDRESS FOR DMKDDR @V2A2029 00189000
ID DC CL8'DMKCKP' MODULE NAME 00190000
SPACE 00191000
ORG DMKCKPT+22 ORIGIN NUC CYL ADDRESS FOR DMKDDR@V2A2029 00192000
DMKCKPST DC XL2'00' CYLINDER ADDRESS OF THE FIRST NUCLEUS CYL 00193000
DC XL2'00' CYLINDER ADDRESS OF THE LAST NUCLEUS CYL 00194000
SPACE 00195000
DS 0F @V2A2029 00196000
DMKCKPRS DC XL8'00' BBCCHHR OF THE DMKSAV ON DISK @V2A2029 00197000
DMKCKPLD DC XL8'00' BBCCHRR OF DMKCKP PAGE 2 @V407429 00198000
SEEK DC H'0' BB CURRENT SEEK ADDRESS @V2A2029 00199000
DC H'0' CC CYLINDER @V2A2029 00200000
HEAD DC H'0' HH HEAD @V2A2029 00201000
REC DC X'0100' R RECORD @V2A2029 00202000
BASEREGS DC A(X'800') DMKCKP BASE ADDRESS @V2A2029 00203000
DC A(X'1800') 2ND BASE REG ADDRESS @V407429 00204000
TERMBUFF DC A(RECBUFF-DMKCKP+X'1800') TERMBUFF ADDRESS @V407429 00205000
SPACE 00206000
CKP001 DS 0H 00207000
LH R0,INTTIO GET SYS IPL ADDRESS 00208000
ST R0,SYSRES SAVE 00209000
MVC PRNPSW(8),WAIT17 SET PROGRAM NEW PSW @VA09017 00210100
MVC MCNPSW(8),WAIT7 SET UP MACHINE NEW PSW @V407429 00211000
SLR R1,R1 .. @V2A2029 00212000
ST R1,IPLPSW+4 CLEAR RESTART PSW @V2A2029 00213000
LA R0,LDCCW GET ADDRESS OF CCWS @V407429 00214000
LA R3,DMKCKPLD DMKCKP PAGE 2 SEEK ADDR @V56BDA8 00215000
STCM R3,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 00216000
LA R3,LDSRCH SEARCH CCW IN CASE OF @V56BDA8 00217000
STCM R3,B'0111',ALTTIC+1 ALTERNATE TRACK @V56BDA8 00218000
B CKPLDRT GO LOAD PAGE 2 @V407429 00219000
DONE BAL R14,CLOSE WRITE OUT BUFFER TO WRM CYL @V407429 00220000
MVC SEEK+2(2),CYLSTART FIRST WARMSTART CYLINDER @V407429 00221000
MVC HEAD(4),=X'00000100' SET HEAD ZERO AND RECORD @V407429 00222000
* ONE 00223000
MVI DSK05,X'06' SET CCW TO READ DATA @V407429 00224000
BAL R14,RDWR READ RECORD ONE FROM 1ST WRM CYL @V407429 00225000
MVI DSK05,X'05' SET CCW TO WRITE DATA @V407429 00226000
MVC BUFFCV(8),DMKRSPCV SET CLOCK VALUE IN CASE OF @V407429 00227000
* ERROR 00228000
MVC BUFFDLM(8),X8FF INDICATE CHECK POINT VALID @V407429 00229000
MVI BUFFVER,VERR6 MAKE IT TO BE RELEASE 6 VERSION @VA12228 00229500
BAL R14,RDWR WRITE RECORD ONE TO INDICATE @V407429 00230000
* VALID WARM START DATA 00231000
SPACE 00232000
CLC CPID(4),=C'CPCP' SHUTDOWN ??? @V407429 00233000
BE SHUTSYS YES - GO DO IT @VA09276 00234200
MVC CPID(4),=C'WRM ' INDICATE AUTOMATIC WARM START @VA09276 00234400
MVC IPLPSW(8),WAIT16 LOAD RESTART PSW - WARM START @VA09276 00234600
* DATA SAVED 00234800
B WARM GO WARM START @VA09276 00235000
************************************** 00236000
* 00237000
* SYSTEM SHUTDOWN 00238000
* 00239000
**************************************** 00240000
SPACE 00241000
SHUTSYS LA R3,SHUTCCW SHUDOWN COMPLETE MESSAGE @V407429 00242000
MVC CPID(4),CSHUT INDICATE SHUTDOWN COMPLETE @V407429 00243000
MVI SWAITSW+1,X'00' INDICATE SHUT @V407429 00244000
CHKCNSL LA R2,ALARM ALARM OPTION FOR MESSAGE @V407429 00245000
LA R1,OPRPROG PROGRAM RETURN ADDRESS @V407429 00246000
ST R1,PRNPSW+4 SET UP NEW PROGRAM PSW @V407429 00247000
CONSLP EQU * WRITE MESSAGES TO THE OPERATOR @V407429 00248000
SR R0,R0 CLEAR MESSAGE LENGTH REG @V407429 00249000
SR R1,R1 CLEAR MESSAGE ADDRESS REG @V407429 00250000
* REG 3 POINTS MESSAGE ADDRESS LIST 00251000
ICM R1,B'0111',1(R3) GET ADDRESS OF MESSAGE @V407429 00252000
BZ SWAITSW BRANCH IF END OF LIST @V407429 00253000
IC R0,0(R3) GET MESSAGE LENGTH @V407429 00254000
L R15,DMKOPRWT ENTRY TO CONSOLE WRITE ROUTINE @V407429 00255000
BALR R14,R15 ... @V407429 00256000
BC 1,SWAITSW BRANCH IF DEVICE NOT FOUND @V407429 00257000
SR R2,R2 CLEAR PARM REG @V407429 00258000
LA R3,4(R3) POINT TO NEXT MESSAGE IN LIST @V407429 00259000
ICM R4,B'1111',4(R3) IS THIS THE LAST MESSAGE ? @V407429 00260000
BZ CHKCNSL YES -- ADD ALARM TO PARM REG @V407429 00261000
B CONSLP GO SET UP REGS FOR NEXT MESSAGE @V407429 00262000
SPACE 00263000
OPRPROG LM R12,R13,CKPBASE RELOAD BASE REGS @V407429 00264000
SWAITSW B ERRWAIT BRANCH IF ERROR @V407429 00265000
TM CPSTAT4,CPREIPL Was SHUTDOWN REIPL in prog? HRC076DK 00265010
BO REIPL Yes HRC076DK 00265020
TM CPSTAT4,CPPWROFF HRC002DK 00265100
BZ WAITNOW HRC002DK 00265200
NI CPSTAT4,255-CPPWROFF HRC002DK 00265300
MVC PRNPSW(8),WAIT8 HRC002DK 00265400
LM R2,R3,POWEROFF HRC002DK 00265500
DC X'8323001F' HRC002DK 00265600
WAITNOW EQU * HRC002DK 00265700
LPSW WAIT8 DISABLE WAIT (CODE 008) @V407429 00266000
POWEROFF DS 0D HRC002DK 00266300
DC C'POWEROFF' HRC002DK 00266600
* SHUTDOWN COMPLETE 00267000
ERRWAIT LM R0,R15,CKPSAVE RESTORE GPRS TO TIME OF TROUBLE @V407429 00268000
MVC 184(4),SAVEDEV RESTORE DEVICE INTERRUPT ADDRESS @V407429 00269000
MVC CSW(12),SAVECSW RESTORE CSW AND CAW @V407429 00270000
MVC 16(24,R0),SENSDATA SENSE DATA TO LOW STORAGE @V407429 00271000
MVC 136(8),SAVECODE RESTORE INTERRUPT CODES @V407429 00272000
LPSW WAIT7 DISABLE WAIT STATE (CODE 007) @V407429 00273000
* ERROR CONDITION 00274000
* HRC076DK 00274100
REIPL EQU * Here for SHUTDOWN REIPL HRC076DK 00274130
NI CPSTAT4,255-CPREIPL Turn off REIPL flag HRC076DK 00274160
MVC CPID,=C'WARM' Indicate warm start HRC076DK 00274190
XC CSW,CSW Clear prior CSW HRC076DK 00274220
LA R2,WAIT8 -> shutdown complete PSW HRC076DK 00274250
LA R1,READIPL -> IPL CCW string HRC076DK 00274280
ST R1,CAW Set its address in the CAW HRC076DK 00274310
LH R1,SYSIPLDV Get the IPL device address HRC076DK 00274340
STH R1,INTTIO Place as i/o interrupt code HRC076DK 00274370
SIO 0(R1) Issue the read ipl CCW HRC076DK 00274400
BC 4,LOADCK CSW stored; check status HRC076DK 00274430
BC 7,IPLLOAD Error on SIO, load wait PSW HRC076DK 00274460
TIO 0(R1) Loop for i/o completion HRC076DK 00274490
BC 7,*-4 Keep trying HRC076DK 00274520
* HRC076DK 00274550
LOADCK EQU * HRC076DK 00274580
CLI CSW+4,X'0C' CE+DE from i/o operation? HRC076DK 00274610
BNE IPLLOAD No, error. Load WAIT8 PSW HRC076DK 00274640
LA R2,IPLPSW Good read; -> IPL PSW HRC076DK 00274670
* HRC076DK 00274700
IPLLOAD EQU * HRC076DK 00274730
LPSW 0(R2) Load WAIT8 PSW or IPL PSW HRC076DK 00274760
* HRC076DK 00274790
READIPL CCW X'02',X'000000',X'60',24 READ IPL HRC076DK 00274820
CCW X'08',X'000008',0,0 TIC to IPL record CCWs HRC076DK 00274850
* 00275000
DS 0F @V407429 00276000
SHUTCCW DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00277000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00278000
DC AL1(MSG960L),AL3(MSG960-DMKCKP+X'800') @V407429 00279000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00280000
DC AL1(MSG961L),AL3(MSG961-DMKCKP+X'800') @V407429 00281000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00282000
DC A(0) @V407429 00283000
* 00284000
MSG960 DC C'DMKCKP960I System' HRC028DK 00285490
MSGBLK DC C' ' @V407429 00286000
CWARM DC C'WARM START ' @V407429 00287000
CDATA DC C'data saved' HRC028DK 00288490
MSG960L EQU *-MSG960 @V407429 00289000
* 00290000
MSG961 DC C'DMKCKP961W System ' HRC028DK 00291590
CSHUT DC C'Shutdown Complete' HRC028DK 00292180
MSG961L EQU *-MSG961 @V407429 00293000
* 00294000
* READ DMKSAVCP DMKSAVRS PROGRAM INTO CORE 00295000
* THEN GO TO DMKSAVRS 00296000
COLD MVC CPID(4),=C'COLD' INDICATE COLD START @V407429 00297000
WARM LA R0,RESTCCW ADDRESS OF DISK CCW @V407429 00298000
LA R3,DMKCKPRS DMKSAV SEEK ADDRESS @V56BDA8 00299000
STCM R3,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 00300000
LA R3,RESTSRCH SEARCH CCW @V56BDA8 00301000
STCM R3,B'0111',ALTTIC+1 IN CASE OF ALTERNATE TRACK @V56BDA8 00302000
CKPLDRT LA R14,100 RETRY COUNT @V56BDA8 00303000
L R2,SYSRES GET IPL DEVICE ADDRESS @V407429 00304000
TIOSYS ST R0,CAW SET UP CAW @V407429 00305000
TIOSYS1 EQU * @V56BDA8 00306000
TIO 0(R2) CLEAR DEVICE @V407429 00307000
BNZ *-4 @V407429 00308000
SIO 0(R2) START @V407429 00309000
BNZ TIOSYS CLEAR DEVICE AGAIN @V407429 00310000
TIO 0(R2) TEST @V407429 00311000
BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00312000
CLC CSW+4(2),=AL1(CE+DE,0) SUCCESSFULL READ @V407429 00313000
BNE SAVESTAT NO - SAVE STATUS @V407429 00314000
TM FLAG,CKPLD CKP PAGE 2 LOADED ? @V407429 00315000
BO SAVERD YES - @V407429 00316000
OI FLAG,CKPLD INDICATE CKP PAGE 2 LOADED @V407429 00317000
B CKP002 GO CHECKPOINT ROUTNINE @V407429 00318000
SAVESTAT MVC SAVEDEV(4),184 SAVE DEVICE ADDRESS @V407429 00319000
MVC SAVECSW(12),CSW SAVE CSW AND CAW @V407429 00320000
LA R3,SNSECCW ADDRESS OF SENSE CCW @V407429 00321000
ST R3,CAW SET UP CAW @V407429 00322000
TIO 0(R2) CLEAR IT @V407429 00323000
BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00324000
SIO 0(R2) START IO (SENSE) @V407429 00325000
TIO 0(R2) TEST IO @V407429 00326000
BC 6,*-4 LOOP IF BUSY OR STATUS STORED @V407429 00327000
TM SENSDATA,TRKCONCK TRACK CONDITION CHECK? @V56BDA8 00328000
BZ COUNTERR NO, RETRY @V56BDA8 00329000
MVC CAW+1(3),=AL3(READHAR0-DMKCKP+X'800') @V56BDA8 00330000
TIO 0(R2) DRAIN ANYTHING PENDING @V56BDA8 00331000
BC 7,*-4 KEEP TRYING @V56BDA8 00332000
SIO 0(R2) READ R0 @V56BDA8 00333000
BC 7,*-4 TAKE ERROR PATH @V56BDA8 00334000
TIO 0(R2) TEST FOR COMPLETION @V56BDA8 00335000
BC 7,*-4 TRY AGAIN @V56BDA8 00336000
CLC CSW+4(2),=AL1(CE+DE,0) CLEAN END? @V56BDA8 00337000
BNE COUNTERR NO, ERROR @V56BDA8 00338000
MVC CAW+1(3),=AL3(ALTSEEK-DMKCKP+X'800') @V56BDA8 00339000
BCT R14,TIOSYS1 RESTART ON ALTERNATE TRACK @V56BDA8 00340000
B TESTP2 CHECK FOR PAGE 2 LOADED @V56BDA8 00341000
SPACE 1 00342000
COUNTERR EQU * @V56BDA8 00343000
BCT R14,TIOSYS RETRY 100 TIMES @V56BDA8 00344000
TESTP2 EQU * @V56BDA8 00345000
TM FLAG,CKPLD LOADING CKP PAGE2 OR SAV ? @V407429 00346000
BO RESTAUT BRANCH - LOADING DMKSAV @V407429 00347000
* 00348000
LPSW WAIT17 WAIT - ERROR READING CKP PAGE 2 @VA09017 00349100
* 00350000
RESTAUT MVC CPID(4),CSHUT OVERRIDE WARM IF AUTO RESTART @V407429 00351000
B MSG902N FATAL IO ERROR ON NUCLEUS CYL @V407429 00352000
SAVERD EQU * HRC075DK 00353000
L R10,SYSRES Get addr of the IPL devive HRC075DK 00353500
GOTO DMKSAVRS START SYSTEM RE-IPL @V407429 00354000
EJECT 00355000
******************************************** 00356000
* 00357000
* ERROR RECOVERY ROUTINE 00358000
* 00359000
******************************************** 00360000
SPACE 00361000
MSG902N EQU * HERE ON NUCLEUS CYLINDER ERROR @V407429 00362000
MVC MSGDATA+16(9),=C'NUCL CYL' @V407429 00363000
B MSG902 .. @V407429 00364000
SPACE 00365000
DSKBWAIT MVC IONPSW(8),SIOINTP SET UP INT PSW @V407429 00366000
BCT R0,WAITI WAIT FOR CHANNEL TO CLEAR @V407429 00367000
SPACE 00368000
MSG902W EQU * HERE ON I/O ERROR-WARM START CYL @V407429 00369000
MVC MSGDATA+16(9),=C'WARM CYL' @V407429 00370000
MSG902 MVC MSGDATA(16),=C'FATAL I/O ERROR-' @V407429 00371000
MVI MSGNUM2,C'2' SET MSG 902W @V407429 00372000
* 00373000
B CHKERR PRINT ERROR MESSAGE @V407429 00374000
* 00375000
DSKSTOR TM CSW+4,BUSY DE PENDING IN DEVICE ? @V407429 00376000
BZ DSKSNS NO - @V407429 00377000
TM CSW+4,CE+DE+ATTN+CUE ENDING STATUS ? @V407429 00378000
BNZ DSKSIO BRANCH IF ENDING STATUS @V407429 00379000
B DSKBWAIT INTERRUPT PENDING - WAIT FOR IT @V407429 00380000
* 00381000
*** RECOVERY FAILURE 00382000
* 00383000
MSG900W EQU * HERE ON PROGRAM CHECK @V407429 00384000
LM R12,R13,CKPBASE RESTORE BASE REGS @V407429 00385000
TM ACNTSW,X'20' DOING ACNT CALCULATIONS ? @V407429 00386000
BZ CHKERR NO -- REAL PROGRAM CHECK @V407429 00387000
CLI INTPR+1,X'09' FIXED POINT DIVIDE ? @V407429 00388000
BE 8(R5) YES - RETURN ON R5 PLUS 8 @V407429 00389000
CHKERR EQU * HERE IF RECOVERY ERROR FAILURE @V407429 00390000
MVC SAVECODE(8),136 LAST PROGRAM CHECK INT CODE @V407429 00391000
MVC SAVEPSW(8),PROPSW SAVE PROGRAM OLD PSW @V407429 00392000
STM R0,R15,CKPSAVE SAVE ALL REGISTERS @V407429 00393000
LA R3,OPRPROG ADDRESS OF PROGRAM CHECK RETURN @V407429 00394000
ST R3,PRNPSW+4 SET NEW PROGRAM PSW ADDRESS @V407429 00395000
LA R3,ERRCCW ERROR MSG LIST ADDRESS @V407429 00396000
CLC CPID(4),=C'CPCP' WARM MACHINE ?? @V407429 00397000
BE WARMMCH YES - @V407429 00398000
CLC CPID(4),CWARM WARM MACHINE ?? @V407429 00399000
BNE CHKCNSL NO - WRITE ERROR MESSAGE @V407429 00400000
MVC CPID(4),=C'CPID' FORCE SHUTDOWN MODE @V407429 00401000
WARMMCH L R4,ARSPPR ADDRESSS OF DMKRSPPR LIST @V407429 00402000
SL R4,=F'4' ADJUST TO START OF LIST @V407429 00403000
MVC 0(LISTSIZE,R4),RSPLIST MOVE IN MODIFIED LIST @V407429 00404000
B CHKCNSL OUTPUT @V407429 00405000
* 00406000
MSG901W EQU * HERE ON MACHINE CHECK @V407429 00407000
MVC MSGDATA(24),=C'MACHINE CHECK, RUN SEREP' @V407429 00408000
MVI MSGNUM2,C'1' SET MSG NUMBER 901W @V407429 00409000
B CHKERR OUTPUT MSG @V407429 00410000
SPACE 00411000
MSG922W EQU * HERE IF IVVALID WARM START DATA @V407429 00412000
MVC MSGNUM1(2),=C'22' SET MSG 922W @V407429 00413000
MVC MSGDATA(24),=C'INVALID SPOOLING DATA ' @V407429 00414000
B CHKERR OUTPUT MESSAGE @V407429 00415000
SPACE 00416000
MSG910W EQU * INVALID WARM START CYLINDER @V407429 00417000
MVC MSGDATA(22),CINVAL @V407429 00418000
SETNUM1 MVI MSGNUM1,C'1' SET MSG 910W @V407429 00419000
B CHKERR OUTPUT MESSAGE @V407429 00420000
SPACE 00421000
MSG911W EQU * WARM START AREA FULL @V407429 00422000
MVI MSGNUM2,C'1' SET MSG 911W @V407429 00423000
MVC MSGDATA(11),CWRMCYL .. @V407429 00424000
MVC MSGDATA+11(9),CAREA @V407429 00425000
B SETNUM1 FINISH 911 MESSAGE @V407429 00426000
SPACE 00427000
EJECT 00428000
******************************************************************** 00429000
* 00430000
* CONSTANTS 00431000
* 00432000
******************************************************************** 00433000
SPACE 00434000
DS 0F @V407429 00435000
ERRCCW DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00436000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00437000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00438000
DC AL1(MSG900L),AL3(MSG900-DMKCKP+X'800') @V407429 00439000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00440000
DC AL1(1),AL3(MSGBLK-DMKCKP+X'800') @V407429 00441000
DC A(0) @V407429 00442000
* 00443000
MSG900 DC C'DMKCKP9' @V407429 00444000
MSGNUM1 DC C'0' @V407429 00445000
MSGNUM2 DC C'0W System Recovery failure; ' HRC028DK 00446590
MSGDATA DC CL24'Program Check' HRC028DK 00447180
MSG900L EQU *-MSG900 @V407429 00448000
* 00449000
CINVAL DC C'Invalid ' HRC028DK 00450490
CWRMCYL DC C'WARM START ' @V407429 00451000
CCYL DC C'CYL' @V407429 00452000
CAREA DC C'area full' HRC028DK 00453490
* 00454000
CKPBASE EQU BASEREGS-DMKCKP+X'800' @V407429 00455000
* 00456000
DSKCCW CCW X'07',SEEK-DMKCKP+X'800',CC,6 @V407429 00457000
DISKSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00458000
CCW X'31',SEEK+2-DMKCKP+X'800',CC,5 @V407429 00459000
CCW X'08',*-8-DMKCKP+X'800',0,0 @V407429 00460000
DSK05 CCW X'06',RECBUFF-DMKCKP+X'800',SILI+CC,4096 @V407429 00461000
CCW 4,0,SILI+SKIP,1 @V407429 00462000
* 00463000
RESTCCW CCW 7,DMKCKPRS-DMKCKP+X'800',CC,6 @V407429 00464000
RESTSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00465000
CCW 49,DMKCKPRS+2-DMKCKP+X'800',CC,5 @V407429 00466000
CCW 8,*-8-DMKCKP+X'800',0,0 @V407429 00467000
CCW 6,DMKSAV,CC+SILI,4096 @V407429 00468000
CCW 4,0,SILI+SKIP,1 @V407429 00469000
SPACE 00470000
* 00471000
LDCCW CCW 7,DMKCKPLD-DMKCKP+X'800',CC,6 @V407429 00472000
LDSRCH EQU * RESUME POINT AFTER ALTERNATE SEEK@V56BDA8 00473000
CCW 49,DMKCKPLD+2-DMKCKP+X'800',CC,5 @V407429 00474000
CCW 8,*-8-DMKCKP+X'800',0,0 @V407429 00475000
CCW 6,0+X'1800',CC+SILI,4096 @V407429 00476000
CCW 4,0,SILI+SKIP,1 @V407429 00477000
SPACE 00478000
SNSECCW CCW 4,SENSDATA-DMKCKP+X'800',SILI,24 SENSE CCW @V407429 00479000
SPACE 1 00480000
READHAR0 CCW 07,0,CC,6 @V56BDA8 00481000
CCW 26,0,CC+SILI+SKIP,5 VALTERN @V56BDA8 00482000
CCW 22,ALTR0ADD-DMKCKP+X'800',SILI,4 @V56BDA8 00483000
ALTSEEK CCW 07,ALTSKADD-DMKCKP+X'800',CC+SILI,6 @V56BDA8 00484000
ALTTIC CCW 08,DISKSRCH-DMKCKP+X'800',0,0 @V56BDA8 00485000
ALTSKADD DC XL2'0' BB @V56BDA8 00486000
ALTR0ADD DS XL4 CCHH FROM RECORD 0 COUNT @V56BDA8 00487000
SUSPEND CCW X'87',SUSPORD-DMKCKP+X'800',CC,4 EXEC MSC ORDER @V407438 00488000
CCW X'03',0,SILI,1 MUST BE CHAINED TO A NOP @V407438 00489000
SUSPORD DC AL1(X'22',0,B'10000000',0) SUSPEND, IMMEDIATE @V407438 00490000
DS 0D @V407429 00491000
SIOINTP DC X'000C0000' @V407429 00492000
DC A(DSKSIO-DMKCKP+X'800') @V407429 00493000
* 00494000
CHKPINT DC X'000C0000' @V407429 00495000
DC A(MSG900W-DMKCKP+X'800') @V407429 00496000
* 00497000
CHKPMCK DC X'000C0000' @V407429 00498000
DC A(MSG901W-DMKCKP+X'800') @V407429 00499000
* 00500000
DC X'000C0000' NEW IO PSW @V407429 00501000
DC A(CHKIOINT-DMKCKP+X'800') @V407429 00502000
* 00503000
ENABLE EQU * @V407429 00504000
IWAIT DC X'020E0000' @V407429 00505000
DC A(0) @V407429 00506000
* 00507000
DISABLE EQU * @V407429 00508000
IOINTP DC X'000C0000' @V407429 00509000
DC A(IOINT-DMKCKP+X'800') @V407429 00510000
* 00511000
WAIT7 DC X'000A0000' PROGRAM OR DISK ERROR @V407429 00512000
DC X'00000007' DISABLE WAIT STATE (CODE 007) @V407429 00513000
* 00514000
WAIT8 DC X'000A0000' SHUTDOWN COMPLETE @V407429 00515000
DC X'00000008' DISABLE WAIT STATE (CODE 008) @V407429 00516000
* 00517000
WAIT16 DC X'000A0000' WARM START DATA SAVED-RESTART @VA09276 00517500
DC X'00000016' DISABLE WAIT STATE ( CODE 16 ) @VA09276 00517600
WAIT17 DC X'000A0000' ERROR LOADING CKP PAGE 2 @VA09017 00518100
DC X'00000017' DISABLE WAIT STATE (CODE 17) @VA09017 00519100
* 00520000
SYSRES DC F'0' ADDRESS OF SYSRES DEVICE @V407429 00521000
FLAG DC X'00' FLAG BYTE @V407429 00522000
CKPLD EQU X'80' DMKCKP PAGE 2 LOADED @V407429 00523000
CKPMDL EQU X'40' INDICATE MONITOR FILE COPY EXISTS @V50A2B5 00524000
TRKCONCK EQU X'02' TRACK CONDITION CHECK @V56BDA8 00525000
SPACE 00526000
HDTABLE DS 0H TABLE OF HEAD NUMBERS FOR @V407429 00527000
* 2314,2319 00528000
* FOR PAGE TO HEAD CONVERSION 00529000
PRINT DATA @V407429 00530000
DC AL1(00,00,01,01,02,03,03,04) @V407429 00531000
DC AL1(05,05,06,06,07,08,08,09) @V407429 00532000
DC AL1(10,10,11,11,12,13,13,14) @V407429 00533000
DC AL1(15,15,16,16,17,18,18,19) @V407429 00534000
PRINT NODATA @V407429 00535000
SPACE 00536000
LTORG @V407429 00537000
EJECT 00538000
DS 0H @V407429 00539000
CKP002 EQU * @V407429 00540000
XC CLR1(CLR1SIZE),CLR1 CLEAR SAVE AND WORK AREA @V407429 00541000
MVC PRNPSW(24),CHKPINT PROG,MACHINE,I/O PSWS @V407429 00542000
L R14,TERMBUFF GET ADDRESS OF TERM BUFFER @V407429 00543000
MVI DLMREC,X'FF' SET DLMREC TO FFS @V2A2029 00544000
MVC DLMREC+1(CLRFSIZE-1),DLMREC .. @V2A2029 00545000
LCTL C2,C3,X8FF ENABLE ALL CHANNELS @V2A2029 00546000
LCTL C0,C0,CPCREG0 RESET CONTROL REG 0 @VA03413 00547000
CLC CPID(4),=C'CPCP' SHUTDOWN REQUESTED ?? 00548000
BE GETLIST YES - GET RSP LIST @V2A2029 00549000
CLC CPID(4),CWARM WARM MACHINE ?? @V2A2029 00550000
BNE COLD NO, COLD MACHINE ... GET OUT 00551000
GETLIST L R1,ARSPPR ADDRESS OF LIST IN DMKRSP @V2A2029 00552000
S R1,=F'4' ADJUST TO START OF DMKRSPPR LIST 00553000
MVC RSPLIST(LISTSIZE),0(R1) MOVE LIST OF POINTERS TO DMKCKP 00554000
L R1,DMKSYSRM GET POINTER TO REAL STORAGE SIZE @VA02884 00555000
MVC STORSIZE,0(R1) SAVE SIZE OF REAL MACHINE @VA02884 00556000
L R1,DMKSYSWM -> WRM area cyls info HRC075DK 00557000
MVC TYPE(1),7(R1) Save device type of WRM HRC075DK 00558000
LA R1,1 SET RECORD COUNTER 00559000
STH R1,RECCNT .. 00560000
SPACE 00561000
* DRAIN ALL INTERRUPTS SO THAT ANY PENDING UC STATUS 00562000
* WILL GET SENSED. ENABLING FOR INTS CAUSES THE CHKIOINT 00563000
* ROUTINE TO GAIN CONTROL. IF UC STATUS IS PRESENT, A 00564000
* SENSE WILL BE ISSUED FOR IT. IN ANY CASE THE SYSTEM 00565000
* IS EVENTUALLY RETURNED TO ITS PRE-INTERRUPT STATE VIA 00566000
* LPSW FROM I/O OLD PSW, WHICH IS ENABLED, THUS CAUSING 00567000
* THE NEXT PENDING INTERRUPT TO BE TAKEN. THIS CONTINUES 00568000
* UNTIL THERE ARE NO MORE PENDING INTERRUPTS AND WE RETURN 00569000
* BELOW TO DO THE DISABLE. 00570000
SPACE 00571000
SSM ENABLE DRAIN PENDING INTS, ENABLE SYS @V407438 00572000
SSM DISABLE ALL INTS DRAINED, DISABLE @V407438 00573000
LA R4,2 LENGTH OF ONE INDEX ENTRY 00574000
LA R5,30 DISPLACEMENT OF LAST INDEX ENTRY 00575000
* IN BLOK 00576000
L R9,ARIOCT POINT TO START OF CHANNEL INDEX 00577000
L R1,ARIOCC POINT TO REAL CHANNEL COUNT 00578000
LH R10,0(R1) GET NUMBER OF REAL CHANNELS ON 00579000
* SYSTEM 00580000
CHINDEX LH R6,0(R9) GET NEXT CHANNEL INDEX 00581000
A R6,ARIOCH POINT TO RCHBLOK 00582000
SR R3,R3 CLEAR RCUBLOK INDEX 00583000
CUINDEX LH R7,RCHCUTBL(R3) GET NEXT RCUBLOK INDEX ENTRY 00584000
LTR R7,R7 IS THERE ONE ?? 00585000
BM NEXTCU NO -- 00586000
A R7,ARIOCU POINT TO REAL CONTROL UNIT 00587000
SR R2,R2 CLEAR RDEVBLOK INDEX 00588000
DEVINDEX LH R8,RCUDVTBL(R2) GET NEXT RCUBLOK INDEX ENTRY 00589000
LTR R8,R8 IS THERE ONE ?? 00590000
BM NEXTDEV NO -- 00591000
SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00592000
A R8,ARIODV POINT TO RDEVBLOK 00593000
ST R8,SAVERDEV SAVE RDEVBLOK ADDRESS @V200829 00594000
SPACE 00595000
LA R1,SNSECCW SENSE CCW 00596000
ST R1,CAW SET UP CAW FOR SENSE OPERATION 00597000
LH R1,RDEVADD GET DEVICE ADDRESS 00598000
LH R0,RCUADD AND CONTROL UNIT ADDRESS 00599000
OR R1,R0 COMBINE 00600000
AH R1,RCHADD AND ADD TO CHANNEL ADDRESS 00601000
SPACE 2 HRC032DK 00602990
TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00604000
BZ CHSPEC NO, CHECK FOR SPECIAL CLASS @V2D3931 00605000
CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE @V2D3931 00606000
BE NETWORK YES, ... @V2D3931 00607000
CHSPEC EQU * @V2D3931 00608000
TM RDEVTYPC,CLASSPEC IS THIS A SPECIAL CLASS @V2D3931 00609000
BZ TESTTERM NO, .... @V2D3931 00610000
CLI RDEVTYPE,TYP3705 3704 OR 3705 TYPE @V200829 00611000
BNE TESTMSC NOPE, GO TRY 3851 @V407438 00612000
* 00613000
* RECORD FORMAT FOR 3705 TYPE DEVICE 00614000
* 00615000
* REAL DEVICE ADDRESS = 2 BYTES 00616000
* NUMBER OF NICBLOKS = 2 BYTES 00617000
* NCP LOAD NAME = 8 BYTES 00618000
* BIT MAP = 1 BIT FOR EACH NICBLOK 00619000
* 8 NICBLOKS EACH BYTE 00620000
* 4096 NICBLOKS MAX. 00621000
* 00622000
NETWORK EQU * @V2D3931 00623000
* CLC CPID(4),CWARM SYSTEM RESTARTING ? HRC032DK 00624590
* BNE TERMHIO NO - SKIP ENABLED ADDRESSES HRC032DK 00625180
TM RDEVSTAT,RDEVDED DEDICATED DEVICE ? @VM08748 00626000
BO TERMHIO YES, DO HALT I/O @V2D3931 00627000
TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00628000
BO RGFCKP1 YES, SAVE LINE ADDRESS @V2D3931 00629000
TM RDEVFLAG,RDEVLNCP+RDEVLCEP+RDEVAUTO O.K. ? @VM08833 00630000
BZ TERMHIO NO -- DON'T CHECKPT IT @VM08833 00631000
RGFCKP1 EQU * @V2D3931 00632000
MVC 4(8,R14),RDEVNCP SAVE NCP LOAD NAME @V2D3931 00633000
STH R1,0(R14) SAVE DEVICE ADDRESS @V2D3931 00634000
SLR R5,R5 .. @V200829 00635000
STH R5,2(R14) ZERO NUMBER OF NICBLOKS @V200829 00636000
LR R15,R14 SAVE START ADDRESS @V200829 00637000
LA R14,12(R14) UPDATE BUFFER ADDRESS @V200829 00638000
TM RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00639000
BO *+12 YES, BYPASS @V2D3931 00640000
TM RDEVFLAG,RDEVLNCP IS THERE A NICBLOK LIST ? @V200829 00641000
BZ TERMHIO NO -- @VM08748 00642000
LH R5,RDEVMAX MAXIMUM RESOURCE ID. @V200829 00643000
LA R5,1(,R5) NUMBER OF NICBLOKS @V200829 00644000
ICM R8,B'1111',RDEVNICL ANY NETWORK CONTROL BLOKS @V200829 00645000
BZ TERMHIO NO -- @VM08748 00646000
STH R5,2(R15) SAVE NICBLOK NUMBER IN BUFFER @V200829 00647000
NICLOOP MVI 0(R14),X'00' ZERO BYTE FOR THIS NICBLOK @V200829 00648000
LA R15,256 SET MASK BIT FOR EXEC OI @V200829 00649000
NICLP SRL R15,1 SHIFT RIGHT ONE BIT @V200829 00650000
USING NICBLOK,R8 @V200829 00651000
TM NICTYPE,NICLGRP IS THIS A CONTROL UNIT NICBLOK @V2D3931 00652000
BO *+12 YES, CHECK STATUS @V2D3931 00653000
TM NICTYPE,NICLINE IS THIS A LINE ? @V2D3931 00654000
BZ CHKTERM NO, CHECK FOR TERMINAL LINE @V2D3931 00655000
TM NICSTAT,NICDISA IS THE LINE ACTIVE ? @V2D3931 00656000
BZ SETBIT YES, SET BIT IN MAP @V2D3931 00657000
B NICNEXT CHECK NEXT NICBLOK @V2D3931 00658000
CHKTERM TM NICTYPE,NICTERM IS THIS A TERMINAL ? @V200829 00659000
BZ NICNEXT NO -- CHECK NEXT NICBLOK @V200829 00660000
TM NICFLAG,NICDISB TERMINAL DISABLED ? @V200829 00661000
BO NICNEXT YES - TRY NEXT NICBLOK @V200829 00662000
TM NICFLAG,NICENAB TERMINAL ENABLED ? @V200829 00663000
BZ NICNEXT NO -- @V200829 00664000
SETBIT EX R15,EXOI SET BIT FOR THIS NICBLOK @V200829 00665000
NICNEXT LA R8,NICSIZE*8(,R8) POINT TO NEXT NICBLOK @V200829 00666000
BCT R5,*+8 BRANCH IF NOT THE LAST NICBLOK @V200829 00667000
B NICEND END OF NICBLOK LIST @V200829 00668000
CL R15,=F'1' BYTE FULL @V200829 00669000
BNE NICLP NO -- @V200829 00670000
LA R14,1(R14) POINT TO NEXT BYTE IN BUFFER @V200829 00671000
B NICLOOP PROCESS NEXT NICBLOK @V200829 00672000
SPACE 00673000
NICEND ST R5,1(R14) ZERO ODD BYTE @V200829 00674000
LA R14,2(R14) UPDATE BUFFER ADDRESS @V200829 00675000
N R14,=X'00FFFFFE' ROUND OFF TO HALF WORD @V200829 00676000
B TERMHIO GO HALT DEVICE @VM08748 00677000
SPACE 00678000
USING RDEVBLOK,R8 @V200829 00679000
TESTMSC CLI RDEVTYPE,TYP3851 IS THIS AN MSC? @V407438 00680000
BNE TESTTERM NOPE, GO TRY GRAF/TERM @V407438 00681000
LA R15,SUSPEND ADDR OF EXECUTE-SUSPEND CCW @V407438 00682000
ST R15,CAW SET UP THE CAW @V407438 00683000
SIO 0(R1) SLAM IT TO THE MSC @V407438 00684000
BC 2,*-4 BUSY, KEEP TRYING... @V407438 00685000
LA R15,SNSECCW RESTORE THE SENSE CCW TO CAW @V407438 00686000
ST R15,CAW ... @V407438 00687000
BC 1,NEXTDEV CC=3, FORGET IT. @V407438 00688000
BC 4,TSTUC CC=1, GO CHECK UC STATUS @V407438 00689000
TIO 0(R1) CHECK OUT STATUS @V407438 00690000
BC 2,*-4 BUSY, KEEP TRYING. @V407438 00691000
BC 8+1,NEXTDEV CLEAN OR NOT THERE, CONTINUE @V407438 00692000
B TSTUC CC=1, GO CHECK STATUS & CONT. @V407438 00693000
SPACE 00694000
TESTTERM TM RDEVTYPC,CLASGRAF+CLASTERM GRAPHICS OR TERM ?? @V200829 00695000
BZ NONTERM NO -- @V200829 00696000
TM RDEVSTAT,RDEVDED DEDICATED DEVICE ? @VM08748 00697000
BO TERMHIO YES - GO HALT IT @VM08748 00698000
TM RDEVFLAG,RDEVDISB LINE DISABLED @V200829 00699000
BO TERMHIO YES -- GO HALT IT @VM08748 00700000
TM RDEVFLAG,RDEVENAB LINE ENABLED @V200829 00701000
BZ TERMHIO NO -- HALT IT @VM08748 00702000
STH R1,0(R14) SAVE ENABLED DEVICE ADDRESS @V200829 00703000
A R14,=F'2' ADJUST BUFFER ADDRESS @V200829 00704000
SPACE 00705000
CLI RDEVTYPC,CLASTERM TERMINAL CLASS ? @VM08748 00706000
BNE TERMHIO NO -- @VM08748 00707000
CLI RDEVTYPE,TYP3210 3210 TYPE ? @VM08748 00708000
BE NONTERM YES -- HALT AND DRAIN IO @VM08748 00709000
SPACE 00710000
TERMHIO EQU * HERE TO HALT TERMINAL DEVICES @VM08748 00711000
L R8,SAVERDEV RESTORE RDEVBLOK ADDRESS @VM08748 00712000
HIO 0(R1) HALT IO @VM08748 00713000
B NEXTDEV GO PROCESS NEXT DEVICE @VM08748 00714000
SPACE 00715000
NONTERM EQU * NON-TERMINAL HALT IO @V2A2029 00716000
LA R15,1000 MAX LOOP VALUE @V2A2029 00717000
HIOLP BCT R15,*+8 BRANCH IF COUNT NOT ZERO @V2A2029 00718000
B NEXTDEV GO PROCESS NEXT DEVICE @V2A2029 00719000
SSM ENABLE ALLOW INTERRUPTS @V2A2029 00720000
L R8,SAVERDEV RESTORE RDEVBLOK ADDRESS @V2A2029 00721000
SSM DISABLE DO NOT ALLOW INTERRUPTS @V2A2029 00722000
L R5,RDEVAIOB GET ACTIVE IOB.... @VA03547 00723000
LTR R5,R5 ...IF ANY. @VA03547 00724000
BZ NEXTDEV IF NONE, SKIP HIO. @VA03547 00725000
HIO 0(R1) HALT IO @V2A2029 00726000
BC 2,HIOLP CC=2, BURST OR HALTED @V2A2029 00727000
BC 1,NEXTDEV CC=3, NOT OPERATIONAL @V2A2029 00728000
NONTIO CLI RDEVTYPC,CLASGRAF IS THIS A GRAPHIC DEVICE. 00729000
BNE NONGRAF NO - CLEAR ANY INTERRUPTS THAT MAY BE PENDING 00730000
TM RDEVTYPE,TYP3277+TYP3278+TYP3284 3270 FAMILY? @V60A6B6 00731000
BNZ NEXTDEV YES - BYPASS HANG CONDITION IN TIO LOOP 00732000
NONGRAF TIO 0(R1) CLEAR ANY OUTSTANDING STATUS 00733000
BC 2,HIOLP CC=2, CHANNEL OR SUBCHANNEL BUSY @V2A2029 00734000
BC 1,NEXTDEV NOT OPER. @VA03547 00735000
BC 4,TSTUC CSW STORED @VA03547 00736000
TM RDEVTYPC,CLASTAPE+CLASDASD IS IT TAPE OR DASD? @VA03547 00737000
BNZ SNSIO YES, DO A SENSE THEN. @VA03547 00738000
B NEXTDEV NO, TRY THE NEXT ONE. @VA03547 00739000
TSTUC TM CSW+4,UC UNIT CHECK? @VA03547 00740000
BZ NEXTDEV NO - @VA03547 00741000
SNSIO SIO 0(R1) START I/O SENSE OPERATION. @VA03547 00742000
SSM ENABLE @V2A2029 00743000
SPACE 00744000
NEXTDEV LA R5,30 LENGTH OF TABLE 00745000
SSM DISABLE @V2A2029 00746000
BXLE R2,R4,DEVINDEX CONTINUE WITH NEXT DEVICE ON CU 00747000
NEXTCU LA R5,62 LENGTH OF TABLE 00748000
BXLE R3,R4,CUINDEX CONTINUE WITH NEXT CU ON CHANNEL 00749000
NEXTCH LA R5,30 RESET TABLE LENGTH 00750000
NEXTCHNL AR R9,R4 POINT TO NEXT CHANNEL INDEX ENTRY@VA03683 00751000
LH R6,0(,R9) GET NEXT CHANNEL INDEX @VA03683 00752000
LTR R6,R6 IS THERE ONE ? @VA03683 00753000
BM NEXTCHNL NO IF MINUS, CHECK NEXT @VA03683 00754000
BCT R10,CHINDEX AND CONTINUE WITH NEXT CHANNEL ON 00755000
* SYSTEM 00756000
MVC 0(4,R14),X8FF END THE BUFFER WITH FFS @V2A2029 00757000
ST R14,TERMEND SAVE ADDRESS OF BUFFER END @V200829 00758000
B RDWRMCLK CONTINUE... @V407438 00759000
SPACE 3 00760000
* HANDLE ALL I/O INTERRUPTS FROM ENABLE/DISBABLE 00761000
* SEQUENCES. EXAMINE CSW FOR UC. IF PRESENT ISSUE 00762000
* A SENSE, OTHERWISE CONTINUE BY LOADING FROM I/O OLD 00763000
* PSW, THUS RE-ENABLING AND DRAINING ALL PENDING INTS. 00764000
SPACE 00765000
CHKIOINT TM CSW+4,UC DID INT COME WITH UC? @V407438 00766000
BO *+8 YES, MUST ISSUE SENSE @V407438 00767000
LPSW IOOPSW NOPE, RETURN TO PRE-INT STATE @V407438 00768000
ST R3,CHKIOSAV SAVE REG @VA08695 00769000
LA R3,SNSECCW GET THE SENSE CCW @VA08169 00770000
ST R3,CAW INSURE CCW IS SET UP @VA08169 00771000
LH R3,INTTIO GET THE INTERRUPTING DEV ADDR @VA08169 00772000
SIO 0(R3) ISSUE SENSE TO IT @VA08169 00773000
BC 2,*-4 BETTER NOT BE BUSY @V407438 00774000
L R3,CHKIOSAV RESTORE REG @VA08695 00775000
LPSW IOOPSW RETURN TO PRE-INT STATE @V407438 00776000
CHKIOSAV DS F SAVEAREA @VA08695 00777000
EJECT 00778000
************************************************* 00779000
* 00780000
* READ RECORD ONE OF WARM-START CYLINDER OF THE IPL VOLUME AND 00781000
* COMPARE THE CLOCK VALUE WRITTEN BY PREVIOUS COLD OR 00782000
* WARM START AGAINST THE IN STORAGE CLOCK VALUE SAVED IN 00783000
* DMKRSPCV. IF THE CLOCK VALUES DO NOT AGREE; (1) THE 00784000
* IPL VOLUME IS NOT THE CORRECT VOLUME TO CHECKPOINT 00785000
* THE IN STORAGE SYSTEM. (2) THE WARM-START CYLINDER HAS 00786000
* BEEN ALTERED SINCE LAST COLD OR WARM START. 00787000
* 00788000
************************************************* 00789000
SPACE 00790000
RDWRMCLK L R10,DMKSYSWM POINTER TO WARM-START CYL @V407438 00791000
MVC CYLSTART(4),0(R10) GET START AND END CYLINDER @V2A2029 00792000
MVC SEEK+2(2),0(R10) PUT CYL ADDRESS IN SEARCH CCW @V2A2029 00793000
MVI PAGECYL,57 PAGES/CYL FOR 3330 @V2A2029 00794000
CLI TYPE,TYP3330 SYSRES A 3330 ? @V2A2029 00795000
BE SETSIZE YES - @V2A2029 00796000
MVI PAGECYL,120 PAGES/CYL FOR 3350 @V304498 00797000
CLI TYPE,TYP3350 SYSRES A 3350 ? @V304498 00798000
BE SETSIZE YES - @V304498 00799000
MVI PAGECYL,96 Pages/cyl for 3375 HRC106DK 00799100
CLI TYPE,TYP3375 Sysres a 3375 HRC106DK 00799200
BE SETSIZE Yes - HRC106DK 00799300
MVI PAGECYL,150 Pages/cyl for 3380 HRC106DK 00799400
CLI TYPE,TYP3380 Sysres a 3380 HRC106DK 00799500
BE SETSIZE Yes - HRC106DK 00799600
MVI PAGECYL,32 PAGES/CYL FOR 2314 TYPE @V2A2029 00800000
CLI TYPE,TYP2314 IS IT A 2314 TYPE ? @V2A2029 00801000
BE SETSIZE YES - @V2A2029 00802000
MVI PAGECYL,24 PAGES/CYL FOR 2305 AND 3340 @V2A2029 00803000
SETSIZE MVI SIZE+1,80 SET RECORD SIZE TO 80 @V2A2029 00804000
BAL R14,RDWR READ RECORD ONE OF WRM-CYL @V2A2029 00805000
CLC DMKRSPCV(8),BUFFCV IS THIS THE CORRECT VOLUME AND CYL ? 00806000
BNE MSG910W NO -- MIGHT BE WRONG VOLUME @V2A2029 00807000
MVI DSK05,X'05' CHANGE CCWS TO WRITE STATUS 00808000
LA R0,RECBUFF SET BUFFER TO FFS @V2A2029 00809000
L R1,=F'4096' .. LENGTH @V2A2029 00810000
SR R2,R2 .. @V2A2029 00811000
SR R3,R3 .. @V2A2029 00812000
ICM R3,B'1000',X8FF .. @V2A2029 00813000
MVCL R0,R2 MOVE LONG @V2A2029 00814000
SPACE 00815000
EJECT 00816000
**************************************** 00817000
* 00818000
* WRITE DISK RECORD ONE - ZERO-FIRST 8 BYTES 00819000
* 00820000
**************************************** 00821000
SPACE 00822000
MVC HASH(6),STARTIME INSERT UNIQUE NUMBER 00823000
BAL R14,PUTDLM OUTPUT DELIMITER RECORD @V2A2029 00824000
XC RECBUFF(8),RECBUFF ZERO FIRST 8 BYTES OF RECORD ONE 00825000
MVC BUFFCV(8),DMKRSPCV PUT CLOCK VALUE BACK IN RECORD ONE 00826000
SPACE 00827000
*************************************** 00828000
* 00829000
* SAVE REAL DEVICE ADDRESS OF ENABLED TERMINAL DEVICES 00830000
* 00831000
*************************************** 00832000
SPACE 00833000
* CLC CPID(4),CWARM SYSTEM RESTARTING ?? HRC032DK 00834590
* BNE TERMCLOS NO -- DO NOT RECORD HRC032DK 00835180
L R3,TERMBUFF ADDRESS OF TERMINAL BUFFER @V200829 00836000
B CMPEND ANY DATA IN BUFFER @V200829 00837000
TERMPUT BAL R14,PUTREC INSERT 40 ADDRESSES (80BYTES) @V200829 00838000
LA R3,80(,R3) UPDATE TERM BUFFER ADDRESS @V2A2029 00839000
CMPEND CL R3,TERMEND ARE WE DONE ? @V200829 00840000
BNH TERMPUT NO -- KEEP GOING @V200829 00841000
TERMCLOS BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 00842000
SPACE 00843000
**************************************** 00844000
* 00845000
* SAVE ACCOUNTING INFORMATION FOR ACTIVE USERS 00846000
* 00847000
**************************************** 00848000
SPACE 00849000
USING VDEVBLOK,R8 00850000
SPACE 00851000
L R15,DMKTMRPT MAKE SURE V(DMKTMRPT) IS THE 00852000
L R15,=V(DMKTMRPT) ADDRESS OF THE IN STORAGE SYSTEM 00853000
ORG *-4 00854000
DC X'50' ST R15,=V(DMKTMRPT) 00855000
ORG 00856000
SPACE 00857000
L R10,ASYSLC POINT TO SYSLOCS INFORMATION 00858000
L R3,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 00859000
ICM R3,B'1111',0(R3) NUMBER OF PUNCHES EQUAL ZERO ??? 00860000
BNZ *+8 NO -- 00861000
OI ACNTSW,X'80' INDICATE ZERO SYSTEM PUNCHES 00862000
ICM R11,B'1111',DMKSYSCK CLOCK VALUE ZERO ?? 00863000
BNZ CLOCKOK NO -- CLOCK GOOD 00864000
STCK DMKSYSCK SET DMKSYSCK TO CURRENT VALUE 00865000
BZ *+8 CLOCK SET - GOOD 00866000
OI ACNTSW,X'40' INDICATE CLOCK SET ERROR 00867000
CLOCKOK L R11,ASYSVM ADDRESS OF SYSTEM VMBLOK 00868000
ICM R11,B'1111',VMPNT ADDRESS VMBLOK IN CYCLIC CHAIN 00869000
BZ ACTCHAIN NO USERS ON SYSTEM 00870000
ST R11,STUSER SAVE ADDRESS OF FIRST USER 00871000
NXTLOOP TM VMRSTAT,VMLOGON IS USER LOGGING ON ?? 00872000
BO UNXT YES, DONT SAVE 00873000
SR R1,R1 ZERO INDEX FOR CHANNEL 00874000
LA R4,2 LOAD INCREMENT REG 00875000
LA R5,30 LOAD END OF TABLES 00876000
CKPANCH LH R6,VMCHTBL(R1) NEXT CHANNEL INDEX 00877000
LTR R6,R6 DOES THIS CHAN. EXIST ? 00878000
BM CKPACHI NO - TRY NEXT CHAN. 00879000
A R6,VMCHSTRT ADDRESS OF VCHBLOK TO R6 00880000
USING VCHBLOK,R6 00881000
SR R2,R2 ZERO INDEX FOR CONTROL UNITS 00882000
CKPANCU LH R7,VCHCUTBL(R2) LOAD NEXT CONTROL UNIT 00883000
LTR R7,R7 DOES IT EXIST ? 00884000
BM CKPACUI NO - GO TRY NEXT 00885000
A R7,VMCUSTRT ADDRESS OF VMCUBLOK 00886000
USING VCUBLOK,R7 00887000
SR R3,R3 ZERO INDEX FOR DEVICES 00888000
CKPANDEV LH R8,VCUDVTBL(R3) GET NEXT DEVICE 00889000
LTR R8,R8 DOES IT EXIST ? 00890000
BM CKPADEVI NO - GO TRY NEXT 00891000
A R8,VMDVSTRT ADDRESS OF VMDEVBLOK 00892000
USING VDEVBLOK,R8 00893000
TM VDEVSTAT,VDEVDED IS THIS A DEDICATED DEVICE ? 00894000
BO CKPACALL BRANCH IF IT IS 00895000
CLI VDEVTYPC,CLASDASD IS THIS A DASD DEVICE ?? 00896000
BE TSTTDSK YES -- TEST FOR T DISK 00897000
CLI VDEVTYPC,CLASTERM CONSOLE CLASS TYPE 00898000
BNE CKURO NO -- CHECK OUTPUT UNIT RECORD 00899000
CLI VDEVTYPE,TYP3210 CONSOLE TYPE ? 00900000
BNE CKPADEVI NO -- GET NEXT DEVICE 00901000
B SAVEFILE YES-CHECK FOR ACTIVE SPOOL FILE 00902000
CKURO CLI VDEVTYPC,CLASURO OUTPUT UNIT RECORD TYPE ? 00903000
BNE CKPADEVI NO -- GET NEXT DEVICE 00904000
TM VDEVTYPE,TYPPUN+TYPPRT PUNCH OR PRINTER ?? 00905000
BZ CKPADEVI NO -- GET NEXT DEVICE 00906000
SAVEFILE ICM R14,B'1111',VDEVSPL OPEN SPOOL FILE ? 00907000
BZ CKPADEVI NO -- GET NEXT DEVICE 00908000
XC VDEVSPL(4),VDEVSPL CLEAR ACTIVE POINTER 00909000
ICM R14,B'1111',VSPSFBLK-VSPLCTL(R14) SFBLOK PRESENT ?? 00910000
BZ CKPADEVI NO -- GET NEXT DEVICE 00911000
CLC SFBORIG-SFBLOK(8,R14),VMUSER VALID SFBLOK ? @V2A2029 00912000
BNE CKPADEVI NO, GET NEXT DEVICE @V2A2029 00913000
CLC SFBPNT-SFBLOK(4,R14),=X'00000000' ANY BUFFERS WRITTEN ? 00914000
BE DELFILE NO -- START AND LAST CORRECT 00915000
OI SFBFLAG2-SFBLOK(R14),SFBFIRST INDICATE 1ST @VA03437 00916000
* PAGE WRITTEN 00917000
MVC SFBLAST-SFBLOK(4,R14),SFBPNT-SFBLOK(R14) LAST BUFFER 00918000
* WRITTEN 00919000
CLI VDEVTYPE,TYP3210 SPOOLED CONSOLE DEVICE @VA11232 00919100
BE CONFILE YES @VA11232 00919600
DELFILE DS 0H @VA07846 00922000
OI SFBFLAG2-SFBLOK(R14),SFBPURGE OPEN FILE @VA07159 00923000
MVC SFBPNT-SFBLOK(4,R14),DMKRSPDL CHAIN TO DELETE CHAIN 00924000
ST R14,DMKRSPDL .. 00925000
B CKPADEVI GET NEXT DEVICE 00926000
CONFILE MVC SFBCLAS-SFBLOK(1,R14),VDEVCLAS SET UP FILE CLASS 00927000
CLI SFBDIST-SFBLOK(R14),C' ' DIST CODE IN SFBLOK ?? 00928000
BH *+10 YES -- 00929000
MVC SFBDIST-SFBLOK(8,R14),VMDIST MOVE IN DISTRIBUTION CODE 00930000
MVC SFBCOPY-SFBLOK(2,R14),VDEVCOPY MOVE IN NUMBER OF COPIES 00931000
LA R15,DMKRSPPR ADDRESS OF PRINTER FILE CHAIN 00935000
TM VDEVSFLG,VDEVXFER SPOOL TO USERID ?? 00936000
BZ CHAINSFB NO - CHAIN SPOOL FILE ON PRT CHAIN 00937000
LA R15,DMKRSPRD ADDRESS OF READER CHAIN 00938000
L R9,VDEVEXTN XBLOK ADDRESS @V293598 00939000
* XFER USERID 00940000
MVC SFBUSER-SFBLOK(8,R14),VSPXXUSR-VSPXBLOK(R9) @V293598 00941000
CHAINSFB MVC SFBPNT-SFBLOK(4,R14),0(R15) CHAIN FIRST 00942000
ST R14,0(R15) ON SPOOL FILE CHAIN 00943000
B CKPADEVI GET NEXT DEVICE 00944000
TSTTDSK TM VDEVFLAG,VDEVTDSK 'T' DISK ??? 00945000
BZ CKPADEVI NO - GO GET NEXT DEVICE 00946000
SPACE 00947000
CKPACALL EQU * 00948000
TM ACNTSW,X'C0' ZERO PUNCHES AND/OR CLOCK ERROR 00949000
BNZ CKPADEVI YES -- 00950000
STM R1,R8,CKPSAVE SAVE THE POINTERS FOR V DEV LOOP 00951000
OI ACNTSW,X'20' INDICATE ACNT CALULATING @V2A2029 00952000
MVI ACBUFF,C' ' * BLANK THE ACCOUNTING BUFFER 00953000
MVC ACBUFF+1(79),ACBUFF * 00954000
LA R4,ACBUFF-(ACNTDATA-ACNTBLOK) POINT TO DATA AREA 00955000
BAL R5,DEVCARD GO FILL IN THE DEVICE CARD 00956000
LA R3,ACBUFF POINT TO THE BUFFER JUST BUILT 00957000
BAL R14,PUTREC GO PUT IT 00958000
LM R1,R8,CKPSAVE LOOK AT THE REST OF THE VDEVBLOK 00959000
NI ACNTSW,X'FF'-X'20' RESET ACNT CAL SWITCH @V2A2029 00960000
CKPADEVI BXLE R3,R4,CKPANDEV 00961000
CKPACUI BXLE R2,R4,CKPANCU 00962000
CKPACHI BXLE R1,R4,CKPANCH 00963000
SPACE 00964000
* WHEN FALL THRU - HAVE SCANNED ALL DEVICES FOR THIS USER 00965000
SPACE 00966000
TM ACNTSW,X'C0' ZERO PUNCHES AND/OR CLOCK ERROR 00967000
BNZ UNXT YES -- GET NEXT USER 00968000
STM R1,R8,CKPSAVE SAVE REGS FOR V DEV LOOP @V2A2029 00969000
OI ACNTSW,X'20' INDICATE ACNT CALULATING @V2A2029 00970000
MVI ACBUFF,C' ' * CLEAR THE BUFFER 00971000
MVC ACBUFF+1(79),ACBUFF * 00972000
LA R4,ACBUFF-(ACNTDATA-ACNTBLOK) POINT TO THE DATA AREA 00973000
BAL R5,USERCARD GO FILL IN THE USER ACCOUNTING CARD 00974000
LA R3,ACBUFF POINT TO THE DATA AREA 00975000
BAL R14,PUTREC RECORD 00976000
LM R1,R8,CKPSAVE RESTORE REGS FOR V DEV LOOP @V2A2029 00977000
UNXT NI ACNTSW,X'FF'-X'20' RESET ACNT CAL SWITCH @V2A2029 00978000
L R11,VMPNT POINT TO NEXT VMBLOK @V2A2029 00979000
C R11,STUSER IS THIS THE FIRST ONE ?? 00980000
BNE NXTLOOP DO NEXT 00981000
SPACE 2 00982000
**************************************** 00983000
* 00984000
* SAVE CHAIN ACCOUNTING CARDS 00985000
* 00986000
**************************************** 00987000
SPACE 00988000
ACTCHAIN L R4,DMKRSPAC POINT TO FIRST ACCOUNTING CARD 00989000
TM ACNTSW,X'80' ANY SYSTEM PUNCHES ?? 00990000
BO DLM2 NO -- SKIP ACCOUNTING DATA 00991000
ACTNEXT LTR R4,R4 ANY CARDS 00992000
BZ ACTACNT NO- BRANCH 00993000
CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 00994000
BNL ACTACNT NO - GO TO NEXT ROUTINE @VA02884 00995000
LA R3,ACNTDATA POINT TO THE ACCOUNTING DATA 00996000
BAL R14,PUTREC AND PUT IT OUT 00997000
LR R15,R4 SAVE ADDRESS OF LAST BLOK 00998000
ICM R4,7,ACNTNEXT+1 GET ADD FRON THE TIC OF NEXT REC 00999000
B ACTNEXT GET NEXT ACNTBLOK 01000000
EJECT 01001000
*************************************** 01002000
* 01003000
* INPUT FROM THE ACCTOFF COPY FILE 01004000
* 01005000
*************************************** 01006000
SPACE 01007000
COPY ACCTOFF 01008000
DROP R4,R8 01009000
USING ACNTBLOK,R4 @VM08853 01010000
USING RDEVBLOK,R8 01011000
SPACE 01012000
**************************************** 01013000
* 01014000
* SAVE ACTIVE ACCOUNTING CARDS NOT PUNCH 01015000
* 01016000
**************************************** 01017000
SPACE 01018000
ACTACNT EQU * HERE TO SAVE ANY ACTIVE ACCOUNTING CHAINS 01019000
L R5,ARIOPU GET ADDRESS OF SYSTEM PUNCH TABLE 01020000
L R6,0(,R5) GET NUMBER OF ENTIES IN THE TABLE 01021000
LTR R6,R6 ANY PUNCHES PRESENT ?? 01022000
BZ DLM2 NO -- 01023000
ACTINDEX LA R5,4(,R5) POINT TO NEXT TABLE ENTRY 01024000
LH R8,0(,R5) GET INDEX TO RDEVBLOK FOR PUNCH 01025000
SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01026000
A R8,ARIODV POINT TO RDEVBLOK FOR PUNCH 01027000
TM RDEVFLAG,RDEVACNT WAS PUNCH BUSY WITH ACCOUNTING 01028000
BZ ACTNXT2 NO -- 01029000
ICM R4,B'1111',RDEVSPL ACCOUNTING INFO PRESENT ? @V2A2029 01030000
BZ ACTNXT2 NO -- 01031000
CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01032000
BNL ACTNXT2 NO - DO NEXT DEVICE @VA02884 01033000
PUTACNT LA R3,ACNTDATA POINT TO DATA TO BE SAVED 01034000
L R4,ACNTNEXT POINT TO NEXT ACNTBLOK ON CHAIN @VM08853 01035000
LA R4,0(,R4) CLEAR TIC OP-CODE @VA02884 01036000
CL R4,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01037000
BNL ACTNXT2 NO - DO NEXT DEVICE @VA02884 01038000
CLI ACNTCCW,4 IS NEXT CCW A SENSE ?? 01039000
BE ACTNXT2 @VA01578 01040000
BAL R14,PUTREC WRITE RECORD TO DASD @VA01578 01041000
B PUTACNT CONTINUE SAVING CARD @VA01578 01042000
SPACE 01043000
ACTNXT2 BCT R6,ACTINDEX POINT TO NEXT PUNCH IN SYSTEM 01044000
SPACE 01045000
**************************************** 01046000
* 01047000
* WRITE SECOND DELIMITER RECORD 01048000
* 01049000
**************************************** 01050000
DLM2 BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01051000
SPACE 01052000
**************************************** 01053000
* 01054000
* SAVE SYSTEM LOG MESSAGES 01055000
* 01056000
**************************************** 01057000
SPACE 01058000
L R3,DMKSYSLG GET THE PTR TO THE SYSTEM LOG MSG 01059000
LOGNXT LTR R5,R3 IS THERE ONE ?? 01060000
BZ LOGEND NO @VA02884 01061000
CL R5,STORSIZE ADDRESS WITHIN REAL STORAGE ? @VA02884 01062000
BNL LOGEND NO - DO NEXT ROUTINE @VA02884 01063000
LH R2,6(R5) PICK UP SEQ NUMBER @VA09139 01063100
CH R2,SEQNO GET SAVED SEQUENCE NUMBER @VA09139 01063200
BNE LOGEND NO - BAD LOG MSG CHAIN @VA09139 01063300
LA R2,1(,R2) BUMP SEQ NUMBER @VA09139 01063400
STH R2,SEQNO AND SAVE FOR NEXT TIME THROUGH @VA09139 01063500
LA R3,4(,R3) POINT TO MESSAGE TEXT 01064000
BAL R14,PUTREC SAVE LOGMSG 01065000
L R3,0(R5) POINT TO NEXT LOG MSG 01066000
B LOGNXT GET NEXT LOG MESSAGE 01067000
SEQNO DC H'1' INITIALIZE SEQ NUMBER TO ONE @VA09139 01067500
EJECT 01068000
**************************************** 01069000
* 01070000
* WRITE THIRD DELIMITER RECORD 01071000
* 01072000
**************************************** 01073000
SPACE 01074000
LOGEND MVC DLMREC+16(28),DMKSYSDT MOVE DATE,TIME AND DAY @V2A2029 01075000
* DMKSYSDT, DMKSYSTM AND DMKSYSLW 01076000
BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01077000
MVC 16(28,R3),45(R3) RESET AREA TO FFS 01078000
CLC INDEX,=AL2(4096-8-SPSFBSZ*8) WILL FIRST SFBLOK @VA12228 01079000
* FIT (EXPANDED FOR VM/SP) @VA12228 01080000
BNH *+8 YES - @V2A2029 01081000
BAL R14,CLOSE .. 01082000
SPACE 2 01083000
*********************************************************************** 01084000
* 01085000
* SAVE SPOOLING BLOCKS 01086000
* 01087000
*********************************************************************** 01088000
SPACE 01089000
USING SFBLOK,R3 01090000
MVI SIZE+1,SPSFBSZ*8 SIZE OF ONE SFBLOK (VM/SP) @VA12228 01091000
SPACE 01092000
**************************************** 01093000
* 01094000
* SAVE SYSTEM PRINTER ACTIVE FILES 01095000
* 01096000
**************************************** 01097000
SPACE 01098000
L R5,ARIOPR POINT TO LIST OF SYSTEM PRINTERS 01099000
BAL R10,CHACT SAVE ACTIVE FILES 01100000
SPACE 01101000
**************************************** 01102000
* 01103000
* SAVE PRINTER CLOSED FILES 01104000
* 01105000
**************************************** 01106000
SPACE 01107000
SR R15,R15 INIT BRANCH INDEX @V2A2029 01108000
LA R3,DMKRSPPR POINT TO CHAIN OF CLOSED PRINTER 01109000
* FILES 01110000
SPACE 01111000
**************************************** 01112000
* 01113000
* CHAIN SCAN, MOVE AND PUT LOOP 01114000
* 01115000
**************************************** 01116000
SPACE 01117000
CHK01 ICM R3,B'1111',0(R3) FIRST OR NEXT FILE ADDRESS @V2A2029 01118000
BZ NXTFILE BRANCH IF END OF CHAIN @V2A2029 01119000
SR R14,R14 CLEAR REG 01120000
RECCLR STCM R14,B'1111',SFBRECS CLEAR SFBRECS POINTER @V2A2029 01121000
BAL R14,PUTREC OUTPUT 01122000
B CHK01 LOOP 01123000
SPACE 2 01124000
**************************************** 01125000
* 01126000
* SAVE ACTIVE PUNCH FILES 01127000
* 01128000
**************************************** 01129000
SPACE 01130000
CHK02 L R5,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 01131000
BAL R10,CHACT SAVE ACTIVE FILES 01132000
SPACE 01133000
**************************************** 01134000
* 01135000
* SAVE CLOSED PUNCH FILES 01136000
* 01137000
**************************************** 01138000
SPACE 01139000
LA R3,DMKRSPPU POINT TO CHAIN OF CLOSED PUNCH FILES 01140000
B CHK01 SAVE ENTRIES 01141000
SPACE 01142000
**************************************** 01143000
* 01144000
* SAVE READER STATUS 01145000
* 01146000
**************************************** 01147000
SPACE 01148000
CHK03 L R5,ARIORD POINT TO LIST OF SYSTEM READERS 01149000
BAL R10,CHACT SAVE READER STATUS 01150000
SPACE 01151000
**************************************** 01152000
* 01153000
* SAVE CLOSED READER FILES 01154000
* 01155000
**************************************** 01156000
SPACE 01157000
LA R3,DMKRSPRD POINT TO CHAIN OF CLOSED READER 01158000
* FILES 01159000
LABXXX ICM R3,B'1111',0(R3) FIRST OR NEXT FILE ADDRESS @V50A2B5 01160000
BZ LABXX FINISHED @V50A2B5 01161000
SR R14,R14 CLEAR REGISTER @V50A2B5 01162000
STCM R14,B'1111',SFBRECS CLEAR SFBRECS POINTER @V50A2B5 01163000
BAL R14,PUTREC OUTPUT @V50A2B5 01164000
B LABXXX @V50A2B5 01165000
SPACE 01166000
**************************************** 01167000
* 01168000
* SAVE MONITOR SPOOL FILE IF OPEN 01169000
* 01170000
**************************************** 01171000
SPACE 01172000
LABXX L R3,DMKRSPMN GET OPEN MONITOR FILE @V50A2B5 01173000
LTR R3,R3 IF IT EXISTS @V50A2B5 01174000
BZ NXTFILE @V50A2B5 01175000
CLC SFBDIST,=C' ' FILE ALREADY CLEANED UP @VA07888 01176000
BE YESGOOD YES DON'T TRY IT AGAIN @VA07888 01177000
L R1,TERMBUFF MAKE A COPY OF SFBLOK @V50A2B5 01178000
MVC 0(8*SFBSIZE,R1),0(R3) DO THE COPY @V50A2B5 01179000
OI SFBFLAG2-SFBLOK(R1),SFBPURGE TURN ON PURGE BIT @V50A2B5 01180000
CLC SFBSTART(4),=X'00000000' IS THE START 0 @V50A2B5 01181000
BE NXTFILE YES, DO NOT BOTHER WITH IT @V50A2B5 01182000
OI FLAG,CKPMDL SHOW WE USE COPY @V50A2B5 01183000
CLC SFBPNT(4),=X'00000000' NULL FILE? @V50A2B5 01184000
BE NXTFILE YES, DO NOT BOTHER WITH IT @V50A2B5 01185000
CLC SFBPNT(4),SFBLAST IS THIS A GOOD FILE? @V50A2B5 01186000
BE YESGOOD YES IT IS @V50A2B5 01187000
MVC SFBFILID-SFBLOK(2,R1),=H'9999' COPY'S OWN ID @VA07888 01188000
MVC SFBLAST(4),SFBPNT SET LAST CORRECTLY @V50A2B5 01189000
CLC SFBLAST(4),SFBDIST ONE OR TWO BAD BUFFERS @V50A2B5 01190000
BNE TWOBAD @V50A2B5 01191000
DROP R3 01192000
USING SFBLOK,R1 01193000
MVC SFBSTART(4),SFBDIST+4 SET DUMMY SFB @VA07888 01194000
* TO POINT TO THE ONLY SLOT TO BE RELEASED BY DMKSPLDL 01195000
B ONEBAD @V50A2B5 01196000
TWOBAD MVC SFBSTART(4),SFBDIST SET DUMMY SFB PT @VA07888 01197000
* TO THE FIRST OF TWO SLOTS TO BE RELEASED BY SPLDL 01198000
DROP R1 01199000
USING SFBLOK,R3 01200000
ONEBAD MVC SFBDIST(8),=C' ' BLANK OUT DIST FIELD @V50A2B5 01201000
BAL R14,PUTREC PUT OUT THE FILE @V50A2B5 01202000
B NXTFILE AND CONTINUE @V50A2B5 01203000
YESGOOD NI FLAG,X'FF'-CKPMDL TURN OFF FLAG @V50A2B5 01204000
B ONEBAD CONTINUE @V50A2B5 01205000
SPACE 1 01206000
**************************************** 01207000
* 01208000
* SAVE DELETE FILES 01209000
* 01210000
**************************************** 01211000
SPACE 01212000
* ROUTINE TO MOVE ENTRIES ON 'INCOMPLETE DUMP' CHAIN TO DELETE 01212100
CHK04 DS 0H @V67CAH7 01212200
ICM R3,B'1111',DMKRSPDP POINTER TO DUMPS IN PRC @V67CAH7 01212300
BZ CHK041 NO DUMPS..SKIP LOGIC @V67CAH7 01212400
* NOW ADD DUMPS IN PROCESS TO DELETE CHAIN 01212500
GETNEXT DS 0H @V67CAH7 01212600
LR R14,R3 SAVE LAST POINTER @V67CAH7 01212700
ICM R3,B'1111',SFBPNT-SFBLOK(R14) FORWARD POINTER @V67CAH7 01212800
BNZ GETNEXT MORE SFBLOKS...BRANCH @V67CAH7 01212900
* R14 NOW HAS LAST SFBLOK POINTER ON DUMP CHAIN 01213000
L R3,DMKRSPDL ADDRESS OF DELETE @V67CAH7 01213100
* CHAINS FIRST SFBLOK POINTER 01213200
ST R3,SFBPNT-SFBLOK(,R14) PUT FULL DUMP CHAIN IN @V67CAH7 01213300
* FRONT OF DELETE CHAIN 01213400
* THE DUMP CHAIN NOW HAS IT'S DUMP SFBLOKS FOLLOWED BY 01213500
* THE DELETE CHAIN'S SFBLOK 01213600
* *** NOW ATTACH FULL CHAIN TO DELETE ANCHOR 01213700
L R14,DMKRSPDP GET POINTER TO DUMP @V67CAH7 01213800
* CHAINS FIRST SFBLOK 01213900
ST R14,DMKRSPDL MOVE TO DELETE ANCHOR @V67CAH7 01214000
* NOW BOTH DUMP AND DELETE SFBLOKS ARE ON DELETE CHAIN 01214100
CHK041 DS 0H @V67CAH7 01214200
MVC DLMREC+16(2),DMKRSPID SAVE ID COUNTER IN @V67CAH7 01214300
* DELIMITER RECORD 01214400
TM FLAG,CKPMDL SEE IF VALID COPY EXISTS@V50A2B5 01215000
BNO CHK04A FILE EXISTS @V50A2B5 01216000
L R3,TERMBUFF YES, THEN PUT IT @V50A2B5 01217000
BAL R14,PUTREC ON WARM CYLINDER @V50A2B5 01218000
CHK04A EQU * @V50A2B5 01219000
LA R3,DMKRSPDL CHAIN OF SYSTEM DELETE FILES@VA07888 01220000
B CHK01 SAVE ENTRIES 01221000
SPACE 01222000
**************************************** 01223000
* 01224000
* SAVE ALLOCATION RECORDS 01225000
* 01226000
**************************************** 01227000
SPACE 01228000
CHK05 CLC INDEX,=AL2(4096-8-SPRCSZ*8) WILL FIRST VM/SP @VA12228 01229000
* RECBLOK FIT 01230000
BNH *+8 YES -- @V2A2029 01231000
BAL R14,CLOSE .. 01232000
* RECORDS 01233000
MVC DLMREC+16(8),X8FF RESTORE AREA USED @V2A2029 01234000
MVI SIZE+1,SPRCSZ*8 SIZE OF ONE VM/SP RECBLOK @VA12228 01235000
SPACE 01236000
SPACE 01237000
USING OWNDLIST,R5 01238000
L R5,DMKSYSOW GET ADDRESS OF OWNLIST 01239000
L R4,DMKSYSOC POINTER TO NUMBER OF ENTRIES 01240000
L R4,0(R4) GET NUMBER OF ENTRIES IN LIST 01241000
OWNLP LH R8,OWNDRDEV DISPLACEMENT TO RDEVBLOK 01242000
LTR R8,R8 VOLUME MOUNTED ?? 01243000
BM NXTREC NO - NO NEED TO SAVE ALLOCATION 01244000
SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01245000
A R8,ARIODV POINT TO RDEVBLOK 01246000
USING RECBLOK,R7 01247000
L R7,RDEVRECS GET ADDRESS OF RECBLOK 01248000
RECLP LTR R7,R7 IS THERE ONE ?? 01249000
BNZ RECGOOD YES - 01250000
NXTREC EQU * 01251000
LA R5,8(R5) UPDATE TO NEXT OWNLIST 01252000
BCT R4,OWNLP DO NEXT BLOK 01253000
B NXTFILE 01254000
SPACE 01255000
RECGOOD L R6,RECPNT SAVE ADDRESS OF NEXT BLOK 01256000
LA R3,ALLOCBUF ADDRESS OF ALLOCATION OUTPUT BUFFER 01257000
MVC ALLOCBUF(8),RECPNT MOVE RECBLOK HEADER TO BUFFE@VA12228 01258000
MVC ALLOCBUF+8(8),ZEROES ZERO FLAG BYTE @VA12228 01258200
MVC ALLOCBUF+16(L'RECMAP),RECMAP Move RECBLOK map HRC106DK 01258500
LR R14,R5 ADDRESS OF CURRENT OWNDLIST ENTRY 01259000
S R14,DMKSYSOW GET DISPLACEMENT INTO OWNLIST 01260000
ST R14,ALLOCBUF SAVE FOR WARM START 01261000
LA R14,95 MAX CYLINDERS FOR 2305 01262000
TM RDEVTYPE,TYP2305 2305 ?? 01263000
BNO TST2319 NO- GO TEST FOR 2319-2314 01264000
CLI RDEVMDL,1 IS THIS A MOD 1 01265000
BNE CYLCMP NO- MUST BE A MOD 2 01266000
LA R14,47 SET UP FOR A 2305-1 01267000
B CYLCMP 01268000
TST2319 LA R14,202 MAX CYLINDERS FOR 2314,2319 01269000
TM RDEVTYPE,TYP2314 2314 ?? 01270000
BO CYLCMP YES -- 01271000
CLI RDEVTYPE,TYP3380 3380 device ? HRC106DK 01271100
BNE TST3375 No - check for 3375 HRC106DK 01271150
LA R14,2654 Max cylinder for 3380 (K) HRC106DK 01271200
TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 01271250
BO CYLCMP Check max cyl HRC106DK 01271300
LA R14,1769 Max cylinder for 3380 (E) HRC106DK 01271350
TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 01271400
BO CYLCMP Check max cyl HRC106DK 01271450
LA R14,884 Max cylinder for 3380 (A/D/J) HRC106DK 01271500
B CYLCMP Check max cyl HRC106DK 01271550
TST3375 LA R14,958 Max cylinder for 3375 HRC106DK 01271600
CLI RDEVTYPE,TYP3375 3375 device ? HRC106DK 01271650
BE CYLCMP Check max cyl HRC106DK 01271700
LA R14,554 MAX CYLINDERS FOR 3350 @V304498 01272000
CLI RDEVTYPE,TYP3350 3350 DEVICE ? @V304498 01273000
BE CYLCMP CHECK MAX CYL @V304498 01274000
LA R14,403 MAX CYLINDERS FOR 3330 01275000
CLI RDEVTYPE,TYP3340 3340 DEVICE ? @V2A2029 01276000
BNE TST3330 NO - CHECK FOR 3330 @V2A2029 01277000
LA R14,348 SET MAX CYL FOR 35MB (3340) @V2A2029 01278000
TM RDEVFTR,FTR35MB IS IT A 35MB DATA MODULE ? @V2A2029 01279000
BO CYLCMP BRANCH IF YES @V2A2029 01280000
LA R14,697 SET MAX CYL FOR 70MB (3340) @V2A2029 01281000
B CYLCMP CHECK MAX CYL @V2A2029 01282000
TST3330 EQU * HERE TO TEST FOR 3330 @V2A2029 01283000
TM RDEVTYPE,TYP3330 3330 TYPE @V200528 01284000
BZ MSG922W NO - INVALID DEVICE TYPE (DATA) @V305435 01285000
CLI RDEVMDL,11 IS THIS A MOD 11 @V200528 01286000
BNE CYLCMP NO- MUST BE A STANDARD 3330 @V200528 01287000
LA R14,807 SET UP MAX CYL FOR MOD 11 @V200528 01288000
CYLCMP CH R14,RECCYL RECCYL LARGER THAN MAX ?? 01289000
BL MSG922W YES - ALLOCATION BLOK ERROR @V305435 01290000
CLC RECUSED(1),RECMAX PAGES ALLOCATED LARGER THAN MAX ?? 01291000
BH MSG922W YES - ALLOCATION BLOK ERROR @V305435 01292000
BAL R14,PUTREC OUTPUT 01293000
LR R7,R6 UPDATE TO NEXT RECBLOK 01294000
B RECLP DO NEXT 01295000
SPACE 01296000
**************************************** 01297000
* 01298000
* SAVE SPOOL HOLD BLOCKS 01299000
* 01300000
**************************************** 01301000
SPACE 01302000
CHK06 DS 0H @VA05548 01303000
CLC INDEX,=AL2(4096-8-SHQBSIZE*8) WILL FIRST @VA05548 01304000
* SHQBLOK FIT 01305000
BNH *+8 YES - CONTINUE @VA05548 01306000
BAL R14,CLOSE WRITE BLOCK TO DASD FIELD @VA05548 01307000
MVI RECCLR+1,X'00' NOP STORE IN SFBRECS @VA05548 01308000
MVI SIZE+1,SHQBSIZE*8 SIZE OF ONE SHQBLOK @V2A2029 01309000
SPACE 01310000
LA R3,DMKRSPHQ POINTER TO CHAIN OF SYSTEM HOLD 01311000
* QUEUE 01312000
B CHK01 SAVE ENTRIES 01313000
SPACE 2 01314000
EJECT 01315000
***************************************************************** 01316000
* 01317000
* SUBROUTINES 01318000
* 01319000
***************************************************************** 01320000
SPACE 01321000
NXTFILE BAL R14,PUTDLM INSERT DELIMITER RECORD @V2A2029 01322000
LA R15,4(,R15) INDEX 01323000
NXTSP B NXTSP(R15) BRANCH ON TABLE 01324000
B CHK02 PUNCH 01325000
B CHK03 READERS 01326000
B CHK04 DELETE CHAIN 01327000
B CHK05 SPOOL RECORD ALLOCATION 01328000
B CHK06 SPOOL HOLD QUEUE BLOKS 01329000
B DONE ALL DONE 01330000
* 01331000
**************************************** 01332000
* 01333000
CHACT EQU * HERE TO PICK UP ACTIVE FILES CHAINED TO PRINTER/PUNCH 01334000
* 01335000
**************************************** 01336000
SPACE 01337000
SPACE 01338000
DROP R7 01339000
DROP R6 01340000
L R6,0(,R5) GET COUNT OF SYSTEM PRINTERS/PUNCHES 01341000
LTR R6,R6 ANY DEVICES PRESENT ?? 01342000
BCR 8,R10 NO -- RETURN TO CALLER 01343000
CHACTNDX LA R5,4(,R5) POINT TO NEXT INDEX ENTRY 01344000
XC ACBUFF(SFBSIZE*8),ACBUFF CLEAR WORK AREA TO ZEROES 01345000
LH R8,0(,R5) GET NEXT INDEX ENTRY 01346000
SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 01347000
A R8,ARIODV POINT TO RDEVBLOK 01348000
CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 01349000
BNE CHACT3 XFER IF NOT @V60B9BA 01350000
LA R3,ACBUFF USE ACCTING BUFFER TO BUILD @V60B9BA 01351000
* DUMMY SFBLOK @V60B9BA 01352000
MVC SFBDATE(8),=C'DUMMY BK' INDICATE DUMMY BLOK @V60B9BA 01353000
LH R0,RDEVADD GET REAL DEV ADDRESS @V60B9BA 01354000
L R14,RDEVCUA CONTROL BLOK ADDRESS @V60B9BA 01355000
USING RCUBLOK,R14 @V60B9BA 01356000
LH R2,RCUADD CONTROL UNIT ADDRESS @V60B9BA 01357000
OR R0,R2 COMBINE CTL AND DEV ADDR @V60B9BA 01358000
TM RCUTYPE,RCUSUB IS THIS A SUBORDINATE CU @V60B9BA 01359000
BZ *+8 NO- BRANCH @V60B9BA 01360000
L R14,RCUPRIME YES- POINT TO THE PRIME CU @V60B9BA 01361000
L R14,RCUCHA ADDRESS OF CHANNEL BLOK @V60B9BA 01362000
USING RCHBLOK,R14 @V60B9BA 01363000
AH R0,RCHADD ADD CHANNEL AND DEVICE ADDR @V60B9BA 01364000
TM RDEVTYPE,TYPPUN IS IT A PUNCH FILE @V60B9BA 01365000
BZ *+10 NO - @V60B9BA 01366000
MVC SFBSTART(4),SFBPNT MOVE IN FILE STARTING ADDR @V60B9BA 01367000
ST R0,SFBPNT SAVE IN SFBLOK FOR WARMSTART@V60B9BA 01368000
DROP R14 @V60B9BA 01369000
OI SFBPNT+1,X'10' SIGNIFY THE 3800 DUMMY BLK @V60B9BA 01370000
MVC SFBFNAME(8),RDEVIMAG GET THE IMAGE LIBR NAME @V60B9BA 01371000
MVC SFBFTYPE(4),RDEVXSEP CHAR ARR TBL FOR SEP PAGE @V60B9BA 01372000
MVC SFBFLAG,RDEVFSEP FCB FOR SEPARATOR PAGE @V60B9BA 01373000
MVC SFBUFORM,=C'STANDARD' DEFAULT FORM @VA12228 01373500
BAL R14,PUTREC WRITE IT TO WARM START CYL @V60B9BA 01374000
XC ACBUFF(SFBSIZE*8),ACBUFF CLEAR THE BUFFER @V60B9BA 01375000
SPACE 1 @V60B9BA 01376000
* NOW PUT ANY FILES IN THE DELAY PURGE QUEUE INTO THE DELETE Q @V60B9BA 01377000
TM RDEVSTAT,RDEVDED DEDICATED 3800? @VA10546 01377100
BO NXTDEV YES,GO ON TO NEXT DEVICE @VA10546 01377200
SPACE 1 @V60B9BA 01378000
CHACT2 L R3,RDEVDELP ANCHOR FOR THE DELAY PURGE Q @V60B9BA 01379000
LTR R3,R3 ANY FILES IN THE QUEUE ? @V60B9BA 01380000
BZ CHACT3 XFER IF NOT @V60B9BA 01381000
MVC RDEVDELP,SFBPNT DEQUEUE FIRST FILE @V60B9BA 01382000
MVC SFBPNT,DMKRSPDL ENQUEUE IT ON DELETE QUEUE @V60B9BA 01383000
ST R3,DMKRSPDL MAKE IT THE FIRST ONE @V60B9BA 01384000
B CHACT2 DO SAME FOR NEXT FILE @V60B9BA 01385000
CHACT3 DS 0H @V60B9BA 01386000
L R3,RDEVSPL GET ACTIVE FILE POINTER 01387000
LTR R3,R3 IS THERE ONE ?? 01388000
BZ DUMMYBUF NO -- GO USE DUMMY BLOK 01389000
TM RDEVFLAG,RDEVACNT PUNCH WORKING WITH ACCOUNTING 01390000
BO DUMMYBUF YES- ALLREADY SAVED THE FILES 01391000
CLI 0(R3),X'FF' IS THIS THE ADDRESS OF SFBLOK 01392000
BE *+8 YES -- ACTIVE FROM WARM START 01393000
L R3,RSPSFBLK-RSPLCTL(,R3) YES -- GET ADDRESS OF SFBLOK 01394000
LTR R3,R3 IS THERE ONE ?? 01395000
BZ DUMMYBUF NO -- BUILD DUMMY BUFFER 01396000
TM RDEVTYPC,CLASURI INPUT TYPE UNIT RECORD ?? 01397000
BZ GETCLASS NO -- 01398000
XC RDEVSPL(4),RDEVSPL CLEAR ACTIVE DEVICE POINTER 01399000
CLC SFBPNT-SFBLOK(4,R3),=X'00000000' ANY BUFFERS WRITTEN ? 01400000
BE *+10 NO -- 01401000
MVC SFBLAST-SFBLOK(4,R3),SFBPNT-SFBLOK(R3) LAST BUFFER 01402000
* WRITTEN 01403000
OI SFBFLAG2-SFBLOK(R3),SFBPURGE INDICATE OPEN SFBLOK 01404000
MVC SFBPNT-SFBLOK(4,R3),DMKRSPDL CHAIN SFBLOK FIRST ON 01405000
ST R3,DMKRSPDL DELETE CHAIN 01406000
DUMMYBUF LA R3,ACBUFF USE ACCOUNTING BUFFER TO BUILD 01407000
* DUMMY SFBLOK 01408000
MVC SFBDATE(8),=C'DUMMY BK' INDICATE DUMMY BLOK 01409000
GETCLASS L R0,RDEVCLAS GET OUTPUT CLASSES FROM RDEVBLOK 01410000
ST R0,SFBRECS AND SAVE IN SFBLOK (FOR WARM START) 01411000
LH R0,RDEVADD GET REAL DEV ADDRESS 01412000
L R14,RDEVCUA CONTROL BLOK ADDRESS 01413000
USING RCUBLOK,R14 01414000
LH R2,RCUADD CONTROL UNIT ADDRESS 01415000
OR R0,R2 COMBINE CONTROL AND DEVICE ADDRESS 01416000
TM RCUTYPE,RCUSUB IS THIS A SUBORDINATE CU @VA01081 01417000
BZ *+8 NO- BRANCH @VA01081 01418000
L R14,RCUPRIME YES- POINT TO THE PRIME CU @VA01081 01419000
L R14,RCUCHA ADDRESS OF CHANNEL BLOK 01420000
USING RCHBLOK,R14 01421000
AH R0,RCHADD ADD CHANNEL AND DEVICE ADDRESS 01422000
TM RDEVTYPE,TYPPUN IS IT A PUNCH FILE 01423000
BZ *+10 NO - 01424000
MVC SFBSTART(4),SFBPNT MOVE IN FILE STARTING ADDRESS 01425000
ST R0,SFBPNT SAVE IN SFBLOK FOR WARMSTART 01426000
DROP R14 01427000
SPACE 01428000
* 01429000
* X'80' DEVICE OFFLINE 01430000
* X'40' DEVICE DRAINED 01431000
* X'20' SEPARATOR FLAG ON 01432000
* X'10' THIS IS A SPECIAL BLOCK FOR THE 3800 PRINTER 01433000
* 01434000
TM RDEVSTAT,RDEVDISA DEVICE OFFLINE ?? 01435000
BZ *+8 NO -- 01436000
OI SFBPNT+1,X'80' INDICATE OFFLINE 01437000
TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ?? 01438000
BZ *+8 NO -- 01439000
OI SFBPNT+1,X'40' INDICATE DEVICE DRAINED 01440000
TM RDEVFLAG,RDEVSEP SEPARATOR FLAG SET ?? 01441000
BZ *+8 NO -- (NOSEP) 01442000
OI SFBPNT+1,X'20' INDICATE SEP - YES 01443000
OI SFBFLAG,SFBRECER SET SFBRECS IN-COMPLETE 01444000
BAL R14,PUTREC WRITE THE RECORD 01445000
MVC SFBPNT(4),SFBSTART RESET ACTIVE START ADDRESS 01446000
XC SFBRECS(4),SFBRECS CLEAR REC POINTER 01447000
NXTDEV BCT R6,CHACTNDX GO LOOK AT NEXT DEVICE 01448000
BR R10 WHEN FINISHED, RETURN TO CALLER 01449000
DROP R3 @VA12228 01449500
* 01450000
* 01451000
EJECT 01452000
******************************************* 01453000
* 01454000
* MOVE RECORD TO OUTPUT AREA AND IF FULL WRITE OUT BUFFER TO 01455000
* WARM START CYLINDER 01456000
* 01457000
******************************************* 01458000
SPACE 01459000
PUTDLM LA R3,DLMREC ADDRESS OF DELIMITER RECORD @V2A2029 01460000
PUTREC LH R2,SIZE GET NUMBER OF BYTES TO BE MOVED 01461000
AH R2,INDEX ADD INDEX TO CURRENT DISPLACEMENT@V2A2029 01462000
C R2,=F'4088' WILL IT OVERFLOW THE BUFFER ?? 01463000
BNH MOVREC NO - MOVE IN RECORD @VA13748 01464100
B *+6 SKIP CLOSE ENTRY @V2A2029 01465000
CLOSE SR R3,R3 INDICATE CLOSE REQUEST @V2A2029 01466000
SPACE 01467000
LH R1,INDEX REFRESH RECORD DISPLACEMENT @V2A2029 01468000
LA R1,RECBUFF(R1) ADD INDEX TO NEXT POSITION 01469000
MVC 0(8,R1),=8X'FE' LAST RECORD IN THIS BUFFER 01470000
B *+8 .. @V2A2029 01471000
RDWR L R3,X8FF INDICATE READ OR WRITE ONLY @V2A2029 01472000
ST R3,MVCADD SAVE MOVE DATA ADDRESS @V2A2029 01473000
CLC SEEK+2(2),CYLEND WARMSTART CYLINDERS FULL ? @V2A2029 01474000
BH MSG911W YES-LOOP OR LOT OF SPOOL FILES @V2A2029 01475000
SR R2,R2 .. @V2A2029 01476000
CH R2,SEEK+2 SEEK TO CYLINDER ZERO ?? @V2A2029 01477000
BE MSG910W YES - INVALID WARM START CYL @V2A2029 01478000
LA R2,SEEK WARMSTRT CYL SEEK ADDRESS @V56BDA8 01479000
STCM R2,B'0111',READHAR0+1 STORE IN CASE TCC @V56BDA8 01480000
LA R2,DISKSRCH SEARCH CCW @V56BDA8 01481000
STCM R2,B'0111',ALTTIC+1 IN CASE OF ALTERNATE TRACK @V56BDA8 01482000
LA R0,100 RETRY COUNT @V2A2029 01483000
DSKSIO LA R2,DSKCCW ADDRESS OF CCWS @V2A2029 01484000
ST R2,CAW SET UP CAW @V2A2029 01485000
DSKSIO1 EQU * @V56BDA8 01486000
L R2,DMKSYSWM -> WRM area cyls info HRC075DK 01487000
LH R2,4(,R2) Get CUU of WRM area volume HRC075DK 01487500
SIO 0(R2) START IO @V2A2029 01488000
BC 1,MSG902W CC=3, NOT OPERATIONAL @V2A2029 01489000
BC 2,DSKBWAIT CC=2, CHANNEL OR SUBCANNEL BUSY 01490000
BC 4,DSKSTOR CC=1, CSW STORED 01491000
MVC IONPSW(8),IOINTP SET FOR INTERRUPT 01492000
WAITI LPSW IWAIT WAIT FOR INTERRUPT 01493000
* 01494000
IOINT EQU * HRC075DK 01495000
CH R2,INTTIO RIGHT DEVICE ? HRC075DK 01495500
BNE CHKIOINT NO, CHECK UC & WAIT FOR OURS @V407438 01496000
MVC SAVECSW(12),CSW SAVE CSW AND CAW 01497000
MVC SAVEDEV(4),184 SAVE DEVICE ADDRESS 01498000
CLC CSW+4(2),=AL1(CE+DE,0) ANY ERRORS ?? 01499000
BE DSKOK NO-RECORD WRITTEN SUCCESSFULL 01500000
DSKSNS LA R3,SNSECCW GET ADDRESS OF SENSE CCW @V2A2029 01501000
ST R3,CAW AND STORE IN CAW @V2A2029 01502000
TIO 0(R2) CLEAR IT 01503000
BC 6,*-4 LOOP IF BUSY OR STATUS STORED 01504000
SIO 0(R2) START IO 01505000
TIO 0(R2) TEST IO 01506000
BC 6,*-4 LOOP IF BUSY OR STATUS STORED 01507000
TM SENSDATA,TRKCONCK TRACK CONDITION CHECK? @V56BDA8 01508000
BZ CKPCNT NO, RETRY @V56BDA8 01509000
MVC CAW+1(3),=AL3(READHAR0-DMKCKP+X'800') @V56BDA8 01510000
TIO 0(R2) DRAIN ANYTHING PENDING @V56BDA8 01511000
BC 7,*-4 KEEP TRYING @V56BDA8 01512000
SIO 0(R2) READ R0 @V56BDA8 01513000
BC 7,*-4 TAKE ERROR PATH @V56BDA8 01514000
TIO 0(R2) TEST FOR COMPLETION @V56BDA8 01515000
BC 7,*-4 TRY AGAIN @V56BDA8 01516000
CLC CSW+4(2),=AL1(CE+DE,0) CLEAN END? @V56BDA8 01517000
BNE CKPCNT NO, ERROR @V56BDA8 01518000
MVC CAW+1(3),=AL3(ALTSEEK-DMKCKP+X'800') @V56BDA8 01519000
BCT R0,DSKSIO1 RESTART ON ALTERNATE TRACK @V56BDA8 01520000
B MSG902W FATAL I/O ERROR - WARM CYLINDER @V56BDA8 01521000
SPACE 1 01522000
CKPCNT EQU * @V56BDA8 01523000
BCT R0,DSKSIO BRANCH IF COUNT NOT ZERO @V2A2029 01524000
B MSG902W FATAL I/O ERROR-WARM CYL @V2A2029 01525000
SPACE 01526000
DSKOK ICM R3,B'1111',MVCADD ENTRY POINT RDWR ?? @V2A2029 01527000
BMR R14 YES - RETURN TO CALLER @V2A2029 01528000
SR R3,R3 01529000
IC R3,REC GET RECORD WRITTEN 01530000
CLM R3,B'0001',PAGECYL REACH END OF CYLINDER ? @V2A2029 01531000
BL NXTRCD NO -- UPDATE RECORD COUNT @V2A2029 01532000
LH R2,SEEK+2 GET SEEK ADDRESS @V2A2029 01533000
LA R2,1(,R2) UPDATE TO NEXT CYLINDER @V2A2029 01534000
STH R2,SEEK+2 AND STORE IN SEEK FIELD @V2A2029 01535000
SR R3,R3 START WITH RECORD ONE @V2A2029 01536000
NXTRCD LA R3,1(,R3) UPDATE RECORD NUMBER @V2A2029 01537000
STC R3,REC NEXT RECORD 01538000
BCTR R3,0 -1 AND FIND HEAD 01539000
CLI TYPE,TYP2314 IS IT 2314, 2319 TYPE ?? 01540000
BE HD2314 YES 01541000
SR R2,R2 CLEAR WORK REG @V2A2029 01542000
CLI TYPE,TYP3340 3340 ? @V2A2029 01543000
BE HD3340 YES -- @V2A2029 01544000
CLI TYPE,TYP3350 3350 ? @V304498 01545000
BE HD3350 YES -- @V304498 01546000
CLI TYPE,TYP3375 3375 ? HRC106DK 01546100
BE HD3375 Yes -- HRC106DK 01546200
CLI TYPE,TYP3380 3380 ? HRC106DK 01546300
BE HD3380 Yes -- HRC106DK 01546400
D R2,=F'3' FOR 3330 DIVIDE BY 3 PAGES PER TRACK 01547000
B STOREHD 01548000
SPACE 01549000
HD3340 D R2,=F'2' DIVIDE BY 2 PAGES PER TRACK @V2A2029 01550000
B STOREHD AND STORE HEAD @V2A2029 01551000
SPACE 01552000
HD3350 D R2,=F'4' DIVIDE BY 4 PAGES PER TRACK @V304498 01553000
B STOREHD AND STORE HEAD @V304498 01554000
SPACE 01555000
HD3375 D R2,=F'8' Divide by 8 Pages per track HRC106DK 01555100
B STOREHD And store head HRC106DK 01555200
SPACE 1 HRC106DK 01555300
HD3380 D R2,=F'10' Divide by 10 Pages per track HRC106DK 01555400
B STOREHD And store head HRC106DK 01555500
SPACE 1 HRC106DK 01555600
HD2314 IC R3,HDTABLE(R3) INDEX INTO TABLE AND GET HEAD NUMBER 01556000
STOREHD STC R3,HEAD+1 STORE HEAD IN SEARCH AREA 01557000
SPACE 01558000
LA R0,RECBUFF CLEAR OUTPUT BUFFER 01559000
L R1,=F'4096' TO X'FF' @V2A2029 01560000
SR R2,2 .. 01561000
STH R2,INDEX ZERO INDEX VALUE @V2A2029 01562000
SR R3,R3 .. 01563000
ICM R3,B'1000',X8FF .. @V2A2029 01564000
MVCL R0,R2 MOVE FF TO BUFFER 01565000
LA R3,DLMREC SET UP TO MOVE IN FIRST RECORD 01566000
LR R0,R14 SAVE RETURN ADDRESS @V2A2029 01567000
LH R14,RECCNT GET CURRENT RECORD COUNT 01568000
LA R14,1(R14) UPDATE BY ONE 01569000
STH R14,RECCNT AND STORE 01570000
BAL R14,MOVREC MOVE RECORD TO BUFFER AREA 01571000
LR R14,R0 RESTORE RETURN ADDRESS @V2A2029 01572000
SPACE 01573000
MVC RECBUFF(8),=8X'EE' MOVE IF EES ALL BUFFERS EXCEPT FIRST 01574000
ICM R3,B'1111',MVCADD ANY DATA TO BE MOVED ? @V2A2029 01575000
BNPR R14 BRANCH IF MINUS OR ZERO @V2A2029 01576000
MOVREC LH R1,INDEX DISPLACEMENT INTO BUFFER 01577000
LA R1,RECBUFF(R1) INDEX TO NEXT POSITION 01578000
LH R2,SIZE SIZE OF RECORD 01579000
BCTR R2,0 -1 01580000
EX R2,MOVBUF AND MOVING RECORD 01581000
CLI SIZE+1,SPSFBSZ*8 WRITING SFBLOK FOR VM/SP? @VA12228 01581100
BNE NOTSPSFB SKIP IF NOT @VA12228 01581200
USING SFBLOK,R1 @VA12228 01581300
MVC SFBUFORM,=C'STANDARD' STANDARD FORM NUMBER @VA12228 01581400
MVC SFBOFORM,=C'STANDARD' FOR USER AND OPER @VA12228 01581500
DROP R1 @VA12228 01581600
NOTSPSFB DS 0H @VA12228 01581700
LH R1,INDEX GET COUNT 01582000
AH R1,SIZE INCREMENT 01583000
STH R1,INDEX SAVE 01584000
LH R1,RECCNT GET RECORD COUNT 01585000
LA R1,1(R1) UPDATE BY ONE 01586000
STH R1,RECCNT AND STORE 01587000
BR R14 RETURN 01588000
* 01589000
MOVBUF MVC 0(*-*,R1),0(R3) EXECUTED MOVE 01590000
* 01591000
EXOI OI 0(R14),X'00' SET MASK FOR RESOURCE @V200829 01592000
EJECT 01593000
SPACE 01594000
LTORG 01595000
EJECT 01596000
DS 0F @V407429 01597000
CKPBUFF EQU * @V407429 01598000
SPACE 01599000
************************************************** 01600000
* 01601000
* CHAIN POINTERS AND EXTERNAL ADDRESSES NEEDED BY 01602000
* DMKCKP TO SAVE SYSTEM STATUS FOR WARM START. 01603000
* THE FOLLOWING LIST IS MOVED FROM DMKRSP 01604000
* POINTED TO BY ARSPPR ADDRESS IN PSA 01605000
* 01606000
************************************************** 01607000
* 01608000
RSPLIST DS CL4 CL4'PRT' 01609000
DMKRSPPR DS 1F PRINTER FILE CHAIN 01610000
DS CL4 CL4'PUN' 01611000
DMKRSPPU DS 1F PUNCH FILE CHAIN 01612000
DS CL4 CL4'RDR' 01613000
DMKRSPRD DS 1F READER FILE CHAIN 01614000
DS CL4 CL4'DEL' 01615000
DMKRSPDL DS 1F DELETE FILE CHAIN 01616000
DS CL4 CL4'ACNT' 01617000
DMKRSPAC DS 1F ACCOUNT FILE CHAIN 01618000
DS CL4 CL4'DUMP' @V67CAH7 01618300
DMKRSPDP DS 1F DUMP IN PROGRESS CHAIN @V67CAH7 01618600
DS CL4 CL4'HOLD' 01619000
DMKRSPHQ DS 1F HOLD QUEUE CHAIN 01620000
DS CL4 CL4'ID' 01621000
DMKRSPID DS 1H SYSTEM SPOOL ID COUNTER 01622000
DS 1H X'FFFF' FILLER 01623000
DMKOPRWT DS 1F V(DMKOPRWT) ADDRESS OF CONSOLE WRITE ROUTINE @V200820 01624000
DMKSYSOW DS 1F V(DMKSYSOW) ADDRESS OF SYSTEM OWNLIST 01625000
DMKSYSOC DS 1F V(DMKSYSOC) POINTER TO NUMBER OF ENTRIES 01626000
DMKSYSTP DS 1F V(DMKSYSTP) POINTER TO SYSRES TYPE 01627000
DMKSYSWM DS 1F V(DMKSYSWM) ADDRESS OF WARMSTART CYLINDER 01628000
DMKTMRPT DS 1F V(DMKTMRPT) VMVTIME CONVERT ROUTINE 01629000
DMKRSPCV DS 2F CHECK POINT-WARMSTART CYLINDER ID 01630000
DMKSYSRM DS 1F V(DMKSYSRM) ADDRESS OF REAL @VA02884 01631000
* STORAGE SIZE 01632000
DMKRSPMN DS 1F OPEN MONITOR FILE @V50A2B5 01633000
SPACE 01634000
LISTSIZE EQU *-RSPLIST SIZE OF LIST IN DMKRSP 01635000
SPACE 01636000
************************************************* 01637000
* 01638000
* PROGRAM CHECK SAVE AREA 01639000
* 01640000
************************************************* 01641000
SPACE 01642000
DS 0F 01643000
CLR1 EQU * 01644000
SAVECSW DS 2F ERROR CSW 01645000
DS 1F ERROR CAW 01646000
SAVEDEV DS 1F ERROR DEVICE ADDRESS 01647000
SAVEPSW DS 2F PSW AT TIME OF ERROR 01648000
SAVECODE DS 2F SVC AND PROGRAM INT CODE 01649000
CKPSAVE DS 16F R0-R15 REGISTER SAVE 01650000
SAVERDEV DS 1F RDEVBLOK SAVE AREA @V200829 01651000
EJECT 01652000
SPACE 01653000
************************************************* 01654000
* 01655000
* SAVE AND WORK AREA 01656000
* 01657000
************************************************* 01658000
DS 0D 01659000
SAVEWRK2 DS 1D WORK AREA FOR ACCOUNTING 01660000
CYLSTART DS 1H FIRST WARMSTART CYLINDER ADDRESS @V2A2029 01661000
CYLEND DS 1H LAST WARMSTART CYLINDER ADDRESS @V2A2029 01662000
INDEX DS 1H DISPLACEMENT INTO BUFFER @V2A2029 01663000
SIZE DS 1H LOGICAL RECORD SIZE @V2A2029 01664000
SENSDATA DS CL24 SENSE DATA AREA @V2A2029 01665000
STUSER DS 1F FIRST VMBLOK (ACCOUNTING) 01666000
MVCADD DS 1F DATA ADDRESS SAVE AREA 01667000
STORSIZE DS 1F SIZE OF REAL STORAGE @VA02884 01668000
TERMEND DS 1F ADDRESS OF TERMINAL BUFFER END @V200829 01669000
ACNTSW DS 1X ACNT SWITCH 01670000
TYPE DS 1X SYSRES DEVICE TYPE CODE 01671000
PAGECYL DS 1X PAGES PER CYLINDER @V2A2029 01672000
SPACE 01673000
CLR1SIZE EQU *-CLR1 01674000
SPACE 01675000
************************************************* 01676000
* 01677000
* WORK BUFFER AREA 01678000
* 01679000
************************************************* 01680000
SPACE 01681000
DS 0F 01682000
ALLOCBUF EQU * ALLOCATE BUFFER AREA 01683000
ACBUFF EQU * ACCOUNTING BUFFER AREA 01684000
DS CL128 BUFFER AREA 01685000
DS 0F 01686000
X8FF EQU * @V2A2029 01687000
DLMREC DS 8X DELIMITER DATA RECORDS 01688000
HASH DS 6X PLACE FOR HASH NUMBER 01689000
RECCNT DS 1H NUMBER OF RECORDS PROCESSED 01690000
DATETIME DS 8X DMKSYS DATE TIME 01691000
DS 99X REST OF DELIMITER BUFFER 01692000
DS 0F 01693000
CLRFSIZE EQU *-DLMREC SIZE OF BUFFER AREA 01694000
SPACE 01695000
************************************************* 01696000
* 01697000
* START OF CHECKPOINT OUTPUT BUFFER (4096 BYTES) 01698000
* 01699000
************************************************* 01700000
SPACE 01701000
RECBUFF EQU * 01702000
BUFFDLM DS 8X FIRST 8 BYTES OF BUFFER 01703000
BUFFHASH DS 6X HASH COUNT 01704000
BUFFCNT DS 1H RECORD COUNT 01705000
BUFFVER DS X VERSION OF WARM START DATA @VA12228 01706000
VERNULL EQU X'FF' NULL VERSION NUMBER @VA12228 01706200
VERR6 EQU X'01' RELEASE 6 VERSION OF WARM START @VA12228 01706400
VERSP EQU X'02' VM/SP VERSION OF WARM START @VA12228 01706600
DS 7X @VA12228 01706800
BUFFCV DS 8X CKP WARMSTART CYL CLOCK VALUED 01707000
BUFFID DS 8X BUFFER ID @V200829 01708000
SPACE 01709000
EJECT 01710000
PSA , @V306638 01711000
COPY ACCOUNT @V306638 01712000
COPY ALLOC @V306638 01713000
COPY CORE @V306638 01714000
COPY DEVTYPES @V306638 01715000
COPY EQU @V306638 01716000
COPY IOBLOKS @V306638 01717000
COPY NETWORK @V306638 01718000
COPY RBLOKS @V306638 01719000
COPY SPOOL @V306638 01720000
SFBLOK DSECT , CONTINUATION OF SFBLOK @VA12228 01720100
ORG , WITH VM/SP SFBLOK DEFINITIONS @VA12228 01720200
SFBUFORM DS D USER FORM @VA12228 01720300
SFBOFORM DS D OPERATOR FORM @VA12228 01720400
SPSFBSZ EQU (*-SFBLOK+7)/8 VM/SP SFBLOK IS 2 DWRDS LONGER @VA12228 01720500
SPRCSZ EQU 8 VM/SP RECBLOK IS 8 DOUBLEWORDS @VA12228 01720600
SYSLOCS , @V306638 01721000
COPY VBLOKS @V306638 01722000
COPY VMBLOK @V306638 01723000
END 01724000