INI TITLE 'DMTINI (RSCS) VM/370 - RELEASE 6' 00001000
*. 00002000
* MODULE NAME - 00003000
* 00004000
* DMTINI 00005000
* 00006000
* FUNCTION - 00007000
* 00008000
* DMTINI RECEIVES CONTROL AFTER INITIAL LOADING OF RSCS, 00009000
* AND PERFORMS INITIALIZATION FUNCTIONS WHICH ARE GENERAL 00010000
* AND COMMON TO ALL PARTS OF THE SUBSYSTEM. DMTINI 00011000
* OPTIONALLY WRITES A COPY OF THE INITIAL LOAD TO DASD 00012000
* ACCORDING TO OPERATOR INSTRUCTIONS WHEN THE SUBSYSTEM 00013000
* IS FIRST LOADED FROM THE GENERATION IPL DECK. 00014000
* WHEN IPL'ED FROM DISK, DMTINI COMPLETES READING 00015000
* OF THE SAVED SUBSYSTEM LOAD. WHEN IPL DISK WRITING 00016000
* OR READING IS COMPLETE, DMTINI PERFORMS ITS RSCS 00017000
* INITIALIZATION FUNCTIONS. 00018000
* 00019000
* ATTRIBUTES - 00020000
* 00021000
* RESUABLE 00022000
* 00023000
* ENTRY POINTS - 00024000
* 00025000
* DMTINI - READ A NUCLEUS INTO MAIN STORAGE 00026000
* DMTINIW - WRITE A NUCLEUS ONTO A DASD DEVICE 00027000
* 00028000
* ENTRY CONDITIONS - 00029000
* 00030000
* DMTINI IS ENTERED AT DMTINI FROM THE DASD IPL LOADER, 00031000
* AND AT DMTINIW FROM THE GENERATION LOAD DECK LOADER. 00032000
* 00033000
* EXIT CONDITIONS - 00034000
* 00035000
* NORMAL - 00036000
* AFTER THE RSCS STORAGE AREAS ARE INITIALIZED, DMTINI 00037000
* EXITS TO THE MSUP DISPATCHER BY MEANS OF BALR R14,R15. 00038000
* 00039000
* ERROR - 00040000
* WHEN ERROR CONDITIONS ARE ENCOUNTERED, DMTINI CEASES 00041000
* PROCESSING AND TYPES A DIAGNOSTIC MESSAGE ON THE 00042000
* OPERATOR CONSOLE. 00043000
* 00044000
* CALLS TO OTHER ROUTINES - 00045000
* 00046000
* DMTQRQ - TO REQUEST A FREE SUPERVISOR QUEUE ELEMENT 00047000
* DMTDSP - TO BEGIN RSCS DISPATCHING 00048000
* 00049000
* EXTERNAL REFERENCES - 00050000
* 00051000
* DMTEXT - EXTERNAL INTERRUPT HANDLER ENTRY POINT 00052000
* DMTSVC - SVC INTERRUPT HANDLER ENTRY POINT 00053000
* DMTIOMIN - I/O INTERRUPT HANDLER ENTRY POINT 00054000
* DMTMAPME - ADDR OF END OF MAIN (VIRTUAL) STORAGE MAP 00055000
* DMTCREDA - ADDR OF DMTCRE DASD I/O REQUEST TABLE 00056000
* DMTREXVL - RSCS LOAD DATE AND TIME BUFFER 00057000
* DMTMAPQE - END OF SUPERVISOR QUEUE 00058000
* 00059000
* 00060000
* TABLES / WORKAREAS - 00061000
* 00062000
* TASKE - MSUP TASK ELEMENT (FOR INITIAL TASK, REX) 00063000
* FREEE - MSUP FREE ELEMENT (FOR SUPQUEUE INITIALIZATION) 00064000
* DEVTAB - DEVICE TABLE (FOR CONSOLE AND SYSTEM DASD ADDRS) 00065000
* 00066000
* REGISTER USAGE - 00067000
* 00068000
* GPR 0 = IPL DISK DEVICE ADDRESS 00069000
* GPR 1 = CCW STRING STARTING ADDRESS 00070000
* GPR 2 = CURRENT CYLINDER NUMBER 00071000
* GPR 3 = CURRENT TRACK NUMBER 00072000
* GPR 4 = DASD RECORD LENGTH = 800 00073000
* GPR 5 = CURRENT STORAGE RANGE END 00074000
* GPR 6 = CURRENT STORAGE RANGE START 00075000
* GPR 7 = POINTER TO NEXT RANGE VALUES 00076000
* GPR 8 = CHANNEL COMMAND WORD LENGTH = 8 00077000
* GPR 9 = CCW STRING ENDING ADDRESS 00078000
* GPR 10 = CURRENT CCW ADDRESS 00079000
* GPR 11 = MODULE BASE REGISTER 00080000
* GPR 12 = SEARCH ADDRESS POINTER 00081000
* GPR 13 = CONSOLE DEVICE ADDRESS 00082000
* GPR 14 = LINKAGE REGISTER 00083000
* GPR 15 = SCRATCH REGISTER 00084000
* 00085000
* NOTES - 00086000
* 00087000
* IF AN I/O ERROR OCCURS WHILE WRITING A NUCLEUS, THE FIRST TWO 00088000
* SENSE BYTES ARE STORED AT LOCATIONS 2 AND 3, THE SECOND HALF 00089000
* OF THE PSW IS STORED IN LOCATIONS 4 TO 7, AND THE CSW IS SAVED 00090000
* IN LOCATIONS 8 TO 15 IN MEMORY. IF AN I/O ERROR OCCURS WHILE 00091000
* READING A NUCLEUS, THE WAIT STATE IS ENTERED AND THE INSTRUC- 00092000
* TION ADDRESS FIELD OF THE PSW CONTAINS THE CHARACTERS ' INI'. 00093000
* 00094000
* OPERATION - 00095000
* 00096000
* DMTINIR - READ A NUCLEUS INTO MAIN STORAGE 00097000
* 00098000
* 1. STORE THE DATA ADDRESS IN THE READ CCWS. 00099000
* 00100000
* 2. READ ONE TRACK OF THE NUCLEUS FROM THE IPL DEVICE. 00101000
* 00102000
* 3. IF THE NUCLEUS IS NOT COMPLETELY READ, GO TO STEP 1. 00103000
* 00104000
* 4. GO TO LABEL INIEXIT TO CONTINUE WITH THE INITIALIZATION. 00105000
* 00106000
* DMTINIW - WRITE A NUCLEUS ONTO A DASD DEVICE 00107000
* 00108000
* 1. SEE IF A CONSOLE EXISTS AT ADDRESS 009. IF NOT, WAIT FOR 00109000
* AN INTERRUPT FROM A CONSOLE DEVICE. 00110000
* 00111000
* 2. ASK THE USER TO ENTER THE SYSTEM DISK ADDRESS. 00112000
* 00113000
* 3. ASK THE USER IF HE WANTS TO WRITE THE NUCLEUS ONTO A DASD 00114000
* DEVICE. IF HE DOES NOT, GO TO LABEL INIEXIT. 00115000
* 00116000
* 4. ASK THE USER FOR THE IPL DEVICE ADDRESS AND VERIFY THAT 00117000
* IS A SUPPORTED DASD TYPE DEVICE. 00118000
* 00119000
* 5. INITIALIZE THE DEVICE TYPE DEPENDENT VALUES. 00120000
* 00121000
* 6. ASK THE USER FOR THE CYLINDER NUMBER ON WHICH TO WRITE 00122000
* THE NUCLEUS AND VERIFY THAT THE NUCLEUS WILL NOT OVERLAY 00123000
* ANY CMS FILES ON THE DISK. 00124000
* 00125000
* 7. ASK THE USER IF THE IPL TEXT IS ALSO TO BE WRITTEN ON 00126000
* CYLINDER 0 AND SET THE SWITCH ACCORDINGLY. 00127000
* 00128000
* 8. WRITE THE IPL TEXT ON THE NUCLEUS CYLINDER AND ON 00129000
* CYLINDER 0 IF REQUESTED. 00130000
* 00131000
* 9. STORE THE DATA ADDRESS IN THE WRITE CCWS AND THE CYLINDER 00132000
* NUMBER IN THE SEEK AND SEARCH ADDRESSES. 00133000
* 00134000
* 10. WRITE ONE TRACK OF THE NUCLEUS ONTO THE IPL DEVICE. 00135000
* 00136000
* 11. IF THE NUCLEUS IS NOT COMPLETELY WRITTEN, GO TO STEP 10. 00137000
* 00138000
* 12. GO TO LABEL INIEXIT TO CONTINUE WITH THE INITIALIZATION. 00139000
* 00140000
* INIEXIT - COMPLETE INITIALIZATION AND BEGIN PROCESSING 00141000
* 00142000
* 1. ACQUIRE THE DASD DEVICE TYPE FROM VM/370, AND SET 00143000
* THE DASD CUU ADDR, TYPE CODE, AND DEVICE DEPENDENT 00144000
* VARIABLE TABLE IN THE DMTCRE DASD ACCESS CONTROL AREA. 00145000
* 00146000
* 2. CLEAR THE FIRST 88 BYTES OF LOW VIRTUAL STORAGE, 00147000
* CLEAR THE GENERAL REGISTERS, SET THE TIMER WORD TO 00148000
* X'FFFFFFFF', AND SET THE RSCS NEW PSW VALUES. 00149000
* 00150000
* 3. INITIALIZE THE MAIN STORAGE MAP AND MAIN STORAGE 00151000
* SIZE WORD. 00152000
* 00153000
* 4. INITIALIZE THE SUPERVISOR QUEUE AND SET ALL ELEMENTS 00154000
* FREE TO START. 00155000
* 00156000
* 5. REQUEST A FREE SUPERVISOR QUEUE ELEMENT, BUILD AND 00157000
* ENQUEUE THE REX TASK ELEMENT. 00158000
* 00159000
* 6. RESERVE REX TASK STORAGE IN THE MAIN STORAGE MAP. 00160000
* 00161000
* 7. EXIT TO THE RSCS DISPATCHER TO BEGIN PROCESSING. 00162000
*. 00163000
EJECT 00164000
PUNCH 'SPB ' 00165000
DMTINI CSECT 00166000
DMTINIR EQU * ENTERED HERE FROM CP IPL SIMULATOR 00167000
BALR R11,0 LOAD BASE FOR COMMON ADDRESSABILITY 00168000
BCTR R11,0 ... 00169000
BCTR R11,0 ... 00170000
USING DMTINIR,R11 00171000
USING TASKE,R1 GET TASK ELEMENT ADDRESSABILITY 00172000
USING SVECTORS,0 GET SVECTORS ADDRESSABILITY 00173000
SSM DISABLED RUN DISABLED FOR ALL I/O INTERUPTS 00174000
LH R0,IPLPSW+2 LOAD THE IPL DEVICE ADDRESS 00175000
L R1,CCWBGNR POINT TO CCW STRING TO READ IN NUCLEUS 00176000
LH R2,RDCYLNO LOAD THE NUCLEUS STARTING CYLINDER NUMBER 00177000
SR R3,R3 SET THE HEAD NUMBER TO ZERO 00178000
LA R4,800 SET THE RECORD LENGTH TO 800 00179000
LM R5,R7,RANGE1 LOAD LIMITS OF 1ST RANGE TO BE READ 00180000
LA R8,8 LOAD THE CCW LENGTH 00181000
L R9,CCWENDR LOAD ADDRESS OF LAST CCW TO BE BUILT 00182000
LA R10,RDCCW3 START READING AT RECORD 3 00183000
B STORESA BUILD THE REST OF THE CCW CHAIN 00184000
SPACE 00185000
ENDRANGE LTR R7,R7 DID WE READ THE LAST RANGE? 00186000
BZ FLAGEND YES, STOP BUILDING THE CCW CHAIN 00187000
LM R5,R7,0(R7) LOAD LIMITS NEXT RANGE TO BE READ 00188000
B STORESA 00189000
SPACE 00190000
FLAGEND BCTR R7,0 MAKE POINTER TO NEXT RANGE NEGATIVE 00191000
SR R10,R8 BACKUP TO THE PREVIOUS CCW 00192000
CLI 0(R10),RDDATA IS THIS A READ DATA CCW ? 00193000
BNE INIRDONE NO, NO MORE TO READ 00194000
MVI 4(R10),SILI TURN THE COMMAND CHAINING FLAG OFF 00195000
B DIAGRD READ IN THE REMAINDER OF THE NUCLEUS 00196000
SPACE 00197000
READLOOP AH R3,TRKINC ADD TRACK INCREMENT TO THE TRACK NUMBER 00198000
CH R3,TRKMAX IS THIS THE END OF A CYLINDER 00199000
BL STTRKAD NO, CONTINUE BUILDING CCWS 00200000
SR R3,R3 YES, ZERO THE TRACK NUMBER AND 00201000
LA R2,1(,R2) ADD ONE TO THE CYLINDER NUMBER 00202000
STH R2,RDCYLNO UPDATE THE CURRENT SEEK ADDRESS 00203000
STTRKAD STH R3,RDTRKNO ... 00204000
LA R10,RDCCW1 POINT TO THE 1ST READ DATA CCW 00205000
ADDRLOOP BXH R6,R4,ENDRANGE ADD 800 TO DATA ADDR & GO IF END OF RANGE 00206000
STORESA ST R6,0(,R10) STORE THE DATA ADDRESS IN THE CCW 00207000
MVI 0(R10),RDDATA MOVE IN A READ DATA COMMAND CODE 00208000
BXLE R10,R8,ADDRLOOP POINT TO NEXT CCW AND LOOP IF MORE 00209000
DIAGRD DC X'83010020' READ THE NUCLEUS INTO MAIN STORAGE 00210000
BNZ RDERROR BRANCH IF ANY ERROR OCCURS 00211000
LTR R7,R7 IS THE NUCLEUS COMPLETELY IN ? 00212000
BNM READLOOP NO, READ IN ANOTHER TRACK WORTH 00213000
INIRDONE EQU * 00214000
INIEXIT EQU * 00215000
LR R2,R0 DASD DEV ADDR 00216000
DIAG R2,R3,X'24' GET DEVICE TYPE 00217000
BC 7,RDERROR QUIT IF DEVTYPE FAILS 00218000
L R1,=V(DMTCREDA) GET LOADER I/O TABLE ADDR 00219000
STCM R3,B'0100',DEVCODE-IOTABLE(R1) TYPE TO LOADER 00220000
STH R0,DEVCUU-IOTABLE(R1) GIVE DISK ADDR TO LOADER 00221000
LA R4,RSCS2314 ASSUME TYPE = 2314 00222000
CLI DEVCODE-IOTABLE(R1),TYP2314 CORRECT? 00223000
BE INITMOVE YES - MOVE TABLE 00224000
LA R4,RSCS3330 ASSUME TYPE = 3330 00225000
CLI DEVCODE-IOTABLE(R1),TYP3330 CORRECT? 00226000
BE INITMOVE YES - MOVE TABLE 00227000
LA R4,RSCS3350 ASSUME TYPE = 3350 @V304498 00227100
CLI DEVCODE-IOTABLE(R1),TYP3350 CORRECT? @V304498 00227200
BE INITMOVE YES - MOVE TABLE @V304498 00227300
LA R4,RSCS3340 ASSUME TYPE = 3340 00228000
CLI DEVCODE-IOTABLE(R1),TYP3340 CORRECT? 00229000
BNE RDERROR QUIT IF UNSUPPORTED DEVICE 00230000
INITMOVE EQU * 00231000
MVC 44(32,R1),0(R4) GIVE DASD TYPE INFO - LOADER @V304498 00232100
XC IPLPSW(88),IPLPSW CLEAR LOW CORE TO START OF NEW 00233000
LM R0,R10,IPLPSW AND CLEAR ALL THE REGISTERS 00234000
LM R12,R15,IPLPSW AND CLEAR ALL THE REGISTERS 00235000
SR R1,R1 CLEAR REG.R1 00236000
BCTR R1,0 REG.1 = -1 00237000
ST R1,TIMER SET TIMER WORD TO X'FFFFFFFF' 00238000
SCKC FFS SET HI VALUE FOR CLOCK COMPARATOR@VA03349 00238100
LCTL C0,C0,RSCSCR0 ENAB. CLOCK COMP UNDER CTL OF PSW@VA03349 00238200
MVC NEWEXT(40),LOWCORE INITIALIZE THE NEW PSW'S 00239000
SPACE 00240000
L R1,MAINMAP REG.1 = ADDRESS OF MAIN STORAGE MAP 00241000
L R2,MAPEND REG.2 = ADDRESS OF END OF STORAGE MAP 00242000
SLR R2,R1 REG.2 = LENGTH OF MAP IN BYTES 00243000
ST R2,MAINSIZE SET MAIN STORAGE SIZE IN VECTOR AREA 00244000
BCTR R2,0 DECREMENT FOR CLEAR MVC 00245000
EX R2,MAPCLEAR SET ALL PAGES FREE TO START 00246000
* NOTE THAT THIS LIMITS FREE STORAGE SIZE TO 256 PAGES (1 MEG) 00247000
MVI 0(R1),X'FF' SET PAGE ZERO TO SYSTEM ID 00248000
MVI 1(R1),X'FF' AND PAGE ONE TOO 00249000
SPACE 00250000
MVI 2(R1),X'FF' AND PAGE TWO TOO @VA03349 00251100
LA R3,3 SET FIRST FREE PAGE NUMBER @VA03349 00251200
SLL R3,12 FIRST FREE STORAGE ADDRESS 00252000
L R1,=V(DMTMAPQE) ADDR OF END OF SUP QUEUE 00253000
SL R1,=F'16' ADDR OF LAST SUP QUEUE ELEMENT 00254000
LA R2,2 SET SUP QUEUE EXTRN PAGE NUM @VA03349 00255100
SLL R2,12 SUP QUEUE EXTN ADDR 00256000
ST R2,FREENEXT-FREEE(R1) CHAIN TO EXTN 00257000
LR R1,R2 SET FIRST EXTN ELEM ADDR 00258000
INIQFREE EQU * 00259000
LA R2,16(R1) NEXT PIECE TO BE FREE ELEMENT 00260000
CLR R2,R3 PAST LIMIT YET? 00261000
BNL INIQDONE YES - SET CHAIN TERMINATOR 00262000
ST R2,FREENEXT-FREEE(R1) CHAIN CURRENT TO NEXT 00263000
LR R1,R2 MAKE NEXT CURRENT 00264000
B INIQFREE AND DO ANOTHER ELEMENT 00265000
INIQDONE EQU * 00266000
SR R2,R2 CLEAR NEXT POINTER 00267000
ST R2,FREENEXT-FREEE(R1) TERMINATE FREE CHAIN 00268000
MVC FREEQ(4),QUEUE SET ALL ELEMENTS FREE TO START 00269000
SPACE 00270000
SR R1,R1 CLEAR REG.R1 FOR QUEUE ELEMENT GET 00271000
L R15,QREQ REG.15 = ADDRESS OF SYSTEM QUEUE GET ROUTINE 00272000
BALR R14,R15 GET A QUEUE ELEMENT 00273000
ST R1,TASKQ INITIALIZE TASK QUEUE POINTER 00274000
XC TASKNEXT(4),TASKNEXT CLEAR FIRST TASK ELEMENT LIN 00275000
MVC TASKSAVE(4),FIRSTSAV INITIALIZE FIRST TASK SAVE AREA 00276000
MVI TASKID,X'01' INITIALIZE THE FIRST TASK ID 00277000
MVI TASKSTAT,X'00' INITIALIZE THE FIRST TASK FLAGS 00278000
MVC TASKNAME(4),FIRSTNAM INITIALIZE FIRST TASK NAME 00279000
SPACE 00280000
L R2,TASKSAVE REG.2 = ADDR OF FIRST TASK SAVE AREA 00281000
SRL R2,12 REG.2 = FIRST TASK SAVE AREA PAGE NUMBER 00282000
L R3,MAINMAP REG.3 = ADDRESS OF START OF MAIN STORAGE MAP 00283000
LA R3,0(2,R3) REG.1 = ADDRESS OF FIRST TASK S/A PAGE ENTRY 00284000
MVC 0(1,R3),TASKID SET TASK ID IN STORAGE MAP 00285000
SPACE 00286000
L R15,DISPATCH REG.15 = DISPATCHER ENTRY ADDRESS 00287000
BALR R14,R15 START UP THE FIRST TASK 00288000
SPACE 00289000
MAPCLEAR XC 1(0,R1),1(R1) TO BE EXECUTED BY ABOVE CODE 00290000
RSCSCR0 DC A(X'000008E0') CR0 MASK = CLOCK COMPARATOR @VA03349 00290100
DS 0D 00290200
FFS DC 8X'FF' ALSO A MINUS ONE @VA03349 00290300
EJECT 00291000
RDERROR EQU * 00292000
SR R13,R13 CLEAR DEVICE REG 00293000
BCTR R13,0 -1 TO REQUEST CONS ADDR 00294000
DIAG R13,R14,X'24' GET CONS ADDR FROM VM/370 00295000
LA R15,RDERR1 STORE ERROR MESSAGE CCW ADDRESS IN CAW 00296000
ST R15,CAW ... 00297000
TIO 0(R13) CLEAR ANY PENDING INTERRUPTS 00298000
BNZ *-4 ... 00299000
SIO 0(R13) SEND THE ERROR MESSAGE 00300000
BNZ *-4 ... 00301000
TIO 0(R13) AND WAIT FOR IT TO COMPLETE 00302000
BNZ *-4 ... 00303000
LPSW RDERRPSW CAN NOT CONTINUE - ENTER CP 00304000
SPACE 3 00305000
DS 0D 00306000
RDERRPSW DC AL2(WAIT,0),A(X'011') @VM01136 00307010
SPACE 00308000
RDERR1 CCW WRITE1,RDMSG1,CC+SILI,L'RDMSG1 00309000
CCW NOP,0,SILI,1 00310000
SPACE 00311000
RDMSG1 DC C'DMTINI402T IPL DEVICE READ I/O ERROR' @VM01137 00312010
EJECT 00313000
* DEVICE TYPE 00314000
* DEVICE DEPENDENT VALUES 2311 2314 3330 2305 2305 3340 3350 00315100
* 2319 M1 M2 00315200
CCWBGNR DC A(RDCCWS+0) +8 +8 +0 +0 +0 +0 +0 @V304498 00315300
CCWENDR DC A(RDCCWF) CCW4 CCWF CCWE CCWB CCWE CCW8 @V304498 00315400
* CCW13 00315500
TRKINC DC H'0' 1 2 1 1 1 1 1 @V304498 00315600
TRKMAX DC H'0' 10 20 19 8 8 12 30 @V304498 00315700
SPACE 00321000
RANGE1 DC A(DMTINIW) NUCLEUS SEGMENT 0 @VM01108 00322010
DC A(0) 00323000
DC A(0) 00324000
SPACE 00325000
RDCCWS DS 0D 00326000
CCW SEEK,RDSEEKA,CC+SILI,6 00327000
CCW SETSEC,RDSECNO,CC+SILI,1 00328000
CCW SEARCH,RDCYLNO,CC+SILI,5 00329000
CCW TIC,*-8,0,0 00330000
RDCCW1 CCW RDDATA,0,CC+SILI,800 00331000
RDCCW2 CCW RDDATA,0,CC+SILI,800 00332000
RDCCW3 CCW RDDATA,0,CC+SILI,800 00333000
RDCCW4 CCW RDDATA,0,CC+SILI,800 00334000
RDCCW5 CCW RDDATA,0,CC+SILI,800 00335000
RDCCW6 CCW RDDATA,0,CC+SILI,800 00336000
RDCCW7 CCW RDDATA,0,CC+SILI,800 00337000
RDCCW8 CCW RDDATA,0,CC+SILI,800 00338000
RDCCW9 CCW RDDATA,0,CC+SILI,800 00339000
RDCCWA CCW RDDATA,0,CC+SILI,800 00340000
RDCCWB CCW RDDATA,0,CC+SILI,800 00341000
RDCCWC CCW RDDATA,0,CC+SILI,800 00342000
RDCCWD CCW RDDATA,0,CC+SILI,800 00343000
RDCCWE CCW RDDATA,0,CC+SILI,800 00344000
RDCCWF CCW RDDATA,0,CC+SILI,800 @V304498 00345100
RDCCW10 CCW RDDATA,0,CC+SILI,800 @V304498 00345200
RDCCW11 CCW RDDATA,0,CC+SILI,800 @V304498 00345300
RDCCW12 CCW RDDATA,0,CC+SILI,800 @V304498 00345400
RDCCW13 CCW RDDATA,0,SILI,800 @V304498 00345500
SPACE 00346000
RDSEEKA DC H'0' 00347000
RDCYLNO DC H'0' 00348000
RDTRKNO DC H'0' 00349000
RDRECNO DC X'01' 00350000
RDSECNO DC X'02' 00351000
SPACE 00352000
LOWCORE DS 0D 00353000
DC X'00040000',V(DMTEXT) 00354000
DC X'00040000',V(DMTSVC) 00355000
DC X'00020000',A(X'007') @VM01136 00356010
DC X'00020000',A(OLDMACH-SVECTORS) 00357000
DC X'00040000',V(DMTIOMIN) 00358000
SPACE 00359000
MAPEND DC V(DMTMAPME) ADDRESS OF END OF STORAGE MAP 00360000
FIRSTSAV DC A(X'10000') FIRST TASK SAVE AREA IN PAGE 16 00361000
FIRSTNAM DC C'INIT' DEFAULT NAME FOR FIRST TASK 00362000
DISABLED DC X'00' 00363000
ENABLED DC X'FF' 00364000
EJECT 00365000
RSCS2314 DC F'150' CMS RECORDS/CYL 00366000
DC F'15' CMS RECORDS/X (TRACK OR PAIR) 00367000
DC F'8' OVERFLOW RECORD NUMBER 00368000
DC 20X'00' SECTOR MAP @V304498 00369100
SPACE 00370000
RSCS3330 DC F'266' CMS RECORDS/CYL 00371000
DC F'14' CMS RECORDS/X (TRACK OR PAIR) 00372000
DC F'0' OVERFLOW RECORD NUMBER 00373000
DC X'00020B141D252E374049525B646D7500' SECTOR MAP 00374000
DC 4X'00' EXTENSION OF SECTOR MAP @V304498 00374100
SPACE 00375000
RSCS3340 DC F'96' CMS RECORDS/CYL 00376000
DC F'8' CMS RECORDS/X (TRACK OR PAIR) 00377000
DC F'0' OVERFLOW RECORD NUMBER 00378000
DC X'00020910171E252C3200000000000000' SECTOR MAP 00379000
DC 4X'00' EXTENSION OF SECTOR MAP @V304498 00379100
SPACE 1 00379200
RSCS3350 DC F'570' CMS RECORDS/CYL @V304498 00379300
DC F'19' CMS RECORDS/X (TRACK OR PAIR @V304498 00379400
DC F'0' OVERFLOW RECORD NUMBER @V304498 00379500
DC XL1'00' SECTOR MAP @V304498 00379600
DC AL1(2,8,15,21,27,34,40,46,53,59,65,71,78,84,90) @V304498 00379700
DC AL1(97,103,109,116) @V304498 00379800
SPACE 1 00379900
SPACE 3 00380000
LTORG 00381000
SPACE 00382000
INIREND DS 0D 00383000
EJECT 00384000
DC 0D'0' 00385000
ENTRY DMTINIW 00386000
DMTINIW DC 0H'0' ENTERED HERE FROM NUCLEUS LOADER 00387000
BALR R11,0 LOAD THE BASE REGISTER TEMPORARILY 00388000
USING *,R11 00389000
L R11,ADMTINI NOW PROVIDE FOR COMMON ADDRESSABILITY 00390000
USING DMTINIR,R11 00391000
SSM DISABLED RUN DISABLED FOR ALL I/O INTERRUPTS NOW 00392000
LA R1,REPLY GET CURRENT DATE AND TIME FROM CP 00393000
DC X'8312000C' ... 00394000
L R13,=V(DMTREXVL) GET THE REX TITLE AREA ADDR 00395000
MVC 16(8,R13),REPLY MOVE IN THE GEN DATE 00396000
LH R13,CONSOLE LOAD THE STANDARD CONSOLE ADDRESS 00397000
CHECKCON DC X'83DE0024' IS IT ATTACHED ? 00398000
BC 1,INVALCON NO, WAIT FOR AN INTERRUPT 00399000
CLM R14,12,CONSTYPE IS IT A CONSOLE ? 00400000
BE ASKQUEST YES, START THE QUESTIONS 00401000
MVC NEWIO,WAKEPSW SET I/O NEW PSW TO POINT BACK HERE 00402000
INVALCON LPSW WAITPSW WAIT FOR THE USER TO CAUSE AN INTERRUPT 00403000
WAKEHERE LH R13,OLDIO+2 GET THE INTERRUPTING DEVICE ADDRESS 00404000
MVC NEWIO,NIOPSW RESTORE THE I/O NEW PSW 00405000
B CHECKCON SEE WHAT THE INTERRUPTING DEVICE IS 00406000
SPACE 00407000
ASKQUEST EQU * 00408000
LH R0,DASD SET DEFAULT DASD ADDR 00409000
RDORWRT LA R1,Q2CCWS POINT TO THE CCW STRING FOR QUESTION 2 00410000
BAL R14,DOCONSIO ASK THE QUESTION AND WAIT FOR A REPLY 00411000
OI REPLY,X'40' MAKE SURE THE REPLY IS IN CAPITAL LETTERS 00412000
CLI REPLY,C'N' IS THE REPLY 'NO' ? 00413000
BE INIEXIT YES, CONTINUE WITH THE IPL SEQUENCE 00414000
CLI REPLY,C'Y' IS THE REPLY 'YES' ? 00415000
BE IPLDISK YES, ASK FOR THE IPL DEVICE ADDRESS 00416000
LA R1,WRERR4 POINT TO CCW STRING FOR YES OR NO ERROR 00417000
BAL R14,DOCONSIO TYPE THE ERROR MESSAGE TO THE USER 00418000
B RDORWRT ASK THE QUESTION AGAIN 00419000
SPACE 00420000
IPLDISK LA R1,Q3CCWS POINT TO THE CCW STRING FOR QUESTION 3 00421000
BAL R14,DOCONSIO ASK THE QUESTION AND WAIT FOR A REPLY 00422000
CLI REPLY,X'00' DID THE USER JUST PRESS RETURN ? 00423000
BE CHECKIPL YES, ASSUME THE DEFAULT IPL DEVICE 00424000
BAL R14,HEXTOBIN NO,CONVERT ADDRESS TO BINARY 00425000
BNZ IPLDISK ASK QUESTION AGAIN IF AN ERROR OCCURRED 00426000
LR R0,R1 SAVE THE IPL DEVICE ADDRESS 00427000
CHECKIPL DC X'83010024' IS THE DEVICE ATTACHED AND DASD ? 00428000
BNZ BADIPLD ERROR IF NONEXISTENT UNIT 00429000
STCM R1,12,DISKTYPE SAVE THE DEVICE TYPE AND CLASS 00430000
CLI DISKTYPE,CLASDASD IS IT A DASD CLASS DEVICE ? 00431000
BNE BADIPLD NO, SEND AN ERROR MESSAGE 00432000
MVI MFDCCW1,RDDATA MOVE IN A READ OP-CODE. 00433000
LA R1,MFDCCWS LOAD ADDRESS OF READ MFD CCW CHAIN 00434000
DC X'83010020' READ IN THE MFD FROM THE IPL DEVICE 00435000
BNZ BADIPLD SEND MESSAGE IF ANY ERRORS 00436000
MVI MFDCCW1,WRDATA MOVE WRITE COMMAND CODE TO CCW 00437000
DC X'83010020' WRITE THE MFD BACK OUT AGAIN 00438000
BNZ BADIPLD SEND MESSAGE IF ANY ERRORS 00439000
CLI DISKTYPE+1,TYP2314 IS THIS A 2314 OR 2319 ? 00440000
BE DEV2314 BRANCH IF YES 00441000
CLI DISKTYPE+1,TYP3330 IS THIS A 3330 ? 00442000
BE DEV3330 BRANCH IF YES 00443000
CLI DISKTYPE+1,TYP3350 IS THIS A 3350 ? @V304498 00443100
BE DEV3350 BR...IF YES @V304498 00443200
CLI DISKTYPE+1,TYP3340 IS IT A 3340? 00444000
BE DEV3340 BR...IF YES 00445000
BADIPLD LA R1,WRERR5 POINT TO CCW STRING FOR IPL DEVICE ERROR 00446000
BAL R14,DOCONSIO TYPE THE ERROR MESSAGE TO THE USER 00447000
B IPLDISK ASK THE QUESTION AGAIN 00448000
SPACE 00449000
DEV2314 MVI TRKINC+1,2 READ 2 TRACKS AT A TIME 00450000
MVI TRKMAX+1,20 20 TRACKS PER CYLINDER 00451000
LA R1,RDCCWS+8 SAVE SEEK CCW ADDRESS FOR READING 00452000
ST R1,CCWBGNR ... 00453000
LA R1,WRCCWS+8 SAVE SEEK CCW ADDRESS FOR WRITING 00454000
ST R1,CCWBGNW ... 00455000
LA R1,RDCCWF SAVE LAST READ CCW ADDRESS 00456000
ST R1,CCWENDR ... 00457000
LA R1,WRCCWF SAVE LAST WRITE CCW ADDRESS 00458000
ST R1,CCWENDW ... 00459000
MVC RDCCWS+8,RDCCWS OVERLAY SET SECTOR WITH SEEK CCW 00460000
MVC WRCCWS+8,WRCCWS ... 00461000
MVI RDCCWF+4,SILI TURN OFF 2314 CMD CHAINING READ @V304498 00461100
MVI WRCCWF+4,SILI TURN OFF 2314 CMD CHAINING WRITE @V304498 00461200
B NUCCYLN CONTINUE WITH QUESTIONING 00462000
DEV3350 MVI TRKINC+1,1 READ 1 TRACK AT A TIME @V304498 00462100
MVI TRKMAX+1,30 30 TRACKS PER CYLINDER @V304498 00462200
LA R1,RDCCW13 SAVE LAST READ CCW ADDRESS @V304498 00462300
ST R1,CCWENDR .... @V304498 00462400
LA R1,WRCCW13 SAVE LAST WRITE CCW ADDRESS @V304498 00462500
ST R1,CCWENDW .... @V304498 00462600
B NUCCYLN CONTINUE WITH QUESTIONING @V304498 00462700
SPACE 1 00462800
SPACE 00463000
DEV3330 MVI TRKINC+1,1 READ 1 TRACK AT A TIME 00464000
MVI TRKMAX+1,19 19 TRACKS PER CYLINDER 00465000
LA R1,RDCCWE SAVE LAST READ CCW ADDRESS 00466000
ST R1,CCWENDR ... 00467000
LA R1,WRCCWE SAVE LAST WRITE CCW ADDRESS 00468000
ST R1,CCWENDW ... 00469000
MVI RDCCWE+4,SILI TURN OFF COMMAND CHAINING 00470000
MVI WRCCWE+4,SILI ... 00471000
B NUCCYLN CONTINUE WITH QUESTIONING 00472000
SPACE 00473000
DEV3340 MVI TRKINC+1,1 READ 1 TRACK AT A TIME 00474000
MVI TRKMAX+1,12 12 TRACKS PER CYLINDER 00475000
LA R1,RDCCW8 SAVE LAST READ CCW ADDRESS 00476000
ST R1,CCWENDR .... 00477000
LA R1,WRCCW8 SAVE LAST WRITE CCW ADDRESS 00478000
ST R1,CCWENDW .... 00479000
MVI RDCCW8+4,SILI TURN OFF 00480000
MVI WRCCW8+4,SILI COMMAND CHAINING 00481000
SPACE 00482000
NUCCYLN LA R1,Q4CCWS POINT TO THE CCW STRING FOR QUESTION 4 00483000
BAL R14,DOCONSIO ASK THE QUESTION AND WAIT FOR A REPLY 00484000
BAL R14,DECTOBIN CONVERT NUMBER TO BINARY 00485000
BNZ NUCCYLN ASK QUESTION AGAIN IF AN ERROR OCCURED 00486000
STH R1,RDCYLNO STORE THE CYLINDER ADDRESS OF THE NUCLEUS 00487000
LA R9,MFDBUF OBTAIN POINTER FOR LIMIT TEST @V304498 00488100
CH R1,382(R9) IS IT BEYOND THE ALLOCATED SPACE?@V304498 00488200
BNL IPLZERO YES, ASK THE NEXT QUESTION 00489000
LA R1,WRERR6 POINT TO CCW STRING FOR OVERLAY ERROR 00490000
BAL R14,DOCONSIO TYPE THE ERROR MESSAGE TO THE USER 00491000
B NUCCYLN ASK THE QUESTION AGAIN 00492000
SPACE 00493000
IPLZERO LA R1,Q5CCWS POINT TO THE CCW STRING FOR QUESTION 5 00494000
BAL R14,DOCONSIO ASK THE QUESTION AND WAIT FOR A REPLY 00495000
OI REPLY,X'40' MAKE SURE REPLY IS IN CAPITAL LETTERS 00496000
MVI IPLSWTCH,C'Y' INDICATE IPL TEXT ALSO WRITTEN ON CYL 0 00497000
CLI REPLY,C'Y' IS THE REPLY 'YES' ? 00498000
BE VERSONID YES, CONTINUE WITH QUESTIONS 00499000
MVI IPLSWTCH,C'N' INDICATE NO IPL TEXT ON CYLINDER 0 00500000
CLI REPLY,C'N' IS THE REPLY 'NO' ? 00501000
BE VERSONID YES, CONTINUE WITH QUESTIONS 00502000
LA R1,WRERR4 POINT TO CCW STRING FOR YES OR NO ERROR 00503000
BAL R14,DOCONSIO TYPE THE ERROR MESAGE TO THE USER 00504000
B IPLZERO ASK THE QUESTION AGAIN 00505000
SPACE 00506000
VERSONID EQU * 00507000
SPACE 00508000
QUESTEND LA R1,IPLCCWS POINT TO IPL TEXT CCWS 00509000
CLI IPLSWTCH,C'Y' IS IPL TEXT TO BE WRITTEN ON CYLINDER 0 00510000
BNE NOTZERO NO,ONLY ON THE NUCLEUS CYLINDER 00511000
DC X'83010020' WRITE OUT IPL TEXT AND DMTINIR 00512000
BALR R15,0 SAVE ADDRESS AND CONDITION CODE 00513000
BNZ WRERROR BRANCH IF ANY ERROR OCCURS 00514000
NOTZERO LH R2,RDCYLNO LOAD THE CYLINDER NUMBER FOR THE NUCLEUS 00515000
STH R2,WRCYLNO INITIALIZE THE SEEK AND SEARCH ADDRESSES 00516000
STH R2,REC1 ... 00517000
STH R2,REC2 ... 00518000
DC X'83010020' WRITE OUT IPL TEXT AND DMTINIR 00519000
BALR R15,0 SAVE ADDRESS AND CONDITION CODE 00520000
BNZ WRERROR BRANCH IF ANY ERROR OCCURS 00521000
L R1,CCWBGNW POINT TO CCWS TO WRITE OUT THE NUCLEUS 00522000
SR R3,R3 ZERO THE TRACK NUMBER 00523000
LA R4,800 LOAD THE RECORD LENGTH 00524000
LM R5,R7,RANGE1 LOAD POINTER TO 1ST RANGE TO BE WRITTEN 00525000
LA R8,24 LOAD THE CCW CHAIN INCREMENT 00526000
L R9,CCWENDW LOAD A POINTER TO THE LAST WRITE CCW 00527000
LA R10,WRCCW3 POINT TO THE CCW TO START WITH 00528000
LA R12,REC3 POINT TO THE SEARCH ADDRESS TO START WITH 00529000
B STOREDA CONTINUE BUILDING THE WRITE CCW CHAIN 00530000
SPACE 00531000
NXTRANGE LTR R7,R7 IS THIS THE LAST RANGE ? 00532000
BZ SETLAST YES, WRITE OUT THE LAST TRACK WORTH 00533000
LM R5,R7,0(R7) NO, LOAD THE POINTERS FOR THE NEXT RANGE 00534000
B CHECKREC CONTINUE BUILDING THE WRITE CCW CHAIN 00535000
SPACE 00536000
SETLAST BCTR R7,0 MAKE POINTER TO NEXT RANGE NEGATIVE 00537000
SR R10,R8 BACKUP TO THE PREVIOUS CCW PACKAGE 00538000
CLI 0(R10),WRDATA IS THIS A WRITE DATA CCW ? 00539000
BNE INIEXIT NO, NO MORE TO WRITE 00540000
MVI 4(R10),SILI TURN OFF COMMAND CHAINING 00541000
B DIAGWR WRITE OUT THE REMAINDER OF THE NUCLEUS 00542000
SPACE 00543000
NEXTTRK LA R3,1(,R3) ADD 1 TO THE TRACK NUMBER 00544000
CH R3,TRKMAX IS THIS THE END OF THE CYLINDER 00545000
BL STTRKNO NO, CONTINUE BUILDING CCWS 00546000
SR R3,R3 YES, ZERO THE TRACK NUMBER AND 00547000
LA R2,1(,R2) ADD ONE TO THE CYLINDER NUMBER 00548000
STH R2,WRCYLNO UPDATE THE CURRENT SEEK ADDRESS 00549000
STTRKNO STH R3,WRTRKNO ... 00550000
LA R10,WRCCW1 POINT TO THE 1ST WRITE CCW 00551000
LA R12,REC1 POINT TO THE 1ST SEARCH ADDRESS 00552000
DATALOOP BXH R6,R4,NXTRANGE ADD 800 TO DATA ADDR & GO IF END OF RANGE 00553000
CHECKREC CLI DISKTYPE+1,TYP2314 IS THIS A 2314 DISK ? 00554000
BNE STOREDA NO, CONTINUE 00555000
CLI 4(R12),X'09' YES, ARE WE AT RECORD 9 ? 00556000
BNE STOREDA NO, CONTINUE 00557000
LA R3,1(,R3) YES, ADD 1 TO THE TRACK NUMBER 00558000
STOREDA ST R6,0(,R10) STORE THE DATA ADDRESS INTO THE CCW 00559000
MVI 0(R10),WRDATA MOVE WRITE DATA COMMAND CODE TO THE CCW 00560000
STH R2,0(,R12) STORE CYLINDER NUMBER IN SEARCH ADDRESS 00561000
STH R3,2(,R12) STORE TRACK NUMBER IN SEARCH ADDRESS 00562000
LA R12,6(,R12) POINT TO THE NEXT SEARCH ADDRESS 00563000
BXLE R10,R8,DATALOOP POINT TO NEXT CCW AND LOOP IF MORE 00564000
DIAGWR DC X'83010020' WRITE THE NUCLEUS ONTO THE DISK 00565000
BALR R15,0 SAVE ADDRESS AND CONDITION CODE 00566000
BNZ WRERROR BRANCH IF ANY ERROR OCCURS 00567000
LTR R7,R7 IS THE NUCLEUS ALL ON DISK ? 00568000
BNM NEXTTRK NO, WRITE OUT ANOTHER TRACK WORTH 00569000
B INIEXIT CONTINUE WITH SYSTEM INITIALIZATION 00570000
EJECT 00571000
HEXTOBIN DS 0H HEX TO BINARY CONVERSION ROUTINE 00572000
LA R1,REPLY-1 POINT TO START OF REPLY - 1 00573000
L R2,ZEROES INITIALIZE VALUE TO ZERO 00574000
OC REPLY(8),BLANKS MAKE SURE REPLY IS IN UPPER CASE 00575000
HEXLOOP LA R1,1(,R1) POINT TO NEXT CHARACTER OF REPLY 00576000
CLI 0(R1),C' ' IS IT THE END OF THE REPLY ? 00577000
BE HEXPACK YES, CONTINUE CONVERSION 00578000
SLL R2,8 MAKE ROOM FOR ANOTHER CHARACTER 00579000
IC R2,0(,R1) SAVE THE NEXT CHARACTER 00580000
CLI 0(R1),C'9' IS IT LESS THAN OR EQUAL TO 9 ? 00581000
BH BINERR1 ERROR IF NO 00582000
CLI 0(R1),C'0' IS IT LESS THAN 0 ? 00583000
BNL HEXLOOP NO, LOOK AT THE NEXT CHARACTER 00584000
CLI 0(R1),C'F' IS IT LESS THAN OR EQUAL TO F ? 00585000
BH BINERR1 ERROR IF NO 00586000
CLI 0(R1),C'A' IS IT GREATER THAN OR EQUAL TO A ? 00587000
BL BINERR1 ERROR IF NO 00588000
AL R2,=F'9' CONVERT NUMBER TO CORRECT RANGE 00589000
B HEXLOOP LOOK AT THE NEXT CHARACTER 00590000
SPACE 00591000
HEXPACK C R2,ZEROES IS NUMBER STILL 0 ? 00592000
BE BINERR1 YES, ASK HIM AGAIN 00593000
ST R2,HEXWORD CONVERT THE NUMBER TO BINARY 00594000
PACK HEXDBLW(4),HEXWORD ... 00595000
L R1,HEXDBLW LOAD THE NUMBER 00596000
SRL R1,4 AND REMOVE THE SIGN 00597000
SR R2,R2 SET CONDITION CODE = 0 00598000
BR R14 RETURN TO THE CALLER 00599000
SPACE 00600000
BINERR1 LA R1,WRERR2 POINT TO CCW STRING FOR ADDRESS ERROR 00601000
HEXERR LR R2,R14 SAVE THE RETURN ADDRESS 00602000
BAL R14,DOCONSIO START THE I/O AND WAIT 00603000
LTR R14,R2 SET CONDITION CODE NOT = 0 00604000
BR R14 AND RETURN TO THE CALLER 00605000
EJECT 00606000
DECTOBIN DS 0H HEX TO DECIMAL CONVERSION ROUTINE 00607000
LA R1,REPLY POINT TO START OF THE REPLY 00608000
L R2,ZEROES INITIALIZE VALUE TO ZERO 00609000
DECLOOP CLI 0(R1),X'00' IS THIS THE END OF THE REPLY ? 00610000
BE DECPACK YES, CONTINUE CONVERSION 00611000
CLI 0(R1),C'0' IS IT EQUAL TO OR GREATER THAN 0 ? 00612000
BL DECERR1 ERROR IF NO 00613000
CLI 0(R1),C'9' IS IT LESS THAN OR EQUAL TO 9 ? 00614000
BH DECERR1 ERROR IF NO 00615000
SLL R2,8 MAKE ROOM FOR ANOTHER CHARACTER 00616000
IC R2,0(,R1) SAVE THE CURRENT CHARACTER 00617000
LA R1,1(,R1) POINT TO THE NEXT CHARACTER 00618000
B DECLOOP LOOK AT THE NEXT CHARACTER 00619000
SPACE 00620000
DECPACK C R2,ZEROES IS NUMBER STILL 0 ? 00621000
BE DECERR1 YES, ASK HIM AGAIN 00622000
ST R2,HEXWORD CONVERT THE NUMBER TO BINARY 00623000
PACK HEXDBLW,HEXWORD ... 00624000
CVB R1,HEXDBLW ... 00625000
SR R2,R2 SET CONDITION CODE = 0 00626000
BR R14 RETURN TO THE CALLER 00627000
SPACE 00628000
DECERR1 LA R1,WRERR3 POINT TO CCWSTRING FOR NUMBER ERROR 00629000
B HEXERR SEND THE ERROR MESSAGE AND CONTINUE 00630000
EJECT 00631000
DOCONSIO DS 0H CONSOLE I/O SUBROUTINE 00632000
MVI REPLY,X'00' CLEAR THE REPLY BUFFER 00633000
MVC REPLY+1(L'REPLY-1),REPLY 00634000
ST R1,CAW STORE CCW ADDRESS IN CAW 00635000
TIO 0(R13) CLEAR ANY PENDING INTERRUPTS 00636000
BNZ *-4 ... 00637000
SIO 0(R13) START THE I/O TO THE CONSOLE 00638000
BNZ *-4 ... 00639000
TIO 0(R13) WAIT FOR THE I/O TO COMPLETE 00640000
BC 2,*-4 ... 00641000
CLI CSW+4,CE+DE NORMAL STATUS RECEIVED ? 00642000
BNE DOCONSIO NO, TRY THE I/O AGAIN 00643000
BR R14 YES, RETURN TO THE CALLER 00644000
SPACE 3 00645000
WRERROR DS 0H ERROR WHILE WRITING THE NUCLEUS 00646000
ST R1,0 SAVE THE INDICATORS OF THE ERROR 00647000
ST R15,4 ... 00648000
MVC IPLCCW1+4(4),CAW ... 00649000
LA R1,WRERR1 POINT TO CCW STRINT FOR WRITE ERROR 00650000
BAL R14,DOCONSIO PERFORM THE I/O AND WAIT 00651000
B INIEXIT CONTINUE SYSTEM INITIALIZATION 00652000
EJECT 00653000
SPACE 00654000
DS 0D 00655000
REPLY DC CL128' ' 00656000
SPACE 2 00657000
DS 0D 00658000
NIOPSW DC AL2(MCHEK,0),V(DMTIOMIN) 00659000
WAITPSW DC AL1(CHAN0,MCHEK+WAIT,0,0),A(WAKEHERE) 00660000
WAKEPSW DC AL1(0,MCHEK,0,0),A(WAKEHERE) 00661000
SPACE 2 00662000
CHAN0 EQU X'80' 00663000
HEXDBLW DC D'0' 00664000
HEXWORD DC F'0' 00665000
ZEROES DC C'0000' 00666000
BLANKS DC CL8' ' 00667000
SPACE 2 00668000
ADMTINI DC A(DMTINIR) 00669000
CCWBGNW DC A(WRCCWS+0) 00670000
CCWENDW DC A(WRCCWF) 00671000
DISKTYPE DC H'0' 00672000
CONSTYPE DC AL1(CLASTERM,TYP3210) 00673000
IPLSWTCH DC C'N' 00674000
SPACE 00675000
DS 0H 00676000
CONSOLE DC X'0009' DEFAULT CONSOLE ADDR 00677000
DASD DC X'0191' DEFAULT DASD ADDR 00678000
EJECT 00679000
DS 0D 00680000
Q2CCWS CCW WRITE,Q2,CC+SILI,L'Q2 00681000
CCW TIC,QREAD,0,0 00682000
SPACE 00683000
Q3CCWS CCW WRITE,Q3,CC+SILI,L'Q3 00684000
CCW TIC,QREAD,0,0 00685000
SPACE 00686000
Q4CCWS CCW WRITE,Q4,CC+SILI,L'Q4 00687000
CCW TIC,QREAD,0,0 00688000
SPACE 00689000
Q5CCWS CCW WRITE,Q5,CC+SILI,L'Q5 00690000
CCW TIC,QREAD,0,0 00691000
SPACE 00692000
QREAD CCW RDCONS,REPLY,CC+SILI,128 00693000
CCW NOP,0,SILI,1 00694000
SPACE 00695000
WRERR1 CCW WRITE1,WRMSG1,CC+SILI,L'WRMSG1 00696000
CCW NOP,0,SILI,1 00697000
SPACE 00698000
WRERR2 CCW WRITE1,WRMSG2,CC+SILI,L'WRMSG2 00699000
CCW NOP,0,SILI,1 00700000
SPACE 00701000
WRERR3 CCW WRITE1,WRMSG3,CC+SILI,L'WRMSG3 00702000
CCW NOP,0,SILI,1 00703000
SPACE 00704000
WRERR4 CCW WRITE1,WRMSG4,CC+SILI,L'WRMSG4 00705000
CCW NOP,0,SILI,1 00706000
SPACE 00707000
WRERR5 CCW WRITE1,WRMSG5,CC+SILI,L'WRMSG5 00708000
CCW NOP,0,SILI,1 00709000
SPACE 00710000
WRERR6 CCW WRITE1,WRMSG6,CC+SILI,L'WRMSG6 00711000
CCW NOP,0,SILI,1 00712000
EJECT 00713000
Q2 DC C'DMTINI407R REWRITE THE NUCLEUS ? ' Y OR N @VM01137 00714010
Q3 DC C'DMTINI408R IPL DEVICE ADDRESS = ' CCU @VM01137 00715010
Q4 DC C'DMTINI409R NUCLEUS CYL ADDRESS = ' NNN @VM01137 00716010
Q5 DC C'DMTINI410R ALSO IPL CYLINDER 0 ? ' Y OR N @VM01137 00717010
SPACE 00718000
WRMSG1 DC C'DMTINI431S IPL DEVICE WRITE I/O ERROR' @VM01137 00719500
WRMSG2 DC C'DMTINI479E INVALID DEVICE ADDRESS - REENTER' @VM01137 00720000
WRMSG3 DC C'DMTINI480E INVALID CYLINDER NUMBER - REENTER' @VM01137 00720500
WRMSG4 DC C'DMTINI481E INVALID REPLY - ANSWER "YES" OR ' @VM01137 00721000
DC C'"NO"' @VM01137 00721500
WRMSG5 DC C'DMTINI482E IPL DEVICE ERROR - REENTER' @VM01137 00722000
WRMSG6 DC C'DMTINI483E NUCLEUS WILL OVERLAY CMS FILES -' @VM01137 00722500
DC C' RECOMPUTE' @VM01137 00723000
SPACE 3 00725000
MFDCCWS DS 0D 00726000
CCW SEEK,ZERO,CC+SILI,6 00727000
CCW SEARCH,REC4,CC+SILI,5 00728000
CCW TIC,*-8,0,0 00729000
MFDCCW1 CCW RDDATA,MFDBUF,SILI,800 00730000
SPACE 3 00731000
IPLCCWS DS 0D 00732000
CCW SEEK,WRSEEKA,CC+SILI,6 00733000
CCW SEARCH,REC1,CC+SILI,5 00734000
CCW TIC,*-8,0,0 00735000
CCW WRDATA,IPLTEXT,CC+SILI,24 00736000
CCW SEARCH,REC2,CC+SILI,5 00737000
CCW TIC,*+8,0,0 00738000
CCW WRDATA,DMTINIR,SILI,800 00739000
SPACE 2 00740000
IPLTEXT DS 0D 00741000
DC AL2(MCHEK,0),A(DMTINIR) 00742000
CCW RDDATA,DMTINIR,CC+SILI,800 00743000
CCW NOP,0,SILI,1 00744000
EJECT 00745000
WRCCWS DS 0D 00746000
CCW SEEK,WRSEEKA,CC+SILI,6 00747000
CCW SETSEC,WRSECNO,CC+SILI,1 00748000
CCW SEARCH,REC1,CC+SILI,5 00749000
CCW TIC,*-8,0,0 00750000
WRCCW1 CCW NOP,0,CC+SILI,800 00751000
CCW SEARCH,REC2,CC+SILI,5 00752000
CCW TIC,*-8,0,0 00753000
WRCCW2 CCW NOP,0,CC+SILI,800 00754000
CCW SEARCH,REC3,CC+SILI,5 00755000
CCW TIC,*-8,0,0 00756000
WRCCW3 CCW WRDATA,0,CC+SILI,800 00757000
CCW SEARCH,REC4,CC+SILI,5 00758000
CCW TIC,*-8,0,0 00759000
WRCCW4 CCW WRDATA,0,CC+SILI,800 00760000
CCW SEARCH,REC5,CC+SILI,5 00761000
CCW TIC,*-8,0,0 00762000
WRCCW5 CCW WRDATA,0,CC+SILI,800 00763000
CCW SEARCH,REC6,CC+SILI,5 00764000
CCW TIC,*-8,0,0 00765000
WRCCW6 CCW WRDATA,0,CC+SILI,800 00766000
CCW SEARCH,REC7,CC+SILI,5 00767000
CCW TIC,*-8,0,0 00768000
WRCCW7 CCW WRDATA,0,CC+SILI,800 00769000
CCW SEARCH,REC8,CC+SILI,5 00770000
CCW TIC,*-8,0,0 00771000
WRCCW8 CCW WRDATA,0,CC+SILI,800 00772000
CCW SEARCH,REC9,CC+SILI,5 00773000
CCW TIC,*-8,0,0 00774000
WRCCW9 CCW WRDATA,0,CC+SILI,800 00775000
CCW SEARCH,RECA,CC+SILI,5 00776000
CCW TIC,*-8,0,0 00777000
WRCCWA CCW WRDATA,0,CC+SILI,800 00778000
CCW SEARCH,RECB,CC+SILI,5 00779000
CCW TIC,*-8,0,0 00780000
WRCCWB CCW WRDATA,0,CC+SILI,800 00781000
CCW SEARCH,RECC,CC+SILI,5 00782000
CCW TIC,*-8,0,0 00783000
WRCCWC CCW WRDATA,0,CC+SILI,800 00784000
CCW SEARCH,RECD,CC+SILI,5 00785000
CCW TIC,*-8,0,0 00786000
WRCCWD CCW WRDATA,0,CC+SILI,800 00787000
CCW SEARCH,RECE,CC+SILI,5 00788000
CCW TIC,*-8,0,0 00789000
WRCCWE CCW WRDATA,0,CC+SILI,800 00790000
CCW SEARCH,RECF,CC+SILI,5 00791000
CCW TIC,*-8,0,0 00792000
WRCCWF CCW WRDATA,0,CC+SILI,800 @V304498 00793100
CCW SEARCH,REC10,CC+SILI,5 @V304498 00793125
CCW TIC,*-8,0,0 @V304498 00793150
WRCCW10 CCW WRDATA,0,CC+SILI,800 @V304498 00793175
CCW SEARCH,REC11,CC+SILI,5 @V304498 00793200
CCW TIC,*-8,0,0 @V304498 00793225
WRCCW11 CCW WRDATA,0,CC+SILI,800 @V304498 00793250
CCW SEARCH,REC12,CC+SILI,5 @V304498 00793275
CCW TIC,*-8,0,0 @V304498 00793300
WRCCW12 CCW WRDATA,0,CC+SILI,800 @V304498 00793325
CCW SEARCH,REC13,CC+SILI,5 @V304498 00793350
CCW TIC,*-8,0,0 @V304498 00793375
WRCCW13 CCW WRDATA,0,SILI,800 @V304498 00793400
EJECT 00794000
WRSEEKA DC H'0' 00795000
WRCYLNO DC H'0' 00796000
WRTRKNO DC H'0' 00797000
WRRECNO DC X'01' 00798000
WRSECNO DC X'02' 00799000
SPACE 3 00800000
DS 0D 00801000
ZERO DC 8X'00' 00802000
REC1 DC 4X'00',X'01',X'00' 00803000
REC2 DC 4X'00',X'02',X'00' 00804000
REC3 DC 4X'00',X'03',X'00' 00805000
REC4 DC 4X'00',X'04',X'00' 00806000
REC5 DC 4X'00',X'05',X'00' 00807000
REC6 DC 4X'00',X'06',X'00' 00808000
REC7 DC 4X'00',X'07',X'00' 00809000
REC8 DC 4X'00',X'08',X'00' 00810000
REC9 DC 4X'00',X'09',X'00' 00811000
RECA DC 4X'00',X'0A',X'00' 00812000
RECB DC 4X'00',X'0B',X'00' 00813000
RECC DC 4X'00',X'0C',X'00' 00814000
RECD DC 4X'00',X'0D',X'00' 00815000
RECE DC 4X'00',X'0E',X'00' 00816000
RECF DC 4X'00',X'0F',X'00' 00817000
REC10 DC 4X'00',X'10',X'00' @V304498 00817100
REC11 DC 4X'00',X'11',X'00' @V304498 00817200
REC12 DC 4X'00',X'12',X'00' @V304498 00817300
REC13 DC 4X'00',X'13',X'00' @V304498 00817400
SPACE 3 00818000
LTORG 00819000
SPACE 3 00820000
DS 0D 00821000
MFDBUF DS 800X 00822000
EJECT 00823000
SPACE 00824000
WRITE EQU X'01' WRITE 00825000
READ EQU X'02' READ 00826000
NOP EQU X'03' NO OPERATION 00827000
SENSE EQU X'04' SENSE 00828000
WRDATA EQU X'05' WRITE DATA 00829000
RDDATA EQU X'06' READ DATA 00830000
SEEK EQU X'07' SEEK 00831000
TIC EQU X'08' TRANSFER IN CHANNEL 00832000
WRITE1 EQU X'09' WRITE AND SPACE 1 00833000
RDCONS EQU X'0A' READ FROM CONSOLE 00834000
SETSEC EQU X'23' SET SECTOR 00835000
SEARCH EQU X'31' SEARCH ID EQUAL 00836000
EJECT 00837000
COPY RSSEQU 00838000
* 00838100
C0 EQU 0 CONTROL REGISTER ZERO 00838200
EJECT 00839000
COPY DEVTYPES 00840000
EJECT 00841000
COPY SVECTORS 00842000
EJECT 00843000
COPY IOTABLE 00844000
EJECT 00845000
COPY TASKE 00846000
COPY FREEE 00847000
END DMTINIW 00848000