OR1 TITLE 'DMSOR1 (CMS) VM/370 - RELEASE 6' 00001000 SPACE 2 00002000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00003000 * * 00004000 * MODULE NAME: * 00005000 * DMSOR1 * 00006000 * * 00007000 * FUNCTION: * 00008000 * THE FUNCTION OF DMSOR1 IS TO RELOCATE ALL DTF TABLE * 00009000 * ADDRESS CONSTANTS FROM THE ASSEMBLED ADDRESSES TO * 00010000 * EXECUTABLE STORAGE ADDRESSES. THIS IS ACCOMPLISHED BY * 00011000 * SUBTRACTING FROM THE BAL ADDRESS PROVIDED BY THE * 00012000 * OPENR MACRO IN REGISTER 0 A FOUR BYTE ASSEMBLED * 00013000 * ADDRESS CONSTANT OF THE BAL ADDRESS. ANY DIFFERENCE * 00014000 * INDICATES THAT THE PROGRAM HAS BEEN RELOCATED. * 00015000 * * 00016000 * ATTRIBUTES: * 00017000 * DISCONTIGUOUS SHARED SEGMENT * 00018000 * REENTRANT * 00019000 * * 00020000 * ENTRY POINTS: * 00021000 * DMSOR1 * 00022000 * * 00023000 * ENTRY CONDITIONS: * 00024000 * DMSOR1 IS INVOKED IN RESPONSE TO AN SVC 2 (FETCH) * 00025000 * FROM A PROBLEM PROGRAM. AT ENTRY TO DMSOR1, R0 POINTS * 00026000 * TO AN ASSEMBLED ADDRESS CONSTANT FOLLOWED BY A LIST OF * 00027000 * DTF TABLES THAT REQUIRE ADDRESS MODIFICATION. * 00028000 * * 00029000 * EXIT CONDITIONS: * 00030000 * * 00031000 * NORMAL EXITS: * 00032000 * SVC 2 TO $$BOPEN TO OPEN THE DTFS * 00033000 * AFTER THE ADCONS HAVE BEEN MODIFIED. * 00034000 * * 00035000 * SVC 2 TO $$BOPNR3(DMSOR3) IF MORE * 00036000 * ADCONS REMAIN TO BE MODIFIED. * 00037000 * * 00038000 * ABNORMAL EXITS: * 00039000 * * 00040000 * SVC 6 (CANCEL) ON ERROR CONDITION * 00041000 * THAT DTF IS UNSUPPORTED DTF TYPE. * 00042000 * * 00043000 * ERROR MESSAGES ISSUED BY THIS PROGRAM: * 00044000 * * 00045000 * DMSOR1088E UNSUPPORTED DTF TYPE 'DTF TYPE' * 00046000 * * 00047000 * EXPLANATION: CMS/DOS SUPPORTS ONLY * 00048000 * THOSE DTF TYPES INDICATED IN THE * 00049000 * SPECIFICATION. * 00050000 * * 00051000 * SYSTEM ACTION: * 00052000 * SVC 6 (CANCEL) * 00053000 * * 00054000 * USER ACTION: SPECIFY A VALID DTF * 00055000 * TYPE AS THE OBJECT OF YOUR OPENR * 00056000 * MACRO. * 00057000 * * 00058000 * CALLS TO OTHER ROUTINES: * 00059000 * DMSOR3 (SVC 2) * 00060000 * DMSBOP (SVC 2) * 00061000 * DMSFREB * 00062000 * * 00063000 * EXTERNAL REFERENCES: * 00064000 * REGEQU, NUCON * 00065000 * * 00066000 * CALLED BY: * 00067000 * INVOKED IN RESPONSE TO SVC 2 (FETCH FOR $$BOPENR * 00068000 * (DMSOR1)) * 00069000 * * 00070000 * TABLES AND WORK AREAS: * 00071000 * ADCON TABLE - A TABLE CONSISTING OF INDIVIDUAL TABLES * 00072000 * USED TO MODIFY DIFFERENT DTF TYPES. EACH* 00073000 * HAS A UNIQUE NAME TO IDENTIFY IT. * 00074000 * EACH TABLE HAS THE FOLLOWING LAYOUT: * 00075000 * * 00076000 * BYTE 1 CONTAINS THE COUNT OF ADCONS * 00077000 * TO BE MODIFIED. * 00078000 * * 00079000 * BYTE 2 CONTAINS THE BYTE COUNT FROM * 00080000 * THE LOGIC MODULE ADDRESS TO * 00081000 * THE FIRST ADCON. * 00082000 * * 00083000 * SUBSEQUENT BYTES CONTAIN THE BYTE * 00084000 * COUNT NEEDED TO ADDRESS THE NEXT * 00085000 * ADCON. * 00086000 * * 00087000 * REGISTER USAGE: * 00088000 * * 00089000 * TABLEREG - 0 TABLE PARAMETER - INPUT * 00090000 * BASEREG - 3 DTF TABLE ADDRESS * 00091000 * MODREG - 4 DTF TABLE ADDRESS CONSTANT DISP. TABLE* 00092000 * R5 - 5 FREE STORAGE POINTER * 00093000 * COUNTREG - 6 COUNT OF DTF ADCONS TO BE CHANGED * 00094000 * LINKREG - 7 LINK REGISTER TO ADDRESS MOD. RTN. * 00095000 * TYPEREG - 8 USED TO DETERMINE DTF TYPE * 00096000 * DTFREG - 9 DTF TYPE TABLE * 00097000 * CCWREG - 10 POINTER TO START OF EACH DTF TABLE * 00098000 * WORKREG1 - 11 TABLE PARAMETER WORK REGISTER * 00099000 * R12 - BASE REGISTER * 00100000 * RELOCREG - 13 RELOCATION FACTOR * 00101000 * R14 - UNUSED * 00102000 * ADDRREG - 15 ADDRESS CONSTANT RELOCATE REGISTER * 00103000 * * 00104000 * OPERATION: * 00105000 * DMSOR1 PERFORMS THE FOLLOWING FUNCTIONS: * 00106000 * 1. DETERMINES IF RELOCATION IS RE- * 00107000 * QUIRED. IF NOT EXIT IS MADE TO * 00108000 * $$BOPEN TO OPEN THE FILE. * 00109000 * * 00110000 * 2. IF ADDRESS MODIFICATION IS RE- * 00111000 * QUIRED, THE CCB AND LOGIC MODULE* 00112000 * ADDRESSES WHICH ARE COMMON TO * 00113000 * ALL DTFS ARE MODIFIED. * 00114000 * * 00115000 * * 00116000 * 3. DETERMINES WHAT DTF TYPE IS THE * 00117000 * OBJECT OF THE OPENR MACRO. * 00118000 * * 00119000 * IF UNIT RECORD DTF TYPE, ISSUES * 00120000 * SVC 2 TO FETCH $$BOPNR3 TO * 00121000 * CONTINUE ADDRESS MODIFICATION. * 00122000 * * 00123000 * IF DTFCP OR DTFDI, ISSUES SVC 2 * 00124000 * TO FETCH $$BOPNR3 TO CONTINUE * 00125000 * ADDRESS MODIFICATION. * 00126000 * * 00127000 * ALL OTHER DTF TYPES - INCLUDING* 00128000 * DTFMT AND DTFSD - ADDRESS * 00129000 * MODIFICATION IS PERFORMED IN * 00130000 * THIS ROUTINE. * 00131000 * * 00132000 * 4. A CHECK IS MADE TO SEE IF MORE * 00133000 * FILES REMAIN TO BE OPENED. IF * 00134000 * SO, ADDRESS MODIFICATION IS PER-* 00135000 * FORMED ON THOSE DTFS AND THEN AN* 00136000 * SVC 2 IS ISSUED TO FETCH $$BOPEN* 00137000 * TO PERFORM THE ACTUAL OPEN. * 00138000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00139000 DMSOR1 CSECT @V305066 00140000 TABLEREG EQU 0 POINTER TO TABLE SUPPLIED BY OPENR MACRO @V305066 00141000 GR1 EQU 1 WORK REGISTER @V305066 00142000 GR2 EQU 2 WORK REGISTER @V305066 00143000 TYPEREG EQU 2 @V305066 00144000 BASEREG EQU 3 CONTAINS ADDRESS OF THE ACTIVE DTF TABLE @V305066 00145000 MODREG EQU 4 CONTAINS ADDRESS OF DTF DISPLACEMENT TABLE @V305066 00146000 ADDRREG EQU 15 REGISTER USED TO RELOCATE ADDRESS CONSTANTS@V305066 00147000 COUNTREG EQU 6 CONTAINS COUNT OF ADDRESSES TO BE MODIFIED @V305066 00148000 LINKREG EQU 7 LINK REGISTER @V305066 00149000 LINKREG2 EQU 8 INTERNAL BRANCH REGISTER @V305066 00150000 DTFREG EQU 9 DTF TYPE TABLE @V305066 00151000 CCBREG EQU 10 POINT TO DTFDA BUILDING ROUTINE @V305066 00152000 WORKREG1 EQU 11 POINTER TO DTF TABLE LIST @V305066 00153000 RELOCREG EQU 13 REGISTER CONTAINS THE RELOCATION FACTOR @V305066 00154000 RGE EQU 14 WORK REGISTER @V305066 00155000 CCWREG EQU CCBREG @V305066 00156000 DC CL8'$$BOPENR' @V305066 00157000 USING NUCON,R0 NUCON ADDRESSABILITY @V305066 00158000 USING FREE,R5 ESTABLISH FREE STOR ADD @V305066 00159000 BALR R12,0 ESTABLISH OWN ADDRESSABILITY@V305066 00160000 USING *,R12 @V305066 00161000 LR R2,R0 SAVE R0 TEMPORARILY @V305066 00162000 LA R0,5 5 DBLEWDS FREE STORAGE @V305066 00163000 DMSFREE DWORDS=(0),TYPE=NUCLEUS,TYPCALL=BALR @V305066 00164000 LR R5,R1 FREE STOR ADD IN R5 @V305066 00165000 MVC SEQIN(23),SEQINA MVE DTFSD TABLES TO FREE @V305066 00166000 XC ADRSW(6),ADRSW ZERO TWO SWITCH BYTES @V305066 00167000 MVC BOPEN(8),OPENMON OPEN MONITOR @V305066 00168000 LR R0,R2 RESTORE R0 @V305066 00169000 EJECT 00170000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00171000 * THE ADDRESS OF THE DTF TABLE ADDRESSES IS PASSED IN REGISTER 0. * 00172000 * THE RELOCATION FACTOR IS DETERMINED BY SUBTRACTING THE ASSEMBLED * 00173000 * DTF TABLE ADDRESS FROM THE RELOCATED DTF TABLE ADDRESS. IF THE * 00174000 * DIFFERENCE IS ZERO, NO RELOCATION IS NECESSARY, THEREFORE THE OPEN * 00175000 * TRANSIENT IS CALLED IMMEDIATELY. * 00176000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00177000 SPACE 2 00178000 LR WORKREG1,TABLEREG PTR TO ASSEMBLE ADCON @V305066 00179000 LA TABLEREG,0(WORKREG1) CLEAR CONDITION CODE @V305066 00180000 LR RELOCREG,TABLEREG @V305066 00181000 LR BASEREG,TABLEREG LOAD BAL ADDRESS @V305066 00182000 LA WORKREG1,4(WORKREG1) ADD 4 TO PT DTF TABLE ADDR @V305066 00183000 LR TABLEREG,WORKREG1 RESTORE TABLEREG @V305066 00184000 S RELOCREG,0(RELOCREG) DETERMINE RELOCATION FACTOR@V305066 00185000 BZ EXIT NO RELOC., GO TO OPEN @V305066 00186000 EJECT 00187000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00188000 * THE FOLLOWING CODE MODIFIES THE CCB AND LOGIC MODULE ADDRESS WHICH * 00189000 * IS COMMON TO ALL DTF TABLES. THIS CAUSES THE POINTER --BASEREG-- * 00190000 * TO BE POINTING AT THE LOGIC MODULE ADDRESS WITHIN THE DESIRED DTF * 00191000 * TABLE. * 00192000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00193000 SPACE 2 00194000 NEXT LA LINKREG2,MODEXIT LOAD BRANCH REGISTER @V305066 00195000 L BASEREG,0(WORKREG1) LOAD DTF ADDRESS @V305066 00196000 TM 16(BASEREG),RELOC HAS TABLE BEEN RELOCATED ? @V305066 00197000 BO RETURN BRANCH IF RELOCATED @V305066 00198000 LA MODREG,COMMON LOAD ADDRESS OF COMMON TABLE@V305066 00199000 LR CCWREG,BASEREG PT CCW REG TO BEG OF TABLE @V305066 00200000 OI ADRSW,ON SET SW TO BYPASS ZERO TEST @V305066 00201000 IC RGE,16(CCWREG) SAVE OPEN ,CLOSE INDICATOR @V305066 00202000 BAL LINKREG,MODLOOP BR TO MOD SUBROUTINE @V305066 00203000 STC RGE,16(CCWREG) RESTORE OPEN,CLOSE INDICATOR@V305066 00204000 OI 16(CCWREG),RELOC TURN ON RELOC. BIT IN DTF @V305066 00205000 NI ADRSW,255-ON SET SWITCH TO ALLOW ZERO TES@V305066 00206000 EJECT 00207000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00208000 * EACH DTF TYPE HAS IN ITS TABLE A UNIQUE CODE LOCATED IN DECIMAL * 00209000 * BYTE 20. THIS CODE IS USE TO DETERMINE WHICH DTF TYPE IS TO BE * 00210000 * RELOCATED. * 00211000 * SOME EXITS FROM THIS DECODE ARE TO ROUTINES THAT FURTHER DECODE THE * 00212000 * DTF TYPE. TWO EXAMPLES OF THIS ARE TO THE UNIT RECORD AND MAGNETIC * 00213000 * TAPE DECODES. * 00214000 * AFTER THE DTF TYPE IS ESTABLISHED EXITS TO THE ADDRESS MODIFICATION * 00215000 * SUBROUTINE ARE IN ONE OF TWO FORMS. * 00216000 * THE FIRST FORM IS A BRANCH INSTRUCTION. THIS WILL CAUSE THE ADDRESS* 00217000 * MODIFICATION SUBROUTINE TO EXIT TO THE ENDING ROUTINE. THE ENDING * 00218000 * ROUTINE WILL DETERMINE IF ADDITIONAL DTF TABLES NEED MODIFICATION. * 00219000 * THE SECOND FORM IS A BRANCH AND LINK. THIS WILL CAUSE THE ADDRESS * 00220000 * MODIFICATION SUBROUTINE TO RETURN TO THE NEXT SEQUENTIAL INSTRUCTION* 00221000 * THIS IS NEEDED BECAUSE OF ADDITIONAL CHECKS WITHIN THE TABLE TO * 00222000 * DETERMINE IF FURTHER ADDRESS MODIFICATION IS NEEDED. FOLLOWING THE * 00223000 * LAST BAL WILL BE A BRANCH TO THE ENDING ROUTINE. * 00224000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00225000 SPACE 2 00226000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00227000 * DTF TYPES X'02' - READER, X'03' - CONSOLE, X'04' - PUNCH, AND 00228000 * X'08' - PRINTER 00229000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00230000 SPACE 2 00231000 CLI 4(BASEREG),DTFCDR CARD READER? @V305066 00232000 BE NOTFOUND DTF TYPE IS CARD READER @V305066 00233000 CLI 4(BASEREG),DTFCN CONSOLE ? @V305066 00234000 BE NOTFOUND DTF TYPE IS CONSOLE @V305066 00235000 CLI 4(BASEREG),DTFCDP PUNCH ? @V305066 00236000 BE NOTFOUND DTF TYPE IS PUNCH @V305066 00237000 CLI 4(BASEREG),DTFPR PRINTER ? @V305066 00238000 BE NOTFOUND DTF TYPE IS PRINTER @V305066 00239000 SPACE 2 00240000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00241000 * DTF TYPE 10 TO 11 IS MAGNETIC TAPE * 00242000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00243000 SPACE 2 00244000 CLI 4(BASEREG),DTFMTW DTF TYPE IS TAPE WORK FILE @V305066 00245000 BE MAGTAPE NOLAB/NSTD @V305066 00246000 CLI 4(BASEREG),DTFMTNO DTF TYPE IS TAPE DATA FILE @V305066 00247000 BE MAGTAPE YES @V305066 00248000 CLI 4(BASEREG),DTFMTSO STD LABEL OUTPUT @V305066 00249000 BE MAGTAPE YES @V305066 00250000 CLI 4(BASEREG),DTFMTSI STD LABEL INPUT @V305066 00251000 BE MAGTAPE YES @V305066 00252000 SPACE 2 00253000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00254000 * DTF TYPE 20 IS DTFSD * 00255000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00256000 SPACE 2 00257000 CLI 4(BASEREG),DTFSD DISK? @V305066 00258000 BE SEQDISK DTF TYPE IS DTFSD @V305066 00259000 SPACE 2 00260000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00261000 * DTF TYPE 31 TO 33 DTFCP AND DTFDI * 00262000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00263000 SPACE 2 00264000 CLI 4(BASEREG),DTFCPT DTFCP TAPE FILE @V305066 00265000 BL BADDTF INVALID DTF TYPE @V305066 00266000 CLI 4(BASEREG),DTFDI DTFDI @V305066 00267000 BNH NOTFOUND GO TO NEXT ROUTINE @V305066 00268000 BADDTF EQU * INVALID DTF TYPE @VA10248 00269000 B ERR88E PRINT INVALID DTF MSG @V305066 00270000 EJECT 00271000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00272000 * MAGNETIC TAPE DECODE DTFMT * 00273000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00274000 SPACE 2 00275000 MAGTAPE CLI 4(BASEREG),DTFMTW DTFMT - WORK FILES ? @V305066 00276000 LA MODREG,MAGWORK ADDR OF DTFMT WORK TABLE @V305066 00277000 BCR 8,LINKREG2 BRANCH IF WORK FILE @V305066 00278000 LA MODREG,MAGDATA ADDR. OF DTFMT DATA TABLE @V305066 00279000 BAL LINKREG,MODLOOP MOD ADDRS. RETURN TO NSI @V305066 00280000 TM 0(BASEREG),FIXED TEST DTFMT REC TYPE FOR FIX @V305066 00281000 BM MAGTAPE1 BR IF NOT FIXED @V305066 00282000 BAL LINKREG,MODLOOP BR TO MODIFY ADDRESSES @V305066 00283000 TM 21(CCWREG),INPUT TEST IF INPUT FILE @V305066 00284000 BZ MAGTAPE5 BRANCH IF OUTPUT FILE @V305066 00285000 CLI 12(BASEREG),BRINST TEST IF BR. INSTRUCTION @V305066 00286000 BE RETURN YES, BRANCH @V305066 00287000 BAL LINKREG,MODLOOP MODIFY WLR ADDRESS @V305066 00288000 CLI 4(BASEREG),BRINST TEST FOR BRANCH INSTRUCTION @V305066 00289000 BE RETURN YES, BRANCH @V305066 00290000 BR LINKREG2 MODIFY ERROPT ADDRESS @V305066 00291000 MAGTAPE5 LA MODREG,MAGFIX3 POINT TO TABLE @V305066 00292000 TM 2(CCWREG),ERROPT ERROPT ROUTINE @V305066 00293000 BZ RETURN BRANCH IF NO @V305066 00294000 TM 32(CCWREG),STDLAB STANDARD LABELS @V305066 00295000 BCR 8,LINKREG2 NO, RELOCATE ERROPT ADDRESS @V305066 00296000 LA MODREG,MAGFIX4 YES, POINT TO TABLE @V305066 00297000 BR LINKREG2 RELOCATE ERROPT ADDRESS @V305066 00298000 MAGTAPE1 LA MODREG,MAGVAR PROCESS VAR REL TABLE @V305066 00299000 TM 0(BASEREG),VAR TES VAR RECORD BIT @V305066 00300000 BZ MAGTAPE2 BRANCH IF RECORDS ARE UNDEF @V305066 00301000 BAL LINKREG,MODLOOP BR TO MODIFY ADDRESSES @V305066 00302000 LA BASEREG,16(BASEREG) ADD TEN TO BASE REG @V305066 00303000 TM 21(CCWREG),INPUT TEST IF INPUT FILE @V305066 00304000 BZ MAGTAPE6 BRANCH IF OUTPUT FILE @V305066 00305000 CLI 0(BASEREG),BRINST TEST FOR BRANCH INSTRUCTION @V305066 00306000 BE RETURN YES, BRANCH @V305066 00307000 BAL LINKREG,MODLOOP MODIFY WLR ADDRESS @V305066 00308000 CLI 4(BASEREG),BRINST TEST FOR BRANCH INSTRUCTION @V305066 00309000 BE RETURN YES, BRANCH @V305066 00310000 BR LINKREG2 MODIFY ERROPT ADDRESS @V305066 00311000 MAGTAPE6 LA MODREG,MAGVAR2 POINT TO TABLE @V305066 00312000 TM 2(CCWREG),ERROPT ERROPT ROUTINE @V305066 00313000 BZ RETURN BRANCH IF NO @V305066 00314000 TM 32(CCWREG),STDLAB STANDARD LABELS @V305066 00315000 BCR 8,LINKREG2 NO, RELOCATE ERROPT ADDRESS @V305066 00316000 LA MODREG,MAGVAR3 YES, POINT TO TABLE @V305066 00317000 BR LINKREG2 RELOCATE ERROPT ADDRESS @V305066 00318000 MAGTAPE2 LA MODREG,MAGUND UNDEF TAPE RECORD TABLE @V305066 00319000 BAL LINKREG,MODLOOP BR TO MODIFY ADDRESSES @V305066 00320000 TM 21(CCWREG),INPUT TEST IF INPUT FILE @V305066 00321000 BZ MAGTAPE7 BRANCH IF OUTPUT FILE @V305066 00322000 TM 16(BASEREG),BRINST ADDR OR INST. ? @V305066 00323000 BZ MAGTAPE3 ADDRESS, GO TO MODIFY IT @V305066 00324000 LA BASEREG,16(BASEREG) INSTRUCTION, UPDATE POINTER @V305066 00325000 LA MODREG,MAGUND2 SET UP TO PROCESS WLR ADDR @V305066 00326000 B MAGTAPE4 WLR OPTION IS ADDRESS @V305066 00327000 MAGTAPE3 BAL LINKREG,MODLOOP MODIFY ERROPT ADDRESS @V305066 00328000 MAGTAPE4 CLI 4(BASEREG),BRINST IS THIS AN INSTRUCTION @V305066 00329000 BE RETURN YES, PROCESS NEXT DTF TBL @V305066 00330000 BR LINKREG2 MODIFY WLR ADDR, LAST MOD @V305066 00331000 MAGTAPE7 TM 2(CCWREG),ERROPT ERROPT ROUTINE @V305066 00332000 BZ RETURN BRANCH IF NO @V305066 00333000 TM 32(CCWREG),STDLAB STANDARD LABELS @V305066 00334000 BCR 8,LINKREG2 NO, RELOCATE ERROPT ADDRESS @V305066 00335000 LA MODREG,MAGUND3 YES, POINT TO TABLE @V305066 00336000 BR LINKREG2 RELOCATE ERROPT ADDRESS @V305066 00337000 EJECT 00338000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00339000 * SEQUENTIAL DISK * 00340000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00341000 SPACE 2 00342000 SEQDISK LA MODREG,SEQWORK @V305066 00343000 TM 5(BASEREG),DTFSDW CHECK DTFSD FOR WORK FILES @V305066 00344000 BCR 1,LINKREG2 BRANCH IF DTFSD WORKFILE @V305066 00345000 TM 5(BASEREG),OUTPUT CHECK DTFSD FOR OUTPUT FILE @V305066 00346000 BZ SEQWRITE BRANCH IF OUTPUT @V305066 00347000 LA MODREG,SEQIN ADCON TABLE @V305066 00348000 TM 100(CCWREG),FIX FIXED LENGTH RECORDS @V305066 00349000 BZ TRUNC NO @V305066 00350000 TM 73(CCWREG),TRUN TEST FOR TRUNC @V305066 00351000 BZ TRUNC YES,BRANCH @V305066 00352000 MVI SEQIN,HEX0B MODIFY TABLE LENGTH @V305066 00353000 TRUNC BAL LINKREG,MODLOOP BR TO MODIFY ADDRESS @V305066 00354000 MVI SEQIN,HEX0C RESTORE TABLE LENGTH @V305066 00355000 TM 100(CCWREG),VERIFY TEST IF VERIFY @V305066 00356000 BZ INCTRL NO VERIFY, TEST FOR CONTROL @V305066 00357000 LA MODREG,SEQIN1 ADCON TABLE @V305066 00358000 BAL LINKREG,MODLOOP BR TO MODIFY ADDRESS @V305066 00359000 INCTRL TM 100(CCWREG),CON TEST FOR CONTROL @V305066 00360000 BZ RETURN BRANCH IF NO CONTROL @V305066 00361000 LA MODREG,SEQIN2 ADCON TABLE @V305066 00362000 TM 100(CCWREG),FIX TEST FOR FIXED RECORDS @V305066 00363000 BCR 8,LINKREG2 BRANCH IF VAR OR UNDEFINED @V305066 00364000 CONTROL LA MODREG,SEQIN3 FIXED RECORDS @V305066 00365000 BR LINKREG2 VAR OR UNDEF @V305066 00366000 SEQWRITE LA MODREG,SEQOUT ADCON TABLE @V305066 00367000 BAL LINKREG,MODLOOP BR TO MODIFY ADDRESS @V305066 00368000 TM 100(CCWREG),CON TEST FOR CONTROL @V305066 00369000 BZ RETURN NO CONTROL @V305066 00370000 TM 100(CCWREG),FIX TEST FOR FIXED RECORDS @V305066 00371000 BO CONTROL BRANCH IF FIXED RECORDS @V305066 00372000 TM 100(CCWREG),VARIABLE VARIABLE @V305066 00373000 BZ VAROUT YES @V305066 00374000 BR LINKREG2 NO @V305066 00375000 VAROUT LA MODREG,SEQOUTV ADCON TABLE FOR VAR O/P @V305066 00376000 BR LINKREG2 @V305066 00377000 EJECT 00378000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00379000 * E N D I N G R O U T I N E * 00380000 * * 00381000 * A CHECK IS MADE TO DETERMINE IF MORE DTF TABLES REQUIRE ADDRESS * 00382000 * MODIFICATION. IF SO, RETURN IS MADE TO THE START OF THIS TRANSIENT.* 00383000 * IF NOT, A SUPERVISOR CALL 2 IS MADE TO CALL IN THE OPEN TRANSIENT. * 00384000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00385000 SPACE 2 00386000 NOTFOUND OI SWITCH,ON @V305066 00387000 NI 16(CCWREG),255-RELOC TURN OFF RELOCATION BIT @V305066 00388000 RETURN LA WORKREG1,4(WORKREG1) BUMP TO NEXT DTF TABLE @V305066 00389000 CLI 0(WORKREG1),ENDTAB IS THIS THE END OF DTF TABLE@V305066 00390000 BNE NEXT RETURN TO PROCESS NEXT TABLE@V305066 00391000 EXIT ST R0,SAVE0 SAVE R0 TEMPORARILY @V305066 00392000 BAL R6,FREESTOR RELEASE ACQUIRED STORAGE @V305066 00393000 L R0,SAVE0 RESTORE R0 @V305066 00394000 TM SWITCH,ON @V305066 00395000 BZ CALLNEXT @V305066 00396000 MVC BOPEN+5(3),BOPNR3 TO CALL $$BOPNR3 @V305066 00397000 CALLNEXT LA R1,BOPEN PHASE NAME @V305066 00398000 SVC SVC2 @V305066 00399000 SPACE 2 00400000 FREESTOR LR R1,R5 RESTORE FREE STORAGE PTR @V305066 00401000 DMSFRET DWORDS=5,LOC=(1),TYPCALL=BALR @V305066 00402000 BR R6 @V305066 00403000 EJECT 00404000 ********************************************************************** 00405000 * A D D R E S S M O D I F I C A T I O N S U B R O U T I N E * 00406000 * * 00407000 * BASEREG CONTAINS ADDRESS OF THE ADCON TO BE MODIFIED * 00408000 * COUNTREG CONTAINS NUMBER OF ADDRESSES TO BE MODIFIED * 00409000 * DTFREG CONTAINS THE DIFFERENCE FROM ONE ADDRESS TO NEXT ADDRESS * 00410000 * RELOCREG CONTAINS THE RELOCATION FACTOR * 00411000 * MODREG POINTS TO OR WITHIN DISPLACEMENT TABLE * 00412000 * ADDRREG IS THE WORK REGISTER * 00413000 * THE ORIGINAL CONTENTS OF MODREG POINTS TO THE START OF THE CURRENT * 00414000 * ADCON TABLE. THE FIRST BYTE OF EACH TABLE CONTAINS THE COUNT OF * 00415000 * ADDRESSES TO BE MODIFIED. THIS COUNT IS PLACED IN COUNTREG. THE * 00416000 * SECOND BYTE IS THE DISPLACEMENT BYTE COUNT OF THE FIRST ADCON FROM * 00417000 * THE LOGIC MODULE ADDRESS IN THE DTF TABLE. EACH TABLE BYTE THERE- * 00418000 * AFTER IS THE BYTE COUNT BETWEEN SUBSEQUENT ADCONS. EACH BYTE COUNT* 00419000 * IS ADDED TO BASEREG TO ADDRESS EACH ADCON. THE ADCON TO BE * 00420000 * MODIFIED IS LOADED INTO ADDRREG. THE RELOCATION FACTOR IN RELOCREG * 00421000 * IS ADDED TO THE ADCON WITH THE RESULTANT EXECUTABLE ADDRESS STORED * 00422000 * BACK INTO THE ASSEMBLED ADCON LOCATION. * 00423000 *********************************************************************** 00424000 SPACE 5 00425000 MODEXIT LA LINKREG,RETURN LAST MODIF. TO TABLE ENTRY @V305066 00426000 MODLOOP SR DTFREG,DTFREG CLEAR DISPLACEMENT REG @V305066 00427000 SR COUNTREG,COUNTREG CLEAR BCT REG @V305066 00428000 IC COUNTREG,0(MODREG) INSERT COUNT @V305066 00429000 LR GR1,CCWREG PT TO START OF DTF TABLE @V305066 00430000 LR GR2,GR1 LOAD MAX ADDRESS REGISTER @V305066 00431000 SR R15,R15 ZERO REGISTER @V305066 00432000 VALIDATE IC R15,0(COUNTREG,MODREG) INSERT ADDR DISPLACEMENT@V305066 00433000 AR GR2,R15 ADD TO START OF TABLE @V305066 00434000 BCT COUNTREG,VALIDATE DECREM COUNT AND VALID ADDR @V305066 00435000 SVC SVC26 DO ADDRESS VALIDATION @V305066 00436000 IC COUNTREG,0(MODREG) RESTORE COUNT @V305066 00437000 MODLOOP1 LA MODREG,1(MODREG) POINT TO DISPLACEMENT @V305066 00438000 IC DTFREG,0(MODREG) INSERT DISPLACEMENT FACTOR @V305066 00439000 AR BASEREG,DTFREG ADD DISPLACE TO BASE @V305066 00440000 CLI ADRSW,ON HAS SWITCH BEEN SET @V305066 00441000 BE BYPASS YES, GO TO BYPASS @V305066 00442000 CLC 1(3,BASEREG),ZEROES COMPARE ADDRESS TO ZERO @V305066 00443000 BE MODLOOP2 ZERO ADDRESS, BYPASS UPDATE @V305066 00444000 BYPASS L R15,0(BASEREG) LOAD ADCON TO BE MODIFIED @V305066 00445000 AR R15,RELOCREG ADD RELOCATION FACTOR @V305066 00446000 ST R15,0(BASEREG) STORE RELOCATED ADCON @V305066 00447000 MODLOOP2 BCT COUNTREG,MODLOOP1 RELOCATE NEXT ADDRESS @V305066 00448000 LA MODREG,1(MODREG) ADD ONE TO PT TO NEXT TABLE @V305066 00449000 BR LINKREG RETURN TO ASKING ROUTINE @V305066 00450000 CON3 DC H'40' @V305066 00451000 EJECT 00452000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00453000 * ERROR MESSAGES * 00454000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00455000 SPACE 2 00456000 ERR88E EQU * UNSUPPORTED DTF TYPE @VA10248 00456500 BAL R6,FREESTOR FREE ACQUIRED STORAGE @V305066 00457000 LA R5,4(BASEREG) POINT TO DTF TYPE @VA10248 00457500 DMSERR NUM=88,LET=E,SUB=(HEX4A,(5)),TEXT='UNSUPPORTED DTF TYPE*00458000 ''..''',CSECT=BOP @V305066 00459000 SVC SVC6 @V305066 00460000 EJECT 00461000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00462000 * * 00463000 * CONSTANTS * 00464000 * * 00465000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00466000 SPACE 2 00467000 OPENMON DC CL8'$$BOPEN' OPEN MONITOR @V305066 00468000 EJECT 00469000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00470000 * * 00471000 * EQUATES * 00472000 * * 00473000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00474000 SPACE 2 00475000 DTFCDR EQU X'02' DTFCD - READER @V305066 00476000 DTFCN EQU X'03' DTFCN - CONSOLE @V305066 00477000 DTFCDP EQU X'04' DTFCD - PUNCH @V305066 00478000 DTFPR EQU X'08' DTFPR - PRINTER @V305066 00479000 DTFMTW EQU X'10' DTFMT - WORKFILE @V305066 00480000 DTFMTNO EQU X'11' DTFMT - NOLABEL/NONSTD @V305066 00481000 DTFMTSO EQU X'12' DTFMT - STD. LABEL OUTPUT @V305066 00482000 DTFMTSI EQU X'14' DTFMT - STD. LABEL INPUT @V305066 00483000 DTFSD EQU X'20' DTFSD - DISK @V305066 00484000 DTFCPT EQU X'31' DTFCP - TAPE @V305066 00485000 DTFDI EQU X'33' DTFDI - ALL TYPES @V305066 00486000 FIXED EQU X'03' FIXED LENGTH RECORDS @V305066 00487000 INPUT EQU X'08' INPUT FILE @V305066 00488000 BRINST EQU X'47' BRANCH INSTRUCTION @V305066 00489000 ERROPT EQU X'10' ERROPT SPECIFIED ON DTF @V305066 00490000 STDLAB EQU X'80' STD. LABEL TAPE @V305066 00491000 VAR EQU X'02' VARIABLE LENGTH RECORDS @V305066 00492000 DTFSDW EQU X'20' DTFSD - WORKFILE @V305066 00493000 OUTPUT EQU X'02' OUTPUT FILE @V305066 00494000 FIX EQU X'02' FIXED LENGTH RECORDS @V305066 00495000 TRUN EQU X'04' TRUNCS = YES @V305066 00496000 HEX0B EQU X'0B' @V305066 00497000 HEX0C EQU X'0C' @V305066 00498000 VERIFY EQU X'10' VERIFY = YES @V305066 00499000 CON EQU X'01' CONTROL = YES @V305066 00500000 VARIABLE EQU X'04' VARIABLE LENGTH RECORDS @V305066 00501000 ENDTAB EQU X'0A' END OF DTF TABLE @V305066 00502000 SVC2 EQU 2 SVC 2 @V305066 00503000 SVC26 EQU 26 SVC 26 @V305066 00504000 SVC6 EQU 6 SVC 6 @V305066 00505000 RELOC EQU X'08' RELOCATION BIT @V305066 00506000 ON EQU X'01' SW ON CONDITION @V305066 00507000 EJECT 00508000 *********************************************************************** 00509000 * * 00510000 * A D C O N T A B L E * 00511000 * THE FOLLOWING TABLE CONSISTS OF INDIVIDUAL TABLES USED TO MODIFY * 00512000 * DIFFERENT DTF TYPES. EACH INDIVIDUAL TABLE HAS A UNIQUE NAME TO * 00513000 * IDENTIFY IT. * 00514000 * THE TABLE LAYOUT IS AS FOLLOWS- * 00515000 * BYTE 1 CONTAINS THE COUNT OF ADCONS TO BE MODIFIED. * 00516000 * BYTE 2 CONTAINS THE BYTE COUNT FROM THE LOGIC MODULE ADDRESS TO * 00517000 * THE FIRST ADCON * 00518000 * SUBSEQUENT BYTES CONTAIN THE BYTE COUNT NEEDED TO ADDRESS THE NEXT * 00519000 * ADCON. * 00520000 *********************************************************************** 00521000 SPACE 5 00522000 COMMON DC X'020808' CCB-CCW ADDR, LOG MOD ADDR @V305066 00523000 PRINTST DC X'03081008' @V305066 00524000 MAGWORK DC X'030C040C' EOF, CCW, ERROR ROUTINE @V305066 00525000 MAGDATA DC X'021004' USER LABEL,EOF @V305066 00526000 MAGFIX DC X'0414080408' CCW,IOAREA @V305066 00527000 MAGFIX1 DC X'010C' WLR ADDRESS - INPUT ONLY @V305066 00528000 MAGFIX2 DC X'0104' ERROPT ADDRESS - INPUT ONLY @V305066 00529000 MAGFIX3 DC X'0110' FIX OUTPUT, NO LABELS, @V305066 00530000 MAGFIX4 DC X'011C' FIX OUTPUT, LABELS @V305066 00531000 MAGVAR DC X'041408080C' VARIABLE TAPE RECORDS @V305066 00532000 MAGVAR1 DC X'0100' WLR ADDRESS - INPUT ONLY @V305066 00533000 MAGVAR2 DC X'0104' ERROPT ADDRESS - OUTPUT WITH@V305066 00534000 * LABELS AND INPUT 00535000 MAGVAR3 DC X'0110' VAR OUTPUT, LABS, ERROPT ADD@V305066 00536000 MAGUND DC X'03140804' UNDEFINED TAPE RECORDS @V305066 00537000 MAGUND1 DC X'0110' UNDEFINED TAPE RECORDS @V305066 00538000 MAGUND2 DC X'0104' MOD WLR ADDR FOR UNDEF @V305066 00539000 MAGUND3 DC X'0120' UNDEF OUTPUT ERROPT @V305066 00540000 SEQWORK DC X'0B30040408080808' TABLE FOR DTFSD-WORKFILE @V305066 00541000 DC X'08080808' @V305066 00542000 SEQINA DC X'0C18041410080804' DTFSD INPUT FILE @V305066 00543000 DC X'0408080808' @V305066 00544000 DC X'03080808' DTFSD VERIFY INPUT @V305066 00545000 DC X'021808' VARIBLE OR UNDEFINED CONTROL@V305066 00546000 DC X'021008' CONTROL - FIXED RECORDS @V305066 00547000 SEQOUT DC X'0C18042C08040408' DTFSD-OUTPUT @V305066 00548000 DC X'0808080808' @V305066 00549000 SEQOUTC DC X'021808' DTFSD - OUTPUT CONTROL @V305066 00550000 SEQOUTV DC X'022008' @V305066 00551000 BOPNR3 DC C'NR3' OPEN-RELOC PHASE FOR UNIT REC @V305066 00552000 ZEROES DC X'000000' @V305066 00553000 EJECT 00554000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00555000 * DSECTS * 00556000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00557000 SPACE 2 00558000 FREE DSECT @V305066 00559000 SEQIN DS XL8 DTFSD INPUT FILE @V305066 00560000 DS XL5 @V305066 00561000 SEQIN1 DS XL4 DTFSD VERIFY INPUT @V305066 00562000 SEQIN2 DS XL3 VARIABLE OR UNDEFINED CONTROL @V305066 00563000 SEQIN3 DS XL3 CONTROL FIXED RECORDS @V305066 00564000 BOPEN DS CL8 @V305066 00565000 ADRSW DS CL1 @V305066 00566000 SAVE0 DS CL4 @V305066 00567000 SWITCH DS CL1 @V305066 00568000 EJECT 00569000 NUCON @V305066 00570000 REGEQU @V305066 00571000 DMSOR1 CSECT @V305066 00572000 LTORG @V305066 00573000 END 00575000