IDENT MST,FET ABS SST FL ENTRY MST ENTRY MFL= ENTRY SSJ= SYSCOM B1 *COMMENT MST - MASS STORAGE TEST. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. TITLE MST - MASS STORAGE TEST. SPACE 4 *** MST - MASS STORAGE TEST. * G. R. MANSFIELD. 70/12/06. * MODIFIED BY W. E. GOEBEL. 74/01/21. SPACE 4 *** MST IS A CENTRAL PROCESSOR DRIVEN MASS STORAGE TEST. IT * PERFORMS SEQUENTIAL WRITES, READS AND POSITIONS ALONG WITH * RANDOM READS AND WRITES ON A SELECTED MASS STORAGE DEVICE. * * OPERATING INSTRUCTIONS. * WHEN CALLED, MST WILL REQUEST ASSIGNMENT OF THE FILE *DISK1*. * * SEQUENTIAL WRITE. * RANDOM DATA IS WRITTEN SEQUENTIALLY ON THE FILE IN THIS * FORMAT - 1 WORD CONTAINING JSN, MFID AND PRU NUMBER * 1 WORD CONTAINING RANDOM DATA SEED * 61 WORDS OF RANDOM DATA * 1 WORD CHECKSUM OF ABOVE DATA * * SEQUENTIAL READ. * FILE IS REWOUND AND DATA IS READ BACK CHECKING SECTOR NUMBER * AND CHECKSUM OF RANDOM DATA. * * SEQUENTIAL POSITIONING. * FILE IS POSITIONED ALTERNATELY TO SUCCESSIVE SECTORS * FROM BEGINING TO END. * * RANDOM READ. * RANDOM SECTOR NUMBERS ARE PICKED AND THE SECTORS READ. * THE SECTOR NUMBER IS CHECKED AND THE DATA CHECKSUM VERIFIED. * * RANDOM WRITE. * RANDOM SECTOR NUMBERS ARE PICKED AND THE SECTORS ARE WRITTEN. * A SEQUENTIAL READ IS PERFORMED TO VERIFY THE WRITTEN DATA. * * FOR BUFFERED DISKS THERE IS A THREE SECOND PAUSE FOLLOWING * EACH SECTION TO ALLOW I/O ACTIVITY TO COMPLETE ON THE * DISK BEFORE CONTINUING TO THE NEXT SECTION. SPACE 4 *** ARGUMENT PARAMETERS. * * T TEST SECTION (CAN BE EQUATED). * T=0 OR T OR OMISSION OF THIS PARAMETER WILL RUN ALL * SECTIONS. * T=1 WRITE SEQUENTIAL. * T=2 READ SEQUENTIAL. * T=3 POSITION SEQUENTIAL. * T=4 RANDOM READ. * T=5 RANDOM WRITE. * * P TEST PATTERN (CAN BE EQUATED). * P=0 ALL ZEROS PATTERN. * P=1 ALL ONES PATTERN. * P=2 25252525252525252525B PATTERN. * P=3 52525252525252525252B PATTERN. * P=4 DO NOT GENERATE OR CHECK DATA. THE SECTOR * NUMBER, JSN AND MFID IS GENERATED AND CHECKED * FOR EACH SECTOR. * P=5 OR P OR OMISSION OF THIS PARAMETER WILL ENABLE * RANDOM PATTERN. * P=6 DO NOT GENERATE OR CHECK DATA. DO NOT COPY DATA * BETWEEN THE CIO BUFFER AND THE WORKING BUFFER. * THE SECTOR NUMBER, JSN AND MFID IS GENERATED AND * CHECKED FOR EACH SECTOR. * * N NUMBER OF SECTORS (CAN BE EQUATED). * N=0 GIVES ARGUMENT ERROR MESSAGE AND PROGRAM ABORT. * N=XXXXXXX WILL RUN THE TEST ON XXXXXXX SECTORS. * IF TOO LARGE A VALUE OF XXXXXXX IS SPECIFIED, * A TRACK LIMIT WILL RESULT. * N=* WILL TEST ALL AVAILABLE SECTORS. * IF SPECIFIED ON A DEVICE WITH OTHER ACTIVITY, * A TRACK LIMIT MAY RESULT. * * NW NO WRITE PERFORMED AT BEGINING OF TEST. * * TL TRANSFER LENGTH IN SECTORS FOR RANDOM I/O. * DEFAULT IS 10B SECTORS. * * NV IF SPECIFIED, DO NOT PERFORM SEQUENTIAL READ AFTER * RANDOM WRITE. * * RO IF SPECIFIED, SIMULATE ROLLIN/ROLLOUT I/O ON BUFFERED * DEVICES. * * IO IF SPECIFIED, GIVES THE NUMBER OF I/O-S TO BE * PERFORMED ON THE DEVICE. IF *IO* IS NOT SPECIFIED, * THE VALUE FOR NUMBER OF I/O-S IS COMPUTED FROM THE * TRANSFER LENGTH. * * NOTE: * SENSE SWITCH 2 - IF SET WILL ABORT ON ERRORS. * SENSE SWITCH 3 - IF SET WILL CONTINUE AT END OF TEST. * SENSE SWITCH 4 - IF SET WILL REPEAT CURRENT SECTION. * * ISSUING A CALL OF MST FROM THE CONSOLE WILL * SELECT ALL SECTIONS, RANDOM PATTERN, DEFAULT SECTOR * VALUE, PAUSE ON ERROR AND STOP AT END OF TEST. * TO CONTINUE ON ERRORS TYPE *GO.*. * MST SPACE 4 *** DAYFILE MESSAGES. * * * ARGUMENT ERROR.* = ONE OF PARAMETERS IS IN ERROR. * * * ILLEGAL EQUIPMENT.* = THE EQUIPMENT WHICH WAS ASSIGNED IN * RESPONSE TO THE DISPLAY REQUEST IS NOT * RECOGNIZED AS BEING A DEVICE UPON WHICH * THE TEST MAY BE RUN. * * * SEQUENTIAL WRITE.* = THIS TEST SECTION IS BEING EXECUTED. * * * SEQUENTIAL READ.* = THIS TEST SECTION IS BEING EXECUTED. * * * SEQUENTIAL POSITIONING.* = THIS SECTION IS BEING EXECUTED. * * * RANDOM READ.* = THIS TEST SECTION IS BEING EXECUTED. * * * RANDOM WRITE.* = THIS TEST SECTION IS BEING EXECUTED. * * *MST TRANSFER RATE = XXXXXX.XXX KC.* = THE DISK TRANSFER * RATE FOR THE PREVIOUS SECTION WAS * XXXXXX.XXX KILO-CHARACTERS PER SECOND. * * * NUMBER OF I/O-S = XXXXXXXXXX.* = THE NUMBER OF IO PAIRS * SPECIFIED WITH THE *IO* PARAMETER OR * COMPUTED FROM THE *NL* PARAMETER. * * * IO PER SECONDS = XXXXXX.XXX.* = NUMBER OF IO-S PERFORMED * PER SECOND. * * * FILE SIZE = XXXXXXXXXX SECTORS.* = SIZE OF THE DATA * FILE IN SECTORS.* * * * ILLEGAL EOF DETECTED.* = AN EOF WAS DETECTED BEFORE THE * LAST SECTOR ON THE FILE. * * * NO EOF DETECTED ON LAST READ.* = NO EOF ON THE LAST SECTOR. * * * JOB ABORTED.* = ABNORMAL TERMINATION OF MST. * * *EQXXX,DATA ERROR AT -PHYSICAL POSITION-.* * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.* * DATA ERRORS HAVE BEEN DETECTED ON A * SECTOR WHICH WAS READ. * * *EQXXX,POS. ERROR AT -PHYSICAL POSITION-.* * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.* * THE SECTOR WHICH WAS READ WAS NOT * THE CORRECT SECTOR. THE POSITION GIVEN * IS THE POSITION OF THE SECTOR READ. * * *EQXXX,DEV.-TYPE ERR--PHYSICAL POSITION-.* * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.* * CIO HAS DETECTED ONE OF THE FOLLOWING * ERRORS WHICH APPEAR IN THE -TYPE ERR- * POSITION. * -TYPE ERR- = PARITY ER. -- PARITY ERROR * ADDR. ERR. -- ADDRESS ERROR * STATUS ER. -- DEVICE STATUS ERROR * 81 FNC REJ -- 6681 FUNCTION REJECT * RESERVED -- DEVICE RESERVED * NOT READY -- DEVICE NOT READY * * *EQXXX,EXP. POSITION -PHYSICAL POSITION-.* * *EQXXX,RXXXXXXX,TYYYY,SZZZZ.* * WHEN A POSITION OR DEVICE ADDRESS ERROR * OCCURES THE EXPECTED POSITION IS GIVEN * BY THIS MESSAGE. * * *EQXXX,DATA EXP WWW,EEEEEEEEEEEEEEEEEEEE* * *EQXXX,DATA READ WWW,RRRRRRRRRRRRRRRRRRRR* * *EQXXX,DATA DIFF WWW,DDDDDDDDDDDDDDDDDDDD* * *DATA OK.* (OPTIONAL - SEE BELOW) * WHEN A DATA ERROR OR DEVICE PARITY ERROR IS * DETECTED THE DATA ON THE SECTOR IS CHECKED * AND THE ERRORS REPORTED. IF NO ERRORS ARE * FOUND THE MESSAGE *DATA OK.* IS ISSUED. * WWW IS THE WORD NUMBER IN THE SECTOR. * EE-----E IS THE EXPECTED DATA. * RR-----R IS THE DATA READ. * DD-----D IS THE DIFFERNCE. * * * MST ERROR - GO / DROP.* = *MST* HAS DETECTED AN * IRRECOVERABLE READ ERROR. * * * END MASS STORAGE TEST.* = END OF TEST. SPACE 4 ** COMMON DECKS. *CALL COMCMAC *CALL COMCCMD *CALL COMSCIO *CALL COMSMSP SPACE 4 **** ASSEMBLY CONSTANTS. DBUFL EQU 4001B **** TITLE DATA. FET SPACE 4 * FILE FET. ORG 110B FET BSS 0 D BSS 0 DISK1 RFILEB DBUF,DBUFL,(FET=8),(DTY=2RMS) * DATA STORAGE. FL CON 0 ORIGINAL FIELD LENGTH NS CON 10000B NUMBER OF SECTORS SM CON 7777B SECTOR MASK NW CON 0 NO SEQUENTIAL WRITE AT BEGINNING OF TEST TS CON 0L0 TEST SECTION TO BE EXECUTED TP CON 0L5 DEFAULT TEST PATTERN ST CON 0 START TIME ET CON 0 ENDING TIME BD CON 0 BUFFERED DEVICE FLAG ND CON 0 NULL DATA FLAG NT CON 1 NO DATA TRANSFER FLAG TL CON 0L10B TRANSFER LENGTH NV CON 0 NO VERIFICATION AFTER RANDOM WRITE FLAG RO CON 0 ROLLOUT SIMULATION FLAG IO CON 0 NUMBER OF I/O-S JN CON 0 24/JSN, 12/MAINFRAME ID, 24/0 EMTS VFD 1/1,59/0 EXTENDED MEMORY TRACK SHIFT * SPECIAL ENTRY POINTS. SSJ= EQU 0 TITLE MAIN PROGRAM. MST SPACE 4 ** MST - MAIN PROGRAM. MST SB1 1 (B1) = 1 SB7 B0 SX6 A0 SA6 FL RJ PRS PRESET MST1 SA1 NW NZ X1,MST2 IF NO WRITE RJ WSQ WRITE SEQUENTIAL RJ WIC WAIT I/O COMPLETE MST2 SA1 TS ZR X1,MST3 IF ALL SECTIONS SELECTED SB5 X1-1 ZR B5,MST7 SB2 3 GT B5,B2,MST6 EQ B5,B2,MST5 GT B5,B1,MST4 MST3 RJ RSQ READ SEQUENTIAL RJ WIC WAIT I/O COMPLETE SA1 TS NZ X1,MST7 MST4 RJ POS POSITION SEQUENTIAL RJ WIC WAIT I/O COMPLETE SA1 TS NZ X1,MST7 MST5 RJ RRD READ RANDOM RJ WIC WAIT I/O COMPLETE SA1 TS NZ X1,MST7 MST6 RJ WRD WRITE RANDOM RJ WIC WAIT I/O COMPLETE SA1 NV NZ X1,MST7 IF NO VERIFICATION REQUIRED RJ RSQ READ SEQUENTIAL MST7 SA1 B0 LX1 59-8 PL X1,MST8 IF REPEAT TEST NOT SET RJ WIC WAIT I/O COMPLETE EQ MST1 CONTINUE MST8 MESSAGE (=C* END MASS STORAGE TEST.*) ENDRUN MSTA CON 0 TEMPORARY USED BY RSQ AND RRD TITLE TEST SECTIONS. WSQ SPACE 4,15 ** WSQ - WRITE SEQUENTIAL. * * USES X - 0, 1, 2, 4, 5, 6, 7. * A - 1, 5, 6, 7. * * CALLS AIP, CKS, CTR, GDB, MEM, MES. * * MACROS REWIND, RTIME, WRITEF, WRITEW. WSQ SUBR ENTRY/EXIT SX6 1 SET SECTORS TO CHECK SA6 CKSI SA1 FL RJ MEM REQUEST MEMORY WSQ1 REWIND D,R SX1 =C* SEQUENTIAL WRITE.* RJ MES SEND MESSAGE SA5 NS NUMBER OF SECTORS TO WRITE BX0 X5 BX6 X5 SAVE SECTOR COUNT SA6 CTRB SX5 B1 RTIME ST WSQ2 SA2 JN JSN AND MFID SA1 TP GENERATE SECTOR TO WRITE BX7 X2+X5 BX6 X1 SA7 SBUF SA6 SBUF+1 RJ GDB GENERATE DATA BUFFER SA7 TP SX2 D SET FET ADDRESS SA1 NT ZR X1,WQS3 IF NO DATA TRANSFER WRITEW X2,SBUF,100B EQ WQS4 CHECK FOR CIO ERROR WQS3 RJ AIP ADVANCE *IN* POINTER WQS4 SX4 B0 RJ CKS CHECK FOR CIO ERROR SX6 B1+ IX5 X5+X6 ADVANCE SECTOR COUNTER IX0 X0-X6 NZ X0,WSQ2 IF MORE SECTORS TO WRITE WRITEF D,R RJ CTR COMPUTE TRANSFER RATE SA1 B0 LX1 59-9 NG X1,WSQ1 IF REPEAT SECTION SET EQ WSQX RETURN RSQ SPACE 4,15 ** RSQ - READ SEQUENTIAL. * * USES X - 0, 1, 2, 4, 5, 6, 7. * A - 1, 5, 6, 7. * * CALLS ABT, AOP, CKS, CTR, MEM, MES. * * MACROS MESSAGE, READ, READW, REWIND, RTIME. RSQ SUBR ENTRY/EXIT SX6 1 SET SECTORS TO CHECK SA6 CKSI SA1 FL RJ MEM REQUEST MEMORY RSQ1 REWIND D,R SX1 =C* SEQUENTIAL READ.* RJ MES SEND MESSAGE SA5 NS NUMBER OF SECTORS BX0 X5 BX6 X5 SAVE SECTOR COUNT SA6 CTRB SX5 B0 RTIME ST RSQ2 READ D RSQ3 SX2 D SET FET ADDRESS SA1 NT ZR X1,RSQ3.1 IF NO DATA TRANSFER READW X2,SBUF,100B EQ RSQ3.2 CHECK FOR EOR/EOF RSQ3.1 RJ AOP ADVANCE *OUT* POINTER RSQ3.2 ZR X1,RSQ3.3 IF NO EOR/EOF DETECTED SX1 X1+3 CHECK FOR *CIO* ERROR NZ X1,RSQ5 IF NO *CIO* ERROR RSQ3.3 ZR X0,RSQ4 IF EOF EXPECTED SX2 B1 IX4 X5+X2 ADVANCE EXPECTED SECTOR SA5 SBUF BX6 X4 SA6 MSTA SAVE RANDOM ADDRESS IX0 X0-X2 DECREMENT SECTOR COUNTER RJ CKS CHECK SECTOR SA5 MSTA ZR X4,RSQ3 IF NO ERROR DETECTED SA1 D+1 RESTART READ ON ERROR SX2 B1 IX7 X5+X2 SET RANDOM ADDRESS TO NEXT SECTOR SX6 X1 SA6 A1+B1 SA7 D+6 SA6 A6+B1 EQ RSQ2 RSQ4 MESSAGE (=C* NO EOF ON LAST READ.*) EQ RSQ6 RSQ5 ZR X0,RSQ7 IF EOF EXPECTED MESSAGE (=C* ILLEGAL EOF DETECTED.*) RSQ6 RJ ABT CHECK FOR ABORT ON ERRORS RSQ7 RJ CTR COMPUTE TRANSFER RATE SA1 B0 LX1 59-9 NG X1,RSQ1 IF REPEAT SECTION EQ RSQX RETURN POS SPACE 4,15 ** POS - SEQUENTIAL POSITIONING. * * ENTRY NONE. * * EXIT NONE. * * USES X - ALL. * A - 1, 2, 3, 4, 5, 6, 7. * B - 2. * * CALLS CKS, CTR, MES, MTR. * * MACROS READW, REWIND, RPHRLS, RTIME. POS7 RJ CTR COMPUTE TRANSFER RATE SA1 B0 LX1 59-9 NG X1,POS1 IF REPEAT SECTION SET POS SUBR ENTRY/EXIT REWIND D,R SX1 MFL=-200000B RJ MEM REQUEST MEMORY POS1 SX1 =C* SEQUENTIAL POSITIONING.* RJ MES SEND MESSAGE BX6 X6-X6 CLEAR SECTOR COUNT SA6 CTRB RTIME ST SA1 NS SX7 B1 BX0 X0-X0 LX6 X1 EQ POS3 POS2 SX0 X0-40B NZ X0,POS7 IF LAST READ ENCOUNTERED - RETURN SA2 A4-B1 SA1 A2-B1 BX7 X2 LX6 X1 POS3 SA3 POSA SA7 TRRD-1 POS4 IX6 X6-X3 GENERATE LIST OF SECTORS IX7 X7+X3 NG X6,POS5 IF END OF SECTORS TO READ SA6 A7+1 SA7 A7+2 SB2 A6-TRRD-36B NZ B2,POS4 IF LIST NOT FULL POS5 MX7 0 SET END OF LIST FLAG SB2 B1+B1 SX2 D SX6 DBUF IN = OUT = FIRST SA7 A7+B1 SA6 X2+B2 SX7 TRRD SA6 A6+B1 SA7 A6+B2 SET LIST ADDRESS RPHRLS X2 POS6 READW D,SBUF,100B GET SECTOR TO CHECK SA4 TRRD+X0 SA5 SBUF ZR X4,POS2 IF END OF LIST RJ CKS CHECK SECTOR SX0 X0+B1 SA1 CTRB COUNT SECTORS SX2 B1 IX6 X1+X2 SA6 A1 EQ POS6 NEXT SECTOR POSA CON 0 INCREMENT (SET BY PRESET) RRD SPACE 4,15 ** RRD - RANDOM READ. * * ENTRY NONE. * * EXIT NONE. * * USES X - 0, 1, 4, 5, 6, 7. * A - 1, 4, 5, 6, 7. * B - NONE. * * CALLS CIO, CKS, CTR, MES, RNO. * * MACROS READ, RTIME. RRD SUBR ENTRY/EXIT SA1 TL REQUEST MEMORY BX6 X1 LX1 6 SA6 CKSI SET SECTORS TO READ SX1 X1+DBUF+11B BX6 X1 SA6 D+4 RJ MEM RRD1 SX1 =C* RANDOM READ.* RJ MES ISSUE MESSAGE SA1 TL SA5 IO GET NUMBER OF I/O-S BX0 -X5 SA5 NS SET NUMBER OF SECTORS TRANSFERED AX5 7 IX6 X1*X5 SA6 CTRB RTIME ST RRD2 SX7 B1 SET RANDOM ADDRESS IN FET LX7 29-0 RJ RNO GET RANDOM NUMBER SA6 RRDA BX7 X6+X7 SA7 D+6 SX6 DBUF SET IN = OUT = FIRST SA6 D+2 SA6 A6+B1 READ D,R SA5 DBUF SET ACTUAL RANDOM ADDRESS SA4 RRDA SET EXPECTED RANDOM ADDRESS RJ CKS CHECK DATA SX0 X0+B1 INCREMENT I/O COUNT NG X0,RRD2 IF MORE I/O-S REQUIRED RJ CTR COMPUTE TRANSFER RATE RJ CIO COMPUTE I/O RATE SA1 B0 LX1 59-9 NG X1,RRD1 IF NOT DONE EQ RRDX RETURN RRDA CON 0 EXPECTED RANDOM ADDRESS WRD SPACE 4,15 ** WRD - RANDOM WRITE. * * ENTRY NONE. * * EXIT NONE. * * USES X - 0, 1, 5, 6, 7. * A - 1, 5, 6, 7. * B - 4, 5. * * CALLS CIO, CTR, GDB, MEM, MES, RNO. * * MACROS RTIME, WRITE. WRD SUBR ENTRY/EXIT SA1 D+1 CLEAR EPR BIT SX6 B1 LX6 44 BX6 -X6*X1 SA6 A1 SA1 TL BX6 X1 SA6 CKSI SET SECTORS TO CHECK LX1 6 SX1 X1+DBUF+11B RJ MEM WRD1 SX1 =C* RANDOM WRITE.* RJ MES SEND MESSAGE SA5 NS SA1 TL REQUEST MEMORY AX5 7 BX0 -X5 IX6 X1*X5 SA6 CTRB RTIME ST WRD1.1 SA1 TL SB4 B0 SB5 X1 SX7 B1 LX7 29 RJ RNO GET RANDOM NUMBER SA2 JN JSN AND MFID BX7 X6+X7 SET RANDOM BIT SA7 D+6 BX6 X2+X6 ADD JSN AND MFID TO SECTOR NUMBER WRD2 SA6 B4+DBUF SA1 TP BX6 X1 SA6 B4+DBUF+1 STORE RANDOM ADDRESS IN FET RJ GDB GENERATE DATA BUFFER SA7 TP SA1 B4+DBUF SX6 1 IX6 X1+X6 SB5 B5-B1 SB4 B4+100B NE B5,WRD2 IF MORE SECTORS TO GENERATE SA1 TL LX1 6 SX6 DBUF IX7 X6+X1 SA6 D+3 OUT = FIRST SA7 D+2 IN = FIRST + 64 WRITE D,R SX6 B1 IX0 X0+X6 COUNT SECTOR NG X0,WRD1.1 IF MORE SECTORS TO TRANSFER RJ CTR COMPUTE TRANSFER RATE RJ CIO COMPUTE I/O RATE SA1 B0 LX1 59-9 NG X1,WRD1 IF REPEAT SECTION SET SA1 D+1 SET EPR BIT SX6 B1 LX6 44 BX6 X6+X1 SA6 A1 EQ WRDX RETURN TITLE SUBROUTINES. ABT SPACE 4,15 ** ABT - ABORT JOB. * * ABORTS JOB IF PAUSE ON ERROR NOT SELECTED. * * EXIT (X4) = 1. * * USES X - 1, 4, 7. * A - 1, 7. * B - NONE. * * MACROS ABORT, MESSAGE, RECALL. ABT SUBR ENTRY/EXIT SA1 B0 LX1 59-7 NG X1,ABT2 IF ABORT ON ERROR SX7 B1+ SET PAUSE BIT LX1 7-59 LX7 12 BX7 X7+X1 SA7 A1 MESSAGE ABTA,2,R ISSUE MESSAGE TO SECOND LINE ABT1 RECALL SA1 B0 LX1 59-12 NG X1,ABT1 IF PAUSE BIT SET SX4 B1 EQ ABTX RETURN ABT2 MESSAGE (=C* JOB ABORTED.*) ABT3 ABORT ABORT JOB ABTA DATA C*$MST ERROR - GO / DROP.* AIP SPACE 4,20 ** AIP - ADVANCE *IN* POINTER. * * ADVANCE THE *IN* POINTER BY 100B (AS IF A *WRITEW* OF 100B * WORDS HAD BEEN PERFORMED), BUT DO NOT TRANSFER THE DATA. * COPY ONLY THE FIRST WORD OF THE BLOCK FROM BUFFER *SBUF* * TO THE CIO BUFFER. * * ENTRY (X2) = ADDRESS OF FET FOR FILE. * * EXIT VIA *WTX=*. * (X2) = ADDRESS OF FET FOR FILE. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 3, 4, 6. * B - 2, 3, 4, 5, 6, 7. * * CALLS DCB=, WTX=. + EQ AIP1 (REENTRY ADDRESS FROM *DCB=*) AIP SUBR ENTRY/EXIT SA4 *-1 SET REENTRY/RETURN ADDRESS SA1 X2+4 (B5) = LIMIT SA3 X2+B1 (X3) = FIRST SB5 X1 * REENTER HERE FROM *DCB=*. AIP1 SA2 X2 (B2) = FET STATUS SA1 A3+2 (B4) = OUT SB2 X2 SA2 A3+B1 (X2) = IN SB4 X1 SB3 X2+B1 (B3) = IN+1 LE B3,B4,AIP3 IF IN .LT. OUT * CALCULATE SPACE LEFT IN BUFFER (IN .GE. OUT). SB7 X3 SX6 B5-B7 (LIMIT-FIRST) SX7 B3-B4 (IN+1-OUT) IX6 X6-X7 AVAILABLE SPACE IN BUFFER SX7 X6-100B NG X7,DCB= IF NOT ENOUGH SPACE * UPDATE BUFFER POINTER (IN .GE. OUT). SB6 X2+100B NEW VALUE OF IN LT B6,B5,AIP2 IF NO BUFFER WRAPAROUND SB7 B5-B7 (LIMIT-FIRST) SB6 B6-B7 NEW VALUE OF IN AIP2 SA1 SBUF COPY FIRST WORD OF BLOCK TO (IN) BX6 X1 SA6 X2 SX2 B6 SET NEW VALUE OF IN EQ WTX= EXIT * CALCULATE SPACE LEFT IN BUFFER (IN .LT. OUT). AIP3 SX6 B4-B3 AVAILABLE SPACE IN BUFFER SX7 X6-100B NG X7,DCB= IF NOT ENOUGH SPACE IN BUFFER * UPDATE BUFFER POINTER (IN .LT. OUT). SB6 X2+100B NEW VALUE OF IN EQ AIP2 EXIT AOP SPACE 4,20 *** AOP - ADVANCE *OUT* POINTER. * * ADVANCE THE *OUT* POINTER BY 100B (AS IF A *READW* OF 100B * WORDS HAD BEEN PERFORMED), BUT DO NOT TRANSFER THE DATA. * COPY ONLY THE FIRST WORD OF THE BLOCK FROM THE CIO BUFFER * TO BUFFER *SBUF*. * * ENTRY (X2) = ADDRESS OF FET FOR FILE. * * EXIT VIA *RDX=*. * (X1) = 0 FOR TRANSFER COMPLETE. * (X1) = -1 IF EOF DETECTED ON FILE. * (X1) = -2 IF EOI DETECTED ON FILE. * (X2) = ADDRESS OF FET FOR FILE. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 3, 4, 7. * B - 3, 4, 5, 6, 7. * * CALLS LCB=, RDX=. + EQ AOP1 (REENTRY ADDRESS FOR *LCB=*) AOP SUBR ENTRY/EXIT SA4 *-1 SET REENTRY/RETURN ADDRESS SA1 X2+4 (B5) = LIMIT SA3 X2+B1 (X3) = FIRST SB5 X1 * REENTER HERE FROM *LCB=*. AOP1 SA1 A3+B1 (B3) = IN SA2 A1+B1 (B4) = OUT SB3 X1 SB4 X2 LT B3,B4,AOP3 IF IN .LT. OUT * CALCULATE DATA AVAILABLE IN BUFFER (IN .GE. OUT). SX6 B3-B4 AVAILABLE DATA IN BUFFER SX7 X6-100B NG X7,LCB= IF NOT ENOUGH DATA IN BUFFER * UPDATE BUFFER POINTER (IN .GE. OUT). SB6 B4+100B NEW VALUE OF OUT AOP2 SA1 B4 COPY FIRST WORD OF BLOCK FROM (OUT) BX7 X1 SA7 SBUF SB4 B6 SET NEW VALUE OF OUT EQ RDX= EXIT * CALCULATE DATA AVAILABLE IN BUFFER (IN .LT. OUT) AOP3 SB7 X3 SX6 B5-B7 (LIMIT-FIRST) SX7 B4-B3 (OUT-IN) IX6 X6-X7 AVAILABLE DATA IN BUFFER SX7 X6-100B NG X7,LCB= IF NOT ENOUGH DATA IN BUFFER * UPDATE BUFFER POINTER (IN .LT. OUT). SB6 B4+100B NEW VALUE OF OUT LT B6,B5,AOP2 IF NO BUFFER WRAPAROUND SB7 B5-B7 (LIMIT-FIRST) SB6 B6-B7 NEW VALUE OF OUT EQ AOP2 EXIT CKS SPACE 4,20 ** CKS - CHECK SECTOR. * * ENTRY (X5) = SECTOR NUMBER, JSN AND MFID READ. * (X4) = SECTOR NUMBER EXPECTED. * (A5) = ADDRESS OF SECTOR TO BE CHECKED. * ND .NE. 0 IF DATA IS TO BE CHECKED. * * EXIT (X4) = 0 IF NO ERROR DETECTED. * * USES X - ALL. * A - 1, 2, 3, 4, 5, 6, 7. * B - 2. * * RESTORES X5, D+2, D+3, X0, D+6 WHEN RETURNING FROM ERROR. * * CALLS ABT, DCH, ERR. CKS SUBR ENTRY/EXIT SA3 D+6 CHECK FOR CIO ERROR MX2 -3 BX2 -X2*X3 NZ X2,CKS2 IF CIO ERROR ZR X4,CKSX IF CHECKING ON WRITE - RETURN CKS0 SA2 JN GET JSN AND MFID BX2 X2+X4 MERGE WITH SECTOR NUMBER BX6 X2-X5 NZ X6,CKS3 IF POSITION ERROR SX6 B1 IX6 X4+X6 INCREMENT RANDOM ADDRESS FOR NEXT SECTOR SA6 CKSJ SA4 ND ZR X4,CKSX IF DATA NOT TO BE CHECKED SX4 B0 SB2 76B SA2 A5+77B LOAD CHECKSUM CKS1 SA1 A5+B2 VALIDATE CHECKSUM IX2 X2-X1 SB2 B2-1 GT B2,B1,CKS1 IF MORE DATA NZ X2,CKS1.1 IF CHECKSUM ERROR SA3 CKSI CHECK SECTOR COUNT SX6 X3-1 ZR X6,CKSX IF END OF TRANSFER SA6 A3+ SA5 A5+100B SET ACTUAL RANDOM ADDRESS SA4 CKSJ SET EXPECTED RANDOM ADDRESS EQ CKS0 NEXT SECTOR CKS1.1 SA1 CKSA DATA ERROR PROCESSING SA2 CKSE RJ ERR DATA ERROR MESSAGE RJ DCH DATA CHECK EQ CKS6 CKS2 SA1 CKSB CIO ERROR PROCESSING SX6 X2-2 SA2 X2+TCIO-1 SA6 CKSG LX7 X4 SX4 B0 SA7 CKSH RJ ERR CIO ERROR MESSAGE SA1 CKSG NG X1,CKS5 IF PARITY ERROR ZR X1,CKS4 IF ADDRESS ERROR EQ CKS6 CKS3 SA1 CKSC POSITION ERROR PROCESSING SA2 CKSE BX6 X4 SX4 B0 SA6 CKSH RJ ERR POSITION ERROR MESSAGE CKS4 SA4 CKSH SECTOR EXPECTED SA1 CKSD SA2 CKSF BX5 X4 SX4 B1 ZR X5,CKS6 IF ADDRESS ERROR ON SEQUENTIAL WRITE RJ ERR EXPECTED ERROR MESSAGE CKS5 RJ DCH DATA CHECK CKS6 RJ ABT CHECK FOR ABORT ON ERRORS CKS7 SA5 ERRA RESTORE REGISTERS SA2 A5+B1 SA3 A2+B1 SA1 A3+B1 BX6 X2 LX7 X3 SA2 A1+B1 SA6 D+2 SA7 D+3 LX6 X2 BX0 X1 SA6 D+6 EQ CKSX RETURN CKSA DATA 10HEQXXX,DATA CKSB DATA 10HEQXXX,DEV. CKSC DATA 10HEQXXX,POS. CKSD DATA 10HEQXXX,EXP. CKSE CON 10H ERROR AT CKSF CON 10H POSITION CKSG CON 0 TEMPORARY CKSH CON 0 TEMPORARY CKSI CON 0 NUMBER OF SECTORS REMAINING TO CHECK CKSJ CON 0 EXPECTED RANDOM ADDRESS OF NEXT SECTOR TCIO CON 10LPARITY ER. PARITY ERROR CON 10LADDR. ERR. ADDRESS ERROR CON 10LSTATUS ER. DEVICE STATUS ERROR CON 10L81 FNC REJ 6681 FUNCTION REJECT CON 10LRESERVED DEVICE RESERVED CON 10LNOT READY DEVICE NOT READY CIO SPACE 4,10 ** CIO - COMPUTE I/O RATE. * * USES X - 1, 2, 5, 6. * A - 1, 2, 5, 6. * B - NONE. * * CALLS CDD, CFD, MES. CIO SUBR ENTRY/EXIT SA1 CIOA GET ELAPSED TIME SA5 NS SET NUMBER OF I/O-S AX5 7 SA2 CIOD IX5 X2*X5 IX1 X5/X1 RJ CFD CONVERT TO FLOATING POINT SA6 CIOB+2 SA1 IO RJ CDD CONVERT TO DISPLAY SA6 CIOC+2 SX1 CIOB RJ MES SEND I/O-S PER SECOND MESSAGE SX1 CIOC RJ MES EQ CIOX RETURN CIOA CON 0 ELAPSED TIME CIOB DATA C* IO PER SECOND = XXXXXX.XXX.* CIOC DATA C* NUMBER OF I/O-S = XXXXXXXXXX.* CIOD CON 1000D*1000D CTR SPACE 4,15 ** CTR - COMPUTE TRANSFER RATE. * * ENTRY (CTRB) = NUMBER OF SECTORS TRANSFERRED. * (ST) = START TIME. * * EXIT TRANSFER RATE MESSAGE ISSUED TO DAYFILE. * * USES X - 0, 1, 2, 3, 6. * A - 1, 2, 6. * B - NONE. * * CALLS CFD, MES. * * MACROS RTIME. CTR SUBR ENTRY/EXIT RTIME ET GET ENDING TIME SA1 ST COMPUTE ELAPSED TIME SA2 ET MX0 -36 BX1 -X0*X1 BX2 -X0*X2 IX2 X2-X1 BX6 X2 SA6 CIOA SA1 CTRB SX3 640*1000/64 LX3 6 IX3 X1*X3 CHAR IX1 X3/X2 RJ CFD CONVERT TO DISPLAY CODE SA6 CTRA+2 SX1 CTRA SEND TRANSFER RATE MESSAGE RJ MES EQ CTRX RETURN CTRA DATA C*MST TRANSFER RATE = XXXXXX.XXX KC.* CTRB CON 0 SECTORS TRANSFERRED CVA SPACE 4,15 ** CVA - CONVERT ADDRESS. * * THIS SUBROUTINE PERFORMS THE CONVERSION OF LOGICAL * TO PHYSICAL DISK ADDRESS. IT IS OVERLAYED BY THE * THE CONVERSION ROUTINE FOR THE SPECIFIED EQUIPMENT. * * ENTRY (B6) = MESSAGE ADDRESS. * * EXIT NONE. * * USES X - 0, 1, 2, 6, 7. * A - 1, 2, 6, 7. * B - NONE. * * CALLS WOD. * WILL NEED WORK HERE FOR MULTI-PARTITION DEVICES. CVA PS ENTRY/EXIT SA2 D+6 PLACE TRACK AND SECTOR MX0 -12 AX2 12 BX6 -X0*X2 AX2 12 BX7 -X0*X2 LX7 15*3 LX6 9*3 BX1 X7+X6 RJ WOD SA1 CVAA SA2 A1+B1 IX6 X1+X6 IX7 X2+X7 SA6 B6 SA7 B6+B1 EQ CVA RETURN CVAA CON 10HT0000 S000-10H0000000000 CON 10H0. -10H0000000000 BSS 10 CVAE BSS 0 DCH SPACE 4,15 ** DCH - DATA CHECK. * * ENTRY (SBUF - SBUF+77B) = SECTOR TO BE CHECKED. * * USES X - 0, 1, 2, 6, 7. * A - 1, 2, 6, 7. * B - 2, 5, 6, 7. * * CALLS COD, GDB, WOD. * * MACROS MESSAGE. DCH4 NZ B7,DCHX IF ERRORS FOUND RETURN MESSAGE (=C*DATA OK.*) DCH SUBR ENTRY/EXIT SA1 ND ZR X1,DCHX IF NO DATA GENERATED SA1 SBUF+1 SB5 B1 BX6 X1 SA6 TBUF+1 SB7 B0+ RJ GDB REGENERATE DATA DCH1 SB6 77B DCH2 SA1 TBUF+B5 SA2 SBUF+B5 SB5 B5+B1 BX7 X2-X1 GT B5,B6,DCH4 IF END OF CHECK ZR X7,DCH2 IF DATA MATCHES LX6 X2 SB7 B1 ERROR FLAG SA6 DCHA SA7 A6+B1 BX0 X1 SX1 B5 SB6 B0 RJ COD CONVERT WORD NUMBER LX6 6 SX1 B1 IX6 X6+X1 BX1 X0 SA6 DCHD DCH3 RJ WOD CONVERT DATA SA1 TMES+B6 MESSAGE TYPE SA2 DCHD SA6 DCHE MX0 -24 SA7 A6+B1 BX2 -X0*X2 MERGE MESSAGE TYPE BX1 X0*X1 BX6 X2+X1 SA6 A2 MESSAGE DCHC,,R SA1 DCHA+B6 SB2 B6-B1 SB6 B6+B1 NE B2,B1,DCH3 IF MORE MESSAGES FOR THIS ERROR EQ DCH1 DCHA CON 0 TEMPORARY DCHB CON 0 TEMPORARY DCHC DATA 10HEQXXX,DATA DCHD CON 10H .... 000, DCHE CON 0,0,0 TMES CON 6L EXP TABLE OF MESSAGES CON 6L READ CON 6L DIFF ERR SPACE 4,15 ** ERR - SEND ERROR MESSAGE. * * ENTRY (X5) = SECTOR NUMBER, JSN AND MFID READ. * (X4) = 0 IF REGISTERS MUST BE SAVED. * (X2) = SECOND WORD OF MESSAGE. * (X1) = FIRST WORD OF MESSAGE. * * USES X - 0, 1, 2, 3, 4, 6, 7. * A - 1, 2, 3, 6, 7. * B - 6 * * CALLS CVA, WOD. * * MACROS MESSAGE, RECALL, RPHR, STATUS. ERR SUBR ENTRY/EXIT BX6 X1 LX7 X2 SA6 ERRB MX6 -24 BX6 -X6*X5 SA7 A6+B1 SA6 ERRH RECALL D NZ X4,ERR1 IF REGISTERS ALREADY SAVED SA2 D+2 SA3 D+3 LX6 X5 BX7 X2 SA2 D+6 SA6 ERRA LX6 X3 SA7 A6+B1 BX7 X0 SA6 A7+B1 LX6 X2 SA7 A6+B1 SA6 A6+2 ERR1 SA2 ERRH POSITION TO ERROR SA1 D+1 BX6 X2 SX7 X1 SA6 D+6 SX6 X1+B1 SA7 A1+B1 SA6 A7+B1 RPHR D,R STATUS X2,P SA1 ERRH MERGE RANDOM ADDRESS TRACK AND SECTOR SA2 D+6 MX0 30 LX2 18 BX1 -X0*X1 BX2 X0*X2 BX1 X1+X2 RJ WOD CONVERT RANDOM ADDRESS TRACK AND SECTOR SA1 ERRE MX0 -18 SA2 A1+B1 BX1 X0*X1 LX7 -24 MX4 24 BX3 -X0*X7 BX2 -X4*X2 BX4 X4*X7 BX7 X1+X3 MERGE RANDOM ADDRESS IN MESSAGE SA3 A2+B1 BX2 X4+X2 SA7 A1 MX4 -24 BX7 -X4*X6 AX6 24 BX2 X4*X2 CLEAR TRACK BX6 -X4*X6 LX4 24 BX3 X4*X3 CLEAR SECTOR BX6 X6+X2 MERGE TRACK IN MESSAGE LX7 24 SA6 A2 BX7 X7+X3 MERGE SECTOR IN MESSAGE SA7 A3 SB6 ERRD RJ CVA CONVERT ADDRESS MESSAGE ERRB,,R MESSAGE ERRE,,R EQ ERRX RETURN ERRA BSS 5 ERRB DATA 10HEQXXX,ZZZZ ERRC CON 10H ERROR AT ERRD CON 0,0 CON 0 END OF LINE FOR FIRST MESSAGE ERRE DATA 10HEQXXX,R000 ERRF CON 10H0000,T0000 ERRG CON 7L,S0000. ERRH CON 0 RANDOM ADDRESS TEMPORARY GDB SPACE 4,15 ** GDB - GENERATE DATA BUFFER. * * ENTRY (X6) = RANDOM NUMBER WHICH WILL GENERATE BUFFER. * (A6) = ADDRESS OF RANDOM NUMBER IN BUFFER. * * EXIT (X6) = CHECKSUM OF BUFFER. * (X7) = LAST DATA WORD STORED IN BUFFER. * (B2) = (B3) = NUMBER OF DATA WORDS GENERATED. * (A6) = ADDRESS OF LAST WORD IN BUFFER. * * USES X - 2, 6, 7. * A - 2, 6, 7. * B - 2, 3. GDB SUBR ENTRY/EXIT SA2 ND ZR X2,GDBX IF NO DATA GENERATION SB3 75B SB2 B0+ GDBA BX7 X6 SA7 A6 * THIS INSTRUCTION IS MODIFIED BY PRESET * EQ GDB2 IF NON-RANDOM PATTERN SX6 B0+ IF RANDOM PATTERN - CLEAR CHECKSUM GDB1 PX2 X7 DX7 X2*X2 IX7 X7+X2 SB2 B2+B1 LX2 15 IX7 X7+X2 LX2 19 IX7 X2+X7 SA7 A7+B1 IX6 X6+X7 ADVANCE CHECKSUM NE B2,B3,GDB1 IF MORE DATA TO GENERATE SA6 A7+B1 CHECKSUM IN LAST LOCATION OF BUFFER EQ GDBX GDB2 SB2 B2+B1 SA7 A7+B1 NE B2,B3,GDB2 IF BUFFER NOT FULL SA6 A7+B1 EQ GDBX MEM SPACE 4,15 ** MEM - REQUEST MEMORY. * * ENTRY (X1) = REQUESTED MEMORY. * * EXIT (IN) = (OUT) = (FIRST). * (LIMIT) = REQUESTED FIELD LENGTH. * * USES X - 2, 6, 7. * A - 2, 6, 7. * B - NONE. * * MACROS MEMORY. MEM SUBR ENTRY/EXIT SA2 D+1 SX7 X1-10B SX6 X2 SA7 D+4 LIMIT SA6 A7-B1 OUT SA6 A6-B1 IN MEMORY ,,R,X1 REQUEST MEMORY EQ MEMX RETURN MES SPACE 4,15 ** MES - SEND MESSAGE. * * ENTRY (X1) = MESSAGE ADDRESS. * * EXIT MESSAGE SENT TO CONTROL POINT AND JOB DAYFILE. * * USES X - 0. * A - NONE. * B - NONE. * * MACROS MESSAGE. MES SUBR ENTRY/EXIT SX0 X1+ MESSAGE X1,1,R MESSAGE X0,3,R EQ MESX RETURN RNO SPACE 4 ** RNO - GENERATE RANDOM SECTOR NUMBER. * * ENTRY NONE. * * EXIT (X6) = RANDOM SECTOR NUMBER IN FILE. * * USES X - 1, 3, 5, 6. * A - 1, 3, 5, 6. * B - NONE. RNO SUBR ENTRY/EXIT RNO1 SA1 RNOA LAST NUMBER SA3 SM SECTOR MASK SA5 NS NUMBER OF SECTORS PX1 X1 DX6 X1*X1 IX6 X1+X6 LX1 15 IX6 X1+X6 LX1 19 IX6 X1+X6 SA6 A1 SAVE NEW NUMBER SA1 TL IX5 X5-X1 BX6 -X3*X6 SA1 RO CHECK ROLLOUT SIMULATION REQUEST ZR X1,RNO2 IF NO ROLLOUT SIMULATION IX6 X1+X6 ROUND SECTOR ADDRESS UP TO MULTIPLE OF 32 AX6 5 LX6 5 RNO2 BSS 0 IX3 X5-X6 ZR X6,RNO1 IF SECTOR NUMBER = 0 NG X3,RNO1 IF SECTOR NOT IN FILE EQ RNOX RETURN RNOA DATA 13576420735162531625B WIC SPACE 4,10 ** WIC - WAIT I/O COMPLETE. * * ENTRY (BD) = 2 IF DEVICE IS BUFFERED. * * USES X - 1, 2, 3. * A - 1. * B - NONE. * * MACROS MESSAGE, RECALL, RTIME. WIC SUBR SA1 BD LX1 59-1 PL X1,WICX IF DEVICE NOT BUFFERED MESSAGE (=C* WAIT I/O COMPLETE.*),1,R RTIME WICA FETCH TIME SA1 WICA MX3 -36 BX2 -X3*X1 SAVE START TIME WIC1 RECALL DELAY RTIME WICA CHECK TIME SA1 WICA BX1 -X3*X1 IX1 X1-X2 TIME SINCE FIRST CALL SX1 X1-3000 NG X1,WIC1 IF 3 SECONDS NOT ELAPSED EQ WICX RETURN WICA BSS 1 SPACE 4 ** COMMON DECKS. ERP1$ EQU 1 ENABLE I/O ERROR PROCESSING *CALL COMCCDD *CALL COMCCOD *CALL COMCCIO *CALL COMCCFD *CALL COMCLFM *CALL COMCRDW *CALL COMCSYS *CALL COMCWOD *CALL COMCWTW BUFFERS SPACE 4 TITLE BUFFERS. USE // SEG BUFS BSS 0 TRRD EQU BUFS+1 TABLE OF SECTORS FOR RANDOM READ WITH LIST TBUF EQU TRRD+41 TEST BUFFER FOR PATTERN REGENERATION SBUF EQU TBUF+100B DBUF EQU SBUF+100B MFL= EQU DBUF+DBUFL+10B+200000B TITLE PRESET. ORG BUFS ** THE FOLLOWING CODE IS OVERLAYED BY BUFFERS. * COMMON DECKS *CALL COMCARG *CALL COMCCPM *CALL COMCDXB *CALL COMCMVE PRS SPACE 4 ** PRS - PRESET PROGRAM. * * ENTRY (B7) = 1 IF ADDRESS CONVERSION PRESET. PRS SUBR ENTRY/EXIT SYSTEM RSB,R,PRSF SET EXTENDED MEMORY TRACK SHIFT SA1 EMTS MX0 -2 LX1 0-29 BX6 -X0*X1 SA6 A1 EQ B7,B1,PRS5 IF ADDRESS CONVERSION PRESET MODE 1 GETJN JN GET JSN MACHID PRSH GET MAINFRAME ID SA1 PRSH MERGE JSN AND MFID SA2 JN LX1 24 BX6 X1+X2 SA6 A2+ REQUEST D STATUS X2,P SA1 D+6 BX6 X1 AX6 48 SA6 PRSG SAVE EST ORDINAL RJ WOD CONVERT EST ORDINAL SA1 D+1 AX6 6 POSITION EST ORDINAL MX0 12 BX1 X0*X1 MX0 18 LX0 -12 BX6 X0*X6 BX6 X6+X1 MERGE EST ORDINAL AND TYPE MX0 -30 SA1 DCHC SET EQUIPMENT IN MESSAGES BX1 -X0*X1 BX7 X6+X1 SA7 DCHC SA1 ERRE BX1 -X0*X1 BX7 X6+X1 SA7 ERRE SA1 CKSA-1 SB2 B0+ SB3 4 PRS1 SA1 A1+B1 BX1 -X0*X1 SB2 B2+1 BX7 X6+X1 SA7 A1 LT B2,B3,PRS1 IF MORE MESSAGES MX6 0 SA6 D+5 SA6 A6+B1 * IDENTIFY ASSIGNED EQUIPMENT. SA2 TEQP SA1 D+B1 MX0 -24 MX5 1 SET EP BIT IN FET MX4 12 LX5 44-59 SX7 B1 PRS2 ZR X2,PRS8 IF END OF TABLE BX3 X2-X1 BX6 X4*X3 LX3 X2 SA2 A2+B1 NZ X6,PRS2 IF NO EQUIPMENT MATCH BX6 X1+X5 SA6 A1 SET EPR BIT IN FET BX6 -X0*X3 IX6 X6-X7 SA6 NS MX7 12 SET SECTOR MASK NX6 X6,B2 AX7 X7,B2 AX3 24 SA7 A6+B1 MX0 -6 BX6 -X0*X3 SA6 BD SET BUFFERED DEVICE FLAG AX3 6 SX2 X3 ZR X2,PRS8 IF ILLEGAL EQUIPMENT MOVE CVAE-CVA,X2,CVA * RETRIEVE ARGUMENTS. SA1 ACTR ARGUMENT COUNT SB7 B0 SB4 X1 SA4 ARGR FIRST ARGUMENT SB5 TARG ARGUMENT TABLE RJ ARG PROCESS ARGUMENTS NZ X1,PRS7 IF ARGUMENT ERROR * PROCESS *N* PARAMETER (NUMBER OF SECTORS). SA5 NS NUMBER OF SECTORS MX2 14B BX3 X2*X5 ZR X3,PRS3 IF ARGUMENT OMITTED SA3 =0L* BX3 X3-X5 AX3 18 NZ X3,PRS2.1 IF NOT /*/ RJ CNS CALCULATE NUMBER OF SECTORS EQ PRS2.2 SET NUMBER OF SECTORS PRS2.1 RJ DXB CONVERT ARGUMENT SX1 B1 IX6 X6-X1 ZR X6,PRS7 IF ARGUMENT ERROR PRS2.2 SA6 NS MX7 12 SET SECTOR MASK NX6 X6,B2 AX7 X7,B2 SA7 SM PRS3 SA1 NS SET SECTOR SIZE RJ CDD CONVERT TO DISPLAY SA6 PRSE+2 SX1 PRSE RJ MES SEND FILE SIZE MESSAGE * PROCESS *IO* PARAMETER (NUMBER OF I/O-S). SA5 IO SET NUMBER OF I/O-S ZR X5,PRS3.1 IF NUMBER OF I/O-S NOT SPECIFIED RJ DXB NZ X4,PRS7 IF ERROR IN CONVERSION EQ PRS3.2 SAVE NUMBER OF I/O-S PRS3.1 SA5 NS BASE NUMBER OF I/O-S ON NUMBER OF SECTORS AX5 7 BX6 X5 PRS3.2 SA6 IO * PROCESS *TL* PARAMETER (TRANSFER LENGTH). SA5 TL SET TRANSFER LENGTH RJ DXB NZ X4,PRS7 IF ERROR IN CONVERSION ZR X6,PRS7 IF INVALID TRANSFER LENGTH SA6 A5 SA5 NS IX6 X5-X6 NG X6,PRS7 IF TRANSFER SIZE GREATER THAN FILE SIZE * PROCESS *P* PARAMETER (SELECT TEST PATTERN). PRS3.3 SA5 TP RJ DXB NZ X4,PRS7 IF ARGUMENT ERROR SB5 X6-TPATL+1 BX5 X6 GT B5,B0,PRS7 IF ARGUMENT ERROR SA1 X6+TPAT SA2 PRSA BX6 X1 LX7 X2 SB5 X5-5 ZR B5,PRS4 IF P=5 (RANDOM PATTERN) SA7 GDBA SETS AN INSTRUCTION IN GDB PRS4 SA6 TP SX7 X5-4 SA7 ND SET NO DATA FLAG ZR X7,PRS4.1 IF P=4 SX7 X5-6 NZ X7,PRS4.1 IF NOT P=6 SA7 ND SET NO DATA FLAG SA7 NT SET NO DATA TRANSFER FLAG PRS4.1 SA1 NS SET INCREMENT FOR POSITION TEST SX2 B1+ AX1 6 IX7 X1+X2 SA7 POSA * PROCESS *T* PARAMETER (SELECT TEST SECTION). SA5 TS RJ DXB NZ X4,PRS7 IF ARGUMENT ERROR SX3 X6-6 PL X3,PRS7 IF ARGUMENT ERROR SA6 TS EQ PRSX RETURN * PRESET FOR ADDRESS CONVERSION. PRS5 SA1 ACTR SA4 ARGR SB5 TART SB4 X1+ RJ ARG PROCESS ARGUMENTS NZ X1,PRS7 IF ARGUMENT ERROR SA1 PRSB SA5 PRSC ADDRESS SA2 TEQP-1 PRS6 SA2 A2+B1 ZR X2,PRS8 IF EQUIPMENT NOT FOUND BX3 X2-X1 AX3 48 NZ X3,PRS6 IF NO MATCH BX6 X2 LX2 30 SA6 A1 SB6 X2 SB7 B0 RJ DXB NZ X4,PRS7 IF ARGUMENT ERROR SA6 PRSC SA5 PRSD RJ DXB CONVERT SECTOR NZ X4,PRS7 IF ARGUMENT ERROR MX0 -12 BX5 X0*X6 SA1 PRSC NZ X5,PRS7 IF TRACK ERROR BX5 X0*X1 LX1 12 NZ X5,PRS7 IF SECTOR ERROR BX6 X6+X1 LX6 12 SA6 D+6 SB4 CVA EQ B4,B5,PRSX IF TRACK AND SECTOR ADDRESS MOVE CVAE-CVA,B6,B4 EQ PRSX RETURN PRS7 MESSAGE (=C* ARGUMENT ERROR.*) EQ ABT3 ABORT PRS8 MESSAGE (=C* ILLEGAL EQUIPMENT.*) EQ ABT3 ABORT PRSA BX7 X6 SA7 A6 EQ GDB2 PRSB CON 0 DEVICE TYPE - NO DEFAULT PRSC DATA 0L0 TRACK PRSD CON 0 SECTOR PRSE DATA C* FILE SIZE = XXXXXXXXXX SECTORS.* PRSF VFD 24/1,18/MEFL,18/EMTS PRSG DATA 0 EST ORDINAL PRSH CON 0 MAINFRAME ID TITLE PRESET SUBROUTINES. CNS SPACE 4,20 ** CNS - CALCULATE NUMBER OF SECTORS. * * READS THE MST FOR THE SPECIFIED DEVICE AND COMPUTES * NS = (AVAILABLE TRACKS)*(SECTOR LIMIT) - 5. THIS SIZE * ALLOWS FOR BOI, EOR, EOF, EOI, AND AN EXTRA SECTOR. * FOR *LDAM* DEVICES, DO NOT TEST THE LAST *RWPC* SECTORS, * TO AVOID A TRACK LIMIT CAUSED BY LOGIC IN *1MS*. * * ENTRY (PRSG) = EST ORDINAL. * * EXIT (X6) = NUMBER OF SECTORS. * * USES X - 1, 2, 3, 4, 6. * A - 1, 2. * * CALLS RSB=. CNS SUBR SX1 CNSA READ EST POINTER SX2 ESTP SX3 B1 SX4 B0 RJ RSB= READ POINTER * READ EST ENTRY FOR DEVICE. SA1 PRSG SA2 CNSA SX3 ESTE AX2 36 MX4 -24 IX1 X1*X3 BX2 -X4*X2 FWA EST SX3 EQDE IX2 X1+X2 EST ADDRESS FOR SPECIFIED DEVICE IX2 X2+X3 SX1 CNSB READ *EQDE* WORD OF EST ENTRY SX3 B1 SX4 B0 RJ RSB= READ EST * READ MST FOR SPECIFIED DEVICE. SA1 CNSB MX2 -12 GET MST ADDRESS BX2 -X2*X1 LX2 3 SX1 CNSC SX4 B0 SX3 MSTL RJ RSB= READ MST * CALCULATE NUMBER OF AVAILABLE SECTORS. SA1 CNSC+TDGL SA2 CNSC+MDGL MX3 -12 BX1 -X3*X1 NUMBER OF AVAILABLE TRACKS BX2 -X3*X2 SECTOR LIMIT SX1 X1+B1 ADD TRACK ALREADY ALLOCATED TO FILE IX1 X1*X2 SX4 5 IX6 X1-X4 SET TOTAL SECTOR COUNT SA1 CNSB LX1 59-55 PL X1,CNSX IF NOT *LDAM* DEVICE SX1 RWPC DO NOT TEST THE LAST *RWPC* SECTORS IX6 X6-X1 EQ CNSX RETURN CNSA VFD 1/1,23/0,18/0,18/0 CNSB VFD 1/1,23/0,18/0,18/0 CNSC VFD 1/1,23/0,18/0,18/0 BSS MSTL-1 SPACE 4,10 * COMMON DECKS. *CALL COMCRSB TITLE PRESET DATA. TARG BSS 0 MST ARGUMENT TABLE T ARG DZRO,TS,400B P ARG TP,TP,400B N ARG DZRO,NS,400B NW ARG -ONE,NW TL ARG TL,TL,400B NV ARG -ONE,NV RO ARG -T32,RO IO ARG IO,IO,400B ARG TART BSS 0 ARGUMENT TABLE FOR ADDRESS CONVERSION EQ ARG TEQP+1,PRSB,400B T ARG DZRO,PRSC,400B S ARG DZRO,PRSD,400B ARG DZRO DATA 1L0 DISPLAY CODE ZERO ONE DATA 1 CONSTANT 1 T32 DATA 32 CONSTANT 32 SPACE 4 CDV EQU CVA 819 SINGLE DENSITY CDW EQU CVA 819 DOUBLE DENSITY CDB EQU CVA PFMD - DEMA ACCESS CDC EQU CVA 895 CDF EQU CVA 887 (4KB SECTOR) CDH EQU CVA 887 (16KB SECTOR) CDN EQU CVA 9853 CEA EQU CVA 5832 (1X SSD) CEB EQU CVA 5832 (2X SSD) CEC EQU CVA 5833 (1X SABRE) CED EQU CVA 5833 (1XP SABRE) CEE EQU CVA 5833 (2X SABRE) CEF EQU CVA 5833 (2XP SABRE) CEG EQU CVA 5838 (1X ELITE) CEH EQU CVA 5838 (1XP ELITE) CEI EQU CVA 5838 (2X ELITE) CEJ EQU CVA 5838 (2XP ELITE) CEK EQU CVA 5838 (3XP ELITE) CEL EQU CVA 5838 (4X ELITE) CEM EQU CVA 5833 (3XP SABRE) CEN EQU CVA 5833 (4X SABRE) CEO EQU CVA 47444 (1X 3.5IN) CEP EQU CVA 47444 (1XP 3.5IN) CES EQU CVA 47444 (2X 3.5IN) CEU EQU CVA 47444 (2XP 3.5IN) CEV EQU CVA 47444 (3XP 3.5IN) CEW EQU CVA 47444 (4X 3.5IN) SPACE 4 ** TBLM - GENERATE TABLE VIA *TBL* MACRO. PURGMAC TBLM TBLM MACRO EQ IFC NE,*"DRN_EQ"*DI* IFC NE,*"DRN_EQ"*DJ* VFD 12/2R_EQ,18/C_EQ,6/BF_EQ ELSE 1 VFD 12/2R_EQ,18/CVA,6/BF_EQ IFNE NT_EQ,0 VFD 24/NT_EQ*SL_EQ/2 ELSE 1 VFD 24/3400B ENDM TEQP BSS 0 TABLE OF EQUIPMENTS LIST G TBL "MSEQ" LIST -G CON 0 END OF TABLE TPAT BSS 0 TABLE OF PATTERNS. DATA 0 DATA -0 DATA 25252525252525252525B DATA 52525252525252525252B DATA 0 DATA 13576420735162531625B DATA 0 TPATL EQU *-TPAT PRS SPACE 4 TITLE ADDRESS CONVERSION ROUTINES. CDE SPACE 4 ** CDE - CONVERT *DE* ADDRESS. CDE BSS 0 CDP SPACE 4,10 ** CDP - CONVERT *DP* ADDRESS. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 6, 7. * B - NONE. * * CALLS WOD. CDP BSS 0 LOC CVA CVA PS ENTRY/EXIT SA1 EMTS GET EM TRACK SHIFT SB2 X1+10 SB3 X1+4 MX6 -12 SA1 D+6 READ POSITION AX1 12 EXTRACT SECTOR BX7 -X6*X1 SX4 3777B LX7 6 SECTOR * 101B BX6 -X6*X1 IX3 X7+X6 AX1 12 EXTRACT TRACK BX2 X4*X1 TRACK * 101 * SECTOR LIMIT LX2 B2 BX7 X4*X1 LX7 B3 IX2 X7+X2 IX1 X2+X3 LX1 12*3 POSITION DATA RJ WOD CONVERT DATA SA1 CDEA SA2 A1+B1 IX6 X1+X6 IX7 X2+X7 SA6 B6 SA7 B6+B1 EQ CVA RETURN CDEA CON 10HA0000000. -10H0000000000 CON 10H -10H0000000000 ERRNG CVAE-* LOC *O SPACE 4 END