IDENT TST,FET ABS SST FL ENTRY TST ENTRY MFL= ENTRY SSJ= SYSCOM B1 *COMMENT TST - TAPE STORAGE TEST. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. TITLE TST - TAPE STORAGE TEST. SPACE 4 *** TST - TAPE STORAGE TEST. * P. C. SMITH. 91/11/08. SPACE 4 *** TST IS A CENTRAL PROCESSOR DRIVEN TAPE STORAGE TEST. IT * PERFORMS SEQUENTIAL WRITES AND READS ON A SELECTED TAPE * DEVICE, AND REPORTS THE PERFORMANCE ACHIEVED. * * OPERATING INSTRUCTIONS. * WHEN CALLED, TST ASSUMES THAT THE FILE *TAPE1* HAS BEEN * PREASSIGNED. * * SEQUENTIAL WRITE. * RANDOM DATA IS WRITTEN SEQUENTIALLY ON THE FILE IN THIS * FORMAT - 1 WORD CONTAINING THE SECTOR 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. * * THERE IS A FORTY SECOND PAUSE FOLLOWING THE WRITE SECTION OF * THE TEST TO ALLOW THE REWIND TO COMPLETE 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. * * 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. SECTOR NUMBERS * ARE GENERATED AND CHECKED. * 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. * SECTOR NUMBERS ARE GENERATED AND CHECKED. * * N NUMBER OF 100B-WORD SECTORS (CAN BE EQUATED). * N=0 GIVES ARGUMENT ERROR MESSAGE AND PROGRAM ABORT. * N=XXXX WILL ENABLE THE TEST TO BE RUN ON XXXX SECTORS. * (BE CAREFUL THAT TRACK LIMIT IS NOT EXCEEDED) * N GIVES DEFAULT VALUE (SEE TABLE TEQP). * * NW NO WRITE PERFORMED AT BEGINING OF TEST. * * BS BLOCK SIZE (MUST BE MULTIPLE OF 1000B). * * 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 TST 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.*. * TST 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. * * *TST TRANSFER RATE = XXXXXX.XXX KC.* = THE TAPE TRANSFER * RATE FOR THE PREVIOUS SECTION WAS * XXXXXX.XXX KILO-CHARACTERS 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 TST. * * *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. * * * TST ERROR - GO / DROP.* = *TST* HAS DETECTED AN * IRRECOVERABLE READ ERROR. * * * END TAPE STORAGE TEST.* = END OF TEST. SPACE 4 ** COMMON DECKS. *CALL COMCMAC *CALL COMCCMD SPACE 4 **** ASSEMBLY CONSTANTS. TBUFL EQU 4001B **** TITLE DATA. FET SPACE 4 * FILE FET. ORG 110B FET BSS 0 T BSS 0 TAPE1 FILEB TBUF,TBUFL,EPR,(FET=8) * 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 ND CON 0 NULL DATA FLAG NT CON 1 NO DATA TRANSFER FLAG BS CON 1000B BLOCK SIZE (PRU SIZE) * SPECIAL ENTRY POINTS. SSJ= EQU 0 TITLE MAIN PROGRAM. TST SPACE 4 ** TST - MAIN PROGRAM. TST SB1 1 (B1) = 1 SB7 B0 SX6 A0 SA6 FL RJ PRS PRESET TST1 SA1 NW NZ X1,TST2 IF NO WRITE RJ WSQ WRITE SEQUENTIAL RJ WRC WAIT REWIND COMPLETE TST2 SA1 TS ZR X1,TST3 IF ALL SECTIONS SELECTED SB5 X1-1 ZR B5,TST4 IF ONLY WRITE SELECTED TST3 RJ RSQ READ SEQUENTIAL TST4 SA1 B0 LX1 59-8 PL X1,TST5 IF REPEAT TEST NOT SET RJ WRC WAIT REWIND COMPLETE EQ TST1 CONTINUE TST5 MESSAGE (=C* END TAPE STORAGE TEST.*) ENDRUN 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 T,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 SA1 TP GENERATE SECTOR TO WRITE BX7 X5 BX6 X1 SA7 SBUF SA6 SBUF+1 RJ GDB GENERATE DATA BUFFER SA7 TP SX2 T 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 T,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 T,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 T RSQ3 SX2 T 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 RSQA SAVE RANDOM ADDRESS IX0 X0-X2 DECREMENT SECTOR COUNTER RJ CKS CHECK SECTOR SA5 RSQA ZR X4,RSQ3 IF NO ERROR DETECTED SA1 T+1 RESTART READ ON ERROR SX2 B1 IX7 X5+X2 SET RANDOM ADDRESS TO NEXT SECTOR SX6 X1 SA6 A1+B1 SA7 T+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 RSQA CON 0 TEMPORARY 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*$TST 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). SX6 B5 IX6 X6-X3 (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 X3 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 SX6 B5 IX6 X6-X3 (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 X3 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 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, T+2, T+3, X0, T+6 WHEN RETURNING FROM ERROR. * * CALLS ABT, DCH, ERR. CKS SUBR ENTRY/EXIT SA3 T+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 BX6 X4-X5 NZ X6,CKS3 IF POSITION ERROR SX6 X4+B1 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 T+2 SA7 T+3 LX6 X2 BX0 X1 SA6 T+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 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 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*TST TRANSFER RATE = XXXXXX.XXX KC.* CTRB CON 0 SECTORS TRANSFERRED 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 PBUF+1 SB7 B0+ RJ GDB REGENERATE DATA DCH1 SB6 77B DCH2 SA1 PBUF+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 (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 SA7 A6+B1 RECALL T NZ X4,ERR1 IF REGISTERS ALREADY SAVED SA2 T+2 SA3 T+3 LX6 X5 BX7 X2 SA2 T+6 SA6 ERRA LX6 X3 SA7 A6+B1 BX7 X0 SA6 A7+B1 LX6 X2 SA7 A6+B1 SA6 A6+2 ERR1 MESSAGE ERRB,,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 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 T+1 SX7 X1-10B SX6 X2 SA7 T+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 WRC SPACE 4,10 ** WRC - WAIT REWIND COMPLETE. * * USES X - 1, 2, 3. * A - 1. * B - NONE. * * MACROS MESSAGE, RECALL, RTIME. WRC SUBR MESSAGE (=C* WAIT REWIND COMPLETE.*),1,R RTIME WRCA FETCH TIME REWIND T SA1 WRCA MX3 -36 BX2 -X3*X1 SAVE START TIME WRC1 RECALL DELAY RTIME WRCA CHECK TIME SA1 WRCA BX1 -X3*X1 IX1 X1-X2 TIME SINCE FIRST CALL SX1 X1-40000 NG X1,WRC1 IF 40 SECONDS NOT ELAPSED EQ WRCX RETURN WRCA 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 PBUF EQU BUFS+1 TEST BUFFER FOR PATTERN REGENERATION SBUF EQU PBUF+100B TBUF EQU SBUF+100B MFL= EQU TBUF+TBUFL+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 MODE 1 STATUS T,P SA1 T+6 RJ WOD CONVERT EST ORDINAL SA1 T+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 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 T+5 SA6 A6+B1 * IDENTIFY ASSIGNED EQUIPMENT. SA2 TEQP SA1 T+B1 MX0 -24 MX4 11 LX4 -1 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 -X0*X3 IX6 X6-X7 SA6 NS MX7 12 SET SECTOR MASK NX6 X6,B2 AX7 X7,B2 SA7 A6+B1 * RETRIEVE ARGUMENTS. SA1 ACTR ARGUMENT COUNT SB7 B0 FORCE OCTAL CONVERSION OF ARGUMENTS SB4 X1 SA4 ARGR FIRST ARGUMENT SB5 TARG ARGUMENT TABLE RJ ARG PROCESS ARGUMENTS NZ X1,PRS7 IF ARGUMENT ERROR SA5 NS NUMBER OF SECTORS MX2 12 BX3 X2*X5 ZR X3,PRS3 IF ARGUMENT OMITTED RJ DXB CONVERT OCTAL ARGUMENT NZ X4,PRS7 IF ERROR IN CONVERSION SX1 B1 IX6 X6-X1 ZR X6,PRS7 IF ARGUMENT ERROR 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 * PATTERN SELECTION. 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,PRS5 IF P=4 SX7 X5-6 NZ X7,PRS5 IF NOT P=6 SA7 ND SET NO DATA FLAG SA7 NT SET NO DATA TRANSFER FLAG * TEST SELECTION. PRS5 SA5 TS RJ DXB NZ X4,PRS7 IF ARGUMENT ERROR SX3 X6-6 PL X3,PRS7 IF ARGUMENT ERROR SA6 TS * BLOCK SIZE SELECTION. SA5 BS SPECIFIED BLOCK SIZE MX2 12 BX3 X2*X5 ZR X3,PRS6 IF ARGUMENT OMITTED RJ DXB CONVERT OCTAL ARGUMENT NZ X4,PRS7 IF ERROR IN CONVERSION BX5 X6 AX5 9 LX5 9 IX7 X6-X5 NZ X7,PRS7 IF NOT MULTIPLE OF 1000B PRS6 BX6 X5 SET MLRS FIELD IN FET SA6 T+6 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.* TARG BSS 0 TST ARGUMENT TABLE T ARG DZRO,TS,400B P ARG TP,TP,400B N ARG DZRO,NS,400B NW ARG -ONE,NW BS ARG BS,BS ARG DZRO DATA 1L0 DISPLAY CODE ZERO ONE DATA 1 CONSTANT 1 TEQP BSS 0 TABLE OF EQUIPMENTS VFD 12/2RMT,24/,24/100000B VFD 12/2RNT,24/,24/100000B VFD 12/2RCT,24/,24/100000B VFD 12/2RAT,24/,24/100000B 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 SPACE 4 END