INS TITLE 'DMSINS (CMS) VM/370 - RELEASE 6' 00001000 SPACE 2 00002000 *. 00003000 * 00004000 * MODULE NAME: 00005000 * 00006000 * DMSINS (INITSUB) 00007000 * 00008000 * FUNCTION: 00009000 * 00010000 * TO CONTROL INITIALIZATION OF THE CMS NUCLEUS. 00011000 * 00012000 * ATTRIBUTES: 00013000 * 00014000 * RESIDENT WITH NUCLEUS AT IPL TIME. 00015000 * 00016000 * ENTRY POINTS: 00017000 * 00018000 * DMSINS - ENTRY FROM IPL TEXT. 00019000 * 00020000 * ENTRY CONDITIONS: 00021000 * 00022000 * NONE 00023000 * 00024000 * EXIT CONDITIONS: 00025000 * 00026000 * NONE 00027000 * 00028000 * CALLS TO OTHER ROUTINES: 00029000 * 00030000 * DMSFRES, DMSFREE, DMSFRET, READFST, DMSINT, 00031000 * DMSDIOR, DMSCAT 00032000 * 00033000 * EXTERNAL REFERENCES: 00034000 * 00035000 * NONE 00036000 * 00037000 * TABLES/WORKAREAS: 00038000 * 00039000 * NONE 00040000 * 00041000 * REGISTER USAGE: 00042000 * 00043000 * GPR13 - BASE, REST WORK 00044000 * 00045000 * NOTES: 00046000 * 00047000 * NONE 00048000 * 00049000 * OPERATION: 00050000 * 00051000 * AFTER INITIAL PROGRAM LOAD (IPL) OF THE CMS NUCLEUS, 00052000 * CONTROL PASSES TO THE ONE-TIME INITIALIZATION PROGRAM 00053000 * INITSUB, WHICH IMMEDIATELY ESTABLISHES ADDRESSABILITY 00054000 * AND PROCEEDS AS FOLLOWS: 00055000 * 00056000 * 1. SAVES THE IPL-ED DEVICE ADDRESS. 00057000 * 00058000 * 2. CALLS ADTLKP TO LOCATE THE ACTIVE DISK TABLE FOR 00059000 * THE SYSTEM DISK. 00060000 * 00061000 * 3. SETS LOW-EXTEND TO X'40000'. 00062000 * 00063000 * 4. CALLS DMSFRES FOR FIRST-PASS STORAGE INITIALIZING. 00064000 * 00065000 * 5. CALLS DMSFREE TO RESERVE ALL NUCLEUS FREE STORAGE 00066000 * 00067000 * 6. CALLS READFST TO READ IN ALL S-DISK FST'S. 00068000 * 00069000 * 7. CALLS DMSFRET TO RETURN ALL NUCLEUS STORAGE 00070000 * 00071000 * 8. CALLS DMSFREE TO GET NUCLEUS FREE STORAGE FOR 00072000 * SSTAT. 00073000 * 00074000 * 9. CREATES THE SSTAT FROM 'S2' FILES ON S-DISK 00075000 * 00076000 * 10. USES CP-DIAGNOSE TO DETERMINE CHARACTERISTICS 00077000 * OF A DYNAMIC DISK (IF PRESENT). 00078000 * 00079000 * 11. CHECKS IF THE D-DISK HAS A VALID CMS-LABEL AND 00080000 * DECIDES IF A FORMAT OR ACCESS IS REQUIRED. 00081000 * 00082000 * 12. CHECKS TO SEE IF A Z-DISK IS REQUIRED. 00083000 * 00084000 * 13. TYPES VERSION IDENTIFICATION MESSAGE. 00085000 * 00086000 * 14. READS THE FIRST COMMAND AND IF IT WAS 00087000 * 'SAVESYS, ISSUES A DIAGNOSE TO CP USING THE 00088000 * INPUT LINE AS THE PARAMETER LIST. GOTO 10. 00089000 * 00090000 * 15. IF THE FIRST COMMAND WAS ANYTHING ELSE 00091000 * A. ACCESS THE YDISK (IF PRESENT) 00092000 * B. Load the GCC runtime library into high HRC371DS 00093000 * memory and update a pointer in NUCON with HRC371DS 00093100 * its address. HRC371DS 00093200 * C. Load REXX into high memory and establish it HRC371DS 00093300 * as a nucleus command. Now all EXECs can be HRC371DS 00093400 * written in REXX. HRC371DS 00093500 * D. Access the user's A disk. HRC371DS 00093600 * E. Stack a plist LIFO for "PROFILE EXEC" HRC371DS 00093700 * (if present and if "ACCESS ( NOPROFILE" was HRC371DS 00093800 * not entered as the first command) HRC371DS 00093900 * F. Stack a plist LIFO for "SYSPROF EXEC" HRC371DS 00094000 * (if present and if "ACCESS ( NOPROFILE" was HRC371DS 00094100 * not entered as the first command) HRC371DS 00094200 * G. Access the D disk or, if not formatted, HRC371DS 00094300 * stack a plist LIFO to format the D disk HRC371DS 00094400 * (if present) HRC371DS 00094500 * HRC371DS 00094600 * Thus the command EXEC SYSPROF will be executed HRC371DS 00094700 * before the PROFILE EXEC is executed. Eventually, HRC371DS 00094800 * we may first stack a "RELEASE A" command so that HRC371DS 00094900 * we can ensure that SYSPROF EXEC S is executed... HRC371DS 00095000 * HRC371DS 00095100 * 00097000 * 16. SETS VALUE OF BLIP TIMER. 00098000 * 00099000 * 17. DETERMINES VIRTUAL MACHINE SIZE AND ALLOCATES 00100000 * 2 PAGES OF LOADER TABLES IF MACHINE SIZE IS 00101000 * NOT OVER 320K. 3 PAGES ARE OTHERWISE ALLOCATED 00102000 * But if the machine is 4MB or larger, allocate HRC371DS 00102100 * 64 pages of loader tables. HRC371DS 00102200 * 00103000 * 18. CALLS DMSFRES FOR FINAL STORAGE INITIALIZING 00104000 * 19. GOTO INIT. 00105000 * 00106000 *. 00107000 EJECT 00108000 DMSINS START X'20000' 00109000 ENTRY INITSUB 00110000 INITSUB EQU DMSINS 00111000 USING NUCON,R0 00112000 USING INITSUB,R12 00113000 * 00114000 * CMS CONTINUES HERE AFTER WRITING ON DISK (IF READ FROM CARDS) 00115000 * OR STARTS UP HERE IF READ IN FROM DISK (VIA 'IPL 190') ... 00116000 * 00117000 MVC IPLPARMS(64),0(R1) KEEP CP 'IPL' PARMS @VA12042 00118000 MVC 80(4,R0),BIGTIME PUT A HIGH NUMBER IN THE TIMER 00119000 MVC VMSIZE,=A(X'40000') P3077 00120000 MVC IPLADDR,IPLPSW+2 SAVE IPL-ED DEVICE ADDRESS 00121000 XC SYSNAME(8),SYSNAME CLEAN IT UP @VA03571 00122000 LA R1,SY-DMODE POINT TO MODE LETTER 00123000 L R15,=V(DMSLAD) GET ADDR. OF ADTLKP 00124000 BALR R14,R15 GO THERE 00125000 LR R13,R1 SAVE ADDR. OF ADT 00126000 USING ADTSECT,R13 00127000 * THE FOLLOWING TWO INSTRUCTIONS WILL CAUSE DMSFRE TO ALLOCATE, IN THE 00128000 * HIGH-CORE AREA, FROM THE END OF THIS ROUTINE TO X'40000'. THE 00129000 * LATTER FIGURE CAN BE CHANGED AT WILL. 00130000 MVC FREELOWE,=A(X'40000') INITIAL SETTING OF LOW-EXTEND 00131000 MVC LOCCNT,=A(ENDSYS) INITIAL SETTING OF LOCCNT 00132000 DMSFRES INIT1,TYPCALL=BALR FIRST DMSFRE INIT ROUTINE 00133000 SPACE 00134000 * WE ALLOCATE ALL OF THE LOW-CORE STORAGE AVAILABLE TO DMSFRE, SO THAT 00135000 * THE SUBSEQUENT CALL TO 'ACCESS' WILL USE ONLY HIGH-CORE STORAGE. 00136000 DMSFREE DWORDS=X'FFFFFF',MIN=1,TYPE=NUCLEUS,TYPCALL=BALR, *00137000 AREA=LOW ALLOCATE ALL LOW-CORE STORAGE 00138000 LR R7,R0 SAVE SIZE ALLOCATED 00139000 LR R9,R1 SAVE ADDRESS RETURNED 00140000 L R2,=V(SDISK) LOAD ADDRESS OF SYSTEM DISK ADT 00141000 LH R3,DTAD(,R2) SAVE SYSTEM DISK ADDRESS 00142000 LR R0,R13 R0 POINTS TO ACTIVE-DISK-TABLE, 00143000 OI ADTFLG3,ADTFORCE ENSURE S-DISK IS "READ-ONLY" @VM03029 00144000 LA R1,READFSTL R1 TO PARAMETER-LIST 00145000 L 15,=V(READFST) CALL 'READFST' TO READ PSTAT FROM 00146000 BALR R14,R15 S-DISK 00147000 EJECT 00148000 * NOW RE-INITIALIZE THE FREE STORAGE MANAGEMENT ... 00149000 * WE NOW RETURN LOW-CORE STORAGE TO DMSFRE, SO THAT WE CAN USE IT. 00150000 LR R0,R7 LOAD SIZE OF LOW-CORE STORAGE 00151000 LR R1,R9 LOAD ADDRESS OF LOW-CORE STORAGE 00152000 DMSFRET DWORDS=(0),LOC=(1),TYPCALL=BALR GO RETURN IT 00153000 L R0,ADTFSTC GET NUMBER OF FILES READ IN BY READFST 00154000 MH R0,=H'5' TIMES 5 GIVES NO. OF DBL-WORDS FOR SAME, 00155000 A R0,=F'2' PLUS 2 GETS EXACT SIZE NEEDED FOR SSTAT, 00156000 DMSFREE DWORDS=(0),TYPE=NUCLEUS,AREA=LOW,TYPCALL=BALR ALLOCATE 00157000 R1OK SLL R0,3 00158000 LR R3,R0 00159000 AR R3,R1 00160000 SH R3,=H'8' 00161000 XC 0(8,R3),0(R3) CLEAR LAST DOUBLE-WORD OF FREE STORAGE 00162000 ST R3,ASTATEXT STORE ADDRESS OF 'STATEXT' 00163000 L R5,ADTFDA START WITH TABLE PROVIDED TO READFST, 00164000 LA R5,8(,R5) SPACE OVER PRELIMINARY WORDS, 00165000 LA R6,40 40 BYTE ENTRIES 00166000 LR R4,R3 START WITH 40-BYTE 00167000 SR R4,R6 ENTRY AT THE END OF FREE STORAGE 00168000 LA R15,STR1SS FOR BCR BELOW, FOR MAXIMUM SPEED. 00169000 SLR R10,R10 FOR SPEED IN LOOP BELOW 00170000 LOOP1A LA R7,760(,R5) R5+760 = LIMIT FOR BXLE LOOP 00171000 LOOP2 CL R10,0(,R5) IS ENTRY = ZERO ? 00172000 BCR 8,R15 'BZ STR1SS' IF YES. 00173000 MVC 0(40,R4),0(R5) MOVE 40-BYTE ENTRY TO 'SSTAT', 00174000 MVI DMODE(R4),C'S' MAKE THIS PRETTY FOR VIEWERS 00175000 SR R4,R6 DECREMENT R4 BY 40 FOR NEXT TIME 00176000 BXLE R5,R6,LOOP2 ITERATE THRU EACH 800-BYTE BLOCK 00177000 L R5,0(,R5) POINTER TO NEXT ONE (IF ANY) 00178000 LTR R5,R5 ANY MORE 800-BYTE BLOCKS LEFT ? 00179000 BP LOOP1A BP IF YES, KEEP SEARCHING. 00180000 STR1SS ST R1,ASSTAT STORE ADDRESS OF 'SSTAT' 00181000 ST R1,ADTFDA ALSO STORE IN 'ADTS' TABLE. 00182000 OI ADTFLG1,ADTFFSTV SET SPECIAL FLAG-BIT FOR SSTAT SEARCH 00183000 NI ADTFLG1,255-ADTFFSTF TURN OFF FREE-STORAGE FLAG-BIT 00184000 ST R6,0(,R1) '40' INTO SSTAT, 00185000 AR R4,R6 POINT R4 TO THE LAST ENTRY WE STORED, 00186000 SR R3,R4 END - BEGINNING = SIZE 00187000 ST R3,4(,R1) SIZE IN BYTES INTO SSTAT+4 00188000 LR R0,R13 R0 MUST POINT TO S-DISK ADT, @V305032 00189000 L R15,=V(SORTFST) THEN SORT ALL THE FST ENTRIES @V305032 00190000 BALR R14,R15 (VIA SUBROUTINE IN DMSALU) @V305032 00191000 OI ADTFLG3,ADTFSORT AND SIGNAL 'SSTAT' IS SORTED. @V305032 00192000 B INITCONT SKIP 'SAVESYS' CODE (FOR A WHILE,ANYWAY) 00193000 DROP R13 V0218 00194000 EJECT 00195000 SAVESYS LA R0,16 FORCE TWO-ARGUMENT COMMAND LINE P3096 00196000 STM R0,R15,GPRLOG SAVE REGS FOR SAVED SYS IPL @VA13281 00196500 MVC SYSNAME(8),8(R1) SAVE NAME OF SAVED SYSTEM @VA03571 00197000 DC X'83100008' ISSUE 'SAVESYS' WITH USER'S INPUT P3096 00198000 * 00200000 * CMS STARTS HERE IF IPLING A SAVED SYSTEM 00201000 * 00202000 MVI DCSSFLAG,DCSSCLR CLEAR DCSS FLAGS @V305614 00203000 STM R0,R15,LOWSAVE SAVE CP 'IPL' PARMS @VA13281 00210000 LM R0,R15,GPRLOG RESTORE SAVED SYS REGS @VA13281 00210200 MVC IPLPARMS(64),LOWSAVE GET IPL PARMS @VA13281 00210400 SR R15,R15 INDICATE SAVESYS @VA13281 00210600 SPACE 1 00211000 INITCONT LA R6,PARMLEN GET LENGTH OF PARMS @V305066 00212000 LA R5,IPLPARMS POINT TO PARMS @V305665 00213000 INITLOOP EQU * @V305665 00214000 BAL R14,SKIPBLNK GO SKIP BLANKS @V305665 00215000 CLC 0(5,R5),BATCH IS KEYWORD BATCH? @V305614 00216000 BNE CHKSET BRANCH IF NOT @V305665 00217000 OI BATFLAGS,BATRUN+BATLOAD INDICATE BATCH @V305665 00218000 LA R14,KEYLEN GET LENGTH OF KEYWORD @V305066 00219000 AR R5,R14 SPACE OVER KEYWORD @V305665 00220000 SR R6,R14 AND BACK OFF @V305665 00221000 B INITLOOP LOOK FOR MORE @V305665 00222000 CHKSET EQU * @V305665 00223000 CLC 0(L'SEG,R5),SEG IS KEYWORD SEG? @V305665 00224000 BNE CHKAUTO BRANCH IF NOT, SEE IF "AUTOCR" @V60C6BE 00225000 LA R14,L'SEG GET KEYWORD LENGTH @V305665 00226000 AR R5,R14 SPACE OVER KEYWORD @V305665 00227000 SR R6,R14 BACK OFF KEYWORD LENGTH @V305665 00228000 L R14,ASYSNAMS POINT TO SYSNAMES TABLE @V305665 00229000 USING SYSNAMES,R14 @V305665 00230000 MVC CMSSEG,0(R5) MOVE IN SEGMENT NAME @V305665 00231000 DROP R14 @V305665 00232000 LA R3,EIGHT INSERT LENGTH OF NAME @V305665 00233000 AR R5,R3 ADD LENGTH OF NAME @V305665 00234000 SR R6,R3 BACK OFF NAME LENGTH @V305665 00235000 B INITLOOP @V305665 00236000 CHKAUTO CLC 0(L'AUTOPRM,R5),AUTOPRM AUTOCR OPTION @V60C6BE 00236100 BNE GETCON1 BRANCH IF NOT, IGNORE @V60C6BE 00236200 LA R14,L'AUTOPRM @V60C6BE 00236300 AR R5,R14 SPACE OVER KEYWORD @V60C6BE 00236400 SR R6,R14 BACK OFF KEYWORD LENGTH @V60C6BE 00236500 OI INSFLAG2,AUTOCR SET SPECIAL FLAG @V60C6BE 00236600 B INITLOOP LOOK FOR MORE @V60C6BE 00236700 GETCON1 EQU * @V305665 00237000 USING SYSNAMES,R3 @V305665 00238000 L R3,ASYSNAMS GET SYSNAMES TABLE ADDRESS @V305665 00239000 LA R3,CMSSEG GET ADDRESS OF NAMED SYSTEM @V305665 00240000 DROP R3 @V305665 00241000 LA R4,FINDSYS INDICATE FINDSYS @V305066 00242000 DC X'83340064' DIAGNOSE @V305665 00243000 CH R4,=H'44' WAS THE SEGMENT FOUND? @V305665 00244000 BE GETCON2 BRANCH IF NOT @VM03224 00245000 OI DCSSFLAG,DCSSAVAL INDICATE DCSS OK @V305665 00246000 ST R3,ACMSSEG SAVE DCSS ADDRESS @V305665 00247000 B GETCON @V305665 00248000 GETCON2 NI DCSSFLAG,255-DCSSAVAL RESTORE INDICATOR @V305614 00249000 GETCON SR R13,R13 ZERO OUT A REGISTER. V0218 00250000 BCTR R13,0 MAKE IT NEGATIVE. V0218 00251000 DC X'83DF0024' SPECIAL-FORM DEVTYPES DIAGNOSE. V0218 00252000 BNO SETCON SEEMS OK. V0218 00253000 MVC IONPSW,WAKEPSW SOME MONKEY BUSINESS NEEDED. V0218 00254000 LPSW WAITPSW V0218 00255000 WAKEHERE MVC IONPSW,NIOPSW SETUP NORMAL PSW. V0218 00256000 B GETCON TRY AGAIN. V0218 00257000 SETCON L R11,=V(CONSOLE) GET DEVTAB OFFSET. V0218 00258000 STH R13,0(,R11) PUT THE ADDRESS THERE. V0218 00259000 B TYPMSG GIVE STARTING MESSAGE V0254 00260000 EJECT 00261000 CKDDISK L R11,=V(DDISK) GET DEVTAB ENTRY ADDRESS 00262000 LA R3,DPLIST POINT TO OUR CURRENT WORK LIST 00263000 BAL R2,VERIFY ESTABLISH SOMETHING 00264000 BNZ CKYDISK GUESS NOT. 00265000 STC R13,WORKAREA STORE BYTE WHERE WE CAN TEST IT P3119 00266000 TM WORKAREA,MTDSK IS IT CP TEMP-SPACE? P3119 00267000 BNO CKDLAB NO. P3119 00268000 OI INSFLAG,TDSK REMEMBER THAT IT IS (FOR LATER) P3119 00269000 CKDLAB EQU * P3119 00270000 LA R14,LABCCWS POINT TO THE CCWS 00271000 ST R14,CAW REALLY POINT 00272000 DC X'83AE0020' SEE WHAT'S OUT THERE 00273000 BNZ NOREC3 RECORD 3 IS UNREADABLE P3119 00274000 CLC LABELR(4),DUMTDISK IS IT A CMS VOLUME? P3119 00275000 BNE SCRAPD NO. REMOVE IT FROM DEVICE-TABLE. P3119 00276000 OI INSFLAG,ACCD SIGNAL ACCESS REQUIRED. P3119 00277000 B CKYDISK CONTINUE. P3119 00278000 NOREC3 TM INSFLAG,TDSK WAS IT T-DISK SPACE? P3119 00279000 BNO SCRAPD INVALIDATE THE ADDRESS IN DEVTAB. P3119 00280000 OI INSFLAG,FORMD SIGNAL FORMAT REQUIRED. P3119 00281000 B CKYDISK CONTINUE. P3119 00282000 SCRAPD EX R0,REMOVE REMOVE ADDRESS FROM DEVTAB P3119 00283000 CKYDISK L R11,=V(YDISK) GET DEVTAB ENTRY FOR YDISK 00284000 LA R3,YPLIST POINT TO THE LATEST PLIST 00285000 BAL R2,VERIFY AND SEE WHAT'S OUT THERE 00286000 BNZ CKADISK NO Y DISK 00287000 OI INSFLAG,ACCY SIGNAL ACCESS Y WANTED 00288000 CKADISK L R11,=V(ADISK) POINT TO THE ADISK DEVTAB ENTRY 00289000 LA R3,WORKAREA-8 DUMMY PLIST (SPECIAL CASE FOR ADISK) 00290000 BAL R2,VERIFY FIND OUT WHICH IF ANY 00291000 OI INSFLAG,ACCA SIGNAL THAT THERE IS AN ADISK 00292000 B TSTDISK ACCESS OR FORMAT AS SPECIFIED V0254 00293000 EJECT 00294000 TYPMSG LA R1,STARTMSG ANNOUNCE OURSELVES V0254 00295000 SVC 202 ... 00296000 TM BATFLAGS,BATRUN CMSBATCH IPL? V0742 00297000 BO BATNIP IF SO, NO TERMINAL READS V0742 00298000 L R4,AOPSECT POINT TO A USEFUL DSECT 00299000 USING OPSECT,R4 00300000 MVI CONRDCOD,C'U' SIGNAL UPPERCASE TRANSLATION WANTED 00301000 TM INSFLAG2,AUTOCR AUTOCR OPTION ? @V60C6BE 00301100 BO CORINIT BR YES, NO CONSOLE READ @V60C6BE 00301200 LA R1,CONREAD POINT TO THE READ PLIST 00302000 SVC 202 ... 00303000 LH R6,CONRDCNT GET BYTE-COUNT READ 00304000 LTR R0,R6 TEST IT 00305000 BZ CORINIT CONTINUE IF IT WAS A NULL-LINE 00306000 STC R6,CMNDINFO KEEP ACTUAL LINE LENGTH V0692 00307000 LA R1,CMNDLINE POINT TO IT 00308000 L R15,=V(DMSSCNN) GET ADDR OF SCAN ROUTINE 00309000 BALR R14,R15 SCAN THE INPUT LINE 00310000 CLC 0(8,R1),=CL8'SAVESYS' WAS IT 'SAVESYS'? 00311000 BE SAVESYS YES. BACKTRACK TO HANDLE CORRECTLY. 00312000 OI INSFLAG,GOTFIRST FIRST COMMAND EXISTS V0692 00313000 CLC 0(8,R1),=CL8'CMSBATCH' TRYING TO RUN BATCH? V0742 00314000 BNE CORINIT NO. CONTINUE @VM03203 00315000 NI INSFLAG,255-GOTFIRST AVOID STACKING BATCH TWICE @VM03203 00316000 OI BATFLAGS,BATRUN+BATLOAD INIT. BATCH FLAGS @VM03203 00317000 CLI 8(R1),FENCE SAVED SYSTEM NAME ENTERED? @VM03203 00318000 BE BATNIP IF NOT, CONTINUE AS USUAL... @VM03203 00319000 OI BATFLAG2,BATIPLSS IF SO, REMEMBER TO REIPL NAME @VM03203 00320000 LM R2,R3,8(R1) @VM03203 00321000 STM R2,R3,SYSNAME SAVE NAME OF SAVED SYS IN NUCON @VM03203 00322000 BATNIP EQU * INITIALIZE BATCH FLAGS, PLISTS @VM03203 00323000 MVC APLIST+8(40),BATCHA ACC 195 A - FOR BATCH @VM03203 00324000 B CORINIT ESTABLISH VIRTUAL-MACHINE SIZE 00325000 EJECT 00326000 * 00327000 * SUBROUTINE TO VERIFY EXISTENCE OF A PARTICULAR DISK, AND IF 00328000 * IT EXISTS, CONVERT THAT ADDRESS TO PRINTABLE HEX FORMAT 00329000 * ELSE, REMOVE THE DEVICE ADDRESS FROM THE DEVICE-TABLE 00330000 * 00331000 VERIFY LH R10,DTAD(,R11) GET DEVICE ADDRESS FROM DEVTAB 00332000 LTR R10,R10 IS THERE ANY (INITIALIZED AS X'FF')? 00333000 BCR 4,R2 NONE FOUND. 00334000 CH R10,=X'0191' IS IT THE 'A' DISK? @VA03369 00335000 BE NOCARE YES, DON'T DO DIAGNOSE @VA03369 00336000 DC X'83AD0024' FIND OUT ITS CHARACTERISTICS 00337000 BC 1,REMOVE NOT PRESENT, SO GET RID OF TELLTALES. 00338000 CLM R13,B'1000',MDASD IS IT AT LEAST A DASD DEVICE? 00339000 BNE REMOVE NO, FORGET IT. 00340000 NOCARE UNPK WORKAREA(5),DTAD(3,R11) CONVERT ADDR TO @VA03369 00341000 TR WORKAREA(4),HEXTBL-C'0' PRINTABLE HEX 00342000 MVC 8(3,R3),WORKAREA+1 PUT ADDR INTO INDICATED PLIST 00343000 SR R3,R3 SET ZERO RETURN CODE 00344000 BR R2 RETURN 00345000 REMOVE MVC 0(2,R11),=XL2'FFFF' COVER UP DETAB ADDRESS FIELD 00346000 LTR R2,R2 SET NON-ZERO RETURN CODE 00347000 BR R2 RETURN 00348000 SPACE 5 00349000 * SUBROUTINE TO SPACE OVER BLANKS 00350000 * 00351000 SKIPBLNK EQU * @V305665 00352000 CLI 0(R5),BLANK IS THIS BLANK? @V305665 00353000 BCR 7,R14 RETURN IF NOT @V305665 00354000 LA R5,1(,R5) POINT TO NEXT BYTE @V305665 00355000 BCT R6,SKIPBLNK AND LOOP @V305665 00356000 B GETCON QUIT IF NO MORE @V305665 00357000 * 00358000 * COMPUTE NUMBER OF BYTES PHYSICALLY PRESENT IN OUR REAL OR 00359000 * VIRTUAL CORE, AND STORE WHERE NEEDED IN NUCON... 00360000 * 00361000 CORINIT DC X'83DE0060' DIAGNOSE MACHINE SIZE @V305001 00362000 ST R13,VMSIZE STORE VIRTUAL MEMORY SIZE 00363000 ST R13,ALDRTBLS .. 00364000 * 00365000 * SOME CMS FREE STORAGE SHOULD BE RESERVED WHENEVER A GETMAIN 00366000 * MACRO IS ISSUED. AMOUNT DEPENDS ON VMSIZE, AS FOLLOWS: 00367000 * LESS THAN 512K: 6 PAGES; 512K OR ABOVE: 7 PAGES, @VA04911 00368000 * PLUS 1 PAGE FOR EACH ADDITIONAL 256K OVER 512K. @VA04911 00369000 * @VA04911 00370000 LR R15,R13 GET VMSIZE (IN BYTES) @VA04911 00371000 SL R15,=F'262144' SUBTRACT 256K BYTES @VA04911 00372000 SRL R15,18 NOW DIVIDE BY 256K @VA04911 00373000 LA R15,6(,R15) FINALLY, ADD SIX @VA04911 00374000 STH R15,FRERESPG AND SAVE IT IN NUCON @VA04199 00375000 L R14,F8192 ASSUME 2 PAGES OF LOADER TABLES P0515 00376000 C R13,MINSIZE IS THIS A "LARGE MACHINE" P0515 00377000 BNH SR1314 TRF IF NOT - USE 2 PAGES PER USUAL. 00378000 AH R14,H4096 BUT IF YES MAKE IT 3 PAGES = 12288 BYTES 00379000 * C R13,FOURMEG is it 4 megabytes or more? HRC371DS 00379100 * BL SR1314 no, so we are good to go HRC371DS 00379200 * L R14,K256 set LDRTBLS=64 pages (256K) HRC371DS 00379300 SR1314 SR R13,R14 decrement by LDRTBLS space HRC371DS 00380000 ST R13,FREELOWE INITIALIZE LOWEXT 00381000 SRL R14,12 MAKE THAT 8192 OR 12288 BYTES INTO PAGES 00382000 STC R14,ALDRTBLS STORE IN 1ST BYTE LDRTBLS @V305665 00383000 TM DCSSFLAG,DCSSAVAL IS DCSS PRESENT? @V305665 00384000 BZ CORINIT1 BRANCH IF NOT @V305665 00385000 CLC ACMSSEG,VMSIZE NAMED SYSTEM OVERLAP CMS? @V305665 00386000 BNL NOVLAP BRANCH IF NOT @V305665 00387000 NI DCSSFLAG,255-DCSSAVAL INDICATE NOT AVAILABLE @V305665 00388000 OI DCSSFLAG,DCSSOVLP INDICATE OVERLAP @V305665 00389000 B CORINIT1 @V305665 00390000 NOVLAP EQU * @V305665 00391000 L R14,ASYSNAMS POINT TO SEGMENT TABLE @V305665 00392000 USING SYSNAMES,R14 @V305665 00393000 ************************************************************** 00394000 * IT IS POSSIBLE THAT THE CP-OWNED VOLUME CONTAINING THE 00395000 * CMS SHARED SEGMENT IS NOT ATTACHED TO THE VIRTUAL MACHINE. 00396000 * THE FOLLOWING CODE VERIFIES THAT THE SEGMENT CAN ACTUALLY 00397000 * BE LOADED BY THE VIRTUAL MACHINE. 00398000 ************************************************************** 00399000 SR R2,R2 INDICATE SHARED COPY @V305614 00400000 LA R1,CMSSEG POINT TO SYSNAMES ENTRY @V305614 00401000 DC X'83120064' LOADSYS @V305614 00402000 BZ LSYSOK BRANCH IF LOAD IS OK @V305614 00403000 SPACE 1 00404000 NI DCSSFLAG,255-DCSSAVAL RESET AVAILABLE FLAG @V305614 00405000 B CORINIT1 AND SKIP PURGESYS @V305614 00406000 SPACE 1 00407000 LSYSOK LA R2,PURGESYS INDICATE PURGESYS @V305066 00408000 LA R1,CMSSEG POINT TO SYSNAMES ENTRY @V305614 00409000 DC X'83120064' PURGESYS @V305614 00410000 SPACE 1 00411000 CORINIT1 EQU * @V305665 00412000 SPACE 00413000 LA R1,TODAY @V305032 00414000 LA R2,TWENTY4 @V305066 00415000 DC X'8312000C' TELL ME THE TIME @V305032 00416000 STCK DOUBLE1 THEN GET TIME VIA "STCK" @V305032 00417000 MVC DATIPCMS(8),TODAY SAVE TODAY'S DATE IN NUCON @V305032 00418000 NC HOURS(8),=X'0F0F000F0F000F0F' @V305032 00419000 SR R0,R0 CLEAR REGISTERS FOR IC USE @V305032 00420000 SR R1,R1 ... @V305032 00421000 SR R2,R2 ... @V305032 00422000 IC R0,HOURS HOURS @V305032 00423000 IC R1,HOURS+1 ... @V305032 00424000 MH R0,TEN ... @V305032 00425000 AR R0,R1 ... @V305032 00426000 MH R0,SIXTY ... @V305032 00427000 IC R1,MINUTES MINUTES @V305032 00428000 IC R2,MINUTES+1 ... @V305032 00429000 MH R1,TEN ... @V305032 00430000 AR R1,R2 ... @V305032 00431000 AR R0,R1 ADD HOURS*60 AND MINUTES @V305032 00432000 MH R0,SIXTY ... @V305032 00433000 IC R1,SECONDS SECONDS @V305032 00434000 IC R2,SECONDS+1 ... @V305032 00435000 MH R1,TEN ... @V305032 00436000 AR R1,R2 SECONDS INTO R1 @V305032 00437000 AR R1,R0 ADD MINUTES*60 AND HOURS*3600 @V305032 00438000 S R1,=F'1' AVOID POSSIBLE ROUNDOFF ERROR @V305032 00439000 BNM MULTMIL OK IF NOT MINUS @VM03031 00440000 SR R1,R1 IF IT WAS 0000 HOURS, MAKE IT 0 @V305032 00441000 MULTMIL M R0,=F'1000000' TIMES A MILLION, @VM03031 00442000 SLDL R0,12 SHIFT - NOW IN 'STCK' FORM @V305032 00443000 STM R0,R1,DOUBLE2 SAVE IT @V305032 00444000 LM R0,R1,DOUBLE1 GET THE TIME FROM THE STCK @V305032 00445000 SL R1,DOUBLE2+4 SUB. LOW PART OF ELAPSED TIME @V305032 00446000 BC 2+1,SUBHIGH TRANSFER IF CC=2 OR 3 (CARRY) @VM03031 00447000 BCTR R0,0 FOR CC=1, DECR. HIGH ORDER PART @V305032 00448000 SUBHIGH SL R0,DOUBLE2 SUB. HIGH PART OF ELAPSED TIME @VM03031 00449000 SRDL R0,12+1 SHIFT TO OBTAIN MICROSECONDS / 2 @V305032 00450000 D R0,MICHOUR2 DIV. BY NO. MICROSEC IN HOUR / 2 @V305032 00451000 * NOTE - THROW AWAY THE REMAINDER 00452000 M R0,MICHOUR2 MULTIPLY QUOTIENT BY SAME NUMBER @V305032 00453000 SLDL R0,12+1 SHIFT BACK AGAIN @V305032 00454000 STM R0,R1,CLKVALMD SAVE PREVIOUS MIDNITE STCK VALUE @V305032 00455000 SPACE 00456000 * NOW INITIALIZE 'YYDDD' FIELD IN 'BGCOM' ... 00457000 LA R2,NONLEAP ASSUME IT'S NOT LEAP YEAR @V305032 00458000 PACK DOUBLE1(8),DATIPCMS+6(2) GET THE YEAR @V305032 00459000 CVB R1,DOUBLE1 ... @V305032 00460000 SR R0,R0 CLEAR, AND ... @V305032 00461000 D R0,=F'4' DIVIDE BY 4 @V305032 00462000 LTR R0,R0 CHECK THE REMAINDER @V305032 00463000 BNZ GETMONTH NONZERO = NOT LEAP YEAR @V305032 00464000 LA R2,LEAPYEAR WE GUESSED WRONG @V305032 00465000 GETMONTH PACK DOUBLE1(8),DATIPCMS(2) GET THE MONTH @V305032 00466000 CVB R1,DOUBLE1 ... @V305032 00467000 BCTR R1,0 MINUS ONE PLEASE @V305032 00468000 ALR R1,R1 TIMES 2 TO INDEX TABLE @V305032 00469000 AR R2,R1 AND ADD TO TABLE ADDRESS @V305032 00470000 PACK DOUBLE1(8),DATIPCMS+3(2) GET THE DAY @V305032 00471000 CVB R1,DOUBLE1 (1 TO 31) @V305032 00472000 AH R1,0(,R2) ADD MAGIC VALUE FROM TABLE @V305032 00473000 CVD R1,DOUBLE1 TO DECIMAL PLEASE (1 TO 366) @V305032 00474000 L R2,ABGCOM REFERENCE BGCOM @V305032 00475000 USING BGCOM,R2 ... @V305032 00476000 MVC MMDD(2),DATIPCMS GET CMSIPL MONTH @VA13783 00476300 MVC MMDD+2(2),DATIPCMS+3 SET CMSIPL DAY @VA13783 00476600 MVC YYDDD(2),DATIPCMS+6 MOVE IN THE YEAR, @V305032 00477000 UNPK YYDDD+2(3),DOUBLE1+5(3) PUT IN THE 'DDD', @V305032 00478000 OI YYDDD+4,SIGN AND FIX UP SIGN AS USUAL @V305066 00479000 DROP R2 @V305032 00480000 SPACE 00481000 L R15,=A(INITSUB) @V305032 00482000 ST R15,AUSRAREA SET BEGINNING OF USER AREA 00483000 ST R15,MAINHIGH AND HIGH END OF MAIN STORAGE 00484000 DMSFRES INIT2,TYPCALL=BALR SECOND DMSFRE INIT ROUTINE 00485000 * DETERMINE DEVICE-TYPE FOR CONSOLE 00486000 * 00487000 L R1,=V(CONSOLE) @VM03203 00488000 LH R13,0(,R1) GIVE CP THE CONS ADDR @VM03203 00489000 DC X'83D10024' DIAG FOR CONSOLE CLASS @VM03203 00490000 CLM R2,B'1000',GRAFCON TYPECLASS GRAPHICS? @VM03203 00491000 BE GRAFTYP YES ... BR @VM03203 00492000 CLM R2,B'1100',REMGRAF REMOTE DISPLAY TERMINAL ? @VM03203 00493000 BE GRAFTYP YES ... BR @VA12109 00494000 CLM R2,B'1000',CLASTERM REMOTE 3270? @VA12109 00494100 BNE NOTGRAF NO ... BR @VA12109 00494200 CLM R2,B'0100',TYP3275 REMOTE 3275? @VA12109 00494300 BE GRAFTYP YES ... BR @VA12109 00494400 CLM R2,B'0100',TYP3277 REMOTE 3277? @VA12109 00494500 BNE NOTGRAF NO ... BR @VA12109 00494600 GRAFTYP OI MISFLAGS,GRAFDEV SET GRAPHICS FLAG IN NUCON @VM03203 00495000 OI OPTFLAGS,NOVMREAD YES, SET NO AUTO READ FLAG @VM08878 00496000 L R13,AEXTSECT @VM08878 00497000 USING EXTSECT,R13 @VM08878 00498000 MVI TIMCHAR,0 NO BLIPS FOR TUBES @VM08878 00499000 TM BATFLAGS,BATRUN IS THIS BATCH MACHINE? @VA04734 00500000 BO SETTIME ENABLE TIMER FOR BATCH @VA04734 00501000 B CVTINT NORMAL CONSOLE CCW @VM08878 00502000 NOTGRAF OI MSGFLAGS,SPECLF USE SPECIAL LF IN CONS CCW @VM08878 00503000 L R13,AEXTSECT @VM03203 00504000 SETTIME EQU * @VA04734 00505000 MVC TIMER(4),TIMINIT AND SET INTERVAL TIMER FOR BLIP@VM03203 00506000 DROP R13 @VM03203 00507000 EJECT 00508000 CVTINT EQU * @VM03203 00509000 * 00510000 * INITIALIZE COMMUNICATION VECTOR TABLE (CVT) 00511000 * 00512000 USING CVTSECT,R14 00513000 L R14,=V(CMSCVT) A(CVT) 00514000 ST R14,ACMSCVT SETUP OS-LIKE CVT-POINTER P3116 00515000 SH R14,=H'8' POINT TO PREFIX AREA P3116 00516000 L R15,AUSRAREA GET BEGINNING OF USER STORAGE P3116 00517000 ST R15,CVTNUCB SET A(LOWEST POINT NOT IN NUCLEUS) 00518000 STIDP IPLPARMS STORE CPU ID @VA02548 00519000 MVC CVTMDL(2),IPLPARMS+4 STORE MODEL NUMBER @VA02548 00520000 MVC CVTMZ00(4),VMSIZE SET A(HIGHEST CORE LOCATION) 00521000 MVC PGMNPSW(8),ACVTOK IF PROG-INT...SKIP 'OI' INST. V0207 00522000 SXR F0,F0 ISSUE EXT-PREC. SUBTRACT... V0207 00523000 OI CVTOPTA,CVTXPFP BIT MEANS WE HAVE EXT-PREC HRDWRE V0207 00524000 CVTOK MVC PGMNPSW(8),APRG RESTORE REGULAR PGM-INT NEW PSW V0207 00525000 DROP R14 00526000 LA R14,SYSREF GET ADDRESS OF SYSREF 00527000 ST R14,ASYSREF SET INTO PERM CORE LOCATION 00528000 OI PROTFLAG,PRFTSYS SET TRANSIENT-SYSTEM FLAG-BIT @V305032 00529000 * TO MATCH "ACCESS" CMD IN TRANSIENT AREA. 00530000 LA R5,1 ASSUME NO FIRST COMMAND TO WORRY ABOUT 00531000 B CKDDISK VERIFY DISKS EXISTANCE V0254 00532000 TSTDISK SR R3,R3 CLEAR COMMAND COUNT REGISTER V0254 00533000 TM INSFLAG,ACCY WAS A YDISK REQUIRED? 00534000 BNO TESTA NO. GO HANDLE THE ADISK. 00535000 LA R1,YPLIST ACCESS THE YDISK. 00536000 SVC 202 ... 00537000 DC AL4(*+4) ERROR CONDITION IS IMMATERIAL 00538000 SPACE 1 HRC371DS 00539000 TESTA DS 0H HRC371DS 00539010 * Now we load GCCLIB and REXX into memory, establishing them HRC371DS 00539020 * as nucleus extensions. But RESLIB will first load GCCLIB HRC371DS 00539030 * into the user area, overlaying us (DMSINS). So we change HRC371DS 00539040 * the user area pointer in NUCON so that it does not overlay HRC371DS 00539050 * us. Yes, this is a kludge! I apologize profusely. HRC371DS 00539060 * MVC MAINHIGH(4),OUTOFWAY HRC371DS 00539070 * LA R1,GLOBALTX "GLOBAL TXTLIB GCCLIB" HRC371DS 00539080 * SVC 202 HRC371DS 00539090 * DC AL4(BADGLOB) error address HRC371DS 00539100 * MVC MAINHIGH(4),OUTOFWAY HRC371DS 00539110 * LA R1,RESLOAD "RESLIB LOAD GCCLIB" HRC371DS 00539120 * SVC 202 HRC371DS 00539130 * DC AL4(BADGCC) error address HRC371DS 00539140 * ST R1,DOSTRANS store GCC runtime addr here HRC371DS 00539150 * MVC MAINHIGH(4),OUTOFWAY HRC371DS 00539160 * MVC RESWHO(8),REXXNAME HRC371DS 00539170 * LA R1,RESLOAD "RESLIB LOAD DMSREX" HRC371DS 00539180 * SVC 202 HRC371DS 00539190 * DC AL4(BADREXX) error address HRC371DS 00539200 * MVC MAINHIGH(4),REALUSER restore user area address HRC371DS 00539210 * B THATSALL HRC371DS 00539220 BADGCC DS 0H HRC371DS 00539230 * MVC MAINHIGH(4),REALUSER restore user area address HRC371DS 00539240 * DMSERR TEXT='GCC runtime not available',NUM=098,LET=W HRC371DS 00539250 * B THATSALL HRC371DS 00539260 BADGLOB DS 0H HRC371DS 00539270 * DMSERR TEXT='GCCLIB TXTLIB not found',NUM=098,LET=W HRC371DS 00539280 * B THATSALL HRC371DS 00539290 BADREXX DS 0H HRC371DS 00539300 * MVC MAINHIGH(4),REALUSER restore user area address HRC371DS 00539310 * DMSERR TEXT='REXX executor not available',NUM=098,LET=W C371DS 00539320 THATSALL DS 0H HRC371DS 00539330 SPACE 1 HRC371DS 00539340 SR R0,R0 INITIALIZE FIRST COMMAND INDICATOR 00539350 TM INSFLAG,GOTFIRST WAS THERE A FIRST COMMAND? 00540000 BNO POINTA NO. WE'RE ALL SET THEN. 00541000 LA R0,CMNDLIST PICK UP THE SCANNED LINE POINTER 00542000 POINTA LA R1,APLIST POINT TO THE ADISK PLIST 00543000 SVC 202 ... 00544000 DC AL4(*+4) ERROR CONDITION IS IMMATERIAL 00545000 STM R0,R3,REGSAV SAVE AROUND SVT LOAD @V305614 00546000 SPACE 1 00547000 * IF NO CMSSEG IS AVAILABLE LOAD DMSSVT TEXT INTO FREE 00548000 * STORAGE. 00549000 TM DCSSFLAG,DCSSAVAL CMSSEG TO BE USED ? @V305614 00550000 BO SKLOAD YES, SKIP THE FOLLOWING @V305614 00551000 L R14,ASYSNAMS POINT TO SYSNAMES TABLE @VA04293 00552000 USING SYSNAMES,R14 ..... @VA04293 00553000 DMSERR NUM=100,LET=W,SUB=(CHARA,(R14)),TEXT='CMSSEG system namX00554000 e ''........'' not available' @VA04293 00555000 LA R1,SVTST POINT TO SVT STATE PLIST @V305614 00556000 L R15,ASTATE SEE IF DMSSVT TEXT EXISTS @V305614 00557000 BALR R14,R15 ..... @V305614 00558000 BNZ SKLOAD BR, IF NO OS SVC ALLOWED @V305614 00559000 SPACE 1 00560000 L R1,DUMMYAD TRY TO LOAD OS SIM. ABOVE US @VA05055 00561000 BAL R10,LOADSUB USE LOAD SUB ROUTINE... @VA05055 00562000 L R3,LOCCNT SEE HOW HIGH WE LOADED @VA05055 00563000 L R2,DUMMYAD AND SUBTRACT ORIGIN... @VA05055 00564000 SR R3,R2 ... @VA05055 00565000 LA R3,SEVEN(,R3) GET UP TO NEXT DWORD @VA05055 00566000 SRL R3,DIV8 CONVERT TO DWORDS @VA05055 00567000 LR R0,R3 FOR DMSFREE'S SAKE... @VA05055 00568000 DMSFREE DWORDS=(0),TYPCALL=BALR,AREA=HIGH,TYPE=NUCLEUS 00569000 LTR R15,R15 REQUEST GRANTED? @VA05055 00570000 BNZ SKLOAD IF NOT, DROP THRU @VA05055 00571000 SPACE 1 00572000 ST R0,OSMODLDW SAVE OS SIM.'S SIZE (DWORDS) @VA05055 00573000 ST R1,AOSMODL SAVE ADDRESS OF DMSSVT TEXT @V305614 00574000 LR R2,R1 SET ORIGIN (R3 HAS THE SIZE), @VM03029 00575000 SR R15,R15 MAKE SURE R15=0 (R14 IMMATERIAL) @VM03029 00576000 MVCL R2,R14 CLEAR AREA TO BE LOADED @VM03029 00577000 LA R10,FINALOAD TO DROP THRU AT END OF LOAD @VA05055 00578000 LOADSUB EQU * ENTER HERE FOR LOADING... @VA05055 00579000 LR R2,R1 NOW SET ORIGIN AGAIN; @VM03029 00580000 LA R14,MAXORG MAX ORIGIN LENGTH @VM03029 00581000 LA R1,LOADSTRT+7 POINT TO ORIGIN FIELD @V305614 00582000 SPACE 1 00583000 HALFBYTE SRDL R2,FOURBITS MOVE HALF BYTE TO R3 @V305614 00584000 SRL R3,RESTWORD MOVE TO LOW BYTE @V305614 00585000 STC R3,0(,R1) STORE FULL BYTE IN PLIST @V305614 00586000 BCTR R1,0 BET LOWER BYTE ADDRESS @V305614 00587000 BCT R14,HALFBYTE AND LOOP @V305614 00588000 SPACE 1 00589000 TR LOADSTRT,HEXTBL TRANSLATE TO EBCDIC @V305614 00590000 LA R1,LDPLIST POINT TO PLIST @V305614 00591000 STM R0,R15,RGPRS SAVE REGISTERS @V305614 00592000 OI MODFLGS,SYSLOAD ALLOW LOAD ABOVE FREELOWE @VA04666 00593000 L R15,=V(DMSLOA) GET ADDRESS OF LOADER @V305614 00594000 BALR R14,R15 AND LOAD DMSSVT @V305614 00595000 NI MODFLGS,255-SYSLOAD RESET LOADER FLAG @VA04666 00596000 LTR R15,R15 TEST FOR VALID LOAD @V305614 00597000 L R12,AUSRAREA RESTORE OUR ADDRESSABILITY @V305614 00598000 LM R0,R15,RGPRS RESTORE REGISTERS @V305614 00599000 BNZ SKLOAD ISSUE MESSAGE LATER @VM03024 00600000 BR R10 RETURN TO CALLER (OR DROP) @VA05055 00601000 FINALOAD EQU * HERE WHEN FINAL LOAD DONE @VA05055 00602000 OI DCSSFLAG,DCSSVTLD RUN UP THE FLAG @V305614 00603000 SPACE 1 00604000 SKLOAD LM R0,R3,REGSAV RESTORE REGISTERS @V305614 00605000 TM BATFLAGS,BATRUN BATCH RUNNING ? @V305614 00606000 BO TESTD IF SO, NO PROFILE PLEASE @V305614 00607000 LTR R0,R0 IS THERE A FIRST COMMAND? 00608000 BZ CKPROF NO. MAYBE THERE IS A PROFILE. 00609000 LR R0,R1 BETTER SAVE THIS INDICATOR FOR LATER 00610000 LA R1,ATTN1 POINT TO STACK PLIST 00611000 L R2,CMNDINFO POINT TO THE SCANNED LINE 00612000 ST R2,STCKINFO FOR ATTN 00613000 SVC 202 STACK IT 00614000 SR R5,R5 SIGNAL THAT THERE IS A USER FIRST COMMAND 00615000 LA R3,1(,R3) UP THE COMMAND-COUNT 00616000 LR R1,R0 WE CAN REMEMBER NOW 00617000 CKPROF LTR R1,R1 DID ACCESS FIND A PROFILE? 00618000 BNM TESTD APPARENTLY NOT 00619000 LA R1,ATTN1 POINT TO THE STACK PLIST 00620000 L R2,PROFINFO POINT TO PROFILE COMMAND 00621000 ST R2,STCKINFO IN ATTN PLIST 00622000 SVC 202 STACK IT 00623000 LA R3,1(,R3) UP THE COMMAND-COUNT 00624000 SPACE 1 HRC371DS 00624050 * If SYSPROF EXEC S exists, stack a line to execute it. HRC371DS 00624100 FSSTATE 'SYSPROF EXEC S' HRC371DS 00624150 LTR R15,R15 HRC371DS 00624200 BNZ TESTD no SYSPROF EXEC found HRC371DS 00624250 LA R1,ATTN1 point to the stack plist HRC371DS 00624300 L R2,SYSPINFO point to "EXEC SYSPROF" command HRC371DS 00624350 ST R2,STCKINFO put it in ATTN plist HRC371DS 00624400 SVC 202 stack "EXEC SYSPROF" lifo HRC371DS 00624450 LA R3,1(,R3) up the command-count HRC371DS 00624500 TESTD TM MISFLAGS,X'04' WAS NODISK SPECIFIED ? V0743 00625000 BO ENTERSYS YES..BR V0743 00626000 LA R2,5 MAX LGTH OF COMPARE @VA01116 00627000 CKACCD EX R2,COMPACC IS THE FIRST CMD ACCESS ? @VA01116 00628000 BE ISIT YES...BR @VA01116 00629000 BCT R2,CKACCD MAYBE AN ABBREVIATION @VA01116 00630000 B ACCDDSK NO...BR @VA01116 00631000 SPACE 1 00632000 COMPACC CLC CMNDLIST(1),=C'ACCESS' @VA01116 00633000 SPACE 1 00634000 USING NUCON,R2 THIS ELIMINATES AN LA INSTR. @VA01116 00635000 ISIT CLI CMNDLIST+1,C' ' MUST BE BLANK AFTER VALID ABBREV@VA01116 00636000 DROP R2 @VA01116 00637000 USING NUCON,0 @VA01116 00638000 BNE ACCDDSK BR IF NOT ACCESS CMD ABBREV. @VA01116 00639000 CLC CMNDLIST+8(3),=C'192' ACCESS 192 ? @VA01116 00640000 BE REMOVED BRANCH IF YES, NO AUTO D ACC @VA04755 00641000 CLC CMNDLIST+8(3),DEV191 ACCESS 191? @VA05919 00642000 BNE DACCESS NO, CHECK FOR DDISK @VA05919 00643000 CLC CMNDLIST+16(1),DSKA ACCESS ADISK? @VA05919 00644000 BE DACCESS YES, CHECK FOR DDISK @VA05919 00645000 L R2,=V(ADISK) IF FIRST COMMAND WAS AC 191 BUT @VA05919 00646000 XC 0(4,R2),0(R2) NOT A, DELETE DEFAULT ENTRY @VA05919 00647000 * FROM DEVTAB 00648000 DACCESS EQU * @VA05919 00649000 CLC CMNDLIST+16(1),DSKD WAS DDISK ACCESSED? @VA05919 00650000 BE BATSTACK YES, BYPASS AUTO FORMAT AND AUTO @VA05919 00651000 * ACCESS 00652000 ACCDDSK DS 0H @VA01116 00653000 TM INSFLAG,ACCD WAS 192 FORMATTED? @VA05919 00654000 BNO TESTFORM NOT READY FOR ACCESS @VA05919 00655000 LA R1,DPLIST POINT TO 'ACCESS D' 00656000 SVC 202 ... 00657000 DC AL4(*+4) ERROR CONDITION IS IMMATERIAL 00658000 B BATSTACK GO TO THE GOTO V0742 00659000 TESTFORM TM INSFLAG,FORMD WAS THE DDISK UNFORMATTED? 00660000 BNO BATSTACK ALMOST DONE IF NOT V0742 00661000 LA R1,ATTN1 POINT TO STACK PLIST 00662000 L R2,DINFO GET ADDRESS OF INFO 00663000 ST R2,STCKINFO INTO THE ATTN PLIST 00664000 SVC 202 ... 00665000 LA R3,1(,R3) UP THE COMMAND COUNT 00666000 B BATSTACK @VA04755 00667000 REMOVED EQU * @VA04755 00668000 CLI CMNDLIST+16,C'D' IS THIS THE 'D' DISK? @VA04755 00669000 BE BATSTACK BRANCH IF YES @VA04755 00670000 L R11,=V(DDISK) GET DEVTAB ENTRY ADDRESS @VA04755 00671000 EX R0,REMOVE REMOVE ADDRESS FROM DEVTAB @VA04755 00672000 BATSTACK EQU * STACK THE 'BATCH' COMMAND V0742 00673000 TM BATFLAGS,BATRUN BATCH IPL? V0742 00674000 BZ ENTERSYS IF NOT, PROCEED AS USUAL V0742 00675000 L R2,BATINFO V0742 00676000 ST R2,STCKINFO PROVIDE COMMAND LINE AND... V0742 00677000 LA R1,ATTN1 V0742 00678000 SVC 202 STACK 'BATCH' REQUEST V0742 00679000 SR R5,R5 SIGNAL USER COMMAND FOR DMSINT V0742 00680000 LA R3,1(,R3) COMMAND COUNT FOR DMSINT V0742 00681000 ENTERSYS TM DCSSFLAG,DCSSAVAL+DCSSVTLD OS SIMULATION OK ? @VM03024 00682000 BNZ OSOK YES, BRANCH @VM03024 00683000 DMSERR TEXT='CMS OS simulation not available',NUM=098,LET=W 00684000 ICM R1,ALL,AOSMODL GET OS SIMUL. ADDR @VA05055 00685000 BZ OSOK NOT THERE, DON'T FRET... @VA05055 00686000 L R0,OSMODLDW GET OS SIM LENGTH(DWORDS) @VA05055 00687000 DMSFRET DWORDS=(0),LOC=(1) @VA05055 00688000 SR R1,R1 @VA05055 00689000 ST R1,AOSMODL CLEAR OS SIM ADD @VA05055 00690000 OSOK LM R10,R12,JREGS RESTORE REGISTERS FOR DMSINT @VM03024 00691000 BR R12 BRANCH TO 'INITENTR'. 00692000 EJECT 00693000 H4096 DC H'4096' PAGE SIZE AS HALFWORD @V305001 00694000 F8192 DC A(8192) STANDARD LOADER TABLE ALLOC. @V305001 00695000 MINSIZE DC A(393216) MINIMUM CMS MACHINE SIZE @V305001 00696000 FOURMEG DC A(4194304) 4 megabyte machine size HRC371DS 00696100 K256 DC A(262144) 64 pages (256K) loader tbl alloc HRC371DS 00696200 DS 0F 00697000 APRG EQU * 00698000 DC H'4,0' 00699000 DC V(PRGINT) 00700000 ACVTOK DC X'00040000',A(CVTOK) (FOR COMPUTING EXT-PREC.) V0207 00701000 CVTXPFP EQU X'01' (EXT-PREC. BIT IN CVTOPTA)V0207 00702000 * 00703000 JREGS DC V(OPSECT) R10 00704000 DC V(FVS) R11 00705000 DC V(INIT) R12 00706000 * 00707000 DS 0D V0218 00708000 NIOPSW DC AL2(MCKM,0),V(IOINT) V0218 00709000 WAKEPSW DC AL1(0,MCKM,0,0),A(WAKEHERE) V0218 00710000 WAITPSW DC AL1(CHAN0,MCKM+WAIT,0,0),A(WAKEHERE) V0218 00711000 * 00712000 STARTMSG DC CL8'TYPLIN' 00713000 DC A(SYSTEMID-NUCON) 00714000 DC C'B' 00715000 DC AL3(32) 32 BYTES 00716000 * 00717000 * CCW-STRING TO READ IN RECORD 3 FROM T-DISK (IF FEASIBLE) ... 00718000 LABCCWS CCW X'07',BIN0,CC,6 SEEK 00719000 CCW X'31',CYL0,CC,5 SEARCH 00720000 CCW X'08',*-8,0,1 TIC BACK TO SEARCH 00721000 CCW X'06',LABELR,CC+SILI,16 READ 16 BYTES 00722000 CCW X'03',0,SILI,1 NO-OP. 00723000 * 00724000 BIN0 DC H'0000' 00725000 CYL0 DC H'0000' 00726000 HEAD0 DC H'0000' 00727000 REC3 DC X'03' 00728000 * 00729000 LABELR DC 2D'0' FIRST 16 BYTES OF RECORD 3 ARE READ IN HERE 00730000 DUMTDISK DC C'CMS=' ALL CMS LABELS START THIS WAY P3119 00731000 MTDSK EQU X'40' P3119 00732000 * 00733000 READFSTL DS 0F PLIST TO ACCESS ALL S2 FILES FROM S-DISK: @VM03029 00734000 DC CL8'READFST' 00735000 DC CL8'*' 00736000 DC CL8'*' 00737000 DC CL8'S2' @VM03029 00738000 DC 8X'FF' 00739000 * 00740000 LDPLIST DS 0F PLIST TO LOAD DMSSVT & FRIENDS @VM03154 00741000 DC CL8'LOAD' IN GOOD ORDER FOR PAGING PLEASE: @VM03154 00742000 DC CL8'DMSSVT' @VM03154 00743000 DC CL8'DMSSVN' @VM03154 00744000 DC CL8'DMSSMN' @VM03154 00745000 DC CL8'DMSSLN' @VM03154 00746000 DC CL8'DMSLGT' @VM03154 00747000 DC CL8'DMSOLD' @VM03154 00748000 DC CL8'DMSLSB' @VM03154 00749000 DC CL8'DMSLIB' @VM03154 00750000 DC CL8'DMSLSY' @VM03154 00751000 DC CL8'DMSSOP' @VM03154 00752000 DC CL8'DMSSQS' @VM03154 00753000 DC CL8'DMSSCT' @VM03154 00754000 DC CL8'DMSSBS' @VM03154 00755000 DC CL8'DMSSEB' @VM03154 00756000 DC CL8'DMSSBD' @VM03154 00757000 DC CL8'DMSSAB' @VM03154 00758000 DC CL8'(' @VM03154 00759000 DC CL8'NOMAP' @VM03154 00760000 DC CL8'ORIGIN' @VM03154 00761000 LOADSTRT DC CL8'0' @VM03154 00762000 DC 8X'FF' @VM03154 00763000 * 00764000 SVTST DS 0F PLIST FOR DMSSVT STATE @V305614 00765000 DC CL8'STATE' @V305614 00766000 DC CL8'DMSSVT' @V305614 00767000 DC CL8'TEXT' @V305614 00768000 DC CL2'*' @V305614 00769000 DC 6X'00' @V305614 00770000 DC 8X'FF' @V305614 00771000 * 00772000 HEXTBL DC C'0123456789ABCDEF' 00773000 * 00774000 DUMMYAD DC A(X'22000') LOAD OS SIM HERE FIRST ... @VA05055 00775000 * TO COMPUTE FREE STORAGE SIZE 00776000 WORKAREA DC D'0' 00777000 * 00778000 CLKCCW CCW 0,CURRDATE-NUCON,0,24 CHRONO READ CCW 00779000 * 00780000 APLIST DC CL8'ACCESS' 00781000 DC X'FEFFFFFF' 00782000 SPACE 1 00783000 BATCHA DC CL8'195' V0742 00784000 DC CL8'A' V0742 00785000 DC CL8'(' V0742 00786000 DC CL8'ERASE' V0742 00787000 DC 8X'FF' V0742 00788000 * 00789000 DPLIST DC CL8'ACCESS' 00790000 DC CL8'192' 00791000 DC CL8'D' 00792000 DC X'FFFFFFFF' 00793000 * 00794000 DPLIST1 DC CL8'FORMAT' 00795000 DC X'FEFFFFFF' 00796000 * 00797000 DINFO DC AL1(*-DPLIST1) 00798000 DC AL3(DPLIST1) 00799000 * 00800000 PROFLIST DC CL8'EXEC' 00801000 DC CL8'PROFILE' 00802000 DC X'FFFFFFFF' 00803000 * 00804000 PROFINFO DC AL1(*-PROFLIST) 00805000 DC AL3(PROFLIST) 00806000 * 00807000 BATLIST DC CL8'CMSBATCH' V0742 00808000 DC 8X'FF' V0742 00809000 * 00810000 BATINFO DC AL1(*-BATLIST) V0742 00811000 DC AL3(BATLIST) V0742 00812000 * 00813000 YPLIST DC CL8'ACCESS' 00814000 DC CL8'192' 00815000 DC CL8'Y/S' 00816000 DC CL8'*' 00817000 DC CL8'*' 00818000 DC CL8'Y2' 00819000 BIGTIME DC X'FFFFFFFF' 00820000 * HRC371DS 00820020 SYSPROF DC CL8'EXEC' plist for EXEC SYSPROF HRC371DS 00820030 DC CL8'SYSPROF' HRC371DS 00820040 DC 8X'FF' HRC371DS 00820050 SYSPINFO DC AL1(*-SYSPROF) HRC371DS 00820060 DC AL3(SYSPROF) plist to load GCCLIB runtime HRC371DS 00820070 RESLOAD DC CL8'RESLIB' HRC371DS 00820080 DC CL8'LOAD' HRC371DS 00820090 RESWHO DC CL8'GCCLIB' HRC371DS 00820100 DC CL8'(' HRC371DS 00820110 DC CL8'PERM' HRC371DS 00820120 DC 8X'FF' HRC371DS 00820130 GLOBALTX DC CL8'GLOBAL' plist to access GCCLIB TXTLIB HRC371DS 00820140 DC CL8'TXTLIB' HRC371DS 00820150 DC CL8'GCCLIB' HRC371DS 00820160 DC 8X'FF' HRC371DS 00820170 REXXNAME DC CL8'DMSREX' HRC371DS 00820180 OUTOFWAY DC AL4(139264) relocate user area to x22000 HRC371DS 00820190 REALUSER DC AL4(131072) real user area is at x20000 HRC371DS 00820200 * 00821000 ATTN1 DC CL8'ATTN' 00822000 DC CL4'LIFO' 00823000 STCKINFO DC AL1(16) 00824000 DC AL3(DPLIST1) 00825000 * 00826000 CMNDINFO DC AL1(130) 00827000 DC AL3(CMNDLINE-NUCON) 00828000 * 00829000 * THE FOLLOWING 5 MUST BE KEPT IN ORDER (USED VIA 'LM) .. 00830000 FREEADS DC V(NUCEND) R7 00831000 DC A(ENDSYS) R8 00832000 DC F'1' R9 00833000 ZERO DC F'0' R10 00834000 DC A(X'40000'-ENDSYS) R11 00835000 * 00836000 IPLPARMS DC D'0' KEEP CP IPL PARMS HERE V0742 00837000 DC 7D'0' ADDITIONAL PARMS @VA12042 00838000 FENCE EQU X'FF' 00839000 DMODE EQU 24 MODE IS 24 BYTES FROM BEGINNING 00840000 EIGHT EQU 8 @V305665 00841000 DIV8 EQU 3 @V305614 00842000 MAXORG EQU 8 @V305614 00843000 FOURBITS EQU 4 @V305614 00844000 RESTWORD EQU 28 @V305614 00845000 TWENTY4 EQU 24 @V305066 00846000 SIGN EQU X'F0' @V305066 00847000 BIN1000 EQU B'1000' @V305066 00848000 PARMLEN EQU 30 @V305066 00849000 KEYLEN EQU 5 @V305066 00850000 FINDSYS EQU 12 @V305066 00851000 PURGESYS EQU 8 @V305066 00852000 SEVEN EQU 7 @VA05055 00853000 ALL EQU 15 @VA05055 00854000 * 00855000 RGPRS DC 16F'0' REGISTER SAVE AREA @V305614 00856000 REGSAV DC 4F'0' .. AND ANOTHER @V305614 00857000 DCSSCLR EQU 0 @V305614 00858000 SY DC C'SY' 00859000 * 00860000 MDASD DC X'04' 00861000 * 00862000 DS 0F @V305665 00863000 SEG DC C'SEG=' @V305665 00864000 BATCH DC C'BATC' @V305614 00865000 BATH DC C'H' @V305614 00866000 BLANK EQU C' ' @V305665 00867000 INSFLAG DC X'00' 00868000 DEV191 DC C'191' DEVICE 191 @VA05919 00869000 DSKA DC C'A' A-DISK @VA05919 00870000 DSKD DC C'D' D-DISK @VA05919 00871000 * 00872000 ACCD EQU X'80' 00873000 FORMD EQU X'40' 00874000 ACCY EQU X'20' 00875000 ACCA EQU X'10' 00876000 GOTFIRST EQU X'08' 00877000 TDSK EQU X'04' P3119 00878000 GRAFCON DC X'40' @VM08878 00879000 REMGRAF DC X'8080' @V2D3914 00880000 TYP3275 DC X'02' @VA12109 00880020 TYP3277 DC X'04' @VA12109 00880040 CLASTERM DC X'80' @VA12109 00880060 AUTOPRM DC C'AUTOCR' @V60C6BE 00880100 INSFLAG2 DC X'00' A NEW FLAG BYTE @V60C6BE 00880200 AUTOCR EQU X'80' AUTOCR SPECIFIED AS PARM @V60C6BE 00880300 SPACE 00881000 TODAY DC 4D'0' @V305032 00882000 HOURS EQU TODAY+8 @V305032 00883000 MINUTES EQU TODAY+11 @V305032 00884000 SECONDS EQU TODAY+14 @V305032 00885000 DOUBLE1 DC D'0' @V305032 00886000 DOUBLE2 DC D'0' @V305032 00887000 MICHOUR2 DC F'1800000000' NO. MICROSEC IN ONE HOUR / 2 @V305032 00888000 TEN DC H'10' @V305032 00889000 SIXTY DC H'60' @V305032 00890000 NONLEAP DC AL2(0,31,59,90,120,151,181,212,243,273,304,334) @V305032 00891000 LEAPYEAR DC AL2(0,31,60,91,121,152,182,213,244,274,305,335) @V305032 00892000 SPACE 00893000 LTORG @V305032 00894000 ENDSYS DS 0D FREE STORAGE CAN START RIGHT HERE. 00895000 ENTRY DMSINSE 00896000 DMSINSE EQU * 00897000 EJECT 00898000 EQUATES 00899000 REGEQU 00900000 NUCON 00901000 BGCOM , @V305032 00902000 SYSNAMES @V305665 00903000 IO 00904000 ADT 00905000 CMSCVT 00906000 EXTSECT @VM08878 00907000 END 00908000